대다수의 독자들이 프로그래밍이나 여타 컴퓨터 분야에 종사하겠지만, 그래도 참고바랍니다.
다른 과목들과 마찬가지로 만 2세 경에 시작하는 것이 바람직합니다. 유아용 컴퓨터 학습 앱(게임)이 많이 나와있고, 품질도 썩 훌륭합니다. 영어, 산수 공부와 마찬가지로 아이패드 미니 수준의 태블릿이 좋습니다.
컴퓨터 과목과 여타 과목 간의 비율은 유치원 단계에서 대략 2:8, 초등 과정에서 3:7, 중등 과정에서 5:5, 대학 과정에서 7:3, 대학원 과정에서 10:0으로 상정합니다.
유치원 단계에서 EToy 등의 프로그래밍 교육용 앱을 이용하면, 프로그래밍 언어와 컴퓨터의 구조를 자연스레 익힐 수 있습니다. 유치원 과정에서는 이런 저런 다양한 앱들을 가능한 많이 접할 기회를 제공하는 것이 최선입니다. 아쉽게도 영어, 산수 등의 과목과는 달리 만 2~15세 사이의 어린이와 청소년을 위한 체계적인 컴퓨터 학습 커리큘럼이 없으므로, 꿩 대신 닭으로 하나의 학습 타깃을 정한다면, 당근 리눅스입니다.
늦어도 초등과정에 접어들 나이면 태블릿과 더불어 반드시 리눅스 머신을 함께 사용해야 합니다. 아마존이나 Google Cloud Platform의 Virtual Machine을 이용하면, 집이나 학원에 별도의 PC를 마련하여 리눅스를 설치할 필요가 없고, Debian, Ubuntu 등 다양한 버전의 리눅스를 쉽게 설치하고 지울 수 있으며, 저렴합니다. 5-5-4-3-3 학제를 기준으로, 중등과정을 마칠 무렵에는 리누스 토발즈가 작성한 Linux Kernel을 재현할 수 있는 수준에 이르는 것이 바람직합니다. 다행스러운 점은 Udemy, Coursera, edX 등 대표적인 MOOC(Massive Open Online Curriculum)들이 이미 서비스 중이거나, 준비하고 있는 컴퓨팅 관련 코스 대부분이 리눅스 기반의 교수 시스템(Tutoring System)을 통해 출석/결석과 같은 학사 관리와 강의, 시험 등을 진행하므로, 학습자들이 원하든 않든 리눅스의 구조와 기능을 자연스레 익힐 수 있습니다. 종래의 프로그래머들도 마찬가지지만, AI 분야에서의 리눅스는 더욱 특별한데, 그 이유는 후미에 말씀드리겠습니다.
초등과정 학습자들은 리눅스 쉘 프로그래밍, Git, 파이썬, C, 간단한 웹 프로그래밍 등을 익히고, 원리보다는 익숙해지는데 초점을 둬야 합니다. 또한, 유치원 고학년부터 간단한 AI 프레임워크를 경험할 수 있어야 하는데, 이 부분은 ‘로보틱스 학습’에서 자세히 언급합니다.
아래 표는 연령대 및 학제에 기초한 추천 교재(앱, 강좌)입니다. 향후, 컴퓨터 과학의 표준적인 커리큘럼을 구성하는데 참고가 될 수 있는 자료들을 취합하였으며, 일부 코스는 연령대에 적합하지 않을 수 있습니다. 가령, 초등 과정에 Berkeley 등의 대학 교양강좌가 포함되어 있습니다. 2017년 현재는 AI 프로그래머를 지망하는 초등학생을 위한 컴퓨터 과학 과정이 없으므로, 학부모 또는 지도자가 적절한 부분만 발췌하거나, 가능한 쉽게 풀어서 제공하는 것이 바람직합니다.
Age | Computer Science | ||
유치원 (2~5) | C1 | ||
C2 | |||
C3 | |||
C4 | |||
C5 | |||
C6 | |||
초등 (7~11) | C7 | Introduction to Linux | |
C8 | Python | ||
C9 | Computer Science | ||
C10 | Computer Science 101 | CS 101 Stanford University | |
C11 | The Beauty and Joy of Computing | CS 10 UC Berkeley | |
C12 | Introduction to Computer Science | CS 50 Harvard University | |
C13 | Structure & Interpretation of Computer Programs [Racket] | CS 61A UC Berkeley | |
C14 | Fundamental Programming Concepts | CS 1109 Cornell University | |
C15 | Introduction to Computing Using Python | CS 1110 Cornell University | |
중등 (12~15) | C16 | Julia Programming | Learning Julia |
C17 | Operating Systems and Systems Programming | CS 162 UC Berkeley | |
C18 | Database Systems | 15-721 Carnegie-Mellon University | |
C19 | Hack Your Language! | CS164: UC Berkeley | |
C20 | Intro to Programming Language | ||
C21 | Introduction to Algorithms | ||
C22 | Computability, Complexity, Algorithms: Algorithms | ||
C23 | Computability, Complexity, and Algorithms: Computability | ||
C24 | Computer Networking: | ||
C25 | Programming Foundations with Python | ||
C26 | How to Use Git and GitHub | ||
C27 | Computer Vision | ||
C28 | Intro to Decentralized Apps | Intro to Decentralized Apps | |
대학 (16~18) | C29 | Programming Languages | CS 173 Brown University, |
C30 | Data Structures | CS 61B UC Berkeley | |
C31 | Graduate Level Algorithm Design and Analysis | ECS 222A UC Davis | |
C32 | Advanced Data Structures | 6.851 MIT | |
C33 | Advanced Algorithms | 6.854J/18.415J MIT | |
C34 | Great Ideas in Theoretical Computer Science | 6.045 MIT | |
C35 | Cognitive Science | C131 Berkeley | |
C36 | Operating Systems and Systems Programming | CS 162, UC Berkeley | |
C37 | Analysis of Algorithms | CSE 373 Stony Brook University | |
C38 | Algorithm Design and Analysis | ECS 122A UC Davis | |
C39 | Structure and Interpretation of Computer Programs | 6.001 MIT | |
C40 | Operating Systems (Undergrad) | CSCI-UA.0202: NGU | |
C41 | Social Implications of Computing | 195 berkeley | |
C42 | Engineering Software as a Service | 169 Berkeley | |
C43 | Machine Structures | 61C - B | |
C44 | Data Structures | CS 61B: - Shewchuk - UC Berkeley | |
C45 | History of Information | Info C103. UC Berkeley | |
C46 | Introduction to Embedded Systems | EECS 149: (Fall 2014, UC Berkeley) | |
C47 | Programming Abstractions | 10-701 Carnegie-Mellon University | |
C48 | Introduction to Computer Systems (ICS) | 15-213, Carnegie-Mellon University | |
C49 | Introduction to Computer Architecture | 18-447 Carnegie-Mellon University | |
C50 | Programming Methodology | CS 106A Stanford University | |
C51 | Mathematics for Computer Science | MIT | |
C52 | Efficient Algorithms and Intractable Problems | CS 170: Berkeley | |
C53 | Programming Paradigms | CS 107 Stanford University | |
C54 | Programming Practice Using Scala | CS 109 KAIST |
유치원과 초등 과정을 합친 10년 동안 컴퓨터에 익숙해 지고, 수학의 토대가 어느 정도 갖춰지면, 중등 과정(만 12세)부터 수준높은 과목을 시작할 수 있습니다. 가령, Julia 언어는 수학 및 컴퓨터 과학의 배경 지식이 탄탄하지 않으면 제대로 익힐 수 없습니다. 또한, 중등과정 4년은 Scikit-learn, TensorFlow, Theano 등의 다양한 AI 프레임워크를 본격적으로 익히고, 크고 작은 뉴럴 네트워크를 직접 작성해 보고, 국내외 다양한 AI 콘테스트에 참여할 시기이기도 합니다.
중등과정을 마칠 무렵(만 16세)에 리눅스 커널을 다룰 수 있는 수준이 되는 인구의 비율이 대략 0.2~0.5% 정도될 것으로 추정하는데, 대략 200~300명 중 1명이며, 연령별 인구를 400,000명으로 가정하면, 각 연령 별로 1,000명 선입니다. 이 학습자 그룹은 대학에서 인공지능을 전공하도록 유도하는 것이 바람직합니다. 대학 진학 인구를 10%로 보면, 40,000명 중에서 1,000명은 인공지능을 전공하고, 나머지 39,000명은 여타 전공을 선택하는 상황을 상정하여, 표에 나열된 과목들은 전공과 무관하게 대학에 진학하는 모든 사람(연령별 인구의 10%)이 이수해야할 과목들로 정리하였습니다. 학부 과정부터 AI를 전공하는 경우는 표에서 나열된 것보다 많은 것을 배워야 할 텐데, ‘로보틱스 학습'편에서 재차 기술합니다.
마지막으로, AI에서 리눅스가 더욱 중요한 이유는 AI 시스템이 도시 운영체계(City Operating System)로 진화하기 있습니다. 기존 OS가 CPU, 메모리, 사운드 카드, 비디오 카드, 및 각종 버스와 포트를 제어하듯, AI 기반의 City OS는 도시 내부의 모든 기관, 단체, 장치, 시설, 차량, 주거 공간, 상업과 생산 활동 등을 제어하게 될 것이고, OS의 기본적인 동작 메커니즘을 이해하려면 리눅스가 최선입니다. 리눅스를 완전히 이해해야 AI를 활용한 City Operating System을 작성할 수 있습니다. City Operating System은 해당 편에서 보다 자세히 기술합니다.
출처 | https://docs.google.com/document/d/1kHUsdsAZlyIZzle1MIvFW2wIPbf_COTcYauGF6wQhY0/pub |