paint-brush
최고의 개발자와 일반 개발자를 구별하는 요소: 10가지 중요한 특성~에 의해@zawistowski
12,047 판독값
12,047 판독값

최고의 개발자와 일반 개발자를 구별하는 요소: 10가지 중요한 특성

~에 의해 Wojciech Zawistowski10m2023/05/01
Read on Terminal Reader
Read this story w/o Javascript

너무 오래; 읽다

우리는 기술과 소프트 스킬을 향상시키기 위해 열심히 노력하고 있습니다. 그러나 우리는 우리의 성격 특성, 즉 우리 자신의 고정된 부분을 당연하게 여깁니다. 이런 사고방식은 해롭다. 성공적인 소프트웨어 개발 경력을 위해서는 기술보다 귀하의 특성이 훨씬 더 중요합니다. 그리고 그들은 당신의 통제하에 있습니다. 진정한 수석 개발자는 이를 인정하고 의도적으로 자신의 특성을 개발합니다. 이것은 그들을 군중 속에서 돋보이게 만들고 경력을 가속화하는 초능력입니다.
featured image - 최고의 개발자와 일반 개발자를 구별하는 요소: 10가지 중요한 특성
Wojciech Zawistowski HackerNoon profile picture
  • 우리는 기술과 소프트 스킬을 향상시키기 위해 열심히 노력하고 있습니다. 그러나 우리의 성격 특성, 사고방식 등을 당연하게 여깁니다. 우리 자신의 타고난 고정된 부분입니다. 따라서 자동 조종 장치로 실행되도록 했습니다.


  • 이런 사고방식은 해롭다. 성공적인 소프트웨어 개발 경력을 위해서는 귀하의 사고방식이 중요할 뿐만 아니라(어쩌면 귀하의 기술보다 훨씬 더) 귀하의 통제하에 있습니다.


  • 진정한 수석 개발자는 캐릭터 특성이 가변적이라는 점을 인정하고 자신의 사고방식을 스스로 인식하며 의도적으로 노력합니다. 이것은 그들을 군중 속에서 돋보이게 만들고 경력을 가속화하는 초능력입니다.


  • 이 게시물에서는 성공적인 개발자의 가장 중요한 10가지 특성과 이것이 왜 중요한지에 대해 논의하고 이를 형성하는 방법에 대한 몇 가지 팁을 공유하겠습니다.

소프트웨어 개발자로서 성공하기 위해 필요한 3가지

전문 소프트웨어 개발은 성공하기 위해 다양한 능력이 필요한 복잡한 분야입니다. 우리는 그것들을 세 가지 주요 범주로 분류할 수 있습니다:

기술 능력

가장 눈에 띄는 그룹입니다. 성공적인 개발자가 되려면 프로그래밍 언어 및 프레임워크, 깔끔한 코드 원칙, 아키텍처, 테스트, 디버깅 등 자신의 분야에 능숙해야 합니다. 또한 버전 제어, 명령줄, IDE 등 도구 사용에 능숙해야 합니다.


그러나 기술적인 능력만으로는 전문적인 팀 기반 환경에서 큰 성과를 거둘 수 없습니다. 그렇기 때문에 소프트 스킬도 필요합니다.

소프트 스킬

대규모 상업 프로젝트를 수행하려면 팀워크, 커뮤니케이션, 프로젝트 관리 및 계획, 원격 작업, 자기 조직화, 학습, 개인 생산성 등 탄탄한 소프트 스킬이 필요합니다.


우리 중 많은 사람들이 이러한 기술이 기술적인 기술보다 덜 재미있다고 생각하기 때문에 종종 무시합니다. 따라서 이러한 기술은 이미 탄탄하고 전문적인 개발자를 군중으로부터 분리할 수 있습니다. 그러나 적어도 우리는 그것들을 인정합니다.


세 번째 범주도 있습니다. 이 범주도 마찬가지로 중요하지만 거의 모든 개발자, 심지어 뛰어난 개발자의 감시를 받지 않습니다.

사고방식

사고방식은 소프트 스킬과 다소 유사하지만, 이를 구성하는 "기술"은 호기심, 인내, 공감, 투지, 적응력 등 더 근본적이고 핵심 특성입니다.


