(TIL) 20211124 (어떤 루틴이 좋은 루틴인가?)

2021. 11. 25. 02:14TIL(Today I learned)

반응형

📕Facts(한 것)


  • 백준 문제 풀기 - boj1246
  • 코드 컴플리트 스터디
  • numpy 실습

 

📕Findings(배운것)


코드 컴플리트 스터디에서 배운 내용을 정리한다.

 

어떤 루틴이 좋은 루틴인가? 에 대해 생각하기 이전에 루틴이 뭔가? 에 대한 답이 필요하다.

루틴은 '한 가지 목적을 위해서 호출할 수 있는 개별 메서드나 프로시저를 말한다'라고 책에 명시되어 있다.

(메서드와 프로시저를 혼용하기도 하지만 엄밀하게 따지면, 메서드는 리턴 값이 있고, 프로시저는 리턴값이 없는 void형 함수를 말한다.)

 

그렇다면 루틴을 왜 사용하는 것일까?

루틴을 작성했을 때, 우리는 여러 가지 장점을 얻을 수 있다.

  1. 중복 코드를 피한다. 
  2. 서브 클래싱을 지원한다.
  3. 코드의 실행 순서를 감춘다.
  4. 이식성을 높인다.
  5. 포인터 연산을 감춘다.

(이 부분을 읽으면서 추상화와 밀접한 관련이 있다고 생각했고, 실제로 책에서 클래스를 작성하는 이유를 추가적으로 들어준다.)

위와 같은 장점을 얻기 위해서 우리는 루틴을 사용한다.

 

그렇다면 어떤 루틴이 좋은 루틴일까?

 

나는 책을 읽고 다음과 같은 결론을 내릴 수 있었다.

  • 루틴의 이름이 명료해야 한다. - 길이는 중요하지 않지만, 길이가 길다는 것은 루틴의 일이 다양하다는 것이고, 이는 루틴의 존재 이유와 맞지 않는다.
  • 매개변수를 모두 사용해야 하고, 매개변수를 직접적으로 변경해서는 안 된다.
  • 의도가 잘 드러나야 한다. (이름에서)

위와 같은 내용을 충족시켰을 때, 좋은 루틴이라고 말할 수 있는 '가능성'이 있다. (왜냐하면 책에서 말하는 내용에 비해서 턱 없이 부족하기 때문.)

 


의사코드를 실무에서도 사용할 수 있을까?

평소 의사코드 수준까지는 아니더라도 문제를 풀거나, 코드로 구현할때 어떤 것이 문제이고, 어떻게 구현해야하는 지에 대한 것을 작성하는 편이다. 하지만 이러한 노력이 코드를 작성하는데 큰 도움을 주지는 못했고, 오늘에서야 왜 도움을 주지 못하는 지 알게되었다.

 

책에서는 의사코드를 효과적으로 사용하는 방법을 다음과 같이 설명한다.

  • 구체적인 연산을 정확하게 기술하기 위해 자연어 문장과 같은 형태의 "명령문" 을 사용한다.
  • 특정 프로그래밍 언어의 문법적인 요소를 피한다.(ex: malloc, strcpy)
  • 의사코드는 목적에 좀 더 초점을 맞춘다. 특정 프로그래밍 언어에서 해당 접근법을 어떻게 구현할 것인지가 아니라 그 방법을 사용하는 목적을 설명한다.
  • 의사코드로부터 코드를 거의 자동으로 생성할 수 있을 정도로 의사코드를 작성한다.

 

이러한 방법들을 윤석님이 어떻게 실무에서 사용하는지 직접 보여주셨고, 상당히 많은 도움이 되었다.

실제로 짝 프로그래밍에서 언어가 다른 경우 자연어(의사코드)로 작성하여 소통하는 방법을 사용하고 계셨다.

 

책에서는 의사코드로 실제 루틴을 작성하는 예시가 설명되어 있다.

이 예시를 읽으면, 의사코드는 자세하고 명료하고, 정확한 동작으로 나눠져 있을수록 효율적이었다.

 

📕Feeling(느낀 점)


개발자가 되기 위해서는 많은 노력이 필요하구나를 또 한 번 느꼈다.

 

최근 자연어처리에 관심을 가지게 되어서, 자연어처리 관련 책을 구매했다.

방학때나 시간날 때 마다 공부해보면 좋을 것 같다.

📕여담


 

반응형

'TIL(Today I learned)' 카테고리의 다른 글

(TIL) 20211127  (0) 2021.11.28
(TIL) 20211126  (0) 2021.11.26
(TIL) 20211122  (0) 2021.11.23
(TIL) 20211121  (0) 2021.11.22
(TIL) 20211120  (0) 2021.11.22