MubCrazy2014. 8. 5. 00:36

나도 그러하지만 대부분의 초급 개발자들이 1개의 SW를 잘 만들 생각을 하는데

사실 성공한 이가 없는 것을 봐선 형편없는 것이라 생각한다.

 

그렇게 생각하는 이유는 무엇인가?

대부분의 초급 개발자는 “이미 있는 잘 만들어진 프로젝트의 약간의 개선”을 원한다.

예를 들면 스마트폰을 새로 구입하면 사용하지도 않을 일정관리 어플을 깔고 이것저것 일정을 등록해 보면서

“아 이런 기능이 있었으면 사람들이 더 쓸 것 같아!”

다음에 드는 생각은

“없으면 내가 만들어야지!, 아~ 역시 이미 마켓에 있네…, 시장에 혜성처럼 등장할 수 잇는 뭐 좋은거 없나.. "

이렇게 하며 다른 아이템을 찾아 간다.

대부분의 초급 개발자들에게 어플리케이션 개발이라는 것은 “용돈벌이” 혹은 “회사에서 나를 해방시켜줄 수단” 이다…

 

반대로 생각해보자.

위에서 생각했던 일정관리 어플을 만드는 사람은 “밥 먹고 그것만 만든다”, “생각보다 여러명이 만든다”,

“디자이너 센스가 좋네”, “ 나보다 똑똑할 수 있다” 등 내 도전을 막아버리는 수많은 이유를 갖고 있다.

그래서 초급개발자의 첫 SW개발에 시간이 걸리는 것이다.

 

위 상황에서 제일 최악의 것은…

새로운 기능을 넣어봤자 다른 어플리케이션에서 홀딱 카피해버리면  그만이다….

대기업에서 전문 개발자 투입해서 카피해 돈으로 마케팅을 해버리면 그만이다…

 

상황이 이러하듯 뭔가 대중이 사용하는 것을 만든다는 것은 충분히 어렵다..

 

뭔가 하나 더 말해주자면…

위에 말한 “제일 최악의 것”이외에 더 최악의 것이 있다.

사용자로부터 외면 받는 것..

“많은 사람들이 캔디크러쉬사가 같은 것을 내가 조금 더 빨리 만들었으면 어떻게 됐을까?”라고 생각하며

자신이 돈방석에 앉아 람보르기니를 모는 모습을 상상할 수도 있다.

만약 본인에게 그런 경험이 있다면 게임 제작사인 www.king.com을 방문해 보기 바란다.

캔디크러시만 하는 줄 알았는데 몇개의 게임이 더 있지 않은가? 그나마 손가락으로 셀 수 있어 다행이다.

그렇다면 www.royalgames.com 을 방문해 보라 모든 카테고리를 확인해보면 119개인 것을 알 수 있다..

더 나아가 하단부에 아래와 같이 적혀있다…

We currently have more than 150 fun and engaging games in our portfolio and we are constantly developing new and exciting games to play.

 

제작사인 king 입장에서 생각해 보면, 비슷한거 150개 정도가 크게 성공하지 못하거나 망하고, 1개가 성공한 거임..

해보면 캔디크러쉬랑 비슷하거나 개인의 취향이지만 더 재미있는 게임도 많다..

다시 처음으로 돌아가보자… “어떤 것을 만들고 싶은가요?”

Posted by 슈퍼 점프
Book2014. 8. 4. 22:05

임백준의 프로그래밍은 상상이다는 2008년 한빛미디어에서 출판된 책이다.

[나름정리]

저자는 자신의 경험 및 이론을 토대로 다른 프로그래머에게 메세지를 전달하고 있다.
자신의 직무 경험을 토대로 ‘프로그래밍’에 대한 철학과 이런저런 방법론, 혹은 팁을 전달하고 있는데,
6년이나 지난 책임에도 불구하고 현재의 프로그래머들도 분명히 읽어 볼만한 가치가 있다.
프로그래머로서 실무자의 경험을 들을 수 있고 프로그래밍에 대한 철학적 개념을 읽을 수 있다면
그 자체로 이미 훌륭한 멘토를 둔 것이 아닐까…

 

[기억에 남는 것]

해커와 화가를 읽은 후에는 프로그램은 예술을 만드는 것이고 프로그래머는 예술가라는 생각을 했었다.
헌데 책 내용 중에 프로그래머는 예술품을 만드는 게 아니라 예술가(프로그램) 자체를 만드는 것이라는 표현을 봤을 때 소름이 끼쳤다..
그 표현에서 저자의 통찰력을 알 수 있었고, 그가 내 멘토가 되었으면 좋겠다고 생각했다.