어떤 면에서는 이러한 특성이 성공적인 소프트웨어 개발 경력에 중요하다는 것을 알고 있습니다. 그러나 그것은 우리 성격의 선천적이고 고정된 부분으로 보이기 때문에 프로젝트 관리나 개인 생산성 기술을 배우는 것과 같은 방식으로 의도적으로 배우려고 하지 않습니다.


이로 인해 우리는 기술의 거대하고 중요한 부분을 보지 못하게 되고 우리의 발전에 심각한 해를 끼칠 수 있습니다.


[전문 개발자로서 경력을 발전시키는 데 대한 더욱 포괄적인 관점을 보려면 GitHub에서 "진정한 수석 개발자가 되기 위한 확실한 가이드"를 확인하세요.]

사고방식에 대한 맹목이 경력을 위태롭게 할 수 있는 이유

소프트웨어 개발은 복잡하고 때로는 실망스러우며 엄청나게 빠르게 변화하는 분야입니다. 개발자로서 학습하고, 성장하고, 관련성을 유지하려면(그리고 그 과정에서 지치지 말고) 특정한 성격 특성의 조합이 필요합니다.


동시에 100% 팀 게임입니다. 외로운 늑대 해커는 기술적으로 아무리 우수하더라도 전문 소프트웨어 개발 분야에서 설 자리가 없습니다. 그리고 팀에서 잘 기능하려면 겉보기에 반대되는 것처럼 보이는 또 다른 특성 집합이 필요합니다.


사고방식은 기술과는 다른 것입니다. 애자일 개발 원칙을 이해하는 것은 적응력이 있고 빈번한 변화에 개방적인 것과는 다릅니다.


그리고 디버깅 기술을 아는 것은 지치거나 낙심하지 않고 실제로 몇 시간 동안 문제를 추적하는 것을 즐기기 위한 호기심과 끈기를 갖는 것과는 다릅니다.


그러나 이러한 특성은 우리의 성격에 고정되어 있고 타고난 것처럼 보일 수 있지만 기술과 마찬가지로 학습이 가능합니다.


프로그래머에게 중요한 특성이 무엇인지 이해하고 시간이 지남에 따라 의도적으로 연마하지 않으면 잠재력을 최대한 발휘할 수 없습니다. 진정한 시니어 개발자는 이를 알고 자신의 사고방식을 자각하며 이를 개선하기 위해 지속적으로 노력합니다.


이것이 바로 최고의 개발자를 군중과 구별하는 초능력인 차별화 요소입니다.


좋습니다. 그런데 어떤 특성이 가장 중요합니까? 세부 사항에 대해 좀 더 자세히 살펴보겠습니다.

진정한 시니어 개발자의 10가지 특성

1. 호기심

소프트웨어 개발이 무엇인지 한 문장으로 요약해야 한다면 학습에 관한 것이라고 말하고 싶습니다. 끊임없이 발전하는 기술과 소프트웨어 개발 프로세스에 대한 최신 정보를 유지해야 합니다.


복잡한 비즈니스 영역(경력 전반에 걸쳐 여러 영역)에 대한 심층적인 세부 사항을 배워야 합니다. 요구사항을 분석하고 명확히 하는 것은 학습입니다. 연구는 학습이다.


성능 최적화 및 디버깅, 즉 코드의 내부 작동 방식을 깊이 파고드는 것 역시 일종의 학습입니다.


소프트웨어 개발은 사람과 함께(그리고 사람을 위해 ) 일하는 것이기도 합니다.


당신은 다양한 전문 분야와 배경을 가진 다양한 사람들로 구성된 다기능 팀에서 일하게 될 것입니다(요즘은 원격 시대에, 아마도 여러 국가와 문화권에서 왔을 것입니다).


'비즈니스'를 이해해야 합니다. 사용자의 불만 사항과 문제점을 이해하고 해결해야 합니다.


건전한 호기심이 없으면 이러한 모든 일에 대한 효율성이 떨어질 뿐만 아니라 꽤 빨리 지쳐버릴 것입니다.

2. 문제해결에 대한 친화력

소프트웨어 개발은 해결해야 할 문제가 끝없이 이어지는 거대한 퍼즐입니다. 당신이 개발자로 채용된 이유는 회사와 고객의 문제를 해결하기 위해서입니다.


