[GN#244] 소프트웨어 개발에서 배운 교훈들
스웨덴 스톡홀름에서 30년 넘게 개발자로 일하고 있는 Henrik Warne가 "소프트웨어 개발에서 배운 교훈들"을 정리했습니다. 최소한의 기능만 갖춘 간단한 버전부터 작게 시작해서 확장하며, 로깅과 에러처리는 꼭 조기에 추가하고, 변경은 한 번에 하나씩 해야 문제를 찾기 쉬우며, 세상 모든 일이 그렇지만 특히 프로그래밍은 생각보다 오래 걸린다는 것을 염두에 두라고 이야기합니다. "처음부터 올바르게"라는 접근 방식보다는 "버그는 항상 존재한다"라는 생각을 가지는 게 좋고, 테스트와 문제 해결 시에 우연의 일치는 없다고 가정하고 더 조사하고 테스트해 봐야 하며, 채팅이나 메일보다는 대면으로 이야기하고, 누군가의 공로를 적극적으로 언급하라는 협력 방법까지 들어있습니다. "실용주의 프로그래머" 책을 통해 유명해진 "러버덕 디버깅"은 문제에 막혔을 때 그냥 동료에게 문제를 설명하는 것만으로도 해결책을 깨닫게 되는데 이게 놀라울 정도로 잘 동작한다며 추천합니다. 책 한 권으로 봐야 할 내용을 간추려서 본 느낌이었어요. 꼭 읽어보시기 바랍니다.
ㅤ
1BRC(1 Billion Row Challenge) 는 10억 행이 있는 텍스트 파일에서 온도 측정값을 읽어 관측소별 최소/평균/최대 온도를 최대한 빠르게 처리하는 챌린지입니다. 레드햇에서 Devezium 프로젝트를 이끌었던 Gunnar Morling이 제안한 것인데요. Java가 얼마나 빠른지 알아보기 위해 다양한 구현을 만들어보자는 취지로 시작한 것인데, 이게 흥미로웠는지 Rust, Go, C++ 등으로 다양한 구현들이 이어졌습니다. 심지어는 DuckDB 와 Postgres/Clickhouse 등에서 SQL로 처리하기도 했습니다. 그중에 "Ben Hoyt가 1BRC를 Go로 구현"하면서 1분 45초의 첫 구현부터, 최종 4초에 처리하기까지 9단계를 하나하나 설명한 글을 적었는데 매우 흥미롭습니다. 온도 파싱을 위해 strconv.ParseFloat을 제거하고 자체 코드로 바꿔서 35초가 빨라졌고, Go의 맵 대신 사용자 정의 해시테이블로 바꿔서 16초를 단축, 부동 소수점 연산을 피하고, bytes.cut 과 bufio.Scanner등을 제거하는 등 이런 모든 최적화를 다 결합한 뒤 병렬처리해서 3.99초 까지 단축했네요. 원래 Gunnar Morling의 Repo에는 GraalVM을 만든 Thomas Wuerthinger가 Java로 0.953초에 처리하는 코드도 제출했으니 한번 둘러보시기 바랍니다.
ㅤ
✓ Feedback : 긱뉴스 위클리 어떻게 읽고 계신가요? 의견과 제안 부탁드려요
ㅤ
✓ Show GN - 직접 만드신 오픈소스나, 재직중인 스타트업의 제품/서비스를 소개해주세요
- Fedify: Deno로 만든 ActivityPub 서버 프레임워크
- 리포지토리, 협업도구에서 Credential / Secret 노출을 막는 방법
- 닮은 연예인 찾기 AI서비스 업데이트
- 우리에겐 음악이 늘 필요하다 | LA DrugStore | 플레이스트 공유서비스
✓ Ask GN - 다양한 질문을 올려주세요.
✓ 사내 커뮤니케이션 도구에 GeekNews Bot을 추가해서 멤버들과 함께 새 글을 받아보세요
ㅤ→ Slack봇, 잔디봇, Teams봇, Discord봇, 구글 챗 봇, Swit 봇
✓ 긱뉴스는 RSS로도 구독 가능합니다
✓ 주위분들께 긱뉴스 위클리 - https://news.hada.io/weekly 뉴스레터를 추천해 주세요.
매주 월요일 아침, 지난 일주일간의 GeekNews 중 엄선한 뉴스들을 이메일로 보내드립니다.
- 소프트웨어 개발에서 배운 교훈들
- Go로 10억 행 처리하기 도전: 9개의 방법으로 1분45초에서 4초로 단축
- Ente - E2E 암호화 지원하는 구글 포토/애플 i포토 대체제 오픈소스
- 쿠버네티스를 싫어하는 이들을 위한 안내서
- 개발 직무 지원자를 위한 글쓰기 조언
- 종이에 인쇄하기 위한 CSS 정리
- Eloquent JavaScript(자바스크립트 스킬업) 4판 (2024년)"
- PQL - Pipelined Query Language
- 기술팀이 자주 간과하는 DevOps 20가지 모범 사례
- Deno, JSR(JavaScript Registry) 공개 베타 시작
- Claude 3 모델 공개
- dockerc - Docker 이미지를 스탠드얼론 포터블 바이너리로 컴파일하는 도구
- Stable Diffusion 3 연구 논문 공개
- SD-Forge-LayerDiffuse - 스테이블 디퓨전 XL을 사용하여 투명 이미지 생성하기
- 70B 언어 모델을 집에서 파인튜닝하기
- 리더십, 마약과 같은 중독성을 지닌 현상
- VersionFox - 크로스 플랫폼 & 확장 가능한 SDK 버전 관리자
- AI, 코드, 인간의 협업을 통한 대용량 JS 파일 리팩토링 경험
- Google DeepMind, "생성형 인터랙티브 환경" Genie 공개
- Dada - 새로운 실험적 프로그래밍 언어
- 리눅스/윈도우/macOS에서 사용가능한 애플뮤직앱
- FDA, 최초의 처방전 없이 구매 가능한 연속 혈당 모니터 'Continuous Glucose Monitor' 승인
- Television for Vision Pro
- AWS, 외부 클라우드/온프레미스로 이전시 데이터 전송 비용 면제
- Cloudflare, AI용 방화벽 발표
- Supermium - 윈 2003/XP/7/8 등을 위한 크로미엄 브라우저 포크