프로그래밍 언어가 숙달되는 것에 대한 개인적인 생각

사실 이건 그냥 내 잡소리다. 걍 내 경험 섞인 잡소리….

근데 아무래도 이건 그냥 경험으로 터득하라고만 하기에는 여러모로 느껴지는 게 전혀 다른 이야기들이라…. (결국은 느껴지긴 하는데…. 그걸 위해 도달하는 시간과 방법 차이가 너무 난다.)

프로그래밍 언어는 하나만 제대로 해도 나머진 문제 없다고 하는 이야기들이 오래전부터 전해져옵니다. 근데 이건 뭐 사실 그냥 프로그래밍 언어 하나 제대로 공부하다 보면 여러모로 알게 될 사실이기도 해서 더 이상 설명도 안하고 그냥 그러려니 하고 가르치는 분들도 많습니다만….

요즘은 좀 아닌 듯 하군요. 스크립트 언어들 그냥 바로바로 익힌 후에는 걍 바로 프레임워크들 뭐 있는지 써보고 나서는 거기서 끝나는 경우가 많은가봅니다. 제대로 된 과정 밟다보면 그렇지 않다는 걸 알게 되겠지만 사실 그쪽에서 가르치는 과정에서 주로 배우는 건 자바일꺼고… 자바도 산으로 간다 하면 산으로 가는 교육하기 참 좋은 언어인지라…/먼산

프로그래밍 언어 학습에는 어느 정도 이상이 되면 학습 패턴이 바뀌게 됩니다. 큰 틀로 보게 되면

특정 프로그래밍 언어 -> 언어의 기법, 서법 -> 언어를 이용한 알고리즘

이런 식으로 갑니다. 이 과정들은 학습 과정, 학습하는 사람이 역량에 따라서 숙달되는 정도가 전부 다릅니다. 게다가 이러한 과정들에서 학습 내용은 점점 언어 자체보다는 언어를 통해 표현하고자 하는 것에 그 중점이 옮겨지게 되고, 그를 추상적인 표현을 써서 학습하게 됩니다. 이 학습이 조금이나마 편하기 위해서 언어는 추상적 표현을 얼마나 잘 할 수 있는지제 맞춰서 진화하게 된 것도 있습니다. 그것은 문제 해결 능력으로도 이어지기 때문이죠.

언어를 이용한 알고리즘 쪽으로 갈 경우에는 점점 언어의 형태가 흐려지다 못해서 없어지는 경우도 있습니다. 제가 C언어를 주로 이 블로그에서 작성하고 있습니다만, 알고리즘을 설명하고 할 때에는 C 언어로 코드 동작하는 것까지는 보여주겠지만 알고리즘에 대한 설명 자체는 글 혹은 수도 코드(pseudocode, 프로그램을 작성할 때 각 모듈이 작동하는 논리를 표현하기 위한 언어)를 이용하여 설명하기도 합니다. 그만큼 언어쪽 본질보다는 언어를 통해 해결하고자, 구현하고자 하는 내용쪽에 좀 더 집중하는 모양새가 나오게 되는 것이죠.

그럼 그냥 알고리즘만 따로 배워도 나쁜 거 없지 않겠냐고 생각하겠지만.. 알고리즘 이론이야 추상적인 가상 언어로 표현하여 설명해도 배울 수는 있습니다. 가르치는 입장에서도 솔직히 그냥 걍 수학적인 내용으로 가르치는 게 훨씬 쉽습니다. 하지만 구체적인 언어를 들어서 완전한 프로그램을 보여주고, 그걸 실제로 컴퓨터에 구현해서 하는 편이 이해가 쉽습니다. 우리는 컴퓨터에서 동작하는 알고리즘을 이용해야 하기 때문에 그렇게 배우는 쪽이 훨씬 쉽죠. 컴퓨터에서의 동작 환경에 대해서도 좀 더 깊은 이해를 할 수 있고요…

그래서 한 언어를 깊게 파다보면 해당 언어를 이용한 여러 가지 기법(=패턴)들을 익히고, 그를 이용한 알고리즘 구현 방법까지 해보다 보면 언어를 보다 깊은 추상적인 방법으로 접근할 수 있게 됩니다. 이러한 방법은 유사한 패러다임을 가진 다른 언어에도 쉽게 적용해 볼 수 있게 되므로 새로운 언어를 배울 때 해당 언어를 배우는 러닝 커브가 전혀 다른 구조를 가지게 됩니다. 깊은 이해와 유연한 적용 사고를 가지게 되는 겁니다. 여러 언어를 어느 정도 배워서 구현하는 것도 좋은 능력입니다만 한 가지 언어를 깊게 배우는 것도 나쁘지 않은 선택이 될 수 있는 것이죠.

그래서 요즘은 배우는 트리도 다양하지만 해당 언어마다 초급, 중급, 고급 형태로 난이도를 둬서 언어 기초 -> 언어를 이용한 기법 -> 고급 적용 및 알고리즘 이런 형태로 책들 나오는 것도 이런 내용들이 쌓이고 쌓인 결과라고 생각됩니다.

그렇다고 해서 자바가 거의 뭐 시장을 재패하는 듯한 모 반도 국가는 좀 문제가 심각합니다만…. (딱 요 근래에는 언어만 바뀌었을 뿐 하는 건 비슷비슷한듯…)

어차피 가다보면 깊게 가야 할 판이라면 이 깊게 가는 방향에 대해서도 다시 한 번 생각해보고 싶었다. ㅇㅅㅇ

C로 다시보는 알고리즘 00 – 시작

알고리즘과 디자인 패턴 중에서 여러모로 고민을 좀 많이 했다… 기존에 못썼던 C 내용을 더 쓰긴 할텐데 그거 말고도 내가 뭘 좀 더 해볼까 하는 것을…. 개발 기술이야 뭐 하나하나 느긋하게 올려서 쓰면 된다만…. 활용에 대한 것들을 적다보면 역시 도달하는 과정 중 하나는 알고리즘과 디자인 패턴이기 때문이다.

이 둘에 대해서 고민하는 이유… 내 블로그는 그냥 내가 쓰고싶은대로 글을 만들어 쓰고 있지만 그냥 여러모로 ㅂ고 들어오는 사람들이 맣ㄴ을 꺼라 생각해서 정리해본다.

알고리즘과 디자인 패턴은 컴퓨터공학에서 주로 2~3학년 과목으로 있는데, 이 둘은 주로 개발에 대한 이론적인 것을 다루는 여러모로 골아픈 과목 취급당할 수 있다. 그러나 이 둘을 잘 하는 것은 중요하다. 쉽사리 잘 할 수 있는 과목들은 아니지만 말이다…ㅇㅅㅇ;;;

특히 알고리즘은 프로그래밍 할 때의 문제 해결을 위한 생각의 기초 체력을 올려주는 것에 비유할 수 있다. 반면 디자인 패턴은 문제 해결을 할 수 있는 여러 가지 툴을 써보면서 이 툴을 어떻게 응용해야 할 지를 고민하게 해준다. 둘 다 사고력 업을 위해서 공부하는 것이지만 이 사고의 방향성이 다르게 된다.

이 중에서도 우선적으로 선택한 것이 바로 알고리즘이다. 디자인 패턴은 범위도 너무 넓지만 이렇다할 정답 또한 있는 것이 아니기 때문에…. 그래서 옛날에 공부했던 내용들을 다시 꺼내보면서 하나하나 진행해 보려고 이 챕터를 시작하였다.

참고로 내가 공부할 때에 봤던 자료들을 다시 정립하면서 코드를 짜는 거라 걍 내가 쉽게(?) 할 수 있는 C를 기반으로 작업한다.

….쉽잖아요. C언어….