
알고리즘은 특정 작업을 달성하기 위한 과정이나 일련의 단계를 말한다.
프로그래밍에서 수행하는 거의 모든 작업에는 아주 기본적인 작업이든 복잡한 애플리케이션을 구축하든 일종의 알고리즘이 포함되므로 문제를 해결할 방법을 마련할 수 있도록 결정을 해야한다.
어떠한 문제를 마주칠때 우선 해야할 것은 문제를 이해하는 것이다.
ex. 두 숫자를 가지고 합계를 반환하는 함수를 작성해보자!
질문을 이해하면서 입력값, 출력값 등 모든 사항들을 확실히 이해하고자 애를 쓴다.
예시를 떠올리는 것이 문제를 잘 이해하는데 도움이 될 것이다.
또한 예시는 온전성 검사를 제공하므로 최종 해결책을 입력했다면 제대로 작동하는지 검사를 통해 구현한 작업을 확인할 수 있을 뿐 아니라 예시를 적용하면서 더 많은 정보를 습득할 수도 있다.
문제는 맞닥트리면 우선 해야 할 일은 간단한 예시로 시작하는 것이다.
문제를 문제하겠다는 말은 문제에 대한 단계들을 실제로 수행하면서 작성을 한다는 것이다.
해결책의 기본적인 구성 요소만 작성해보자.
단계들의 틀을 잡고 항상 집중할 수 있도록 도울 뿐만 아니라 확신이 들지 않는 문제를 짚을 수 있게 해준다.
즉, 문제를 해결할 수 있다면 해결하고 해결할 수 없다면 더 단순한 문제를 해결하라.
수행하려는 작업에서 혼란에 빠트리는 가장 어려운 부분을 찾게 된다면 잠깐 동안 어려운 부분을 무시하고 단순한 해결책을 작성한 다음 다시 어려운 부분을 가능하다면 다시 통합시킨다.
시간을 내어 코드를 살펴보고 되돌아보고 성찰하는 것은 매우 좋은 기회다.
각 구성요소를 한 줄씩 살펴 보면서 마음에 들지 않는 부분이나, 코드의 형태, 해석 방법, 또 이해하기 얼마나 쉬운지에 대해 이야기를 하라는 의미다.
한 줄씩 코드를 읽으면서 생각한다.
이상적이지 않은 부분에 더 나은 방법을 적용할 수 있을 텐데 확신이 들지 않으니 더 빨리 처리할 수 있는 다른 방법을 검색해 봐야겠다 이런 생각들을 하는 것이다.
우선 문제를 확실히 이해하는 단계다.
또한 뭔가 작업을 수행하면서 어떤 해결책을 마련할지, 애플리케이션이 어떻게 구동되도록 할지 각 상황에서 어떤 식으로 작동되도록 할지에 대해 확실히 이해하기 위해서도 마찬가지다.
이는 구체적인 예시를 살펴보는 것과도 관련이 있다.
세분화 단계에서는 완벽한 의사코드를 한 줄씩 작성하는 것도 좋지만 구현해야 할 코드에 대한 계획의 틀을 잡기 위한 단계를 몇 가지로 세분화하는 것도 좋다.
코드를 작성하기 전에 방향을 확실히 정해야 한다.
다음은 해결 단계다.
문제를 당장 해결할 수 없다면 해결할 수 있는 문제부터 처리하시기 바란다.
단순한 문제 같더라도 더 단순화하면 핵심적인 어려운 부분이 사라진다.
해결할 수 있는 부분을 먼저 처리하면 어려운 부분을 다시 통합할 수 있을 것이다.
마지막으로 말씀드렸던 개발자로서 배우거나 향상하는 데 있어서 중요한 것은 코드를 되돌아보고 리팩토링하고, 때로는 되돌아보고 분석하면서 자신을 격려하는 것이다.