작게 시작해 보자 꾸준히 연습하기 지식을 확장한다 첫 프로그램 만들어 보기 배운 것을 활용해 본다 언어를 선택한다
어떤 언어를 배우기로 선택했느냐에 따라 이 과정은 달라진다. 하지만 모든 프로그래밍 언어에는 유용한 프로그램을 작성하는데 필요한 기본적인 개념들이 공통적으로 들어 있다. 이런 부분을 빨리 이해할 때, 문제를 해결하는데 사용할 수 있는 강력하며 효율적인 코드를 작성할 수 있다. 다음에는 많은 언어들에서 공통적으로 나타나는 기본 개념들을 정리한 것이다.   변수 - 변수란 데이터를 저장, 변경, 참조하는데 쓰인다. 변수의 값은 변경 가능하며, 대다수의 경우 "정수(integer)", "문자(characters)"처럼 미리 형식이 정해진 경우도 있다. 코드를 작성할 때, 변수에는 사람들이 읽고 이해할 수 있는 이름을 붙인다. 이렇게 작성하면 변수가 다른 개념들과 어떻게 상호 작용하는지 이해하는데 도움이 된다. 조건문 - 조건문이란 어떤 문장이 참이냐 거짓이냐에 따라 실행 여부를 결정하는 부분을 의미한다. 가장 흔히 쓰이는 조건문은 "if-then"이다. 영단어 if의 기본적인 의미처럼 어떤 문장이 참이라면, 어떤 일들이 벌어진다. (예: 캐릭터의 체력이 0이라면 캐릭터는 죽고 시작 지점으로 돌아간다.) 하지만 어떤 문장이 참이 아니라면, 그 일들은 벌어지지 않거나 다른 일이 벌어진다. (예: 캐릭터의 체력이 0이 아니라면, 캐릭터는 죽지 않으며 시작 지점으로 돌아가지도 않는다. 그 대신 적 몬스터를 찾아 본다.) 함수나 서브루틴(subroutine) - 이 부분은 언어에 따라 명칭이 다르다. 함수, 서브루틴 외에도 메서드(Method), 프로시저(Procedure), 실행 단위(Callable Unit) 등으로 불리기도 한다. 이것들은 프로그램 내부에서 사용되는 작은 프로그램이라고 생각해도 된다. 복잡한 프로그램을 효율적으로 작성하기 위해 함수들은 여러 번 호출된다. 데이터 입력 - 어떤 언어에서든 사용되는 상당히 광범위한 개념이다. 사용자의 입력을 받아 그 정보를 저장하는 역할을 하기도 한다. 그 정보를 어떻게 받아 들일지는 프로그램에 따라 다르다. 키보드, 마우스, 파일 등 여러 가지 방법이 있기 때문이다. 또한 입력은 출력과 밀접하게 연관되어 있다. 화면에 표시하든, 파일에 저장하든 어떤 데이터를 사용자에게 어떻게 보여주어야 할지 결정해야 하기 때문이다. 많은 프로그래밍 언어를 실행하려면 컴파일러가 필요하다. 컴파일러란 코드를 기계가 이해할 수 있는 언어로 번역해 주는 프로그램을 의미한다. 파이썬 같은 경우에는 파이썬 인터프리터가 이해할 수 있는 방식으로 코드가 자동으로 컴파일되기 때문에, C/C++, C# 같은 별도의 컴파일 과정이 필요가 없다.   코드 편집기, 컴파일러/인터프리터, 디버거가 합쳐져 있는 IDE(Integrated Development Environment, 통합 개발 환경)가 필요한 언어도 있다. IDE를 사용하면 프로그램을 개발하기 위해 여러 프로그램을 사용할 필요가 없다. IDE만 있으면 된다. IDE에 따라서는 객체 계통이나 파일 구조 같은 것을 시각적으로 보여 주기도 한다. 인터넷에는 수많은 코드 편집기가 존재한다. 각각의 프로그램은 그 프로그램만의 방식대로 코드의 문법을 강조해 주며, 여러 가지 개발자들에게 유용한 기능을 제공해 준다. 프로그래밍 언어를 마스터하는 데에는 시간이 필요하다. 파이썬 같은 단순한 언어라고 해도, 문법을 이해하는 데에는 며칠 정도면 될지 모르지만, 그 문법을 자유자재로 사용하는 데에는 상당히 긴 시간이 걸린다. 능숙해지려면 연습은 필수이다. 저녁 먹기 전에 한 시간씩이라도 매일매일 조금씩 시간을 내서 코드를 작성해 보자. 달성 가능하지만 조금은 어려운 목표를 세운 뒤, 문제를 찾아 보고 해결책을 고민해 보자. 계산기 같은 기본적인 프로그램을 생각해 본 뒤, 어떻게 만들어야 할지 고민해 보자. 지금까지 배운 문법과 개념들을 활용해 보자. 특정한 프로그래밍 언어나 개발 기법에 관한 커뮤니티들은 많다. 커뮤니티를 찾아 참여해 보면 수많은 것을 배울 수 있다. 또한 학습 과정에 도움이 되는 수많은 예제와 도구들을 얻을 수도 있다. 다른 사람의 코드를 읽다 보면 새로운 생각이 떠오를 수도 있고, 아직 잘 사용하지 못하는 개념을 배우는데 도움이 될 수도 있다.   자신이 사용하고 있는 언어와 관련된 포럼이나 온라인 커뮤니티들을 찾아 보자. 질문만 계속 하지 말고, 아는 문제가 있다면 답변도 해 주자. 이런 커뮤니티들은 단순히 질문과 답변만 하기 위한 공간이 아니라 함께 일하고 토론하기 위한 공간이기도 하다. 도움만 구할 것이 아니라 가끔은 진행 중인 작업도 공개하면서 사람들과 함께 여러 가지 일을 해 보자. 경험이 쌓이고 나면, 해커톤이나 프로그래밍 대회에 참여해 보자. 어떤 주제를 가지고 정확하며 효율적으로 작동하는 프로그램을 시간 내에 작성하는 대회로 개인이나 팀 자격으로 참가 가능하다. 이런 행사에 참여하는 것은 무척 재미 있으며 다른 프로그래머들을 만날 좋은 기회이기도 하다. 잘 할 줄 모르는 것을 해 보자. 그 과제나 비슷한 과제를 해결하려면 어떻게 해야 하는지 방법들을 조사해 보자. 그리고 만들어 보자. "기본적으로" 작동하는 프로그램에 만족하지 말고 오류 없이 작성하는 프로그램을 만들기 위해 최선을 다 해 보자. 대학, 문화 센터 강좌 등을 찾아 보면 학교에 입학하지 않고도 프로그래밍 강의를 해 주는 경우가 있다. 초보 개발자라면 이런 강의들이 많은 도움이 될 수 있다. 고수들의 도움을 받을 수 있기 때문이다. 또한 같은 지역에 사는 개발자들과도 친해지는 데에 도움이 된다. 어떤 프로그래밍 언어든 관련된 책들이 엄청나게 많이 존재한다. 지식이라는 것이 책에서만 얻을 수 있는 것이 아니지만, 궁금한 것이 있을 때 찾아 보기 좋고, 좋은 예제들이 많이 포함되어 있다. 대다수의 프로그래밍에는 기본적인 수학 지식이 필요한 경우가 많다. 따라서 좀 더 고급 수학을 공부해 보고 싶을 수 있다. 특히 복잡한 시뮬레이션이나 복잡한 알고리즘을 구현한 프로그램을 만들고 싶다면, 수학과 논리에 대한 지식이 중요하다. 또한 논리에 대해 공부하면, 고급 프로그램을 작성하기 위해 복잡한 문제를 어떻게 접근해야 할지 생각하는데 도움이 된다. 1만 시간의 법칙이라고 있다. 전문가가 되기 위해서는 1만 시간 정도를 투자해야 한다는 것이다. 이 법칙이 맞는가에 대해서는 논란이 있지만, 기본적인 원리는 확실하다. 뭔가를 잘 하고 싶다면 시간과 노력을 들여야 한다는 것이다. 모든 것을 하루 아침에 알 수 있을 것이라고 생각하지 말자. 집중해서 꾸준히 배워 나가다 보면 자신의 분야의 전문가가 될 수 있을 것이다. 한 가지 언어를 마스터하는 과정에서 여러 가지를 배울 수 있지만, 여러 가지 언어를 배우면 성공할 가능성이 높아진다. 그렇게 배운 두 번째 혹은 세 번째 언어는 첫 번째 언어를 보완해 준다. 좀 더 복잡하고 재미 있는 프로그램을 작성하는데 도움이 된다. 첫 번째 언어를 어떻게 사용하는지 감을 잡았다면, 이제 다른 언어를 공부해 보자.  두 번째 언어를 공부해 보다 보면 첫 번째 언어를 공부할 때에 비해 공부 속도가 더 빠르다는 것을 알 수 있을 것이다. 프로그래밍 언어와 관련된 기본적인 개념들은 언어들마다 비슷한 경우가 많으며, 몇몇 언어들은 서로 영향을 주고 받기도 한다. 어떤 언어를 배우든 가장 처음 배우는 프로그램은 "Hello World(안녕하세요)" 프로그램이다. 그냥 간단하게 화면에 "Hello, world" 혹은 "안녕하세요"를 표시하는 프로그램이다. 프로그래밍을 처음 시작하는 개발자들에게 프로그래밍 언어의 문법과 화면에 정보를 어떻게 표시하는지 가르쳐 주는 기본적인 프로그램이다. 표시되는 문장을 바꾸어 보면서 프로그램에서 기본적인 정보가 어떻게 처리하는지 공부해 볼 수도 있다. 다음은 기본적인 언어들로 Hello World 프로그램을 작성하는 방법이다.   파이썬 루비 C PHP C# 자바 인터넷을 조금만 찾아 봐도 여러 가지 언어로 된 수천 개 이상의 예제들을 찾아 볼 수 있다. 이런 예제들을 뜯어 보면서 프로그래밍 언어를 어떻게 사용했으며 각 부분이 어떻게 이어지는지 연구해 보자. 각 예제에서 조금씩 코드를 가져 와 내가 원하는 프로그램을 만들어 보자. 프로그래밍 언어의 문법이란 컴파일러나 인터프리터가 이해할 수 있도록 도와주는 코드 작성 규칙이라고 할 수 있다. 여러 가지 언어에서 공통적으로 사용되는 개념도 많지만, 각 언어는 그 언어만의 문법을 가지고 있다. 어떤 언어로 프로그램을 작성하기로 결심했다면, 문법 공부는 필수이다. 그러다 보니 거의 모든 사람들이 문법 공부를 프로그래밍 공부라고 생각한다. 하지만 현실에서는 문법은 복잡한 개념을 프로그램으로 구현하기 위해 필요한 기반 정도로만 사용된다. 예제 프로그램 코드를 바꿔 보고 어떤 일이 일어나는가 관찰하자. 실험을 하다 보면, 어떤 것이 잘 되는지, 어떤 것이 잘 되지 않는지, 책이나 동영상을 보는 것보다 더 빨리 배울 수 있다. 프로그램을 망가뜨려 보는 것을 두려워하지 말자. 개발을 잘 하려면 프로그램의 오류를 잘 찾아야 한다. 그래도 많은 경우, 새로운 코드가 한 번에 정확하게 작동하는 경우는 드물다. 프로그램을 작성하다 보면 버그를 만나게 된다. 버그란 프로그램에 생긴 오류로 어디에서든 생길 수 있다. 버그는 그냥 사용하기 조금 불편한 사소한 것부터 프로그램의 컴파일이나 작동을 멈춰 버리게 하는 심각한 것까지 다양하다. 소프트웨어 개발 과정에서 이런 문제를 찾고 수정하는 것은 큰 비중을 차지한다. 따라서 이 부분에 빠르게 적응하는 것이 중요하다.  기본적인 프로그램을 가지고 실험하다 보면, 생각대로 작동하지 않는 부분을 찾을 수 있을 것이다. 이 때, 내가 생각하는 대로 프로그램을 작동시키기 위해 새로운 방법을 찾아 보자. 이게 개발자가 갖춰야 할 가장 중요한 능력이기 때문이다. 거의 모든 프로그래밍 언어에는 인터프리터나 컴파일러가 무시하고 지나가는 주석이라는 기능이 존재한다. 주석에는 코드가 무슨 일을 하는지 인간이 이해할 수 있는 언어로 짧고 간결하게 서술해 놓을 수 있다. 주석을 작성해 놓으면 거대한 프로그램을 만들 때, 각 부분이 무엇을 의미하는지 기억하는데 도움이 되며, 여러 사람과 개발 중이라면 반드시 지켜야 할 부분이기도 하다. 다른 사람들이 왜 이 코드가 작성되었는지 이해하는데 도움이 되기 때문이다. 꼭 필요한 것은 아니지만, 대학에서 공부하다 보면 수많은 언어를 공부하게 되고, 다른 교수님들과 학생들과 친해지게 된다. 꼭 이 조언에 따라야 할 필요는 없다. 4년제 대학을 다니지 않은 좋은 개발자들도 많다. 프로그램을 만들고, 지식을 확장해 보자. 그리고 잘 만든 것은 개인 포트폴리오에 보관해 보자. 자신이 할 수 있는 일의 예시로 이 포트폴리오를 회사들에 지원할 때 보여 주도록 하자. 스스로 개발해 본 것을 추가한 뒤, 다른 회사에서 한 일도 추가할 수 있는지 알아 보도록 하자. 프리랜서로 돈을 벌어 볼 방법은 많다. 특히 모바일 앱 개발자라면 기회가 더 많다. 작은 프리랜서 일을 받아 보면서 상업용 프로그램이 어떻게 돌아가는가 알아 보자. 프리랜서 업무를 하다 보면 포트폴리오를 만드는데 도움이 될 것이다. 프로그래밍으로 돈을 벌기 위해 꼭 회사에 들어가 일을 할 필요는 없다. 능력만 있다면, 자신에게 필요한 프로그램을 만들어서 자신의 홈페이지나 앱스토어 등을 통해 팔아도 된다. 돈을 받고 판다면 사람들에게 지원할 준비를 해야 한다. 사람들은 자신이 구매한 프로그램이 제대로 작동하기를 바라기 때문이다.  많은 개발자들이 작은 프로그램이나 도구를 무료로 배포한다. 이런 프로그램으로는 돈을 벌 수 없지만, 유명해지는 데에는 도움이 된다. 다른 언어들에 비해 배우기 쉬운 언어가 존재하기는 하지만, 어떤 언어로 시작하든 상관은 없다. 그렇다고 해도 분야에 따라 많이 쓰이는 프로그래밍 언어가 다른 경우가 많기 때문에 프로그래밍 언어를 배워서 무엇을 하고 싶은지 생각해 보는 것이 좋다. 그러면 어떤 언어를 배우는 것이 좋을지 답이 나올 것이다. 그 언어부터 시작해 보자.  웹 개발을 하고 싶다면 데스크탑 프로그램 개발에 필요한 언어와는 다른 종류의 프로그래밍 언어를 배워야 한다. 또 모바일 앱을 개발하고 싶다면 또 다른 언어가 필요하다. 따라서 무엇을 개발할지 결정하느냐에 따라 배워야 할 내용이 달라진다. 어떤 결정을 내리든, 고수준이면서 단순한 언어부터 시작하는 것이다. 이런 언어들로 프로그래밍을 시작하는 것은 초보자들에게 특히 더 도움이 된다. 어떤 언어로 프로그래밍을 하든지 공통적으로 필요한 기본적인 개념과 사고 과정을 배울 수 있기 때문이다.   파이썬(Python)과 루비(Ruby)는 이런 용도로 많이 쓰이는 언어들이다. 둘 다 무척 읽기 쉬운 문법 구조를 가지고 있으면서, 객체 지향적이고 웹 개발에 사용 가능하다. 여기서 "객체 지향적(object-oriented)"이라는 말은 세상에 존재하는 모든 것을 객체(object)라고 불리는 정보의 묶음으로 정의하고, 그것들 간의 상호 작용을 설명해 나가는 방식으로 작성된 코드를 의미한다. 이 개념은 C++, Java, Objective-C, PHP 등 요즘 사용되는 거의 모든 프로그래밍 언어에 적용되어 있다. 어떤 언어로 시작해야 할지 아직도 감이 안 온다면, 여러 가지 다른 언어에 대해 설명된 글들을 읽어 보자. 어떤 언어가 다른 언어들에 비해 이해하기 쉽다고 느껴진다면, 그 언어에 대해 좀 더 깊게 공부해 보자. 인터넷에는 프로그래밍 언어를 공부할 수 있는 자료들이 수없이 많다.    파이썬 - 쉽기 때문에 초보자가 배우기 좋으며, 쉽게 친숙해질 수 있다. 웹 개발, 게임 개발 등 수없이 많은 곳에 쓰인다. 자바 - 게임, 웹 프로그래밍에서 ATM 기기까지 수없이 많은 프로그램에서 사용된다.  HTML - 웹 개발을 하고 싶다면, 기본적으로 알아야 할 내용이다. 웹 페이지의 내용을 정의하는 언어이기 때문에 이 언어를 모르면 웹 개발 자체가 불가능하다.  C언어 - 상당히 역사가 오래된 언어이다. 실행 속도의 측면에서는 최고라고 할 수 있기 때문에 요즘에도 많이 쓰인다. 또한 최신 언어들인 C++, C#, Objective-C 같은 언어의 기반이 된 언어이기도 하다.
선택한 언어의 기본 개념을 배워 보자. 필요한 프로그램을 설치한다. 매일 코드를 작성하자. 목표를 세우고 프로그램을 작성해 보자. 다른 사람들과 이야기해 보고 다른 사람들이 만든 프로그램을 읽어 보자. 항상 재미 있게 개발하기 위해 자신에게 도전 과제를 주어 보자. 강의를 수강한다. 책을 구매하거나 빌린다. 수학과 논리를 공부한다. 프로그래밍을 멈추지 말자. 다른 프로그래밍 언어를 배워 보자. 한 번에 한 가지 개념에만 집중한다. 인터넷 상에 있는 예제들을 분해해 보자. 문법을 관찰해 보자. 변화를 주면서 실험해 보자. 디버깅을 연습하자. 코드에 주석을 달자. 4년제 대학에서 공부해 보자. 포트폴리오를 만든다. 프리랜서로 일해 보자. 무료 프로그램이나 상업용 프로그램을 만들어 보자. 관심 분야를 결정한다. 비교적 단순한 언어에서부터 시작한다. 여러 가지 언어에 대한 기본적인 설명을 읽어 보자.
https://www.wikihow.com/Learn-a-Programming-Language https://www.wikihow.com/Learn-a-Programming-Language https://www.wikihow.com/Learn-a-Programming-Language https://www.wikihow.com/Learn-a-Programming-Language https://www.wikihow.com/Learn-a-Programming-Language https://www.wikihow.com/Learn-a-Programming-Language
Starting Small Practicing Regularly Expanding Your Knowledge Creating Your First Program Applying Your Skills Choosing a Language