프로그래밍은 요리와 같다.
프로그래밍에 대해서 잘 알지 못하는 상태에서 프로그래밍을 공부하려고 하면 막막하다. 프로그래밍 공부는 책을 열심히 본다고 해서 잘할 수 없다. 예제 코드를 보고 따라 한다고 해서도 프로그래밍 실력이 크게 향상되기는 힘들다. 프로그래밍은 우리가 일반적으로 해오던 공부 방법을 적용하면 안 된다. 물론 기존에 수능 공부하듯이 또는 자격증 공부하듯이 해오던 방식을 프로그래밍 공부에 적용하면 도움이 전혀 안 되는 것은 아니다. 다만 1년 만에 향상할 수 있는 프로그래밍 능력을 5년이 걸릴 수도 있다.
필자도 처음부터 프로그램 개발 전공이 아닌 의학 분야 전공에서 전과를 해서 오게 되었다. 그렇다보니 다른 미국 학생들의 경우 중학교, 고등학교 심지어 초등학교 때부터 배워 온 코딩을 필자는 수업을 들으며 단기간 안에 이해해야 했다. 처음에 필자도 암기 위주의 공부 방법을 적용해보기도 하고, 프로그래밍 관련 책을 많이 읽거나 예제 코드를 많이 풀어보기도 했다. 프로그래밍 과제도 될 때까지 반복하며 에러를 찾아내곤 했었다. 지금도 잠을 거의 안자며 공부와 일을 병행하지만 프로그래밍을 잘 모르는 Freshman 시절에는 Computer Lab실과 Gym을 번갈아 반복적으로 왔다 갔다 하며 지냈던 기억이 난다. 필자가 여기서 이야기하고 싶은 핵심은 프로그래밍을 기존 공부 방식에서 벗어나야 효과적인 공부가 가능하다는 것이다. 필자는 경험을 통해서 알게 되었지만 처음부터 이러한 개념을 알고 공부를 했더라면 보다 더 효율적으로 공부하지 않았을까 싶다.
#. 프로그래머는 요리사가 되는 거와 흡사하다.
프로그래밍 공부하기 위해서는 프로그래밍이라는 분야가 요리와 비슷하다고 생각하면 이해하기 쉽다. 요리를 잘하고 못하는건 재료를 잘 아느냐가 중요하지 않다. 물론 최소한 특정 요리를 만든다고 했을 때 거기에 들어가는 재료에 대해서는 알고 있어야 한다. 하지만 우리가 카레를 만든다고 했을 때 감자의 종은 무엇이며, 감자는 어떤 성분이 들어있어서 몸에 어떤 작용을 일으키는지 등을 머릿속으로 생각하며 카레를 만들진 않는다.
프로그래밍 공부도 마찬가지이다. 어떤 프로그램을 만든다고 했을 때 거기에 들어가는 기능이 무엇이며, 어떤 식으로 구현할 수 있는지에 대해서 고민하고 코딩 작업이 이루어지는 거지 프로그래밍 언어가 몇 년도에 만들어졌고, 프로그래밍에 들어가는 기능은 어떤 분야에서 적용하고 사용할 수 있는지를 다 알고 있지 않아도 된다. 물론 요리사와 같이 요리를 전문으로 하는 셰프가 되기 위해서는 재료 하나하나에 대한 개념적 이해는 필수이다. 하지만 요리를 처음 해보는 사람에게 셰프가 알아야 하는 모든 지식을 요구하지 않는다. 프로그래머도 마찬가지이다. 프로그래밍을 처음 배우기 시작했다면, 코딩을 직접 해가며 프로그래밍에 대해서 이해하는 과정을 거치는 것이 좋다. 프로그래밍에 대한 이론적 공부만 해온다면, 프로그래밍에 대해서 이해하기도 어렵고 지레 프로그래밍을 해보기도 전에 프로그래밍이란 어려운 것이라는 고정관념이 생길 수 있다.
#. 다양한 예제코드를 활용해라.
처음 해보는 음식을 만든다면 인터넷에 나와 있는 요리 레시피를 참고하거나 요리를 잘하는 사람에게 물어보고 참고해서 음식을 만들곤 한다. 필자도 요리를 좋아하지만 처음 해보는 요리에 대해서 인터넷 레시피를 참고해서 만들어 본다. 개인적으로 필자가 자주 참고하여 맛있게 요리를 할 수 있게 해 준 백종원 선생님께 감사드리며 보고 있다. 이처럼 프로그래밍 공부도 비슷하다. 프로그래밍을 배우기 시작한 사람이거나 새로운 프로그램을 만든다고 했을 때 어떤 식으로 코드 작성을 시작해야 될지 막막하다. 이때 참고하는 것이 다른 사람의 예제 코드이다. 마치 요리 레시피를 참고하여 음식을 만들듯이 프로그램도 여러 가지 예제 코드를 참고하여 자신만의 프로그램을 만드는 작업을 통해 프로그래밍 공부를 할 수 있다.
물론 합법적으로 허가된 소스코드를 활용해야 하는 것은 기본이지만 사용에 문제가 없다면 다양한 예제 코드를 보고 직접 해보면서 프로그래밍에 대해서 익혀야 한다. 여기서 말하는 건 예제 코드를 그저 똑같이 가져다 사용하는 것이 아니라 예제 코드를 참고하면서 어떤 식으로 해당 프로그램이 구현되고 작동되는지에 대한 이해가 중요하다. 예제 코드를 살펴보는 궁극적인 이유는 프로그래밍을 공부하기 위해서이다. 요리사가 되기 위해서 다양한 요리 레시피를 참고하고 이해해가며 자신 만의 새로운 요리법을 찾아내는 것이 궁극적인 목표이지 기존에 있던 요리 레시피를 똑같이 사용하는 것이 최종적인 목표가 아니라는 것이다. 요리사가 다른 사람의 요리 레시피를 똑같이 참고해서 요리를 만들면 문제가 되듯이 프로그래머도 마찬가지이다. 다른 사람의 코드를 똑같이 가져다가 사용하는 것 자체가 문제가 될 수 있다. 다만 필자가 이야기하는 부분은 공부하는 과정이다. 공부하는 과정에서는 본인보다 잘하는 사람들의 오픈 소스코드를 참고하여 공부하는 과정을 거쳐야 비로소 자신만의 고유한 프로그래밍이 가능해질 수 있다.
#. 완벽한 결과를 위해서는 과정이 중요하다.
요리사가 아닌 요리만 할 줄 아는 사람이 되고 싶다면 오픈된 요리 레시피를 참고해서 요리를 만들 줄 알면 된다. 하지만 요리사가 되고 싶다면 보다 더 전문적이고 요리에 대한 전반적인 이해가 바탕이 되야 자신만의 고유한 레시피 개발이 가능하다. 프로그래머도 마찬가지이다. 프로그래머가 되는 것이 아니라 프로그래밍에 대해서 알아보는 것이 목표라면 앞서 이야기한 예제 코드를 이해하는 정도만 되면 충분하다. 하지만 프로그래머가 되기 위해서는 예제 코드를 그대로 사용하는 방법 말고도 자신이 직접 자신만의 코드 작성을 통한 프로그램 개발이 가능해야 한다.
요리사라고 한다면 밀키트를 사다가 요리하는 사람을 셰프라고 부르진 않는다. 또는 다른 집에서 요리한 음식을 가져다가 다시 파는 사람을 요리사라고 부르진 않는다. 프로그래머도 마찬가지이다. 기존 소스 코드를 그대로 가져다 사용하는 것은 프로그래머가 아니다. 공부하는 과정에서는 오픈 소스 코드를 가져다 사용하는 건 공부에 도움이 되지만 그저 사용만 해서는 안된다는 것이다. 해당 예제 코드가 어떤 식으로 작동되고 어떤 기능이 포함되어 있는지를 이해해야 한다는 것이다. 실무가 아닌 공부하는 단계에서는 오픈 소스 코드라면 가져다 사용하되, 어떤 식으로 작동되는지에 대해서 분석하고 이해하는 것이 중요하다는 것이다. 필자가 이 부분을 강조하는 이유는 프로그래밍 공부를 하는 단계에서 "이해"와 "분석"이라는 부분을 간과하는 경우가 많기 때문이다.
80년대, 90년대도 아닌 현재는 정말 수많은 오픈 소스 코드와 프로그래밍 정보들이 존재한다. 프로그래밍 공부하기 위한 다양한 정보들이 존재하기 때문에 누구나 쉽게 공부가 가능하다. 예를 들어, 프로그래밍 과제나 시험을 볼 때도 기존 오픈된 소스 코드들을 사용하여 문제 해결이 가능한 것이 사실이다. 필자는 다시 한번 이야기하지만 공부하는 과정에서 소스 코드들을 가져다 사용하는 것은 나쁘지 않다고 생각한다. 소스 코드를 가져다 사용한다는 것은 본인이 직접 특정 부분을 이해하고 있어야지만 검색하고 적용이 가능하다는 점에서 이미 공부가 이루어지고 있다고 생각한다. 다만 정말 유의할 점은 참고한 예제 코드에 대한 이해와 분석이 이루어지지 않았을 경우이다.
이해와 분석이 제대로 이루어지지 않을 경우 당장은 문제가 되지 않는다. 요리 공부를 하는 단계에서 다른 사람의 레시피를 사용하거나 밀 키트를 가져다가 사용하는 건 문제가 되지 않는다. 하지만 요리사가 되었을 때 자신만의 요리 레시피를 만들거나 새로운 요리 방법을 창작해내는 능력이 없을 가능성이 높다. 프로그래머도 마찬가지이다. 기존 코드에 대한 이해와 분석이 이루어지지 않는다면 정작 프로그래머가 되었을 때 프로그램 개발을 어떻게 해야 될지 모르는 상황이 발생한다. 그렇다 보면 매번 기존 오픈 소스만 사용할 줄 알지 발전된 자신만의 프로그램 개발이 불가능하다. 한마디로 프로그래머이지만 사실상 프로그래머 아닌 셈이다.
#. In conclusion, 3 줄 요약
1. 프로그래머는 요리사와 비슷하다.
2. 요리 레시피를 보고 요리하는 법을 배우듯이 오픈 소스 코드를 활용하여 프로그래밍 공부를 하는 것이 중요하다.
3. 요리사는 자신만의 고유한 레시피를 만들어 내듯이 프로그래머는 자신만의 프로그램을 만드는 것이 최종적 목표이다.
'미국 개발자 > HOOTips' 카테고리의 다른 글
[HOO's Information] 프로그래밍 공부하는 방법 #02 - 프로그래머와 영어 (0) | 2021.08.12 |
---|---|
[HOO's Q&A] 프로그래밍 언어 공부할 책으로 어떤 책이 좋나요?, 스프링 공부할 책으로 어떤 책이 좋나요? (0) | 2021.08.10 |
[HOO's Q&A] 1년차 개발자인데 이력서 경력 정리가 필요할까요? (0) | 2021.07.18 |
[HOO's Q&A] FSM과 FSA의 차이가 무엇인가요? (0) | 2021.07.17 |
[HOO's Q&A] 어셈블리 언어는 시스템 프로그래밍할 때 자주 사용하는 언어인가요? (0) | 2021.07.11 |
댓글