커뮤니티

고용노동부, 산업인력공단과 함께하는 강원도 유일한 기업중심 IT전문교육기관 ICT융합캠퍼스만의 특별한교육입니다.
공인 IT숙련기술인의 다양한 접근방법으로 전문가다운 실무교육을 받을 수 있습니다.

Category

교육강좌

언어 언어

페이지 정보

작성자 관리자 댓글 0건 조회 2,931회 작성일 20-06-01 16:44

본문

언어

언어란?

언어(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

  • 트위터로 보내기
  • 페이스북으로 보내기
  • 구글플러스로 보내기
  • 이전글JAVA1 20.06.01

답변목록

등록된 답변이 없습니다.