성장하는 개발자란

9 분 소요

성장하는 개발자

해당 포스팅은 개발자 세미나 발표를 위해 작성되었습니다.
포스팅에서 사용하는 어휘나 문구가 부적절할 수 있습니다. 🙇‍♂️


login();


안녕하세요 Log입니다.


성장하는 개발자

문구는 다들 친숙하리라 생각합니다.


많은 개발자들이 처음 입사 지원서를 작성할 때나,

면접때 흔히들 자기소개로 사용하는 문구로 사용합니다.

???: 자 면접 시작하겠습니다. 자기소개 부탁드릴게요.
???: 안녕하세요! 저는 하루하루 성장하는 개발자 Log 입니다! ,,,


오늘 여러분과 얘기 나누어보려하는 주제

개발자성장과 관련된 이야기입니다.



개발자

개발자성장에 대해 얘기 하기 전에,

우리 직업, 개발자가 뭐하는 직업인지 잠깐 알아보려 합니다.


??? : 개발자는 뭐하는 직업이야?

ChatGPT :

개발자(Developer)는 컴퓨터 소프트웨어, 애플리케이션, 웹사이트, 시스템 등을 개발, 설계, 구현 및 유지보수하는 직업입니다. 
개발자는 프로그래밍 언어를 사용해 프로그램을 작성하며, 개발 과정 중에 발생하는 문제를 해결하고, 
소프트웨어를 최적화하고 개선하는 역할을 담당합니다.

개발자는 다양한 분야에서 활동할 수 있으며, 그에 따라 몇 가지 일반적인 전문 분야가 있습니다. 
예를 들어 웹 개발자, 모바일 애플리케이션 개발자, 데이터베이스 관리자, 시스템 엔지니어, 게임 개발자 등이 있습니다. 
이들은 각자의 전문 분야에 맞는 프로그래밍 언어와 도구를 사용하여 작업을 수행합니다.


WikiPedia :

소프트웨어 개발자(software developer)는 소프트웨어 개발 작업에 종사하는 사람을 말한다. 
좁게는 소프트웨어 설계와 코딩, 넓게는 프로젝트 관리 업무를 수행하는 사람을 포함한다. 
개별 프로그램 작업을 넘어서 응용 프로그램의 수준에서 전반적인 프로젝트에 기여하는 사람을 뜻하기도 한다. 
비슷한 의미로 쓰는 다른 용어로는 소프트웨어 분석가와 소프트웨어 엔지니어가 있다. 
소프트웨어 개발자중 일부는 컴퓨터 과학자, 해커[출처 필요]로 분류되기도 한다.

프로그래머는 소스 코드를 작성하는 임무를 맡지만, 개발자는 소프트웨어 개발 프로세스의 좀 더 넓은 영역에 관여할 수 있다. 
소프트웨어 개발자는 다음과 같은 업무를 수행한다.

- 소프트웨어 제품 정의 참여
- 스펙 정의
- 요구 사항 분석
- 요구 사항을 확정하기 위한 중간 시뮬레이션, 프로토타입 개발과 개선
- 실행 가능성과 경제성 분석, 애플리케이션 아키텍처와 프레임워크 선택
- 설계
- 구현(설치, 설정, 프로그래밍/커스터마이제이션, 인테그레이션, 데이터 마이그레이션)
- 사용자와 구현 파트너가 읽을 문서 작성
- 테스트, 테스트 케이스를 작성하고 테스트를 지원하는 업무 포함
- 소프트웨어 배포와 배포 후 활동 참여(데모 프로그램 또는 샘플 개발)
- 유지보수

규모가 큰 회사에서는 개발자의 역할을 나누어 위에 나열한 업무마다 인력을 별도로 나누어 할당할 수도 있다. 
규모가 작은 회사에서는 소수의 개발자(때로는 단 한 명)이 모든 업무를 수행하기도 한다.


ChatGPT, WikiPedia 한테 물어봤더니 위와 같은 답변이 나왔습니다.

두 매체의 답변을 종합하여 정리하면 개발자란 직업은 다음과 같은 업무를 수행하는 사람으로 정리됩니다.

개발자는 소프트웨어, 어플리케이션, 웹사이트, 시스템 등을 설계, 구현 및 개발, 유지보수한다.

