티스토리 뷰
작년에 알고리즘 수업을 들으며 코드를 짤 때 도움이 되지 않을까하고 처음 읽었다.
솔직히 처음 읽을 때는 잘 와닿지 않았다.
올해 동아리에서 프로젝트를 진행하고 소프트웨어 공학 수업을 듣고나서 이 책을 다시 읽어보니, 이제서야 조금은 이해가 가는 것 같다.
- 프로젝트 경험(엄청 큰 프로젝트가 아니더라도 팀원과 협업하며 같이 코드를 작성한 경험)
- 소프트웨어 공학에 대한 조금의 지식
위의 2가지가 있으면 책을 더 깊게 즐길 수 있을 것 같다.
물론 없어도 읽는데 지장은 없겠지만 음식도 그 역사를 알고 적절한 조리법을 알면 더 맛있게 즐길 수 있듯이 책을 더 즐기고 싶으면 있는게 좋다.
책의 내용이 너무 좋아 다 소개하고 싶지만 크게 3가지로 추려보려 한다.
단순해야 한다
가끔 이런 생각이 들 수 있다.
"코드가 너무 단순해서 내 능력을 제대로 보여주지 못하면 어떡하지?"
반대로 생각해서 코드가 복잡해서 그 자리를 떠날 수 없다면 어떤 일이 벌어질까?
영원히 그 프로젝트에 묶이는 몸이 되는 것이다.
직장을 옮겨도 후임자에서 이 코드가 무슨 코드냐며 연락이 올 것이다.
코드는 무조건 단순해야 한다.
진짜로 코딩을 잘하는 사람은 처음 보는 사람도 한 번에 이해할 수 있도록 코드를 작성한다.
그만큼 간단하고 가독성 좋게 코딩을 한다는 뜻이다.
5장 복잡성의 단서에서 코드가 복잡하다는 걸 알려주는 단서가 나온다.
- 약간의 `꼼수`를 써야만 코드가 잘 작동한다
- 다른 개발자들이 코드 작동 방식을 계속 물어본다
- 다른 개발자들이 코드를 잘못 사용해 버그가 계속 발생한다
- 그 코드를 수정할 생각을 하면 두렵다.
- 기능 추가방법을 알아내기 힘들다.
여러가지 조건이 있지만 그 중 대표적인 조건 5가지를 내 코드에 대입해보고 복잡한지 생각해보자
좋은 코드를 작성하기 위해서 무엇을 배워야 할까?
프로그래머들이 왜 이렇게 복잡한 코드를 작성하는 걸까?
작가가 십수년 간 소프트웨어 개발을 하면서 내린 결론은
`프로그래머의 대다수(90퍼센트 이상)는 자신이 무슨 일을 하는지 전혀 모른다`
는 것이다.
자신이 대화하고 일해본 프로그래머 중 오직 10퍼센트만이 자신이 실제로 무슨 일을 하는지 제대로 이해하고 있었다고 한다. 대다수의 사람들이 소프트웨어 개발에 관한 법칙이나 일반적인 지침이 존재한다는 것을 모르거나 그 지식이 부족하다는 것을 몰라 헤메고 있다.
그렇다면 좋은 코드를 작성하기 위해서 무엇을 배워야 할까?
- 자신이 쓴 모든 코드에 등장하는 모든 단어와 부호를 아는가?
- 자신이 쓰는 함수의 문서를 모두 꼼꼼히 읽고 완전히 이해했는가?
- 소프트웨어 개발의 기본원칙을 잘 이해하고 있는가? 이런 원칙을 초보 프로그래머에게 완벽히 설명해줄 수 있을 정도인가?
- 각 컴퓨터 부품은 어떻게 작동하는지, 함께 어우러질 때는 또 어떤 방식으로 작동하는 이해하고 있는가?
- 컴퓨터의 역사나 미래의 발전산에 대해서 아는가? 자신이 작성한 코드가 미래에 등장할 컴퓨터에서는 어떻게 작동할지에 대해서도 이해하고 있는가?
- 프로그래밍 언어의 역사에 대해 배웠는가? 자신이 쓰는 언어가 어떻게 진화해왔으며 왜 현재 그런 방식으로 작동하게 되었는지 아는가?
- 자신이 쓰는 것과 다른 프로그래밍 언어, 다른 프로그래밍 방법론, 다른 컴퓨터 종류에 대해 아는가? 작업에 따라 실제 가장 적합한 도구 무엇인지도 아는가?
쉽지 않지만 좋은 프로그래머라면 위 질문에 모두 `그렇다`라고 답할 수 있어야 한다.
좋은 사람이 되어라
소프트웨어에서 중요한 건 사람이다.
다른 사람을 괴롭히는 건 아무가치가 없다.
`개발자 말고 코드에 대해 이야기하는 게 중요하다`
무례하게 말하지 말고 친절을 베풀며 말하자.
후기
맨 처음 읽을 때 알고리즘 수업을 듣고 있었다.
알고리즘 수업을 들었던 사람이라면 알다시피 기존의 구현된 알고리즘의 원리를 위주로 배운다.
이미 수십년 전에 나와서 검증되고 최적화 되어있는 알고리즘을 구현하는 것이 수업의 대부분이다.
모르면 구글신이 알려주는데 코드가 단순해야 한다는 책의 말이 이해가 될리 없었다.
그러다가 올해 동아리에서 프로젝트를 진행하게 되었다.
처음으로 다른 사람들과 같이 협업하는 경험이라 두려움 반 설렘 반으로 시작했었다.
팀원들 모두 처음 배우는 언어였고 서로를 격려해주는 좋은 분위기였지만, git에 내 코드를 올릴 때마다 뭔가 부끄러웠다. 지금 와서 생각해보면 내 코드에 대해 확신이 없었다.
구현했던 방법을 생각해보면 우선 구글에 내가 원하는 기능을 검색한 뒤, 제일 비슷한 코드를 찾아 조금 수정했다.
정확히 무슨 기능을 하지도 모르는 코드를 복붙하는데 확신이 생길리가 없었다.
CS(Computer Sience) 는 그냥 이론적인 얘기이고 코드만 잘 작성하면 되는 줄 알았다.
하지만 그 코드를 잘 작성하기 위해서는 단순히 코드를 타이핑하는 것이 아니라 그 원리와 작동 방법을 이해하고 적절한 곳에 사용할 수 있어야 한다.
그렇기 위해서 CS 가 기반이 되고 그 위에 코딩 경험이 쌓여야 한다는 것을 이제서야 느낀다.
디자인 패턴, 아키텍쳐 등이 왜 중요한지도 한 순간에 느껴졌다.
여러 개발 관련 책들에서 한결 같이 하는 말이 좋은 사람이 되라는 것이다. 하루 종일 컴퓨터만 보고 있다고 생각할 수 있지만 결국엔 개발도 사람들과 함께하는 일이다. 좋은 사람이 되어서 팀워크를 이끌어내는 것도 개발자로서의 능력이다. 실력과 친절을 갖추는 좋은 개발+자 가 되자.
이 외에도 디버깅, 테스팅, 보안성 등 기본적인 소프트웨어 공학 관련된 내용들을 짧고 쉽게 설명해준다.
프로그래밍을 공부하는 친구에게 선물하고 싶은 좋은 책이다.
'책 > 개발' 카테고리의 다른 글
[책 리뷰 / 개발] 오늘도 개발자가 안 된다고 말했다 - 외않됀데? (1) | 2021.12.21 |
---|---|
[책 리뷰 / 개발] 유닉스의 탄생 - 창시자가 직접 말해주는 꿀잼(?) 썰 (1) | 2021.12.17 |
[책 리뷰 / 개발] Clean Code (클린 코드) - 좋은 코드는 좋은 글이다. (0) | 2021.11.21 |
[책 리뷰 / 개발] 커리어 스킬 - 성공하는 개발자가 되는 법 (0) | 2021.11.07 |
[책 리뷰 / 개발] 나는 LINE 개발자입니다 - 개발자들의 에세이 (0) | 2021.10.23 |
- Total
- Today
- Yesterday
- 코딩테스트
- Swift 디자인 패턴
- 애플
- 부스트캠프
- UX
- 개발
- 디자인 패턴
- 코딩 테스트
- Swift DocC
- Swift문법
- 코딩
- TODO
- Swift
- Swift공식문서
- 책후기
- 부스트캠프iOS
- 앱개발
- 날씨어플
- Combine
- 책리뷰
- swiftUI 기초
- todo앱
- 프로그래머스
- 필독서
- vapor
- 책
- ios
- SwiftUI
- Swift 서버
- 부스트캠프7기
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |