디시인사이드 갤러리

갤러리 이슈박스, 최근방문 갤러리

갤러리 본문 영역

어떡해 일기 스핀오프 :: 어떡해식 프로그래밍 언어를 습득하는 방법

어떡해갤로그로 이동합니다. 2010.09.10 23:24:35
조회 660 추천 0 댓글 11


이건 어떡해 일기와는 다른 이야기.
다만 새로운 언어를 습득함에 있어서 꽤 힘든 과정을 겪고 있는 학부생이나
기타 입문자를 위해서 작성 된 글입니다.
저의 경우에는 C언어는 비교적 쉽게 이해했으나, JAVA의 경우 상당한 진통을 겪으며 습득했습니다.
결과적으로 방법의 문제였던 것 같습니다.
JAVA가 객체지향이고 C언어와 다르다는 인식을 너무 강하게 한 나머지 JAVA언어 자체에 겁을 먹고 있던 것이죠.
그리고 이 언어를 어느정도 손에 익게 되었을 때, 프로그래밍 언어를 익히는 일종의 레파토리가 생겨나게 되었습니다.
습득 속도는 느리지만, 결과적으로 느리지만, 종착 할때에 가장 많이 얻게 되는 방법입니다.
저 스스로도 상당히 괜찮은 방법이라 생각되어 이렇게 글을 올립니다.

일단 하나의 교재가 있어야 합니다.
그리고 그 교재를 가지고 아래 6가지 과정을 순서대로 밟으면 됩니다.

1. 배울 언어의 특성 파악하기.
아예 프로그래밍 언어 자체를 처음 습득하는 뉴비라면,
그저 C언어는 절차지향언어 혹은 위에서 아래로 흘러가는 언어라고 이해하는 것만으로 충분합니다.

기존에 다른 언어를 습득하셨던 분이라면, 지금 배우려고 하는 언어가 이미 알고 있던 언어와 무엇이 다른가 정도로 충분합니다.
예를 들면 절차지향<->객체지향, 혹은 JAVA와 C#은 이런 미묘한 차이가 있다더라 정도면 충분합니다.
이것은 어떤 교재든 머릿말에 간략하게나마 적혀있는 것이 보통입니다.

이것은 자기자신이 언어를 습득하면서, 항시 기존의 언어와 비교해보면서 언어를 이해하는데에 필요한 구심점과 같은 도움을 줍니다.

2. main에 모아서 코딩하기
언어를 처음 접하는 분들의 경우에는 교재의 순서대로 따라가기 때문에 대부분은 이 main에 넣어서 코딩하는 과정을 거쳐서 흘러갑니다.
그러나 기존의 언어를 습득하신 분들 특히 객체지향 언어에서 객체지향으로 가는 경우.
클래스의 개념과 객체지향의 개념이 존재하는 상태에서 언어를 습득하게 되면 제일 먼저 main에 적게 코딩하고,
되도록 코드를 클래스나 함수로 나눠야 한다는 부담감을 가지게 됩니다. 나아가서는 메모리 구조나 기타 로우한 사항을 신경쓰기에 이르지요.
이것은 분명 맞는 말이지만, 결과적으로 해당 언어에 대한 친숙함을 익힐 과정을 뛰어넘게 되는 결과를 낳습니다.
C#에서는 광속 코딩을 하는데, 비슷한 모양새인 JAVA에서는 main 띄워놓고 벙쪄 있는 현상 같은 경우가 이 경우입니다.
구현할 수는 있는데 다른 언어를 하고 있다는 인식 자체가 부담감 + 어색함이 작용해서 무엇부터 시작할지 모르는 경우입니다.

이럴때에는 아무것도 신경쓰지 말고, 눈 딱감고 무조건 main에 코드를 구현해보세요.