설계 과정에서 제품 정의에 참여하며, 요구사항 분석 및 실현 가능성과 경제성을 분석해 시스템 구조를 설계한다

프로그래밍 언어를 활용해 프로그램을 작성하며, 개발 과정 중 발생하는 문제를 해결 하고, 소프트웨어를 최적화 및 개선한다.


제가 여기서 이야기 하고자 하는 부분우리가 어디에 집중하고 있는가 입니다.

개발자 == 개발하는 사람


정확히는 우리가 개발에만 집중해 그 외에 것들은 놓치고 있지 않은가 라는 부분입니다.

개발자 != 개발하는 사람


개발과 그 외에 것들

우리는 개발 능력 향상을 위해 많은 노력들을 기울입니다.

기술 서적, Inflearn 강의 듣기, 기술 블로그 정리, 사이드 프로젝트 ,,,


개발자들을 모아 두고 아래와 같이 물어본다면, 손을 안드는 개발자가 있을까요?

Q : 최근 3년 안에 개발 능력 향상을 위한 노력을 해보신 분?


그럼 아래와 같이 물어본다면, 손을 안드는 개발자가 있지 않을까요?

Q : 최근 3년 안에 개발 외적인 업무 능력 향상을 위한 노력을 해보신 분?

A : ??? 개발 외적인 업무 능력..?


우선 해당 질문을 구체화할 필요가 있어 보입니다.


먼저 개발자가 담당하는 개발 외적인 업무들에는 어떤게 있을까요?

제가 인지하고 있는 개발 외적인 저희 업무들은 아래와 같습니다.

  • 시스템 요구 사항 분석
  • 요구사항 실행 가능성 분석
  • 개발 일정 산출
  • 개발 설계, 구현 산출 문서 작성
  • 개발 진행 중 이슈 공유
  • ,,,

뭐 여러가지 적혀 있는데 간단히 말해 이거죠.

우리가 업무하는 시간 비중에 코드를 작성하는 시간이 압도적으로 높지만, 그거 말고도


PRD나 화면 설계서 보고 개발하다가 이상한게 있으면 기획자랑 얘기도 해야되지,

개발하다가 기존 설계한 내용대로 진행했을 때 문제가 될 수 있는게 있으면 개발자끼리 회의도 해야 되지,

전체 개발 일정 보고, 이 부분 개발에는 얼마 정도 기간 쓰고, 저 부분 개발에는 어느 정도 기간 써야 일정내에 되겠다,

일정도 짜야되고, 이전에 짜놓은 일정이 계획대로 안되면 일정 수정도 해야되고,,,,


등등등, 우리 하루 업무를 차트로 봤을 때 아래 처럼 코드만 작성하면서 업무를 보내지 않는다는 부분입니다.


그럼 위에서의 질문을 이렇게 구체화해서 개발자들을 모아 두고 질문한다면, 손을 안드는 개발자가 있지 않을까요?

Q : 최근 3년 안에 개발 외적인 부분들인 의사소통 능력, 일정 산출 능력 향상을 위한 노력을 해보신 분?


해당 단락에서 이야기 하고 싶은 요약은 아래와 같습니다.

개발 서적으로 Clean Code는 많이들 읽고 개발 필독서로 분류되는데,

Clean Conversation 서적이 필독서도 아니고 존재하지도 않더라구요.

비슷한 책은 있겠지만


우리가 성장을 위해 나아갈 때 기술적 부분만이 아닌,

그 외에 것들에 대해서도 성장을 도모해야합니다.

이러한 그 외에 것들은, 소프트 스킬이라 지칭됩니다.


소프트 스킬

소프트 스킬은 기술적 지식이나 전문적 능력과는 별개로,

대인관계, 커뮤니케이션, 문제 해결사람들 사이에서 일어나는 상호작용과 관련된 능력을 의미합니다.

성장하는 개발자가 되기 위해서는 이러한 소프트 스킬도 발전시키는 것이 중요합니다.

소프트 스킬에는 어떤 것들이 있을까요?

