brunch

You can make anything
by writing

C.S.Lewis

by 이형도 Mar 27. 2019

나는 왜 프로그래밍 공부에 실패(?)할까?

프로그래밍 공부를 시작하기 전에 알았더라면 좋았을 것들

세상이 온통 소프트웨어에 물든 것 같습니다. 세상의 변화에 발맞춰가기 위해 프로그래밍에 관심을 갖는 일반인들도 많은 것 같습니다. 페이스북의 개발 관련 커뮤니티, 유튜브, 시중에 출판되는 개발 관련 도서를 보면 입문자, 초보자를 위한 콘텐츠가 넘쳐납니다. 여러 개발자 커뮤니티에 올라오는 스터디 모집글만 봐도 정말 많은 분들이 프로그래밍을 공부하기 위해 많은 시간과 에너지를 소비하고 있음을 짐작할 수 있습니다.


프로그래밍 공부를 하는 분이 많은 만큼 실패나 어려움을 호소하는 분도 많습니다. 전공자 입장에서 가장 기본적인 내용을 질문하는 글, 좋은 입문서를 추천해 달라는 글, 다양한 공부 방법을 이야기하고 있는 블로그 등 많은 글을 어렵지 않게 볼 수 있습니다. 기본서 한 두 권쯤 읽었고, 예제도 따라 해 보면서 실습을 했는데도 여전히 프로그래밍이 어렵습니다. 한 달, 두 달 시간 들여 노력했는데, 여전히 기본적인 문제도 혼자 힘으로 풀기 어렵습니다. 이렇게 한 두 번 벽에 부딪치면 생각하게 되죠. '아~ 나는 프로그래밍에 재능이 없나 봐', '이건 외계어야~', '내 뇌에 새로운 생각의 길을 파야 하는데 너무 어려워~'


이렇게 벽에 부딪친 분들 포기하지 마세요. 재능이 없는 사람은 없습니다. 프로그래밍이 처음부터 쉬운 사람은 얼마 없어요. 조금 어렵거나, 많이 어렵거나, 정말 죽을 것처럼 어렵거나, 어려운 정도의 차이만 있습니다. 벽에 부딪쳐 포기해야 하나 고민하는 여러분을 위해 프로그래밍 공부하기 전에 알고 있으면 도움이 될 몇 가지에 대해 이야기하려고 합니다.




왜 프로그래밍을 공부하려고 했지?

 

문제 해결의 첫출발은 문제를 정의하는 것입니다. 문제가 무엇인지 정의해야 해답을 찾을 수 있습니다. '무슨 문제가 있어서 앞으로 나아가지 못할까?', '왜 여기서 포기를 하려고 할까?'를 생각해 보세요. '시대의 흐름을 따라가야지', '남들도 다하는데 뒤쳐지면 안 되지'라는 생각으로 프로그래밍을 시작하셨나요? 그런 분이라면 생각을 조금 바꿔보면 어떨까요? 내가 프로그래밍을 할 수 있게 되면 무엇을 만들어 볼까? 일상생활에서 회사 업무 중 자동화할 수 있는 것은 무엇일까?


일상의 업무에서 불편하거나 개선하고 싶은 작업 중 소프트웨어로 할 수 있을 것 같은 일을 가능한 구체적으로 생각하면 도움이 됩니다. 프로그래밍 언어 배우기의 달인에 보면 새로운 언어를 배우는 '비결'에 첫 번째로 이야기하는 것도 '무엇을 만들지 생각하고 읽는다.'입니다. 입문자가 위 블로그 글을 따라서 하기는 어려울 수 있습니다. 하지만 프로그래밍 공부의 전문성을 갖고 있는 개발자들이 어떻게 효과적으로 공부하는지 살펴봄으로써 도움을 받을 수 있습니다. 위 글에서 튜토리얼을 입문 도서로 치환하면 적당할 것 같네요.




프로그램은 어떻게 동작하는 거지?


여러분이 매일 사용하는 브라우저가 컴퓨터 안에서 또는 스마트폰 안에서 어떻게 관리되고 실행되는지 알고 계신가요? 매일 사용하지만 그 내부의 동작을 이해하는 사람은 많지 않습니다. 사용자 입장에서 보면 내부 동작을 이해하고 있어야 할 필요는 없습니다. 마치 자동차를 매일 사용하지만 내부 작동 방식을 모르는 것처럼 말입니다. 모든 운전자가 내부 작동 방식을 이해할 필요는 없습니다. 하지만 프로그램 동작 방식을 이해하면 프로그래밍을 공부하는데 많은 도움이 됩니다.


예를 하나 들어 볼게요. 자료형이라고 들어 보셨죠? 정수, 실수, 문자열 등 모든 프로그램 언어는 자료형이 있습니다. 자료형은 데이터의 형식을 말하는 것입니다. 컴퓨터에는 왜 자료형이 필요할까요?

 

컴퓨터는 '0'과 '1'만 이해할 수 있습니다. 전기가 흐르면 '1'이고 흐리지 않으면'0'입니다. '0'과 '1'의 조합으로 다양한 명령어를 표현하며 정수, 실수, 문자열도 컴퓨터 내부에서는 '0'과 '1'의 조합으로 표현됩니다. 이렇게 '0'과 '1'로 값을 표현하는 것을 이진수라고 합니다.