예제 10개 정도를 구현하면, 아- 갑작스럽지만 이 언어로 슥슥 코딩할 수 있을 것 같다는 생각이 들기 시작하고
이 정도 코드면 나눠도 될 것 같다는 생각이 들 때가 있습니다.
그렇다면 언어에 충분히 친숙해진것입니다.

3. 코드를 쪼개서 함수나 클래스로 구현해보기, main에는 의도적으로 최소한의 코드만을 남겨보기.
기존의 언어를 습득하신 분들은 자연스레 이 경우로 넘어가게 되지만,
처음 객체지향을 습득한 사람이나, 수동적으로 언어를 습득하는 사람들에게 의외로 많이 일어나는 현상으로
Only main 코딩 포에버 라는 현상이 있습니다.
모든 코드를 메인 코드에 넣고, 함수로 깔짝 깔짝 빼는 현상입니다.
이런 경우, 나누기 싫어서 나누지 않았다기 보다는 이전에 해보지 않아서 애써서 하기 어색하고 굳이 하지 않아도 된다는 생각을 가진
분들이 대부분입니다.
그렇다면 한번 의식적으로 코드를 쪼갤 수 있는 대로 최대한 쪼개봅시다.
우선은 기능 순으로 한번 쪼개봅시다. 가령 간단한 덧셈을 구현하는 코드라면 1+1; 과 같이 출력케 하지말고
굳이 sum(1,1)과 같은 방식으로 함수로 넘겨봅시다.
그리고 더 나아가서 calcu(1,1,+) 과 같은 것도 한번 구현해봅시다.
자연스레 함수로 나누는 습관, 그리고 함수와 함수의 관계에 대해서 신경쓰게 됩니다.

4. 두개이상의 예제를 혼합하여 코딩해보기.
책에는 많은 예제가 있습니다.
대부분 하나의 기능을 소개하고, 그 기능을 사용하는 식의 예제입니다.
하지만 그런 예제는 많은 부분에서 단조롭습니다. 그리고 막상 그때 구현한다고 해도, 뒤돌아서면 구현을 어떻게 했는지 기억도 잘 나지 않고
다시 사용하려면, 음음 하는 신음만 흘리게 됩니다. (느끼는 것은 아닙니다)
이것은 예제를 코딩해봤지만, 막상 그 예제를 책에 있는 그대로 혹은 기계적으로 코딩했기 때문입니다.
그다지 머리속에 남지 않았다는 것이죠.

이럴때에는 예제 2개를 혼합하여 코딩을 해봅니다.
가령 번호를 입력하면 물건이 구입되고 지갑에서 돈이 빠져나가는 자판기 프로그램과
랜덤 숫자를 출력하는 프로그램 예제가 있다면

이것을 물건을 구입하면 지갑에서 돈이 빠져나가고, 복권도 한장 나와서 그 복권이 당첨되면 해당 당첨금액을 반환해주는 프로그램을 짜봅시다.

해당 기능을 사용하는 것과 구현하려는 생각이 더해지면서, 코딩하는 내내 이것저것 시험해보고 고민해보게 됩니다.
결과적으로 다시 그 기능을 코딩할 때, 자신도 모르게 그 기능이 키보드를 통해 놀라운 속도로 코딩되는 것을 알게 됩니다.
혹자는 이것을 본능 코딩이라고 합니다.

