2P by neo 3달전 | favorite | 댓글 1개

Go는 나의 망치, 모든 것이 못

소개

  • Markus는 혼자 일하는 개발자이자 디지털 제품 제작자임
  • 팀 없이 혼자 일하며 유연한 업무 방식을 추구함
  • 복잡한 기술 스택을 피하고 고객에게 가치를 제공하는 데 집중함

Go를 선택한 이유

이유 1: Go는 거의 모든 것을 할 수 있음

  • Go는 단순하고 읽기 쉬우며 일관성이 있음
  • CLI, 클라우드 인프라, HTTP 서버, 네트워크 작업 등 다양한 용도로 사용 가능함
  • Nintendo Switch 게임, GUI 앱, 터미널 문자열 신디사이저 등도 Go로 개발 가능함

이유 2: 컨텍스트 전환 감소

  • 여러 프로그래밍 언어를 사용하면 문법 전환에 어려움이 있음
  • 하나의 언어만 사용하면 이러한 문제를 피할 수 있음
  • 언어, 컴파일러, IDE, 툴체인, 커뮤니티 등 여러 요소를 관리하기 쉬움

이유 3: 깊이 있는 지식

  • 하나의 언어에 집중하면 더 깊이 있는 지식을 쌓을 수 있음
  • 여러 언어를 다루는 것보다 한 언어에 집중하는 것이 더 생산적임
  • 소프트웨어 개발의 복잡성을 줄이는 데 도움을 줌

결론

  • Markus는 Go를 사용하여 다양한 프로젝트를 성공적으로 수행하고 있음
  • Go에 대한 깊이 있는 지식을 통해 생산성을 높이고 있음
  • Go를 통해 다양한 도전 과제를 해결할 수 있음

GN⁺의 정리

  • Markus는 혼자 일하는 개발자로서 Go를 선택하여 복잡성을 줄이고 생산성을 높임
  • Go는 다양한 용도로 사용 가능하며, 단순하고 일관성이 있어 관리하기 쉬움
  • 하나의 언어에 집중하면 깊이 있는 지식을 쌓을 수 있으며, 여러 언어를 다루는 것보다 더 효율적임
  • Go를 통해 다양한 프로젝트를 성공적으로 수행할 수 있으며, 이는 다른 개발자들에게도 유용할 수 있음
Hacker News 의견
  • Go를 사용하여 금융 데이터를 처리하는 회사에서 일한 경험이 있음

    • 동료들이 CSV 파일을 집계하거나 데이터베이스를 업데이트하는 등의 일회성 작업에 Go를 사용하는 것을 불편하게 여김
    • Pandas를 사용하지 않고 기본 알고리즘을 직접 구현하는 동료들을 보며 신뢰하기 어려웠음
    • 회사의 시간 낭비라고 생각했으며, Go가 충분하다는 것을 보여주려는 자존심 문제로 보였음
  • 언어를 제대로 배우는 비용을 과소평가하는 사람들이 많음

    • 언어를 "알고 있다"고 말할 수 있는 수준에 도달하는 데 2-4년이 걸림
    • 언어, 컴파일러, 런타임, 표준 라이브러리, 관용적인 방법을 이해하는 데 8-10년이 걸림
    • 이 기간 동안 언어의 사용 방식을 발전시키고 초보자를 빠르게 훈련시킬 수 있음
  • Go는 거의 모든 작업에 적합하다고 생각함

    • Go를 사용할 때 생산성이 매우 높음
    • 프로젝트가 100줄을 넘으면 Python보다 더 나음
    • Go의 장점:
      • 언어가 매우 간단함
      • 핵심 라이브러리가 잘 설계됨
      • 도구 체인과 핵심 라이브러리만으로 대부분의 작업을 처리할 수 있음
  • Go는 개인 프로젝트에 적합하지 않다고 생각함

    • 코드가 장황하고 간단한 작업도 많은 코드를 작성해야 함
    • 적절한 열거형, 합집합 타입, null 안전성 등이 부족함
    • 이러한 이유로 개인 프로젝트에서는 재미를 느끼지 못함
  • Typescript와 Rust를 선호함

    • Deno와 Typescript는 Go보다 더 다재다능한 도구임
    • Typescript는 더 안전하고 인체공학적이지만 약간 느림
    • Rust는 더 안전하고 빠르지만 배우기 어려움
    • Typescript의 장점:
      • null 안전성
      • 널리 지원되는 제네릭
      • 차별화된 유니언 타입
      • 안전한 동시성
      • 컬렉션/이터레이터 메서드
    • Go의 장점:
      • 크기와 메모리 사용 측면에서 더 효율적임
      • Go의 GC가 V8보다 나음
      • CPU 바운드 작업에서 더 빠름
      • 더 큰 표준 라이브러리
  • Go와 Typescript를 사용해봤지만 Kotlin/JVM을 선호함

    • Gradle/Maven의 이분법과 빌드 시스템의 불안감이 있지만, 언어 기능과 런타임 측면에서 매우 만족함
  • Go는 만능 도구라고 생각함

    • 모든 것이 간단하고 사용하기 쉬움
    • 외부 도구를 많이 사용하지 않고도 간단한 명령으로 컴파일하고 배포할 수 있음
    • 다른 언어들도 장점이 있지만, Go만큼 간단하고 번거롭지 않음
  • Go를 좋아하지만 사랑하지는 않음

    • 도구 체계가 엉망이라고 생각함
    • Go 모듈이 완성되지 않은 느낌임
    • 제네릭이 아직 원시적임
    • 생태계가 미완성이라고 느껴짐
  • Go의 대부분의 측면을 좋아하지만, 수치 코드를 많이 작성하는 사람으로서 연산자 오버로딩이 없는 것이 단점임

    • Python과 C++을 계속 사용 중임
    • Rust는 C++ 대체로 매력적이지만, Python을 대체하기에는 규칙이 너무 많음
  • 인생은 한 가지에 능숙해지기에도 짧기 때문에 신중하게 선택해야 함

    • Go를 선택한 이유:
      • 놀라운 표준 라이브러리
      • 읽고 쓰기 간단함
      • 단일 정적 바이너리 빌드
      • 컨테이너가 필요 없음
      • 어디서나 사용 가능 (웹 개발, 데스크탑 앱, 게임 개발, 임베디드 등)