1P by GN⁺ 11시간전 | ★ favorite | 댓글 1개
  • 정규 교육은 효율적인 숙련도 전달에는 유용하지만, 예기치 못한 문제 해결을 위한 직관을 개발하는 데는 한계가 있음
  • 목적 있는 반복적 시행착오(알고리듬) 는 실전에서의 실패와 수정 과정을 통해 숙련도를 가장 크게 높이는 요소임
  • 실제 예시에서는 Linus Torvalds, Margaret Hamilton 등 다양한 인물이 실패를 경험하고 극복하면서 뛰어난 능력을 갖추게 되었음
  • 멘토링은 중요한 촉진제이지만, 자기 주도적 실험과 직접 경험이 궁극적 성장의 핵심임
  • 부딪히고 깨지면서 직접 문제를 해결하는 목표 지향적 실험이 진정한 실력 향상의 기반임

최고의 소프트웨어 엔지니어를 만드는 힘: 목적 있는 시행착오

교실 신화

  • 정규 교육은 가치 있는 지식 전수에는 유리하지만, 규모에 맞게 최적화된 과정임
  • 복잡한 실무 경험을 잘 정제한 절차에 담아 한 학기 내에 완료할 수 있는 형태로 전달함
  • 이 과정에서 실무에 필요한 기본 숙련도는 익힐 수 있지만, 예상 밖의 위기에서 문제를 직관적으로 해결하는 역량 구축에는 한계가 존재함
  • 특별히 밤 3시에 실제 서비스 문제 발생 시, 교실에서 배운 레시피만으로는 해결에 부족함

직접 부딪히며 배우는 진짜 성장

모범 사례들

  • Linus Torvalds는 MINIX를 리라이트하며 Linux를 만들었음
  • Margaret Hamilton은 Apollo 프로젝트에서 직접 실시간으로 코드 문제를 수정하면서 현대적 신뢰성 개념을 창시함
  • 수많은 오픈소스 메인테이너들도 자기 노트북을 스스로 망가뜨리고 다시 고치며 성장함
  • 이들은 순차적 강의를 먼저 듣지 않았으며, 실패와 그에 따른 실제 영향 덕분에 깊은 실력을 얻게 되었음

왜 시행착오가 레시피를 앞서는가

  1. 피드백 루프가 즉각적임. 로그에서 크래시를 분석하는 과정이 퀴즈보다 훨씬 빠른 습득을 제공함
  2. 엣지 케이스는 실제 환경에서 자연스럽게 드러나며, 교재에서 상상 못하는 사용 사례를 만남
  3. 어렵게 해결한 문제는 기억에 깊이 남음. 근육 기억으로 자리잡음
  4. 기존 가이드가 없을 때 창의력이 폭발적으로 발휘됨

멘토십의 재조명: 보완제, 대체제가 아님

  • 좋은 멘토는 피드백을 빠르게 해주고 시야를 넓혀주지만, 궁극적으로 실험과 경험의 주체는 본인임
  • 코드 리뷰는 실험 결과를 공유함으로써 가치가 있지만, 직접 경험을 대체하지 않음

자기주도적 실험관습 키우기

  • 스스로를 조금 불안하게 만드는 사이드 프로젝트를 시도함
  • 모든 것을 계측해서 실패 시 분석 가능한 데이터를 확보함
  • 프레임워크 제한 혹은 48시간 내 완성 같은 제약 조건을 두어 창의적 해결력을 기름
  • 코드를 공개하면서 외부의 검증을 받음
  • 주간 단위로 회고를 정리해, 실패 원인과 배운 점을 기록함

정리

  • 멘토십, 강좌, 블로그 등은 촉진제 역할이지만 진짜 실력은 현장에서 치열하게 부딪히는 과정에서 쌓임
  • 최고의 엔지니어는 자유롭고 목적 있는 시행착오를 반복하여 실질적 문제 해결과 성장을 이뤄냄
  • 이 과정에서 얻은 경험이 미래의 자기 자신에게 가장 큰 자산이 됨
