회화부터 시작하는 C & Go 프로그래밍 입문

[Prologue] (문법 말고) 회화로 프로그래밍을 배워보자

by 지은 x NULL

들어가기에 앞서[pre-prologue]


강의 혹은 강좌라고 부를 만한 내용으로 채워질지 아직 확신은 없으나

프로그래밍에 대한 일련의 '글'을 써보려고 합니다.

4차 산업혁명의 시대이자 소프트웨어교육 의무화를 목전에 둔 요즘, 소프트웨어를 공부하려고 마음먹은 학생과 더 나아가 그 학생들을 가르쳐야 하는 선생님들에게 도움이 됐으면 좋겠습니다.

시류에 발맞추어 '코딩 교육'이란 이름으로 각종 사교육들이 유행처럼 번지고 있는데, 자칫 개발자를 양성하는 과정으로 변질되는 것 같아 아쉽기도 합니다. 제 생각에 지금의 학생들이 배워야 할 '코딩'이란 단순히 프로그래밍 언어를 가르쳐서 코더[coder]를 양산하려는 것이 아닙니다.

사실 코딩교육은 기술[skill]교육이 아니라 '새로운 역량을 키우는 과정이며 사고력을 훈련시키는 과정'이라는 혹자의 말에 전적으로 공감합니다. 지금의 학생들이 국/영/수를 당연히 배우듯이 빅데이터와 머신러닝을 알아야 일상의 문제를 풀 수 있는 사회가 곧 도래할 것이라고 생각합니다.(어쩌면 이미 도래한 것일 수도 있겠지요.)


학생들에게 프로그래밍 언어[language], 개발 언어의 문법 전체를 가르치지 않고도 필요한 무언가를 만들어내는 메이커[Maker]가 될 수 있다면 좋겠다는 생각에

문법이 아닌 '회화[conversation,會話]부터 시작하는 프로그래밍 입문'을 시도해보려고 합니다.

소프트웨어는 하드웨어(컴퓨터, 스마트폰 등의 기계)와 사람 사이의 매개체[medium]이고

전문가가 아닌 학생들과 일반 현대인들이 알아야 하는 프로그래밍이란 그 매개체를 이해하고 기계와 대화(일을 명령하고 지시하며, 그 결과를 해석)하는 방법을 배우는 것이니까요.

이제는 그리 특별할 것도 없는 인문계 출신의 개발자로서, 기존의 관습적인 코딩 교육과 앞으로 필요해질 역량계발 교육간의 간극을 좁힐 방안을 고민 중입니다.


이러한 생각들로, 다음의 컨셉으로 시작해보겠습니다.

기초 중의 기초이자 아이들을 위한 스크래치 같은 도구를 사용해서 시작하는 것도 좋지만,
- 좀 더 실생활에 맞게
- '실전 언어'로 프로그래밍을 배워보자
- 문법 말고 회화부터
- 그것도 두 가지를 동시에(2 in 1, 1+1으로).


"세상에는 세 종류의 사람이 있다. 일을 꾸미는 사람, 일이 벌어지는 것을 지켜보는 사람, 그리고 무슨 일이 있었나 의아해 하는 사람이다." - 필립 코틀러 @한국경제신문사에서

두 가지 '실전 언어'란 C언어와 Go언어입니다.

교육용으로 만들어진 언어가 아니며(그만큼 어려울 수도 있지만), 실제 사용할 수 있는 프로그램을 만들 수 있는 언어라는 점에서 훨씬 실용적인 내용이 될 것으로 기대합니다.

물론 이 글타래[thread]는 매우 기초적인 수준에서 마무리 되겠지만 이후 응용 및 활용은 각자의 노력과 역량에 따라 무한할 테지요.

그 장점과 내용에 대해서는 아래에 본격적으로 이어집니다.





예고없이 내용 수정이 있을 수 있으며, 다음 콘텐츠 업데이트 시기가 일정치 않으므로 관심있으신 분들은 매거진 구독 혹은 Like it 부탁드립니다. 미리 감사드려요 :)

매거진 주소는 "golang(Go언어)"입니다. https://brunch.co.kr/magazine/golang
@20170410




[프롤로그]

회화부터 시작하는 C & Go 프로그래밍 입문

#0. 들어가며



왜 C와 Go인가?

파이썬, 자바스크립트 등 한창 뜨는 언어들이 있지만
'전통의' C언어로 프로그래밍을 공부하는 사람들도 있을 것이다.
C언어의 장점은

- 오랜 세월(무려 45년!)이 흐른 만큼 책, 자료, 코드, 예제 등등이 많고
- 직관적으로 이해가 쉽다. (객체지향 개념 등이 없으므로)
물론 포인터, 메모리 관리 등 조금만 깊이를 가지면 어려운 내용이 산적해 있지만,
개발자로서의 코딩이 아닌 소프트웨어 교육 즉, 논리적인 프로그래밍 교육에 있어서는
C만큼 간편하면서도 쉬운(?) 언어가 또 없다.
(필자도 GW Basic에 이어 Turbo C로 프로그래밍의 세계에 입문했던 기억이 있다.)