Posted by 슈퍼 점프
MubCrazy2014. 5. 13. 00:16

학생들이 꽤나 오랜시간을 배우는데 제대로 하지 못하는 과목이 있다.


바로!


자.료.구.조


대학 수업 중 일부는 자료구조에서 간단한 알고리즘을 학습하는 것에만 초점을 두고 학습하고,

일부는 이진트리가 자료구조의 최종 구조인 것 처럼 배운다.


사실 자료구조는 깊게 들어가면 끝이 없을 정도로 넓고 깊은 학문인데,

학부생 수준에서 C로 쓴 자료구조론 을 모두 이해하고 연습문제를 푼 다는 것은 어려운 일임이 분명하다.


헌데, 너무나도 웃긴것은 굉장히 많은 책들이 "자료구조"라는 이름으로 나온다..

내가 볼 땐 "자료구조 입문", "자료구조 개론"에 불과한 내용을 다룬체로 말이다.

많은 학생들이 자료구조 알아요! 라는 말을 할 때 나는 "내가 몇년간 공부해도 다 못한걸?" 이라는 생각으로 물어보면

역시나 이진트리가 그 학생이 아는 최고의 트리였다.


사실 자료구조는 그러한 것이 아니다. 자료구조는 마치 역사 공부처럼 해야하는 것이다.

현재는 남의 이야기 같지만, 다가올 미래를 대비하기 위해서?!


자료구조에 대한 몇가지 질문에 답을 적어본다.


1. 꼭 자신이 구현을 해봐야 하나요?

   - 네, 수준에 따라서는 많이 다르지만, 구현을 하는 것이 좋습니다.

2. 고급언어에선 간단히 불러와 쓸 수 있는데 왜 구현을 하는 법을 알아야 하죠?

   - 자료구조를 구현을 할 수 있는 능력 자체가 중요한 것이 아니라, 자료구조를 구현함으로

     '자신의 사고를 코드로 옮기는 기술'을 익히는 것이 중요합니다. 그것은 프로그래머의 기본 자질입니다.

3. 구현은 일반적으로 프로젝트를 해도 많이 할 수 있는데, 자료구조를 구현해야 하는 이유는 무엇인가요?

   - 질문을 하는 당신을 비난하거나 무시하는 것은 아니지만, 당신이 짠 프로그램은 어떠한 로직이나 

     알고리즘이 구현이 되어 있기 보다는, 있는 기능들을 퍼와서 쓴게 전부 일 수도 있습니다.

     현재 대학생 수준에서 코딩은 '자신의 사고를 코드로 옮기는 기술'과는 거리가 먼,

     라이브러리, 프레임웨크 사용법에 지나지 않는 경우가 많습니다.

4. 그럼 자료구조는 사람들이 꽃이라고 하는 RED BLACK Tree정도를 구현 하면 되는 것인가요?

  - 아니요, 선형 자료구조에서 비선형자료구조로 바뀌는 과정과 

    이진트리가 RED BLACK Tree로 변화되는 과정을 아는게 더 중요해요. 자료구조는 역사공부 같은 거니깐요..

5. 그럼 어떻게 공부해야 하나요?

 - 링크드 리스트로 이뤄진 스택정도를 코드를 보며 학습 한 뒤,

   이후에 나오는 자료구조는 알고리즘만 보고, 코드를 참고하지 않고 공부해야합니다.

   자료구조를 구현하기 위해 소스를 암기하는 순간, 허공에 삽질을 하는 것과 같다고 생각합니다.

6. 다시 한 번 더 묻겠습니다. 자료구조 중요한 가요?

 - 당신에게 묻겠습니다. SW프로그래머가 되고 싶은가요?



Posted by 슈퍼 점프
Algorithm2014. 4. 20. 23:29

최근 알고리즘 문제풀이에 대한 중요성이 계속 올라고 있다.

물론 이전부터 중요했었지만, 모바일 어플리케이션 개발 열풍이 불고 나서 초급 개발자들에게 알고리즘은 천대 받은게 분명하다.

학생들이 많이 묻는다. 


"알고리즘이 왜 중요해요?"

 1. 알고리즘 풀이 능력으로 SW 개발 수준을 평가하는 곳도 있어.

 2. 한순간에 팍! 하고 실력이 늘 수 없기 때문에 지금부터 천천히 해놔야해. 마치 영어공부 처럼!