소프트 스킬의 종류

  • 커뮤니케이션
    • 명확하고 효과적인 커뮤니케이션 능력을 통해 동료, 관리자, 고객과 원활하게 소통하고 협력
  • 협업
    • 팀원들과 원활한 협업을 통해 프로젝트를 성공적으로 완료
  • 문제 해결
    • 창의적이고 논리적인 사고로 문제를 해결할 수 있는 능력
  • 적응력
    • 기술 및 업계의 변화에 빠르게 적응할 수 있는 능력
  • 시간 관리
    • 효율적인 시간 관리 능력을 통해 일정을 준수하고 프로젝트를 성공적으로 완료
  • 리더십
    • 프로젝트를 이끌고 팀원들을 지도하는 능력
  • 갈등해결
    • 프로젝트 진행 중 발생하는 의견 충돌, 갈등을 관리하고 해결할 수 있는 능력
  • 비판적 사고
    • 정보를 분석하고 평가하는 능력을 통해 문제를 효과적으로 해결


이러한 소프트 스킬을 성장 시키는 방법은

ㅋㅋ 안타깝게도 저도 모릅니다.


아직 잘 모르겠습니다.


제가 얘기하고 싶은 핵심은,

제 개인적으로 프로젝트를 진행 하면서 소스 코드, 개발적, 기술적인 부족함 외에,

저러한 소프트 스킬에 대한 제 부족함을 체감한 적이 상당히 많았다는 점입니다.


방법은 저도 아직 찾는 중이고,

이러한 소프트 스킬에 대한 성장도 우리는 고려 해야 한다.


성장

이제 개발자성장 중에서 성장에 대해 얘기 해보려 합니다.

먼저 성장이란 무엇인지 한번 알아보죠.

??? : 성장이란 무슨 의미야?

ChatGPT :

성장(growth)이란 어떤 대상이나 개체가 시간이 지남에 따라 발전, 변화, 확장 또는 개선되는 과정을 의미합니다. 

성장은 물리적, 정신적, 사회적, 경제적, 지식 등 여러 방면에서 발생할 수 있으며, 개인, 조직, 사회, 나라 등 
다양한 수준에서 관찰될 수 있습니다.

개인적 성장: 개인의 지식, 능력, 경험, 인격, 인식 등이 발전하는 과정을 의미합니다. 
자기계발, 학습, 경험을 통해 성장할 수 있습니다.

조직적 성장: 기업이나 단체가 더 크고 강력한 조직으로 발전하는 과정을 의미합니다. 
이는 매출 증가, 구성원 증가, 기술 혁신, 경영 전략 개선 등을 통해 이루어질 수 있습니다.

사회적 성장: 사회 전체가 발전하는 과정으로, 교육, 문화, 인프라, 경제, 정치 등 여러 분야에서의 발전을 포함합니다.

경제적 성장: 국가의 경제 활동이 증가하여 국내총생산(GDP)이 상승하는 현상을 말합니다. 
경제 성장은 산업, 기술, 자원, 정책 등 다양한 요소에 의해 영향을 받습니다.

성장은 대상이나 개체가 더 나은 상태로 발전하기 위한 중요한 과정이며, 
계속적인 성장을 추구하는 것이 보다 발전된 미래를 만드는 데 기여할 수 있습니다.

고마워요 AI맨!


이를 개인적 성장 측면에서 정리하여 나타내면 성장은 아래와 같습니다.

성장(growth)이란 어떤 대상이나 개체가 시간이 지남에 따라 발전, 변화, 확장 또는 개선되는 과정을 의미합니다. 

개인의 성장은 개인의 지식, 능력, 경험, 인격, 인식 등이 발전하는 과정을 의미합니다. 

자기계발, 학습, 경험을 통해 성장할 수 있습니다.

성장은 대상이나 개체가 더 나은 상태로 발전하기 위한 중요한 과정이며, 

계속적인 성장을 추구하는 것이 보다 발전된 미래를 만드는 데 기여할 수 있습니다.


위 요약본에서 제가 살펴보려 하는 핵심은 아래와 같습니다.

자기계발, 학습, 경험을 통해 성장할 수 있습니다.


자기계발, 학습을 통한 성장은 앞서 살펴보았듯 우리에게 너무나도 친숙한 성장 방법이라 생각합니다.

기술 서적 읽기, Inflearn 강의 듣기, 기술 블로그 정리, 사이드 프로젝트 ,,, 등등등


