System SW 를 주로 했던 개발자로서 생각하는 커리큘럼입니다.

물론, 다른 더 좋은 방법이 있을 수도 있습니다.

물론, 제가 이 방법을 따르진 못했습니다. 제가 배울 땐 누구도 가이드를 주지 않더라구요 ㅠ

 

1. C 언어 문법

  - 조금 지루한 단계입니다. 하지만 영어나 중국어를 배울 때 그러하듯이 가장 기본적인 문법은 반드시 외워야 합니다.

  - 외국어를 배울 때와 마찬가지로 책에 있는 내용을 읽고 외우는 건 크게 도움이 되지 않습니다.

    꼭 한줄 한줄 직접 작성해가면서 손으로 익혀야 의미가 있습니다.

  - 처음 할 때엔 그대로 베껴도 빌드에러가 납니다. 그리고 무슨 에러인지도 아시기 힘듭니다.

    물론 에러가 안 나도 책에 나온 결과가 같지 않는 경우도 많습니다.

    이러한 과정을 통해서 익혀야 코딩을 할 수 있습니다. 

 

2. C FAQ : http://cinsk.github.io/cfaqs/html/

  - C 문법이 익숙하다면 이제 Why 에 대해 알아야 합니다.  

  - C 역시 국제 표준(ISO/IEC 9899:1990 Programming Languages -- C)으로 정의되어 있고,

    그 단체에서는 Why 에 대한 답으로 FAQ 를 작성하였습니다.

    다행히 어느 선행 프로그래머께서 이를 한글로 번역해놓으셨네요~~

    꼭 한번은 읽어보는게 좋습니다. 물론 다른 걸 하고 나서 왜에 대한 궁금증이 생겼을 때 봐도 됩니다.

    하지만 보기전과 후에 C 를 대하는 태도는 달라질겁니다

 

3. 알고리즘

  - 알고리즘은 역시 좋은 선생님께 배우는게 제일 좋습니다. 물론 독학도 괜찮습니다. 

    제가 본책으로는 한빛아카데미의 문병로 교수님의 "쉽게 배우는 알고리즘" 이라는 책이 괜찮았습니다.

    뭐 다른 알고리즘 책도 괜찮습니다.

 

  - 알고리즘 책을 볼 때에는 절대 답을 먼저 보면 안됩니다.

    특히 코딩을 업으로 삼으신다면 절대 답을 먼저 보면 안됩니다.

    문제를 어떻게 푸는지 알아가는 것이 알고리즘을 공부하는 이유인데 답을 쉽게 보면 코드를 그저 암기한 것 밖에 되지 않습니다.

 

    물론 단지 어떤 시험에서 좋은 성적을 받기 위해서, 그리고 업으로 삼지 않는다면 그래도 상관없겠죠...

    대신 "생각하는 힘"은 길러지지 않을 겁니다.

 

    현업에서 닥치는 문제는 책에서 배운 몇몇 알고리즘으로 해결할 수 없으며,

    책에서 배운 알고리즘으로 해결될 문제들은 이미 앞선 프로그래머들이 라이브러리로 만들어놓았거나 좋은 논문을 써놨습니다.

    따라서 그저 이미 만들어진 라이브러리를 재사용하는 것이 훨씬 성능 좋은 코드를 만드는 길입니다.

 

  - 해결해야 하는 문제가 무엇인지 명확히 파악하고, 그 문제를 해결하기 위해 가능한 많은 고민을 해보세요...

    고민을 하다보면, 분명 허접한 알고리즘이라도 반드시 나옵니다. 그리고 그것을 구현해보세요...

    당연히 처음에는 답이 안 나올 겁니다... 그러한 과정을 거치다보면 어찌어찌해서 결국 문제를 해결할 수 있게 됩니다.

 

    그리고 그 때 답을 보세요..

    그리고 그 답이 자기가 생각한 답이랑 맞나 확인해보세요..

    혹시라도 "아 이렇게 하면 훨씬 효율적으로 작성할 수 있었구나..." 혹은 "아, 왜 나는 이런 생각을 못했을까?" 하는 생각이 든다면...

    그래도 코딩에 흥미가 있는 겁니다..

    (물론 처음부터 잘하시는 분들도 있고, 처음부터 완벽한 답을 내는 분들도 간혹 있습니다.

     그런 분들은 이글을 보지 않을거라 믿고 작성합니다. ^^)

 

    코딩은 이렇게 흥미를 느껴야 실력이 늘며 나이가 들어도 할 수가 있습니다. 그래야 업이 될 수 있죠...

 

--------------------------------------------------------------------------------------------------------------------------

여기까지는 코딩을 한다면 기본적으로 거쳐야하는 코스입니다.

물론 2번은 Why가 궁금할 때 보면 더욱 효과적이니 보는 시점을 조금 늦추어도 상관없겠죠~

 

그리고 나면 이제 갈림길이 나옵니다.

어떤 사람은 서버쪽, 어떤사람은 Applicaiton쪽, 어떤사람은 System SW, 어떤 사람은 SW Engineering, 등등등...

하지만 어떤 길을 가던지 SW 의 길을 간다면 위의 3가지는 기본으로 하셔야 할겁니다.

물론 언어가 바뀔 수는 있죠  ^ ^

 

만약 System SW의 길을 간다면 다음의 링크를 추천하고 싶네요..

그 어려운 Embedded System SW 를 제가 본 어떤 책이나 글보다 쉽게 설명했거든요

 

http://recipes.egloos.com/