Medium - How To Learn Any New Programming Language Quickly
in Trend
Trend 파악을 위한 Medium 기고문 포스팅 - 새로운 프로그래밍 언어를 빠르게 배우는 법; 기본적인 필수 개념 체크리스트
Photo by Clément H on Unsplash
이 기사는 여러분이 최소한 하나의 프로그래밍 언어를 알고있다고 가정하고 있습니다. 그러나 여기의 개념은 프로그래밍을 시작하는 분들에게도 도움이 될 것입니다. 제가 학생이었을 때 교수님이 말하셨던 것을 새로운 개발자들과 나누고 싶습니다; 가장 어려운 프로그래밍 언어는 여러분이 두번째로 배우게 될 언어입니다
너무 상처받지 마세요, 이 말은 처음 프로그램을 어떻게 하는지 배우게되면 그것들이 모두 프로그래밍의 선입견이 된다는 것입니다. 여러분의 생각보다 더 문법적인 연결과 가정을 하게 되는 것이죠. 이 때문에 여러분은 두번째 언어를 배우게 될 때 이런 가정을 없애야 합니다. 여러분이 두번째나 세번째 언어를 배우게 될 때 마음속으로 이런 백지 상태를 유지하도록 해보세요.
Anatomy of Programming
프로그래밍 언어는 가볍게 5,000개를 넘깁니다만 상위에 있는 것들은 250개 정도입니다. 그리고 상위의 20가지 언어들은 비슷한 표준 라이브러리를 가지고 있고 그렇게 다르지 않습니다. 그렇기 때문에 제 생각에는 이런 유사한 것들 외에 추가적으로 필요한 것만 학습하는 것이 최고의 방법이라고 생각합니다.
The Atoms
모든 언어의 측면은 결국 참과 거짓으로 볼 수 있습니다. 왜냐면 전기회로가 이렇게 동작하거든요, 전류를 가지고 있는지 아닌지 말이죠. 메모리는 0,1로 이뤄진 값들을 가지고 있고 이게 바로 비트가 전류가 있는지 아닌지로 구분됩니다.
8개의 비트들은 하나의 바이트로서 아스키코드를 충분히 나타낼 수 있습니다. 비트는 DECimal 표현에 따라서 플립되며 컴퓨터는 해당 문자를 어떻게 해석해야 할지 알고 있습니다.
Basic binary representation showing how the word Hello is created.
The Tools
Photo by Fleur on Unsplash
도구는 항상 똑같기 때문에 어떤 순서로 학습해도 상관없지만 저는 도구를 먼저 학습하는 편입니다.
Variables
간단해 보이지만 진지하게 여러분은 어떻게 변수를 만드시나요?
Operators
연산자는 무엇이고 어떻게 쓰이게 될까요? 기본 수학 연산자를 생각하셨을 수도 있지만 논리 연산자들은 어떨까요? “AND” 연산자가 and, AND로 될까요 아니면 && 같은 기호로 표현될까요?
Conditionals
여러분이 다음에 알아야 할 것은 프로그램에서 어떻게 결정을 내릴 수 있는지 하는 것입니다. 해당 언어가 고전적인 if/else if/else를 쓰는지 아니면 파이썬처럼 /if/elif/else를 쓰는지, switch, guard 문이 있는지 확인해 보셔야 합니다.
Loops
반복적인 작업을 어떻게 수행할 수 있을까요? for루프, while루프, do-while루프, for-each루프가 있나요?
Functions
함수를 만드는 것이 가능한가요? 그렇다면 어떻게 하나요? 함수안에 매개변수를 어떻게 포함시키나요? 함수를 적절하게 사용하는 법을 아는 것만으로 여러분의 시간을 훨씬 절약함과 동시에 삶도 편안하게 만들어 줄겁니다.
Classes and structs
해당 언어는 클래스나 구조체의 개념이 있나요? 바보같은 질문일 수도 있지만 어떤 언어는 둘다 없는 경우도 있습니다. 아니면 둘 중 하나만 가지고 있거나요, 만약 그렇다면 어떻게 클래스나 구조체를 만드나요? 클래스 생성자나 초기화 메소드를 요구하나요?
Error handling
에러는 피할 수가 없습니다. 에러가 발생하면 해당 언어는 튼튼한 에러 처리 솔루션이 있나요? 그렇다면 어떻게 쓰나요? try/catch 문구일 수도 있고 try/except 혹은 다른 것일 수도 있겠죠. else나 finally 처럼 에러를 위한 다른 옵션이 있나요??
Testing
테스트 코드를 어떻게 작성하나요? 내장된 테스트 라이브러리가 있나요? 아니면 분리된 툴로 다운받아야 하나요? 이런 도구들은 보통 최신 프로그래밍 언어에서는 있기 마련입니다. COBOL같이 오래된 언어라도 대개 가지고 있으나 패러그래프나 카피북이라고 다르게 불릴 뿐입니다.
Photo by Darius Soodmand on Unsplash
Getting Good
이런 도구들을 일단 익히고 나면 다음은 도구를 사용해서 응용프로그램을 작성해 보는 것입니다. 문서를 읽어서 언어를 이해할 수도 있겠지만 몇몇 응용프로그램을 작성하기 전까지는 언어를 알고 있는 것이 아닙니다. 응용프로그램을 작성하면서 여러분은 특정 언어를 사용하는 프로그래머처럼 생각하길 강요받습니다. C++로 된 문서를 통해서 클래스를 봤기 때문에 C++을 안다고 할 수 있지만 C++의 특정 기능을 사용해서 응용프로그램을 작성하기 전까지는 진정으로 해당 언어에 대해 아는 것이라고 할 수 없습니다.
제가 추천드리는 프로젝트는 블랙잭입니다. 블랙잭은 변수, 연산자, 조건문, 루프, 함수, 클래스/구조체, 에러 처리가 필요합니다. 잠재적인 실패나 카드가 바닥난 경우등 테스트 케이스를 포함할 수도 있습니다. 다른 스타터 프로젝트로 좋은 것은 슬롯 머신이나 Yahtzee 같은 것입니다. 좀더 발전적인 것이라면 모노폴리같은 게임이 있겠네요. 메커니즘에 더 신경쓰시고 텍스트 기반으로 동작하도록 하세요.
만약 어려운 작업에 대해서 여러분이 부족하다고 생각하면 해당 언어에 대한 여러분의 이해력이 그정도로 라는 것을 기억하세요.
Summary
- 새로운 언어 학습법; 변수, 함수, 조건문, 테스트, 에러처리, 자료구조, 반복문 등의 기본사항을 먼저 학습할 것
- 기본사항을 학습했다면 해당언어의 특징을 사용해서 토이 프로젝트를 만들어 볼 것
- 토이 프로젝트의 어려운 부분을 구현하지 못했다면 해당 언어의 이해가 낮은 것으로 간주해야 한다.