728x90

이 강좌의 접근 방법과 목표

강좌의 목적

이 강좌의 목표는 프로그래밍을 열심히 배우려는 의지가 있는 사람들을 위한 강좌로, C++ 프로그래밍 언어를 이용해서 프로그래밍의 이론과 실전 기술을 이해할 수 있도록 도와주는 것입니다.

 

강좌에 접근하는 방법

이 강좌는 앞에서부터 차례로 읽도록 작성될 것입니다. 물론 요점을 완전히 파악하지 못한 상태라면 다시 앞으로 돌아갈 수도 있습니다. 하지만 이 강좌는 주제별로 정리가 되어 있음에도 불구하고 원하는 부분만 읽어서 목적을 이룰 수 있는 강좌가 아닙니다. 각 부분의 내용은 앞에서 설명한 내용의 이해를 바탕으로 작성됩니다.

일반적으로 강좌의 목적은 '학생의 질문에 답해주는 것'입니다. 간단한 문제에 대한 질문에는 이런 방식이 적당하지만, 이것이 전부는 아닙니다. 이 강좌에서는 초보자가 생각하지 못한 질문을 던질 것입니다. 다른 사람이 사용할 수 있는 고품질의 프로그램을 만들고자 할 때 필요한 문제를 던질 것이며, 그에 대한 해답을 고민해 보는 것이 이 강좌의 목적입니다.

 

이 강좌를 읽고 난 후에는

이 강좌를 모두 읽으면 프로그래밍 분야의 전문가가 될 수 있을까요? 물론 아닙니다. 올바른 프로그래밍은 다양한 기술을 바탕으로 하는 오묘하고 심오한 높은 수준의 기술이라 할 수 있습니다. 3개월 정도만 공부해서 특정 과목의 전문가가 될 수 없듯이 3개월 동안 공부한다고 해서 프로그래밍의 전문가가 될 수는 없습니다. 이 강좌를 열심히 따라왔다는 가정하에 여러분이 기대할 수 있는 수준은 비교적 간단하고 유용한 프로그램을 작성하는 일에 성공적으로 입문하는 일과, 더 복잡한 프로그램을 분석할 수 있다는 것 정도입니다.

 

주제별 순서

우리의 접근 방식은 '깊이 우선'이라 할 수 있습니다. 그리고 '개념적인 내용에 기반을 둔' 방식이기도 합니다. 우선 1장부터 11장까지는 상대적으로 빠른 속도로 실용적인 소규모 프로그램을 개발하는 데 필요한 기술들을 조합해볼 것입니다. 이를 바탕으로 되도록 많은 도구와 기법을 빠르게 훑어봅니다.

초기 단계에서 모든 내용을 이해하려 하지 마세요. 특히 예제를 조금씩 바꿔서 실행시키면 이해가 가지 않는 부분이 많을 수 있습니다. 처음에는 무엇이 간단하고 복잡한지를 정확히 파악할 수 있는 개념과 기술조차 없는 상태이므로 놀랄만한 무언가가 나타나면 담담히 하나씩 배워갑시다.

모든 이론과 기법, 언어의 기능을 학습할 수는 없습니다. 결국, 우리는 그중에서 일부를 선택해야 합니다. 더 일반적으로 보면 한 교과서나 수업에서 서로 연관된 일련의 주제를 선택해야 합니다.

