학습, 성장, 생산성 같은 화두로 요즘 계속 생각하다 보니 이런 주제가 궁금해지네요.
더 나아가서, 좋은 개발자와 탁월한 개발자는 어떤 점에서 다르다고 생각하시나요?
'개발자'를 여러분이 속해 있거나, 잘 아는 다른 역할/직군으로 바꿔서 대답해주셔도 감사하겠습니다. (e.g., 테크 리드, CTO, CEO, 창업자, 디자이너, PM, ...)
저는 탁월한 개발자의 공통점이 크게 다음 세 가지라고 생각합니다.
- 문제 인식: 다른 사람들이 문제라고 인지하지도 못하는 것을 발견하고, 개선 가능성을 찾습니다.
- 문제 정의: 문제 상황과 원인을 굉장히 다양한 층위와 관점에서 바라보고, 그동안의 경험을 패턴화하여 문제를 훨씬 더 쉬운(또는 더 효과적인, 더 근본적인) 문제로 환원시킵니다.
- 문제 해결: 선택 가능한 여러 솔루션을 떠올릴 수 있고, 각 솔루션의 트레이드오프를 이해하여, 현재 조직의 상황에 맞게 솔루션을 선택합니다. 그 의사결정을 어떤 시점에 어떤 신호를 보고 바꿀지도 알고 있습니다. 그리고 작은 단위로, 빠르게 피드백을 받아볼 수 있는 방법으로 해결법을 적용합니다.
기본적으로 저도 개발자는 문제를 해결하는 사람이라고 생각합니다.
꼭 개발자라고 한정해서 얘기할 필요는 없을 것 같은데, 저는 탁월한 사람들의 특징으로 '연결'을 꼽겠습니다.
지식과 경험, 아이디어 등등 많은 것들이 머리 속에 있는데 그것들을 잘 연결하는 사람인가가 중요하다고 생각하는데요.
문제를 발견했을 때 해결책을 떠올리는 것이 1차적인 연결이지만,
문제와 문제를 연결해서 복합적인 상황을 떠올리고, 다른 해결책을 찾는 것도 연결이고,
해결책과 아이디어들 여러가지를 연결해서 더 간편하고 유연하고 뛰어난 해결책을 만들어 내는 것도 연결 이라고 생각합니다.
꼭 개발뿐만 아니라, 개발과 비즈니스 적인 요소를 연결 지어 생각하거나 전혀 상관없는 것들을 연결하는 것이 요즘 시대에 아주 중요한 능력이 아닐까 생각합니다.
페이스북에도 질문을 해봤는데 김창준님이 논문을 참고해보라는 댓글을 달아주셨습니다. 왜 이 생각을 못했나 싶네요.
“What Makes a Great Software Engineer?” 라는 2015년 논문이 150회 인용됐길래 읽어보려고 합니다.
https://ieeexplore.ieee.org/abstract/document/7194618
spilist2 안녕하세요! 페북에서도 질문 올리신 거 봤던 것 같습니다 :) 저도 항상 가지고 있는 고민인데, 혹시 논문내용은 추천하실만한 내용일까요?
논문이 아마 박사논문(dissertation)인듯한데 PDF 기준 300페이지나 되더라고요. https://digital.lib.washington.edu/researchworks/bitstream/…
그래서 아직 2장까지밖에(introduction, related works) 못읽었지만, 여기까지만 해도 내용은 무척 마음에 듭니다. 문장도 어렵지 않게 쓰여있고요. 추천드립니다.
공유해주신 논문 중에 6장이 가장 핵심인 것 같아서 읽었는데 ㅎㅎ 내용이 좋네요! 다시 한번 저도 돌아보게되고!! ㅎㅎ 감사합니다.
질문을 던져놓고 구글 검색을 해보니 몇 가지 글이 보이는군요. 10x engineers 라는 키워드도 있네요.
https://linkedin.com/pulse/great-engineer-vs-good-marissa-fayer-mba/
- 좋은 개발자는 문제를 해결하는 특별한 도구들을 갖추고 있다. 좋은 개발자는 체계적이고 합리적이며, 모든 각도에서 바라보고, 모든 가능한 입출력을 분석한다.
- 탁월한 개발자는 위에 언급한 모든 능력을 기반으로, 이를 즉시 사용 가능한 해결책에 적용한다. 이미 알려진 패턴들(과학과 수학의 원리들, 린 개발 원칙 등)을 창의적인 방법으로 새로운 실생활의 문제에 적용한다.
- 가장 탁월한 개발자들은 귀를 기울일 줄 줄 안다. 문제에 귀를 기울이고, 이해관계자와 그들이 가치를 두는것에 귀를 기울이고, 시장에 귀를 기울이고, 피드백에 귀를 기울인다. 그리고 창의적인 방법을 떠올리는 내면의 소리에 귀를 기울인다.
==
https://www.quora.com/How-do-you-identify-a-good-vs-great-engineer
답변이 엄청 많은데.. vote 높은 거 몇 개만 보면
1. (컨베이어 벨트에 선풍기 가져온 사람 예를 들면서) 게으른 사람은 언제나 일하지 않을 방법을 찾는다. 게으른 엔지니어가 최고의 엔지니어다.
2. 좋은 엔지니어는 요청받은 문제를 푼다. 가끔씩 본인의 기술 역량을 향상시키기 위한 수업을 듣는다. 탁월한 엔지니어는 요청받은 것에서 한발 더 나아간다.
- 사람들이 질문이 있으면 그를 찾는다.
- 끊임없이 학습한다.
- 아는 걸 지속적으로 공유한다.
- 옳다고 생각하는 것을 고수하지만, 언제 포기해야 할지도 알고 있다.
- 손을 더럽히는 걸 두려워하지 않는다.
3. 나쁜 엔지니어는 시스템에 버그가 있을 때 왜 고치기 어려운지 변명한다. 좋은 엔지니어는 본인의 전문성에 기반하여 버그를 고친다. 탁월한 엔지니어는 주어진 문제 뒤에 숨겨진 의미를 찾는다.
- 모든 다른 시스템에는 유사한 버그가 없는지(또는 이미 고쳐졌는지) 체크한다.
- 유사한 버그가 또 일어나는 걸 피할 수 있는 장기적 해결책이나 설계를 제안한다. (각 해결책 사이의 cost/benefit analysis 첨부)
- 본인의 전문 영역 밖으로도 눈을 돌려, 다른 그룹에서 유사한 문제를 겪진 않았는지 찾아본다. (또는 이미 컨택해 봤다)