어떤 프로그래밍 언어를 배울 것 인가?

가끔 XETown에도 간간히 올라오는 질문이 있습니다. 프로그래밍을 하고 싶은데 어떤 프로그래밍 언어를 배워야 하나요?

이 질문에 사실 정해진 정답이 없습니다. 이유는 질문자분께서 질문을 하실 때 답변자는 무엇이 목적인지 모르기 때문입니다. 취업? 취미? 사업? 사업이라면 어떤 아이템을 이용하고 싶은지에 대한 정보를 우리는 모르고 있습니다.

그래서 그 질문에 “파이썬 쓰세요”, “HTML CSS부터 하세요” 라고 답변한다면 그 것은 잘못 답변하는 것입니다.

이 질문에 올바르게 답변 드리자면 질문자 분께서도 충분한 배경지식을 알아야 합니다. 그래서 어떻게 답변 드리자면 제가 예시로 말씀드리는 프로그래밍 언어를 가지고 이 언어를 왜 사용하는지, 배우면 어떤 곳에 취업하는지 등을 말씀드려 볼께요.

시작전 알아야할 개념

바로 처음에 말씀드릴 언어가 C, C++입니다. 우리는 C, C++언어를 언매니지드(Unmanaged) 언어라고 부릅니다. 언매니지드언어는 프로그래밍을 통해서 메모리할당부터 메모리 사용량 등등을 직접 관리하고 제어하기 때문에 하드웨어를 직접 관리한다고 생각하면 됩니다. 예를들어 수동기어 자동차를 생각하시면 됩니다. 기어변속을 직접 관리하여 엔진의 RPM을 직접 제어하여 속도나 언덕길 올라갈때 효율적으로 기어를 관리하죠. 이렇게 관리하는 것을 언매니지드 언어입니다.

그러면 언매니지드 언어와 반대되는 개념은 뭘까요?

바로 매니지드(Managed) 언어입니다. 매니지드언어는 C#, JAVA, Python, javascript, PHP등 있습니다. 언매니지드 언어가 직접 차량의 기어를 제어하여 효율적으로 운행을 쉽게할 수 있다면 매니지드 언어는 오토차량입니다. 지가 알아서 기어변속하는거죠. 그래서 언덕길 올라갈때 잘못 기어가 물려있을 경우 차량이 힘을 못쓰기도 합니다. 이와 마찬가지입니다. 매니지드 언어는 프로그래머가 직접 메모리를 관리하지 않고 프로그래밍언어가 알아서 하게 됩니다. 따라서 매니지드 언어는 코드가 간결하고 이쁘게 보이기도 합니다.

C, C++ 언매니지드 언어

이 언어는 하드웨어에 아주 가까운 언어입니다. 하드웨어라고 하면 우리가 사용하는 컴퓨터본체 부품과 스마트TV, 냉장고, 차량내 소프트웨어 등에 사용됩니다. 그리고 이 언어는 메모리(램)을 직접 제어를 하기 때문에 adobe 프리미어 프로, 3D게임(언리얼엔진, 유니티)등 다양한 분야에서 사용됩니다. 이 언어를 배울경우 대부분 하드웨어를 제어하는 기기들을 생산하는 업종이나 회사에 많이 취직하게 됩니다. adobe, EA와같은 각종 게임회사와 같이 큰 회사쪽에 취직할 수 있고, 주로 하는 일은 그래픽렌더링 프로그래머가 되거나 스마트기기 소프트웨어 개발자로 활동하게 됩니다.

JAVA 매니지드 언어

자바는 아시다 시피 한국에서 많이 유명합니다. 주로 정부, 기업, 은행에서 많이 다루고 있죠. 자바는 최근 기업용 웹어플리케이션을 빌드하는데 많이 쓰고 있어서 취업에 유리하기도 합니다. 그래서인지 자바 프로그래머 채용이 많은 편입니다. 그러나 빠르게 변하는 스타트업에서는 자바 개발자는 많이 없고, 대신 큰 기업이나 오래된 레거시 시스템과 작업해야하는 기관에서 자바개발자들이 많이 있습니다. 그래서 은행과 대부분의 정부 관련 기관에서 자바를 사용하고 있습니다. 그리고 자바를 배우게 되면 안드로이드 어플리케이션을 만들수도 있습니다. 안드로이드 스튜디오라는 프로그램을 무료로 제공하고 있으며 해당 프로그램으로 안드로이드 앱을 만들수 있죠. 큰 기관에서 안정적인 일을 하고, 급격하게 변하는 다른 언어들이 싫으시면 자바를 공부하는 편이 좋을 수도 있겠습니다.

Python 매니지드 언어

