생활코딩

Coding Everybody

언어

커버 생활코딩 > 언어

언어란?

언어(language)는 그 언어를 사용하는 주체들 간의 약속입니다. 사람과 사람이 소통 할 수 있는 것은 어떠한 소리나 기호에 대한 약속을 서로가 공유하고 있기 때문입니다. '안녕'이라는 음가가 인사라는 약속이 되어 있기 때문에 사람들은 만나는 즐거움과 헤어지는 아쉬움을 상대방에게 전달 할 수 있는 것이죠. 마찬가지로 프로그래밍 언어도 약속입니다. 사람과 기계(컴퓨터)와의 약속입니다. 기계도 이해할 수 있고 사람도 이해할 수 있는 언어의 규칙에 따라서 사람이 원하는 것을 기계에게 전달하면 기계는 그 기호의 의미에 따라서 동작하게 되는 것입니다.

어떤 언어를 배워야 할까?

정답은 없습니다. 자신이 하고자 하는 일이 무엇인가에 달렸습니다. 웹페이지를 프로그래밍적으로 제어하려면 반드시 자바스크립트를 배워야 합니다. 브라우저가 이해할 수 있는 언어는 자바스크립트 밖에 없기 때문입니다. 반대로 시스템을 직접적으로 제어하는 일을 하려면 어셈블리어나 C와 같은 소위 저수준의 언어를 배워야 합니다. 또 웹프로그래밍을 하고 싶다면 C 보다는 PHP, Python, JAVA와 같은 언어가 좋습니다.

하지만 프로그래밍 입문자는 무엇을 모르는지 모르는 상태에 있기 때문에 알아서 선택하라고 하면 어려움을 겪습니다. 그래서 필자가 권장하는 방식은 쉬운 언어를 먼저 배우고, 필요에 따라서 어려운 언어로 나아가는 전략입니다. 프로그래밍 입문으로 배우기 좋은 언어는 JavaScript, Python, Ruby, PHP 정도를 이야기 할 수 있을 것 같습니다. 이 언어들은 많은 곳에서 활용되면서 또 배우기 수월하다는 점이 큰 장점입니다. 물론 여기에도 정답은 없습니다. 근본부터 파고드는 것을 좋아하고, 거대한 학습 버퍼(buffer)를 가지고 있다면 어셈블리어나 C와 같은 저수준의 언어부터 활용도가 많은 고수준의 언어로 나아가는 것도 좋은 방법입니다. 하지만 지치지 않도록 조심하시길 바랍니다.

코스 소개

본 코스는 언어들에 대한 수업을 모아둔 코스입니다. Python, Ruby처럼 오늘날 광범위하게 사용되고 있는 언어부터 지금은 사용하지 않지만 언어의 발전 단계에서 중요한 의미를 갖는 포트란 같은 고대언어를 망라할 예정입니다. 그리고 각각의 언어 수업들이 독립적인 완결성을 가지면서, 동시에 초심자의 입장에서 쓰여졌기 때문에 프로그래밍의 진입점으로 어떤 언어 수업을 선택하셔도 무방하도록 수업을 구성했습니다. 동시에 장르적인 접근을 하고 있기 때문에 기존의 프로그래머들도 새로운 언어를 빠르게 습득 할 수 있는 입문서로도 활용될 수 있도록 했습니다.

장르

장르는 형식을 의미합니다. 시나 소설 수필과 같은 형식이 대표적이죠. 그런데 이 형식이 주는 효용은 생각보다 많습니다. 창작자는 장르라는 미리 만들어진 형식을 그대로 사용하기 때문에 형식을 만들어야 하는 부담에서 벗어나서 창작에 집중 할 수 있습니다. 반대로 창작물의 소비자는 이미 익숙한 형식을 파악하는 노력을 하지 않고 창작자의 의도에 집중 할 수 있습니다.

언어 코스에서 소개하는 언어들은 장르적 방법론으로 만들어진 수업입니다. 언어는 그 언어의 쓰임과 언어 창작자의 취향에 따라서 다른 문법을 가지고 있습니다. 하지만 모든 언어를 관통하는 공통분모 또한 있습니다. 공통분모를 재창작 하는 비효율을 제거하고, 그 언어의 특성에 집중하기 위해서 모든 언어의 커리큘럼 구성이 동일합니다. 아래는 Python과 Ruby 언어의 커리큘럼을 비교한 내용입니다.

Python Ruby
언어소개 언어소개
실행방법과 실습환경 실행방법과 실습환경
변수 변수
비교 비교
조건문 조건문
반복문 반복문
함수 함수
List, Dictionary, Turple 배열, 해쉬
모듈 모듈
객체지향 프로그래밍 객체지향 프로그래밍
라이브러리 라이브러리

