광범위한 기술 vs. 좁은 기술: 소프트웨어 엔지니어링 기술의 이해
게시 됨: 2022-03-11모든 소프트웨어 엔지니어는 습득한 다양한 기술로 구성된 기술 세트를 가지고 있습니다. 하나에서 두 개의 기술만 마스터하고 나머지는 거의 마스터하지 않은 경우 해당 기술은 "깊고 좁습니다". 어떤 분야의 전문가가 아니어도 모든 것을 조금씩 할 수 있다면 그것은 "넓고 얕다"입니다.
우리 대부분은 약간의 강력한 기술, 약간의 평균 기술 및 많은 격차를 가진 중간 어딘가에 있습니다. 이 기사에서 나는 광범위하고 깊은 스펙트럼에 대해 논의하고 광범위한 끝에 가까워지면 대부분의 프로그래머에게 도움이 될 것이라고 주장하고 싶습니다.
물론 너비와 깊이는 상대적입니다. 예를 들어, 웹 개발의 전문가일 수도 있고, 클라이언트 측 웹 개발의 전문가일 수도 있고, JavaScript의 전문가일 수도 있습니다. 이 모든 것이 어떤 의미에서는 "깊고 좁은" 기술이지만 마지막 기술은 첫 번째 기술보다 훨씬 좁습니다.
또한 "깊고 넓은" 및 "얕고 좁은" 기술 세트가 모두 가능합니다. 첫 번째는 모두가 당신을 고용하기를 원한다는 것을 의미하고 두 번째는 당신이 아직 의미 있는 것을 전혀 배우지 못했다는 것을 의미합니다. 흔하지 않기 때문에 자세히 논의할 가치도 없습니다.
소프트웨어 엔지니어 기술 및 기술 세트의 유형
깊고 좁은
깊은 기술을 가지고 있다는 것은 당신이 적어도 한 분야의 전문가라는 것을 의미합니다.
SQL 사용: 관계형 데이터베이스 이론에 대한 모든 것을 알고 있다고 가정해 보겠습니다. MySQL, PostgreSQL, Oracle 및 SQLite의 장단점; 쿼리를 최적화하는 방법 데이터베이스를 비정규화하는 시기와 방법 등. 이 특정 기술을 찾고 있는 고객은 가능한 한 빨리 당신을 고용하기를 원할 것입니다. 다른 사람들이 할 수 없는 것과 같은 가치를 실현하고 실현할 수 있을 것입니다.
그러나 프로젝트가 크게 확장되거나 변경되면 부족한 기술을 가진 프로그래머로 대체되거나 보완됩니다. 큰 변경 없이도 아키텍처 변경을 제안할 수 있습니까? 클라이언트는 NoSQL 데이터베이스를 사용하거나 데이터베이스를 전혀 사용하지 않는 것이 더 나을 수 있지만 귀하의 좁은 전문 지식으로 인해 이러한 익숙하지 않은 옵션에 대해 편견을 가질 수 있습니다.
넓고 얕은
반면에 도메인 전문가가 아닌 제너럴리스트라면 생산성이 최고에 도달하기 전에 새로운 프로젝트에 착수할 시간이 필요합니다.
예를 들어 Python 프로젝트를 수행해야 하고 이전에 해당 언어를 사용한 적이 없을 수도 있습니다. 그래도 아마 그것에 대해 몇 가지(동적, 해석, 다중 패러다임) 들었을 것이고 다른 언어에 대한 경험이 전환을 훨씬 쉽게 만들 것입니다.
처음에 작성하는 코드는 Pythonic(튜플, 컴프리헨션 또는 생성기 포함)이 아닐 수 있지만 어디서부터 시작해야 하는지 알 수 있습니다. 당신은 꾸준히 발전할 것이며 잘 구성된 모듈은 나중에 쉽게 개선될 것입니다. 기술에 대한 당신의 폭넓은 관점은 다른 사람들이 놓칠 수 있는 아이디어를 줄 것입니다.
프로젝트가 변경되면 책임이 아닌 팀의 자산이 됩니다.
현실 세계의 스킬셋
지리적 측면에서 좁은 스킬셋은 높은 산처럼 보이고 넓은 스킬셋은 고원처럼 보입니다. 이 비유를 사용하면 일반적인 기술 세트에는 몇 개의 산, 여기저기에 있는 언덕, 많은 평야가 있습니다.
임의의 프로그래머는 SQL과 Python에 능하고 웹 프로그래밍과 알고리즘에 능숙할 수 있으며 코어 덤프, OAuth 서버 또는 기본 앱과 같은 대부분의 다른 것들에 대해 정말로 걱정할 수 있습니다. 그러한 프로그래머는 지식 격차를 찾고 채우는 동시에 자신의 전문 분야를 계속 활용해야 합니다.
이 전략은 수년에 걸쳐 그들에게 가장 효과적일 것입니다.
프로그래머가 기술을 다양화해야 하는 이유
많은 프로젝트에는 예측할 수 없는 방식으로 결합된 관련 없는 기술이 필요합니다. 광범위하게 숙련된 엔지니어는 대부분의 엔지니어에게 유용하게 기여할 수 있지만 전문가의 기술 집합은 소수의 고용주의 정확한 요구 사항과 일치합니다. 청구서를 지불하는 데 하나의 직업만 필요하기 때문에 단기적으로는 반드시 문제가 되는 것은 아닙니다.

