안내

서비스 소개


프로그래밍에 학습에 대한 단상

좋은 장비는 많습니다. 뭘 어떻게 만들까요?좋은 장비는 많습니다. 뭘 어떻게 만들까요?

경험이 부족한 코더는 플랫폼이나 랭귀지 자체를 공부 대상으로 보지만, 프로그래머는 플랫폼의 특장점과 그 배경지식을 공부의 대상으로 봅니다.
Java, PHP, JavaScript, React.js를 공부하시겠습니까? 혹은 객체지향과 가상머신, HTTP 프로토콜 및 인터프리터, 웹 브라우저, GUI 아키텍쳐를 공부하시겠습니까?

코딩 공부?

세상에 수 많은 플랫폼과 라이브러리가 있고, 목적에 따라 실로 다양한 조합으로 프로그램을 구성하게 됩니다. 하지만 우리가 사는 동안 배우고 코딩 할 수 있는 시간은 정해져 있습니다. 모든 플랫폼이나 프레임워크, 라이브러리에 대해서 조목조목 배우며 통달 할 수는 없겠지요.

원리를 공부합시다.

그러므로 표면적인 기술 자체 보다는 그 안에 내재된 소프트웨어 개발의 원리(추상화, 재사용성, 의존성 분리 등)와 파일, 스트림, OS, 네트워킹, IP와 DNS, 프로그래밍 언어 같은 컴퓨터 기초 이론에 대한 이해를 먼저 충분히 할 필요가 있습니다.

이는 개발자로서 무언가를 만들어 나가기 위해 필요한 기초 재료입니다. 또 기초적인 원리에 대한 이해는 새로운 기술이나 플랫폼을 만났을 때, 그 학습 비용을 줄여 줄 수 있습니다.

배경 지식을 공부합시다.

많은 개발자들이 이론 공부보다는 코딩, 플랫폼으로 시작하는 공부를 좋아하지만, 그에 앞서서 개발하고자 하는 분야의 배경 지식을 넓게 공부 할 필요가 있습니다.

웹이라면 HTTP 프로토콜과 웹 브라우저 등, AI라면 선형대수와 패턴인식 등, 스트리밍이라면 소켓 통신 및 RTC 프로토콜 등, ERP라면 재무회계 및 RDB 모델링, 배치 프로세스 등, 스마트폰 앱이라면 GUI 프로그램 아키텍쳐 및 Android, iOS에서 프로세스의 라이프사이클 등, IoT라면 유무선통신과 센싱 기술 등, 임베디드라면 하드웨어 기술언어(HDL)의 특성 등…

코딩은 결국 도구입니다.

프로그래밍 언어, 플랫폼은 정말로 정말로 도구에 불과합니다. 도구가 아무리 다양해도 같은 목적을 띄고 있다면, 모두 비슷한 모양으로 수렴하기 마련입니다. 물론 세련되고 유용한 도구들과 고수준의 언어를 익히지 말자는 것은 아닙니다. 하지만 도구를 익히는 것과 개발에 필요한 배경 지식을 익히는 것을 명확히 분리 할 필요가 있겠습니다.

Android 앱으로 웹 서버를 구현 할 수도 있고, python으로 웹 브라우저를 만들 수 도 있습니다. JavaScript로 인공신경망을 만들 수도, iOS 앱으로 게임 서버를 구현 할 수도, Node.js로 동영상 플레이어를 만들 수 도 있습니다. 자 이제 무엇을 우선시해야 할 지 느낌이 오시죠?

어떻게 학습하면 좋을까?

제가 컴퓨터를 공부하면서, 또 지난 2년간 오프라인으로 수업을 진행하며 느낀점은, 프로그래밍 학습에 왕도가 있다면 그 첫째는 이론에 대한 이해이며, 그 둘째는 타인이 작성한 양질의 코드를 읽는 것입니다. 그리고 최악이 있다면 배경과 전체적인 흐름에 대한 이해 없이 랭귀지의 스펙을 암기하며 코드를 따라쳐가는 것이라 생각합니다. Codeflow는 말 그대로 코드의 흐름을 의미합니다. 기초적인 이론이 충족된 상태라면, 타인이 작성한 양질의 코드가 백지에서 시작해서 어떻게 발전해 나가는지 그 흐름과 아이디어를 지켜보는 것만으로 크게 성장 할 수 있다고 생각합니다.

맺음말

초등학생 때 재미있는 Flash 영상들을 보면서 Flash와 Action Script를 처음으로 개발이라는 길에 들어섰습니다. 이후 여느 애들이 그렇듯 게임에 빠져서 게임을 만들겠다며 WinAPI와 DirectX, 물리학을 공부하며 많은 시간을 보냈습니다. 또 이후에는 인터넷에 빠져 이후 한동안은 해킹과 웹 개발에 목을 메며 어린 시절을 보낸 기억이있습니다.

주먹구구식 코드에, 배경에 대한 제대로된 이해도 없이, 머리를 쥐어짜면서 화면에 점하나 글자 하나를 찍어내는 재미가 얼마나 크게 와 닿았던지 그렇게 제 한평생의 진로를 택하게 되었습니다. 개발자로서 가장 감사 할 점이 있다면, 시간과 여유가 된다면, 혹여 지금 당장 모르는 분야더라도 공부하고 배운다면, 제가 그리는 상상을 현실의 컴퓨터 안에 그려 낼 수 있다는 자신입니다. 프로그래밍이 제게 주는 무엇보다 큰 기쁨은 상상력과 무궁무진한 가능성이라고 생각합니다.

저 홀로 할 수 있는 프로그래밍 교육은 미약하지만, 이곳이 많은 전문가들이 양질의 컨텐츠를 생산하는 커뮤니티가 되어 많은 분들이 창작의 즐거움과 그 가능성을 키워갈 수 있는 곳이되었으면 합니다.

도구에 메이지 않고, 기술의 변화와 새로운 분야에 대한 도전을 즐기면서, 창의적이고 즐겁게 개발해 나가실 수 있길 바랍니다.
감사합니다.

2018년 4월 9일 김동욱 드림.

지원되지 않는 웹 브라우저거나 예기치 않은 오류가 발생했습니다.