logo MSJO.kr

프로그래밍 언어의 선택

2019-08-21
MsJ

‘언어’라는 말을 떠올리면 개인적으로 라캉(Jacques Lacan), 소쉬르(Ferdinand de Saussure), 촘스키(Avram Noam Chomsky)와 같은 학자를 생각할 수밖에 없다. 언어가 상징(象徵)되어 언론과 자본주의가 만나면 특히 미디어로써 상징은 우리에게 상품을 강요한다. 개인이 어쩔 수 없는 시스템이 되는 것이다. 인간은 태어나서 죽을 때까지 필요 없고, 충족되지 않을 욕망에 모든 것을 바친다. ‘상품’이란 ‘필요 없는 것’을 이르는 말이다. 깊게 생각해보면 실제로 내가 원해서 구매하는 전자제품은 거의 없다. 내가 원하는 것이 아닌 그 무엇이 나를 통해 원하는 그 무엇일 뿐이다. 나의 직업은 프로그래머이다. 소프트웨어 개발에 필수적인 프로그래밍 언어의 이해와 학습을 위해 다양한 프로그래밍 언어 중에서 그 몇을 선택해야 한다.

자료구조와 알고리즘

요즘은 대부분의 현업 개발자는 ‘자료구조’와 ‘알고리즘’의 이해의 정도가 그렇게 높지 않은 것 같다. 아마도 좋은 개발도구, 프로그래밍 언어와 여기에 풍부한 라이브러리가 초보 개발자에게는 생산성에만 초점을 맞추게 하는지 모르겠다. 인기 있는 알고리즘 사이트의 게시물(알고리즘 문제)을 보면 알겠지만 대부분 파이썬(Python)이 우수한 해답으로 채택되는 경우가 많고 개인적으로 좋아하는 프로그램 언어 중 하나이기도 하다.

그러나 그 해답이 ‘자료구조’와 ‘하드웨어’라는 관점에서 보면 그렇게 반갑지만은 않다. 각 프로그래밍 언어의 기능(함수, 라이브러리)을 쉽게 활용하는 수준으로 보이기 때문이다. 효율성과 생산성을 말하기 전에 ‘알고리즘’ 학습이라는 차원에서 볼 때 C/C++ 언어로 해답을 구현해 볼 필요가 있다. 스택(stack), 큐(queue), 힙(heap), 트리(Tree)와 같은 자료구조(선형, 비선형, 파일)와 포인터(메모리)를 직접 눈으로 보는 것처럼 깊이 이해해야만 개발경력과 함께 ‘고수’라 불리는 실제적 수준도 올라간다. 운영체제 레벨의 API(SDK)는 거의 C/C++ 언어로 되어있다. 더불어 현대 프로그래밍 언어의 대표 격인 Java, C#, Python 등의 프로그래밍 언어도 깊게 이해 할 수 있다. 주위에 경력과 무관한 개발자가 너무 많음을 우리는 알고 있다.

Managed vs. UnManaged

컴포넌트화되어 있을수록 유지보수와 생산성이 있다고 생각하기 쉬우나 의외로 2%의 문제가 발생할 때는 정반대의 상황에 직면하고 진정한 의미의 유지보수는 어렵다. 주로 Microsoft의 닷넷 개발자의 용어일 수도 있지만 프로그래밍 언어를 크게 Managed와 UnManaged로 나누어 볼 수 있다. 여기에 참고할 만한 내용으로 ‘프로그래머로 살아남기 위해 필요한 언어 둘’(포프TV 2017)을 추천한다. 모든 Managed 언어는 Unmanaged 언어에 기반하고 있다. 참고로 ‘managed/unmanaged language라는 것이 잘못 붙여진 이름’(Seulgi’s blog 2019)이다. Microsoft에서는 ‘Language’가 아닌 ‘Code’라는 용어를 사용한다. 아무튼 manage = memory manage라는 관점에서 이해하면 좋겠다. 또한 더 중요한 것은 ‘Virtual Machine’ 개념일 수 있다.

‘UnManaged’는 메모리를 개발자가 직접 관리해야 하는 프로그래밍 언어를 가리키고 ‘Managed’는 GC(Garbage Collection), ARC(Automatic Reference Counting)와 같은 기능으로 프로그래밍 언어 자체에서 스스로 메모리 관리하는 프로그래밍 언어를 말한다. UnManaged의 대표적인 언어로는 Assembly, C, C++가 있으며 Managed의 대표적인 언어로는 C#, Java, Python, Swift 등이 있다. 어떠한 프로그래밍 언어를 공부하든지 C/C++는 모든 프로그래밍언어의 기초이므로 필수적으로 학습해야 한다. 요약하면 C, C++, Java, C#, Python.

프로그래밍 언어의 선택

이번 글에서 프런트엔드(Front-End) 언어와 개발자에 대해서는 다루지 못했다. JavaScript 기반으로 한 이 영역의 비약적인 발전 상황과 활용은 다음 기회로 작성해 보기로 하고, 개인적으로 선택하고 주력으로 삼은 프로그래밍 언어는 C#, C++, Python이다. C# 대신에 Java를 선택하는 개발자도 많겠지만 웹보다 윈도우 애플리케이션을 주로 개발하는 나로서는 C#(WPF, ASP.NET, Core의 비전 등)이 더 적합하다고 생각한다. 부분적으로 Delphi, Java도 현재 사용하고 있으며 특히 Database의 SQL 영역은 나의 커리어(career)에 상당한 부분을 차지하고 있다.

인공지능은 디지털화되었을 때만 그 구현이 가능하다. 바둑은 얼마든지 디지털화가 가능하지만 자연, 도(道), 로고스( λόγος)는 디지털화할 수 없다. 서양의 모든 철학과 도덕, 윤리는 기독교가 바탕인 데 우리는 이러한 종교적 기반 없이도 얼마든지 도덕적으로 살아갈 수 있음을 보여주는 거의 유일한 민족이다. ‘커피숍 같은 곳에서 그 자리가 탐나지 탁자 위에 올려진 스마트폰에는 별로 관심이 없다’는 말이 있다. 그러나 유튜브 같은 것을 보면 외국은 그렇지 않은 것 같다. 그러므로 우리는 ‘4차산업’이라는 언어의 폭력에 함락되어서는 안 된다.


Prεv   Nεxt
Content
Search     RSS Feed     BY-NC-ND