프로그래밍 공부를 시작하려고 합니다. 무엇부터 시작하면 좋을까요?

2016-01-07 11:07

온라인, 오프라인을 통해 자주 받게 되는 질문 중의 하나이다. 오늘도 비슷한 질문을 두 명으로부터 받았다. 질문 중 일부를 인용하면 다음과 같다.

NEXT 복학생

가장 큰 고민은 제가 비전공자이기에 프로그래밍에 대해서는 1학년 학부 수업 때 배운 C언어 포인터까지가 전부입니다.그래서 현재 생활코딩에서 올라온 강의 중 웹 애플리케이션 만들기 라는 코스를 따라 프로그래밍이 무엇인지 알아보고는 있습니다. 전공에 대해서는 아직 구체적으로 정하지는 못했지만 웹UI/UX 쪽으로 공부를 하고 싶습니다. 저는 지금 이 시점, 복학 전에 무엇을 해야(공부or그 외 활동) NEXT에서의 2년동안 공부에 도움이 될까요?

20살의 젊은 친구

1년 가까이되가는데 수능 끝나고 놀기에 바빠 프로그램 생각도 나지 않았습니다. 이제 다 놀고 나서 돌이켜보니 제 가슴한가운데에 프로그램이라는 미련이 아직까지 남아있네요. 뒤돌아보면 프로그래밍의 의지가 없어서 그런건가 부끄럽기도 합니다만. 그래도 제 인생에서 한번쯤은 해봐야 직성이 풀릴거같은 그런느낌 안하면 평생 그 생각이 날거같은 느낌이 납니다.그래서 지금이라도 초심잡고 시작해볼려고하는데요 프로그래밍에 대해 조언을 구하고자 이렇게 글을 남깁니다. 제가 큰틀을 짜놓긴했습니다. 뭐 딱히 큰틀은 아니지만 프로그래밍을 시작해서 보안 해킹 관련 공부를 하고싶습니다. 어떻게해야 좋은지 조언 부탁드립니다.

이런 질문을 많이 받는데 딱히 무엇부터 시작하고 준비하라고 답변하기 힘들다. 답변하기 힘든 이유는 각각의 상황이 다를 뿐 아니라 프로그래밍을 통해 하고 싶은 일이 무엇인지도 다르기 때문이다. 각 상황에 맞는 다른 답변을 주기도 힘들 뿐 아니라 일반화된 하나의 답변을 주기도 힘들다. 그래서 이렇게 질문으로 남겨 다양한 사람들의 의견을 공유함으로써 자신들이 판단하고 선택할 수 있는 기회를 주려고 질문으로 남긴다.

프로그래밍을 시작하는 친구가 어떻게 학습하면 좋을까에 대해 같이 고민해 주면 좋겠다.

0개의 의견 from FB

5개의 의견 from SLiPP

2016-01-07 11:41

질문을 남겼으니 이제 본격적으로 나의 의견을 남겨 보자. 모든 경우에 일반화하기는 힘들고 각각의 상황에 맞춰 자신이 설계해 나가면 좋겠다.

나는 소프트웨어를 공부하기에 지금보다 좋은 시기가 없다고 생각한다. 온라인에 정말 많은 좋은 강의가 넘쳐나고 있다. 너무 많은 컨텐츠가 있기 때문에 어느 컨텐츠를 취사 선택하느냐도 힘든 상황이다. 이제 학습할 컨텐츠가 없어 프로그래밍을 학습하기 힘들다는 것은 한편으로 보면 핑계일 수도 있다.

그렇다면 무엇보다 시작하면 좋을까? 나는 프로그래밍을 학습하려고 하기 전에 소프트웨어를 통해 무슨 문제를 해결하고 싶은지, 무엇을 만들고 싶은지, 왜 하고 싶은지를 먼저 고민하면 좋겠다. 거창하지 않아도 된다. "취업이 잘 되니까."라는 세속적인 목적도 좋다. 세속적이더라도 이 목적이 간절하면 된다. 순수한 동기이건, 세속적인 동기이건 무엇인가를 해결하기 위한 목적이 간절해야 한다. 간절함이 필요한 이유는 프로그래밍을 학습하는 과정에서 겪게 되는 어려운 시기를 극복할 수 있는 원동력이 되기 때문이다. 프로그래밍을 학습하는 과정이 쉽지 않은 길이다. 이 과정을 지속하려면 시작 동기를 명확히 할 필요가 있다. 특히 주변에 비슷한 주제로 학습하는 친구가 없는 경우에는 더더욱 그렇다.