5. 중소규모의 프로젝트 진행해보기
커다란 규모가 아니어도 좋습니다. 책을 완독하고 스타크래프트 같은 프로그램을 짜라는 이야기가 아닙니다.
이 이야기는 위의 4번의 확장형으로 예제를 두개를 합치듯이 한 파트를 끝내고 기존에 예제들이 설명한 기능을 모두 사용할 수 있는
작은 프로젝트를 진행하라는 이야기입니다.
가령 화면에 헬로 출력, 배열, if문, switch문 for문 등의 과정을 종료했다면 이 모든 기능을 포함하는 프로그램을 작성해보라는 의미입니다.
이상한 것이더라도 좋습니다. 단. 반드시 배웠던 파트의 내용 모두를 포함하여야 합니다.
가령 쉬프트 연산을 왼쪽으로 한번 했을 시, x2가 되지만, *2를 해도 똑같이 x2가 됩니다.
하지만 의도적으로 쉬프트 연산을 이용해서 코딩을 해봅니다.
주변에서 뭐라고 해도 일단은 귀를 닫으십시오. 배움을 위한 코딩과 실무를 위한 코딩은 엄연히 다릅니다.
어처구니 없는 억지 코딩일지라도, 이 코딩하는 방식은 결국 실무적인 코딩을 할 때 상당히 다른 모습을 갖게 해줄 것입니다.

6. 5를 통해 작성한 프로그램을 그림으로 그려보기.
이 과정은 시간이 지남에 따라 5와 순서가 바뀔 수 있습니다.
하지만 누락해서는 안될 것입니다. 본격적인 설계와 관련된 부분입니다.
가령 처음 코딩을 시작할 때는 별 고민을 하지 않게 됩니다.
예를 하나 들어봅시다. 액션 게임입니다. 주인공이 칼을 들고 몬스터를 칩니다. 몬스터는 억 소리를 내고 쓰러집니다.

그럼 이렇게 되겠네요

타격 -> 억 사운드 재생 -> 몬스터 쓰러짐 -> exp업 -> 이겼다

그렇다면 이것은 어떨까요?

타격 ->몬스터 쓰러짐 -> 억 사운드 재생 -> 이겼다 -> exp업

첫번째의 경우에는 억 사운드 재생을 반복함으로서 몬스터가 타격받고 있다는 것을 표시할 수 있는 장점이 있네요.

그렇지만 두번째의 경우 타격시에는 아무런 효과도 없고, 비로소 몬스터가 쓰러져야 억 소리를 내게 됩니다.

사용자 입장에서는 타격이 들어가는 지 아는 것이 쉽지 않겠네요, 하지만 이겼다는 메시지가 출력된 후, exp업이 됨으로 통해

심리적으로 승리에 따른 보상이라는 느낌이 exp업이 된후 이겼다는 메시지를 받은 것보다 큰 것 같네요.

그럼 이 장점을 합쳐봅시다.

타격 -> 억 사운드 재생 -> 몬스터 쓰러짐 -> 이겼다! -> exp업


이 그림으로 자신이 작성한 프로그램을 그려보는 과정은 바로 가장 효과적이고 상황에 가장 적절한 프로그램 설계를 할 수 있도록 도와줍니다.
이것이 익숙해지면, 코딩을 시작하기 전에 연습장에 그림을 끄적인 후, 그 끄적인 그림을 그대로 코딩으로 옮기는 습관이 생기게 됩니다.
그리고 결과적으로 이것이 속도도 빠르고 에러율도 낮다는 생각도 하게 됩니다.
매우 중요합니다, 이 뿐만이 아니라도 자기가 짝 프로그램을 전체적으로 파악하여 문제점을 추출하는 데에도 상당한 도움이 됩니다.
혼자 작성한 프로그램이라도 100줄이 넘어가면 소스 보기가 힘들어집니다.
아무리 주석이 달려있고, 되도록 쉽게 코딩을 했더라도 아무래도 전체적인 형상을 파악하기는 힘이 듭니다.
이럴 때는 이렇게 그림을 그려봅시다.