무조건적으로 학습을 해야한다고 강조를 했었다.

사실 답을 잘 몰랐을 수도 있다.


그런데 현재 대한민국 초급 프로그래머가 알고리즘을 못하는 이유는 아래와 같다


1. 구현 위주의 학습을 진행함

    구현 위주의 학습이란 자신의 결과물이 결과물 위주의 평가를 받는 환경에서 나오는 것이다. 대학교 때 대부분의 프로그래밍 수업이 결과물 시현 위주로 되어 있다. 이렇기 때문에 모로가든 도로가든 결과물만 나오면 되는 나쁜 습관이 생겨버린다.

2. 플랫폼, 프레임워크, 라이브러리 사용에 초점을 맞춤

  또한 그런 구현 위주의 학습을 하다보니 자신의 실력을 뻥튀기 해 줄 수 있는 것들을 찾는다. 시연 결과가 잘 나와 하니 잘 갔다 쓴다. 실제로 정렬을 짜지도 못하면서 STL등을 이용해서 간단히 정렬을 하는 법만 알면 정렬을 할 줄 안다고 느낀다. 

  게다가 다양한 스마트폰 플랫폼, 다양한 웹 개발 환경, 라이브러리, 심지어는 언어까지 다양하다 보니 그 다양한 것들에 대해서 공부하다 보니 상대적으로 알고리즘에 대해 학습할 기회가 없었다.

3. 다양한 어플리케이션을 요구하는 시대

 스마트폰 어플리케이션 시장이 활성화 되면서 다양한 어플리케이션이 나오기 시작했다. 소비자가 원해서 직접 만드는 경우도 있으니 Microtrend 성향의 SW 시장의 활성화는 프로그래머들을 더욱 바쁘게 만들어 버렸다


이런 상태에서 프로그래밍을 하다보면 수학의 중요함을 모르고,

자신의 코드의 중요성은 잊은 채 화면에서만 잘 작동하면 된다고 생각한다.

스스로 장래의 치킨집 사장이 되기 위하여 프로그래밍 공부를 하고 있는 상황이다.


Posted by 슈퍼 점프
MubCrazy2014. 2. 9. 02:46

가끔 C를 처음 배우고, 객체지향 프로그래밍을 시작한 사람들에겐 주요 키워드가 있다

바로 "Design Pattern" <이하 DP>


그도 그럴것이 절차지향 처음하다가 객체지향을 막 접한 상태에서 DP에 관한 설명이나 책을 보면

"이게 뭔 소리야?", "그냥 이런게 있나보다..." 한다.

그리고 그것이 객체지향 프로그래밍에서 꼭 갖춰야할 한가지 요소로 판단한다.


그래서 객체지향을 막 접한 이들이 DP 서적을 볼 때 

'과연 이해는 하고 있을까?'

'주변의 추천에 의해서 먼저 보는 것인가?'

'저걸 지금 보면 적용할 수 있을 만한 안목이 있을까?'

이런 생각들을 하게 된다.


사실 객체지향적 사고가 천재적으로 뛰어나다면 DP를 따로 공부하지 않아도 된다.

(협업을 위해, 다른이에게 쉽게 자신의 코드를 이해시키기 위해 필요할 뿐..)


GoF의 DP는 객체지향의 전문가들이 모여 자주쓰는 객체지향 설계 방법을 정의해 놓은 것이다.

그뿐이다. 가끔 패턴 맹신론자들이 나와서 DP의 이름을 쉴세없이 나열하면서 설명하면,

'리스코프 치환은 알까?'

'아니 그보다 더 기초적으로 응집도 높은 코드와 결합도 높은 코드의 차이는 알까?' 라는 생각을 하게 된다.


각각의 DP는 홀로 쓰이는 경우가 적기 때문에, 따로따로 공부해봤자

구현에 아름답게 적용할 수 있는 경우는 지극히 적다..


http://www.codeproject.com/Articles/6849/Design-Patterns-Implementation-in-a-Storage-Explor

http://www.codeproject.com/Articles/12183/Design-Your-Soccer-Engine-and-Learn-How-To-Apply-D


Factory 가 없는게 흠이지만, 충분히 읽어볼만 함!







Posted by 슈퍼 점프
MubCrazy2014. 2. 3. 00:53

많은 학생들이 물어보고, 물어본다.


프로그래밍을 잘하려면 어떻게 해요?

그에 따른 적절한 답을 주지 못하면 많은 이들은 엄청난 시행착오를 겪게  된다.