그렇다면 우리가 취하지 않기로 한 접근 방식에는 무엇이 있는지 정리해보면서 알아봅시다.

  • C 언어 우선 : C++를 공부할 때 C 언어를 먼저 배우는 방식을 택한다면 학생들의 시간을 낭비할 뿐만 아니라 학생들의 문제를 해결할 때 유용한 언어의 기능과 기법, 라이브러리를 알려줄 수 없게 되어서 나쁜 프로그래밍 습관이 키워질 수도 있습니다. C++는 C보다 엄격한 타입 검사와 초보자가 사용하기 편한 표준 라이브러리, 오류처리를 돕는 예외처리 등의 기능을 제공합니다.
  • 상향식 학습 : 이러한 방식은 오히려 효과적인 프로그래밍 실습에 방해를 줄 수 있습니다. 프로그래밍 언어나 라이브러리로부터 받을 수 있는 충분한 지원 없이 문제를 풀게 하면 효과 없는 낭비적인 프로그래밍 실습을 하게 됩니다.
  • 해당 주제에 대한 모든 내용을 설명하는 것 : 이런 방식은 한 주제를 깊게 파고들면서 관련된 모든 주제를 건드리는 상향식 학습에서 유래되었습니다. 하지만 이렇게 하면 관심이 없는 초보자들은 쉽게 지치게 됩니다. 프로그래밍을 어느 정도 학습했다면 그런 기술적인 세부 사항은 검색을 통해 찾을 수 있습니다. 이렇게 무언가를 찾을 때는 매뉴얼 방식이 유용하지만, 개념을 처음 학습할 때는 그렇지 않습니다.
  • 하향식 학습 : 이론으로 시작해서 세부적인 내용을 살펴보는 하향식 학습은 여러분이 프로그램의 실용적인 측면을 이해하는 것에 방해를 주며, 그 중요성을 실감하지 못한 채로 높은 수준의 개념에만 집중하기 됩니다. 프로그래밍하면서 실수를 하기가 얼마나 쉽고, 그런 실수를 바로잡는 것이 얼마나 어려운지 깨닫지 못하면 소프트웨어 이론의 중요성을 실감할 수 없습니다.
  • 추상적인 내용 우선 : 실세계에서 부딪히는 제약을 모른 채로 일반적인 이론에만 집중한다면 실세계에서 발생하는 문제와 실전에서 쓰는 언어와 도구들, 하드웨어에 의한 제약을 무시하게 됩니다. 실전에서 사용하지 않는 학습 전용 언어를 사용하거나 학생들이 하드웨어와 시스템을 고려할 필요가 없는 경우에는 이런 방식을 사용하기도 합니다.
  • 소프트웨어 공학 이론 : 이 방식과 앞에서 설명한 '추상적인 내용 우선' 방식은 모두 하향식 학습의 문제를 내포합니다. 손에 잡히는 예제와 실용적인 경험 없이는 추상적인 내용과 소프트웨어 개발 과정의 가치를 실감할 수 없습니다.
  • 처음부터 객체지향을 배우는 것 : 객체지향 프로그래밍은 프로그래밍에 드는 노력과 코드를 조직화하는 좋은 방법이긴 하지만, 객체지향이 유일한 효과적인 방법은 아닙니다.
  • 그냥 그러려니 하는 것 : 초보자에게 그 기저에 깔린 기술과 기능을 소개해주지 않고 강력한 도구와 기법을 보여주는 방식을 말합니다. 이런 방식은 학생들에게 왜 그것이 그런 식으로 동작하며, 그것을 사용하는 대가가 무엇이고, 어디에 적용할 수 있는지에 대해 잘못된 추측을 하게 합니다. 결국, 나쁜 습관에 익숙해지고, 다음 단계를 학습할 때 방해가 됩니다.

물론 위에서 언급한 접근 방식들이 쓸모없다는 얘기는 아닙니다. 사실 이 강좌에서도 위의 접근 방식이 효과적인 부분에서는 이러한 접근법을 사용합니다. 하지만 실세계에서 쓸 수 있는 프로그래밍을 학습하는 일반적인 방법론으로 앞에 말한 방식 대신 손에 잡히는 예제와 기초적인 개념에 초점을 맞춘 깊이 우선 방식을 따를 것입니다.

728x90
728x90

'Guide > C++ Language' 카테고리의 다른 글

[C++ 강좌] C++ 강좌 모아보기  (0) 2017.10.05
[C++ 강좌] 컴파일의 과정  (5) 2017.04.11
[C++ 강좌] Hello, World 프로그램  (0) 2017.04.09
[C++ 강좌] Visual Studio 설치  (0) 2017.04.09