일단 왜 프로그래밍을 학습하고 싶은지에 대한 고민이 끝나면 이후에는 자신이 집중적으로 학습할 분야를 선택해야 한다. 해결하고 싶은 문제가 웹으로 가능한지, 모바일로 가능한지, 게임으로 가능한지 등등. 지금 소프트웨어 업계가 너무 다양하기 때문에 한 가지 분야를 선택해 집중하는 것이 좋다. 자신이 해결하고 싶은 문제, 만들고 싶은 것이 어느 기술로 해결할 수 있는지 모르겠다면 온라인 커뮤니티에 질문을 남겨본다. 그러면 무수히 많은 선배 개발자들이 어떤 기술, 어떤 내용을 학습하라고 조언해 줄 것이다. "막연히 프로그래머가 되고 싶은데 무엇부터 시작하는 것이 좋아요?"라는 질문 보다는 "무엇을 만들고 싶은데, 무슨 문제를 해결하고 싶은데 어떻게 시작하는 것이 좋아요?"라고 질문하는 것이 좀 더 구체적이고 좋은 답변을 받을 수 있다. 질문할 수 있는 온라인 커뮤니티는 초보 웹 개발자를 위하여 문서에 잘 정리되어 있다. 페이스북을 통해 다양한 개발자 그룹에 참여해 질문 남기는 것도 좋다.

이렇게 무엇을 학습할 것인지 정했다면 초보 웹 개발자를 위하여 문서에서도 이야기하고 있듯이 일단 시작해라. 온라인 상에 일단 시작해 볼 수 있는 너무나도 많은 좋은 온라인 강의가 있다. 따라하기 식으로 그럴 듯한 소프트웨어를 만들어 볼 수 있는 경험을 할 수 있다. 일단 머리가 아니라 몸이 소프트웨어를 느끼도록 만드는 경험을 해보면 좋겠다. 만들면서 짜릿한 느낌과 성취감을 느껴보기 바란다. 시작하는 시점의 이런 짜릿함과 성취감은 프로그래밍에 대한 학습을 지속할 수 있는 힘을 준다.

일정 수준 경험을 한 후 좀 더 깊이 있는 지식을 학습하기 위해 기초 지식과 이론을 학습해 나가면 좋겠다. 기초 지식과 이론을 학습하는 과정은 지루하고 힘들다. 하지만 앞에서 얻었던 짜릿함과 즐거움 때문에 이런 어려움도 극복할 수 있을 것이다.

코딩을 지탱하는 기술 : 원리로 깨우치는 프로그래밍 기법 책에 프로그래밍 학습과 관련해 나오는 세 가지 이야기를 공유해 본다.

필요한 부분부터 흡수한다.

책이나 자료 전체가 동일한 정도로 중요하다고 말할 수 없다. 목적이 명확하고, 목적 달성을 위해서 어디를 읽어야 할지 알고 있다면 다른 페이지는 신경 쓰지 말고 바로 그곳을 읽도록 한다.

전체 모두 읽지 않은 것이 께름칙한가? 하지만 좌절하고 전혀 읽지 않는 것보다는 낫다. '전부 읽지 않으면'이라는 완벽 주의가 배우고자 하는 동기를 짓누르고 있다면, 버려버리는 것이 낫다. 동기는 매우 중요하다.

이 전략을 사용하기 위해서는 읽고 싶은 부분이 어디인지 대략적으로 전체적인 구조를 파악하고 있어야 한다. 만약 그게 어려우면 다음 전략이 '대략적인 부분을 잡아서 조금씩 상세화한다.'를 시험해보도록 하자.

대략적인 부분을 잡아서 조금씩 상세화한다.

책이나 문서에는 목차가 있다. 목차를 보면 전체 구조를 대략적으로 알 수 있다. 그리고 나서 본문을 속독으로 읽어나간다. 자세히 보지 않고 우선은 소제목이나 강조 부분, 그림과 그림 제목 등을 본다.

소스 코드를 읽을 때는 우선 디렉토리 구조와 파일명을 본다. 그리고 파일을 속독으로 읽고 거기서 정의하고 있는 함수나 클래스 이름, 자주 호출되는 함수명 등을 본다.

이 방법들에는 '우선 대략적인 구조를 잡고, 조금씩 상세한 정보로 접근한다'는 공통점이 있다. 이것이 기본 원칙이다.

