본문 바로가기

프로그래밍 일반

프로그래밍 언어 공부의 기본과 빠지기 쉬운 편견

지난 포스팅에서 교육용 프로그래밍 언어(EPL)에 대해서 말씀드리겠다고 예고해 드렸습니다.
그리고, 이것들을 보면서 어떤 것들을 챙겨야 하는가 말씀드리겠다고 했습니다.
낮에 올린다고 말씀드렸는데 벌써 이 시간이네요.
역시 주말은 제 의도대로 시간을 빼기가 어렵습니다.
다음 주말에도 대비해서 포스팅 준비를 해야 할 것 같습니다.

 

교육용 프로그래밍 언어의 일반적인 모습 (feat. 엔트리)

교육용 프로그래밍 언어는 보통 초등학생 정도의 아이들이 쉽게 프로그래밍의 개념을 접하고 배울 수 있도록 만들었기 때문에,
일반적인 개발에 사용하는 언어와 다른 모습입니다.
이전에 말씀드린 엔트리가 코드를 작성하는 모습을 잠시 보여드리면 다음과 같습니다.

출처: 엔트리 사용자 위키 - 함수 블록 https://docs.playentry.org/user/block_function.html


보시는 것 처럼 특정한 기능 이름과 내용들이 씌어있는 "블록"들이 겹쳐져 있고,

그 겹쳐져 있는 순서에 따라 그 기능들을 수행하고 있습니다.

프로그래밍을 모르는 입장에서는 이게 뭐 하는 건가 싶다가도,

쓰인 글들을 잘 보다 보면 대략적으로 무엇을 하려고 하는지는 어렴풋이 짐작을 할 수 있게끔 만들어져 있습니다.

 

엔트리 화면을 다루면서 챙겨봐야 하는 것들

엔트리와 같은 교육용 프로그래밍 언어는 대체로 튜토리얼들이 쉽게 잘 되어 있습니다.

초등학생의 교육을 위해 만들어진 언어이기 때문에, 처음 만져보는 사람들도 몇 번 하다 보면 쉽게 다룰 수 있게 되어 있습니다.

하지만, 그 기능만을 무턱대고 배우는 것보다, 그것들이 프로그래밍 내에서 어떤 의미를 가지는지 한 번 생각해 볼 필요가 있습니다.

제가 일반적인 프로그래밍 언어에 빗대어 한 번 각각의 개념들을 정리해 보았습니다.

  • 시작: 이벤트
  • 흐름: 반복 / 조건 분기 / 대기
  • 움직임: 액션 - 대상의 이동
  • 생김새: 액션 - 대상의 변형, 변경
  • 붓: 그리기. 대상 만들기
  • 소리: 액션 - 소리 재생
  • 판단: 조건 분기
  • 계산: 대입 / 연산
  • 신호: 함수 호출 / 이벤트 발생
  • 함수: 기능 단위
  • 변수: 데이터 기록 / 상태 저장

한 번에 보면 뭔가 많은 기능이 있는 것처럼 보이지만, 제가 뒤에 써 놓은 말들 중에 겹치는 말들이 보일 것입니다.

개략적으로 모아 보면 다음과 같습니다.

  • 이벤트
  • 액션
  • 반복
  • 조건 분기
  • 대입 / 연산
  • 함수 - 기능 단위
  • 변수 - 데이터 기록 / 상태 저장
  • 대기

뭔가 지금은 어려운 말들입니다. 하지만 저것들이 프로그래밍 언어를 배우면서 지속적으로 듣는 말들입니다.

여러 언어를 배우시면서 무슨 언어를 배우시던 공통으로 듣는 말이기 때문에,

저 개념들이 무엇인지 이해하시는 것이 중요하다는 것을 꼭 기억해두시면 좋겠습니다.


우리가 잘 모르는 특정 언어의 "편견"

그런데 사실, 이게 꼭 엔트리나 스크래치를 봐야만 할 수 있는 이야기는 아닙니다.
엔트리나 스크래치와 같은 교육용 프로그래밍 언어를 콕 찝어 언급했던 이유는,
이 언어들이 처음 프로그래밍을 접하시는 분들께 "편견" 을 주지 않기 때문이었습니다.
편견이라고 하니까 뜬금없이 들리실 텐데요.

