2017년 겨울, 주위 친구들이 사용하는 소프트웨어를 직접 개발해보고 싶다는 열정 하나만으로 모바일 앱 개발에 뛰어들었습니다. 사람과 가장 가까운 소프트웨어가 바로 모바일 앱이라는 관찰에서 도출된 확신이 있었기 때문입니다. 코딩을 처음 배운 지 반년도 안 된 신입생이 어떻게 혼자서 앱을 만드냐는 주위 사람들의 만류에도 불구하고 호기심과 배움에 대한 열정으로 책과 인터넷을 가리지 않고 끈질기게 공부했습니다. 무엇보다 코드 한줄한줄을 직접 작성해보고 스스로에게 여러가지 질문을 던지며 두 눈으로 결과를 확인하면서 실패를 통해 배웠습니다. 처음 앱 개발에 뛰어든지 6개월만에 저는 못났지만 사랑스러운 저의 첫번째 앱 ' Meeting Playlist'(대학생 중심의 미팅 앱)을 완성했고 이는 주위의 모두를 놀라게 만들었습니다. 이렇게 저의 소프트웨어 인생이 시작됩니다.
뿌듯이라는 자기관리 앱을 만들기 위해 지인의 주선을 통해 PM과 처음 만났을 때 우리는 앱의 목적과 최종 사용자를 명확히 정의하기 위해 처음 보는 사이임에도 3시간 이상을 치열하게 대화했습니다. PM과 함께 내 제품, 그리고 내 소비자들에 대해서 세밀하게 상상하는 과정은 전혀 힘들지 않았고 오히려 너무나 재밌었습니다. 이러한 경험은 저를 컴퓨터 앞에서 빠져나와 시장 안으로 직접 뛰어들게 만들었습니다. 몇달동안 PM과 함께 예상 타겟층의 소비자들을 만나기 위해 홍대, 강남, 대치 등을 돌아다니며 수십번이 넘는 2시간 가량의 대면 인터뷰를 진행하였고, 이 과정에서 실제 소비자들의 성향과 패턴이 제가 상상했던 것과 정말 같은지 또 다르다면 구체적으로 어떻게 다른지 확인하기 위해 노력했습니다. 이를 통해 느낀 점은 소비자들은 우리가 책상 위에 앉아 예상했던 대로만 행동하지 않으며, 그들의 니즈는 장기적인 관점에서 환경에 따라 시시각각 변화한다는 것이었습니다. 그리고 이러한 경험을 통해 제품이 아닌 사용자에 초점을 맞출 때 비로소 진정한 가치를 창출할 수 있다는 것을 깨달았습니다. 이후 지금까지 소프트웨어를 만드는 매 순간마다 제 코드를 사용하는 다음 세 사람을 생각하며 코드를 작성합니다. 미래의 나, 나의 동료, 그리고 나의 소비자들.
- 충분히 시간 효율적인가?
항상 작성한 코드가 알고리즘의 시간복잡도 관점에서 최적이 되도록 개선합니다.
우리의 소비자들이 소프트웨어를 사용함에 있어 무의식적으로도 전혀 불편함을 느끼지 않을 정도가 제가 작성해야할 코드의 최소한의 속도라고 생각합니다.
또한 예상치 못한 부하가 생겨도 코드의 안정성을 보장하기 위해 점근적인 관점에서 코드를 분석합니다.
- 충분히 공간 효율적인가?
항상 작성한 코드가 알고리즘의 공간복잡도 관점에서 최적이 되도록 개선합니다.
모바일 기기는 제한된 자원을 효율적으로 이용하는 것이 매우 중요하기 때문에 한 줄의 코드를 작성할 때마다 어느 정도의 메모리가 점유되는지 생각합니다.
만약 과도하게 많은 메모리 할당이 불가피하게 필요하다면 관련 라이브러리나 클라우드 API를 적극적으로 탐색하며 문제를 해결합니다.
- 충분히 가독성이 좋은가?
항상 주석을 달지 않아도 쉽게 읽을 수 있을 정도로 가독성 있는 코드를 짜기 위해 노력합니다.
특정 변수나 함수에 대해 가장 의미 있는 이름이 무엇인지 고민하는 것은 얼마만큼의 시간이 들어도 아깝지 않을 만큼 가치 있는 일이라고 생각합니다.
또한 OOP의 원칙에 입각하여 추상화와 다형성을 이용해 적절한 구조로 코드를 구현함으로써 클린 코드와 클린 아키텍처의 개념을 지향합니다.
- 다른 좋은 대안은 없는가?
항상 제가 선택한 알고리즘 이외에 더 좋은 대안은 없는지 생각합니다.
가치 창출이 그 존재 의의인 엔지니어는 알고리즘을 작성할 때 자신에게 가장 익숙한 방법이 아닌 문제에 가장 적합한 방법을 선택해야 한다고 생각합니다.
따라서 처음 선택한 알고리즘 이외에 다른 검증된 라이브러리나 오픈 소스 코드가 더 효율적이지 않은지 조사하고 공부합니다.
- 모든 질문에 대답할 자신이 있는가?
항상 이 한 줄의 코드를 내 동료에게 보여주었을 때 한치의 부끄럼도 없는지 스스로에게 질문합니다.
위의 4가지 질문뿐만 아니라 내 동료들의 어떤 까다롭고 창의적인 질문에도 대답할 자신이 있는지 생각합니다.
아무리 잘 동작해도 완전히 이해하지 못한 코드는 버그의 원인이 되며 이는 코드의 안정성과 직결되기 때문에 한줄한줄 설명가능한 코드를 작성하려 노력합니다.