Programmer
INFORMATION |
"개발자"로서의 성장 방법 같은 내용을 주로 다루자. |
컴퓨팅 분야에서 프로그래머(programmer)는 컴퓨터 프로그래밍을 하는 사람이다. 프로그래머는 컴퓨터 프로그램의 논리나 알고리즘을 설계하고 프로그램을 작성하고 테스트를 수행한다. 이들중 일부는 소프트웨어 엔지니어, 컴퓨터과학자, 해커로 간주할 수 있다.
에이다 러브레이스는 역사상 최초의 프로그래머로 여겨진다. 그녀는 1842년 10월에, 찰스 배비지의 해석 기관 컴퓨터 상의 구현을 알고리즘으로 설명한 최초의 사람이다.
컴퓨터 프로그래밍 기술에 능숙한 사람들은 유명세를 타기도 하지만, 이러한 관심은 보통 소프트웨어 엔지니어 집단으로 국한된다. 많은 저명한 프로그래머들이 종종 "해커"라는 명칭으로 불린다. 프로그래머는 다양한 형태를 가진다. 전문 프로그래머는 보통 IT 분야의 큰 회사나 작은 서비스 업체에서 일한다. 이것에 대하여 여러 가지 자격증 등이 있다.
IT 프로그래머는 보통 IT 분야의 회사에서 일하거나 만든다. 그리고 그들은 프로그램을 만들고, 베타 테스터들에게 첫 시험판을 주어 오류가 나는지 살필 수 있다. 그 다음 오류가 나지 않으면 그것을 알파 버전으로 한정적으로 판매할 수 있다. 사용자들 에게도 문제가 일어나지 않으면 그것을 정식 버전으로 판매할 수 있다. 가벼운 프로그램만 생각하고 간단한 코딩만 익혀도 되는 것으로 여기는 사람들이 있지만 능력있는 프로그래머가 되기 위해서는 각종 프로그래밍 언어들과 수학, 컴퓨터 과학 이론등을 공부하고 깊이있게 이해하여야 한다.
기술 부채 (Technical debt)
Technical debt 항목 참조.
배울 수 있는 훌륭한 시니어 없이, 엔지니어로 어떻게 성장할 수 있을까요?
- 석유 및 시추 산업의 작은 회사에서 일하는 신입 데이터 엔지니어
- 6개월 전 프리랜서 데이터 엔지니어로 고용되었으며, 작업 품질을 통해 인정받아 현재는 프로젝트의 설계, 구현 및 채용을 책임지는 기술 리드 역할을 하고 있음
- 회사는 기술 회사가 아니기 때문에 기술 지향적인 동료가 몇 명 없으며, 그들과 거의 상호작용하지 않음
- 현재 회사의 이사에게 직접 보고하며, 이사는 세계적으로 큰 석유 및 시추 회사에서 40년 이상의 경험을 가진 훌륭한 사람임
- 스스로 디자인 원칙을 배우고, chatGPT로부터 코드 리뷰를 받으며 최선을 다해 배우고 있지만, 엄격한 교차 검토가 없어서 산업의 최고 기준에 맞는 소프트웨어를 생산하지 못할까 두려움
투표를 많이 받은 상위 답변들 요약
humanfromearth9:
- 나는 소프트웨어 개발에 대해 이야기 하지만 다른 도메인도 마찬가지 일 것
- "당신이 사용하는 기술에 대해서 엄청 많이 읽으세요"
- 하루 20-30분 동안 DZone의 Java, 소프트웨어 설계, 아키텍처, OOP 관련 글을 읽기
- 반복과 습관이 중요함
- 모든 내용을 완전히 이해하려고 노력
- 이해되지 않는 부분은 넘어가지 말고, 내용을 깊이 탐구
- 글의 주제를 비판적으로 분석
- 작성자가 무엇을 전달하려는지 파악
- "내가 작성자라면 어떻게 했을까?" 를 생각
- 유용해 보이는 내용을 직접 적용하고, 한계를 극복하는 방법을 고민
- 특정 기술이나 주제에 대한 더 깊은 통찰 제공
- OOP 패턴이 어떻게 FP 패턴으로 대체 가능한지 탐구
- OOP 클래스와 FP 클로저의 유사점과 차이점 이해
- 다양한 패러다임 간의 차이를 비교하고, 자신의 기술적 시각 확장
- 트랜잭션 관리와 같은 핵심 실무 기술의 전문가 되기
- 실무에서 자주 사용되는 필수 개념과 기술 숙달
iepathos:
- 나도 경력 초반에 비슷한 상황이었음
- 유명한 오픈 소스 프로젝트에 적극적으로 기여
- 이미 사용하고 있는 프로젝트를 선택하면 친숙함을 활용 가능
- 고품질의 PR(Pull Request)을 제출하려고 노력
- 이를 통해 전 세계 최고의 엔지니어들로부터 무료 코드 리뷰를 받을 수 있음
- 리뷰 과정에서 엄청난 학습 기회를 제공받고, 자신의 코드가 수천~수백만 회사에서 사용됨
- 예: 네트워킹, DSA(Data Structures & Algorithms) 등
- 해당 주제를 공부하고, 실습을 통해 더 이상 약점으로 느껴지지 않을 때까지 연습
- 만약 팀이 있다면, 팀 리더나 매니저가 약점을 자연스럽게 보완할 수 있는 작업을 배정해 줄 수 있음
- 독립적으로 학습해야 하는 경우, 자신의 약점을 파악하고 스스로 극복해야 함
- 주어진 업무에 최선을 다함
- 이는 누구나 할 수 있는 기본적인 태도지만, 지속적으로 실천하면 성공으로 이끄는 습관이 됨
- 적극적으로 노력하면, 어떤 환경에서도 성공으로 이어지는 기반을 마련할 수 있음
vinay_ys:
- 지속 가능한 성장을 위한 중요한 교훈들
- 효과적으로 배우는 방법 익히기
- 지속적이고 효율적인 학습 능력을 키우는 것이 중요
- 기술은 빠르게 변화하며, 시장과 흥미를 따라 다양한 도메인을 탐험해야 할 때가 많음
- 이는 두 가지 측면에서 작용
- 축복: 늦게 시작해도 노력과 지능으로 상위 퍼센타일에 진입 가능
- 저주: 경력이 쌓여도 끊임없이 새로운 기술을 배워야 함
- 지속적이고 효율적인 학습 능력을 키우는 것이 중요
- 비기술적 역량은 시간이 지날수록 복리 효과를 발휘 (좋은 습관/나쁜 습관 모두 해당)
- 절제력, 명확한 사고와 표현, 전문성, 신뢰성, 신체적/정신적 건강 관리, 의존가능한 사람 되기, 성장 마인드셋, 모호성과 불확실성 속에서 성공적으로 적응하기 등
- 커뮤니케이션 스킬: 효과적인 협업 기술, 피드백 주고받기, 멘토링 및 코칭, 다양한 직급의 사람들과 협력 (상급자, 하급자, 동료 등)
- 많은 독서를 통해 멘탈 모델 개발, 문제 해결 능력, 전략적 트레이드오프 및 의사결정 기술 연마
- 책을 읽고, (여기와 같은) 포럼 등에서 낯선 사람들과의 대화로 통찰력 키우기
Hacker News 의견
- 신입 데이터 엔지니어로서의 경고 신호들
- 회사는 신입을 저렴한 노동력으로 볼 수 있음
- 프리랜서로 고용되어 혜택 없이 일할 수 있음
- 신입이 기술 리드로서의 역할을 수행하기에는 자격이 부족할 수 있음
- 프로젝트의 설계, 구현, 채용에 대한 책임을 맡는 것은 1인 팀으로서의 위험을 내포함
- 기술 중심의 동료가 적은 회사에서는 예산이 제한될 수 있음
- 주변의 모든 사람에게서 배울 수 있으며, 웹을 통해 독립적으로 학습할 수 있음
- 실수를 방지하거나 문제를 해결해줄 사람이 있다고 안심하지 말고, 책임을 지고 학습하는 것이 중요함
- 높은 급여와 좋은 근무 환경을 누리고 있으며, 회사의 지원을 받고 있음
- 착취당하지 않고 있으며, 이 사실을 명확히 하고자 함
- FAANG 회사에서 높은 수준의 프로젝트를 추구하는 것도 좋지만, 현재 산업에서 더 나은 성과를 내는 것도 흥미로울 수 있음
- 선배 동료에게서 배우는 것은 상황에 따라 다를 수 있음
- 알고리즘과 신경망 이론을 배우고, 작은 프로그램을 작성하며, 단순함을 추구하는 것이 중요함
- 오픈 소스 프로젝트에 참여하고, GitHub에 사이드 프로젝트를 올려 자신의 설계 능력을 개발해야 함
- Reddit, Discord, Stackoverflow와 같은 온라인 커뮤니티를 활용하여 학습할 수 있음
- 블로그를 시작하여 학습 내용을 기록하고, 컨퍼런스에 참석하여 지식을 확장할 수 있음
- 많은 기술적 결정을 내리고 그 결과를 평가하는 것이 가치 있는 경험이었음
- 자신의 결정에 대한 평가를 통해 통찰력을 얻고, 새로운 직장에서 존경을 받을 수 있었음
- 자신이 가장 똑똑한 사람이라면 다른 곳으로 이동하여 경험을 쌓는 것이 중요함
- 좋은 선배 엔지니어가 있는 회사에서도 직접적인 멘토를 찾기 어려울 수 있지만, 경험을 통해 성장할 수 있음
See also
- Programming
- 프로그래밍 언어 목록
- 소프트웨어 개발 프로세스
- 소프트웨어 공학
- Prompt engineering
Favorite site
- Programmer - Wikipedia
- 프로그래머 - 나무위키 - 걍 재미로... <- 그리고 종류(분야)도 잘 정리됨.