사실 우리가 사용하는 프로그래밍 언어들은 대부분이 나름대로의 특성을 가지고 있습니다.
모든 언어들은 각자 특정한 환경에서 특정한 문제를 해결하거나 기능을 제공하기 위해 만들어진 경우가 많고,
기존 프로그래밍 언어들의 문제점을 해결하거나, 더 편리한 개발을 위해 만들어진 경우가 많기 때문에,
비록 그 언어가 대부분의 환경에서 대응이 가능하다고 해도 그 언어 나름의 개성이 굉장히 강하게 드러납니다.

제가 지난 포스팅에서 많은 사람들이 처음 출발점으로 삼는 파이썬이나 웹을 
처음 시작하는 언어나 플랫폼으로 추천하지 않는다고 말씀드렸는데요.
별도 포스팅으로 말씀드린다고 했습니다만, 큰 맥락에서는 그 "개성" 때문입니다.
"편견"이라고 강하게 말씀드렸습니다만, 사실은 "개성" 때문인 것이죠.

특정한 언어를 공부하다 보면, 그 언어에서만 사용하는 특성이지만 꼭 알아야 하는 것들이 있습니다.
편리한 기능이라서 손발처럼 쓰는 것도 있고, 기능을 익히기 어렵기 때문에 언어를 배우는 데 있어서 장벽으로 작용합니다.

하지만 두 가지 모두 우리가 다른 언어로 확장하는 데 있어서 문제로 작용하게 됩니다.
익히기 어려운 기능의 경우, 많은 시간과 정력을 소모하게 만드는 특정한 기능 때문에
자칫하면 프로그래밍 언어 공부 자체에 대한 흥미를 잃어버리게 될 수 있습니다.

특정 언어에만 있고 다른 언어에 없는 이질적이지만 편리한 기능은 단순히 사용할 때는 편리하지만,
이후 그 언어를 사용하지 않는 다른 개발 환경의 다른 언어에서 동일한 문제를 해결해야 할 때,
새로운 개발 환경의 적응에 생각보다 어려움을 겪게 될 수 있습니다.
이런 기능들은 어디까지나 기본에 충실한 상태에서 이용에 그쳐야지, 그것에 지나치게 의존하면 안 됩니다.
지나친 의존은 점점 급격하게 변화하는 개발 환경과 기술에 따라가기 힘든 가장 큰 요인이 될 것입니다.

 

정리 및 예고

교육용 프로그래밍 언어의 목적은, 실제로 우리가 개발에 사용하는 프로그래밍 언어의 동작 원리를 시각적으로 보여주고,
그것을 어떻게 구성하고 최적화하는지를 연습하는 데 있습니다.
따라서, 각자 개성이 강한 실전용 프로그래밍 언어를 이용하여 공부를 고생스럽게 하시는 것보다는, 

원래부터 교육용으로 설계되어 있고 배우기도 쉬우면서, 가장 기본적으로 프로그래밍의 개념에 충실하게 만들어진

교육용 프로그래밍 언어를 통해 처음 시작을 하시는 것이 편견 없이 프로그래밍을 시작하는 데 가장 좋다는 결론을 얻었습니다.

 

하지만, 실제로 우리가 프로그래밍 언어를 배우는 환경은 모두가 초보만 계신 것이 아니죠.

이미 프로그래밍 언어를 취업을 위해 어떤 특수한 것을 잡고 배우신 것도 있으실 것이고,

전공을 컴퓨터공학 같은 것을 하신 덕에 어려운 언어로 힘겹게 문턱을 들이신 분들도 있을 것이고 (C / C++ 같은...)

이런 분들에게 이제 와서 이런 이야기를 해 본들 공염불에 지나지 않을 것입니다.

 

물론 이런 분들에게도 교육용 프로그래밍 언어의 실습은 꽤 괜찮은 디톡스가 될 수 있지만,

그러려면 먼저 일종의 마이그레이션(migration) 과정이 필요할 수 있기 때문에,

다음 포스팅에서는 어느 정도 진행하신 분들께 기본을 어떻게 잡고 가실 것인지에 대한

마이그레이션 가이드(?)를 제공하는 시간을 먼저 가져보겠습니다.

 

그냥 교육용 프로그래밍 언어를 무소의 뿔처럼 가는 것보다 이쪽이 좀 더 많은 분들께 위안이 되지 않을까 싶어서요.

제 생각이 그렇습니다.