내용도 마찬가지의 접근을 하고 있습니다. 다음은 조건문에 대한 두 언어 내용의 비교입니다. 기본적인 내용은 같습니다만 그 언어의 특성에 맞게 조금씩 다릅니다.

Python

연산자란 값에 대해서 어떤 작업을 컴퓨터에게 지시하기 위한 기호인데 우리는 이미 연산자를 사용했다. 아래 예제 중에서 '='는 우항의 값인 1을 좌항의 변수 a에 대입하는 '대입 연산자'다. 파이썬의 주요 연산자는 tutorials points의 항목을 참고하자. 연산자가 무엇인가에 대한 이해를 돕기 위한 것일 뿐 외울 필요는 없다. 차차로 알게 된다.

Ruby

연산자란 값에 대해서 어떤 작업을 컴퓨터에게 지시하기 위한 기호인데 우리는 이미 연산자를 사용했다. 아래 예제 중에서 '='는 우항의 값인 1을 좌항의 변수 a에 대입하는 '대입 연산자'다. 루비의 주요 연산자는 tutorials points의 항목을 참고하자. 연산자가 무엇인가에 대한 이해를 돕기 위한 것일 뿐 외울 필요는 없다. 차차로 알게 된다.

장르적 접근을 통해서 필자가 추구하는 것은 강의자와 학습자가 더 적은 노력으로 수업을 만들고 배울 수 있도록 하는 것입니다.

TDS

사실 필자가 언어수업을 시작한 것은 누군가를 가르치기 이전에 필자 자신을 가르치기 위해서였습니다. Ruby와 Python을 공부는 하고 싶은데 도통 손에 잡히지 않았습니다. 그래서 수업을 시작했습니다. 필자가 생활코딩이라는 활동을 처음 시작했을 때는 학습한 것이 있었기 때문에 수업을 만들었습니다. 그런데 언제부턴가 수업 자체가 욕망이 되면서 수업을 만들기 위해서 학습을 하고 있는 자신을 발견하게 됩니다. 이러한 프로세스의 역전 현상에 TDS라는 이름을 붙였습니다. TDS는 Teach-Driven Study라는 의미입니다. 한국어로 강의주도학습입니다. 맞습니다. TDD(Test-Driven Development, 테스트 주도 개발)에서 영감을 얻은 방법론입니다. 이제는 공부하고 싶은 것이 있으면 수업을 만듭니다.

여기에는 또 다른 가설이 내포되어 있습니다. 필자는 예전부터 이런 생각을 했습니다. 인간은 생각하기 때문에 표현하는가? 표현하기 위해서 생각하는가? 물론 양쪽 다 맞는 말이지만 저는 두번째 명제인 표현하기 위해서 생각한다에 방점을 둡니다. 즉 표현은 인간의 가장 근원적인 욕망 중의 하나이고, 생각은 그 욕망을 실형하기 위한 말하자면 수단이라는 것이죠. 여기서 표현이란 언어에 국한되는 것이 아니라 비언어적인 것을 망라합니다. 좋은 차와 좋은 집에 살려는 것은 일종의 표현의 욕구입니다. 그 욕구를 위해서 얼마나 많은 생각들을 하나요? 표현의 욕구를 자극하면 그 욕구를 실현하기 위해서 생각하게 되고 사고력은 자연스럽게 깊어집니다. 필자에게는 수업이 그런 욕구가 되었습니다. 자연스럽게 무엇을 수업으로 만들것인가? 또 어떻게 하면 효과적으로 지식을 전달 할 수 있을 것인가를 고민하게 된 것이죠.

Python과 Ruby은 이런 수업욕에서 만들어진 것입니다. 한시간 전에 공부한 사람의 한시간 후의 수업이라고 할까요? 그래서 내용 상의 문제가 있거나, 또는 각언어의 문화에 맞지 않는 것이 있을수도 있습니다. 이에 대한 비판은 겸손하게 수용해서 내용에 반영하겠습니다. 상처 받지 않을 준비가 되어있기 때문에 마음놓고 비판해주세요.