하지만 C언어로 CUI(GUI가 아님)의 까만 터미널에서 별(*)을 찍고 있노라면
HTMLCSS를 활용한 자바스크립트만큼의 화려함(?)이 없기에 금세 흥미를 잃을 수도 있다.
물론 필자도 스크립트 언어가 굉장히 쉬우면서도 유용하고, 학습이 용이하면서 실무에서 응용도 가능한 좋은 솔루션이라고 생각하지만,
프로그래밍의 기본이라고 할 수 있는 알고리즘과 자료구조, 로직을 이해하는 데는 C가 적격이라고 생각한다.
개발자가 되려는 생각이 없는 학습자들(=일반인, IT 업계와 무관하며 코딩을 업으로 삼을 마음이 없는 사람들, 특히 학생들)의 경우 아주아주 간단한 프로그램, 예를 들면 구구단을 찍기 위해 HTML과 스크립트를 모두 같이 배울 필요가 있을까?

컴파일 언어의 장점은 여기서는 중요치 않을 것이다.
수십년간 검증된 C 언어로 기초를 익히고

차이점을 약간만 더 (학습)하여
만들어진지 8년밖에 안 된 구글의 최신(!) Go 언어로 실무에 적용이 가능한 새로운 언어도 익혀보자.



대상 독자는?

세상에 프로그래밍 언어는 많고 그만큼 입문서도 많다.

훌륭한 책도 많고 좋은 내용은 대부분 어딘가에 다 있지만,

이 글의 대상은 아마도 다음 조건들 중 두 가지 이상을 동시에 충족하는 사람일 것이다.

처음 프로그래밍 세계에 입문하고 싶은 학생/일반인

(이미 알고 있는) C 언어를 발판으로 새로운 언어를 익히고 싶은 일반인(개발자 제외)

(멀티태스킹에 능하다고 자부하여) 남들보다 두 배로 빨리(!) 성장하고 싶은 사람


정말 드문 케이스겠지만 Go언어로 프로그래밍에 입문했다가

기본이라고 하는 C언어에 대한 미련이 남아 뒤늦게 공부하고 싶을 수도 있다.
요컨대 같은 동작/같은 작업을 두 가지 언어로 배워봄으로써

다른 언어로의 이행(C to Go, Go to C)을 돕는다.

물론

일반인의 프로그래밍에 대한 이해를 높이는 게 최우선이다. 이 경우 하나의 언어(코드)만 쭉 봐도 무방하겠다.



학습의 주안점

앞서 밝혔듯 프로그래밍이란 무엇인가에 대한 감을 잡는 것이 목표이며,

이를 통해 논리적 사고를 함양하는 것이 좀 더 고차원적인 목표이다.

모두 공부한 후에는,

두 가지 언어를 동시에 배우고 구사할 수 있는
'bilingual'이 되는 것을 목표로 한다.

(※주의 : 어느 것 하나도 제대로 못할 수도 있다.)



구성은

사전식으로 개념을 하나하나 설명하기보다
각 챕터별로 실제로 동작하는 무언가를 만들어보면서
새로운 용어나 개념이 나올 때마다 설명을 더하는 것으로 한다.
그렇다보니 생략하는 개념이 많을 수도 있고
해당 챕터에 꼭 필요한 내용만 부분적으로 설명하여 큰 그림을 그리기 어려울 수도 있다.
하지만 전문 개발자가 되는 것이 목표가 아닌, 철저히 일반인을 대상으로,
프로그래밍에 대한 흥미를 유지하며 기초 원리에 대한 감을 잡을 수 있다면 더 바랄 것이 없겠다.
(단, 학습효과만을 위한 지나친 은유는 피하고 현업/실무에서 실제로 사용 중인 용어들로 직접 설명한다. 비유를 통한 학습은 어린 학생 또는 초심자에게 일부 유용할 수 있으나 검색의 시대에 그리 좋은 방법은 아닌 듯싶다.)


일반 언어(영어, 일어, 중국어 등의 '외국어')를 배우는 데 문법 설명보다는 회화 중심으로 시작하는 방법이 더 유용하다고 느낀다면, 프로그래밍 언어도 같은 방법으로 배워보자.
게다가 이것은 마치 영어랑 네덜란드어*를 동시에 배우는 획기적인 강좌를 준비한 것이다.

(*C와 Go의 유사성이 그정도로 있다고 볼 수 있을지 확신은 없지만 대략 그런 느낌적인 느낌..으로)

첫술에 배부를 수는 없다. 하지만 열 숟가락 정도면 허기를 달래고 갈증을 해결해줄 만한 것은 만들어보고자 한다.

따라서 과감한 생략과 '문법'이 아닌 '회화' 위주의 강의를 통해 빠르게(?) 진행할 예정이고,

더 공부하고 싶은 분들을 위해 필요한 내용 및 알아두면 좋은 내용들은 검색어(keyword)를 남겨둘 것이다.

예를 들어 '변수'나 'for문'에 대한 내용이 키워드로 나오면 필요할 때 "C언어 변수", "Go언어 for문" 등으로 네이버나 구글 등에서 찾아보면 되겠다. 질문도 환영이다.


이 강좌를 모두 마스터하고도 더 배워보고 싶고 흥미가 생긴다면 시중의 도서나 강의를 찾아 본격적으로 들어가길 빈다.




[강의별 학습목표(예정)]

C&Go로 프로그래밍을 한다.

C&Go로 구구단 프로그램을 작성할 수 있다.

C&Go로 별(*)을 이용한 그림을 자유자재로 그릴 수 있다.

C&Go로 움직이는 000을 만들 수 있다.

...

이하 준비 중이며, 강의 주제 요청/신청도 받습니다 :)




keyword