Friday, March 9, 2018

소프트웨어가 뭔지 모르는 사람들이 코딩에 대한 질문을 하고 있는 걸 볼 때의 안타까움

우선 소프트웨어 개발이라는 용어에 대해 명확하게 이해한 후에 얘기를 해보고자 한다.

개발을 한다는 건 소프트웨어를 개발한다는 것이고 코딩을 한다는 건 프로그래밍 언어로 스크립트를 작성한다는 얘기다.
소프트웨어 개발과 코딩의 차이는 엄청난 것임에도 불구하고 소프트웨어에 무지한 사람들에게는 두 단어의 차이는 거의 없다고 봐도 될 정도이다.
그냥 특정 프로그램 언어로 코딩해서 실행하면 어떤 결과가 화면에 나오는 것 정도로 이해하고 있을 수 있는데, 사실 이 둘의 차이는 엄청난 것이다.


<당장 Software engineering으로 검색해봐도 나오는 이미지가 이렇다>

개발을 하는 대상이 소프트웨어이므로 소프트웨어 개발은 아래 내용들이 포함되는 걸 얘기한다.

  • 요구사항의 확인, 수집, 분석
  • 소프트웨어로의 개발 계획
  • 요구사항 및 시스템의 설계
  • 구현, 버그 수정, 테스트, 문서화
  • 추가 요구사항에 대한 커스터마이징 및 버전관리, 유지보수
자 이제 내가 얘기하려고 하는 건 위의 내용을 학문적으로 공부해 본 적도 없고 실무에서도 적용해 본 적이 없는 사람들에 대한 얘기다.
안타깝게도 실무 경험은 없지만 학교에서 학문적으로 소프트웨어에 대한 과목을 공부해 본 컴퓨터 관련 학과 전공자 3학년 이상 학생들도 포함되는 얘기다.

네이버의 개발 관련 커뮤니티 까페를 가보면서 많은 사람들의 질문 글들을 보는데, 대부분 안되는 걸 되게 만들고 싶어하는 욕구가 충만한 글들이 대부분이다.
문제는 그 안되는 것들이 조금만 찾아보고 생각해 보면 다 해결할 수 있는 것들이라는 것이다. 사실 그런건 해결해 주면 되고, 다른 사람들도 댓글을 잘 달아주는 편이다.

어? 이게 문제가 아니면 뭐가 문제인거냐? 라고 생각할텐데 내가 안타까워 하는 건 그런 식의 문제 해결이 코딩하는 능력 향상에 매우 방해가 되는 행위라는 것이고, 소프트웨어 개발을 하는 능력 향상에는 전혀 미치지 못한다는 것이 문제라는 것이다. 위에 나열한 소프트웨어 개발 내용 중에 구현에만 해당되는 내용이며 구현에 따라서 다르겠지만 거의 대부분 잘 모르고 구현한다.

잘 모르고 구현한다는게 이해가 안될 수 있는데, 검색해 보면 그들이 원하는 거의 모든 문제의 해결은 best practice 라고 모범 답안 같은게 있다. 이것만 보고 이해한 다음에 자기가 구현하고자 하는 문제 해결에 응용해서 적용하면 해결된다. 이것도 어렵다 하면 기초적인 공부를 더 하는 것이 맞는데도 이 마저도 찾아보지 않고 찾았다고 하더라도 이해를 못하거나 이해를 하려고 하지 않는다. 그런 상태에서 안되는 걸 되게만 하려고 구현하고 있다는 게 잘 모르고 구현한다고 하는 것이다.

그런 질문을 하는 사람들의 다른 글들을 쭉 보면 소프트웨어 공학적인 기법, 설계의 노하우, 테스트, 오류 검증 방법, 성능 향상 이런 것들이 아니다. 반복적이고 단순한 문제를 마치 어려운 것 처럼 계속 질문해 나가고 답변이 달리면 마치 자기가 해결을 한 것 마냥 개발이 잘 되고 있는 것 같은 착각을 한다. 그 후에도 계속 비슷한 패턴의 질문-답변-질문-답변이 이어지는데 그러다 질문이 어느 순간 끊기게 된다. 이유는 예측이 가능하다. 자기가 알던 개발이라는 것이 코딩이 다가 아니라는 걸 깨닫는 순간인 것이다.

결국 그런 사람에게는 다음과 같은 문제점들이 나타나게 되어 있다.

  • 요구사항이 뭔지 모르니까 뭘 만들어야 하는지 정확히 인지가 안되고,
  • 계획을 잡지 않으니 생각대로 진행이 안되고 뒤죽박죽이 된다.
  • 설계라는 걸 하지 않고 구현 먼저 했으니, 구현이 끝난 후에 다시 기존에 구현한 것에 덧붙이거나 다른 기능/모듈과의 연결을 계속해서 구현하기가 힘들어 지고,
  • 버그 수정 능력도 부족한테
  • 테스트라는 것도 할리가 없기 때문에
  • 결론적으로 소프트웨어의 품질이 매우 떨어지게 되어 있다.
게다가 어찌해서 완료를 했다 하더라도 나중에 다시 버전업해서 기능 추가를 하려면 어디서 부터 손을 대야 할지 막막하니까 "그냥 다시 만들자" 라는 얘기가 나오게 된다. 그냥 다시 만들자는 얘기가 나온다는 건 소프트웨어를 아주 잘못 만든 것이다.

그래서 전공자던 비전공자던 일단은 생각한걸 바로 코딩하다가 막힌걸 물어보는걸 먼저 하지 말고 계획과 설계를 최소한 두번 이상 생각해서 문서화 라는 걸 한 후에 해보면 좋겠다는 생각이 든다. 그리고 비슷한 종류의 문제와 고민은 반드시 다른 사람도 겪어본 고민이기 때문에 구글에 검색해 보면 관련된 내용과 사례는 충분히 찾아낼 수 있다. 그래서 사실 그들에게 완벽에 가까운 답변인 "문서화 + 구글 검색" 이라는 얘기를 매우 해주고 싶긴 하지만, 정작 그들에게 필요한건 지금 내가 짠 코드가 안도는 이유(이유라도 알고 이해하면 다행)와 이걸 되게 하려면 어떻게 해야 하는지가 더 중요하다고 생각할 것이다.

나는 그들이 문제해결은 물론이고, 소프트웨어 공학 아니 공학까지 거창하게 갈 필요도 없다 소프트웨어 개발에 대한 이해를 하고 코딩이라는 걸 했으면 한다. 그리고 정말 진심으로 도와주고 싶다. 

다음에 내가 그들을 도와주려는 방법과 실천하는 사례를 얘기해 보려 한다.

No comments:

Post a Comment