또한 언어 코스의 수업은 CCL라이센스를 채택하고 있습니다. 영리를 목적으로 이 내용을 출판하셔도 무관합니다. 하지만 상업적으로 출판된다면 좀 더 많은 사람이 볼 수 있도록 저자의 인세를 제외한 만큼은 저렴하게 출판되기를 소망합니다. 또한 누구라도 필자가 만든 수업의 내용에 자신이 알고 있는 언어의 지식을 결합해서 새로운 수업을 만들 수 있습니다. 완숙한 단계에 도달한 엔지니어일수도 있고 프로그래밍을 처음 시작하는 초심자일수도 있습니다. 특히 저는 초심자들이 일단은 자신의 학습을 위해서 이 내용을 바탕으로 수업이 재창작 되기를 기대하고 있습니다. 그것을 자신의 블로그에 올려도 좋고, 출판해도 좋고, 생활코딩의 플랫폼인 opentutorials.org에 올리셔도 좋습니다. opentutorials.org의 사용법은 아래 링크를 통해서 볼 수 있습니다. http://opentutorials.org/module/180

댓글

댓글 본문
  1. JohnOh
    감ㅅ합니다
  2. trainer14
    좋은 글 써 주셔서 감사합니다.
  3. 강태
    김 님의 댓글을 보니 이런 생각이 드네요.

    지식을 나누고자 하는 마음을 이런 식으로 받아드리다니... 일상생활이 가능할까 싶네요.
    요약해서 말하자면 '말조심하자'는 뜻입니다.
    대화보기
    • 도공우승9
      멋진 마인드
    • ldhan0715
      iOS 앱개발을 원하신다면 Swift나 React Native, Flutter 등을 배우시는게 파이썬보다는 낫죠.
      대화보기
      • B'a Jobrane
        안녕하세요!
        처음 언어를 배울때 저는 C나 C++ 추천드립니다.
        Python 과 같은 언어는 프로그램이 프로그래머가 해야할 일을 많이 처리해 주어 편하기는 하지만
        반대로 컴퓨터가 동작하는 원리를 모르면 최적화가 어렵습니다.
        C언어 강의 추천을 하나 하자면 홍정모의 '따라하며 배우는 C언어- 줄여서 따배씨' 추천드립니다. (유튜브 강좌 있음)
        C언어와 컴퓨터의 내부 동작과 연계해서 자세히 설명히 되어 있어 초보자도 쉽게 배울 수 있습니다.
      • Yaeju
        해보겠습니다!!!
      • Byung Hun Song
        좋아요
      • 코딩짱
      • 010XXX10
      • ㄴㅇㄹ
        절대 영어로 수업하지는 말아주세요 ㅠ
        대화보기
        • 가르치려고 준비하면서 많이 배운다는 뜻에서 그렇게 쓰신 거 같은데요.
          사람마다 글에 대한 해석이 다르니까 님의 생각은 이해하는데
          굳이 그 마음을 '글 로 남 겨 서' 강의하는 사람에게까지 그 감정을 온전히 전달하지 않았으면 싶네요.
          요약해서 말조심하자는 뜻입니다.
          대화보기
          • 언어의제대로된활용
            I don't think he ever said that he is afraid of speaking/lecturing in English at all. And I don't get why he needs to practice his English.
            물론, 이고잉님의 좋은 수업이 영어로 진행된다면 더 글로벌한 강의가 될 수 있어 좋겠지만, 이 강의가 이고잉님의 영어 연습을 위해 영어로 진행해야한다는 이유는 왜 저만 불쾌한거죠...? 이 강의의 목적은 더 많은 한국인분들이(혹은 한국어로 수업이 시청이 가능하신분들이) 컴퓨터에 관한 지식을 부담없이 쌓으라고 있는것이 아닐까요 (영어가 아닌). 영어로 진행된다면 과연 많은 한국인들이 지금처럼 편하게 시청하실지도 의문이네요. 하나 저를 괴롭히는거는..적으신 글에 오타가 많으세요.. 아무튼 저역시 미국에 거주하고 대학원 졸업을 앞두고 있지만, 이고잉님 수업을 한국어로 들을수 있어서 한국어를 안다는 것이 매우 뿌듯하고 특혜를 받는 기분이 드네요. 저의 개인적인 생각입니다. 좋은 하루되세요 Sophie 님.
            대화보기
            • 다람살라
              참 좋은 생각을 갖으셨네요. 말씀만으로도 행복해집니다.
            • 반자동
              안드로이드 앱 프로그래밍 코스 개설에 한 표 ... ㅎㅎ
            • 음~~
            • anikwon
              C# 코스 개설에 저도 한 표(여유가 되신다면)...
              대화보기
              • WorkaHolic
                이 방법을 계속 생각만했었는데, 이제 실천으로 옮겨야겠네요
              • 솔담
                맥에서 iOS 기반의 앱 개발을 목표로 하고있는데 여기서 알려주신 파이썬등의 강좌로 시작해도 무방하겠죠?
              • Kisoo Ahn
                이고잉님의 학습하는 자세를 엿볼 수 있었습니다.
              • 임구엽
                글읽고 너무 감동 받았습니다. 열심히 보고 공부해서 저도 타인에게 보탬이 될 수 있는 일을 하고 싶네요 ㅎ
              • Cenfun
                진정한 오픈 마인드의 수업이네요
              • 컴박사가될거다
                제가 선생님의 강의를보고 열심히 커서
                돈많이벌어서 ... 후원회원 하겠습니다 ㅋㅋ!
              • Martin
                최고에요
              • 김문배
                오재밌네
              • 홍재호
                좋은 강의 감사합니다.
              • Yong Goo Hwang
                뜻 깊은 생각으로 공유해주시는 좋은 정보들 값어치 있게 사용하고, 말씀하신데로 더 값진 정보가 되도록 노력하겠습니다.
              • 쏘피
                대단하세요!본받아 열심히해서 배운걸 남에게 또 전해주겠습니당!
              • 박수진
                감사합니다.
              • python
                대단하십니다. 존경합니다.
              • 전 지금 c언엉 열혈 공부중 입니다!
              • Kijin Roh
                저도 혹시 여쭤보지만 C#강좌는 배워볼수 없을까요 ?
              • 이승현
                그 말씀에 저도 공감합니다. 항상 응원하겠습니다.
                대화보기
                • 꿈의사람
                  파이톤에 관심갖던 찰나에 좋은 정보 감사합니다~
                  쉽게 설명해주셔서, 덕분에 잘 배워갑니다~^^
                • 김현준
                  저 c언어도 배울수는 없을까요?
                • 피요히코
                  지식이 힘이라 가르침에 있어 자칫 권위적으로 지적허영심을 표출하는 사람들이 많은데 egoing님은 언제나 모르는 사람들과 눈높이를 맞추고 권위적이지않은 표현방식이 참 감사하고 존경스럽습니다. 항상 응원하겠습니다.
                • branddgb
                  언제나 잘듣고있습니다
                • 스타폭스
                  감사합니다. 컴퓨터 왕초보 아저씨입니다. ㅜ 열심히 배우겠습니다. 진심으로 감사드립니다. 하는 일이 잘 되면 꼭 보답해 드리고 싶네요.
                • C언어입문자
                  프로그래밍에 입문한지 한달.. 우연히 이곳에 흘러들어오게 되었는데 깊이와 열정을 갖춘 글을 만나게 되어 반갑습니다. 아직 이 싸이트에 대해 잘 모르지만 제게 큰 도움이 되고, 또 크게 발전할 것 같다는 생각이 듭니다. ^^ 좋은 경험이 되었으면 합니다.
                • 데이비드리
                  기가막힙니다....짝짝짝
                • 한스맨
                  이런 훌륭한 강의를 제공해 주시니 감사드릴 따름입니다.
                • 정승재
                  생각하기 때문에 표현하는가? 표현하기 위해서 생각하는가?
                  표현하기 위해서 여기와서 배워보려고합니다
                  헤메고 있었는데 이렇게 등대처럼 비춰주는 강의 .

                  감사합니다
                • 갓20살
                  오늘부터 자바 시작하려고 합니다 열심히 할께요
                • Sangmoon Jeong
                  감사합니다.
                • kimie
                  정말 훌륭한 곳입니다...복받으실거예요!!! ^^
                • hotsipa
                  감사합니다
                • 돌멩이
                  말해주신대로 약간 근본적인 것부터 해야 하는 성격인데 어셈블리어나 C언어 책 추천 좀 받을 수 있을까요?
                • 예뻐지고 똑똑해지는 주아에요
                  "표현하기 위해서 생각한다"정말 공감갑니다.ㅎㅎ
                • 정진우
                  여러가지 마음가짐을 많이 배워 갑니다. TDS 방식을 잘 모르던 저이고, 저로써는 이러한 욕심자체가 잘 생기지 않았는데 많은 자극을 받아가게 되네요.
                • 홍익인간
                  15년차 객체지향 개발자입니다.
                  언급하신 TDS 방식을 크게 공감합니다.
                  저는 화이트 보드를 구입해서 소리내어 강의하듯 학습합니다.
                  이 방식으로 개념을 확실히 잡을 수 있고 제대로 이해하고 있는지 자가파악이 가능합니다.
                  표현식을 말로 제대로 풀어내지 못하면 완벽히 이해하지 못한 것이라 생각하기에 TDS 방식의 학습을 지향합니다.

                  운영자가 참 영리한^^ 분이구나, 라는 생각을 했지요.
                  참 좋은 싸이트입니다.