이를 위해서는 조직의 문제(팀으로 기능하는 방법, 작업을 구성하는 방법, 사용할 프로세스)와 기술적인 문제(논리, 아키텍처, 성능 등)를 해결해야 합니다.


이러한 문제는 특정 기능이나 단위 테스트를 설계하고 이름을 지정하는 방법과 같은 원자적 문제에 이르기까지 훨씬 더 작고 중첩된 문제로 구성됩니다.


그러한 퍼즐을 푸는 것을 좋아하지 않고 문제를 분해하고 해결하는 능력이 없다면 소프트웨어 개발 경력은 힘든 일이 될 것입니다.

3. 인내

진정한 시니어 개발자가 되려면 수년간의 신중한 연습이 필요합니다. 그 과정에서 많은 어려움도 겪게 될 것입니다. 경력을 개발하는 것은 보람 있는 일이지만 느리고 때로는 고통스러운 과정이기도 합니다.


탁월함을 달성하고 정상에 오르려면 평생 헌신할 준비가 되어 있어야 합니다. 그리고 이것은 많은 인내가 필요합니다.


기술 지원 처리, 기술에 익숙하지 않은 사용자와의 작업, 조직 관료주의 대처 등 업무와 관련된 많은 일에서도 인내심이 중요합니다. 게다가, 이는 훌륭한 문제 해결 지원이기도 합니다.


그리고 기술처럼 빠르게 움직이고 끊임없이 변화하는 산업에서 인내심 없이는 계속 일할 수 없습니다.

4. 그릿(적당량)

소프트웨어 개발에는 많은 끈기가 필요합니다. 벌레를 사냥합니다. 제대로 문서화되지 않은 API 및 라이브러리를 해독합니다. 레거시 코드 풀기. 성능 병목 현상을 추적합니다. 단순히 오랜 시간 동안 깊은 집중을 유지하는 것조차도 마찬가지입니다.


아무리 선배라도 당신은 어려움을 겪고, 실패하고, 막히고, 좌절감을 느낄 것입니다. 그리고 타지 않고 쟁기질하려면 많은 모래가 필요합니다.


하지만 적절한 양의 그릿이 무엇인지도 이해해야 합니다. 몇 시간, 며칠 동안 비생산적으로 벽에 머리를 부딪히는 것과 길에서 가장 작은 충돌에 부딪힐 때 즉시 도움을 요청하여 지속적으로 팀을 방해하는 것 사이의 최적점은 무엇입니까?

5. 감성지능

소프트웨어 개발은 사람과 팀을 중심으로 이루어집니다. 개인 수준에서 동료와 매우 긴밀하게 협력하게 됩니다. 즉, 프로그램을 페어링하고, 함께 디버그하고, 코드를 검토하게 됩니다.


또한 팀 구성을 통해 함께 작업하게 됩니다. 그룹으로서 브레인스토밍하고, 계획하고, 결정을 내리게 됩니다. 그리고 이 협업은 지저분합니다. 작업이 중복되거나 충돌할 수 있으며 서로 다른 의견을 갖게 될 것입니다.


경영진과 로드맵을 협상하게 됩니다. 마지막으로, 훌륭한 제품을 만들려면 사용자의 입장에서 생각해야 합니다.


게다가 이 모든 사람들은 기술적인 것과 비기술적인 것 모두 다양한 배경을 갖고 있습니다. 그들은 열정적입니다. 그들은 강한 의견을 가지고 있습니다. 때로는 어려운 캐릭터를 가질 수도 있습니다.


그리고 개발자로서의 성공은 개발자와 얼마나 잘 관계를 구축할 수 있는지에 달려 있습니다. 높은 감성 지능 없이는 불가능할 것입니다.

6. 자존심을 억제하는 능력

소프트웨어 개발(그리고 일반적으로 팀으로 작업하는 것)은 균형을 맞추는 행위입니다. 한편으로, 당신은 당신의 전문 지식을 위해 고용되었습니다. 당신은 강력한 의견을 갖고 기술에 익숙하지 않거나 더 많은 후배들을 지도해야 합니다.


반면에, 당신은 당신의 관점에 이의를 제기하고 그룹 결정을 내려야 할 똑같이 경험이 많고 독선적인 팀원과 함께 일하게 될 것입니다.


