개념글 모음

1. 어떤 프로그래밍 언어가 좋은가요?


막 입문한 사람들은 어떤 프로그래밍 언어가 좋은가에 대한 집착을 갖는 경우가 있다. 결론부터 말하면 어떤 것을 써도 좋다. 근본적으로 프로그래밍 언어는 모두 학문적인 근거는 람다 대수학에 두고 있고, 프로그래밍 언어는 모두 이것을 만족하기 때문에 모든 프로그래밍 언어는 학술적인 관점에서는 동등하다고 볼 수 있다. 다만 주 대상자에 따라서 수없이 많은 방언을 가져다 붙였을 뿐이다. 입문시 최대한 많은 경험을 해 보고, 하고 싶은 분야가 점차 뚜렷해진다면 해당 분야에 특화된 언어들을 배우는 것이 좋다.


최대한 많은 경험을 할 수 있는 언어로는 아무래도 파이썬을 추천한다. 특히 2010년대를 풍미한 프로그래밍 언어인 만큼 다양한 시도를 할 수 있는 패키지들이 준비되어 있으며, 언어 런타임 자체의 특성을 배워야 할 필요도도 낮기 때문에 많이 추천되는 편이다.


주로 쓰이는 언어들과 그 용처들을 굳이 말해 보자면, 하드웨어 아키텍쳐별 어셈블리나 C는 하드웨어 드라이버나 커널 등 시스템 소프트웨어나 임베디드 등 자원이 제약된 환경에서, C++은 반응성 제약이 크거나 시스템 자원에 깊게 관여해야 하면서도 대규모 프로젝트를 관리해야 하는 커널, 운영체제, 게임 등의 소프트웨어에서, Swift는 애플의 에코시스템을 위한 응용 개발을 할 때, 자바스크립트 및 아종들은 웹 응용이나 서버 개발 등에 많이 사용되는 편이다. 자바는 여전히 서버 시장에서 굳건한 점유율을 보이고 있고, 코틀린이 JVM이라는 환경 위에 좋은 개발 경험을 위한 피쳐들을 얹어 안드로이드 응용 개발이나 서버 시장에서 마찬가지로 높은 점유율을 보이고 있다. C#은 윈도우 응용 개발이나 모노 기반 런타임을 지원하는 유니티, 언리얼 등의 엔진으로 게임을 개발하거나, 서버 개발에 많이 사용되고 있다. 찾아보면 온통 배울 가치가 있는 것들 뿐이다.


2. 컴퓨터공학적 지식이 중요한가요?


이것도 결론부터 말하면, 분야에 따라서 다르지만 초심자에게는 그닥 중요하지 않. 운영체제나 컴파일러 등 컴퓨터 자체에 깊게 관여하는 개발을 하고 싶다면 무조건 필요하다. 하지만 프론트엔드 개발이나 심지어는 게임을 개발한다고 해도 대규모만 아니라면 컴퓨터 공학 전반에 대한 중요도는 다소 떨어지는 편이다. 서버 또한 대규모 응용을 설계하는 입장이면 매우 중요하지만, 세부 피쳐를 개발해야 한다면 그렇게까지 중요하지는 않다. 무엇보다 개발을 하다 보면 자연스레 조금씩 알아가게 된다.


다만, 이 일을 실제 업으로 삼고 싶다면 개인적으로 컴퓨터 구조, 계산 이론, 운영체제, 알고리즘 이 4가지는 필수적으로 알아야 한다고 생각하는 편이다. 하지만 이 조차도 우선 '개발'을 어느 정도 해 놓고 나서 한계를 느낄때 배울 것을 권한다.


3. 어떻게 공부를 할 수 있죠?


이것도 중요하지 않다. 학원에 가서 배워도 되고, 유튜브를 통해서 배워도 되고, 아티클들을 읽는 방법으로 배워도 된다. 본인이 어떤 매체를 더 쉽게 받아들이는지에 따라서 이건 자유롭게 선택하면 된다. 다만 학원의 경우는 조금 신중하게 생각해야 한다. 강사의 성향에 따라서 잘못 가르치는 경우도 많기 때문. 개인적으로는 활자 매체에 익숙하기 때문에 아티클이나 개발 문서를 읽는 것을 매우 선호하는 편이다.


그보다 중요한 것은 실제 개발을 해 보는 것이다. 당신이 포토샵을 배워서 비주얼 아티스트가 되려고 한다고 해보자. 백날 이미 정해진 과정을 다 따라서 작업을 하면? 절대 성장하지 못한다. 이건 음악도, 요리도, 동영상도 마찬가지다. 어떤 영역으로 가든 결과물을 만들어야 되는 업종에서 일을 한다면 배운 것을 응용한 실습은 필수다. 스스로 무언가 개발하고자 하는 욕망이 없다면 개발자가 되기는 힘들다. 대신, 처음일수록 이 목표치를 낮게 잡는 것이 중요하다. 개발자 스스로 목표를 작게 분할해서 부분부분 달성해 나가는 Devide & conquer는 개발자 스스로의 심리적 부담감을 낮추고 덜 지치기 위해서 반드시 필요한 방법론이다. 정말 사소하게는 웹 기반의 메모 앱을 개발하는 것도 훌륭한 스타팅 프로젝트다.


4. 깃, Travis, Linter, 자동화... 다 배워야 하지 않나요?


일단

무조건

코드부터

작성해라


결국 위의 도구들도 개발을 해 본 사람들이 자신들의 불편을 해소하기 위해서 만들어진 것들이다. 개발하다 보면 자연스레 수요를 느끼게 된다. 그때 하면 된다. 오히려 그래야 그 필요성이 더 절실하게 느껴진다. 프로그래밍은 특성상 혼자서 공부하게 되는데 스스로 동기부여가 안 되는 것들 배워봤자 효율도 안 나오고 심리적으로 지친다.