Skip to main content

개발자의 개똥 철학

개발자의 철학

📌 내가 개발하는 사람으로 어떠한 가치관과 원칙으로 일하는지 돌아봤다.

개발자는 코드로 SW 시스템을 구축하는 일을 한다.
이 일의 본질은 레버리지 가능한 무형 자산의 코드라는 점이라고 생각한다.
기업 입장에서 해당 코드로 만들어진 서비스가 충분히 가치를 창출한다면, 전세계로 무한 복제가 가능하다는 것이다.
(물론 쉽게 가치가 창줄과 현지화/글로벌 라이제이션이 되지 않는다.)

📌 비즈니스가 실패해도 회사와 개인에게 남는 무형자산도 있다.

  • 비즈니스가 망해도 코드는 남는다. 다시 그 코드로 여러 비즈니스를 돌려볼 수 있다.
  • 더 빠르게 실험을 해보고 그리고 더 빨리 망하거나 성공할 수 있는 기반이 쌓이는 것이다.
  • 개발자는 스스로 그 코드를 다룰 수 있는 능력이 지적 자산에 남는다.

📌 그럼 좋은 코드라는 기준도 잡을 수 있다.

  • 사용하기 쉬운 코드. // 몇가지 쉬운 예제로 개발자들이 사용하기 시작한다.

  • 읽기 쉬운 코드. // 코드를 읽으면서 동작이 머리속에 잘 그려진다.

  • 재사용성이 높은 코드. // 객체의 모듈화, 함수의 합성에 용이함.

  • *위 내용 모두 사용하기 쉽고, 읽기 쉬우니 수정도 용이하고, 재사용성이 높으니 생산성을 높여주는 귀결이다.

📌 하기 싫은 일에도 재미를 느끼도록 해야한다. (몰입)

  • 나의 가치관은 쓸모있는 서비스(코드)를 세상에 많이 남기자.
    • 개발자의 철학과 일맥상통한다.
    • 얼마나 무엇을 남길지 구체적으로는 모르겠다.
    • 1.미디어에 영어로 개발 과정을 풀어보기 - 성장하자
    • 2.서비스 플렛폼으로 MMR을 만들어 보는 경험 - 돈벌자
  • 여러가지 토이 프로젝트를 만들어보면서 해보고 싶은거 다 해본다.

개발자의 사고력

개발자의 사고력을 4가지로 분류했다.

  • 1.논리적 사고와 분석적 사고 : 로직 알고리즘, 문제 정의, 비판
  • 2.추상화 능력 : 추상화 모델링, 인터페이스
  • 3.문제 해결 능력 : 현재의 정의된 문제에 대해서 기존의 최적의 해결방안을 잘 끌어오는 것
  • 4.시스템적 사고 : 복잡한 비즈니스 컴포넌트의 큰 그림을 이해하고 상호작용을 이해하는 능력

1. 논리적 사고와 분석적 사고

논리적·분석적 사고는 개발의 가장 기초가 되는 능력입니다. 💻 이는 문제를 작은 단위로 명확하게 분해하고, 각 요소의 인과 관계를 파악하여 합리적인 결론을 도출하는 과정입니다.

  • 로직과 알고리즘: 개발자는 '만약 A라면 B를 실행하고, 그렇지 않으면 C를 실행하라'와 같은 조건문과 반복문을 통해 컴퓨터가 이해할 수 있는 논리적인 절차, 즉 알고리즘을 설계합니다. 이 과정에서 논리적 오류가 발생하면 프로그램은 예상치 못하게 동작하거나 멈추게 됩니다.
  • 문제 정의와 비판적 사고: 주어진 요구사항이 불명확할 때, 개발자는 분석적 사고를 통해 숨겨진 제약 조건이나 예외 상황을 파악하고 문제를 명확하게 재정의합니다. 또한, 자신의 코드나 다른 사람의 코드에 대해 '더 효율적인 방법은 없을까?', '이 로직에 문제는 없는가?'와 같이 비판적으로 검토하며 품질을 향상시킵니다.

결국 이 능력은 버그의 원인을 체계적으로 추적하고, 복잡한 요구사항을 명료하게 정리하여 개발의 첫 단추를 꿰는 데 결정적인 역할을 합니다.

2. 추상화 능력

