|
2018년부터 한국의 초, 중학교에서는 소프트웨어를 정규교육 과정으로 편성하여 운영하기 시작했다. 최근 우리의 일상은 물론 인공지능과 빅데이터와 같은 제4차 산업혁명에 따른 획기적인 변화를 감안한다면 이러한 교육 정책은 소프트웨어의 필요성에 대한 공감에서 비롯된 것이라 할 수 있다. 초등학교에서는 블럭 코딩(Block Coding)으로, 중학교에서는 텍스트에 가까운 간결한 파이썬(Python)을 통하여 프로그래밍에 중점을 둔 교육을 시작하고 있다. 다만 이러한 프로그래밍 위주의 교육이 소프트웨어에 대한 이해를 바탕으로 이루어지고 있는지에 대한 의구심이 든다. 무엇이든지 배우거나 사용하는 경우에 그에 대한 근본적인 이해에 따라 그 효과와 활용의 폭이 천차만별의 모습으로 나타나기 때문이다. 더구나 영화 [매트릭스]에서 눈으로 보이는 모든 세상을 실제로는 0과 1로 이루어진 기계들이 만들어낸 장면이 컴퓨터에 한정되는 것이 아니라 오늘날 사물 IoT와 같이 우리가 사용하는 다양한 제품에 소프트웨어를 통한 기능 구현이 이루어지고 있기 때문에 소프트웨어에 대한 이해는 보편적으로 이루어져야 한다.
(YES 블로그의 소스 보기를 통한 일부 코드의 예, 최종적으로 이 코드는 0과 1로 컴퓨터가 인식)
개인적으로 소프트웨어 분야에서 개발자 및 프로젝트 관리의 일을 하고 있지만, 소프트웨어에 대하여 누구나 이해하기 쉽게 설명한다는 것은 결코 쉬운 일이 아님을 알고 있다. 소프트웨어의 범위 자체가 광범위하여 그것을 분류하여 정리하는 것은 물론이거니와 그것을 누구라도 쉽게 이해할 수 있도록 설명하는 것이 어렵기 때문이다. 더구나 이 분야가 급속한 변화와 발전을 통하여 새롭게 등장하거나 폐기되는 내용들이 많다는 점 역시 그러한 어려움을 가중시키고 있다. 따라서 IT 컨설턴트로 활동하며서 다양한 소프트웨어 분야의 경험을 바탕으로 쓰여진 김현정 작가의 [코딩책과 함께 보는 소프트웨어 개념 사전]은 지금까지 언급한 부분을 모두 감안하여 쓰여졌기 때문에 읽어 볼 필요가 있다. 다만 이 책은 코딩에 대한 구체적인 방법을 다룬 것이 아니라 코딩과 더불어 그와 관련된 소프트웨어의 전반적인 개념을 다루고 있다는 점을 유념할 필요가 있다. 이는 외국어(프로그래밍 언어)를 배우면서 해당 국가의 역사와 문화(소프트웨어 개념)를 배우는 것과 동일한 원리라 할 수 있다. 이 책을 읽는 독자의 관점과 상황에 따라 다르겠지만, 나의 입장에서는 이 책의 특징과 그 효과를 아래와 같이 정리해보았다.
1. 소프트웨어에 대한 간결하면서도 이해하기 쉬운 설명
이 책은 위와 같이 총 6가지의 분류 기준에 따라 소프트웨어를 설명하고 있다. 이전의 소프트웨어를 다룬 책들이 대부분 응용 소프트웨어와 시스템 소프트웨어로 분류하여 설명하고 있다는 점을 감안한다면 이 책의 구성은 저자의 현업에서의 경험 및 최근 소프트웨어의 트렌드를 반영하여 독자적으로 구성되어 있음을 알 수 있다. 이러한 세분화된 구성을 통하여 방대한 소프트웨어의 영역을 각 특징별로 구분할 수 있게 된다. 특히 '6. 코딩을 위한 소프트웨어'를 마지막에 배치하여 이 책이 지향하는 코딩에 관련된 소프트웨어의 전반적인 부분을 다루고 있음을 여실히 보여주고 있다.
구성과 함께 눈에 띄는 부분은 바로 스토리텔링을 연상케 하는 설명 방식과 더불어 각 내용의 유기적인 결합을 들 수 있다. 보통 스토리텔링이라고 한다면 이해하기는 쉽지만, 그 내용이 약간 늘어지는 느낌을 지울 수 없는데, 이 책은 그 내용을 간결하게 정리하면서도 누구라도 쉽게 이해할 수 있게 설명하고 있다는 점이 눈에 띈다. 예를 든다면 '시스템 호출(System Call)'을 '응용프로그램이 운영체제에게 부탁하는 소리'로 설명하면서 소프트웨어에서 '호출'이라는 개념이 생소한 독자의 이해를 돕고 있다. 또한 소프트웨어 자체가 일종의 공학에 속하기 때문에 전문 용어 및 약어로 딱딱하게 설명되는 경향이 있는데, 저자는 이야기를 하는 것처럼 일상에서 우리가 쉽게 접할 수 있는 것들을 그 예로 풀어서 설명함으로써 독자의 이해를 돕고 있다. 더구나 보통 리뷰에서 책의 내용을 요약하는 것이 일반적인데, 이 책은 그 내용 자체가 더이상 요약이 필요없을 정도로 간결하게 정리가 되어 있기 때문에 누구라도 지루해하지 않으면서 읽을 수 있게끔 구성되어 있다.
이러한 책의 설명 방식은 저자의 소프트웨어에 대한 전반적인 이해가 수반이 되어야 가능하다. 더구나 이 책이 단 한 권으로 소프트웨어를 다루고 있다는 점은 경이롭기까지 하다. 운영체제(Operating System), 데이터베이스(Database), 알고리즘(Algorithm) 등은 사실 대학에서 상당히 두꺼운 책으로 한 학기 이상을 공부하는 내용임에도 불구하고 그것을 비전공자의 시선에 맞게끔 간략히 정리하고 있다는 점이 바로 그러하다. 또한 빅데이터(Big Data)와 블럭 체인(Block Chain)과 같이 오늘날 쏟아져 나오는 새로운 소프트웨어에 대한 내용 중에서 필요한 것만을 선택하여 다루고 있다는 점도 마음에 든다. 그리고, 이러한 설명은 비록 이 책이 소프트웨어를 6개의 영역으로 구분하여 설명하고 있지만, 내용상 연결되는 흐름을 취함으로써 각 소프트웨어의 영역이 분리되어 있다기보다는 서로 밀접한 관련이 있음을 보여주면서 이에 대한 전반적인 이해가 필요함을 강조하고 있다.
2. 소프트웨어의 변천 과정을 통한 미래의 방향성에 대한 예측 세계 최초의 진공관 컴퓨터 에니악(ENIAC)에서부터 오늘날의 슈퍼 컴퓨터에 이르기까지 우리는 엄청난 변화와 진보의 기술을 경험하고 있다. 소프트웨어 역시 이러한 하드웨어의 기술적인 발전과 함께 많은 변화가 있었음을 이 책을 통하여 우리는 배우게 된다. 워드프로세서(word processor)는 그러한 소프트웨어적인 변화를 일상에서 확인할 수 있는 예라 할 수 있다. 문서 편집을 위한 이 소프트웨어는 현재 컴퓨터에 설치되어 대중적으로 사용되고 있다. 그러나, 1960년에 입력전용장치라는 별개의 장비에 최초 적용되어 등장했다는 점을 떠올려 보면 현재에 이르기까지 워드프로세서가 많은 변화를 거쳤음을 알 수 있다. 또한 MS-Dos와 같이 과거 우리는 그래픽이 아닌 문자 기반의 인터페이스인 CLI(Command Line Interface)를 사용하다가 마이크로소프트와 애플의 GUI(Graphic User Interface)가 도입되면서 컴퓨터의 폭넓은 사용에 일조하였음도 이러한 획기적인 변화를 감지할 수 있는 예라 할 수 있다. 화려한 그래픽으로 무장된 오늘날의 게임의 원조가 '동-동-남-서-남', '물약 사용', '오크 공격'과 같은 문자 기반의 MUD(Multi User Dungeon) 게임이었다는 점을 감안한다면 이러한 소프트웨어의 변천이 앞으로 무엇을 지향하고 있는지 가늠할 수 있게 된다. 실제 4차 산업혁명이라는 분야가 소프트웨어에 의하여 이루어지고 있다는 점도 이를 반증하고 있다.
3. 인간의 철학이 반영된 소프트웨어 소프트웨어의 공개 개념을 표방하는 GNU(Gnu’s Not Unix)에 대한 설명이라든지 앞서 언급한 워드프로세서가 오늘날 우리가 현실에서 사용하는 언어를 그대로 편집할 수 있게끔 '위지위그(WYSIWYG : What You See Is What You Get) 기술'은 소프트웨어가 인간의 철학을 고스란히 반영하면서 어떠한 형태로 전개가 되었는지를 보여준다. a. 어떤 목적으로든 소프트웨어를 '사용'할 수 있는 자유. b. 프로그램의 메커니즘을 '연구'하고 수정할 수 있는 자유. c. 소프트웨어 복사본을 '재배포'할 수 있는 자유. d. 공공의 목적을 위해 소프트웨어를 개선하고 버전을 '변경'할 수 있는 자유. 1983년 리처드 스톨만의 GNU 프로젝트의 일환인 '자유 소프트웨어'에 대한 위의 강령을 보면 소프트웨어에 대한 인간의 철학이 소프트웨어의 개발과 흐름에 일정 부분 영향을 끼쳤음을 어렵지 않게 알 수 있다. 물론 구입 및 사용, 배포에 제한을 두고 있는 상용 소프트웨어가 존재하지만, 합법적으로 무료로 사용하고 수정할 수 있는 소프트웨어 역시 현실에서 어렵지 않게 찾을 수 있다. 더구나 이러한 철학은 1992년 리누스 토발즈가 개발한 커널 리눅스의 탄생과 같이 소프트웨어의 개발을 이끌었다는 점에서 눈길을 끈다. 오늘날 인터넷과 결합하여 클라우드 개념과 결합한 공간의 제약을 갖지 않고 얼마든지 사용한 소프트웨어의 개발 역시 그에 따른 효과로도 해석할 수 있다.
4. 한 눈에 비교 가능한 소프트웨어 앞서 언급한 것처럼 이 책의 특징 중 하나는 바로 각 소프트웨어가 유기적으로 서로 관련이 있다는 점이다. 이로 인하여 우리는 비슷한 역할을 하는 다양한 소프트웨어에 대한 설명을 이 책을 통하여 간략하게나마 짚어볼 수 있는 기회를 갖게 된다. 이러한 특징이 도드라지는 분야는 바로 '6. 코딩을 위한 소프트웨어'일 것이다. 현재 초등학교와 중학교에 도입되는 교육의 주요 특징이 바로 코딩인데, 이러한 코딩의 수단인 프로그래밍 언어는 그 종류가 상당히 다양한 편이다. 과거 대학에서 코딩은 주로 C언어를 기반으로 이루어졌으며, 실제 직장에서도 C언어를 활용하여 응용 소프트웨어 및 각종 디바이스 드라이버에 적용하는 시스템 소프트웨어를 구현하기도 하였다. 그러나, 최근 기술의 발달과 더불어 응용 소프트웨어의 경우에는 자바(Java)와 같은 프로그래밍 언어로 대체되고 있기에 프로그래밍 언어는 개인의 관심사 또는 활용 분야에 따라 달라질 수 있음을 알 수 있다. 그렇기 때문에 이 책도 역시 코딩의 기본적인 개념과 함께 다양한 프로그래밍 언어를 소개하고 있다. 본격적으로 프로그래밍에 들어가기에 앞서 한 눈에 각 언어의 간략한 특징을 파악함으로써 선택에 도움을 주고 있는 것이다.
이 책에서 파이썬(Python)을 통하여 사용자로부터 두 개의 값을 입력받아 그 값들의 곱한 결과를 화면에 출력하는 코드가 등장하는데, 이를 C언어와 Java 언어로 구현했을 때를 위와 같이 추가해 보았다. 워낙에 간단한 극히 일부분의 코드이기에 이를 통하여 각 프로그래밍 언어의 전반적인 특징을 비교하기란 쉽지 않지만, 문법이라는 형식적인 측면에서의 차이와 유사성을 확인할 수 있게 된다. 과거에는 대부분의 프로그래밍 언어가 C언어를 Base로 하여 개발된다는 관점에서 C언어를 기본으로 배웠지만, 그때와는 확연히 다른 현재의 상황에서는 다양한 프로그래밍 언어를 접함으로써 그 중에서 가장 자신에게 맞는 것을 선택하면 되지 않을까 생각된다. 모든 언어를 전문적으로 사용하여 코딩을 하면 좋겠지만, 대부분 현업에서는 각 소프트웨어에 맞는 분야의 프로그래밍 언어를 선택하여 활용하고 있기 때문이다.
5. 현실을 바라보는 관점으로서의 소프트웨어 최근 비트코인의 열풍으로 인하여 그것을 다룬 다양한 기사와 글들이 등장하고 있는데, 대부분의 시각은 투기 또는 도박의 관점으로 보는 경향이 있다. 하지만 소프트웨어의 관점에서 비트 코인은 보안 및 보호 기술이 축적된 일종의 블럭 체인(Block Chain)이라는 소프트웨어의 산물이라는 점에서 사회적인 시선과 큰 차이가 있음을 알 수 있다. 또한 오늘날 세계 스마트폰의 운영체제(Operating System)를 양분하고 있는 구글과 애플의 진영에 대한 부분을 경제 및 산업적인 측면으로서 그 배타적인 부분을 강조하고 있지만, 소프트웨어의 호환성 및 운영체제의 관점에서 본다면 그러한 간극 역시 달리 보일 여지가 있다. 또한 국내 스마트폰 생산업체에서 자체적인 스마트폰의 운영체제 개발에 난황을 겪는 점도 소프트웨어적인 측면으로 바라볼 수 있게 된다. 이처럼 우리의 일상이 소프트웨어와 밀접하다보니 이것을 어떠한 관점으로 보느냐에 따라 달리 해석하게 되는데, 이 책을 접한다면 우리는 보다 근본적인 관점에서 소프트웨어에 대한 이해를 바탕으로 우리의 현실을 바라볼 수 있지 않을까 생각된다.
이처럼 이 책은 누구라도 쉽게 또 다양하게 소프트웨어에 대하여 배워보고 생각할 수 있게끔 한다. 이 책을 한 번 읽고 주위를 둘러본다면 기존과는 확실히 다른 생각이 머리속을 맴돌게 될 것이다. 이 책을 읽기 전에는 누구나 휴대하고 있는 스마트폰을 바라보며 '소트트웨어가 무엇인가?'라는 물음에 대하여 카메라, 갤러리, 메세지와 같은 아이콘을 가르키면서 터치를 통하여 실행되는 것이라고 대답하였을 것이다. 그러나, 이제는 아이콘으로 보여지는 어플리케이션 뿐만이 아니라 그것이 동작할 수 있게끔 해주는 안드로이드(Android) 또는 iOS라는 운영체제는 물론 LCD와 RF와 같이 각종 디바이스에서 우리 눈에는 보이지 않는 조도 센서 또는 안테나를 통하여 인식된 데이터를 갖고 그에 따른 처리를 하는 것으로 소프트웨어의 영역을 더욱 확장시킬 수 있을 것이다. 또한 어플리케이션을 마켓을 통하여 다운로드 하여 설치하는 것도 호환성에 따라 폰을 선택하는 것 역시 소프트웨어의 정책과 개념에 의한 것임을 알게 된다. [매트릭스]의 네오처럼 일상을 0과 1의 단위로까지는 아니더라도 소프트웨어의 개념과 접목하여 바라볼 수 있을 것이다.
저자는 [코딩책과 함게 하는 소프트웨어 개념 사전]의 머리말에 "Why Software is eating world?(왜 소프트웨어가 세상을 지배하고 있는가?)"라는 '월스트리트 저널'의 기사를 인용하면서 소프트웨어에 대한 이해의 필요성을 언급한다. 하지만 우리는 그 글을 기고한 마크 앤드리슨에 초점을 맞춤으로써 저자의 생각에 공감할 수 있지 않을까 생각된다. 마크 앤드리슨은 1990년대 서서히 인터넷이 보급됨에 따라 그 인터넷이라는 공간을 누비는 '넷스케이프 내비게이터'의 개발자였다. 지금은 크롬과 익스플로어가 그 자리를 대신하고 있지만, 인터넷 초창기의 '넷스케이프'는 그 자체가 인터넷의 상징이나 다름없었다. 오늘날 그가 페이스북, 트위터, 에어비앤비, 스카이프 등 수많은 벤처기업 투자에 성공한 벤처 캐피털리스트라는 점은 그의 성공이 바로 소프트웨어에 대한 이해를 기반으로 하고 있기 때문에 마크 앤드리슨의 존재 자체가 왜 우리가 소프트웨어에 대한 관심이 필요한지를 보여주는 것은 아닐까? 과거 벤처 열풍을 일으키면서 IT붐을 형성했던 우리로서는 이제 일상으로 다가온 소프트웨어는 그 자체가 삶의 터전이자 나아가야 할 미래나 다름없다. 따라서 이 책은 소프트웨어에 대한 일반인의 거리감을 좁히면서 필요할 때마다 그 개념을 사전처럼 찾아볼 수 있게끔 되어 있기에 곁에 두고 읽어볼 필요가 있다. 그리고, 이 책을 디딤돌 삼아서 소프트웨어에 대한 각자의 관심의 깊이를 설정하는 것이야말로 진정 저자가 이 책을 통하여 바라는 것으로 볼 수 있을 것이다. |
|
소프트웨어 개념을 확 잡아주는 특급 과외 선생님의 수업을 듣는 것처럼, 친근한 말투로 전개되어서 지루할 틈이 없었어요. 각 장에서 다루는 용어들이 그 페이지의 맨 위에 쓰여있어서 한 눈에 들어옵니다. 주요 용어가 작은 상자 안에 한 줄 설명과 함께 실려 있으니 이 부분에서는 무엇을 익히게 될지 미리 짐작하며 읽을 수 있어서 좋지요. 내용과 관련된 '이미지'와 함께, '여기서 잠깐!'으로 용어 등을 자세히 설명해 주는 부분이 있어 이해하기 쉬웠습니다.
다만 그 페이지에 나오는 ‘용어’가 앞에서 설명을 했거나 뒷부분에서 다루게 될 때, 그것에 대한 설명이나 그것의 설명이 있는 페이지(쪽)의 안내 없이 곁에 작은 글씨로 ‘○장에서 설명하고 있습니다.’로만 쓰여 있는 부분이 몇 군데 있어서 아쉬웠습니다. 개정판을 낼 경우에는 이 부분에 조금 신경쓰면 좋을 듯 합니다.
“소프트웨어의 기본 개념과 원리를 쉽고 재미있게 설명”하고 “개념에 대한 적절한 비유와 상세한 설명은 누구나 쉽게 이해할 수 있다”는 ‘추천의 글’에 깊이 공감합니다. 어려운 컴퓨터 책을 접하기 전에 <코딩책과 함께 보는 소프트웨어 개념 사전>으로 기본을 다지기를 권합니다.
이미 알고 있던 것도 있지만 대부분 자세히 모르고 있던 내용들이어서 정리를 어떻게 할지 고민을 했습니다. ‘1장 코딩 언어로 작성된 응용 소프트웨어’, ‘2장 컴퓨터를 통솔하는 소프트웨어’, ‘3장 전 세계 웹을 연결하는 소프트웨어’, ‘4장 빅데이터를 위한 소프트웨어’, ‘5장 보안과 보호를 위한 소프트웨어’가 결국은 ‘6장 코딩을 위한 소프트웨어’로 이어지기에 6장의 내용을 중심으로 정리했습니다.
그럼, <코딩책과 함께 보는 소프트웨어 개념사전>으로 수업해주시는 특급 과외선생님을 만나보겠습니다!
코딩에서 객체(object)는 어떤 일의 목적(targer)이 되거나 관심(focus)을 받는 대상을 말합니다. 객체 지향 프로그래밍(Object-Oriented Programming)에서는 모든 사물을 속성과 행동으로 정의하고 이것을 코드로 작성합니다. 즉 객체를 중심으로 생각하고 코드를 작성하는 것이죠.
자바(Java)는 객체(object)를 중심으로 코드를 작성하는 대표적인 객체 지향 언어입니다. 자바는 인터프리터 기반의 언어로 소스코드를 바이트코드로 1차 번역하여 사용자에게 제공하면, 컴퓨터에 설치된 자바가상머신(Java Virtual Machine, JVM)이 바이너리 코드로 번역해줍니다. 가상머신이 설치된 어떠한 컴퓨터에서든 실행 가능하기 때문에 플랫폼에 독립적인 언어라고 합니다. *'플랫폼'은 파워포인트, 카카오톡 등의 응용 소프트웨어가 구동(실행)되는 '환경'을 의미합니다.*
운영체제, 하드웨어 등의 플랫폼 종류가 다양하기 때문에 개발자들은 플랫폼에 독립적인 언어를 사용하고 싶어합니다. ‘플랫폼에 독립적이다’라는 말은 동일한 소스코드로 변경 없이 어떤 플랫폼에서든 실행할 수 있다는 의미이거든요. 이를 위해 가상머신(JVM, Java Virtual Machine)의 개념이 사용되었습니다. 여기서 가상머신은 하드웨어가 아니라 소프트웨어입니다.
가상머신 덕분에 자바 코드를 작성하는 개발자들은 플랫폼의 종류를 신경쓰지 않아도 됩니다. 소스코드를 인터프리터로 1차 번역해주면, 컴퓨터마다 설치된 가상머신이 2차 번역을 시작합니다. 이렇게 번역된 코드는 이제 CPU(중앙처리장치)가 실행할 수 있는 코드가 되는 것이죠.
‘코딩’은 컴퓨터에게 명령을 내리기 위해 코드를 작성하는 과정입니다. 코딩을 도와주는 소프트웨어를 ‘개발도구’라고 하지요. 개발도구를 IDE(Intergrated Development Environment)라고 부릅니다. 사람들이 작성하고 코드를 컴퓨터가 이해할 수 있도록 번역하는 일 등의 여러 개발 환경이 갖추어져야 코딩이 가능하답니다.
사람이 작성한 코드는 ‘원본(source)’이라는 의미로 ‘소스코드’라고 부르고, 번역되어 0과 1로 작성된 코드를 ‘바이너리 코드’라고 하지요. 바이너리는 0과 1로 표시하는 이진수를 의미합니다. *바이너리 코드는 기계가 이해하고 실행할 수 있는 코드이기 때문에 실행코드(executable code) 혹은 기계코드(machine code)라고 부릅니다.*
코딩을 하려면 소스코드를 바이너리 코드로 번역해주는 ‘컴파일러(compiler)’가 필요합니다. 그리고 들여쓰기를 자동으로 처리해주고 문법, 오타 등을 체크해주는 ‘에디터(editor)’도 있어야 하지요. 오류의 원인을 찾을 수 있도록 도와주는 ‘디버거(debugger)’도 필요하답니다. 여러 가지 프로그램이 내 컴퓨터에 설치되어 통합개발환경(IDE)을 조성해줍니다.
자바로 코딩을 하기 위해서는 개발환경이 내 컴퓨터에 준비되어 있어야 합니다. 개발환경은 ‘이클립스’와 같은 개발도구, 도서관의 책과 같은 유용한 ‘표준 라이브러리’, 소스코드를 번역해주는 ‘인터프리터(interpreter)’, 그리고 버그를 찾아주는 ‘디버거(debugger)’ 등을 의미합니다. 표준 라이브러리와 인터프리터 등을 설치하려면 자바개발키트를 자바 홈페이지에서 다운로드받으면 됩니다. 일종의 과학상자와 같은 이것을 자바개발키트(Java Development Kit)라고 합니다. 줄여서 JDK라고 부르지요.
이클립스가 오픈소스 커뮤니티를 통해 탄생한 코딩 도구인데 반해, 비주얼 스튜디오는 마이크로소프트가 개발한 상용 소프트웨어입니다. 이클립스는 ‘Java’를 위한 개발도구, 비주얼 스튜디오는 ‘Visual C++’ 혹은 ‘C#’을 위한 개발도구로 인식되고 있습니다.
닷넷 프레임워크는 마이크로소프트 회사에서 제공하는 소프트웨어 프레임워크(software framwork)입니다. 이 프레임워크에는 개발자들이 가져다 쓸 수 있는 방대한 라이브러리가 포함되어 있습니다. 라이브러리는 일종의 코딩 도서관으로 사용자 인터페이스 모듈, 데이터베이스 모듈, 암호 모듈, 통신 모듈 등을 제공하지요.
깃허브(GitHub)는 소스코드를 공유하는 홈페이지입니다. 깃(Git)이라는 버전 관리 도구를 이용해서 여러 사람이 소스코드를 고치고 변경되는 사항이 발생하면 버전을 높여가며 코드를 관리해줍니다.
프레임워크도 소프트웨어입니다. 다만 소프트웨어 코딩을 위해 틀을 제공한다는 의미에서 ‘프레임워크’라는 이름이 붙은 것뿐이지요. 이 프레임워크는 경험이 많은 개발자들이 이것저것 개발의 어려움을 해결했던 지혜를 담은 결과이기도 합니다. 그래서 프레임워크를 사용하면 소프트웨어를 체계적으로 개발할 수 있고, 개발 이후에도 유지보수를 쉽게 할 수 있습니다. 요즘은 스프링 프레임워크가 인기입니다. 스프링 프레임워크는 코드들을 성격에 따라 분리해 작성하도록 틀을 제공하고 있습니다.
MVC는 Model-View-Controller의 앞글자를 딴 말로 ‘모델-뷰-컨드롤러’라고 읽습니다. 이것은 코드를 3개 영역으로 나누어 작성하는 디자인 패턴을 말하는데 코드를 나누는 이유는 체계적 개발과 효율적 유지보수를 위해서입니다.
코딩 영역은 웹화면에 보이는 프론트엔트(front-end) 영역, 화면에 보이지는 않지만 동적인 웹페이지를 만들기 위한 백엔드(back-end) 영역, 화면을 스타일리시하게 만들어주는 디자인 영역으로 나눌 수 있습니다.
MVC 모델에서 뷰(view)는 화면에 보이게 하는 코드이고, 모델(model)은 동적인 웹페이지를 위한 코드를 말합니다. 컨트롤러(controller)는 사용자의 입력에 따라 모델을 컨트롤(control)하는 코드이지요. 뷰를 위한 코딩 언어로는 HTML, CSS, 자바스크립트 등이 있습니다. 컨트롤러와 모델은 자바, 파이썬과 같은 코딩 언어로 작성되지요.
라이브러리는 모든 코딩 언어에 포함되는 개념입니다. 코딩을 손쉽게 할 수 있도록 돕는 일종의 코딩 도서관이지요. 이 라이브러리에는 코딩을 할 때 사용할 수 있는 방대한 자원(자료형, 모듈, 예외 처리 방법 등)이 담겨 있습니다. 파일을 읽고 쓰는 모듈 뿐만 아니라 수학과 관련된 모듈, 압축하는 모듈, GUI(Graphical User Interface)를 개발하는 모듈 등을 다양하게 제공하고 있지요.
라이브러리는 프로그래밍 과정에서 발생할 수 있는 문제들을 해결하는 ‘표준화된 방법’을 제공하는데 여기서 ‘표준화된 방법’이란 프로그래밍 세계에서 일반화되고 잘 알려진 문제 해결 방법을 말합니다. 그래서 그냥 라이브러리가 아니고 ‘표준 라이브러리’라고 하지요.
코딩 언어에서는 이미 만들어진 코드를 다른 사람이 가져다 사용할 수 있도록 라이브러리를 제공하는데 기록보관소(Archive.아카이브)의 문서박스처럼 여러 개의 코드를 묶어 한꺼번에 제공하고 있습니다
‘함수(函數)’의 뜻을 풀이해보면, 상자 속에 넣어둔 숫자를 의미합니다. 자바, 파이썬 등을 만든 회사나 단체에서는 개발자들을 위해 다양한 함수를 제공하고 있는데 이것이 바로 API(Application Progrmming Interface)라고 부르는 존재입니다.
‘모듈(module)’은 특정 작업을 처리할 수 있는 소스코드를 말합니다. 모듈은 간단하게 작성된 몇 줄의 함수일 수도 있고, 여러 함수들이 포함된 클래스일 수도 있습니다. 보통 모듈의 장점을 살리기 위해 하나의 모듈에는 하나의 작업을 처리하기 위한 코드들을 모아둔답니다.
두 개의 모듈을 연결하기 위해서는 인터페이스(inerface)가 필요합니다. 모듈은 서로 연결해야 하나의 프로그램이 완성됩니다. 여러 하드웨어 부품을 케이블로 연결해 하나의 제품을 만들 수 있듯이 소프트웨어에도 프로그램을 만들기 위해 모듈을 연결하는 인터페이스가 필요합니다. 인터페이스는 두 모듈이 서로 ‘통신’하는 지점을 말합니다. 하드웨어 부품처럼 소프트웨어에서도 모듈이 있고 이 모듈을 연결하는 인터페이스가 필요합니다.
프로그램을 개발할 때 이미 잘 만들어진 라이브러리를 이용하면 수고를 한층 줄일 수 있습니다. 라이브러리에서 제공하는 다양한 기능은 API(Application Progrmming Interface)를 통해 사용할 수 있습니다.
API는 애플리케이션(애플리케이션과 프로그램, 그리고 소프트웨어는 유사한 의미를 가진 말입니다.) 개발에 활용될 수 있도록 제공하는 인터페이스를 말합니다. 예를 들어 자판기에서 음료수를 사기 위해 동전을 넣고 버튼을 누르면 음료수가 쿵 하고 떨어지는데 이 버튼이 바로 인터페이스입니다. 사람과 자판기 사이를 연결해주는 지점이기 때문이죠.
카피라이트(copyright. 저작권)가 소유의 개념에서 비롯되었다면, 카피레프트(copyleft)는 공유와 협력의 개념인 ‘자유 소프트웨어 운동(free software movement)’을 통해 시작되었습니다.
오픈소스의 세계에서는 소스코드를 대가 없이 공유하고, 누구에게나 수정할 수 있는 권리를 제공하고 있습니다. 수정한 코드는 다른 사람에게 공개하고 배포해야 하는 책임도 뒤따릅니다. 저작자를 기억하기 위해 소스코드에 이름을 기재해야 한다는 것이 중요한 포인트이지요. 이것은 전 세계 석학들이 자신들의 연구 결과를 공유하고 이를 기반으로 기술을 한층 더 발전시킬 수 있는 환경을 만들어주었습니다.
자유 소프트웨어(free software)는 소프트웨어의 자유(free)를 지향하며 나눔과 공유를 실천하는 운동에서 비롯된 말입니다. 요즘은 ‘자유 소프트웨어’라는 말 대신에 ‘공개 소프트웨어(open software)’라는 말을 사용한답니다. 자유 소프트웨어는 소스코드를 공개한다는 의미를 가지고 있는 것이지 무료를 의미하지는 않습니다. 무료 소프트웨어는 ‘프리웨어(freeware)’라고 부른답니다. 2018년부터 초중교에서의 소프트웨어 교육이 의무화된다는 소식을 접하고 코딩에 대한 호기심이 생겼으나 어떤 책을 봐야할지 고민하고 있을 때, <코딩책과 함께 보는 소프트웨어 개념사전>을 만났습니다. 소프트웨어에 대한 개념뿐만 아니라 하드웨어의 개념과 유래도 책에 실려 있어서 좋았습니다. 그리고 자유 소프트웨어(free software)에 관한 글을 읽으며 뜻을 가진 개발자들의 그 정신을 잊지 말고, 감사하며 컴퓨터를 쓰자는 다짐도 하게 됩니다. 컴퓨터 관련책은 딱딱하고 지루하기만 했는데 이러한 편견을 날려주는 책을 만나 무지 행복한 시간을 보냈습니다. 앞으로 김현정 작가님의 책은 믿고 볼 수 있을 듯 합니다. 소프트 개념사전으로 기본을 다졌으니 이제 조금씩 진도를 나가볼 계획입니다. |
|
아들이 초등학생이었던 수년 전에 아내는 아들에게 학원을 강요하는 대신 과목별 '개념 사전'을 열심히 사서 읽혔다. <초등 수학 개념 사전>을 다 읽었다 싶으면 <초등 과학 개념 사전>을 읽히는 식으로 말이다. 예컨대 분수는 '전체에 대한 일부분을 나타내는 수'라고 말할 수 있는 간단한 개념이지만 초등학생의 눈높이에선 그렇게 간단한 개념이 아닐 수도 있다. 그러므로 책은 그림을 곁들인 여러 사례를 보여줌으로써 아이들의 이해를 돕는다. 공부라는 게 사실 꼭 알아야 하는 과목별 용어가 수도 없이 많은데 이를 간과하고 넘어가면 나중에는 그 과목의 수업이 마치 외국어처럼 들리게 마련인데 그쯤 되면 50분 수업을 듣는다는 건 고문이 아닐 수 없다. 게다가 학년이 높아질수록 과목에서 배우는 필수 용어들이 차츰 증가하게 마련인데 용어의 개념을 등한시한다는 건 공부를 포기하겠다는 것과 진배없다.
다소 딱딱할 수도 있는 용어의 개념들을 아내는 짬이 날 때마다 아들에게 퀴즈를 내듯 물어봄으로써 재미를 더하기도 했다. 때로는 내기를 해서 선심 쓰듯 외식을 하기도 했지만 말이다. 아내의 그런 노력 덕분인지 아들은 고등학교에 입학한 지금까지 별 어려움 없이 공부를 계속하고 있다. 그렇다고 개념 사전을 읽히려 했던 아내의 교육 방식을 내가 전적으로 찬성했던 건 아니다. 자식 교육은 아내가 도맡다시피 하는 다른 집들과 마찬가지로 이따금 마음에 들지 않는 게 있어도 그저 내색을 하지 않았을 뿐이었다. 말하자면 자식의 교육에 있어서는 나 역시 한 발 물러나 있었던 게 사실이다. 그랬던 내가 늦은 나이에 개념 사전을 읽게 될 줄이야 누가 알았겠는가. 책의 제목인 즉 <코딩책과 함께 보는 소프트웨어 개념 사전>.
"언론을 통해 귀가 따갑게 '제4차 산업혁명'이라는 말을 듣고 있지만, 컴퓨터 분야를 전공하지 않는 사람들이 이해할 수 있는 눈높이 정보는 부족하다는 생각이 들었습니다. 우리의 미래를 이끌 '핫'한 주인공인 소프트웨어를 쉽게 설명해주는 책을 찾기 어려웠지요. 그래서 저는 이 책『코딩책과 함께 보는 소프트웨어 개념 사전』을 펴내게 되었습니다. 우리 생활 곳곳에 마치 공기처럼 존재하며 동작하고 있는 소프트웨어의 종류, 개념과 원리, 역사에 대한 이야기를 담았습니다." (p.11)
코딩을 공부하여 인생 2막을 준비하려는 건 물론 아니다. 그럴 만한 능력도 되지 못하고 말이다. 그럼에도 내가 이 책을 읽어야 할 이유는 많고도 많은 듯했다. 학생들이 한 학년 한 학년 단계를 밟아 올라갈 때마다 익혀야 할 용어의 개념이 늘어나는 것처럼 소프트웨어가 우리 생활에 영향을 미치기 시작했던 과거의 어느 시점부터 한 해 한 해 우리가 배우고 익혔어야 할 관련 용어와 개념들이 비례하여 증가하였음에도 나는 그저 방치한 채 지금껏 버텨왔던 것이다. 그러다 보니 중학교 3학년 무렵 잠시 컴퓨터 코딩을 배웠던 아들과의 대화도 조금씩 어려워지기 시작했고, 책이나 잡지, 심지어 저녁 뉴스를 들을 때도 소프트웨어 관련 용어의 개념을 이해하지 못해 무슨 말을 하는지 도통 알아듣지 못했던 적이 한두 번이 아니었다.
"서비스를 제공하는 컴퓨터를 '서버'라고 부르지만, 어떤 종류의 서비스를 제공하느냐에 따라 웹서버, 콘텐츠서버, DB서버 등 이름도 제각각이랍니다. 웹서비스를 제공하는 서버는 당연히 '웹서버'라는 이름이 붙었습니다. 웹서버(web server)는 웹브라우저(클라이언트)에서 요청한 내용을 처리해주는 소프트웨어인데요, 레스토랑에서 테이블 담당 서버가 손님의 요청을 처리하는 것처럼 웹서버는 인터넷을 통해 도착한 클라이언트의 요청을 처리합니다" (p.159)
인용문에서 알 수 있는 것처럼 저자의 설명은 무척이나 친절하다. 그러므로 이 책은 나처럼 워드 작성만 겨우 할 뿐 다양한 분야의 컴퓨터 사용법은 시도조차 하지 않거나 때로는 막연한 두려움으로 인해 외면해버리는 '컴퓨터 비 친화적인 종족'을 위한 안내서인 셈이다. 어찌 보면 다양한 소프트웨어의 개발로 인해 누군가는 다양한 편의와 유용한 삶의 도구를 확보하게 되지만 다른 위치에 있는 누군가는 사회로부터 자발적 또는 비자발적 아웃사이더로 전락하게 된다. 책을 읽으면서 나는 우리가 사회를 구성하는 한 사람의 구성원으로서 소위 '인싸'로 남느냐 아니면 어쩔 수 없는 '아싸'가 전락하느냐 하는 문제는 전적으로 개인의 학습 여하에 달린 게 아닌가 하는 생각이 들었다. 그러자면 우리가 등한시했던 소프트웨어 용어의 개념부터 차근차근 배워가는 게 순서일 듯싶다.
카이스트에서 소프트웨어공학을 전공한 후 지난 20년 동안 IT컨설팅회사에 근무하며 다양한 소프트웨어를 직접 경험하고, 현장에서 얻은 지식과 노하우를 독자들에게 쉽고 재미있게 전달하고자 집필활동을 이어오고 있다는 저자는 이 책에서도 자신의 능력을 십분 발휘하고 있다. 1장 코딩 언어로 작성된 응용 소프트웨어, 2장 컴퓨터를 통솔하는 소프트웨어, 3장 전 세계 웹을 연결하는 소프트웨어, 4장 빅데이터를 위한 소프트웨어, 5장 보안과 보호를 위한 소프트웨어, 6장 코딩을 위한 소프트웨어의 총 6장으로 구성된 이 책은 4차 산업혁명 시기의 '사회 부적응자'를 위한 지침서가 아닌가 싶다.
우리가 어떤 사회에 적응하기 위해 가장 먼저 하는 게 언어를 익히는 일인 것처럼 달라진 세상의 통용어에 대한 개념을 익히는 것이야말로 사회 구성원으로 남기 위한 최소한의 의무가 아닐까. 마치 나는 미뤄두었던 숙제를 끝내는 심정으로 책을 꼼꼼히 읽었다. 저녁 뉴스에서도 자주 등장하는 소프트웨어 용어의 뜻도 제대로 모르면서 이 시대를 살아왔다는 게 조금 부끄러워지기도 한다. 아들에게 개념 사전을 읽힐 게 아니라 개념 사전이 필요했던 사람은 정작 내가 아니었던가. 우리는 언어를 통해 새로운 세상을 경험한다. 학이시습지 불역열호(學而時習之 不亦悅乎)의 경험은 예나 지금이나 크게 다르지 않아서... |
|
저자 김현정 작가는 한국과학기술원(KAIST)에서 소프트웨어공학을 전공하고, 지난 20년 동안 IT컨설팅회사에 근무하며 다양한 소프트웨어를 직접 개발하는 등 경험해왔다, 10여 년 동안 아카데미와 대학교 등에서 소프트웨어 분야 강의를 하면서 IT기술을 이해하기 쉽게 설명하는 노하우를 체득했다. 현재 청소년과 일반인들을 위한 재미있고 이해하기 쉬운 교양 정보서적을 집필하고 있다.
컴퓨터 분야를 전공하지 않는 사람들이 이해할 수 있는 눈높이 정보는 부족하다는 생각이 들었습니다. 그래서 저는 이 책에서 우리 생활 곳곳에 마치 공기처럼 존재하며 동작하고 있는 소프트웨어의 종류, 개념과 원리, 역사에 대한 이야기를 담았습니다. 컴퓨터로 문서를 작성하게 도와주는 워드프로세서가 하드웨어 냄새를 풍기는 이유, 인터넷에서 물건을 살 수 있게 하는 웹서버의 존재감, 데이터를 전문적으로 저장하고 관리해주는 소프트웨어가 있어야만 하는 이유, 블록체인이 암호화 기술을 활용하는 방법 등을 하나하나 공유하고 배워가며, 과거와 현재를 진단하고 미래를 바라볼 수 있는 안목을 얻어가길 바랍니다. - ‘저자의 말’ 중에서
1990년대 인터넷 보급으로 사물 인터넷 시대가 열렸다면 2000년대 이후 스마트폰 탄생으로 사물 인터넷 시대가 본격적으로 개막했다. 이제 사물들이 RFID나 소프트웨어를 탑재하고 네트워크와 연결된 것이다. 활용 분야는 스마트 홈(홈오토메이션), 웨어러블 기술(스마트 시계·안경), 드론, 자율주행자동차, 자동로봇, 스마트 시티 등 다양하다.
‘코딩’은 소프트웨어에 명령을 내리는 방법, 즉 '컴퓨터와 대화하는 소통 언어'다. 좋은 코딩을 위해선 C언어나 파이썬 같은 프로그래밍 언어를 사용하여 정해진 규칙에 따라 프로그램을 짜는 것이 관건이다. 4차 산업혁명의 핵심 기술, 가령 자율주행자, 사물 인터넷, 3D 프린팅 같은 기술이 원활하게 작동할 수 있도록 하는 것도 바로 코딩이다.
잠시 코딩과 소프트웨어 교육의 연혁에 대해 살펴보자. 미국에서 코딩 교육이 시작된 것은 1980년대다. 수학자 시모어 페퍼트(Seymour Papert)는 『마인드스톰: 어린이와 컴퓨터, 강력한 아이디어』(Mindstorms: Children, Computers, and Powerful Ideas, 1980)에서 컴퓨터 프로그램을 통해 아이들이 수학과 사이버네틱스 같은 새로운 주제와 스스로 생각하는 방법에 대해 배울 수 있다고 주장하면서 촉발되었다.
미국의 수학자 시모어 페퍼트(1928~2016)
2001년 MIT 미디어랩은 아이들이 프로그래밍을 통해 자신을 표현하고 지식을 변환시킬 수 있는 도구, ‘스크래치(Scratch)’ 개발에 나서 2007년 5월 최종 버전을 공개했다. 스크래치(https://scratch.mit.edu)에 접속하면 아이들이 스스로 프로그램을 만들고, 소스나 프로그램을 인터넷으로 공유할 수 있다.
한편 미국 국립과학원은 학생들의 컴퓨팅 사고력을 키우기 위한 통합 교과 과정과 평가 기준을 마련해 학교에 보급했다. 이 교과 과정에서 코딩과 소프트웨어 과목은 중요하게 취급되고 있다.
우리나라에서 코딩과 소프트웨어 교육은 2018년 중학교 1학년 의무교육이 시작되었고, 올해 초등학교 5~6학년으로 확대되었다. 중학생은 1년에 34시간 이상, 초등학생은 17시간 이상 교육을 받아야 한다. 현재 고등학생의 경우 선택 사항이지만 곧 의무적으로 실시될 것으로 보인다. 이와 관련하여 교육 당국은 코딩과 소프트웨어 분야를 반영한 정보교과서 개정판을 마련해 보급했다.
올해 초등학교 6학년인 아들은 학교에서 코딩을 배우는 한편, 학원에서 로봇 카를 작동시키는 코딩 같이 업그레이드된 학습을 병행하고 있다. 아들은 2018년 국내 로보컵주니어 코리아대회에 참가하여 입상, 호주 국제 로보컵 경진대회에 출전하기도 했다. 지금도 C언어 프로그래밍 공부를 계속하고 있다.
로봇 카 관련 코딩은 로봇 청소기에서부터 자율주행자동차까지 폭넓게 응용될 수 있다. 로봇 청소기가 움직이는 원리에는 랜덤 방식, 매핑 방식과 비전 방식이 있다. 어떤 방식이든 이동과 회전이라는 두 가지 동작이 반드시 포함된다. 장애물을 만나면 적절한 각도로 회전하면서 회피해야 구석구석까지 청소할 수 있다. 로보컵주니어 경진대회는 로봇 카가 장애물을 피하면서 주어진 경로를 최단 시간내 주행하도록 코딩하는 실력을 겨룬다.
2018년 2월 국민대에서 열린 제6회 로보컵주니어 코리아 대회 모습. 아들이 이 대회에 참가했다.
이 책은 모두 여섯 개의 장으로 구성되어 있다. 1장은 아두이노, 오피스, 콘솔 프로그램 같은 ‘코딩 언어로 작성된 응용 소프트웨어’ 19항목을 설명한다. 2장은 운영체계, 메모리 관리, 프로세스 관리 같은 ‘컴퓨터를 통솔하는 소프트웨어’ 19항목을 알아본다. 3장은 도메인주소, 웹브라우저, 사물인터넷 같은 ‘전 세계 웹을 연결하는 소프트웨어’ 20항목을 살펴본다.
어떤 분야든 기초가 탄탄해야 응용력도 는다고 했다. 그런 맥락에서 볼 때 이 책은 개념의 중요성에 대한 자각을 일깨우는 한편, 필수 개념을 스스로 이해하고 활용할 수 있도록 해준다.
|
![]() 본 리뷰의 대상은 잇츠 스토리 (IT’s story) 시리즈의 세번째 도서인 <코딩책과 함께 보는 소프트웨어 개념사전>이다. 잇츠 스토리 시리즈는 IT의 문화와 역사, 미래를 그림과 이야기로 알기 쉽게 풀어내어 어렵고 지루하게 느껴지는 디지털 용어를 친숙하게 접근할 수 있는 시리즈다. 그 중에서도 <코딩책과 함께 보는 소프트웨어 개념사전>는 이러한 잇츠 스토리 시리즈의 장점이 극대화된 책이라고 생각한다. 책의 저자인 김현정은 KAIST에서 소프트웨어공학을 전공하고 IT컨설팅 업계에서 현장을 경험하면서 10여년 동안 소프트웨어 분야 강의를 진행한 IT 전문가다. 저자는 현장감 있는 교육을 제공하기 위해서는 흥미롭고 재미있는 이야기와 경험을 공유하는 것이 무엇보다도 중요하다는 것을 깨닫고 단지 코딩 방법론 기술만이 아닌 컴퓨팅 사고력을 제고시키기 위해서 본 도서를 집필했다고 한다. (p. 11)
![]()
![]() |
|
이 책에 대해 책 제목에 '사전'이란 단어가 들어가 있지만 '가나다' 순이 아닌 중요한 주제를 중심으로 6개의 장으로 나누어, 각 장에 들어 있는 개념들을 저자의 방식대로 쉽게 풀어 설명한다. 사전의 형식과 사전적 정의만을 고집하지 않는다는 뜻이다. 또한 중간 중간 들어가 있는 귀여운 삽화들은 생소한 개념과 마주해야하는 독자들에게 심리적 안정감을 준다. 이제 내가 이 책을 보며 느꼈던 생각들을 하나씩 꺼내 이야기해 보고자 한다. 기계 + 소프트웨어 = ? 오늘날 우리는 다양한 기계들에 둘러싸여 살아가고 있다. 기계는 사람들의 욕망에 의해 발전해 왔으며, 앞으로도 그럴 것 같아 보인다. 몇 천 년전 손가락으로 수를 세던 인류는 주판과 같은 도구들을 이용해 큰 수를 빠르게 계산할 수 있는 방법을 찾아낸다. 주판이 1990년대 까지도 우리나라의 은행과 같은 곳에서 쓰였던 걸 보면, 꽤 괜찮은 계산 도구 였던 것 같다. 그때는 주판을 다루는게 중요하고, 필요한 능력중 하나인 시기였다. 그렇다고 모두가 사용법을 익힐 필요는 없었다. 주판으로 할 수 있는 일들이 제한적 이어서, 사회전체에 미치는 영향력이 그렇게 크지 않았기 때문이다.
<주판은 고대 중국에서 만들어졌으며, 중국에서 주판이 한국으로 전래된 것은 1400년경이다.> -출처 위키백과- 이제는 몇 백 년간 사용해온 주판을 쓰진 않는다. 불과 몇년 사이에 더 뛰어난 계산도구인, 컴퓨터가 빠르게 보급되었기 때문이다. 그만큼 급변하는 사회속에서 지금 우리는 살아가고 있는 것이다. 이런 속도라면 10년후 아니 어쩌면 1년후, 컴퓨터에 의해 세상이 어떻게 변할지 그분야에 종사하는 사람이 아니라면 가늠 조차 하기 힘든게 현실이다. 그럼 도대체 컴퓨터란 무엇이란 말인가? 무엇이길래 세상을 이리도 빠르게 바꿔 놓고 있는 것일까? 컴퓨터는 기계장치인 하드웨어와 그걸 구동할 수 있게 해주는 소프트웨어를 아우르는 말이다. 프로그램(=소프트웨어)의 뜻은 "미리 써놓다"라는 뜻의 라틴어에서 유래한 말인데, 기계가 할일을 사람이 미리 정해주고, 기계는 메모리에 올라온 명령어에 따라 순차적으로 작업을 수행하게 된다. 메모리에 명령어를 올리는 과정이 우리가 잘 알고있는 '로딩'이다. 여러 소프트웨어 중에서도, 특히 중요한게 운영체제(Operating System)란 녀석이다. 이름에서도 알 수 있듯 이녀석은 시스템과 직접적인 연관이 있으며, 컴퓨터에 들어있는 각종 기계장치들을 체계적으로 관리해주는 소프트웨어 이다. 예를 들어, 컴퓨터의 한정된 자원을 효율적으로 활용하기위해, 컴퓨터안에서 실행 되는 모든 응용 소프트웨어들은 시스템호출을 하고 운영체제의 허가를 받아야만 한다. 계산도구에 불과하던 컴퓨터가, 어쩌다가 오늘날 이렇게 다양하게 응용되게 됐는지 보면 볼 수록 신기하다. 어찌보면, 똑같은 계산도구인 주판과 다른점은 겨우 소프트웨어가 있고 없고의 차이점 뿐인 것 같은데 말이다. 단순 텍스트 덩어리로만 생각했던, 소프트웨어에는 내가 알지 못하는 무언가가 더 있을 것만 같은 느낌이 든다. 2016년 사람들의 이목을 끄는 사건이 하나 있었다. 이세돌 9단과 알파고와의 바둑대결 말이다. 머신러닝에 관심없던 사람들 까지도 이 일을 계기로 인공지능에 많은 관심을 갖게 되었다. 사람이 미리 짜놓은 대로만 움직이던 기계가, 이제는 스스로 생각 하려하고 있다. 4차 산업혁명 시대로 대변되는 앞으로 다가올 미래사회에서, 소프트웨어 기술의 정수라 할 수 있는 인공지능이 가져올 혜택들은, 모든 인류가 공평하게 나눠 가질 수 있는 것일까? 그렇지 않다면 우린 앞으로 어떻게 대처해 나가야 할까? 공유와 협업에서 길을 찾다 물리학이나 수학 같은 분야에서는, 이미 예전부터 출판 전 논문을 공개해 연구 결과를 서로 공유해 오고 있었다. 지금은 코넬 대학교에서 운영하는 아카이브(arXiv.org)라는 사이트를 통해서도, 공유가 활발히 이루어지고 있다. 관련분야의 정보를 공개하고 협업 함으로써, 그분야의 빠른 발전을 도모하고 자신의 아이디어에 대한 평가를 받기위함 일것이다.(물론 기초과학분야가 정보를 독점한다해서 이득을 취하기 힘들다는 것도 이유중 하나일 것이다.) 갑자기 다른 분야 이야기를 하는 이유는, 소프트웨어 쪽에서도 이와 비슷한 움직임이 있기 때문이다. 1983년 리처드 스톨만에 의해 촉발된 이움직임은 소프트웨어 사용자들에게 네 가지 자유를 주는걸 목적으로 하고 있다.
첫째, 어떤 목적으로든 소프트웨어를 '사용'할 수 있는 자유. 둘째, 프로그램의 메커니즘을 '연구'하고 수정할 수 있는 자유. 셋째,소프트웨어 복사본을 '재배포,할 수 있는 자유. 넷째, 공공의 목적을 위해 소프트웨어를 개선하고 버전을 '변경'할 수 있는 자유. - <코딩 책과 함께 보는 소프트웨어 개념 사전>中에서 p.80 - 대표적인 공개 소프트웨어 중에 개발자들이 많이 사용하는 '리눅스'라는 운영체제가 있다. '리처드 스톨먼'이 개발에 착수하고, '커널'이라고 불리는 운영체제의 핵심 소프트웨어가 그당시 대학생 이었던 '리누스 베네딕트 토르발스'에 의해 개발되면서 리눅스가 탄생했다. 사람이 만드는 코드를 '소스 코드'라 부르는데, 그동안 운영체제의 소스 코드는 기업비밀로 간주되어 공개 되지 않았다고 한다. 그런데 리눅스를 통해 컴퓨터 운영체제의 소스 코드가 공개되고, 작동방식을 알수있게 되자. 전 세계의 사용자들이 개발에 참여 할 수있게 되었고, 지금까지도 개선이 이루어지면서 안정성이 점점 높아 지고 있다고 한다. 스마트폰에 많이 쓰이는 '안드로이드' 또한 리눅스를 기반으로 만들어졌다는 사실이 재미있다.
<왼쪽에서 부터 자유 소프트웨어 재단의 리처드 스톨먼(Richard Matthew Stallman)과 리눅스 커널 개발자 리누스 베네딕트 토르발스(Linus Benedict Torvalds)>-출처 위키백과- 이제는 공개 소프트웨어들이 업계를 주도 하면서, 소스코드를 공개 하지않았던 기업들까지도 조금씩 소스코드를 공개 하기도 한다. 그러나 공유만 한다고 해서 골치아픈 문제가 모두 해결되는건 아니다. 앞서말한 기초과학 분야는 원래 공유를 밥먹듯 하는분야라 서로 암묵적인 합의가 되어있다지만, 소프트웨어 개발은 지적 재산권이 걸려 있는 문제기 때문에 섣불리 모든걸 공개하라고 요구하기도 참 애매해 보인다. 또한 공정성에 문제가 있는 소스코드가 공개 되더라도, 훈련이 안된 일반인이 하루 아침에 그 속에 있는 알고리즘까지 이해하고 문제점을 찾는건 어려울 것 같다. 마치 법전을 주고 거기서 문제점을 찾아 보라는 것과 다를바 없어 보이기 때문이다. 이런 문제들에 대해 조만간 사회적 협의가 필요해 보인다. 그러기 위해선 꾸준한 관심이 뒷받침 되어야 하겠지만 말이다. 여러 사람이 머리를 맞대고 생각하다보면 분명 좋은 수가 생길 것이라고 믿는다. 인터넷과 약속 그리고 이 책의 존재 이유 정보를 공유하는데 있어 인터넷만큼 편리한건 없다. 요즘은 궁금한게 있을때, 책을 찾아보기 보단 인터넷 검색을 먼저 하게된다. 링크를 타고 가다보면, 거의 모든 정보를 얻을 수 있기 때문이다. 그럼 도대체 이런 정보들은 어디에 있다 나오는 것일까? 서버라는 말을 많이 들어 봤을 것이다. 웹서버, 게임서버 등등 용어가 익숙하긴 한데 정확히 어떤걸 뜻하는지는 잘 몰랐다. 서버는 인터넷상에서 서비스를 제공하는 컴퓨터를 말하는데, 서버에 정보를 저장하고, 요청이 있을때마다 정보를 손님 컴퓨터에게 제공하게 된다. 여기에 대비되는 말로 클라이언트가 있다. 클라이언트는 서비스를 제공받는 손님 컴퓨터를 지칭한다.
<라우터를 통해 연결된 인터넷을 시각화한 그림>-출처 위키백과- 이제는 컴퓨터 뿐만 아니라 여러 사물들에도 인터넷이 연결되고 있다. 만약 위에 사진과 같이 거미줄 처럼 촘촘히 연결된 기계장치들 마다, 요청하거나 응답하는 방식이 서로 다르다면 통신을 할 수 없게 돼 혼란이 발생하게 될 것이다. 그래서 인터넷상에서 정보를 주고 받기 위해서는 규칙을 만들 필요가 생기는데, 이런 규칙들을 '프로토콜'이라고 부른다. 눈에 보이지않는 이런 여러 규칙들이 모여 우리가 편리하게 인터넷을 즐길 수 있는 환경이 구축 되는 것이다. 그러고보니 이쯤에서 생각해 봐야 할게 하나 있다.그럼 소프트웨어 용어에 대해 궁금한게 있으면, 인터넷을 찾아보면 될 텐데 굳이 이 책을 봐야하는 이유가 있는 건가? 라는 의문 말이다. 책을 보는 독자라면, 당연히 들수있는 생각이다. 궁금한게 있을때, 분명 인터넷으로 찾는게 도움을 줄때가 많다. 알고 싶은게 적을때는 말이다. 그런데 내가 무엇을 모르고 있는지 조차 알지 못하는 상태에서, 인터넷을 통해 정보를 알아내기란 생각보다 쉽지가 않다. 가령 위키백과를 예로 들면, 한 번쯤 이런경험이 있을 것이다. 어떤걸 알아보기 위해 검색하여 그에 관한 문서를 찾긴했는데, 그 문서를 이해 하기위해, 링크된 또다른 문서를 참고 해야하는 경우 말이다. 내가 모르는게 무엇인지 정확히 알고 있는 경우라면, 몇번 해매다 궁금증을 해결 할 수 있겠지만 모르는 경우가 문제다. 링크를 타고 돌아다니다 보면, 나중에는 내가 찾으려는게 이게 아니었는데 하는 허탈감이 들때가 한두 번이 아니다. 이 책은 코딩에 관심이 있는 독자라면 누구나 궁금해 할만한 개념들을 먼저 이 길을 경험한 저자가 주제별로 정리하고, 우선적으로 알아야할 것과 나중에 알아야할 것들을 나눔으로써, 독자가 자연스럽게 뜻을 이해 할수 있도록 구성되어져있다. 또한 뜻뿐만이 아니라 그 용어에 얽힌 이야기 까지 알 수 있어, 개념을 기억하기가 한결 수월 했다. 인터넷은 인터넷만의 방대한 정보를 얻을 수 있다는 장점이 있지만, 한번에 한페이지씩밖에 볼 수 없어, 전체 내용을 엮어서 이해하는게 힘들다는 단점을 가지고 있다. 반면 이 책은 체계적인 설명으로 책을 읽는 사람이 그 용어가 어느 분야에 살고있는(등장하는) 것인지 한 눈에 파악 할 수 있다는 장점을 가지고 있지만, 인터넷만큼 방대한 정보를 모두 담아내진 못한다. 어떤게 좋고 나쁘고를 떠나, 인터넷과 이 책은 서로 상호보완적인 관계라고 이해하면 될 것 같다.
데이터와 알고리즘 엄청나게 쌓인 정보들을 빅데이터라고 부른다. 예전 같이 수집된 자료가 적을때는, 사람이 직접 통계기법을 활용해 분류,정리 따위의 일을 할 수 있었겠지만, 컴퓨터와 인터넷등이 등장하면서, 데이터베이스 서버에 쌓이는 정보의 양은 사람이 처리할 수 있는 수준을 넘어섰다. 그러다보니 전문적으로 데이터를 관리 해주는 소프트 웨어가 필요하게 되었다. 이런 데이터베이스 관리 시스템(DBMS)에는 대표적으로 오라클과 오픈소스인 MySQL 이있다. 빅데이터가 왜 중요한 것일까? 아무 상관없어 보이거나 방대한 자료들 속에서 유의미한 패턴을 발견하고, 문제해결을 위한 '솔루션'을 얻을 수있기 때문이다. 예를 들어 월마트에서는 데이터 분석을 통해 손님들의 구매 패턴을 알아내어 마케팅에 활용하고 있고, 많은 기업들은 sns상에서 수집된 정보를 이용해 트랜드를 예측하고, 소비자 개개인에 맞는 맞춤 서비스를 제공 할 수도 있다. 뿐만 아니라 관련 없을것 같은 농업분야에서는 그동안 축적된 데이터를 활용해 작물의 생육정도를 파악하고, 거기에 맞는 환경을 조절 할 수있는 정밀농업을 장려하고 있다. 빅데이터하면 빠질 수없는게 인공지능 이야기인데, 데이터를 이용해 앞일을 예측하는 귀납추론방식의 인공지능 학습에, 빅데이터는 없어서는 안될 존재라고 한다. 거의 모든 곳에서 활용되고 있다고 봐도 과언이 아니다. 하지만, 빅데이터의 활용에 꼭 긍정적인 면만 있는건 아니다. 한편에서는 빅데이터를 처리하는 알고리즘내부가 불투명 하다는 것과 무분별한 정보수집에 대해 우려하는 시각도 있다, 대부분은 엄격한 검증 과정을 거치지만 그래도 만에하나 알고리즘에 오류가 있어 공정성이 훼손된다면, 수학 알고리즘의 특성중 하나인 확장성 때문에 원래 의도와 맞지않게 불평등을 야기하고, 편향된 시각을 갖게하는 도구로 활용될 가능성이 있다고 말이다. 나자신도 모르게 수집된 데이터가 어디서 어떤식으로 활용되고 있는지 궁금할 때가 간혹있다. 알고리즘의 작동방식을 모른다면, 어쩌면 눈뜨고 코베이는 상황이 발생할 지도 모르겠다. 이게 앞으로 우리가 소프트웨어 교육에 힘써야하는 여러가지 이유중 하나라고 생각한다. 저자는 데이터가 곧 자산이 되는 시대인만큼, 데이터 분석능력은 모두에게 필요한 능력이 될 것이라 말한다. 내 정보는 소중 하니까 앞에서 보았듯이 현대 사회에 정보는 상당히 중요한 의미를 갖는다. 그렇다면, 자산인 정보를 지킬 수 있는 방법에는 어떤것 들이 있을까? 일단 우리나라에서는 2013년 8월 개인정보보호법을 제정하여, 동의 없이 개인정보를 마음대로 활용할 수 없도록 하고있다. 그밖에도 여러가지 대책들이 있는데, 이 책에서는 정보를 보호하는 소프트웨어적인 방법에 대해 간략히 소개한다. 인터넷은 누구에게나 개방된 공간이기때문에, 중요한 정보를 전송할때, 아무나 알아 볼 수 없도록 암호화키를 이용해 정보를 암호화하여 전송 하고, 다시 복호화키에 의해 암호가 풀리게 되는 방식을 사용한다. 암호화 키와 복호화키가 서로 다를때, 비대칭키라고 하는데 이걸 이용하면 특정 개인을 구별할 수 있다. 비대칭키의 이런 특성을 응용한게, 우리가 익히 알고있는 '공인인증서' 라고한다. 가입된 홈페이지를 방문하면, 가끔 이런 문구가 뜨는걸 본적이 있을 것이다. "주기적으로 비밀번호를 변경해주세요" 혹은 "비밀번호에 특수문자와 숫자 등을 조합해 00자 이상 작성해 주세요" 비밀번호는 해시함수라는걸 이용해 변환된 값만을 서버에 저장해 놓는다. 해시함숫값만 보고는 변환되기전의 문자를 알수 없는 구조라고 한다. 그렇기 때문에 서버 관리자도 사용자의 비밀번호등을 알수 없다. 그러나 사람들이 많이 쓰는 단순한 비밀번호들에 대응하는 해시값들은 이미 해커들에게 노출되어 있기 때문에 보안에 취약하다고 한다. 원리를 알고 나니, 그동안 귀찮기만 했던 여러가지 것들이, 사실은 내 소중한 정보를 지키기 위한 최소한의 안전장치들 이었다는걸 이해하게 되었다. 컴퓨터 언어에는 어떤게 있을까? 사람들이 사용하는 자연어와 기계가 사용하는 0과 1로 된 기계어 사이에는 많은 차이점이 있어, 서로의 언어를 이해하기 힘들다. 그렇기 때문에, 사람이 명령어로 기계를 제어 하기위해서는, 사람의 언어로 작성된 코드를 기계어로 번역하는 과정이 꼭 필요하다. 사람의 언어로 작성된 코드를 '소스코드'라고 부르고, 기계가 이해할 수있는 코드를 '바이너리 코드'라고 한다. 소스코드를 바이너리코드로 바꿔주는 소프트웨어에는 두가지가 있는데 '컴파일러'와 '인터프리터'이다. 컴파일러는 번역속도가 빨라 세탁기, 냉장고등에 들어가는 임베디드 소프트웨어(하드웨어에 내장되어 있는 소프트웨어) 개발에 많이쓰이지만, 플랫폼(응용 소프트웨어가 실행되는환경)이 다르면 같은 코드를 사용할 수 없다는 단점이 있다. 반면 인터프리터는 번역 속도가 느린 대신에, 소스코드를 어떤 환경에서도 사용할 수 있다는 장점이 있다. 인터프리터로 번역해 플랫폼에 독립적이면서 오픈소스인 언어중에는 파이썬, 자바 등이 있다. 파이썬은 배우기 쉽고 많이쓰이는 명실상부한 1위 컴퓨터 언어이다. 최근 자바로 코딩할때 필요한 자바 개발키트(JDK)가 유료화 되면서 소프트웨어 개발자들에게 충격을 주었다고... 컴퓨터 언어에는 C언어 부터시작해 자바, 파이썬, 구글이 만든 GO언어까지 정말 다양한 언어들이 있다. 내 생각에는 한가지 언어 만으로도 충분히 코딩이 가능할 것 같은데, 왜 이렇게 많은 컴퓨터 언어들이 존재하는지, 나로선 이해 할 수 없었다. 이 책에서는 컴퓨터 언어의 탄생배경과 장단점을 이야기 함으로써, 컴퓨터언어가 왜 다양해 질수밖에 없었고, 코딩을 하기위해 이런 다양한 언어를 왜 익혀두는게 좋은지에 대한 이유를 설명 한다. 서평을 마치며
-출처 위키백과- 이 책을 한마디로 표현 하자면, 딱딱하지 않고 말랑말랑 하면서도 시원한 "소프트 아이스크림" 같은 책이라고 말하고 싶다. 용어가 어렵고 생소하게 느껴지는 일반인들의 눈높이에 맞게, 우리가 실생활에서 흔히 접할 수 있는 것들을 예로 들어 속 시원히 설명한다. 그러면서도 중요한 점을 놓치지 않는다. 알고리즘을 설명하기위해 네이버 지도나 대중교통 요금등의 이야기를 가져와 설명하는가 하면, 보안을 설명 하는 부분에서는 도티, 잠뜰 같은 친숙한 이름도 등장한다. 읽다보면, 소프트웨어 관련일을 하는 저자가, 우리에게 전하고자 했던게 무엇인지 어렴풋이 느껴지기도 한다. 저자는 소프트웨어 전문가와 일반인들간의 격차가 점점 벌어지는 현 상황을 안타까운 마음으로 바라본 것 같다. 그리고 이런 대중과 지식을 공유하려는 저자의 '쉽게 풀어쓰기' 전략이 적어도 어느 한 사람에게는 효과가 있었던 것 같다. 복잡하게만 보였던 소프트웨어가 조금 만만해 보이기 시작했기 때문이다. 자! 그렇다면, 소프트웨어는 앞으로 어떻게 흘러가게 될지 궁금하지 않은가? 이 책을 통해서 그 흐름을 느껴 보시길 바란다. |
|
1. 너무 멀지 않은 곳에 있는 코딩 ![]() 시대를 맞이하게 되었습니다. 유튜브에서 3D프린터로 필요한 부품을 만들고 모형들을 만드는 것도 그리 신기하지 않은 시대이기에 코딩 역시 거미줄처럼 엮인 네트웍들처럼 전문 프로그래머들만의 영역이 아닌 우리의 실생활과 밀접하게 연결되게 되었습니다. '코딩책과 함께 보는 소프웨어 개념 사전'으로 정의한 코딩이란 우리가 외국에 가거나 현지 사람과 대화하기 위해 어학을 배우듯 컴퓨터 프로그램들과의 대화와 사용을 위한 약속들의 총체입니다. 2. 소프트웨어 개념 사전을 선택한 이유
영단어 학습책 중에서 MD MD VOCABULARY 33000을 가장 좋아했습니다. 처음 엠디 보카를 접했을 때 어떻게 이런 방법으로 영단어 학습의 길을 제시할 수 있었을까? 하면서 속으로 감탄했습니다. 하지만 나중에 알고보니 이러한 학습법은 이미 많은 영단어 학습서에서 채용한 ETYMOLOGY라는 어원학습법이었고 오래전부터 영어 단어의 장기기억을 위한 학습방법 중 하나였습니다. ETYMOLOGY 학습법은 이를 처음 접한 저의 생각과는 달랐지만 엠디보카는 아직도 저에게 가장 좋은 영단어 책입니다. etymology 어원학습법을 처음 접했을 때의 신선한 충격도 있지만 저자인 문덕 선생님의 강의를 보고 들으면서 쌓은 책의 친근함과 저자의 학습목표와 방향을 제가 이해했기 때문일 것입니다. '코딩책과 함께 보는 소프웨어 개념 사전' 역시 엠디보카와 마찬가지로 저에게 신선한 충격과 동시에 그동안 it서적들이 주는 딱딱함과 막연히 어렵게 느껴지는 용어들에 대한 선입견을 깨뜨려 주는 책이었습니다. 그동안 저의 컴퓨팅이라는 것은 단순히 마우스와 키보드를 사용해서 직관적으로 화면에 나오는 명령을 수동적으로 따르는 것이었지만 코딩 개념사전은 컴퓨터와의 대화라는 새로운 시각을 보여주고 있었습니다. 또한 쉽지 않았던 소프트웨어 용어들을 친숙하게 해주어 컴퓨터와의 대화인 코딩을 시도할 수 있는 용기를 불어 넣어주었습니다. 시중에 코딩 개념사전과 비슷한 유형의 책들도 있습니다. 하지만 그러한 서적들이 독자들이 배우기 쉽다며 3일 혹은 일주일의 초단기 기간을 제시하더라도 실제 책들을 접하면 이게 대체 어느 나라 말인지 알 수 없는 경우가 많았습니다. 그 이유는 저자들이 위에서 아래를 보는 수직적인 교육을 시도했기 때문일 것입니다.하지만 코딩 개념사전은 독자들과 수평적으로 눈맞춤하며 1대 1 가정교사가 아이들에게 설명하듯 너무나 친절한 책입니다. 예를 들어 입출력장치를 설명할 때 저자는 CPU가 운영체제와 응용 프로그램을 동시에 관리하고 마우스등 입출력 장치의 interrupt(방해)까지 받으면서도 내색을 하지 않는다면서 박수를 보내고 싶다고 표현하거나 과거 전자보드가 없어 빵을 자르는 나무판을 사용한 추억이 남아 있어 현재도 브레드보드(bread-board)라고 명명되었다는 어원등의 설명은 저자가 얼마나 독자들의 눈높이에서 책을 쓰려고 노력했는지 또 이성의 영역으로 생각되는 분야에 감성을 불어 넣어 독자들에게 용기를 주려 했는지 자연스레 느끼게 만듭니다. 소프트웨어 개념사전이 더 높이 평가받아야 하는 것은 코딩이 결코 전문 프로그래머들만의 영역이 아니라 이 책을 읽는 독자들도 직접 코딩에 도전할 수 있다는 용기를 불어 넣어 주기 때문입니다. 3. 코딩에 직접 도전하다.
코딩 개념 사전 워크북을 가지고 계산기 프로그램에 도전했습니다.
(1) 파이썬에 들어가서 프로그램을 다운로드 받습니다.64비트 32비트가 특별히 구분되어 있지는 않습니다.
(2) 프로그램을 실행합니다.
(3) 파이썬 셸을 실행합니다.
(4) 파이썬 코드를 작성합니다. 아래 코드는 제가 Elif를 eif로 작성하여 구문오류가 발생한 코드입니다. 저자가 친절하게 코드 하나 하나를 설명하고 있어서 이런 오류과정들을 반복해서 검토하다 보면 저자의 설명들이 신기하게 이해가 갑니다.
(5) GUI 프로그램 만들기 입니다. 여기서도 오류가 발생해서 곱하기와 나누기 버튼이 나오지 않았지만 오류 과정들을 통해서 코딩에 대한 자신감이 더 많이 생겼습니다.
드디어 완성품입니다.
|
|
1. 너무 멀지 않은 곳에 있는 코딩 ![]() 자동차 면허증 , 컴퓨터 사무자격증, 영어가 필수인 시대를 지나 이제는 인공지능의 시대를 맞이하게 되었습니다. 유튜브에서 3D프린터로 필요한 부품을 만들고 모형들을 만드는 것도 그리 신기하지 않은 시대이기에 코딩 역시 거미줄처럼 엮인 네트웍들처럼 전문 프로그래머들만의 영역이 아닌 우리의 실생활과 밀접하게 연결되게 되었습니다. '코딩책과 함께 보는 소프웨어 개념 사전'으로 정의한 코딩이란 우리가 외국에 가거나 현지 사람과 대화하기 위해 어학을 배우듯 컴퓨터 프로그램들과의 대화와 사용을 위한 약속들의 총체입니다. 2. 소프트웨어 개념 사전을 선택한 이유
영단어 학습책 중에서 MD MD VOCABULARY 33000을 가장 좋아했습니다. 처음 엠디 보카를 접했을 때 어떻게 이런 방법으로 영단어 학습의 길을 제시할 수 있었을까? 하면서 속으로 감탄했습니다. 하지만 나중에 알고보니 이러한 학습법은 이미 많은 영단어 학습서에서 채용한 ETYMOLOGY라는 어원학습법이었고 오래전부터 영어 단어의 장기기억을 위한 학습방법 중 하나였습니다. ETYMOLOGY 학습법은 이를 처음 접한 저의 생각과는 달랐지만 엠디보카는 아직도 저에게 가장 좋은 영단어 책입니다. etymology 어원학습법을 처음 접했을 때의 신선한 충격도 있지만 저자인 문덕 선생님의 강의를 보고 들으면서 쌓은 책의 친근함과 저자의 학습목표와 방향을 제가 이해했기 때문일 것입니다. '코딩책과 함께 보는 소프웨어 개념 사전' 역시 엠디보카와 마찬가지로 저에게 신선한 충격과 동시에 그동안 it서적들이 주는 딱딱함과 막연히 어렵게 느껴지는 용어들에 대한 선입견을 깨뜨려 주는 책이었습니다. 그동안 저의 컴퓨팅이라는 것은 단순히 마우스와 키보드를 사용해서 직관적으로 화면에 나오는 명령을 수동적으로 따르는 것이었지만 코딩 개념사전은 컴퓨터와의 대화라는 새로운 시각을 보여주고 있었습니다. 또한 쉽지 않았던 소프트웨어 용어들을 친숙하게 해주어 컴퓨터와의 대화인 코딩을 시도할 수 있는 용기를 불어 넣어주었습니다. 시중에 코딩 개념사전과 비슷한 유형의 책들도 있습니다. 하지만 그러한 서적들이 독자들이 배우기 쉽다며 3일 혹은 일주일의 초단기 기간을 제시하더라도 실제 책들을 접하면 이게 대체 어느 나라 말인지 알 수 없는 경우가 많았습니다. 그 이유는 저자들이 위에서 아래를 보는 수직적인 교육을 시도했기 때문일 것입니다.하지만 코딩 개념사전은 독자들과 수평적으로 눈맞춤하며 1대 1 가정교사가 아이들에게 설명하듯 너무나 친절한 책입니다. 예를 들어 입출력장치를 설명할 때 저자는 CPU가 운영체제와 응용 프로그램을 동시에 관리하고 마우스등 입출력 장치의 interrupt(방해)까지 받으면서도 내색을 하지 않는다면서 박수를 보내고 싶다고 표현하거나 과거 전자보드가 없어 빵을 자르는 나무판을 사용한 추억이 남아 있어 현재도 브레드보드(bread-board)라고 명명되었다는 어원등의 설명은 저자가 얼마나 독자들의 눈높이에서 책을 쓰려고 노력했는지 또 이성의 영역으로 생각되는 분야에 감성을 불어 넣어 독자들에게 용기를 주려 했는지 자연스레 느끼게 만듭니다. 소프트웨어 개념사전이 더 높이 평가받아야 하는 것은 코딩이 결코 전문 프로그래머들만의 영역이 아니라 이 책을 읽는 독자들도 직접 코딩에 도전할 수 있다는 용기를 불어 넣어 주기 때문입니다. 3. 코딩에 직접 도전하다.
코딩 개념 사전 워크북을 가지고 계산기 프로그램에 도전했습니다.
(1) 파이썬에 들어가서 프로그램을 다운로드 받습니다.64비트 32비트가 특별히 구분되어 있지는 않습니다.
(2) 프로그램을 실행합니다.
(3) 파이썬 셸을 실행합니다.
(4) 파이썬 코드를 작성합니다. 아래 코드는 제가 Elif를 eif로 작성하여 구문오류가 발생한 코드입니다. 저자가 친절하게 코드 하나 하나를 설명하고 있어서 이런 오류과정들을 반복해서 검토하다 보면 저자의 설명들이 신기하게 이해가 갑니다.
(5) GUI 프로그램 만들기 입니다. 여기서도 오류가 발생해서 곱하기와 나누기 버튼이 나오지 않았지만 오류 과정들을 통해서 코딩에 대한 자신감이 더 많이 생겼습니다.
드디어 완성품입니다.
|
|
나는 또래보다 컴퓨터를 일찍 배운 편이다. 90년대 초. 공대 출신인 아버지가 어느 날 컴퓨터 한 대를 사오셨고, 그 때 겨우 유치원생이었던 동생과 초등학생이었던 나는 아빠가 출근하신 틈을 타서 컴퓨터 전원을 켜고 이것저것 눌러보곤 했다. 우리가 컴퓨터에 관심을 보이자 아버지는 <컴퓨터 일주일만 하면 전유성만큼 한다>를 비롯한 컴퓨터 분야의 초기 베스트셀러 책 몇 권을 사오셨고, 우리는 그 책들을 읽으며 컴퓨터 사용법을 익히고, 한컴 타자로 키보드 치는 속도를 높이고, 윈도우즈 게임 목록에서 지뢰찾기와 카드 게임을 찾아서 해보고, CD를 사서 게임을 설치해보고, 나중에는 PC통신에 가입해 하이텔, 천리안, 나우누리 등에서 좋아하는 아이돌의 팬클럽을 찾아내 '하라는 공부는 안 하고' 시간을 죽이곤 했다. 그 시절에는 별 생각 없이 했던 일들인데 나중에 컴퓨터를 배우려고 학원에 다니거나 강의를 수강하는 친구들을 보면서 나는 참 운이 좋았다는 생각이 들었다. 일부러 배우려고 했으면 어렵고 힘들었을지도 모르는데, 어릴 때 호기심으로 컴퓨터를 배워놓아서(그것도 독학으로) 남들이 컴퓨터 앞에서 머리를 싸맬 때 나는 비교적 수월하게 컴퓨터를 다루고, 싸이월드도 생기기 전에 직접 홈페이지도 만들어보고 웹 친구도 사귀어보는 경험을 했다. 그래서 지금까지도 컴퓨터에 관심이 적지 않고, 신기술이 나왔다고 하면 잘 이해하지는 못해도 호기심을 가지고 공부해보려고 하는 편이다. 결국 새로운 기술에 대한 공부가 더 나은 미래를 앞당겨 준다고 믿기 때문이다. 김현정의 <코딩책과 함께 보는 소프트웨어 개념사전>을 읽으면서 그 시절 생각이 많이 났다. 이 책은 코딩을 비롯한 소프트웨어 교육에 필요한 기초적인 지식을 사전 형식으로 소개하는 책이다. 소프트웨어 교육에 관심이 있어서 이 책을 읽기 전에도 같은 주제의 책을 여러 권 읽어 보았는데 이 책만큼 기초부터 탄탄하게 체계적으로 설명하는 책은 읽지 못했다. 보통 코딩에 관해 설명하는 책이라고 하면 자바 언어, C언어, 파이썬 언어 등 대표적인 코딩 언어 몇몇에 관한 소개와 각각의 특징과 차이를 비교하는 정도에서 그치는 것이 많다. 반면 이 책은 운영체제가 무엇인지, 윈도우와 리눅스의 차이가 무엇인지, 전세계의 웹을 연결하는 소프트웨어의 종류와 차이, 빅데이터를 위한 소프트웨어의 종류의 차이, 보안과 보호를 위한 소프트웨어의 종류와 차이 등을 구체적으로 분류하여 소개한다. 이는 인간이 언어로 소통하는 방식을 이해하기 위해서는 인간의 뇌가 작동하는 방식을 이해해야 하는 것처럼, 인간과 컴퓨터, 컴퓨터와 컴퓨터가 코딩 언어로 소통하는 방식을 이해하고 더 나은 코딩 언어를 개발하기 위해서는 컴퓨터의 뇌에 해당하는 운영체제와 기본적인 소프트웨어 또는 애플리케이션 등의 작동 방식부터 이해해야 하기 때문이다. 매일 사용하는 컴퓨터이지만 각 잡고 제대로 공부한 지는 오래되어서 그런지 이 책을 통해 새롭게 배운 내용이 많다. 빅데이터가 뭔지는 알아도 실생활과 어떻게 관련이 있는지는 잘 몰랐는데, 블로그에 글을 올리거나 SNS를 할 때 습관처럼 붙이는 해시태그(#)가 빅데이터에서 비롯된 것인 줄은 몰랐다. 단어 앞에 해시태그를 붙이면 해시태그가 붙은 모든 글을 한꺼번에 볼 수 있게 되는데, 이것이 바로 데이터를 위한 데이터, 즉 '메타데이터'이고, 이는 파이썬 같은 코딩 언어에서도 사용되는 기술이다. IT 분야는 협업이 중요하고 필수라는 말을 많이 들었는데 코딩 언어가 그 산물이라는 것도 이 책을 통해 처음 알았다. 1991년 네덜란드의 개발자 귀로 반 로섬은 파이썬 언어를 개발해 누구나 쉽게 사용할 수 있도록 무료로 배포했다. 웹코딩 언어인 APM 역시 오픈소스라서 무료로 다운로드받아 사용할 수 있다. 저작권을 보호하는 것도 중요하지만, 많은 사람이 각자의 지식과 아이디어를 서로 공유하고 나눔으로써 더 많은 발전을 이루는 편이 장기적으로 더 큰 이익이 될 것이라고 판단했기 때문이다. 요즘 초등학교에서 스크래치, 엔트리 등을 이용해 코딩 교육을 실시하고 있다는 말은 들었지만, 중고등학교에서도 파이썬과 같은 텍스트 코딩 언어를 이용해 알고리즘이나 프로그램을 개발하는 방법을 배우고 있다는 건 이 책을 통해 처음 알았다. 내가 학교 다닐 때도 컴퓨터 시간이 있기는 했지만 배운 거라고는 이메일 만들기, 한컴 타자 연습하기, 기본적인 PPT 만들기 정도가 전부인데, 요즘 학생들은 파이썬을 배운다니 놀랍고 부럽다. 코딩 지식을 탑재한 학생들이 대학이나 직장에 들어갔을 때 코딩 지식이 없는 대학 교수나 직장 상사들이 어떻게 상대할지도 걱정이다. 문과, 이과 가릴 것 없이 코딩 언어를 배워야 한다는 생각도 들었다. 빅데이터 분석에 관한 내용을 보면, 데이터 분석은 소비자가 필요로 하는 것이 무엇인지 파악하는 데 훌륭한 수단이 될 수 있음을 알 수 있다. 서점 직원이라면 어느 계절에 어떤 분야의 책이 많이 팔렸는지 데이터 분석을 해서 판매 전략을 세우거나 재고 관리를 할 수 있다. 교사라면 학생들의 성적 추이를 분석해 학습의 진도나 난이도를 조절할 수 있다. 공무원이라면 민원인들이 주로 무엇을 요구하는지를 데이터로 만들어 우선순위를 정해 정책으로 만들고 해결해나갈 수 있다. 이 밖에도 코딩과 소프트웨어, 제4차 산업혁명이 나와는 무관하다고 생각하는 사람에게 새로운 지식과 영감을 주는 책이다. |
|
블록체인,인공지능,빅데이터,사물인터넷 기술, 제4차 산업혁명 시대에 필요한 기본기를 다진다! 코딩책과 함께 보는 소프트웨어 개념 사전
코딩이란? 컴퓨터 프로그래밍의 다른 말. C언어, 자바, 파이선 등 컴퓨터 언어로 프로그램을 만드는 것. 코딩 교육을 통해 논리력 창의력 문제해결력을 키울 수 있다. 유치원생과 초등학생들은 퍼즐이나 블록맞추기 등 게임방식을 이용해 컴퓨터 프로그래밍 원리를 배운다. 코딩이 중요한 것은 인공지능, 사물인터넷, 지능형 로봇, 빅 데이터 분석 및 활용 등 4차 산업혁명시대를 대변하는 모든 것이 ICT(정보통신기술)을 바탕으로 한 소프트웨어를 통해 구현되기 때문이다. 이러한 중요성 때문에 영국, 일본, 이스라엘등 해외 각국은 경쟁적으로 코딩을 정규 교육과정에 편입시켜 교육을 하고 있다. 영국 정부는 2014 가을학기부터 초·중·고교에서 코딩을 필수과목으로 가르치도록 했다. 우리나라에서는 2018년부터 전국 초중고교에서 소프트웨어교육(코딩 교육)을 의무화하고 있다.
초등학교 5학년부터 코딩을 배우기 시작한다고 한다. 물론 초등학교 5학년이 되기 전부터 방과후 수업으로 컴퓨터를 배우기 시작하기 때문에 좀더 빨리 코딩을 접하게 되지 않을까 싶다.
요즘은 코딩하는 방법을 알려주는 책들이 많기 때문에 집에서도 충분히 할 수 있고, 나 같은 경우도 코딩을 배워서 민정이에게 직접 가르쳐 줄려고 책도 마련했다...ㅎ
코딩을 가르쳐 주는 책은 많은데 코딩에서 나오는 단어에 대한 설명을 해주는 책은 그리 많아 보이지가 않았는데 코딩책과 함께 보는 소프트웨어 개념사전은 알기 쉽게 설명해 주고 알고 싶은 단어만 찾아서 볼 수 있도록 구분 되어 있어서(찾아보기 페이지가 있어요) 책 두께를(P.381) 두려워 할 필요가 전혀 없을꺼 같다.^^
제1장 코딩 언어로 작성된 응용 소프트웨어 아두이노/피지컬 컴퓨팅/임베디드 소프트웨어와 펌웨어/응용 소프트웨어/앱과 어플/ 프로그램/유틸리티/인터넷 익스플로러/인공지능과 머신러닝/알고리즘/오픈소스와 상용소프트웨어/워드프로세서/오피스 프로그램/클라우드 오피스/아파치 오픈오피/ PDF 문서/압축프로그램/미들웨어/콘솔프로그램
제2장 컴퓨터를 통솔하는 소프트웨어 시스템 소프트웨어/운영체제의 세계/윈도우/리눅수/안드로이와 iOS/장치드라이버/ ROM과 RAM/바이오스/부팅/운영체제의 존재감/하드디스크 관리/메모리 관리/프로 세스 관리/입출력 관리/커널과 셸/시스템 호출/GUI와 CLI/가상머신/클라우드 컴퓨팅
제3장 전 세계 웹을 연결하는 소프트웨어 윌드와이드웹/도메인 주소와 URL/요청과 응답/서버와 클라이언트/웹브라우저/ HTML/마크업 랭귀지/정적 웹페이지/자바스크립트/CSS/HTML5/HTTP/웹서버/ 동적 웹페이지/WAS/데이터베이스 서버/프론트엔드와 백엔드/쿠키/사물인터넷
제4장 빅데이터를 위한 소프트웨어 데이터/데이터베이스 관리 시스템,DBMS/오라클과 MySQL/메타데이터/색인/ 해시태그/SQL/정형 데이터와 비정형 데이터/빅데이터분석/R언어/공공 데이터/ 개인정보/데이터 마이닝/XML과JSON
제5장 보안과 보호를 위한 소프트웨어 보안과 보호/암호화와 복호화/암호화키와 복호화키/암호 알고리즘/대칭키 알고리즘/ 비대칭키 알고리즘/대칭키와 비대칭키 알고리즘의 결함/공인인증서와 전자서명/ 안전한 비밀번호/단방향 해시함수/SHA-512/솔트/블록체인과 암호와 기술/ 사이버 공격/화이트해커/시큐어 코딩/백신 소프트웨어/랜섬웨어/방화벽
제6장 코딩을 위한 소프트웨어 코딩 언어/소스코드와 바이너리 코드/컴파일러와 인터프리터/자바 언어/C 언어/ 파이썬 언어/C++ 언어/C# 언어/Go 언어/어셈블리어/웹코딩 언어/객체 지향 프로그래밍/플랫폼/플랫폼 독립적인 언어/개발 도구와 통합개발환경/ JDK,자바개발키트/이클립스/비주얼 스튜디오와 닷넷 프레임위크/웹페이지 저작도구/ 깃 허브/프레임위크/MVC,모델-뷰-컨트롤러/표준 라이브러리/JAR/플러그인/ 레거시 시스템/함수/모듈과 인터페이스/API/버전과 배포판/소프트웨어 라이선스/ 카피라이트와 카피레프트
본문에 나와있는 내용중의 일부를 보여 드리면 예문을 보여주면서 자세히 설명을 해 주고 있기 때문에 쉽게 이해할수 있어요
이 책을 읽으면서 느낀 점은 컴퓨터에 관한 단어가 너무나 많고 단어도 너무 어렵다는 것이에요..ㅋㅋ 이 많은 단와와 뜻을 다 외울 필요는 없지만, 어느정도 뜻과 어디서 사용되는 단어인지 알고 컴퓨터를 시작한다면 많은 도움이 되지 않을까 싶어요
굳이 코딩뿐 아니라 컴류터를 하고 있다면 한번쯤 읽어 보기를 권장합니다. 소프트웨어를 시작하거나 사용하고 있다면 내가 사용하고 있는 단어가 어떤 뜻으로사용되고 있는지 어떻게 응용되어 표현되고 있는지 알게 된다면 아마도 조금은 재미있게 소트프웨어를 사용하게 되지 않을까 싶어요..^^
"소프트웨어의 기본 개념과 원리를 쉽고 재미있게 설명하며 IT의 넓은 개념까지 탄탄하게 잡아주니초등학생은 물론 코딩 공부를 시작하는 중고등학생들에게 꼭 필요한 책이다.! 코딩에 관심 있는 성인들에게도 추천할 만한 책이라고 생각한다. 프로그래밍 그 이상의 것을 얻어 갈 수 있는 그야말로 알짜배기 책이다!" - 이수현, 씨큐브코딩 서초코어센터 강사
"지금까지 이런 책은 없었다!빅데이터, 블록체인, 피지컬 컴퓨팅, 코딩 언어 등 소프트웨어에 관한 지식을 폭 넓고 이해하기 쉽게 풀어내어 누구라도 재미있게 읽을수 있다. 어려운 컴퓨터 책을 보기 전에 기초 체력을 키우고 싶은 친구들에게 추천한다" - 노재율, 한국디지털미디어고등학교 해킹방어과
지금부터 열심히 컴퓨터 기초체력을 키우기 위해 열심히 읽고 있어요.... 왜냐하면 곧 컴퓨터를 시작하는 초등학생 딸에게 컴퓨터 박사라는 소리를 듣기 위해서~~
|