코딩·개발 – 하재승

개발자 코딩·개발  1월 28일 | 19:00~20:00

하재승 FuriosaAI 시니어 개발자

14년차 개발자로 넥슨, 네오플, 엔씨소프트 등의 게임 개발 관련 일을 했었다. 현재는 퓨리오사AI라는 반도체 회사에서 소프트웨어 스텍을 쌓는 일을 하고 있다.

  • 프로그래밍이란 추상적인 것이 있고, 언어를 통해 그 세계를 배워가는 것

  • 언어가 중요한 게 아니라, 문제 해결에 적합한 언어로 입문하길

  • 슬럼프 없이 꾸준히 성장하기 위해 필요한 것 

  • 코딩 실력을 향상시킬 수 있는 가장 확실한 방법

  • 성장을 가로막는 벽은 자기 자신이 만들어내는 것

  • 코딩에 대한 열정을 잃지 않고 꾸준히 성장하는 데 필요한 한 가지

  • 코딩 잘하는 실력자의 공통된 습관

  • 코딩 인터뷰를 앞둔 이에게 하고픈 말

  • 이해하기 쉬운 코드란 무엇인가

  • 현실 문제를 푸는 것은 강의를 듣는다고 할 수 없어. 스스로 많이 만들어야 할 수 있어

  • 개발자의 성장을 돕는 조직문화

  • 교육 방식이 문제일뿐 코딩은 누구나 할 수 있는 것

 

#코딩 #프로그래밍 #개발 #레벨업 #성장 #학습법

Q.코딩 실력을 키우고 싶습니다. 문제 해결력을 높이는 게 중요할 것 같은데, 꾸준하게 할 수 있는 자료(사이트, 책 등)는 어디서, 어떤 기준으로 구할 수 있을까요? 더불어 좋은 문제란 무엇일까요? 그리고 문제를 풀 때 어느 정도 고민하고 해답(해답이 있다면)을 보는 게 좋은지 궁금합니다

A.‘문제 해결력을 기른다’는 프로그래밍 실력을 올리는 길에 포함되지만, 그게 ‘문제를 푼다’는 걸로 길러지는 건 아니라고 생각합니다.

 

알고리즘 문제를 푸는 능력은 문제 해결 능력의 한 영역을 의미합니다. 특정 종류의 상황을 컴퓨터를 통해 어떻게 표현하고 다룰 것인지, 그리고 그런 방식 간의 차이를 어떻게 비교할 것인지를 연습하게 해줍니다.

 

먼저 알고리즘 문제 풀이 연습에 대해 얘기를 하자면, 자신에게 맞는 수준의 문제를 푸는 게 중요한데, 처음에는 문제의 난이도를 판단할 수 없어 어려울 수 있습니다.

 

일반적으로 알고리즘 교과서로 이야기되는 책의 연습문제를 풀면서 ‘생각하는 방법’을 훈련하는 게 중요합니다. 어려운 문제를 여러 작은 문제로 쪼개서 사고 과정을 쌓아나가는 훈련을 시켜주는 연습문제가 특히 도움이 될 겁니다.

 

어떤 알고리즘 문제를 푼다는 건 문제-정답의 쌍을 외우는 것이 아닙니다. 이 풀이가 어떤 과정을 통해서 나오게 되었는지, 논리적 흐름은 어떻게 되는지 따라가 보고, 그런 기법을 새로운 문제에 적용하는 과정에서 처음 보는 문제도 푸는 능력을 기를 수 있습니다.

 

어떤 특징에 착안해서 접근법을 고려해 보고, 여러 가지 방식들을 시도해 보고, 그 중 의미 있는 방식을 더 깊게 파는 식으로 연습하다 보면 실질적인 ‘문제 해결 능력’도 훈련이 될 것입니다. 알고리즘 해법 하나를 더 아는 것보다 이런 노력이 중요한 거죠.

 

그리고 ‘코딩 실력’은 또 다른 차원의 얘기입니다. 풀어야 할 문제를 발견하고, 불명확한 부분을 정의하고, 제약조건을 설정하는 능력도 필요하고, 그걸 다른 사람과 어떻게 같이 협의하고 진행할지 등의 커뮤니케이션 능력도 중요합니다. 잘 정의된 문제를 푸는 건 상대적으로 쉬운 경우가 많습니다.

Q.앞으로는 기계가 코딩을 하는 시대가 온다고 하는데, 미래의 코딩은 어떻게 변화할 것인지 궁금합니다!