추상화는 복잡한 현실 세계의 문제를 컴퓨터가 이해할 수 있는 단순한 모델로 만드는 핵심적인 기술입니다. 🎨 이는 불필요한 세부 사항은 숨기고, 문제의 본질적인 부분에만 집중하여 코드의 재사용성과 유지보수성을 높입니다.

  • 추상화 모델링: 예를 들어, '사용자'라는 개념을 다룰 때, 우리는 그들의 나이, 이름, 주소 등 수많은 정보 중 현재 시스템에 필요한 '아이디'와 '비밀번호'만을 추출하여 'User'라는 객체로 모델링할 수 있습니다. 이것이 바로 추상화입니다.
  • 인터페이스: 추상화는 기능의 '무엇'과 '어떻게'를 분리합니다. 예를 들어, 우리는 자동차의 액셀을 밟으면 차가 나아간다는 사실(인터페이스)만 알면 운전할 수 있지, 내부 엔진이 어떻게 동작하는지(구현) 알 필요는 없습니다. 이처럼 잘 설계된 인터페이스는 다른 개발자가 내부 코드를 몰라도 해당 기능을 쉽게 가져다 쓸 수 있게 하여 협업을 원활하게 만듭니다.

추상화 능력이 뛰어난 개발자는 복잡한 시스템을 이해하기 쉬운 여러 개의 부품으로 나누고, 이 부품들이 서로 잘 맞물려 돌아가도록 설계할 수 있습니다.

3. 문제 해결 능력

문제 해결 능력은 눈앞에 닥친 명확한 문제에 대해 가장 효율적이고 안정적인 해결책을 찾아 적용하는 능력입니다. 🚀 이는 단순히 새로운 것을 만들어내는 창의력과는 조금 다릅니다. 이미 검증된 지식과 경험을 바탕으로 최적의 솔루션을 선택하는 실용적인 지혜에 가깝습니다.

예를 들어, '느린 데이터 조회 속도'라는 문제가 발생했을 때, 문제 해결 능력이 뛰어난 개발자는 무작정 코드를 수정하기보다 다음과 같은 과정을 거칩니다.

  1. 원인 분석: 데이터베이스 쿼리의 문제인지, 네트워크 지연인지, 혹은 애플리케이션 로직의 비효율성 때문인지 원인을 먼저 진단합니다.
  2. 해결 방안 탐색: 인덱싱, 쿼리 튜닝, 캐싱 도입, 데이터 구조 변경 등 기존에 알려진 다양한 해결책들을 떠올립니다.
  3. 최적의 선택: 현재 시스템의 상황과 자원, 그리고 예상되는 부작용을 고려하여 가장 적합한 해결책(예: '캐싱 도입')을 선택하고 적용합니다.

이 능력은 방대한 개발 지식과 경험이 쌓일수록 더욱 빛을 발하며, 빠르고 정확하게 문제를 해결하여 서비스의 안정성을 높이는 데 기여합니다.

4. 시스템적 사고

시스템적 사고는 개별적인 코드나 기능을 넘어, 전체 시스템의 상호작용과 큰 그림을 이해하는 능력입니다. 숲을 보지 못하고 나무만 보는 개발에서 벗어나, 내가 작성한 코드가 시스템 전체에 어떤 영향을 미칠지 예측하고 설계하는 것입니다. 🌐

  • 상호작용 이해: 예를 들어, 새로운 기능을 추가할 때 단순히 그 기능의 동작 여부만 보는 것이 아니라, 이로 인해 기존 데이터베이스에 부하가 얼마나 증가할지, 다른 서비스의 응답 시간에 영향을 주지는 않을지 등을 종합적으로 고려합니다.
  • 성능, 확장성, 안정성 고려: 시스템적 사고를 하는 개발자는 "지금 당장은 문제없지만, 사용자가 100배 늘어나도 괜찮을까?"(확장성), "이 기능에 문제가 생기면 전체 서비스가 마비되는 것은 아닐까?"(안정성)와 같은 질문을 스스로에게 던집니다.

이 능력은 특히 시스템의 규모가 커지고 복잡해질수록 중요해집니다. 장기적인 관점에서 유지보수하기 쉽고, 변화에 유연하게 대처할 수 있는 견고한 시스템을 만드는 개발자의 핵심 역량이라고 할 수 있습니다.

  • 아키텍처 설계
  • 시스템의 트레이드 오프 분석