라이프로그


방학 특강 15일. 새 언어를 배운다는 것 프로그래밍

방학 특강 모든 글

15일 내용은 별로 없습니다.
하지만 가끔 이런 별것 아닌듯한 내용이, 어쩌면 가장 중요할 때도 있더라구요.
그런 의미에서 특강에 넣었습니다.


==========================================================


프로그래밍을 전문적으로 공부하다 보면 언어를 1개만 배우게 되진 않는다.
보통 2~3가지는 배우게 되는데, 주 언어가 있으며 보조로 사용하는 언어를 정하거나 하게된다.

보통은 c++을 중심으로 배운다. 앞서 적었듯이 프로그래밍을 전문으로 한다면 그렇다.
요즘 뜨는 몇몇 스크립트 언어가 주 업무인 사람도 종종 있다.


처음 언어를 접할 때와는 다른 느낌으로 2번째 언어를 익히게 된다.
이건 사람이 자연어(사람이 사용하는 일반 언어)를 여러개 배우는 것과 흡사한 느낌이다.

예를 들어 미국인이 영국식 영어를 익히는 것은 그리 어렵지 않다.
한국인이 일본어를 배우는 것도 아주 어려운것은 아니다.
그러나 한국인이 영어를 배우거나, 영어권 사람이 한국어를 배우는 것은 어렵다.

하지만 이미 언어를 여러개 할줄 아는 사람은, 이미 대부분의 언어에서 나타나는 패턴에 익숙해져 있기 때문에
어지간히 새로운 형태의 언어가 아니라면 금방 학습한다.

프로그래밍에서도 상당히 독특한 패러다임의 언어가 종종 있다.
그러나 일반적으로 사용되지는 않기 때문에, 절차지향이나 객체지향을 지원하는 언어를 한두가지 알고 있다면
다른 언어를 배울 때에는 상당히 수월하다.

그렇다면 이런 모든것에 다 익숙한 사람이 새로운 언어를 배울 때에는 어떤 것에 집중하게 될까?
바로 라이브러리다.
해당 언어나 플랫폼에서 제공하는 라이브러리에 있는 각종 함수나 네임스페이스나 페키지의 이름,
각 함수나 구조체나 클래스간의 관계들에 주목하게 된다.
이런것들은 기존에 많은 언어를 안다고 해서 자연히 알게되는 것이 전혀 아니기 때문이다.
그저 "아마도 이쯤에 이런 기능을 제공하는 라이브러리가 있을 것이다." 정도의 추측만 가능할 뿐이다.

그 외에, 새 언어를 지원하는 새로 만나게될 툴에 이용법, 약간의 차이를 보이는 문법 등을 배우게 될 것이다.

===============


얼마나 걸릴까?
하루에 5시간 가량을 순수하게 집중한다고 가정할 때에
기존 1개의 언어를 아는 초보 개발자라면, 새로운 언어를 공부하는데 대략 한달 정도를 예상할 수 있다.
아마도 1개의 언어만 알다보니, 다른 개발 방법론을 지향하는 언어를 배운다거나 하면 굉자잏 오래걸릴 것이다.

이미 고수에 길에 들어선 개발자라면, 매일 5시간씩 열심히 공부한다면 약 일주일 뒤에 익숙해지게 될 것이다.
물론 완전히 새로운 패러다임의 언어라면 더 오래걸릴 것이다.

==============

종종 c++을 배우기 위해 c를 먼저 배워야 하냐고 묻는 사람이 있다.
아니, 심지어 당연히 c를 먼저 배워야 하니 질문하지 않는 사람이 많다.

이 가벼운 논란은, 이미 c++을 바로 시작해도 괜찮다라는 답으로 끝난것 같다.

개인적인 경험으로도 c++을 먼저 바로 시작하더라도 아무런 상관이 없다는 것을 여럿 보았다.

물론 이 때 c++을 바로 시작한다는 것은 사실 내부적으로 c를 상당히 포함하고 있으며,
이 말은, 즉시 oop를 적용한다는 것은 아니다.

c++을 바로 시작한다는 말이 다소 논리적으로 어긋나 보이지만,
c를 먼저 배운다는 것에 비해 몇 가지 차이만 있을 뿐이다.

예를 들어, 변수 선언은 항상 중괄호 직후에 해줘야 한다는 제약을 배우지 않는다.
class 관련 문법을 배우지만, 즉시 그 이후로 oop를 도입하지는 않는다.
절차지향과 객체지향을 동시에 배워 나간다.

관련 링크 : http://www.research.att.com/~bs/bs_faq.html#prerequisite

=======================

다양한 언어를 알수록 훌륭한 프로그래머일까?
그렇다. 물론 그렇다.
마치 "아니다" 라는 답이 나올 것 같은 질문이지만, 훌륭한 프로그래머다.

재미있게도, 이 바닥에서는 단순히 과시하기 위해서 다양한 언어를 맛만보면서 배우는 사람을 보기 힘들다.

일반적으로 어떤 프로그래밍 언어를 안다는 것은, 그 언어에서 제공하는 라이브러리 구조도 어느정도 파악하고 나서다.
그렇게 되기 위해서는
해당 언어의 라이브러리가 지향하는 개발방법론도 어느정도 감을 가진다는 것이다.
그런식으로 다양한 언어를 "안다"라고 하게 되면, 필시 훌륭한 프로그래머다.

물론 정말 독특하게도 깊은 알고리즘이나 수학적 지식없이 다양한 언어를 배울 수는 있으나,
심지어 c++을 "안다" 라고 할 정도이며, 어셈블리, 리스프 등등 다양한 언어를 능통하게 사용할 수 있다면,
컴퓨터 구조(아키텍쳐)나, 객체지향이나 CBD 처럼 다양한 패러다음에 대해 어느정도 알고 있다는 것이다.
최소한 "안다"라는 것이 그것을 사용해 개발이 가능한 상태라면 분명 훌륭한 프로그래머다.

앞서 적었듯이 여럿 언어에 능통하면 새 언어를 알게 되기 까지 일주일 가량의 노력이 필요하다고 했다.
그런 식으로라도 여럿 언어에 능통하게 된다면 (즉 학습만 해본 상태),
훌륭한 이라는 수식어가 힘들 수는 있어도, 제법 준비된 올바른 프로그래머 지망생이라고는 할 수 있다.








핑백

  • 준철이 생각 : 방학 특강 모든 글 2009-08-18 17:31:55 #

    ... ing?? UTF-8? 12일은 복습을 했습니다. 따라서 생략했습니다. ^^; 방학 특강 13일. CVS SVN 소스 관리 프로그램 방학 특강 14일. 코드 결벽증 방학 특강 15일. 새 언어를 배운다는 것 오오 간만에 이틀 연속 업데이트!! ... more

덧글

  • 고스 2009/08/18 17:49 # 답글

    저도 슬슬 다른 언어 좀 공부하고 싶은데 선뜻 그게 쉽지 않군요;
    맨날 닥치고 C만 쓰다 보니;;

    라이브러리도 -_- 별로 써본적이 없다눈.. 어흑;

    얼마전부터 Perl 공부할려고 자료만 열심히 모아놓고 아무것도 안하고 있네요;
  • 오린간 2009/08/18 22:59 #

    :)
    너무 열심히 하시진 마세요 ^^;;
    그저 살만하다 싶을 만큼 공부하는게 좋지 않겠습니까 히히
댓글 입력 영역
* 비로그인 덧글의 IP 전체보기를 설정한 이글루입니다.