이책에서다루는내용
프로그래밍의개요와C프로그래밍의개요
C프로그래밍의전체구조와흐름
난이도에따라나선형으로분산된C프로그래밍이론(개념,구조와흐름,기본,응용)
완성된코드를분석하는것이아닌직접프로그래밍할수있는힘을기르는방법
이책의대상독자
다양한프로그래밍교재를보고학습했음에도프로그래밍을포기했던‘프포자’
인생처음으로프로그래밍언어를배우고자하는누구나
프로그래머지망생,프로그래밍전공또는관련학과/학부학생
절차적프로그래밍부터기초를잡고객체지향프로그래밍으로넘어가고자하는자
이책의구성
1장.C프로그래밍의개념에서는전반적인프로그래밍의개요,C프로그래밍의개요를살펴본다.책을펴자마자무작정코드를작성하기보다프로그래밍이란무엇인지라는기초적인개념부터살펴보는것으로스스로왜프로그래밍을배우는지충분히납득한상태에서프로그래밍에첫발을디디게될것이다.다음으로프로그래밍실습을위한환경을구축하기위해컴파일러를준비하는과정을다룬다.
2장.C프로그래밍의구조와흐름에서는C프로그래밍의전체적인구조와프로그래밍이진행되는흐름을살펴본다.프로그래밍의구조와흐름을이해하기위해필요한최소한의이론만가볍게소개하면서C프로그래밍이라는전체적인한장의그림을그리게된다.프로그래밍의기본단위와시작점,기초개념,기본구조와흐름을배운뒤실무에서사용되는확장성을고려한프로그래밍구조를알아본다.이책에서는기존프로그래밍교재들과달리첫예제부터실무에서도활용되는구조를기반으로예제코드를작성할것이다.마지막으로프로그래밍은현재진행형의의미를갖고있으므로에러,경고,버그가발생했을때스스로수정할수있어야한다는것을전제로한다.따라서문제를해결하기위한필수적수단인디버깅을알아본다.
3장.C프로그래밍의기본에서는C프로그래밍언어를이해하기위한기본이론을논리적인흐름에따라15개의절로나눠배운다.3장은프로그래밍의시작부터끝까지흐름자체를이해할수있게세부적으로다섯부분으로구성했다.
4장.C프로그래밍의응용에서는3장을학습하는시점을기준으로난이도가높아3장에서학습하는것이비효율적이라뒤로미뤄뒀던응용이론을다룬다.응용이론은2개이상의이론이복합적으로다뤄지므로3장에서기본이론을모두이해한후에학습해야비로소쉽게이해된다.
저자의말
영어,일본어,프랑스어와같은언어를현지인과자연스럽게의사소통할만큼배우려면몇년정도필요할까?누구나가매일같이열심히공부해도최소수년이상,길게는10년이상걸린다고이야기할것이다.해당국가에서생활을하면서24시간해당언어에노출되는환경이라면기간이조금짧아지겠지만,모국에서생활하면서다른언어를자연스러운수준까지도달하는건매우드문경우다.
언어에는문법만존재하는것이아니라해당언어를사용해온사람들의문화,사고방식,철학,역사등이담겨있기때문이다.단순히문법만을배워서는절대어느수준이상도달할수없다.문법과더불어그들의문화,사고방식,철학,역사등을이해하려는과정을거치지않으면읽고듣는것까지는가능하게되더라도말하고쓰는것에도달하지못한다.즉,이미완성된문장은이해할수있으나스스로새로운문장을만들어낼수는없다.
그렇다면C프로그래밍언어와같은프로그래밍언어를스스로원하는기능을자유자재로구현할수있을만큼배우려면몇년정도필요할까?이질문에대해놀랍게도상당수의사람이생각보다굉장히짧은시간으로대답한다.대부분2~3년정해진수업시간에만열심히한다면프로그래머로취직해서자신이원하는코드를자유롭게짤수있을것이라고기대한다.
그러나현실은그렇지않다.머릿속에서생각하는대부분의기능을구현할수있을만큼하나의프로그래밍언어를체득하기까지는마치영어를체득하는시간만큼상당한기간이소요된다.그것도매일같이영어단어를외우고,영어로누군가와대화하려고노력하는것과동일한수준으로24시간을해당프로그래밍언어를사용하려고노력했을때최소5년정도소요된다고본다.
인간이사용하는언어와다르게오히려프로그래밍언어가배우기어려운것은해당언어를사용하는국가가존재하지않기때문이다.인간이사용하는언어를배우려면해당언어를사용하는국가에가서생활하면서24시간해당언어에노출되는것으로체득까지걸리는시간을단축할수있다.
프로그래밍언어를사용하는국가는없으나업계에취직해서프로그래밍팀에들어가면해당언어를사용하는국가에서생활하는것과그나마비슷한환경에노출된다.즉,24시간해당언어가머릿속에맴돌며화장실을가도,자려고누워도해결하지못한코드가보이게된다.그렇기때문에프로그래머로취업하면프로그래밍실력이급격하게느는경우가많은것이다.
반대로학생들은취업을하기전이러한환경에노출되기어렵기때문에일반언어와비교한다면읽고듣는것은가능하지만말하고쓰는단계까지도달하지못하는경우가많은것이다.문제는회사입장에서는신입이라고할지라도프로그래밍언어를마치말하고쓸수있는수준까지도달한사람을뽑고자한다는점이다.이는지극히당연한것이다.
대학과학원에서수많은프포자(프로그래밍을포기한자)가양산되는이유는먼저프로그래밍언어를배우는것을굉장히쉽게생각하고있기때문이다.영어와달리배우기위해필요한기간을짧게기대하고있었던만큼,1~2년동안많은노력을기울여도뚜렷한성장이눈으로보이지않기에스스로재능이없다고판단하고쉽게포기하게된다.
우리는왜‘프로그래밍언어’라고부를까?프로그래밍언어도하나의언어라는것을절대잊어서는안된다.프로그래밍언어가갖는각각의철학이있고,요구되는사고방식이별도로존재한다.단순히문법과제공된코드만열심히외워봐야기존에완성돼있는코드를분석하는것만가능해진다.결국국내에서이뤄지는영어학습의단점을답습해읽고듣는것만가능하게된다는의미다.프로그래밍언어를배워마치영어를자유롭게말하고쓰는단계까지도달하려면우리가영어를체득하려고노력하는것처럼24시간해당프로그래밍언어를수년간생각하고버릇이될정도로코딩을하는습관을가져야한다.
그리고무엇보다해당프로그래밍언어가갖고있는철학과사고방식을이해하고자하나의영혼을더가지려고노력해야한다.C프로그래밍언어를이해하려면모든사물을바라볼때‘기능별’로분리하고,논리적인사고를통해진행되는‘절차’를시각적으로표현하려고노력해야한다.
C++나C#프로그래밍언어가갖는철학과요구되는사고방식은C프로그래밍언어와전혀다르기때문에추가로또하나의영혼을가져야객체지향프로그래밍언어를이해할수있다는의미가된다.영어를잘하면알파벳을사용하는다른언어를배우기수월하겠지만해당언어의고유한것은처음부터다시배워야하는것과같다.
필자가대학에서학생들에게프로그래밍언어나게임엔진을가르치기시작하면서놀란건프로그래밍언어를배웠던학생들이생각보다빠른시점에,그리고상상을초월할정도로많은숫자가프로그래밍을포기했고지금도포기하고있다는사실이었다.
많은학생과상담해보면기존대부분의프로그래밍수업은완성된코드를마치암호처럼눈으로외우게하고,시험도마치역사시험처럼완벽한코드의빠진공란을채우는필기시험형태로진행됐기때문에코드가조금이라도변경돼야하는상황이발생하면어쩔줄모르겠다고하소연한다.영어를외우게하는한국의잘못된교육방법이프로그래밍언어의교육방법에까지이어진것이다.이러한교육환경에서스스로새로운코드를작성하지못하는건지극히당연하다.
따라서1~2년이나프로그래밍언어를배웠다는학생들이간단한에러가발생한순간,에러메시지가명확하게표시되고있는데도에러를해결하는방법을배우지못해빌드조차해보지못하고포기하는모습을자주보게된다.빌드가되지않으면에러코드를찾아보거나,빌드는성공했으나원하는대로동작하지않으면디버깅을하는것이아니라교재의본래코드를뚫어지게쳐다보면서오타를찾는것이현재대학에서이뤄지는프로그래밍수업이처한현실이다.
근본적으로“지금까지이뤄진프로그래밍수업의방향성이과연맞는가?”라는고민을자주하게된다.이책은수많은‘프포자’가자신감을갖고다시프로그래밍에도전해볼수있게실무에서이뤄지고있는프로그래밍의전체적인흐름을먼저알려주는것이목적이다.우리는스스로생각해서코드를작성할수있는프로그래머를키우는것이지,완성된코드를보고분석하는분석가를키우는것이아니다.간단한영어문장을스스로말하고쓸수있는것부터시작하는것이진정한언어교육의첫걸음인것과같이,중급이상의이론을학습하기보다기초적인이론만을활용해서직접코드를한줄씩작성할수있게끔하는것이프로그래밍언어교육의첫걸음이다.