HY's Farm

[좋은 글] Don’t learn to code. Learn to think


원 저자 : CookAtRice

주변 친구들에게 추천해줄만한 글

Don’t learn to code. Learn to think

코딩보다는 생각하는법을 배워라.

몇 주 전. 존경하는 분으로부터 좋은 아티클이 있으니 한 번 읽어보라고 권유 받은 글이 있었습니다. 회사 일도 바쁘고 생활하기도 바빠서 여유가 안난다는 핑계로 근 3주를 그냥 보내고 말았습니다. 무엇인가를 시작하기전에 누구나 하는 시간없다는 핑계라는 건 다들 잘 아시죠? ☺ 잠자는 시간 조금 줄이고, 다른 낭비하는시간을 줄이니 충분히 가능하다는것을 새삼 느껴보면서, 몇 일동안 짬짬히 음미 하면서 읽어본 내용 다른분들과 나누고자 합니다.

그냥 나 스스로가 읽었을때는 그런것이겠구나, 저런 의미겠구나 대충 넘어갔던 단락과 문맥들이 많았는데, 막상 한글로 옮기는 작업을 하면서, 누군가가 옮긴글을 읽고 제대로 이해 할 수 있을까? 하는 걱정아닌 걱정이 들기도 했습니다. 하지만, 첫 술에 배 부를 제 걱정은 잠시 접어두고 이야기를 옮겨 봅니다. ☺

때로는 원문을 읽을때가 더 이해가 잘 되는 부분이 있으니 참고 하시기 바랍니다.☺

코딩을 배우기보단, 생각하는법을 배워라.

(Don’t learn to code. Learn to think)

img

모든 사람들이 코딩을 배우려고 하는것 같습니다. Code.org에서 빌게이츠, 마크 주커버그, 크리스 보쉬 같은 유명인사들이 누구나가 코딩을 할 수 있다고 말하고, 나라 안 방방 곡곡에 CoderDojo같은 코딩 클럽들이 생겨나기 시작하고, 영국에서는 모든 초등학교를 위한 공식 교육과정의 일부로 코딩을 만들었습니다. 나는 이것들이 조금은 잘못된 방향이라고 생각합니다. 오해는 하지 마세요. 난 모든 사람들이 코딩을 어느정도 알고 있는 세상이 더 낫다고 생각하는 사람이니까요. 하지만 코딩 자체가 목표여서는 안됩니다. 컴퓨터와 프로그래밍은 단지 도구일 뿐이고, 그것들은 목표을 위한 수단입니다. 진짜 목표는 사람들에게 생각하는 새로운 방법을 가르치는 것입니다. 즉, 우리는 단순한 코딩이 아닌 컴퓨터 과학을 가르쳐야 합니다. 이 블로그에서는 이 둘 사이의 차이와 이를 성공시키기위해 무엇때문에 생각하는법을 배우는것에 주력해야 하는지 설명하겠습니다. 동영상 설명을 원한다면, 사이먼 페이튼 존스의 훌륭한 TED이야기 Teaching Creative Computer Science 영상을 추천합니다. 이 글 또한 여기서 영감을 받았습니다.

https://www.youtube.com/watch?feature=player_embedded&v=Ia55clAtdMs

영상보단 글로 읽는것이 좋나요? 좋아요. 그럼이제 도대체 왜 코딩보다는 컴퓨터 과학에 관심을 가져야 하는지 논의해 봅시다.

대답을 듣기 전 잠깐 쉬어요.

현실세계에 온 것을 환영합니다.

(Welcome to the real world)

img

