클린코드라는 개념을 아직 명확히 읽고 오지 않아서
클린코드 개념까지는 설명하지는 못하겠지만
간결한 코드 최대한 적은 줄로 작성한 코드가 최적의 코드는 아니다.
현업에 있었던 김에
현업에서 들은 유머 아닌 유머를 같이 이야기 하고 싶다.
과제 : 'Hello World' 를 10번 출력하라!
요즘 말로 1줄 요약을 해서 어떤 결과가 나왔는지를 설명 하겠다.
대충 어떤 코딩이 나왔을지 설명만 들어도 어렴풋이 이해할 거라 믿는다.
1년차 이내 신입 개발자
'Hello World' 를 10번 출력한다.
3년차 이내 초급 개발자
반복문을 10번 수행해서 'Hello World' 를 출력한다.
5년차 중급 개발자
반복문만이 아니라 클래스를 구현하고
Collenction이나 Iterator등 다양한 객체를 이용한 펑션을
호출해서 'Hello World' 를 출력한다.
7년차 고급 개발자
서버와 클라이언트를 구현하고
서비스를 통해 예외 처리를 수행하고
동기 혹은 비동기 처리를 통해서 'Hello World' 를 출력한다.
20년차 고인물 개발자
'Hello World' 를 10번 출력한다.
과장인것 처럼 보이지만 과장 맞다.
하지만 100% 허위 과장은 아니고 일리가 있는 과장이다.
제목에서 이야기했지만 프로그램은 아무리 잘 짜놔도
실무에서는 온갖 예기치 못한 에러가 나온다.
게다가 컴퓨터는 멍청해서
예외 처리를 하지 않으면 자바건 파이썬이건 C# 이건
키보드 자판 하나만 잘못 눌러도 에러로 죽어버린다.
코딩 테스트 내용들을 보면 누가 더 간결하고 심플하게
필요한 알고리즘만 싹 하고 발라내서 아름답게 짜는가
그런 쪽으로만 중점이 맞춰져 있는데
현업에서 그렇게 아름답게 백지 위에 알고리즘만 있는
코드를 짰다가는 천하의 쌍욕을 먹는다.
이 때 혼나는 이유는 단 한 가지
프로그램 구현로직이 잘못 되어서가 아니라 예외 처리등을 하지 않아서
입력 오류, 처리 오류, 출력 오류 등 사용자에게서 입력을 받아서 결과값을 출력하기 까지 나올 수 있는 모든 상황에서 오류에 대한 경고 메시지가 없으면 며느리도 시어머니도 문제의 원인을 모르는 정체불명의 프로그램이 되어 버린다.
개발자로 재직 하던 당시 프로그램들을 찬찬히 살펴보면
뭐하러 이렇게 전임자는 과도하게 클래스를 세분화 하고
에러 처리 조건등을 덕지 덕지 달아놨지 하고
그래서 심플하게 딱 기능만 구현한 프로그램을 짰다가
나중에 현장에서 에러가 발생해서 에러 처리를 하고 나서
한참 뒤에 열어보면 복붙 수준은 아니더라도
전임자와 별반 다를 바 없는 코드가 만들어져 있었다.
개발자 년차가 올라갈 수록 클래스를 추가하고
클라이언트와 서버를 분리하고 서비스를 연동하고 뭔가 자꾸 추가되는 것이
프로그램 스킬이 늘었다고 과시하는게 결코 아니라는 것을 보여주는 반증이다.
그런데 아이러니하게도 20년차 정도 고인물 수준이 되면
처음 신입과 마찬가지로 간결하게 코드를 짠다.
이 점은 의견이 좀 갈리는데
20년 전에 개발하던 사람이라 예전 고전적 방식으로 하는 것이다
혹은 고작 'Hello World' 10번을 출력하는데 거창하게 클래스나 객체, 서비스 같은 것을 구현하는 것이 필요 없어서 그런 것이다
양쪽 다 일리 있는 말이다.
프로그램은 예를 들어 1 + 1 = 2 이렇게 출력값만 제대로 받을 수 있다면
뭐로 가도 서울만 가면 된다고 굳이 거추장 스러운 과정을 덕지 덕지 달아놓을 필요가 없고 그 클래스 간 이동, 예외 사항을 처리하기 위한 이동간의 트래픽이 모두 다 시스템 자원이고 처리 응답 속도에 포함되기 때문에
가장 빠른 처리방법은 정말로 'Hello World'를 10번 출력하게 하는 것이 가장 빠르다.
사용자 입력만 원하는 상황에 맞춰서 100% 정확하게 받을 수 있다면 예외 처리고 뭐고 다 필요없다.
그런데 그렇개 못하는 이유는
사용자 입력만이 문제가 아니기 때문이다.
갑자기 전산 입력 시스템이 문제가 생겼는데
확인해보니 서버실에 코끼리가 와서 서버를 밟고 지나갔다더라
물론 이것은 아주 과대망상을 한 것이지만
정말 살다 보면 별의별 장애상항을 다 보게된다.
가장 흔하게는 정전을 들 수 있고 그밖에도 랜섬웨어라던가
정말로 천재지변이 발생해서 서버실이 날아갔다던가 등등
지극히 현실적인 예시로
요새 핫한 비트코인 거래 관련 예시를 들어보자.
일론 머스크가 앞으로는 테슬라에서
비트코인으로 거래를 하지 않겠다 이 한마디를 했는데
원금 회수를 위해 사용자들의 트래픽이 폭주하는 바람에
서버가 다운되서 거래소가 멈춘다던가
또 다른 예시로는
최근의 알 수 없는 서버상 문제로
카카오톡이랑 유튜브 등이 정상적인 서비스를 하지 못하고
수시간 멈춰버린 일련의 사건들을 보면
프로그램이 아무리 잘 되어 있다고 하더라도 항상 뜻대로 흘러가지는 않는다는 것이다.
최근 여러가지 언어를 통해 프로그래밍을 이것 저것 해보면서 느끼는 것은
물론 본인의 프로그래밍 스킬이라던지 실력이 부족한 것은 문제이지만
문제 해결 및 대처 능력을 키우는 것이 더 중요하게 느껴진다.
그러기 위해서는 코딩 만큼이나 많은 자료들을 보고
이론적인 부분들을 숙지하는 것이 필요하다.
그렇다고 해서 공무원 시험 보듯이 달달 외우기만 하는
저 복장 터지는 탁상행정에 원론적인 답변만 해오는 망할 공무원들 같은 공부가 아니라
A 라고 하는 문제 상황은
A의 A_1 이라고 하는 태생적인 구조적 한계 때문에
발생하는 것이기 때문에
B라는 대안이 필요하며B라는 대안을 현장에 제시하기 위해서는
C 라는 제반사항들에 대해서도 검토해 보아야 한다
어느 멘토의 말을 빌려서 말하면
프로그램은 개발보다 유지보수 하는데 더 많은 비용과 노력이 발생한다.
프로그램은 지속적으로 개선해 나가야 하고 한번 개발이 완료되었다고 해서
수정 없이 유지되는 프로그램이란 없다 라는 것을 말하면서
이 글을 마무리한다.
T.I.L 만 작성하다가 싫증이 나서
과거에 있었던 일과 현재 상황을 통해서 하고싶은 말들이 하고 싶어졌다.
좋은 글 감사합니다