7. 가장 확실한 습득 방법은 삽질이라는 것을 잊지 않습니다.
스터디를 하면서 앞에서 가르쳐보기도 하고, 소스 코드를 설명해주어서 얻게 된 결론인데,
막상 언어를 습득하는 사람들은 대부분 그 언어를 습득하고자 하면서도 반복적인 실패를 굉장히 꺼려하는 경향이 있습니다.
흔히 우리가 이야기하는 삽질이죠.
"이것은 어떻게 합니까?" 이렇게 물을 때 질문자가 원하는 것은 정답입니다.
하지만 언어를 습득하는데 있어서 실질적으로 이 정답은 별로 도움이 되지 않습니다.
언어라는 것은 일종의 테크닉이라고 생각합니다. 프로그래밍에 알고리즘이라는 문제를 해결하는 방법이 존재한다면
프로그래밍 언어라는 것은 그 방법을 코드로 구현하는 일종의 도구 사용법입니다.
그렇기 때문에 많이 써보고 많이 실패해서 그 도구에 익숙해져야 코드 구현이 능숙해집니다.
이렇게 한번 물어보세요.
"만약에 이걸 이렇게 쓰면 어떤 문제가 있을까요?"
아, 그전에 검색은 한번 해봅시다.


제가 언어를 습득하는 방법은 이렇습니다.
아무쪼록 저와 같이 입문을 하시는 분들에게 많은 도움이 되기를 바랍니다.


추천 비추천

0

고정닉 0

0

댓글 영역