여러분은 아마도 이 글을 크롬이나 파이어폭스, 윈도우나 맥OS, 노트북이나 데스크탑에서 읽고 있을 것입니다. 또한 추측하기로 이메일을 읽거나 친구의 페이스북을 보거나, 유투브에서 영상을 보면서 오늘 하루의 일부를 보냈을 것입니다. 요즘은 대부분의 당신의 삶이 컴퓨터 속에 있습니다. 의료기록들은 데이터베이스에 있고, 이력서는 LinkedIn에 있고, 구글과 페이스북을 통해 상품을 마케팅하고, 아마존을 통해 그것들을 구입하며, 온라인으로 세금 서류철을 하고, 웹사이트에서 은행 계좌를 관리하고, 어쩌면 디지털 화폐(digital currencies)도 한 번 해 보았을 것입니다. 이제, 컴퓨터를 얘기해 볼까요. 주머니나 지갑, 책상근처에서 스마트폰을 가질 수 있죠. 폰은 GPS, 카메라, 터치 스크린 그리고 많은 앱들을 가지고 있구요. 만약 LCD TV가 설치되어 있는 거실에 있다면, 디지털 케이블을 통해 DVR, DVD플레이어, apple TV, X-box, play station에 연결할 수도 있습니다. 이 기기를 이용해 컴퓨터 그래픽과 디지털 사운드로 완벽하게 영화, 음악, 게임들을 재생 할 수도 있죠. 고개를 돌려 밖을 봐요. 차 곁을 걸어본 경험이 있나요? 요즘 자동차들은 소프트웨어를 통해 디자인되고, 로봇들과 컴퓨터들로 가득찬 공장에서 만들어진답니다. 만약 운전을 한다면, 구글맵을 통해 원하는 곳을 찾을 수도 있고, 먹을곳을 찾기위해 이를 사용할 수도 있고, 머무를 곳을 찾기위해 TripAdvisor기능을 사용할 수도 있습니다. 다른 예를 들어보죠. 이번엔 고개를 들어 하늘을 바라 볼까요? 자동 운항중인 비행기가 지나가고 있다고 생각해 봅시다. 그 비행기는 운항중에 Wifi와 엔터테인먼트 시스템을 이용하고 있으며, 끈임없이 다른 비행기, 관제사 그리고 제조업체와의 통신이 이루어 집니다. 어딘가에 있는 인공위성과 우주정거장은 지구 궤도를 돌면서 사진을 찍고 날씨를 측정하고, 전화를 라우팅 하기도 합니다.

소프트웨어는 세상을 먹고 있습니다. 하지만 그것은 시작에 불과하죠. 여러분이 그것을 알기도 전에 기술들을 접하고 있을 겁니다. 컴퓨터를 통해 문을 잠그고, 로봇을 이용하여 집을 청소하고, 물건을 나르고, 제조공장에 있는 전자기기 스스로가 제품을 만들고, 가상현실에서 살고 있고, 스스로 운전하는 자동차로 여행을 다니고, 우주를 여행하고…

메트릭스는 어디에나 있습니다.

(The matrix is everywhere)

img

모든 기술들은 소프트웨어로 움직입니다. 당신의 삶 전체가 코드로 감싸져 있음을 알 수 있습니다. 그리고 그 양은 갈수록 증가할 것입니다. 지금 기술이 유비쿼터스이기에 여러분이 학교에서 그것을 공부해야 하는 것을 의미하지는 않습니다. 예를들자면, 우리가 비행기를 타고 비행을 하지만, 교과과정 중에 비행조종 면허가 있는것은 아니지 않습니까? 하지만 아래의 사항들은 비행하는것에 관해 생각하고 이해하기 위해 교과과정에서 필요합니다.

  1. 물리와 수학은 중력, 힘, 압력, 속도, 마찰, 리프트를 이해하는데 도움을 줍니다.

  2. 생물학은 높은 고도와 부족한 산소, 극한의 추위에서 인간의 몸에 어떤 변화가 나타나는지 가르쳐줍니다.

  3. 역사는 어떻게 비행기가 개발되었는지, 그리고 어떻게 발전되어왔고, 여행과 상업 그리고 전쟁에서의 역할을 설명합니다. 여러분이 고등학교를 졸업 할 때, 비행기가 어떻게 비행하는지, 어떻게 안전하게 동작하는지 한번쯤은 생각해 보았을것입니다. 물리학, 수학, 생물학, 역사학과 같은 일반 과목들은 여러분에게 비행기를 포함하여 여러 다양한 주제에 대해 생각하는 방법을 가르칩니다. 이것은 하나의 특정 비행기가 어떻게 나는가와 같이 어떻게 도구를 사용하는지를 가르치는것과는 대조적 입니다. 같은 이유로, 우리는 단순한 코딩보다는 컴퓨터 과학을 가르치는데 초점을 맞추어야 합니다. 코딩은 특정 도구인 반면에, 컴퓨터과학은 범용적으로 생각하는 방법입니다. 이러한 두 구분의 더 나은 이해를 위해 컴퓨터 과학에 대해 더 자세히 살펴보겠습니다.

컴퓨터과학이란 무엇인가?

(What is computer science?)

img