내게 묻는 사람들이 주로 대학생, 이제 막 프로그래밍을 시작하려는 사람들이기 때문에 

그들에게 맞는 방법을 설명하려 한다.


학생들에게 조언을 해주고 수 많은 Case 중 가장 좋은 방법은 바로

'따라하기'이다.


어떤 종류이건 자신이 학습하고 싶은 분야를 정하고,

기존에 있는 것을 똑같이 Copy 하는 것이다.


즉 그 수준의 학생들에게 '안드로이드를 잘 하려면 어떻게 해야해요?'라는 질문을 받는다면,

너 C할줄 알지? 자바는? 자료구존? 뭐 이런거 다 확인하고나서

그럼 이 책 사서 따라해봐 라는 솔루션 보다는.


목표로 한 프로그램, 서비스, 어플 따위를 설정하고 똑같이 Copy 하는 것이 가장 빠르게 늘 수 있는 방법이다.


물론 체계적으로 배우면 좋겠지만, 그렇게 끌고가면 아무도 따라오지 못한다.

더 정확히 말하면 질문자에게 필요한 것은 체계적인 학습보다, 직접 빌드해서 만들어보는 것이 훨씬 더 중요하다.

그게 프로그래밍에 더 빨리 친해지고, 자신감을 갖을 수 있는 방법이다.


대게는 그렇게 구현에 초점을 맞춰 공부를 하게되면 학교에서 전산 관련 과목이 왜 필요한지 스스로 깨닫게 된다.

학교에서 배우는 전공 '자료구조', '논리회로', '알고리즘', '운영체제', '이산수학', '선형대수','데이터통신' 등등의

필요성과 중요함을 스스로 깨닫고, 다시 공부를 하기 때문이다.


부가적으로 이렇게 '따라하기'를 하다보면 SW관련 안목도 올라갈 수 있다.

새로운 서비스나 프로그램을 접할 때 단순히 사용만 하는 것이 아니라

신기하게 느껴서 "이건 어떻게 구현한 거지?" 라고 생각할 수 있는 기회를 갖을 수 있고,

그 차이는 더 많은 학습의 기회를 제공할 수 있기 때문이다.



Posted by 슈퍼 점프
MubCrazy2014. 1. 2. 23:58

중학교 때 유난히 컴퓨터에 관심이 많았던 나는 또래들이 컴퓨터로 할 수 있는 거의 모든 것을 다 했다.

PC통신, 인터넷, PC게임, 온라인게임, 포토샾은 물론 AutoCAD 까지 할 수 있었다.


그러다 바람에 나라에 빠졌는데 칠지도가 갖고 싶었다.

돈 없고, 게임할 시간도 부족한 학생 때라 칠지도는 말 그대로 꿈의 아이템이였다.

우연히 PC통신 게시판에서 'PC방에서 바람의 나라를 했는데, 해킹당해 칠지도를 잃어버렸다'라는 내용의 글을 보게됐고,

그 뒤로 아무것도 모른채로 야후에 해킹이라고 검색을 했었다.


15살의 나이에 인터넷에서 다운로드 받은 출처가 정확하지 않은 Hwp문서로 

리눅스 구조를 공부했었다. 커널이 뭔지.. 이게 내게 칠지도를 갖다줄 수 있는 것인가?!


리눅스를 깔아보지도 못한 채 글로만 리눅스를 읽었다.

당시에 리눅스 설치는 매우 어려웠다. 

우분투는 커녕 리눅스 설치 CD를 구하려면 서점에서 3~4만원 정도의 책을 구입했어야 했다. 

헌데 그마저도 설치가 쉽지 않았다.


그렇게 공부를 하다보니 "C언어를 알아야 리눅스를 제대로 할 수 있고, 해킹을 제대로 할 수 있다"라는 인터넷 글을 보게된다.


허허 C언어는 무엇인가? 영어는 커녕 한국어도 잘 못하는데,

그러다 동네 형을 통해 C언어 뿐만 아니라 C++이라는 것도 있다는 것을 알게 된다.


뭔가 덧셈 다음엔 뺄샘을 배우듯 C -> C++ 이 순서대로 공부해야 하는 건가?


그러다 그 형에게 질문을 한다.

"형 전 C언어가 뭔지도 잘 모르는데 C+이나 C++을 해도 될까요?"

내가 SW에 대해 질문한 첫번째 멍청한 질문이었다.


뒤로 대학을 컴퓨터 교육과로 입학해서 Programming에 관심을 갖고,