A.푸는 걸 자동화할 수 있는 문제는 기계가 쉽게 풀 수 있지만, 그렇지 않은 것은 사람이 여전히 하게 될 것입니다.

 

기계번역이 레퍼런스 등의 문서는 어느 정도 번역하지만, 감정과 뉘앙스 전달까진 아직 어렵습니다. 이처럼 통찰력과 직관이 필요한 영역까지 전부 기계가 하게 되는 데까지는 시간이 걸릴 것입니다. 이게 가능한 미래가 언제일지는 저도 모르겠네요.

Q.가끔 만들고 싶은 아이디어를 적어두지만 정작 토이 프로젝트로 시작을 하기가 굉장히 어려운 것 같습니다. 그런 어려움을 겪어보신 적 없나요? 시작에 필요한 것은 무엇일까요?

A.저도 아이디어만 기록한 게 몇 십 개는 있습니다. 가끔 답을 잘 모르는 문제에 대해선 뒤집어보는 걸 좋아하는데요. 시작이 어렵다면 끝을 정해놓는 게 도움이 되곤 합니다.

 

주변 사람들에게 이런 걸 만들겠다고 알리거나, 마감을 정해서 이때까지 만든 만큼만 공개를 하겠다와 같은 제약을 두는 거죠. 명확한 목표를 설정하면 매일 할 내용을 구체적으로 정하기 쉬워지고, 작업을 진행하고자 하는 동기도 좀 더 생깁니다.

Q.급진적인 언어를 회사에 도입하는 데 많은 어려움이 있었을 것 같습니다. 그 분야의 개발자 풀이라든가, 교육 커뮤니티의 활성화 여부 등 고려할 게 많았을 것입니다. 그럼에도 불구하고 중요한 프로젝트에 소수의 개발자가 성능을 위해 꼭 도입해야 한다고 주장하면 그 의견을 받아들이는 게 맞을까요?

A.저희 회사는 시작부터 Rust를 사용하기로 결정했었기 때문에 나중에 도입을 위해 추가로 논의하는 등의 일은 없었습니다.

 

실제 프로젝트에서 특정 기술 도입 등에 대한 비용을 산정해 보고 결정할 문제라고 생각합니다. 아무도 경험이 없는 상황에서 도입한다면 프로젝트 일부에만 적용해 본 후 경험을 공유하는 방법도 사용할 수 있습니다.

 

다만, 그런 의견을 내는 분은 프로젝트나 작업에 대한 애정이 큰 분일 수 있는데, 익숙하지 않은 기법이라는 이유로 제안을 거절한다면 그 분의 열정을 빼앗을 수 있습니다.

 

안정적이고 익숙한 방식으로 꾸준히 개발하려는 분과 새로운 방법과 아이디어로 못 풀던 문제를 해결하려는 분이 모두 조화를 이루는 게 좋습니다. 그런 팀이 개발 과정에서 직면하는 여러 어려움을 이겨낼 수 있는 건강한 팀일 테니까요.

Q.Q. 초급 수준의 개발 콘텐츠는 한국어로 많지만, 중/상급 수준의 콘텐츠는 한국어로 거의 없다고 말씀하셨습니다. 영어로라도 중/상급 수준의 개발 콘텐츠를 접할 수 있는 곳을 소개해주실 수 있나요?

A.영상 중간에도 얘기했던 것처럼 각종 콘퍼런스 자료가 유튜브 등에 많이 공개되어 있습니다. 관심 분야의 콘퍼런스를 찾아 사람들이 어떤 내용에 관심을 가지는지 살펴보는 게 도움이 될 것입니다. 유튜브에서 programming conference를 검색하면 여러 영상이 나옵니다. 지금 바로 관심 주제로 검색해 보기 바랍니다.

suhyeoni
2 Comments
  • 김순화

    앞으로는 기계가 코딩을 하는 시대가 온다고 하는데, 미래의 코딩은 어떻게 변화할것인지 궁금합니다!

    2021년 1월 16일 at 10:52 오후 응답
  • 구희엽

    코딩 실력을 키우고 싶은데요. 문제 해결력을 높이는게 중요하다고 하실 것 같은데 꾸준하게 할 수 있는 자료(사이트, 책 등)는 어디서 어떤 기준으로 구하는게 좋을까요? 더불어 좋은 문제란 무엇일까요? 그리고 문제를 풀때 어느 정도 고민하고 해답(해답이 있다면)을 보는게 좋은지 그런 것들이 궁금합닏나.

    2021년 1월 26일 at 3:29 오후 응답

Post a Comment