소스 코드에는 다른 방식의 독해 방법이 있다. 디버거의 과정을 사용해서, 실행되는 순서나 호출 계층으로 읽는 방법이다. 이 경우도 동일하게 우선은 대략적인 처리 흐름을 따라가고, 조금씩 깊이를 더해서 함수 안의 처리를 따라가는 것이 중요하다.

이 방법으로 읽어도 정보가 한쪽 귀로 들어와서 한쪽 귀로 나가버리는 느낌을 받는 경우가 있다면, 마지막 방법인 '끝에서부터 차례대로 베껴간다'를 시도해보자.

끝에서부터 차례대로 베껴간다.

명확히 '하고 싶은 것', '조사하고 싶은 것'이 없이 '대충 읽으면' 읽은 내용이 뇌를 그냥 스쳐 지나갈 뿐이다. 이런 상태에서 어떻게 배울까를 고민하다고 해도, 판단을 위한 지식 자체가 없기 때문에 무의미하다.

그래서 지식의 밑바탕을 만들기 위해서 교과서를 그대로 베껴 쓴다. 이것이 '베끼기'라 불리는 기술이다. 지식이 없는 상태에서 고민하는 것은 무익하기 때문에 우선 아무것도 생각하지 않고 지식을 복사하는 것이다.

이 이상의 방법은 없다. 저자는 시간을 정해서 '25분간 어디까지 베낄 수 있는지' 도전하는 것을 좋아한다. 분량으로 나누는 것도 좋은 방법이다. 중요한 것은 간격을 적절히 해서 목표를 이루었다는 만족감을 얻을 수 있도록 하는 것이다.

우리나라 초,중,고 교육은 기초부터 탄탄히 다지면서 12년을 학습해 나간다. 특히 수학 같은 경우 더욱 그렇다. 물론 소프트웨어도 똑같은 방식으로 학습할 수 있다. 하지만 너무 지치고 힘들다. 또한 수학과 같이 정형화된 커리큘럼과 순서도 없다. 기존의 학습 방식의 틀을 깨는 연습을 해라. 이 연습만 잘 되어 있어도 몇 개월, 몇 년을 아낄 수도 있다. 위 글 중 "필요한 부분부터 흡수한다."에도 나오는 다음 문장을 꼭 전하고 싶다.

"전체 모두 읽지 않은 것이 께름칙한가? 하지만 좌절하고 전혀 읽지 않는 것보다는 낫다. '전부 읽지 않으면'이라는 완벽 주의가 배우고자 하는 동기를 짓누르고 있다면, 버려버리는 것이 낫다. 동기는 매우 중요하다.

2016-01-07 11:58

안녕하세요. 비슷한 고민을 한적이 있었는데 그때 도움이 되었던 아티클이나 자료들을 첨부해봅니다.

<어떤 랭기지를 먼저 배워야 할까요> http://programmingisterrible.com/post/40453884799/what-language-should-i-learn-first (영문입니다만 번역이 필요하시면 조악하게나마 번역한게 있으니 연락주세용)

<Google의 기술 개발을 위한 가이드> https://www.google.com/about/careers/students/guide-to-technical-development.html

<나는 개발자인데 왜 자신이 없을까> http://deview.kr/2013/detail.nhn?topicSeq=19

<자신있는 개발자에서 훌륭한 개발자로> http://deview.kr/2014/session?seq=14

2016-01-07 13:01

저는 해보고 나서야 이걸 잘할 수 있을지, 직업으로 할 수 있을지, 계속 하고 싶은 일인지 판단할 수 있었어요. 저는 금융을 전공했는데 금융업에서 인턴을 해보로 나서야 직업으로 하기 싫은 일이라는 걸 알 수 있었어요. 학교 다닐 땐 전공이 싫은 건 아니었어요 공부로써는 재미도 있었어요. 프로그래밍 언어만 익혔을때는 저는 백지 상태여서 많이 못하는 것 같아서 힘들고, 다른 친구들보다 이해하는 속도도 느려서 걱정이 됐어요. 근데 웹으로 뭔가를 만드는걸 배운 뒤로는 너무 재밌고 저의 경우는 언어만 배웠을때보단 쉽고 만들고 싶은 것도 많아졌어요. 무언가를 만들수 있게 되기까지는 조금 힘들더라도 참고 해보고 난 뒤에 선택하는 것도 방법일것같아요~ :)

의견 추가하기

연관태그

← 목록으로