지금으로부터 수십 년 전에는 동네마다 컴퓨터 학원이 있었고, 꼬꼬마가 프로그래밍을 공부하겠다고 하면 으레 GWBASIC부터 시작하곤 했다. 베이직은 16비트 MS-DOS뿐만 아니라 각종 가정용 8비트 컴퓨터에도 특유의 인터프리터 환경이 내장되어 있기도 해서 접하기가 한결 쉬웠다.

그때와는 달리 오늘날의 컴퓨터 교육은 이미 만들어진 소프트웨어들을 활용만 하는 실무에만 치우친 편이다.
지금 컴퓨터 프로그래밍을 처음부터 공부하고 싶다면 무엇부터 시작하는 게 좋을까?
이 질문에 대한 답변은 그 사람이 무슨 프로그램을 작성하고 컴퓨터로 무엇을 하고 싶은지 목적에 따라 크게 달라진다.
이 글은 나의 지극히 좁은 편견만을 반영하고 있으므로, 당연히 프로그래머마다 생각이나 견해가 다를 수 있다.

1. 비전문가/비전공자로서 그냥 최소한의 시간 투자로 개인적인 컴퓨터 활용도만 높이고 싶다면(고급 계산기 + 기초 알고리즘 실습 + 파일 자동 조작 + 매크로/자동화 도구 등)

개인적으로 파이썬을 추천한다. 복잡한 자료형을 다루기가 쉬워서 여타 언어들에 비해 짧은 코드만으로 복잡한 일을 한번에 끝낼 수 있다. 방대한 크기의 파일을 읽어서 내가 원하는 처리를 한 뒤 출력을 뱉어내는 수십 줄 남짓한 프로그램만 짤 줄 알아도 인생이 굉장히 편해질 수 있다.
좀 수학 덕후 기질이 있다면, 함수형 프로그래밍 언어를 건드려 봐도 될 듯.

2. 1보다는 좀 더 나아가서 가성비가 뛰어난 개발 환경에서 최소한의 GUI까지라도 만들어 보고 싶으면

Windows 플랫폼 한정으로 C#급 언어가 가장 좋겠다.

3. 웹브라우저에서 어지간한 애니메이션이나 프레젠테이션을 다 띄우고, 글이나 그림을 계산 결과로서 출력하고 싶으면

HTML + 자바스크립트.
요즘은 HTML이 단순히 화면에 뿌려지는 글과 그림, 하이퍼텍스트 문서일 뿐이라고 생각하는 건 큰 오산이다.
문서에다 서식을 주는 건 이제 CSS라는 방대한 별도의 규격으로 독립해 나가고, HTML은 문서 반 코드 반이다. 실시간으로 내용이 업데이트되고 화면 끝까지 스크롤됐을 때 추가로 컨텐츠를 로딩하고.. 사용자의 조작에 반응하여 그림을 뿌려 주는 등, 예전에는 ActiveX나 하다못해 플래시라도 써야 했을 컨텐츠들이 지금은 저것만으로 다 된다.

웹브라우저가 거의 플랫폼 독립적인 프로그램 구동 플랫폼처럼 바뀌었으니, 이를 활용할 줄 알면 역시 컴퓨터 활용 능력이 크게 향상될 수 있다. 웹 프로그램은 다른 언어나 런타임, IDE 같은 걸 설치할 필요조차 없이, 그냥 메모장에서 코딩 후 웹브라우저에서 곧바로 돌려보면 된다.

4. 맥 OS용 응용 프로그램이나 아이폰 앱을 개발하고 싶다면

Objective C + xcode + COCOA API 등등으로 고고씽이다. 일단 맥북을 장만해야 할 것이고 Windows와는 너무 이질적인 개발 환경 때문에 처음에 고생 많이 할 것이다.

5. 안드로이드 스마트폰용 앱을 개발하고 싶다면

자바 + 이클립스 IDE에 익숙해져야 할 것이다. Java는 요즘 스마트폰 앱 개발용 언어로 입지가 확 되살아난 듯하다. 이게 완전한 웹용 언어도 아니고(자바스크립트는 자바와 전혀 다른 언어임), 자바 애플릿이 플래시/ActiveX를 완전히 대체하는 RIA (rich internet application) 프레임워크로 자리잡은 것도 아니고, 로컬에서는 느리고 성능이 안 좋다 보니 전통적인 기계어 프로그램들에 밀려서.. 예전까지는 위상이 좀 어정쩡했기 때문이다. 로컬에서는 일부 크로스플랫폼 소프트웨어의 GUI(프런트 엔드)를 돌릴 때나 좀 쓰이곤 했다.

6. 끝으로, PC + Windows 환경에서 네이티브 코드 + standalone으로 실행되는 프로그램을 개발하고 싶다면