그 과정에서 당신의 자존심은 종종 상처를 입을 것입니다. 당신은 그것을 통제할 수 있어야 하지만, 물러나거나 이탈하지 않아야 합니다.


당신은 독선적이어야 하지만 열성적이어서는 안 됩니다. 강한 관점을 가지되 약하게 유지하세요. 그렇지 않으면 확신을 가질 수 있는 열린 마음을 가지십시오. 당신은 자신의 의견을 옹호할 준비가 되어 있어야 하지만, 거만하고 똑똑한 바보가 되지 않기 위해 언제 포기해야 할지 알아야 합니다.


팀, 비즈니스, 고객을 존중해야 합니다. 동의하지 않을 수 있지만 헌신하십시오. 그리고 건설적인(순전히 부정적인) 피드백도 우아하게 받아들입니다. 그렇지 않으면 팀에서 효과적으로 일할 수 없습니다.

7. 적응성

소프트웨어 개발의 모든 것이 매우 빠르게 진행되고 있습니다. 기술은 끊임없이 변화하고 있습니다. 새로운 방법론이 인기를 얻습니다. 기업은 피벗합니다.


경력 전반에 걸쳐 프로젝트, 팀, 회사 및 비즈니스 영역도 변경하게 됩니다. 단일 프로젝트라도 지속적으로 검사하고 조정하는 작업입니다(특히 Agile 접근 방식의 경우). 그리고 귀하의 팀도 지속적으로 자체 재편성을 수행할 것입니다.


대부분의 사람들은 변화에 알레르기가 있습니다. 변화는 어렵다. 불편해요. 스트레스가 많습니다. 적응력과 변화에 대한 개방성은 즉시 귀하를 돋보이게 할 것입니다. 그것은 당신이 연공서열의 꼭대기에 오를 수 있게 해줄 뿐만 아니라, 당신이 그 자리에 오랫동안 머물 수 있게 해줄 것입니다.

8. 신뢰성

지겹도록 반복하지만 소프트웨어 개발은 팀 게임입니다. 귀하의 동료, 관리자, 회사 등 모두 귀하가 귀하의 역할을 수행할 것으로 기대합니다.


귀하의 기술 전문 지식에 관계없이, 세세한 관리 없이 작업을 처리하고 약속을 이행할 것을 귀하에게 의존할 수 없다면 누구도 귀하를 진정한 수석 개발자라고 생각하지 않을 것입니다.


결코 실수를 할 수 없다는 뜻은 아닙니다. 실패가 발생합니다. 그리고 최고의 기업은 이를 귀중한 학습 기회로 여깁니다.


하지만 이를 가능하게 하려면 떨어진 공을 집어 들고 우아하게 회복할 수 있어야 하며, 실패로부터 교훈을 얻고 미래에 같은 일이 반복되지 않을 것이라는 신뢰를 받을 수 있어야 합니다.

9. 실용주의

전문 소프트웨어 개발은 절충의 예술입니다. 개발 속도와 품질 사이에서 끊임없이 타협해야 합니다. 입증되고 안정적인 것과 새롭고 유망한 것의 균형을 맞추세요.


과소 엔지니어링과 과잉 엔지니어링 사이에 얇은 선을 긋습니다.


전문적인 소프트웨어 개발에 성공하려면 매우 실용적이어야 합니다. 흑백은 없으며 모든 상황에서 원칙이나 패턴이 적용되지 않는다는 것을 이해해야 합니다.


다양한 접근 방식, 기술 및 솔루션 간의 균형을 맞추려면 뛰어난 직관력이 있어야 합니다. 모서리를 자르는 것이 편안하지만 어느 정도인지 잘 알 수 있습니다.

10. 긍정적인 전망

프로그래머로서의 당신의 삶은 햇빛과 무지개만 있는 것은 아닙니다. 짜증나는 고객을 만나게 됩니다. 촉박한 마감일에 직면하세요. 귀하의 프로젝트가 취소될 수 있습니다. 팀이나 경영진의 의견에 동의하지 않을 수도 있지만 여전히 헌신하고 실행해야 합니다.


또한 추악한 코드로 작업하게 됩니다. (예, Google과 같은 최고의 회사에서도 모든 코드베이스에는 좋은 부분과 나쁜 부분이 있습니다.)