하지만…
지나친 전문화는 위험합니다. 다른 사람보다 미래를 더 잘 예측할 수 있다면 계란을 한 바구니에 담는 것이 좋을지 모르지만 그 능력은 드물고 기술 기술과 관련이 없습니다. 우리의 천년기에 Windows 프로그래밍 기술에 대한 수요를 고려하십시오. 또는 스스로에게 물어보십시오. 우리 중 많은 사람들이 10년 전에 Android, Flash, Nokia 또는 Blackberry의 각각의 궤적을 추측할 수 있었을까요?
마지막으로, 최고의 고용주는 다양한 기술을 높이 평가합니다. Facebook은 신입 사원을 채용한 후 6주가 지나야 팀에 배정됩니다. Google은 내부 이전을 권장하고 여러 순환 프로그램을 실행합니다. 프리랜서를 즐기더라도 옵션을 열어두는 것은 나쁘지 않습니다. 그 회사에서 일하는 것을 고려한다면 최소한 어느 정도는 제너럴리스트가 되어야 합니다.
당신이 확신이 있고 당신의 기술을 다양화하고 싶다면 어떻게 하시겠습니까?
기술을 다양화하고 향상시키는 방법
기술과 돈을 교환할 수 있습니다.
- 익숙하지 않은 분야로 전환하는 동안 더 낮은 비율을 수락하십시오. 평소처럼 75%의 생산성을 보인다면 25%의 임시 급여 삭감은 공정합니다. 당신은 곧 그것을 다시 부딪힐 것입니다.
- 필요한 직무에 지원하면서 원하는 기술로 무보수 데모 작업을 수행하십시오. 변화에 대한 준비가 되지 않은 것으로 판명되더라도 이는 여전히 유용한 교훈입니다.
기술을 위해 시간을 교환할 수도 있습니다.
- 오픈 소스 프로젝트에 기여하십시오. 조언과 검증을 받고 커뮤니티에 보답하며 잠재적 고용주나 동료의 주목을 받을 수도 있습니다.
- 기쁨, 영감, 일상의 변화를 위한 개인 프로젝트를 수행하십시오. 예를 들어 React를 배우면서 스마트폰 이전의 Snake 게임을 복제했습니다.
학습 기회를 찾아야 하지만 지속적으로 할 수는 없습니다. Toptal 인터뷰 프로젝트에서 Node.js와 Backbone을 사용했는데 둘 다 경험이 많지 않습니다. 재미있었지만 필요한 학습 속도를 몇 달 동안 지속할 수 없었습니다.
이상적으로는 새로운 것을 배우기 위해 도전할 때 장기간의 안정(안정적인 산출 및 수입)과 짧은 간격을 번갈아 가며 사용하는 것이 좋습니다. 후자를 수행하는 빈도는 현재 기술, 시장 수요 및 개인 목표와 같은 여러 요인에 따라 다릅니다.
폭이 고용주에게 좋은 이유
고용주에 관한 한, 일부 시나리오에서는 항상 깊은 기술이 필요합니다.
- 고용주와 직원 사이에 신뢰나 시간 약속이 거의 없을 때.
- 개인 정보 보호 또는 보안 사고와 같은 치명적인 결과가 발생할 가능성이 있는 경우.
- 난해한 기술이 필요할 때.
- 마감일이 시급하고 협상할 수 없는 경우.
그럼에도 불구하고 많은 프로젝트에서 이러한 확인란을 선택하지 않으며 고용 관리자는 다재다능한 엔지니어를 고려해야 합니다. 테스트 및 코드 문서화와 같은 많은 기술 및 모든 소프트 기술(예: 커뮤니케이션) 이전. 복원력은 제품이 완전히 바뀌지 않는 경우에도 중요합니다. 스톨을 위해 고용한 부품의 경우 제너럴리스트는 다음으로 높은 우선 순위에서 작업할 수 있습니다.
광범위한 기술 집합의 중요성을 감안할 때 개발자가 다양화하도록 장려해야 하며 다양한 분야와 기술에 대한 "다년간의 경험"에 너무 집중할 수 있는 고용주에게 광범위한 지식의 중요성을 전달해야 합니다.
최종 목표는 만족한 고객의 실적입니다. 하드 및 소프트 기술 외에도 엔지니어가 익숙하지 않은 영역으로 전환하는 능력을 증명합니다. 또한 프리랜서가 준비가 되기 전에 새로운 분야로 모험을 떠나지 않도록 하는 강력한 인센티브입니다.
올바른 균형 잡기
광범위한 기술이 저평가되면 일부 우수한 개발자는 유휴 상태이고 일부 우수한 프로젝트는 인력이 부족하거나 예산이 초과됩니다. 완벽한 기술 조합을 요구하는 것은 수요(보상 노동)와 공급(자격을 갖춘 노동)을 맞추기 어렵게 만든다는 점에서 현장 작업을 요구하는 것과 같습니다.
이 중 어느 것도 도메인 전문성에 대한 논쟁이 아닙니다. 그것은 항상 중요하고 후한 보상을 받을 것입니다. 광범위한 기술도 겉으로 드러나는 것보다 더 중요하다는 사실을 명심해야 합니다.