이중에서 저는 경험을 통한 성장에 대해 이야기 해보려 합니다.

경험을 통한 성장


우리는 경험을 통해 성장한다.

이 문장만 보면 완벽한 문장으로 보입니다.


프로젝트를 개발하면 경험할 수 있다.

이건 당연한 얘기로 들리죠.


경력이 긴 개발자는 프로젝트 개발 경험이 많다.

이것도 맞는 말이죠.


그럼 이건 맞는 말인가요?

개발자 경력이 길어질 수록 프로젝트 개발 경험이 많아지고, 그 경험을 통해 성장한다.


그럼 이렇게도 정리할 수 있는 건가요?

경력이 길어질 수록 개발자는 성장한다.


이번 단락에서 얘기하고 싶은 핵심 주제는 이겁니다.

단순히 경험이 많아질 수록 우리는 성장하는가?


사람은 경험에 비례해서가 아니라 경험을 수용할 수 있는 능력에 비례해서 현명해진다. by. James Boswell

고마워요 제임스!


해당 주제에 제 결론부터 말씀드리면 다음과 같습니다.

경험의 종류에 따라 성장의 차이가 발생한다.

경험을 통해 결국 성장하게 되는데, 경험의 종류에 따라

가파르게 성장을 할 수도, 더디게 성장을 할 수도, 아예 성장하지 못 할 수도 있다.

이게 제 결론입니다.


이와 같은 차이를 발생 시키는 경험의 종류에는 두 가지,

주도적 경험비주도적 경험이 있다고 생각합니다.

이를 비교하며 설명하기 위해 먼저, 각각의 경험에 대해서 다뤄보겠습니다.


주도적 경험

주도적 경험을 정의해보자면 다음과 같습니다.

개인이 스스로 목표를 설정하고, 필요한 지식과 기술을 습득하며, 스스로 문제를 해결하는 과정에서 얻는 경험


주도적 경험의 특징은 다음과 같습니다.

  • 자기 주도
    • 개발자가 스스로 학습 목표를 설정하고, 적절한 자료를 찾아 학습하며, 실제 프로젝트에 적용하는 과정
    • 이를통해 개발자의 독립성과 책임감을 향상
  • 목표 설정
    • 개발자가 개인적인 목표를 설정하고, 이를 달성하기 위해 노력
    • 이러한 과정을 통해 개발자는 성장에 대한 동기부여를 얻음
  • 적용 가능성
    • 주도적 경험을 통해 배운 기술과 지식은 실제 프로젝트에 적용하기 쉬움
    • 개발자가 직접 배우고 적용하는 과정을 거치기 때문에, 더 깊은 이해와 활용도를 얻을 수 있음


비주도적 경험

비주도적 경험을 정의해보자면 다음과 같습니다.

외부에서 지시를 받아 학습하거나 일을 수행하는 과정 외부의 목표와 지식, 기술에 의존하여 문제를 해결하는 과정에서 얻는 경험


비주도적 경험의 특정은 다음과 같습니다.

  • 외부 지시
    • 외부에서 지시를 받아 학습하거나 일을 수행하는 과정
    • 개발자의 독립성과 책임감은 상대적으로 낮음
  • 목표 불분명
    • 개인적인 목표가 불분명
    • 이로 인해 성장에 대한 동기부여가 상대적으로 떨어질 수 있음
  • 적용 어려움
    • 비주도적 경험을 통해 배운 기술과 지식은 실제 프로젝트에 적용하기 어려움
    • 외부에 의존하기 때문에, 깊이 있는 이해와 활용도가 상대적으로 낮음


주도적 경험과 비주도적 경험을 비교해보면,

주도적 경험을 통해 얻은 지식과 기술은 개발자에게 더 큰 성장을 가져다 줍니다.

주도적 경험을 적극적으로 추구하고 노력함으로써, 개발자는 전문성을 향상시키고, 자신만의 가치를 높일 수 있습니다.


두 경험 모두 성장에 도움이 될 수 있지만,

개발자로서 주도적 경험을 적극 추구하는 것이 더욱 효과적인 성장을 가져올 것입니다.



주도적 경험을 위한 자세

우리는 경력을 쌓아 갈수록 더 많은 경험을 하게 됩니다.

