소프트웨어 엔지니어로 산다는 건 미친 짓이야
(0x1.pt)- 다른 직업들도 이런지 자주 생각하게 됨
- 소프트웨어 엔지니어는 처음부터 여러 프로그래밍 언어와 도구들을 알아야 함
- 하지만 그것만으로는 부족하며, 회사가 사용하는 특정 프레임워크도 익혀야 함
- 예: Rails, Django, Laravel 등
- CSS도 필수인데, 레이아웃이 깨지는 이유는 평생 배워도 알기 어려움
- 적당히 아는 정도로는 살아남을 수는 있음
JavaScript와 프론트엔드 생태계의 진화
- JavaScript를 피할 수 있는 경우는 드묾
- 레거시 앱에서 jQuery만 사용하는 경우는 운이 좋은 경우
- React가 나오면서 프론트와 백엔드가 구분되기 시작했음
- 하지만 회사들은 인력은 늘리지 않고 전체를 다루는 '풀스택 엔지니어'를 요구함
- React 학습 필수
- REST API 구현도 필요
- 타입이 필요하다는 얘기가 나와 TypeScript도 학습해야 함
- 상태 관리는 Redux로 해결하라는 분위기
- 도구 설정도 필요: webpack, esbuild, rollup, Prettier, ESLint 등
기술 선택의 자유? 사실상 없음
- 기존 방식대로 해도 괜찮지만, 현실은 그렇지 않음
- React만 써본 신입에게 서버 사이드 렌더링을 가르칠 여유가 있는지 고민해야 함
- 스타트업은 빠르게 움직이고 돈도 태우는 구조라 표준에서 벗어나기 어려움
시스템 관리의 변화: DevOps의 등장
- 과거에는 시스템 관리자(System Administrator)가 따로 있었음
- 인프라 관리, DB 업그레이드, 데몬 관리 등을 맡았음
- 현재는 DevOps 문화로 인해 엔지니어가 모든 것을 맡게 됨
- Docker 학습 필요
- Docker가 필요 없는 구조라도 Ansible, SystemD 같은 도구를 익혀야 함
클라우드와 인프라 관리 도구의 필요성
- 이제 AWS도 필수로 다룰 줄 알아야 함
- GUI를 사용하는 것은 초보 취급이라 Terraform이나 Pulumi 같은 IaC 도구 학습 필요
승진하면 끝일까? 새로운 시작임
- 매니저가 되면 완전히 다른 업무를 배워야 함
- 마감일 추정
- 작업 분배
- 작업 정의 작성
- 연례 평가 참여
- 제품 회의에서 피드백 제공
- 회사 규모가 커지지 않았다면 여전히 엔지니어 업무도 병행해야 함
요구 사항은 끝없이 늘어남
- 최근 어떤 비밀스러운 회사에서 연락 옴
- 요구 기술: Rails, Hotwire, 네이티브 모바일 개발
- 커널이나 컴파일러 개발도 요구할 기세
- 소프트웨어는 점점 더 복잡해짐
- 복잡함에는 이유가 있지만 전문화가 사라지고 있음
- 집을 짓는 데에도 다양한 전문가가 필요함
- 그런데 소프트웨어에서는 모든 역할을 한 명에게 요구하는 상황임
미래의 희망: 프롬프트 몇 개로 앱 개발하는 세상
- 이렇게 복잡한 현실이라면, 몇 개의 프롬프트로 앱을 만드는 미래도 나쁘지 않음
최근 몇 년간 소프트웨어 개발자 공급이 크게 늘면서 소프트웨어 개발에 대해 업계 종사자가 아닌 분들도 많이 알게 되고, 그러면 소프트웨어 업계 종사자들의 엄살과 동료 직군 사람들의 과도한 띄워주기가 어느정도 줄어들지 않을까 하는 기대가 있었는데, 그 저변에 공급부족으로 인한 대우 개선이 깔려있다 보니 오히려 소위 “잘나가는” 직업으로 여겨지면서 어쩌면 더 심해지는 것 같다는 생각이 듭니다.
네, 소프트웨어 개발이 인기 없는 직업이고 남들이 관심없고 하고싶어하지 않아 하던 소수의 직업일 때는 그래도 상대적으로 괜찮았습니다. 그런 게 일종의 동기부여가 되고, 소수 직업군으로서 직업 정체성을 형성하는 데 기여할 수도 있었지요. ‘내가 속한 그룹은 특별해’ 라는 감정은 사람이 소속감을 느끼고 심리적 안정감을 갖게 되는 중요한 요소이기도 합니다.
그런데, 이미 제가 프로그래머가 되기로 결심한 시절에도 이미 소프트웨어 개발은 다분히 대중적인 일이었지만, 이제는 정말로 그런 시대는 지나지 않았나요? 한국 기준으로 매년 배출하는 소프트웨어 전공자 인구도 이전과는 비교할 수 없을 만큼 크게 늘었죠. 더이상 소프트웨어 개발은 신비로운 일이 아닙니다. 그 밖에도 인력 조달 실패로 인해 벌어졌던 수년간의 비전공자 재교육 붐이 이어진 결과로, 취향과 사고방식만 맞으면 비전공자도 독학으로 배워서 손쉽게 아마추어를 벗어나 프로가 될 수 있다는 것도 온 사회에 널리 알려져 있잖아요.
소프트웨어 개발이 어려운 일이라는 사람들은 본인이 그 일을 하는 이유가 뭘까요? 고되고 힘든 일이지만 보람있는 일이라서 하시나요? 이 업계에서 그런 분들은 그리 많지는 않았던 것 같습니다. 남들이 못하는 것 같으니까 어렵다고 주장하는거지, 실상은 그게 본인한테 가장 쉬운 일이니까 하시는 것 아닌가요? 남들이 좀 띄워준다고 자화자찬하면서 나만 특별한 양 여기면서 눈을 가리지 말고 주위를 봐야합니다. 이공계에서 어떤 분야가 방구석에서 인터넷 좀 보고 독학한다고 (잘 하면) 몇달만에 현업에 투입할 수 있는 전문가가 됩니까?
수요 증가와 인력 양성 정책의 불일치로 일시적인 시장 이익을 누린다고, 운 좋게 남들과 달리 이 일을 꺼리지 않는 사고 방식과 교육의 기회를 얻었다고 해서, 거기에 대단한 의미 부여를 하지 않으면 좋겠습니다.
현대 산업의 관점에서 소프트웨어는 아직 고도의 전문화도 대량 생산도 제대로 이루어지지 않은 상태입니다. 수공업과 제조업 사이에서 수공업에 훨씬 가까운 단계이고, 많은 수공업이 그렇듯이 소프트웨어 프로그래머 역시 아직 취미와 직업의 경계가 흐릿하지요.
우리가 하는 일이란 산업의 측면에서 대장간에서 쇠를 두들기고 톱을 들고 목공을 하고 사포를 들고 유리를 연마하는 것과 비슷하다는 것을 받아들여야 합니다. 이건 현대산업이 나무를 집어넣으면 제지공장이 종이를 찍어내고 석유를 부으면 석유화학공장이 플라스틱을 뽑아내고 실리콘을 비싼 기계에 넣으면 공장이 반도체를 찍어내는 것과는 명백히 다른 것입니다. 여타 제조업과 달리 아직 소프트웨어 개발에는 손재주를 가진 사람이 필요한 것이죠.
물론 남들이 가지지 못한 훌륭한 손재주를 가진 사람은 존중받아 마땅하지만, 약간의 손재주를 연마했다고 해서 소싯적 배워둔 손재주로 평생 먹고 살면 좋을텐데 왜 그럴수 없을까, 나는 이런 훌륭한 손재주를 가졌는데 다른 사람들처럼 힘들게 일하지 않아야 하는 것 아닐까, 나는 남들은 쉽게 하지 못하는 대단한 재능을 가진 것이 아닐까 등등의 특별한 나에 심취하는건 교만에 가까운 일이 아닐까 합니다.
소프트웨어 엔지니어가 되는 것은 어렵지 않음. 소프트웨어 엔지니어링은 가장 쉬운 직업 중 하나임. 우리는 너무 보호받고 있어서 이 글에서 설명된 것이 어렵다고 생각하는데, 이는 우리의 직업이 얼마나 어렵지 않은지를 보여주는 증거임
저는 이 의견에 동감합니다. 훨씬 더 어려운 일들을 하지만 소프트웨어 엔지니어만큼 보상을 받지 못하는 다른 직업들이 많습니다.
같은 기능을 해도 다른 종류의 회로 요소가 있고(커패시터만 해도 종류가 다양하고 단순 on/off만 해도 트랜지스터, 트라이액 등등), 수십개 회사에서 수백 수천개의 제품을 나와서 가격과 특성을 따져가며 선정하기, 그 와중에서도 회로 부품 리비전에 따른 에라타를 봐야하고, 소프트웨어 릴리즈야 롤백하면 끝이지만 제품은 한번 생산하면 돌이킬 수가 없어서 신중해야하고, 테스트도 PCB찍고 실장하고 수정하고 한 세월이며, 한 부품이 저 멀리 있는 다른 부품에 영향을 주고 디버깅만 해도 그냥 브레이크 포인트 걸면 대부분 해결되는 소프트웨어와 달리 부족한 jtag 포트 빼랴 점퍼 날리랴, 실험실에서는 문제가 없는데 입력되는 전기 파형이 일그러질때만 이상해지기, EMC 인증도 고역이죠.
제가 하는건 아니고 옆에서 하는걸 본 게 이렇습니다.
그냥 웃고 지나갑니다... 하하
세상 안 어려운 일이 어디 있기나 할까요
타 직군에서 10년 이상 일하다가 IT로 왔는데 지난 10년간 밖에서 보던 만큼이나 엄살 심한사람이 적지 않네요.
소프트웨어 엔지니어가 힘든 직군이라고 얘기하는 사람들은 CS부서에서 고객 대응 반나절만 해 보면 생각이 많이 바뀔 겁니다.
과거에는 덜 복잡했다 라는 환상 같은 게 있는 것 같은데 어차피 프로그래밍이란 인간 두뇌의 capacity가 한계선으로 작용하기 때문에 예나 지금이나 강도의 차이는 별로 없습니다. 과거보다 더 추상화된 도구로 더 넓은 영역을 다루는 것 뿐이죠.
컴퓨터는 그나마 제어하기 쉬운 편에 속하는 물질이고, 사실 이런 지식 노동 자체는 다른 직군에 비하면 평균적으로는 덜 힘든 편일 겁니다. 조금 특별하게 힘든 게 있다면 현대 사회 특성 상 365/24 내내 신뢰성을 요구받는다는 점이겠죠.
동감합니다. 본문은 개발이 적성에 안맞는 사람이 작성한 글 같네요.
지금 혼자서도 할 수 있는 일을 과거에 하려고 했다면 매우매우 어려웠을 겁니다.
하지만 이젠 추상화된 도구 덕분에 동일한 노력으로도 더 넓은 영역을 다룰 수 있게 됐으니 혼자서도 서비스를 운영할 수 있게 됐죠. 솔직히 개꿀입니다.
제목이 미친짓이야라고 번역되어있디만, 그냥 장신없게 만드는 현 상황을 표현한게 아닐까 싶습니다. 그리고 저는 본문 글에 어느 정도 공감합니다. 과거에 비해서 한명의 엔지니어에게 기대하는 바가 넓고 커진 것은 맞습니다. 그리고 과거에 비해훨씬 많은 현실세계가 컴퓨터 시스템 안으로 들어왔고, 그만큼 추상화와 구현 난이도도 급속도로 높아지고 있죠. 현실에서의 더 어려운 일들을 나열한다고 해서 이 일은 안 힘든 일이다... 라고 주장할 필요가 있나 싶네요
이 글은 마치 소프트웨어 엔지니어의 삶이 온통 고통과 무질서인 것처럼 느껴지지만, 사실은 글쓴이 본인이 경험한 특정 기술 트렌드와 환경에만 기반한 이야기로 보입니다.
기술의 변화는 분명 빠르지만, 모든 엔지니어가 똑같이 겪는 것도 아니고, 그 안에서 안정성과 즐거움을 느끼는 사람도 많습니다.
변화가 있다면 그것에 적응하는 게 엔지니어링의 일부이지, 그 자체가 '미친 짓'은 아니죠.
비판적인 댓글을 보고 많은 생각을 했습니다. 공감되는 부분도 있고 다르게 생각하는 부분도 있습니다.
- 현재 개발자의 위상에 어느 정도 거품이 있을 수 있지만 이는 다른 직업군도 마찬가지라고 생각합니다. 소수에서 다수로. 즉, 종사자가 늘어가고 다양성이 늘어나면서 자연스러운 현상이고, 이 방향이 맞다는 아니지만 개발자가 유독 그렇다고 보진 않습니다.
- 배우기 쉽다. 인정하지만 진입장벽이 낮은 것이 전문성이 낮다를 의미하지는 않습니다. 다른 산업군, 특히 제조업의 다른 기술 직군에 비해 배우기 쉬운 이유는 개발 자체가 쉬워서라기보다는 오픈소스 문화나 낮은 위험성이 아닐까 생각합니다. 앞서 말한 개발자의 다양성 측면에서 빨리 배워 할 수 있는 일들이 있고 전문성을 기반으로 해야 하는 일이 있는 것이죠.
- 환경이 변화했습니다. 과거보다 시장에서 개발자에 대한 기대와 보상이 커지는 이유가 단지 그들의 기술, 숙련도, 전문성이라고 생각하지 않습니다. 인류의 삶에 IT가 깊숙하게 들어갈수록 소프트웨어가 중요해지고, 많은 인프라를 떠받치고 있죠. 각 개발자의 역량이 커져서 보상이 많아지는 것이 아니라 그냥 일 자체가 비싸졌다고 생각합니다. 과거보다 중요해졌으니까요.
- 제조업과 직접 비교가 유의미할까요? 산업의 고도화가 충분히 되지 않았다는 관점에서 그 비교 대상은 제조업으로 보이는데요. 제조업의 패러다임으로 소프트웨어 업을 이해하려고 하면 수공업이나 취미 개발로 보일 수 있지만 반대로 이런 부분이 소프트웨어 개발만의 유연하고 창의적인 문화를 만들고 이를 발판으로 성장하고 있다고 생각합니다.
- 지나친 심취는 위험하다. 매우 공감합니다. 세상에 공부해야하는 일이 개발만 있는 것도 아니고, 여전히 우리는 직업란에 "회사원"이라고 쓰죠. 사회의 분위기에 거품이 낀다고 해서 다른 직업과 크게 다르다는 생각은 경계해야 할 것입니다. 하지만 이건 어떤 직업이든 마찬가지죠.
다른분이 어떤환경, 어떤 성향, 어떤 감정을 느끼고 있을지 몰라 평가하기에는 어렵지만.... 적어도 저는 공감되지 않고 다른 더 힘들고 고된 직업이 많으면 더 많을거라고 생각이 되어 본문에는 공감이 잘안되네요
저는 작성한 그 이유 때문에 소프트웨어 개발자가 되었습니다. 어떤 사람은 이 직업이 매일 새로운 기술을공부해야 해서 싫어할 거고 어떤 사람은 매일 새로운 기술을 공부해야 하기 때문에 축복받았다고 생각하죠. 보는 관점이 다 다른 거 같네요.
다른 건 몰라도 IT 분야에는 정보가 좀 더 공개되고 자신의 작업물을 서로 나누는 분위기가 기업들까지 포함해서 꽤나 광범위하게 퍼져 있어서 그런 점은 좋더라고요.
프론트엔드는 어느 정도 맞다고 생각해요. 오늘 배운 것이 내일 쓰레기가 되는 동내라....
깊게 해보지는 않았지만 테일윈드 쓰기 전에는 엄청난 분노와 좌절만 느꼈습니다.
백엔드 내지 시스템?개발은 내가 이거 하면서 이 돈 받아도 되는 건가~하는 생각이 듭니다. 레고 조립하면서 돈 받는 느낌인데, 저는 소프트웨어 개발 해서 다행이에요...
Hacker News 의견
-
소프트웨어 엔지니어가 되는 것은 어렵지 않음. 소프트웨어 엔지니어링은 가장 쉬운 직업 중 하나임. 우리는 너무 보호받고 있어서 이 글에서 설명된 것이 어렵다고 생각하는데, 이는 우리의 직업이 얼마나 어렵지 않은지를 보여주는 증거임
-
소프트웨어가 점점 복잡해짐. 이러한 복잡성은 이유가 있음. 하지만 좋은 이유는 아님. 과거에는 효율성에 대한 인센티브가 있었음. 인재 부족, 대역폭과 컴퓨팅 파워의 부족, 예산의 부족 등이 있었음
-
20년간의 "모두가 프로그래머가 되자"는 움직임, 과도한 자금, 위원회에 의한 설계가 매우 복잡한 세상을 만들어냄
-
30년 경력 동안 앱, 시스템 프레임워크 작업을 했고, 새로운 언어, API, 프레임워크, 도구 등을 배워야 했음. 소프트웨어가 만들어지고 전달되는 방식의 변화도 포함됨: 애자일 개발, 기술 리드 주도, QA에서 무QA, 단위 테스트, 코드 리뷰 등 항상 움직이는 목표임
-
알고 있는 언어: Pascal, C, 6502 어셈블리, C++, Objective-C, Javascript, Swift 등
-
경력 초반에는 메모리 관리, 작고 빠르게 유지하는 것이 중요한 기술이었음. 경력 중반에는 동시성에 대한 전문가가 되어야 했음
-
-
Apple 같은 큰 회사에서는 "좋은" 팀과 "나쁜" 팀이 있었음. 이는 특정 엔지니어에게 상대적임. 내가 싫어하는 팀이 다른 사람에게는 잘 맞을 수 있음
-
"나쁜" 팀에서 몇 년간 일한 후, 심각한 위장 문제를 겪었고 수술이 필요했음. 스트레스를 심각하게 받아들여야 함
-
집을 짓는 것처럼, 전문화가 사라짐. 고등학교 졸업장 이상의 교육이 필요한 직업에서는 다재다능함이 요구됨. 많은 직업이 다양한 기술을 요구함
-
한 사람이 충분한 지식을 가지고 일을 처리할 수 있다면 두 명의 전문가를 고용할 필요가 없음. 건축 회사들이 최소한의 작업만 하는 경우가 많음
-
복잡성의 이유는 FAANG 같은 회사의 이력서 작성, 직업 틈새 시장 구축, 직업 보안 자아도취 때문임. 산업 성숙에 대한 근본적인 무시가 있음
-
좋은 일을 하면 매니저로 승진함. 완전히 다른 일을 배워야 함. 기술을 배우는 데 많은 시간을 보냈지만, "인간을 디버그"하는 능력으로 전환되지 않음
-
오늘날 웹 페이지는 10년 전과 크게 다르지 않음. 그러나 기계는 훨씬 더 복잡하고, 페이지의 다운로드 크기는 더 크고, 반응성은 떨어짐
-
소프트웨어 산업에 대한 이론 중 하나는 성숙한 기술 회사를 관리하는 방법을 아는 사람이 없다는 것임. 기술 세계에서 이력서 중심의 개발이 문제임. 기술 관리자는 이를 감지하고 막아야 하지만, 그렇게 하지 못함
-
몇 가지 프로그래밍 언어와 프레임워크를 배우는 것은 "약간 성가신" 것일 뿐, 어렵지 않음
-
소프트웨어는 인공적임. 물리 과학 분야가 새로운 기술과 해결책을 발견하는 데 더 어려움. 기후 변화, 질병 치료, 지속 가능한 식량 공급 보장과 같은 복잡한 문제 해결은 매우 어려움
-
소프트웨어 엔지니어링은 데이터를 재배치하는 것에 불과함. 강력하지만 물리적 세계의 가장 어려운 문제를 해결하는 것만큼 근본적으로 복잡하지 않음
소프트웨어 엔지니어가 되는 것이 쉽다고? ㅋㅋ 지능지수 최상위여야 할 수 있는 일임. 학원에 30명 와서 살아남은 사람 1~2명인데 되기 쉽다?
학원에서 50% 이상 살아남는 직업이 널리고 널렸습니다. 학원 갈 필요도 없는 직업도 많구요. 그리고 지능은 왜 이야기를 안 하세요? 개발자로 살아남으려면 상위 15% 이내의 지능이어야 하는데 ㅋㅋ
개발자로 살아남는다는게 뭔지 모르겠지만, 적어도 저의 경우엔 상위 1퍼센트 이상 인지능력을 가진 재능들에 둘러싸인건 맞는 것 같습니다.
그런데 지능이라는건 타고나는 것 만으로 결정되는게 아니라 분명히 후천적으로도 뇌가소성으로 향상이 됩니다. 탄생 시 결정되는 부분도 있지만, 그게 전부는 아닙니다. 그리고 소프트웨어 산업에서 지능이 그렇게까지 절대적인 요인인지는 모르겠습니다. 개발을 이해한다는 것 만으로 할 수 있는 일이 굉장히 많습니다. 제 주위 타 전공 학부 출신 또는 학사가 없는 동료들도 엔지니어든 다른 포지션이든 잘만 일하고 있습니다. '관련' 지능이 얼마나 됐"었"는지는 관심이 없습니다.
그리고 개인적으로 학원에서 "살아남는다"는 건 사실 본인의 흥미와 학원의 교육 시스템이 절대적인 영향력을 미친다고 생각합니다. 전형적인 루트, 그러니까 수학이나 공학, 또는 CS 학부를 졸업하고, 또는 대학원까지 진학하고 그런 경로를 따른다면 이건 지난 몇 백 년 동안 증명되고 향상된 교육 시스템이니까 당연히 16주나 32주짜리 학원과는 질과 양이 압도적으로 다릅니다.
그리고 학원에서 아무리 그렇게 압축적으로 가르친다고 하더라도, 본인의 기준이 랩에서 숙식하면서 논문 써오던 석박사 포지션과 동등하지 않으면 실패라면 무조건 실패입니다. 그런 포지션을 원하면 증명된 교육 시스템인 대학원을 진학하면 됩니다. 싫으면 말씀하신 지능에 의존하시면 됩니다. 그 때는 커브의 얼마나 끝자락의 인지능력이 필요할지는 모르겠습니다만.