20년 동안 소프트웨어 엔지니어로 일하면서 배운 20가지
개요
20년 경력 소프트웨어 엔지니어의 그 동안의 업무 노하우를 정리한 글 입니다.
관련 링크 : https://www.simplethread.com/20-things-ive-learned-in-my-20-years-as-a-software-engineer/
작성자 : Justin Etheredge
작성자 블로그를 기반으로 번역하고 핵심 내용을 정리해보았습니다.
이런 조언을 얻게된 배경이 중요함: 소기업, 스타트업에서 일하다가 컨설팅회사에서 대기업일을 했었고, https://www.simplethread.com/ 를 시작해서 2명에서 25명으로 발전시켰다. 지금은 대기업, 중소기업들에서 혼합되어 일하고 있다.
나의 조언은 아래와 같은 누군가로부터 받은 것입니다.
- 거의 항상 작고 날씬한 팀에서 아주 적은 금액으로 많은 일을 해온 사람
- 특정 도구보다 소프트웨어 작업을 중시하는 사람
- 항상 새로운 프로젝트를 시작하지만 여러 시스템을 유지해야 하는 사람
- 대부분의 다른 사항들보다 기술 생산성을 중요시하는 사람
지난 20년 동안 나를 이끈 몇가지 신념으로 소프트웨어를 보는 방법을 형성했고, 여기에서 당신이 가치있는 것을 찾을 수 있기 바랍니다.
20가지의 조언 리스트
전체 내용을 다 번역하지 않고 몇가지 마음에 드는 조언을 정리해보았습니다.
- On with the list
- 아직도 아주 많은것을 잘 모른다.
- 이것을 빨리 깨달을수록 사기꾼증후군을 빨리 떨쳐버리고 꾸준히 배우고 가르치는것으로 기쁨을 얻을수 있다.
- 소프트웨어에서 가장 어려운부분은 올바른것을 구축하는것이다.
- 어렵게 개발했지만 아무도 사용하지 않을수도 있다.
- 최고의 소프트웨어 엔지니어는 디자이너처럼 생각한다.
- 누가 이것을 사용하고, 왜 사용하는지 어떻게 사용하는지, 그리고 그 사용자에게 무엇이 중요한지를 고려한다. 사용자의 요구를 염두에 드는것이야말로 좋은 UX의 핵심이다.
- 최고의 코드는 코드가 없거나 유지관리할 필요가 없는 코드이다.
- 소프트웨어는 목적을 위한 수단이다.
- 때로는 톱날을 가는것을 멈추고 똥을 자르기 시작해야 한다.
- 연구분석 그만하고 당장 문제해결에 뛰어들어 코딩을 하고 솔루션을 찾아라.
- 무엇이 가능한지에 대해 잘 이해하지 못한다면 좋은 시스템을 설계할 수 없다
- 모든 시스템은 결국 짜증난다, 극복하라.
- “언어에는 사람들이 불평하는 언어와 아무도 사용하지 않는 언어, 두 종류만 있습니다.” – Bjarne Stroustrup
- 아무도 “왜”라고 충분히 묻지 않는다.
- 목표와 무엇이 이 기능에 대한 욕구를 유발하는지를 확실히 이해해야 합니다. 명확한 답을 얻지 못하면 이해할 때까지 이유를 계속 물어보세요.
- 우리는 10x 프로그래머를 찾는 것보다 0.1x 프로그래머를 피하는 데 훨씬 더 집중해야 한다.
- 능력자를 찾는것보다 무능력자를 제거하는게 더 중요하다.
- 선임 엔지니어와 후배 엔지니어의 가장 큰 차이점 중 하나는 일이 어떻게 되어야 하는지에 대한 의견을 형성했다는 것이다.
- 사람들은 정말로 혁신을 원하지 않는다.
- 그들이 찾는것은 결국 값싼 성과와 참신함이다.
- 데이터는 시스템에서 가장 중요한 부분이다.
- 데이터가 코드베이스보다 오래 지속될 수 있다는 점을 기억하라. 장기적인 관점에서 정돈되고 Clean하게 하는 데 에너지를 쓰는데 집중하라.
- 테크니컬 샤크를 찾아라
- 기존 기술들(샤크)은 그것이 많은 문제를 해결해왔기 때문아 아직도 근처에서 샤크처럼 도사리고 있는것이다. 이러한 기술에 반대하지말고 타당한 이유가 있는 경우에만 교체를 시도하라.
- 겸손을 무지로 착각하지 말라
- 주변 사람들과 이야기하고 피드백과 조언을 구하라. 당신은 기쁨을 느끼게 될것이다.
- 소프트웨어 엔지니어는 정기적으로 글을 작성해야 한다.
- 정기적으로 블로그, 저널, 문서 작성 및 서면 커뮤니케이션 기술을 유지하는 데 필요한 모든 작업을 수행해야 한다. 문제에 대해 생각하는데 도움이 되며 팀 및 미래의 자신과 효과적으로 소통하는데 도움이 된다.
- 프로세스를 최대한 간결하게 유지
- 소프트웨어 엔지니어는 모든 인간과 마찬가지로 소유권을 느낄 필요가 있다.
- 열정적인 사람들에게 소프트웨어(또는 실제로 어떤 것이든)를 설계, 구축 및 제공하는 것에 대한 완전한 소유권을 부여하면 놀라운 일이 벌어질 것이다.
- 인터뷰는 팀원이 얼마나 좋은 사람이 될 것인지를 말하기에는 거의 무의미하다.
- 항상 더 작은 시스템을 구축하기 위해 노력하라.
- 큰 규모의 시스템을 구축하는 것은 시스템의 ‘최고버전’을 제공하고싶은 우리의 욕구에서 비롯됩니다. 우리에게 필요한 모든 기능을 구현하기위해 인적, 물적 자원을 많이 소모하는 것은 오히려 사람들에게 판매를 어렵게 만들기도 합니다. 구축하고자 하는 시스템의 핵심에 집중하는 것이 더 효율적일 것이다.
- 아직도 아주 많은것을 잘 모른다.