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

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

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

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

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

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

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

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

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

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

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

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

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

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

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.