요즘 급격하게 뜨고 있는 프로그래밍 언어이죠. 제 개인적인 생각은 초보자들이 선택하기에 가장 쉬운 언어인 것 같습니다. 이 언어를 사용하면 아주 다양한 일을 처리할 수 있어요. 컴퓨터를 해킹한다던지, 머신러닝, 데이터 사이언스, 데이터 비쥬얼라이션, 웹 스크래핑, 웹사이트제작 등 아주 다양한 분야의 범위를 이 언어로 할 수 있습니다. 파이썬은 정말 간결하게 코드를 짤 수 있습니다.

하지만 저는 파이썬을 좋아하지 않습니다. 그 이유는 오늘주제와 맞지 않으므로 다음에 설명드리죠.

HTML, CSS, JAVAScript 매니지드 언어

XE, Rhymix, 워드프레스, 혹은 파이썬으로 웹사이트 빌드, C# asp.net 코어, jsp.net 코어 등을 활용하여 웹사이트 제작하실 경우 이 언어는 필수로 알아야 합니다. 웹사이트를 만들고 싶으면 무조건 알아야 합니다. 이 언어는 백그라운드 언어를 무엇을 쓰더라도 모두 공통적으로 사용되는 언어입니다. 즉 웹사이트 제작 프로그래머를 하시려면 이거 모르면 안될정도입니다. 이 언어들은 웹브라우저에서 처리하여 사이트의 모양을 보여주는 프론트앤드 언어들입니다. 서버와 통신이후 브라우저에서 모양을 잡고, 일부 동작에 변화를 주는 역할을 이 언어들이 수행합니다. 그래서 웹프로그래머 하시려면 무조건 필수입니다. 자바스크립트를 잘 다루게 된다면 나중에 자바스크립트를 백앤드 서버로 두어 데이터를 관리할 수 있습니다. 예를들어 nodeJS 와 같은 것들이 자바스크립트인거죠.

PHP 매니지드 언어

PHP는 제가 주로 다루고 있는 언어이기도 합니다. PHP는 백앤드 서버를 빌드하기 위한 언어입니다. 현재 존재하는 대부분의 일반 사이트들은 대부분 PHP를 이용하고 있습니다. 그리고 PHP자체 커뮤니티도 외국 뿐만 아니라 국내에서도 많이 활성화 되어있고 국내에서는 XE와 그누보드에서 사용되는 언어이기도 하죠. 그리고 일부 해외 쇼핑몰들은 워드프레스로 제작하는 경우도 있습니다. 그래서 세계적으로 웹사이트를 제작할 경우 많이 사용되고 있으며 매 년 패치도 지속적으로 하고 있습니다. CMS를 이용하거나 일반 웹사이트를 타겟으로 사업을 하고 싶으시면 PHP를 선택하세요.

선택지는 여러분들께 제공 해드렸습니다. 이제 여러분들이 답변할 차례입니다.
무슨 프로그래밍언어를 사용하고 싶으신가요?

람보