컴퓨터과학은 computation의 연구입니다. 즉, 프로세스 정보와 이를 표현하는 방법이죠. 여기에서 몇가지 공부할 개념들이 있습니다.

  1. 문제해결 : 알고리즘을 배워요. 이것은 분할정복, 재귀, 추론, 탐욕검색, 무작위 알고리즘 같은 일반적인 전략입니다. 이것은 여러분에게 모델을 만들고 분석하고 어떤 문제들을 해결하는데 도움을 줍니다.

  2. 논리 : 정확하고 정형화된 생각하기를 시작해요. 추상화, 불 논리, 숫자 이론, 집합이론을 포함한다면 여러분은 더 효율적으로 문제를 풀 수 있을것입니다.

  3. 데이터 : 정보 이론을 접하고 무엇이 정보인가와 같은 질문을 시작해요. 어떻게 데이터를 표현할 것인가요? 어떻게 현실세계를 모델링 할 것인가요?

  4. 시스템 : 복잡한 시스템의 요구사항과 제약조건들을 만족시키기 위해서 어떻게 디자인하고 빌드 할 것인가요? 시스템 공학은 모든 비지니스의 필수적인 주제 입니다.

  5. 생각하기 : 인간의 마음을 이해하는 가장 좋은 방법중의 하나는 그것을 복제하려고 하는것입니다. 인공지능, 기계학습, 컴퓨터 비전 및 자연어처리 같은 주제는 컴퓨터과학 뿐만아니라 생물학 심리학, 철학, 수학에서도 최전선에 있습니다.

위의 항목들이 코딩이나 프로그래밍을 언급하지 않는 것은 그것들이 단지 계산을 수행하는것과 같은 도구일 뿐이기 때문입니다. 위 항목들 자체가 컴퓨터 과학이 아닙니다.

천문학과 망원경, 생물학과 현미경, 비커와 시험관은 화학에 관한것이지만, 컴퓨터과학은 더 이상 컴퓨터와 연관이 없습니다. 과학은 도구에 관한것이 아닙니다.

Computer science is no more about computers than astronomy is about telescopes, biology about microscopes, or chemistry about beakers and test tubes. Science is not about tools. — Michael Fellows and Ian Parberry

우리가 더 많은 계산을 위해 의존하는 또 하나의 도구가 있습니다. 그것은 바로 우리의 뇌 입니다. 컴퓨터 과학의 목표는 당신의 뇌에 새롭고 범용적인, 그리고 널리 적용할 수 있는 방법을 생각하게 하는것입니다. 과학기술이 점점 더 유비쿼터스해짐에 따라, 이 새로운 생각하는 방법은 물리학, 수학, 생물학, 역사학 만큼이나 중요하게 되었습니다.

혼자 생각하고 말하는것은 충분하지 않습니다. 우리는 그것을 어떻게 적용해야 하는지를 알아야 할 필요가 있습니다. 물리학에서는 스케일, 프리즘, 자석을 이용한 실험을 합니다. 생물학에서는 시험관, 식물, 세균 배양용 접시를 사용하여 실험을 합니다. 컴퓨터 과학에서는 프로그래밍을 배움으로써 이를 대신 할 수 있습니다.

프로그래밍이란 무엇인가?

(What is programming?)

img

프로그래밍 혹은 코드를 작성하는것은 어떤 작업을 수행하기 위해 컴퓨터에게 지시하는 방법입니다. 만약 여러분이 한번도 코드를 작성한 적이 없다면, 아마 클릭을 통해 사용하는 기존의 응용 프로그램에 익숙해져 있을 것입니다. 내부동작은 이 응용 프로그램은 화면에 application 표시하기, 데이터를 저장하거나 읽어오기, 클릭에 반응하기와 같은 컴퓨터에게 말하는 코드들로 구성되어있습니다. 모든 프로그래밍은 위에서 설명한 컴퓨터 과학 원리에 기초를 두고 있습니다. 주목할 만한것은 그것이 논리, 알고리즘, 데이터, 시스템 엔지니어링과 같은 컨셉이고, 비행기를 자동으로 조종하는 소프트웨어와 같이 웹 브라우저를 통해 지금 이 포스트를 읽고 있는 모든것에서도 사용된는점입니다. 프로그래밍이 많은 수학과 자료구조를 수반하지만, 그것 또한 매우 창조적인 연습입니다. 여러분은 한번에 하나의 코드로 프로그램이 만들어진다고 생각하곤 합니다. 아래는 컴퓨터과학 교육의 일환으로 프로그래밍을 배우는것에 대한 몇가지 이점입니다.

  1. DIY : 만약 여러분이 코딩을 할 수 있다면, 스스로를 위해 무엇인가를 만들수 있습니다. 간단하게 시작할 수 있어요. 스크립트를 만들어 한묶음이나 되는 여행 사진들의 이름을 바꿀수 있고, 엑셀 수식으로 세금계산을 도울 수도 있습니다. 그리고 여러분의 포트폴리오를 위한 웹사이트를 만들수도 있고, 회사를 위한 모바일 앱도 만들 수 있습니다. 또한 당신 친구와 함께 할 수 있는 게임을 구축할 수도 있습니다.

  2. 문제해결 : 일단 당신 스스로 당신의 응용프로그램을 만들었다면, 다른 프로그램들을 이해하기 쉽습니다.컴퓨터에 대해 모르는것의 두려움을 멈춘다면, 나중에는 기술을 지원해 줄 수 있는 전문가가 될 것입니다. 기술은 당신의 삶 모든곳에 영향을 미칠것입니다. 어떻게 읽는지가 중요한만큼 어떻게 프로그래밍하는지를 안다는것도 중요합니다. 3. 경력 : 컴퓨터 과학을 배우는것의 목표는 전문프로그래머가 되는것이 아닙니다. 학교에서 수학, 물리학 화학을 배우지만, 전문적인 수학자, 물리학자, 화학자가 되지 않듯이 말이죠. 어쨋든 프로그래밍에 대한 열정이 있다면, 소프트웨어공학은 높은평점과 높은 임금, 빠르게 성장하고 있는 직업 중 하나라는것을 발견하게 될 것입니다.

