생활코딩

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. Yong Goo Hwang
    뜻 깊은 생각으로 공유해주시는 좋은 정보들 값어치 있게 사용하고, 말씀하신데로 더 값진 정보가 되도록 노력하겠습니다.
  2. 쏘피
    대단하세요!본받아 열심히해서 배운걸 남에게 또 전해주겠습니당!
  3. 박수진
    감사합니다.
  4. python
    대단하십니다. 존경합니다.
  5. 전 지금 c언엉 열혈 공부중 입니다!
  6. Kijin Roh
    저도 혹시 여쭤보지만 C#강좌는 배워볼수 없을까요 ?
  7. 이승현
    그 말씀에 저도 공감합니다. 항상 응원하겠습니다.
    대화보기
    • 꿈의사람
      파이톤에 관심갖던 찰나에 좋은 정보 감사합니다~
      쉽게 설명해주셔서, 덕분에 잘 배워갑니다~^^
    • 김현준
      저 c언어도 배울수는 없을까요?
    • 피요히코
      지식이 힘이라 가르침에 있어 자칫 권위적으로 지적허영심을 표출하는 사람들이 많은데 egoing님은 언제나 모르는 사람들과 눈높이를 맞추고 권위적이지않은 표현방식이 참 감사하고 존경스럽습니다. 항상 응원하겠습니다.
    • branddgb
      언제나 잘듣고있습니다
    • 스타폭스
      감사합니다. 컴퓨터 왕초보 아저씨입니다. ㅜ 열심히 배우겠습니다. 진심으로 감사드립니다. 하는 일이 잘 되면 꼭 보답해 드리고 싶네요.
    • C언어입문자
      프로그래밍에 입문한지 한달.. 우연히 이곳에 흘러들어오게 되었는데 깊이와 열정을 갖춘 글을 만나게 되어 반갑습니다. 아직 이 싸이트에 대해 잘 모르지만 제게 큰 도움이 되고, 또 크게 발전할 것 같다는 생각이 듭니다. ^^ 좋은 경험이 되었으면 합니다.
    • 데이비드리
      기가막힙니다....짝짝짝
    • 한스맨
      이런 훌륭한 강의를 제공해 주시니 감사드릴 따름입니다.
    • 정승재
      생각하기 때문에 표현하는가? 표현하기 위해서 생각하는가?
      표현하기 위해서 여기와서 배워보려고합니다
      헤메고 있었는데 이렇게 등대처럼 비춰주는 강의 .

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

      운영자가 참 영리한^^ 분이구나, 라는 생각을 했지요.
      참 좋은 싸이트입니다.
    • 홍익인간
      배워서 남 주는 선각자의 모습을 봅니다.
      이런 문화가 널리 퍼지길 바라는 마음입니다.
      감사합니다.
    • 풍운도장
      기대됩니다~~
    • 공부합시당
      섹#쓰1
    • 브루스리
      아, 길의 갈래 가 있었다는 것을;
      (그냥이 아닌 자연스러운 이치)
      감사합니다.
    • 코딩코딩코
      수업에 대해 인용의 허락범위가 광범위 해서 놀랐습니다 ~ 남다른 마인드인거 같아요.

      저도 강의를 위해서 공부를 할 때가 있는데,

      필자분처럼 이걸 잘 이용하면 학습에 도움이 될 수 있겠군요1
    • 인코
      감시합니다.
    • 앙앙앙앙
      도움이너무안됬습니다.
    • 앙개
      정말 도움이 많이 됩니다. 좋은 컨텐츠 고맙습니다
    • 빛나는새벽
      감사합니다. 덕분에 좋은 공부 편하게 합니다.^^
    • mangomarz
      정말 잘보고 있습니다 감사합니다!
    • egoing
      아직은 없습니다~
      대화보기
      • wlstjd
        C-언어는 계획이 없으신가요??
      • 와웅!!
      • 그린비
        멋져요.. 유튜브에서 강의도 보고 여기 홈피에도 들립니다.
      • 초보코딩
        감사합니다~ 잘들을게요!!
      • 지우개
        내용 정말 좋은것 같습니다!! 감사합니다!
      • 포도당
        인간은 생각하기 때문에 표현하는가? 표현하기 위해서 생각하는가?
        WOW
      • justicehoon
        요즘 인문학에 빠져있었는데...egoing님의 철학에. 감동하고 .

        강의 잘 듣겠습니다. 그 누구도 아닌 내가 되기 위해서.. 감사합니다.
      • 지후
        멋져요
      • egoing
        수정했습니다. 알려주셔서 감사합니다 :)
        대화보기
        • Kwon Hyuk Tae
          http://opentutorials.org......125

          여기로 들어가니 404가 뜨네요
        • egoing
          언젠가는 하고 싶습니다.
          대화보기
          • jihyeon3602
            C언어는 강의를 안하시나요?
            C언어는 웹을 만드는게 아니라서 없는건가...요?
          • marya
            학습 동기부여를 확실하게 해주시네요. 많은 도움 받고 있습니다~
          • KH정보 화팅
            감사합니다.
          • Diew
            egoing 님의 철학이 담겨있는 글이네요.. 존경스럽습니다
          graphittie 자세히 보기