SW 설계

0. 프로그래밍이란? 배우는 이유

yztech 2021. 9. 25. 03:08
반응형

프로그래밍은 창의적이고 논리적인 사고력을 키우는 매우 효과적인 방법이다. 예를 들어 아래 그림과 같이 *을 이용하여 삼각형을 출력하는 프로그램을 작성한다고 하자. 그리고 구현시 제한 조건은 "*"와 줄바꿈 문자 "\n"만을 사용해서 출력하는 것이라고 하자. 나중에 이에 관하여 설명하겠지만, 이를 구현하는 방법은 최소한 5가지 이상 존재한다.

*
***
*****
*******
*********

이 문제를 풀기 위해 가장 먼저 할일은 문제를 정의하는 것이고, 두번째 할일은 내가 이문제를 풀기 위해 가지고 있는 툴이 무었인지, 즉 어떤 기반 지식들을 가지고 있는지 아는 것이다. 따라서, 프로그래머들은 자신의 지식과 경험을 툴 (tool)로 사용하여 정의한 문제 (problem)를 풀어서 해결책 (solution)을 찾아내게 된다.

이 과정에서 본인이 가진 툴을 어떻게 사용해야 하는지 생각을 통해 창의적인 발상이 나올 수 있다. 또한, 구현의 과정에서도 가장 쉬운 방법으로 구현한 것이 step 1이라면, 가장 어려운 방법으로 구현한 것을 step 5라고 했을 때, step 1으로 시작해서 step 5까지 가는 방법을 창의적 (creative) 으로 혹은 논리적 (logical) 으로 찾게 된다. 예를 들면, 어떻게 코드를 줄일 수 있을까? 좀더 효율적인 코드로 만들 순 없을까? 나중에 또 사용하고 싶은 코드로 만들고 싶다와 같은 다양한 생각을 하면서 더 나은 방법을 모색하게 된다.

가장 구현하기 간단한 Step 1부터 Step 2, ..., Step 5까지 차례로 구현해가는 것은 코딩에 관심이 있는 사람이라면 누구나 가능한 일이다. 여기서 다음 step으로 넘어가기 위해 가장 중요한 핵심은 스스로 문제를 정의하려는 노력과 그 문제를 해결할 수 있는 툴을 갖고 있는지 여부이다. 단순히 구현에만 관심이 있다면 step 1이면 충분하고, 코드 크기를 줄이고자 한다면 step 2까지 갈 수 있고, 효율적인 코드를 만들고자 한다면 step 3, 재사용 가능한 멋진 코드를 만들고자 한다면 step 4, step 5까지도 갈 수 있게 된다. 이때 우리가 가진 tool의 양, 지식의 양이 해당 step을 해결할 수 있는 키가 된다.

프로그래밍 언어는 매우 다양하다. C, C++, Java, Python, Scala등 수 십개의 언어들이 존재하고 앞으로도 수많은 언어들이 생겨날 것이다. 프로그래밍을 배우기 시작한다는 것은, 이러한 다양한 언어들을 배우는 것이 아니라, 프로그래밍의 핵심인 창의적이고 논리적인 사고의 과정을 배우는 것으로 보는 게 더 합당하다.

시간은 밥?!

프로그래밍을 가르치다보면, 빨리 서둘러 코딩하는 사람도 있고, 먼저 생각후 천천히 코딩을 시작하는 사람도 있다.
이런 과정에서 다음과 같은 질문 혹은 문제를 제시할 수 있을 것이다.

  • 프로그래밍에 정답이 있을까?
  • 서둘러 빨리 코딩하는 사람이 코딩을 잘하는 사람일까?
  • 생각후 천천히 코딩하는 사람이 더 좋은 코드를 만들까?

이에 대한 정답을 모를지라도, 가장 복잡하다고 생각되는 Scala 언어에서 정답을 찾기 위한 힌트는 얻을 수 있을 것이다.

스칼라 언어를 사용하면 같은 문제에 대해 코딩방법이 수십가지에 이른다.
정말 다양한 방법으로 코딩할 수 있다.
그 이유는 다양한 메소드와 컴비네이터들을 사용하고, 만들어 낼 수 도 있으므로 가능하다.

C 언어나 Java 같이 언어가 간단할 수록, 문법이 쉬워지고, 구현 방법 또한 단순해져서
어떤 문제가 있을때, 이를 해결하는 가장 좋은 방법이 주로 한 두 가지로 최적화시킬 수 있다.

하지만, 스칼라에서는 다양한 문법과 메소드로 인해 다양한 방법이 존재하여,
가장 좋은 한 두가지 방법은 없고, 다양한 코드가 만들어질 수 있다.

본인이 생각하는 코딩을 대하는 자세는,
빨리 풀어야 하는 문제의 경우에는, 쉽게 빨리 푸는 게 적절할 수 있다.

하지만, 코딩은 논리적으로 다양한 사고를 할 수 있는 하나의 툴이라고 본다면,
시간을 갖고, 다양한 방법으로 시도해보는 것이, 본인의 사고를 넓히고, 생각의 깊이도 키울 수 있기 때문에 내 머리에게 주는 밥이 될 수 있다.

오류는 기회?!

보통 오류 (버그) 가 발생하면,
선생님을 찾거나, 스스로 어떻게 해야할지 모르는 경우들을 많이 본다.

오류가 발생하면,
본인 스스로 내가 문제를 해결할 수 있는 기회가 생겼구나 라고 생각한다면,
오류가 발생하는 코드들이 반가울수도 있고,
코딩의 실력을 키워주는 가장 좋은 선생님을 갖는 기회가 될 수 있다.

 

반응형