복습해 봅시다.

(Putting it all together)

img

정리를 해 보자면,

  1. 컴퓨터 과학은 생각하는 새로운 방법입니다. 그것의 개념은 기술로 가득찬 세상의 모든 사람들에게 유용함을 제공함에 있습니다.
  2. 프로그래밍은 생각의 새로운 방법을 적용하는, 컴퓨터 과학을 배우는데 필수적인 부분입니다. 하지만 그 자체가 프로그래밍의 일반적인 목적에 가까운 것은 아닙니다.

이 두 개념을 혼동하는것이 코딩을 배우는 행동에 문제를 일으키는 것입니다. 슬레이트에서는 ‘모든 사람들이 코딩을 배우지 않아도 될지 모른다.’ 라는 기사를 발표했습니다. 아틀란틱에서는 ‘저널리즘 학교가 기자들에게 코딩을 배우는것을 요구하여야 하는가? No.’라는 글을 썻습니다.제프 에투드는 ‘제발 코딩을 배우지 말라’는 글을 썻고, 거기서 그는 깔끔하게 혼란을 요약하는 질문을 합니다.

미국에서 가장 큰 도시를 이끄는 일을 하는 마이클 블룸버그가 어느날 아침 자바코더로 정신을 차린다면 더 나은 그의 하루를 보낼수 있을까?

“How [would] Michael Bloomberg be better at his day to day job of leading the largest city in the USA if he woke up one morning as a crack Java coder?”

물론 이것은 잘못된 질문입니다. 그것은 생각을 배우는 것이 아니라 코드 학습이 최종 목표임을 시사하는 공공 캠페인의 결과이죠.

브룸버그 또는 어느 누군가가 생각하는 능력을 향상시키기 위해, 새로운 문제해결 전략을 배우고, 더 나은 논리적 이해를 개발한다면 그들의 일은 더 나아질까?

Would Bloomberg — or anyone else — be better at their job if they improved their ability to think by learning new problem solving strategies and developing a better grasp of logic?

나는 여기에 분명한 대답이 있다고 생각합니다. 세계가 더 많은 기술로 꽉차게 될수록 이 대답은 더 눈에 띄게 확실해 질 것입니다. 이것이 우리가 단순 코딩을 배우기 보다 컴퓨터 과학을 가르치는 일에 집중해야 하는 이유입니다.

시작해 봅시다.

(How to get started)

img

좋은소식은 여러분들이 Code.org를 사용하기 위해 어떤 메시지를 기다릴 필요가 없다는것입니다. 여러분들은 컴퓨터 과학을 지금 바로 공부할 수 있습니다! 사실 그것은 가장 배우기 쉬운 주제중의 하나입니다. 필요한것은 단지 컴퓨터와 인터넷 연결인데, 지금 이 글을 읽고 있는 여러분들은 필요한 것을 모두 다 갖추셨을것 같네요.

아래 사항을 참고하세요.

대학과정

  1. Coursera
  2. Udacity
  3. MIT OpenCourseWare
  4. Stanford Engineering Everywhere
  5. Academic Earth

온라인 과정

  1. Khan Academy
  2. Treehouse
  3. MIT Scratch
  4. Codecademy
  5. Code School

커뮤니티와 모임들

  1. CoderDojo
  2. Girls Who Code
  3. Girl Develop It
  4. Code.org
  5. Coding meetup Groups

이전 [Blog Start]

Content