교수님을 찾아간다.

"교수님, 전 C를 해야 하나요? 그 다음에는 C++과 JAVA중 뭘 해야하죠?"

두번째 멍청한 질문...


지금 내가 예전에 그랬던 것 처럼 수많은 대학생 및 SW Programmer를 꿈꾸는 사람들에게 질문을 받는다.

"C# or JAVA or C++"


이런 웃지 못할 상황은 왜 일어날까?

바로 C'언어'라는 표현 때문은 아닐까?


대게 많은 사람들이 컴퓨터 언어를 마치 외국어처럼 생각하는 것은 아닌가!!!

영어, 중국어, 불어, 독어, 일본어 뭐 이런것 처럼 말이다.

이 기세를 몰아 대한민국의 SW Programming 관련 기초서적은 모두 '언어'기반으로 나오게되니 당연한 결과이다.

나 조차 그렇게 생각했었고, 많은 사람들이 아직도 그렇게 생각하니 말이다.


그림에 비유해 Programming을 설명하자면, Language는 연필이고 붓이다.

그림을 잘 그리느냐 못그리느냐의 차이는 화가(프로그래머)에 의존하는 것이지 연필이나 붓과는 큰 관련이 없다.

막상 어떤 언어를 선택하는냐는 별반 차이가 없다는 것이다.

(사실 그림보다는 문학작품이 더 적절한 비유 대상이다.)


연필로 캐리커쳐 잘 그리는 화가가 매직으로 못그릴리가 없다.

다만 동양화를 그리는데 포스터용 붓을 준다면 그리기 힘들 것이다. 

컴퓨터 프로그래밍 언어란 그런 것이다. 웹을 C로 짤 수 없는 것 처럼...


화가가 되려면 그림연습을 해야지, 연필을 잘 깍는다고, 팔레트에 색을 잘 섞는다고 그림을 잘 그릴 수 있는게 아니듯,

프로그래머가 되려면 프로그래밍을 해야지 

언어 사용법이 전부인, 그 조차 if문과 for문에 대해서 절반이상 다룬 책을 공부한다고 좋은 프로그램을 만들 수 있는게 아니다.


어떤 언어를 선택하는데 시간을 보내기보다는,

뭐라도 하나 선택해서 머리속에 그것을 모니터 위로, 스마트폰 위로 끄집어 내는 것이 가장 중요한 것 같다.

마치 거진 모든 C언어 책에서 "Hello World"를 첫 예제로 하듯이 말이다.







Posted by 슈퍼 점프
Programming/C#, WPF2012. 4. 3. 22:23


당장 WPF로 해야하는데, WPF에 어떤 기능이 있는지 어떤 컴포넌트를 어떻게 사용해야할지 잘 모를 때는 WPF SDK Viewer 를 사용하세요


http://msdn.microsoft.com/en-us/library/aa972141.aspx


위의 홈페이지에 들어가면 C#, VB 둘 중 선택해서 다운 받을 수 있습니다.

다른 정보 안보여주고 WPF에 관한 것만 빠르게 찾을 수 있으니 훨 효율적이네요.

단, 영어입니다. ㅋㅋㅋㅋ

그래도 프로젝트 다운받으셔서 돌려보시면 쉽게 하실 수 있을거에요!

Posted by 슈퍼 점프
Programming/C#, WPF2012. 4. 3. 20:27


요즘 읽고 있는 소스입니다.

WPF로 VS2010처럼 여러 창들을 도킹할 수 있게 만든 프로젝트.

 


다음과 같이 할 수 있어요.


http://www.codeproject.com/Articles/18812/WPF-Docking-Library

위의 주소가 본래 아티클의 주소이고

http://blog.naver.com/37441/80156421060

이게 아티클 해석한 블로그의 주소 입니다.





다음이 클래스 다이어그램이죠.

상속 관계만 보여주는 거 말고 다른 방법도 있을 것 같은데; 찾아봐야겠어요. 일단 다시 분석!



Posted by 슈퍼 점프
Programming/C#, WPF2012. 4. 3. 18:22

http://www.java2s.com/Tutorial/CSharp/CatalogCSharp.htm

이건 뭐 가이드 라인이라기 보다는 종합적 예제입니다.

C#에 대한 거의 모든 것을 다 다뤘다고 생각하셔도!

실질적인 사용법이니, MSDN을 보며 헛물 캐는 것 보다 좋을 것 같네요 ^^

예제소스 풍부한 C#좋아요!

Posted by 슈퍼 점프