Hacker News 의견
  • 나 자신은 독학 개발자로서 대부분의 경력을 대기업에서 CS 전공 동료들과 함께 보냈음
    내 경험상, 독학 개발자는 지능이 충분하다면 결국 주어진 문제를 해결해냄
    CS 전공자는 완전히 낯선 영역에서 아예 시도조차 안 하는 경우가 많음 (물론 성향에 따른 편차 있음, 약 85% 정도에 해당한다고 생각함)
    높은 불확실성 앞에서는 진행을 못 함
    결국 CS 전공자는 대기업 환경에 더 잘 어울림, 대체 가능한 톱니바퀴처럼 패턴대로 일함
    독학 개발자는 언제나 혁신하고, 비효율적 반복을 줄이는 쪽으로 일하며, 이런 독창적인 태도가 주변을 불안하게 만듦
    하지만 이렇게 독학한 사람들이 훨씬 뛰어난 결과를 만들어냄
    대부분의 개발자들은 뛰어난 코드 자체보다는, 고용 유지와 불안을 줄이는 쪽을 더 중시하는 듯함

    • 많은 공식 교육을 받은 엔지니어들도 새로운 문제를 적극적으로 풀려고 함
      이건 독학/공식 교육 이슈라기보다는 호기심, 근면, 창의성, 지능 등 성향 문제임
      독학자는 이런 특성을 반드시 가져야 성공할 수 있으니 그 그룹에서 더 강하게 보이는 것일 수 있음
      공식 교육받은 엔지니어가 이런 특성까지 갖추면, 두 그룹 중 누구보다도 뛰어난 경향이 많음

    • 아마 성격 차이가 가장 클 것 같음
      나 같은 독학 개발자는 성실함을 내세웠음
      '빅픽처'를 기술적으로 잘 보진 못했지만, 그 대신 팀에서 가장 많은 결과물을 내려고 노력함
      여러 프로토타입을 며칠만에 세 개나 만들어서 실전 테스트를 함
      CS 전공 동료들은 화이트보드에서 설계만 한 번 하고 실제 코드는 한 번만 작성함
      두 방식이 똑같은 작업에 시도된 적은 없어서 어느 쪽이 결과가 더 좋은지 말하기 힘듦
      내 머릿속에서는 내 방식이 '실전 테스트'된 방식이라 느껴짐
      CS 방식이 이상적으로 인식된 건 맞음
      하지만 CS 전공 엔지니어들의 멘토링 덕분에 많이 배웠다고 생각함
      10년 정도 업계 경험 쌓으면 출발이 어땠든 결국 비슷해지고, '정답'에 대한 직감도 비슷하게 생김
      아마 내가 좀 미화했거나 일반화한 점 있을 수 있음, 다른 사람들이 답글로 보완해주면 좋겠음

    • 인정함
      대부분의 CS 커리큘럼은 실무와는 상당히 동떨어져 있으니 졸업장이 실력의 즉각적인 지표는 아님
      하지만 CS 졸업자의 85%가 낯선 문제를 못 푼다는 건 도저히 동의 못 하겠음
      CS 도 학위의 미덕이 있다면, 공학 트랙이 높은 지적 역량을 요구하는 엄청난 과목들을 포함한다는 점임
      그 많은 과목들을 통과할 수 있을 만큼의 사람이, 정작 실무 개발에서 못 할 거라곤 생각하기 힘듦
      정말 어려운 개발 영역에 가면 오히려 상당수가 CS 고급 학위를 가진 사람들이라고 봄
      소프트웨어에 대한 깊은 관심이 있으면 이런 특성이 생기는 것 같고, 그 중엔 CS 전공도 많음

    • CS 전공자는 낯선 문제에 도전조차 하지 않는다
      나는 이에 강하게 반박하는 입장임
      나도 독학하다 CS 학위 취득한 케이스임
      예전에 그래프 순회와 루프 탐지 코드를 처음부터 직접 구현하려고 하루종일 삽질한 적 있음
      자료구조/알고리즘 과목 듣고 나선 그런 선택에 2초도 안 걸릴 거였음
      CS 전공자는 정보를 구조적으로 모을 수 있고, 깊게 파야 할 때 논의할 언어도 가짐
      현실적으로 동료들이 진짜 아무것도 안 하고 ‘불가’라고 넘기나?
      내 경험상 업무 책임 회피는 주니어-미들-시니어 구분에 따라 더 달라지는 듯함
      시니어일수록 점점 문제 소유권을 가지니까
      (내가 만든 C 언어 스택 분석기는 C 코드 파싱, 호출 그래프 생성, 최악의 스택 메모리 사용량 산출을 포함했음)

    • 내 경험상 독학자는 자연스럽게 걸러짐
      즉, 낯선 문제도 못 푸는 독학자는 채용조차 안 됨
      정규 교육 출신들은 평범하거나 그 이상이긴 하지만, 압도적이진 않음
      모든 걸 스스로 파악하고, 대학 교육으로 검증까지 마친 사람은 진짜 막강한 실무 파워를 보여줌

  • 핵심은 학습 방식이 아니라 ‘열정’이라고 봄
    동기가 약하면 학습 방식이 무엇이든 한계가 분명함
    이 주제는 수치적으로 논의하기 어려운 측면도 있음
    공식 교육은 기반이 되는 개념들(수학, 하드웨어, OS, 컴파일러 등)을 탄탄히 다질 수 있음
    독학은 목표 지향적이라서, 기본기를 간과하게 될 수도 있음
    무엇을 모르는지조차 모를 때, 제대로 된 멘토(교수, 훌륭한 책)가 있으면 시간 엄청 단축됨
    나를 포함한 많은 엔지니어들이 공식+비공식 학습을 모두 거침
    열정이 있으면 스스로 계속 만들어보게 되고, 공식 학습 외에도 이런저런 실험을 함
    정말 뛰어난 엔지니어를 구분하는 건 교육 방식이 아니라 분명한 열정임
    Linus, Margaret 같은 사례도 결국 엄청난 학구열의 소유자였음

    • 나도 독학 프로그래머로서 확실히 동의
      80년대 8비트 컴퓨터 시절부터 스스로 배웠고, 대학도 안 갔음
      19살에 첫 정규 프로그래밍 직업을 가질 때 이미 9년간 프로그래밍 해왔음
      대부분이 대학 졸업할 때 나는 벌써 15년 가까이 코딩하고 있었음
      그런 열정과 추진력이 무시되기 힘들다고 봄
      지금도 40년 가까이 비슷한 마음으로 소프트웨어를 즐기고 있음
      만드는 자체가 재밌고, 계속 논문도 읽고 업계 흐름을 따라가며, 코드도 여전히 엄청 많이 씀
      다만, 독학자들이 기본기가 없다고 단정하는 인식은 조금 아쉬움
      실제로 많은 독학자들이 학문적 부분도 충분히 흥미롭게 파고듦—어떤 분야냐에 달린 듯
      깊이 있게 공부하는 시간은 부족할 수 있지만, 수십 년 경험이 쌓이면 오히려 학교만 간 사람들보다 기본기가 두꺼운 경우도 많음
      채용/해고 역시 많이 해봤는데, 독학자들이 더 뛰어난 결과를 내는 경우가 많았음
      결국 많이 ‘해본’ 시간이 훨씬 많음—열정이 결국 학습량을 밀어붙임

    • "모르는 걸 모를 때, 누군가 효율적으로 이끌어주는 게 큰 도움이 된다"는 부분 정말 공감
      나는 공식/비공식 중간쯤 되는 케이스임
      고수준 이산수학, 선형대수는 수강하지 않았고, 그래서 배경 지식이 많이 부족함
      어떤 키워드를 검색해야 할지도 모름
      어떤 분야는 진짜 누군가의 지도가 꼭 필요함
      30대 후반에 벡터 수학 프로그램 검증해줄 튜터 구하기도 진짜 힘듦

    • 열정이 독학을 밀어붙이지만, 교실 환경에선 누군가 늘 트랙을 잡아주기 때문에 상대적으로 덜 필요할 수도 있음
      또 '목적 지향' 독학도 있지만, 시스템 자체의 원리를 이해하는 게 목표인 독학자도 있음

    • 누가 강제로 물가로 데려가더라도, 스스로 물가로 간 경험이 없는 건 아님
      독학자는 모두 최소 한 번은 자력으로 물가까지 가본 사람들이라는 점이 일관된 차이라고 봄

    • 나는 공식+독학 혼합형임
      대학 수업을 많이 들었지만 시험을 잘 봐서 졸업장 얻지는 못함
      내가 나머지를 독학으로 익힐 수 있었던 건, 수업으로 기반을 닦아서 가능했던 것임

  • 대학 수업은 정말 훌륭하다고 봄
    아무것도 모를 땐 절대 C의 소켓 API, bash 프로젝트, 분산 시스템, 자료구조, 알고리즘 같은 걸 혼자서 안 파봤을 것임
    실제로 독학자 또는 부트캠프 졸업자를 많이 인터뷰했는데, 이들은 자신이 익숙한 영역만 파거나, 학문적 질문엔 쉽게 무너지는 경향 있음
    반면, 대학에서 제대로 코딩을 안 해본 사람은 실력이 많이 떨어지고, 대학을 다니는 중이더라도 예전에 배운 걸 다 잊어버림
    대학 가기 전에 어느 정도 코딩을 해보는 게 최고의 조합이라고 생각함
    스스로 부딪혀서 느낀 고생이 있어야 대학 강의에서 소개하는 이론적이고 우아한 해법을 진짜 자기 것으로 만듦
    RAII 같은 메모리 관리 실수로 골탕먹은 적이 많을수록 이런 개념에 깊이 공감할 수 있음

    • 부트캠프 졸업자와 독학자는 구분해서 봐야 함
      부트캠프에서도 유능한 사람이 있을 수 있지만, 내가 아는 사람들은 스스로 못 배워서 대학이나 다른 분야로 가려다가, 더 싼 대안이 부트캠프라 선택한 케이스가 많았음
      예전엔 부트캠프도 없었고, 온라인 과정/전통식 학습법도 멀리함
      나는 뭔가 멋진 걸 만들고 싶어서, 교재대로 따라가 재도전하는 것보다 독립적으로 문제를 해결하는 게 더 흥미진진했음
      어린 시절 C를 독학한 이유도, 기존에 나온 자료나 코드로는 못할 일이 있었고, 멋진 결과가 너무 갖고 싶어서 포럼 뒤지고, 문서 읽고, 시행착오로 얻어낼 수밖에 없었음
      공부 방법보다도 배우고자 하는 강한 욕구가 더 중요하다고 봄

    • 대학 가기 전에 이미 C, 소켓 API 능숙했고, 소프트웨어 납품 경험도 있음
      고등학교 때 C64용 게임을 팔아 돈을 번 친구도 있었음
      우리 둘 다 신입보다 실전 코딩 실력은 훨씬 앞서 있었음
      내가 부족했던 건 미적분, 선형대수, 이산수학 등 이론 쪽이었고 데이터구조, 알고리즘도 모르는 거 간간이 있었음
      CS 프로그램이 그런 빈틈을 메워주긴 했지만, 코딩 실력 자체를 올려준 건 아니었음
      프로그래밍 관련 과목은 전혀 어렵지 않았고, 내가 힘들었던 건 오히려 수학과 이론 과목이었음
      CS 프로그램이 나를 더 균형 잡힌 엔지니어로 만들어줬지만, 더 나은 개발자를 만들어준 건 아님

    • 예전 대학 시절, CS 학과 분위기는 요즘 말하는 대학의 장점과 정반대였음

      • 의도적으로 학생을 탈락시키는 수업
      • 교수들이 재미로 고르고 가르치는, 비실용적인 이론 중심 강의
      • 학문 자체를 쉽게 접근할 수 없게 설계
        나도 해당 이유로 대학에서 CS 전공을 선택하지 않았고(현재 미국 테크 기업 시니어 개발자), 당시 CS는 최고 학점만 뽑는 명문대학임에도 불구하고 실패율, 실업률, 교수 분위기 모두 최악이었음
        물론 대학에서 많은 걸 얻은 분도 있지만, 현실은 다 그런 게 아님
        실무에서 만난 많은 CS 졸업생이 커뮤니케이션, 비즈니스 이해, 일 우선순위 잡기에 어려움을 많이 겪음
        코드만 짤 수 있는 경우도 많고(그조차도 실력 떨어짐), 대학 CS 과정 하나로 실무에 완전 대비된 경우는 오히려 드묾
        오히려 대학 강의 방식이야말로 ‘컴포트 존’에 머무는 대표적 사례라고 생각함
    • 대학 수업의 진입/수강료 자체가 사회적, 경제적 계급 문제임도 인정해야 함
      그리고 독학으로도 소켓 API, bash 프로젝트 등 충분히 해본 사람도 있음
      참고로 독학자와 부트캠프 출신은 전혀 다른 유형임
      내가 주어진 상황(오디션 스타일 면접 등)에서는 무너질 수 있지만, 혼자 있을 때 실제 문제는 잘 해결함

    • 약간 꼰대같이 들릴 수 있지만, 나도 예전 대학이 진짜 좋았던 세대임
      컴파일러, 토이 OS, GPS 인터페이스 등 만들었었음
      몇 년 전 다른 학교에서 교수로 초빙받아 가르쳐보니 매우 실망했음
      커리큘럼이 요즘 부트캠프를 몇 년짜리로 늘리고, 별 상관없는 과목만 얹은 느낌이었음
      기본기는 거의 없고, 알고리즘 과목 빼면 전부 React, 현지 스타트업에서 인기있는 프레임워크 위주
      (편집: 실제로 커리큘럼 보니 비즈니스, 경영, 인문, 화학, 환경, 창업, e-스포츠 수업 있음)

  • 자기 교육의 부재를 스스로 받아들이는 과정에 노력을 많이 쏟는 듯함
    뛰어난 독학자도 있고, 똑똑하진 않은 학위자도 있지만, 나 자신의 경험상 CS 학위가 있었다면 내 길에 더 도움이 됐을 거라 생각함
    CS는 본질적으로 코딩이 다가 아니고, ME(기계공학)처럼 직업 별로 기대와 역할이 다름
    기계공학자들도 자동차 오일 누수, 타이어 펑크 같은 소소한 문제는 정비공이 훨씬 잘 고침
    하지만 그걸 이유로 엔지니어 학위를 무시하지는 않음
    나도 처음엔 제조 현장에서 직접 손에 기름 묻혀가며 기술자들이 못 고치는 것도 해결했지만, 그건 개인적 취향과 호기심 때문임

  • 독학자가 뛰어난 성과를 내는 이유는, 바로 그들이 독학자가 될 정도의 동기와 열정, 자기 주도성을 가진 사람들이기 때문임
    결국 호기심, 집중, 규율이 있다면 공식/비공식 관계없이 평균 이상이 됨
    생존자 편향도 작용—실제로 독학하다 현장에서 살아남은 사례만 보게 됨
    반대로 실패한 독학자들은 제대로 된 티칭을 받았다면 더 나았을지도 모름
    나는 CS/수학교육 다 즐겼지만, 프레임으로는 오히려 자기 학습이 더 잘 맞는다고 느낀 케이스임

    • 아무런 통계도 안 나온 상황에선 너무 통계적 오류 걱정할 필요 없다고 생각함
      '종종'이란 단어는 그저 모호함을 포장하는 표현일 뿐임
  • 나는 소프트웨어 개발자이자 대학 CS 강사임
    진짜 성공하는 엔지니어의 공통점은 결국 '관심'과 '열정'임
    독학자는 당연히 해당 분야에 관심이 많으니, 동기 자체가 검증된 집단임
    학위자가 더 혼합적임—순전히 졸업장만 노린 경우, 이론적 용어만 알고 실력 구분 힘들어짐

    • 그게 본질임
      독학자는 본질적으로 기존 체계에서 벗어나서 스스로 공부할 만큼 강한 동기와 관심을 가진 사람임
  • 지식은 보드 위의 원이라고 생각하면 됨
    https://matt.might.net/articles/phd-school-in-pictures/
    대학에서 배우는 원은 놀랄 만큼 좁고, 대체로 동일한 커리큘럼임
    예를 들어 dmc 알고리즘(최강 압축 알고리즘에 쓰이는 것)을 가르칠 시간이 없음
    대신, 모두가 범용적인 커리큘럼만 반복
    근데 그 원 바깥까지 나아간 사람들도 있음
    그런 사람이 업계 최고의 프로그래머임—논문에서나 보는 희귀 알고리즘도 알아서 남다른 실력을 보임
    독학자도 마찬가지; 모두가 배우는 공통 원에서 빠진 지식의 갭을 가질 수 있기에, 종종 자기 동기와 겸손함에서 출발함
    그러나 그들이 가지고 있는 지식의 원은 열정으로 유기적으로 쌓인 것
    이 열정이야말로 엔지니어 성과의 최고 신호라 생각함

  • 다르게 말하면, '독립적으로 무엇을 배워야 할지 스스로 판단하고, 실제로 배우는 능력을 이미 보여준 사람은 그런 역량이 요구되는 일에서 탁월함'

  • Linus Torvalds는 Linux를 만들며 MINIX를 완전히 새로 씀 Margaret Hamilton은 Apollo 프로젝트에서 현대 소프트웨어 신뢰성 개념을 만들어냄
    이 둘 모두 공식 교육을 받은 엔지니어임
    공식 교육은 '실습' 능력까지 포함해 수학적, 공학적 성숙함을 갖출 기회를 제공함

    • Torvalds는 1991년 Linux 첫 버전 공개 당시엔 CS 교육을 거의 따로 받은 적이 없음

    • 나도 공감함
      우리도 학부 과정에서 68K 어셈블리로 멀티프로세스 OS를 직접 짜보는 과제가 있었음
      이런 경험 덕분에 Linux 커널 구조나 동작 원리에 더 쉽게 접근할 수 있었음
      커널이 뭔지도 모르면 시작조차 못했을 테니까

  • 최근에 난 경험 없는 수치해석 문제(희소 LU 소버 만들기)를 스스로 배우려고 시도하고 있음
    가장 유용했던 자료는 직접 구현해보거나 기존 소버 코드를 분해하는 게 아니라, 관련 내용을 다뤘던 강의 노트였음
    강의 전체를 보면 내가 몰랐던 연관 개념까지 알게 됨
    다른 분야도 마찬가지로, 대학 강의 자료가 최고 품질인 경우가 많았음
    대학 수업이 필요없다는 주장이라면, 정작 최고의 자료가 대학 자료란 점을 설명하기 어려움
    직접 만들어보는 게 실력에 가장 좋다는 주장도 있지만, 대학 프로젝트 자체가 항상 '실제 구축'을 평가에 적극 반영함

    • 완전히 동의함
      깊이 있는 기술 서적도 훌륭하지만, 어떤 자세로 접근하냐에 따라 얻는 가치가 완전히 다름
      단순 이론만 배우고 실제 적용이 전혀 없으면 흥미가 떨어지고 금방 다 까먹음
      하지만 실제 필요나 관련된 작업과 연관된 이론을 배우면, 순식간에 꼭 필요한 실무 지식으로 바뀜
      초반에 독학으로 충분히 경험을 쌓은 사람이 대학에 들어가서 열정을 유지한다면, 짧은 시간에 엄청난 것들을 해낼 수 있음

    • 결론적으로, 이론은 당연히 중요함
      다만, 먼저 무언가를 만들어보고 나서 이론을 공부하면, 진짜 인사이트가 뭔지 더 명확히 파악하게 됨