그렇다면 그 경험들을 우리가 주도적 경험으로 경험하기 위해서 어떤 전략을 취해야 할까요?


주도적 경험을 위한 방법

  • 목표 설정
    • 프로젝트를 시작하기 전에 개인적인 목표와 프로젝트에서 얻고자 하는 것을 명확하게 설정해야 합니다.
    • 이를 통해 프로젝트의 방향성을 확실히 하고, 성장을 도모할 수 있습니다.
  • 주도적 학습
    • 새로운 기술, 도구, 방법론을 스스로 찾아 학습하고, 프로젝트에 적용할 수 있는 능력을 기르는것,
    • 이를 통해 개발자로서의 전문성을 높일 수 있습니다.
  • 적응력
    • 프로젝트 과정에서 발생하는 다양한 문제와 변화에 유연하게 대처할 수 있는 능력이 필요합니다.
    • 이를 통해 프로젝트의 성공 확률을 높일 수 있습니다.
  • 문제 해결 능력
    • 프로젝트를 진행하면서 발생하는 문제를 독립적으로 인식하고, 적절한 해결책을 찾아 적용하는 능력을 길러야 합니다.
    • 이를 통해 프로젝트의 진행을 원활하게 할 수 있습니다.
  • 책임감과 소통
    • 프로젝트에서 맡은 역할에 대한 책임감을 갖고, 팀원들과 원활한 소통을 유지하세요.
    • 이를 통해 협업 능력을 향상시킬 수 있습니다.
  • 시간 관리
    • 프로젝트를 진행하면서 시간을 효과적으로 관리할 수 있는 능력을 기르는 것,
    • 이를 통해 목표를 시간 내에 달성할 수 있습니다.
  • 반복 및 개선
    • 프로젝트의 결과물을 평가하고, 개선할 부분을 찾아 지속적으로 개선하는 능력을 기르세요.
    • 이를 통해 프로젝트의 퀄리티를 높일 수 있습니다.
  • 피드백 수용
    • 팀원들이나 사용자로부터의 피드백을 수용하고, 이를 통해 프로젝트를 개선할 수 있는 능력을 기르세요.
    • 이를 통해 프로젝트의 성공 확률을 높일 수 있습니다.
  • 성장 마인드셋
    • 개발자는 항상 성장하고 배울 수 있는 기회가 있다고 믿는 성장 마인드셋을 갖춰야 합니다.
    • 이를 통해 새로운 도전을 두려워하지 않고, 지속적으로 발전할 수 있습니다.
  • 창의력 발휘
    • 프로젝트를 진행하면서 창의력을 발휘하여 독창적인 아이디어나 해결책을 제안하세요.
    • 이를 통해 프로젝트의 가치를 높이고, 개인적인 역량을 발전시킬 수 있습니다.
  • 기술 지식 공유
    • 팀원들과 기술 지식을 공유하고, 서로 도움이 될 수 있는 정보를 교환하세요.
    • 이를 통해 협업의 효율성을 높이고, 프로젝트의 성공 확률을 높일 수 있습니다.
  • 결과물에 대한 열정
    • 프로젝트의 결과물에 대한 열정을 가지고, 끊임없이 개선하려는 노력을 기울이세요.
    • 이를 통해 프로젝트의 퀄리티를 높이고, 사용자 만족도를 향상시킬 수 있습니다.
  • 자기반성 및 평가
    • 프로젝트를 진행하면서 자기 자신의 역량과 성장을 평가하고, 반성하세요.
    • 이를 통해 개인적인 성장에 필요한 부분을 발견하고, 지속적으로 발전할 수 있습니다.



결론

이번 이야기에서 다뤄본 주제는 성장하는 개발자 였습니다.

저는 성장하는 개발자, 개발자의 성장을 위해선 아래와 같은 자세가 필요하다고 생각합니다.

  • 기술적 성장만이 아닌, 소프트 스킬(의사소통, 리더십, 분석능력) 성장 도모
  • 마주하는 경험을 주도적인 경험으로 바꾸기 위한 자세


이를 통한 성장을 도모함으로써, 우리는 더욱 가파르게 성장할 수 있습니다.


이상 성장하는 개발자, 성장하고 싶은 개발자, Log 였습니다.

감사합니다.


logout();

댓글남기기