전체 댓글 0
등록순정렬 기준선택
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 제목 글쓴이 작성일 조회 추천
설문 어떤 상황이 닥쳐도 지갑 절대 안 열 것 같은 스타는? 운영자 24/05/20 - -
공지 프로그래밍 갤러리 이용 안내 [69] 운영자 20.09.28 34982 62
2701240 솔직히 성기를 핥는행위 거부감드는데 무섭구 딱꾹(61.99) 22:44 0 0
2701239 프갤주인은 따로있었어 멍청한유라ㅋ갤로그로 이동합니다. 22:43 5 0
2701237 성욕의 끝은 스캇과 게이라는데 [4] 헬마스터갤로그로 이동합니다. 22:39 18 0
2701236 이쁜여자들은 발정냄새도 이쁠듯 [5] 딱꾹(61.99) 22:39 18 0
2701235 플러터 쓰던 회사들은 플러터 그대로 쓸려나? [1] 프갤러(118.235) 22:38 5 0
2701234 귀여운 여자아이 미소녀 여자아이는 못참음 ㅇㅅㅇ [1] 류류(210.217) 22:38 9 1
2701233 아니 뭐 자바는 뭐가 많냐 [1] ㅇㅇ(182.230) 22:38 7 0
2701232 미녀들은 발정냄새 어떨지 궁금하다 [1] 딱꾹(61.99) 22:37 5 0
2701230 피시는 yes no 모바일은 no yes로 [2] 헬마스터갤로그로 이동합니다. 22:36 7 0
2701228 따꾸기 정력제 먹습니당♡ 딱꾹(61.99) 22:35 2 0
2701227 애플이 주도하는 no yes 순서 그지같지않냐? [1] 헬마스터갤로그로 이동합니다. 22:34 8 0
2701226 초3 정도가 가장 꼴리는 나이가틈 ㅇㅅㅇ [2] 따당이갤로그로 이동합니다. 22:32 23 0
2701224 회사 다니는 것이 고통이다 [5] 금융오지마라갤로그로 이동합니다. 22:29 22 1
2701223 멍유 또 59쌀피자 예정이야 ㅇㅅㅇ? [4] 류류(210.217) 22:28 17 2
2701221 이요~ [5] 멍청한유라ㅋ갤로그로 이동합니다. 22:21 28 0
2701220 멍유는 행복한 주말을... [1] 발명도둑잡기갤로그로 이동합니다. 22:19 9 0
2701219 프갤에 못 보던 얘뜰이 있군? [2] 프갤러(121.172) 22:18 27 1
2701218 이번에 JPA 안쓰는 프로젝트 들어갔는데 [1] 프갤러(1.230) 22:14 28 0
2701216 주말이 되면 인스타그램에 결혼식 사진이 많이 떠서 발명도둑잡기갤로그로 이동합니다. 22:11 9 0
2701215 류류 인가 이놈 소아성애자 싸이코맞지? [2] ㅁㅁㄹ(39.7) 22:10 23 0
2701214 30넘어서 결혼이 뭔 의미가있음 ㅇㅅㅇ [2] 류류(210.217) 22:10 19 0
2701213 이게 미소녀의 아름다은 알몸임 ㅇㅅㅇ [1] 류류(210.217) 22:08 32 2
2701212 나도 CTO 달구싶다 ㅇㅇ(172.226) 22:07 14 0
2701211 지금 30넘은 얘들은 [4] 프갤러(121.172) 22:06 48 1
2701210 프리들한테 업무 넘기지 마라 포항의봄갤로그로 이동합니다. 22:02 14 0
2701209 평균 결혼나이 34 [3] 프갤러(211.44) 22:00 32 0
2701207 오트슨하고 오라전대 아는 사람도 있냐? [1] 프갤러(121.172) 22:00 20 0
2701206 우리회사 컴터 개쓰레기임 ㅇㅅㅇ 포항의봄갤로그로 이동합니다. 21:53 15 0
2701205 첫회사 좃소 생각나네 [4] 섹카냥갤로그로 이동합니다. 21:52 49 0
2701204 오랜만에 화이트앨범 보면서 정화시켜야지 [4] 프갤러(121.172) 21:51 36 1
2701203 나도 여자들한테 친절하게 대하면 발명도둑잡기갤로그로 이동합니다. 21:50 16 0
2701202 언제쯤 이런 여자아이들이랑 섹스를 할수있을까 ㅇㅅㅇ [1] 류류(210.217) 21:50 33 1
2701200 패미년들 옹호하는 얘들은 정신줄 놓고 산 애들임 프갤러(121.172) 21:46 24 1
2701199 보닌 개인철학이 거의 완성되었어. [3] 프갤러(121.186) 21:45 26 0
2701198 그레이스케일 [3] AppHiki갤로그로 이동합니다. 21:45 23 0
2701197 저 깃헙으로 팀플 처음하는데요 프갤러(14.32) 21:40 17 0
2701196 오늘의 발명 실마리: 미디 콘트롤러로 연주하면 가상 캐릭터가 실시간 반영 발명도둑잡기갤로그로 이동합니다. 21:38 8 0
2701195 미래의 어느 역사학자들의 대화라는데 (요약편) 프갤러(211.241) 21:35 10 0
2701194 미래의 어느 역사학자들의 대화라는데 프갤러(211.241) 21:33 11 0
2701193 고양이 장갑 발명도둑잡기갤로그로 이동합니다. 21:29 10 0
2701192 개씹병신국가 ㄹㅇ외국인도 소름돋아하는 나라 ㅋㅋ [1] 뒷통수한방(1.213) 21:28 27 0
2701191 앞으로 1년 전사해서 ㅇㅅㅇ [6] AppHiki갤로그로 이동합니다. 21:26 42 0
2701190 초중고 대학 16년 공부해서 얻는게 뭐냐 프갤러(211.44) 21:25 16 0
2701189 50년만 안죽고 버텨라 [2] ㅇㅇ(223.39) 21:22 34 0
2701188 페미년들의 침공으로 더럽혀진 정신을 정화시키는 그림 프갤러(121.172) 21:17 41 1
2701187 오늘의 발명 실마리: 시간여행 증강현실 서비스 발명도둑잡기갤로그로 이동합니다. 21:17 9 0
2701186 베타남들이 정치를 하니깐 이모양이지 프갤러(172.226) 21:15 18 1
2701185 it노조 글 읽는데 진짜 si 회사들 일정 관리만 하냐 ㅇㅅㅇ [2] 포항의봄갤로그로 이동합니다. 21:15 34 0
2701184 jsp만 보면 열받는데 정상임? [1] 키비갤로그로 이동합니다. 21:12 33 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2