목차
코딩은 언제나
문제해결전략, 자료구조, 알고리즘등은 어떤 문제에서 쓰인다.
하지만 코딩은 언제나 쓰인다.
문제해결전략을 이용해서 해결하고 검증까지 했는데.
막상 코딩을 구현을 못한다면
아무런 의미가 없는 행동들이 된다.
이 코딩은 무얼해도 우리에겐 사실 제일 중요한 것이다.
언제나 읽기 쉽게, 짧게
알고리즘을 구현하고, 코딩을 하다보면 오류가 분명 나타난다.
그래서 디버깅을 하려고 보니, 간단한 기능임에도 코드가 1000줄이 넘어가고
변수와 함수, 클래스명을 제대로 알아볼수조차 없다면.
디버깅을 하는 내내 고통스럽고, 끝내 고치지 못해
다시 새로짜거나, 문제해결이 실패 해버릴수도 있다.
그래서 우린 항상 코드를 짧고, 간결하게, 읽기 쉽게 짜야한다.
나뿐만이 아니라, 협업을 하는 사람도 보기 쉽게 한눈에 알아볼 수 있게 짜는것이 중요하다.
코드를 재사용하기.
코딩을 하다보면, 같은기능을 여러번 사용할 날이 올 수 있다.
이럴 때엔 꼭 함수나, 클래스로 분리해서 재사용하는것이 좋다.
시간이 없어서, 귀찮아서 그저 넘겨버릴 수도 있지만
계속해서 연습을 하다보면.
코드가 짧고 간결해지고, 더욱 알아보기 쉬워질 것이다.
물론, 디버깅도 한결 수월해질 것이다.
표준 라이브러리 쓰기.
자료구조나 알고리즘을 막 배운 후에는.
나도 그랬지만 queue, stack, heap, linked_list, Sort Algorithm등
간단한 자료구조나 알고리즘을 직접 작성해서 사용을 하는 경우가 있다.
공부를 목적으로 하는, 학교에서 숙제를 할 때에는 직접 하나하나 구현하는 것이 맞지만,
실제 문제 해결과정에서는 이 방식은 비효율적이다.
표준 라이브러리는 정말 많은 사람들이 사용하고 검증된 알고리즘, 자료구조이므로
매번 새로 짜서 알고리즘이 맞는지, 효율적인지 검증할 필요가 없다.
이런 기본적인 자료구조나 알고리즘은
표준 라이브러리를 사용하는것이 효율적이다.
항상 같은 형태로 작성하기
다양한 문제를 해결 하는 과정에서
비슷한 알고리즘을 사용하는 경우가 있다.
유명한 DFS, BFS 등등...
이런 알고리즘이나 자료구조는 항상 같은형태로 작성을 하는 것이 좋다.
처음문제를 해결 할 때는 여러형태로 작성해서
무엇이 효율적인지 보고, 하나하나 검증해가면서 짜는것이 도움이 될 지 모른다.
하지만 항상 다른 형태로 작성하다보면,
문제 해결이 아니라 오히려 그 세세한 알고리즘과 자료구조에 집중하는 형태가 되어 버린다.
이런 알고리즘은 항상 같은형태로 작성을 해서,
문제 그 자체에 집중을 할 수 있게 해야한다.
항상 같게, 명확하게 이름짓기
어느 기관에서 프로그래머에게 가장 힘든일이 무엇이냐고 조사를 했을때
많은 항목들을 제치고 1위를 한 것이 있다.
바로 '이름 짓기'이다.
그 만큼 고민되고, 잘못지으면
디버깅을 할 때나, 구현을 하는 도중 계속해서
변수, 함수, 클래스 이름을 좇아서 돌아다닐 수 있다.
이를 막기 위해서
표준라이브러리등 이름짓는법 등을 보면서
항상 같은형태로, 명확하게 이름 짓는 법을 연습하는 것이 필요하다.
자료를 하나의 형태로 표현하기.
분수/실수나, 각도, 시간, 온도 등 다양한 표현방법이 존재하는 것은
하나의 방법으로 표현하자.
시간을 예로 들어서.
어쩔 때는 서울을 기준으로 시간을 표현하고,
어쩔 때는 영국을 기준으로 시간을 표현한다면.
계산을 할 때도 잘못하면 시간을 그대로 더하거나,
시간대를 맞추는 과정에서 실수가 나거나 해서
프로그램이 원하는 방향으로 가지 않을 수 있다.
이런 실수를 없애기 위해
어떤 자료를 하나의 형태로 표현하는 것이 중요하다
예로,
시간은 영국을 기준으로
각도는 0~360도 사이에서만
분수/실수는 기약분수의 형태로
온도는 섭씨 온도로 등등
하나의 표현을 정해서 나타내는것이 필요하다.
코드와 데이터는 멀리 두자.
이 코드를 보자
if(day == 1) cout << "Monday";
else if(day == 2) cout << "Tuesday";
...
else cout << "Sunday";
알고리즘과 상관없는 데이터는 분리해서 따로 저장하는 것이 좋다,
String days[7] = {
"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"
}
cout << days[day-1];
짧고, 간결하게
오늘은 코드를 짧고 간결하게 해서
디버깅도 쉽고, 다른사람이 보고 판단하기도 쉽게하는 방법을
공부했다.
내가 코딩을하면서 느꼈던 것도 있고,
이거 쓰면 굉장히 짧아지겠네 했던 것도 있었다.
정말 코딩은 내가 프로그래머를 하는 이상 평생 해야할 작업이다.
그 만큼 처음부터 잘 쌓아가야 년차가 쌓이고 다시 공부할 일이 없을 것이다.
나름 코드를 짧게 만드는 작업은 재미있고, 쾌감도 느껴진다.
100줄짜리 코드를 한줄한줄 줄여서 50줄까지 줄이면,
이렇게 짧아도 똑같은 프로그램이구나 하면서 감탄을 한다.
이런 코딩에 대한 부분은
이 책에서 뿐만아니라, 좀 더 전문적으로 다룬 책을 사서 하나 보는게 좋을거 같다.
'Algorithm' 카테고리의 다른 글
산술 오버플로(2021.06.21) (0) | 2022.08.03 |
---|---|
자주 하는 실수들(2021.06.17) (0) | 2022.08.03 |
문제 해결 전략(2021.06.13) (0) | 2022.08.03 |
C/C++을 사용하면서(2021.05.15) (0) | 2022.08.03 |
문제 해결 과정(2021.05.14) (0) | 2022.08.03 |