profile
람보입니다.
  • profile

    결론은 "뭘 하고 싶은데?"를 먼저 물어봐야 한다는 거군요.

     

    중국어를 배울까? 러시아어를 배울까? 스페인어를 배울까? 같은 질문도 마찬가지로... 내가 어느 나라에 여행을 가고 싶은지, 우리 회사가 어느 나라와 거래할 일이 많은지를 따져봐야겠지요. 프로그래밍 언어도 마찬가지가 아닐까요?

     

    파이썬은 웹에서는 존재감이 없지만 이공계 대학, 연구소 등에서 시장점유율이 무진장 높아요. 제가 대전 카이스트 근처에 사는데 아마 이 동네 애들 아무나 붙잡고 파이썬 몇 줄 보여주면 꽤 높은 확률로 알아들을 겁니다. 사실상 인류의 미래를 책임지고 있는 언어라고 할까요? ㅋㅋㅋ

  • profile profile
    그렇죠. 막연하게 프로그래밍 공부해야해! 라는 의식은 생겼지만 무엇이 목표인지를 본인이 선택하지 않았죠. 어떤 목표를 가질 것인지, 내가 이후에 무엇을 하고 있을 것 같은지. 회사에서 필요한 작업이 무엇인지 등을 생각해서 언어를 선택해야하는 것이죠.

    파이썬자체가 활용도가 무궁무진하지만 들여쓰기할때 탭과 스페이스 혼용하면 동작안해서 안씁니다..ㅋㅋㅋㅋㅋ

    요즘 최신버전 파이썬은 어떤지 모르겠지만요 ㅎㅎ
  • profile profile

    안녕하세요?

     

    올려주신 좋은 글 감사히 잘 읽었습니다!

     

    그리고 파이썬에 대해 말씀하신 부분과 관련하여 공감합니다 ^^

     

    저같은 초보자보다 파이썬에 대해서 훨씬 잘 아시겠지만 감히 댓글을 적어봅니다.

     

     

    말씀하신대로 파이썬의 들여쓰기가 보기에는 좋을지 몰라도,

     

    막상 개발 단계에서는 불편하기도 하고 혼동을 초래하기도 합니다.

     

    몇몇 커뮤니티 사이트에서 파이썬 스크립트에 대해 동작을 하지 않는다는 질문글을 보면

     

    들여쓰기를 수정하는 것으로 해결되는 문제인 경우가 적지 않게 있더군요 ㄷㄷ


     

    참고로 PEP 8 -- Style Guide for Python Code 문서에는

     

    탭과 스페이스의 혼용에 대해 말씀하신 것처럼 기술하고 있습니다 ^^

     

    VPS에 2.X와 3.7이 모두 설치되어 있어서 IDLE에서 테스트해보니 정말 그렇네요.

     

     

    image 20190813201539.png

     

     

    그런데 파이썬을 사용할 때 IDLE에서 직접 작성을 하는 경우보다는

     

    자신이 선호하는 에디터를 사용하는 경우가 많을 것으로 생각되네요.

     

    대부분의 에디터에서는 indentation과 관련된 설정에 들어가서

     

    탭을 공백 4개로 처리하도록 하면 특별히 문제가 발생하지 않더군요.

     

    주피터 노트북 같은 경우에도 기본적으로 그렇게 설정되어 있어 혼용이 가능하고,

     

    VS Code 같은 경우에는 파이썬 플러그인을 설치하면 .py 파일에 대해서는 자동으로 그렇게 처리하구요.

     

    이런 부류의 에디터들에서는 스페이스를 4의 배수로 넣어주면 탭과 혼용하는 것은 문제가 되지 않기 때문에

     

    제 개인적으로는 크게 불편함을 느끼지 않고 있습니다.

    (이건 제가 파이썬에 익숙해져서 그렇게 느끼는 것일 수도 있겠네요 ㅠㅠ)

     

    물론 4~5번 이상 들여쓰기를 해야되는 경우에는 실수할까봐 살짝 스트레스를 받긴 하더군요 ^^;

     

    다만 PyCharm에서는 하나의 파일에서 탭과 스페이스를 혼용하면 언더라인을 띄우는 것으로 기억하네요.

     

     

    그럼 날씨가 더운데 건강하시고 뜻깊은 광복절 되시기를 기원합니다!

     

    항상 감사드립니다 ^^

     

  • profile profile
    여러명이 협업하는 과정에서 코딩 컨밴션이 다르거나 오래된 코드들을 유지보수할때마다 다시 indentation 을 새로 설정해야하는 문제가 있죠..ㅎㅎ

    XE나 라이믹스는 들여쓰기는 하나의 탭으로 하고 있는데 옛날에 만들어진 쿼리 파일의 경우 스페이스 공백 4개로 된 경우가 많습니다.

    그런 코드들을 수정할때 모든 들여쓰기 변경하지 않더라도 편한게 장점이죠.

    그리고 파이썬이 또 싫은건 메소드와 if문 등등 시작과 끝을 들여쓰기로만 구분하는 것 같더라고요.

    그냥 명확하게 {}으로 맞춰버리면 좋았을텐데 그게 확실하게 구분이 안가긴해요 ㅎㅎ
  • profile profile
    앗 제가 미처 말씀하신 경우까지 고려하지는 못했네요.

    특히 Python 2.X 시절에는 스페이스가 아니라 탭을 권장했는데

    3.X로 오면서 스페이스 4개를 권장하면서 이런 혼란이 더 초래된 것 같아요.


    파이썬에서 클래스, 함수, 조건문, 반복문의 시작과 끝을 들여쓰기로만 구분하는 것은

    들여쓰기에 대한 코딩 컨벤션을 통일하여 비주얼적으로 깔끔하게 보이기 위해서일텐데

    이게 오히려 가독성을 저해하는 경우가 있는 것 같아요.

    자신이 작성한 코드의 경우에는 그나마 괜찮지만 타인이 작성한 코드를 빨리 파악해야 되는 경우에는

    말씀하신대로 블럭의 시작과 끝 지점을 직관적으로 알아보기 힘든 경우가 있더군요 ㅠㅠ


    그리고 파이썬의 indentation을 지원하지 않는 일부 에디터에서는

    Ctrl+c, v 할 때 indentation이 엉망이 되기 때문에 사실상 사용할 수 없는 문제가 있긴 하죠.
    (Code highligher 등 온라인에서 파이썬 스크립트를 다루는 경우에도 비슷한 문제가 발생하더군요)


    그럼 편안한 되세요! ^^
  • profile profile
    파이참은 젯브레인 프로그램이라 Ctrl + c,v 할때 들여쓰기가 정상적으로 잘 해주지 않나요? PHPStorm은 제가 설정해둔 코딩 컨벤션에 맞게 코드가 붙여져서 들여쓰기의 문제는 없었습니다.
  • profile profile

    옙 말씀하신대로 PyCharm이나 VS Code에 파이썬 관련 익스텐션을 설치한 경우처럼 

     

    에디터에서 파이썬의 Indentation을 지원하는 경우에는

     

    들여쓰기를 변경한 후에 Ctrl + c, v로 여러 줄을 옮기는 경우에도 문제가 발생하지 않는데요.

     

     

    예컨대 Acroedit처럼 파이썬 문법 관련 플러그인이 없는 경우에는 짤과 같은 기능을 지원하지 않더군요 ㅠㅠ

    (제가 설정을 잘못해서 그런 것일 수도 있겠지만요)

     

    게다가 Acroedit에서는 여러 줄을 동시에 입력하는 기능도 없어서 한 줄씩 스페이스바를 입력해야 하거든요.

     

    물론 다른 에디터를 사용하면 되지만 제가 Acroedit의 몇몇 기능에 익숙해서 종종 사용하는 경우가 있어서요.

     

     

    출처:  https://marketplace.visualstudio.com/items?itemName=hyesun.py-paste-indent

     

    그럼 안녕히 주무세요! ^^

  • profile profile

    파이썬에서 탭을 권장한 적은 없는 것으로 기억합니다. 2.x 시절에도 스페이스 4개가 암묵의 룰이었어요.

    탭이냐 스페이스냐가 중요하지 않은 PHP도 PSR-2에서 스페이스 4개를 표준으로 제정했고, C#도 비쥬얼 스튜디오에서 탭 키를 누르면 스페이스 4개가 입력되는 것이 기본값이며, 자바도 스페이스 4개를 사용하는 프로젝트가 가장 많다고 합니다. 사실상 "탭 키를 눌러서 스페이스 4개 입력"이 공통된 표준이고, 탭 키를 눌렀을 때 무엇이 입력되는지 선택할 수 없는 에디터는 그냥 쓰레기 취급이며, XE처럼 탭 문자를 그대로 쓰는 쪽이 이단아인 셈인데요... XE 개발하다가 다른 프로젝트로 넘어가면 짜증나요 ㅋㅋㅋ

    라이믹스도 아싸리 PSR-2 표준에 맞춰버리면 좋겠는데, 모든 파일의 공백을 바꿔버리면 나중에 git blame을 쓰기가 불편해지기 때문에 그냥 냅두고 있습니다. XE 시절에 무엇을 왜 이런 식으로 구현했는지 히스토리를 찾아봐야 할 때가 종종 있어서요. if와 괄호 사이에 공백을 쓰지 않는 것도 엄밀히 말하면 XE만의 표준이고 PSR-2 위반입니다.

  • profile
    추천!
  • ?
    라이믹스를 잘쓰려면 파이썬보다는 php를 배워야겠죠?
  • ? profile
    라이믹스가 사용하는 언어는 PHP입니다.
  • ?
    뭐 배울지 고민할시간에 뭐라도 배우는게 났습니다
  • ?
    말씀하신 것처럼 CMS 만질거면 php 가 좋은거 같아요.

    웹 쪽이면 JS 좀 하다가 Typescript 넘어가는게 좋은거 같구요. 전 완전 초보인데 JS 가 막 재미있어질 무렵 TS 로 넘어갔거든요. 처음부터 다시 배우는 느낌이긴한데 어차피 초짜라 장벽이 더 높은건 못느끼구요, type 무법지대인 JS 에서 type 개념 이 얼마나 중요한건지 배우는 느낌이라서 좋아요.

    JS / TS 의 또 다른 장점은 node.js 가 있겠죠. 큰 무리없이 스케일링이 필요한 풀스택에 적합한 듯 싶어요. 그리고 JS / TS 가 어느정도 익숙해지면 Go 로 넘어가고 싶어요. 지금 다니는 회사에서 JS / TS 사용 안했으면 바로 Go 부터 배웠을텐데 아쉬워요.

    오토메이션 툴이나 데이터 사이언스면 파이썬이 좋겠죠.
  • ?
    좋은내용이네요. 조카한테 복사해서 보내줘야 겠습니다. 대학진학을 컴퓨터관련쪽으로 하고 싶다는데.
  • profile
    이 쪽을 진로로 생각하는 사람에겐 참 좋은 코멘트가 될 수 있겠네요~. 저도 어딘가 저장을 해 둬야 겠습니다. 감사합니다.
  • profile
    문장력도 대단하십니다. 마무리까지.
    감사하게 잘 읽었습니다.