당신은 피곤하고, 좌절하고, 속상해질 것입니다.


부정적인 생각이 지배하도록 내버려두고 비판하고 불평하기 시작하면 자신의 의욕을 잃게 될 뿐만 아니라 팀의 사기도 떨어뜨릴 것입니다. 이는 경력에 큰 도움이 되지 않습니다.


긍정적인 쪽으로 치우쳐 있어야 합니다. 낙관적이고 쾌활하게 행동하십시오. 항상 은색 안감을 찾으십시오. 팀을 결집하고, 나쁜 기분을 없애고, 사기를 회복시키는 사람이 되십시오. 이는 당신을 주목받고 승진하게 할 뿐만 아니라 당신의 경력을 더욱 즐겁고 지속 가능하게 만들어줄 것입니다.

보너스: 의도적으로 사고방식을 형성하는 방법에 대한 몇 가지 팁

분명히 기술은 소프트 기술과 기술 기술 모두 훈련될 수 있습니다. 통신뿐만 아니라 디버깅도 더 잘할 수 있습니다. 하지만 호기심이나 긍정적인 전망과 같이 타고난 것처럼 보이는 특성은 어떻습니까? 좀 더 낙관적이거나 호기심을 갖도록 자신을 훈련할 수 있습니까?


그래 넌 할수있어! 이것은 여러 권의 책을 읽을 가치가 있는 광범위한 주제입니다(Carol S. Dweck의 "Mindset"이 좋은 출발점입니다). 하지만 몇 가지 팁을 빠르게 공유하겠습니다.


  • 당신의 사고방식은 고정되어 있지 않으며 당신의 특성은 유동적이라는 것을 인정하십시오.


  • 자기 인식을 구축하십시오. 다양한 상황에서 당신이 어떻게 반응하는지 관찰하십시오. 무엇이 당신을 특정한 방식으로 느끼게 하는지 이해하려고 노력하십시오(호기심 vs 지루함, 긍정적 vs 심술궂음, 열망 vs 방어).


  • 하루나 이틀의 관점에서 자신의 행동을 되돌아보세요. 당신의 의견은 정말 실용적이었나요, 아니면 당신의 자존심에 대한 말이었나요? 어떻게 다르게 행동할 수 있었나요?


  • 미리 준비하세요. 다음에 비슷한 상황에서 어떻게 행동할지 미리 계획하고, 때가 되면 계획을 상기시켜 줄 올바른 계기를 식별하세요.


  • 원하는 특성을 운동하고 강화할 수 있는 상황에 자신을 노출시키십시오. 그러한 기회를 적극적으로 찾으십시오.


  • 한동안 한 가지 특성에 집중하세요. 이를 실천할 기회를 찾고 이 특성에 대한 자기 인식을 높이는 것이 더 쉬워질 것입니다.


  • 재구성. 자신과 대화하는 방법에 대해 의식하고 신중하게 생각하십시오. 그 아이디어는 어리석은 것이 아니라 놀랍습니다. 그 떨림은 불안이 아니라 설렘이다. 문제는 실망스럽지 않고 흥미 롭습니다.


  • 도움을 요청하세요. 동료나 관리자에게 피드백을 요청하는 것을 주저하지 말고, 원치 않는 행동을 포착하고 지적할 "책임 파트너"가 되어 보세요.


또한 인지적 편견과 습관 형성에 대해서도 조금 알아보시기 바랍니다. 이것은 방대한 양의 지식을 갖춘 잘 발달된 학문이며 탐구하는 것이 꽤 재미있습니다.

결론

진정한 시니어 개발자가 되고 싶다면 완전한 시니어 개발자가 되어야 합니다. 기술, 소프트 스킬, 성격 특성이 적절히 조합되어 있어야 하며 이 세 가지 요소 중 어느 부분도 무시할 수 없습니다.


캐릭터 특성이 가장 까다로운 부분입니다. 대부분의 개발자는 이를 자각하지 못하거나, 어떤 것이 중요한지 모르거나, 유연성이 없다고 믿기 때문에 이를 무시합니다.


그러나 이러한 잘못된 사고방식을 극복할 수 있다면, 즉 사고방식을 바꿀 수 있다면 이를 당신의 경력을 향상시키고 진정으로 돋보이게 할 초능력으로 바꿀 수 있습니다.