아래아한글이나 <날개셋> 한글 입력기나 어지간한 온라인 게임과 같은 급의 기계어 실행 파일을 만들고 싶다면..
역시나 재래식 Visual C++이나 최소한 델파이 같은 툴로 가야 한다.
개발 환경, 언어 문법과 기본 라이브러리, Windows API, 그 뒤 개발 분야에 따라 추가적인 라이브러리 공부까지 산 넘어 산이다.

오늘날 프로그램 개발 환경이 결국 로컬 + 웹 + 앱이라는 세 양상으로 구분된다고 예전에 글을 쓴 적이 있는데.. 그것과도 관계가 있다.
프로그래밍, 더 나아가 소프트웨어 개발에 관심이 있는 분이라면 이런 아이템들을 참고하면 되겠다.
그런데 정작 이런 글을 쓴 본인은 6만 빼고 나머지 분야는 여전히 너무 모른다는 게 함정..ㅎㅎ

Posted by 사무엘

2013/09/17 08:37 2013/09/17 08:37
,
Response
No Trackback , 13 Comments
RSS :
http://moogi.new21.org/tc/rss/response/878

Trackback URL : http://moogi.new21.org/tc/trackback/878

Comments List

  1. zextor 2013/09/17 13:12 # M/D Reply Permalink

    ㅎㅎ 심시 공감가는 말씀하셨습니다~!
    언급하신 재래식 Visual C++ 로 저도 아직 밥벌어 먹고는 있는데..
    다가오는 불안감을 다스리지 못해 5번을 열심히 해볼려구요..ㅋ

    1. 사무엘 2013/09/18 03:26 # M/D Permalink

      VC++와 Windows API에만 머물러 있는 개발자가 저 말고도 주변에 그래도 의외로 있더군요. ^^;;
      저는 더구나 이미 6번 계층에서 계속 연구 개발하는 밑천이 있다 보니 다른 걸로 갈아타기가 더 힘든 처지이기도 합니다.

  2. 김재주 2013/09/17 19:10 # M/D Reply Permalink

    사실 5 6번도 mono라는 기적의 프로젝트가 있어서 닷넷과 c#으로 다 됩니다.

    전 요즘 c# 가지고 이런저런 거 만들어보고 있는데 확실히 언어 설계부터 잘 만들었어요. 델리게이트도 멋지고 linq에 이르러서는 마소 엔지니어들은 천재인가 싶습니다

    1. 사무엘 2013/09/18 03:26 # M/D Permalink

      음, Mono를 쓰면 그럼 Windows에서는 C# 프로그램을 네이티브 코드로 빌드할 수 있다는 얘기인가요?
      WINE이 Windows를 완전히 새로 구현한 것처럼 쟤들은 닷넷을 완전히 새로 구현한 건가 봅니다.

  3. 김재주 2013/09/18 11:34 # M/D Reply Permalink

    아, 4번 5번이에요. Mono는 네이티브 코드는 아니죠. 닷넷 4.5까지, C# 5.0까지가 Mono로 구현되어 있습니다. ECMA 표준으로 정의된 C#은 완전히, MS 확장도 상당히 많이 구현되어 있습니다. mono는 .NET 바이트코드를 실행하기 위한 VM과 C#, F#, IronRuby 등을 컴파일하기 위한 컴파일러로 구성되어 있는데요.

    비주얼 스튜디오에서 빌드된 .NET 응용 프로그램을 실행할 수도 있고, 반대로 Mono에서 컴파일한 프로그램을 .NET Framework에서 실행할 수도 있습니다.

    그런데 mono는 .NET Framework와 다르게 Windows, Mac, Linux 등의 여러 플랫폼에서 실행되는 크로스 플랫폼 구현이고, 안드로이드 및 아이폰 용 응용 프로그램을 만들 수 있는 버전도 나와 있거든요.



    그러나 .NET을 네이티브로 컴파일하는 방법 자체는 있습니다. 서드 파티 툴이 나와 있어요.
    http://spoon.net/studio

    정확하게는 .NET 프레임워크 없는 클린 데스크톱에서도 실행이 가능하단 건데... 뭐 네이티브라고 불러도 되겠죠.

  4. Lyn 2013/09/22 21:48 # M/D Reply Permalink

    C#을 Native로 컴파일 하는 예가 바로 Mono의 아이폰 버전입니다... 뭐 일반적으로는 볼일이 없겠지만 Unity3D를 쓰면 볼수 있죠. 애플이 모든 종류의 해석기를 올리는걸 차단하기때문에 발생한 좀 거지같은 경우지만 ..

    아이폰용으로 타겟을 잡으면 Mono 기반의 코드를 LLVM 기반의 코드로 바꾼 후 다시 네이티브로 빌드 해서 결과물을 만들어내게 됩니다. 덕분에 리플렉션을 쓰는 몇몇 코드는 작동하질 않아서 C#의 좋은 기능들이 상당수 봉인당해버렷죠 ....


    사실 앱스토어/플레이스토어 상위권에 올라오는것의 거의 대부분이 게임이란걸 봤을때, 오히려 Obj-c/Java 로 된 프로그램 보다는 C++(cocos2dx, 마멀레이드SDK)나 C#(Unity3d) 로 된 프로그램이 더 많이 깔려 있을지도 모릅니다.

    아 휴대폰 제조사에서 만든거 빼구요...

  5. Lyn 2013/09/22 21:51 # M/D Reply Permalink

    개인적으로... C#은 사기에요 ㅡ.ㅡ 너무좋은걸 만들어놧음 ...

  6. 사무엘 2013/09/23 23:12 # M/D Reply Permalink

    김재주, Lyn: 제 홈페이지에 오시는 톱클래스 급의 프로그래머 여러 분들이 C# 극찬을 하시니,
    제가 모르는 사이에 또 무슨 엄청난 기능들이 추가됐는지 C#에 대해 문득 궁금해지네요.
    저는 C# 문법 지식은 VS 2003/2005 시절에서 멈춰 있어서.. ㅎㅎ

  7. Lyn 2013/09/24 11:01 # M/D Reply Permalink

    가장 좋은건 MS가 완벽히 독점을 하는 언어기 떄문에 사용자의 요구를 바로바로 반영 해서 라이브러리와 언어를 개선한다는 거겟죠.

    매일 위원회에서 치고박고 싸우느라 아직까지 delegate 조차 도입 못한 java나 너무 많은 회사가 컴파일러를 개발하고 있어서 언어 표준을 완전히 준수하는 컴파일러가 단하나도 없는 C++과 비교되는 점입니다.

    최신기능중에서 멋진거라면... dynamic 과 async, await하고 roslyn 정도를 맛봐 보시면 재미있을거같네요


    VS 2014 정도에서 나올 버전에선 typedef 가 추가된단 얘기도 있습니다. 이거 은근히 편하긴 하잖아요 ㅎㅎ... 정말 중요한 데이터에 새로운 type명을 부여하면 찾기도 쉽고 ...

    1. 세벌 2013/10/10 20:11 # M/D Permalink

      떄 는 오타...겠죠?

  8. 김재주 2013/09/24 19:41 # M/D Reply Permalink

    async와 await, Task<T> 등은 진짜 예술입니다.

    함수를 선언할 때 async 키워드만 추가해서 만들면 사용하는 쪽에서 Task로 받아서 나중에 필요한 순간에 await하기만 하면 어떤 작업이든 손쉽게 비동기화가 가능하죠.

    C#의 Action<T>, Func<T>, 그리고 람다 함수 문법은 함수 포인터의 객체 버전이라고 할 수 있는 delegate와 완벽하게 맞아들어가죠...


    LINQ 역시 재미있는 녀석입니다. 아래 코드는 1부터 2백만 사이의 소수의 합을 구하는(오일러 프로젝트 문제입니다) 코드죠.

    Func<int,bool> isPrime = (int number) =>
    {
    int i;
    if (number == 1) return false;
    if (number == 2) return true;
    if (number % 2 == 0) return false;
    for (i = 3; i * i <= number; i+=2)
    {
    if (number % i == 0) return false;
    }
    return true;
    };

    var result = Enumerable.Range(1,2000000).Where(isPrime).Aggregate(0L, (long a, int b) => (long)a + (long)b);

  9. 사무엘 2013/09/24 23:42 # M/D Reply Permalink

    Lyn: 감사합니다. 자바/C++의 경우, '모두의 언어'는 '어느 누구의 언어도 아니게 되는' 딜레마의 예인 것 같습니다.
    마소가 꽉 잡고 있는 C#은 그렇지 않지요.

    김재주: 우와, 정말 200x 시절의 C#이 아닌 거 같습니다. 장난이 아니네요.
    LINQ는 프로그래밍 언어에다가 SQL을 넣는 똘끼를 부린 거라는 것 정도는 알고 있었습니다.

  10. freev165 2014/10/11 11:18 # M/D Reply Permalink

    좋은 정리 감사합니다.

Leave a comment
« Previous : 1 : ... 731 : 732 : 733 : 734 : 735 : 736 : 737 : 738 : 739 : ... 1521 : Next »

블로그 이미지

철도를 명절 때에나 떠오르는 4대 교통수단 중 하나로만 아는 것은, 예수님을 사대성인· 성인군자 중 하나로만 아는 것과 같다.

- 사무엘

Archives

Authors

  1. 사무엘

Calendar

«   2019/07   »
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      

Site Stats

Total hits:
1220881
Today:
66
Yesterday:
474