예를 들어 숫자 65는 컴퓨터 내부에서 '1000001'으로 표현됩니다. 컴퓨터는 '0'과 '1'만 해석할 수 있기 때문에 모든 값을 '0'과 '1'의 조합으로 처리해요. 그러면 문자는 어떻게 표현할까요? 문자 자체는 컴퓨터가 해석할 수 없기 때문에 문자를 숫자로 변경하고 그 값을 사용합니다. 문자 'A'의 값은 65입니다. 이진수로 표현하면 '1000001'입니다. 어? 숫자 65와 문자 'A'를 표현한 값이 동일하게 '1000001'입니다. 컴퓨터는 혼란스러울 겁니다. '1000001'을 언제는 숫자로 처리하고 언제 문자로 처리해야 할까를 결정할 수 있게 알려줘야 합니다. 데이터의 자료형이 필요한 이유입니다.


변수, 함수 등에 이름을 지정하는 이유, 변수의 범위라는 것이 생기는 이유, 함수를 선언할 때 함수 외부에서 어떻게 값을 전달받을 수 있는지 등 그 용도와 목적을 구체적으로 이해하려면 컴퓨터 내부 구조와 동작 방식을 이해하는 것이 많은 도움이 됩니다.




프로그래머처럼 생각하는 게 뭐야?


혹시 '프로그래머처럼 생각해야 해', '생각을 잘게 쪼개야 해.'라는 말을 들어 보셨나요? 인터넷 강의를 통해 프로그래밍을 배웠거나 주변에 프로그래머 친구가 있다면 한 번쯤 들어 봤을지도 모르겠습니다. 이 말이 무슨 말인가 싶겠지만 앞의 말처럼 프로그래밍의 본질을 잘 표현한 말도 드문 것 같습니다.


프로그래머가 어떤 기능을 구현할 때 사고 단위는 아주 구체적입니다. 컴퓨터가 이해할 수 있는 수준으로 아주 세부적인 과정까지 구체적으로 표현합니다.


예를 들어 1부터 50까지 숫자를 더하는 프로그램을 작성한다고 생각해봅시다. 사람은 '1부터 50까지 숫자를 더한다.'라고 생각합니다. 지극히 인간적인 사고방식인 거죠. '이것보다 어떻게 더 세부적인 과정으로 구체화를 해?'라는 의문을 가질 수 있습니다. 그런데 정말 과정을 더 세분화할 수 없을까요? '1부터 50까지 숫자를 더한다'를 '1 + 2 + 3 +... + 49 + 50'로 풀어서 생각할 수 있습니다. 계산 과정을 더 구체화한 거죠. 그러면 여기서 끝일까요?


'1+2+3+...'이라는 문장을 더 구체화할 수 있을까요? 1에 2를 더하고 그 결과에 3을 더한다. 이 과정을 50이 될 때까지 반복한다. 조금 더 구체화 적으로 표현이 됐나요? 앞에서 구체화한 '1+2+3' 보다는 더 구체적으로 해야 할 일을 명시한 것 같습니다. 그럼 이대로 프로그래밍을 할 수 있을까요? 프로그래밍에 익숙하지 않은 분은 이 정도 구체화한 내용을 코딩으로 변환하는데 어려움을 느낄 수 있습니다.


그러면 어떻게 해야 할까요? 앞에서 구체화한 것보다 더 작은 단위로 생각을 더 쪼개는 겁니다. 예를 들면 이렇게요. '1과 2를 더한다.', '1과 2를 더한 결과를 임시로 저장한다', '임시로 저장한 결과를 가져와 3을 더한다', '3을 더한 결과를 임시로 저장한다', '이 과정을 50이 될 때까지 반복한다'. 마치 컴퓨터가 계산하는 것처럼 과정을 구체화해서 표현을 해야 합니다.


1부터 50까지 숫자를 더하는 아주 단순한 프로그램조차 작업 과정을 아주 구체화해서 프로그래밍이 가능한 것을 알 수 있습니다. 프로그래밍을 한 번이라도 해보신 분이라면 지금 에디터 창을 열고 마지막으로 구체화한 내용을 기반으로 1부터 50까지 더하는 프로그램을 작성해 보세요. '프로그래밍이 생각했던 것보다 그렇게 어려운 것만은 아니구나'라는 느낌이 드시나요?




마무리

프로그래밍 공부에 어려움을 겪고 계시다면 포기하기 전에 내가 왜 프로그래밍 공부를 시작했는지 생각해 보세요. 기분 전환을 통해 다시 시작할 수 있는 용기를 얻을 수 있고 새로운 목표가 생길 수 도 있습니다.


입문자/초보자가 프로그래밍을 어려워하는 이유는 크게 두 가지입니다. 첫 번째는 개념을 이해하기 어렵습니다. 입문자에게 생소한 개념이고 익숙하지 않습니다. 프로그래밍에 사용하는 개념은 컴퓨터 구조의 특성에 따라 발생한 개념입니다. 따라서 프로그램의 동작 방식을 이해하고 있으면 프로그래밍에서 사용하는 많은 개념을 이해하는데 도움이 됩니다. 개념을 정확하게 이해할 수 있습니다. 왜 그런 개념이 필요한지 이해할 수 있습니다.


두 번째는 개념은 이해했는데 그 개념을 어떻게 활용해야 할지 모르겠다. 개념을 이해하고 기본 문법을 이해하고 있더라도 그것을 활용하는 것은 또 다른 문제입니다. 이 문제를 해결하기 위해서는 생각을 구체화하는 훈련이 필요합니다. 이때는 내가 컴퓨터가 되었다고 생각하고 더 이상 구체화할 수 없을 정도의 작은 단위까지 자세하게 명시하는 것입니다.


힘들고 지치면 잠시 쉬어가면 됩니다. 포기하지 마세요.


* 이 글이 도움이 되셨다면

페이스북 페이지:https://www.facebook.com/developers.books/

페이스북 그룹:https://www.facebook.com/groups/977659659000907/

유튜브:https://www.youtube.com/channel/UCVwIwQXkeBBH472qopBSV0A

좋아요. 구독. 부탁드려요.


브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari