2025
Notes on Myself: The book starts with Keith talking about himself. It begins with him talking about how he felt so creative and inspired as a child, and was disappointed to see that everything seemed to become colorless and dull as he got older. This childlike state he calls "the visionary world".…
four-issues-facing-fp A selling point of functional programming is that it's supposed to be simpler. But is it really? Of all the mainstream functional programming languages, Haskell is the functionalest, and it ended up being (famously) difficult to learn. It turns out that Haskell is both simpler…
The Game Design of Math Academy Math Academy is a very good website for learning math. It's essentially a package manager for mathematical knowledge. But what makes it so fascinating to me is its excellent game design. I've never seen a better example of gamification in learning. My major in college…
automated testing in bevy Most videogames don't have much in the way of testing. The only big-budget one I know of that has publicly put a large effort into it is Sea of Thieves. My favorite open-source game, Mindustry, does have some but they're not super prevalent either. Why is this? Is testing…
a better lerp for smooth movement Game developers often use linear interpolation (Lerp) as a very easy way to get smoother movement. However, the traditional Mathf.Lerp can lead to framerate-dependent behavior. Enter "Zeno's lerp" - a frame-rate independent alternative. The Problem with Traditional…
a hackers case for crypto So there's been a lot of people talking about cryptocurrency. But I noticed that the pro-cryptocurrency people focus on things I think are irrelevant, and the anti-cryptocurrency people are often unaware of what I consider to be the most exciting parts of cryptocurrencies.…
How Side-Effects Work in FP When you think about functional programming, you might think of banning mutation, or of functions without side effects. But in my opinion, the fundamental idea of FP is equational reasoning. That is, this code: Should mean the same thing as: Put explicitly: If you write x…
floating-points-between-zero-and-one I saw this comment on Hacker News the other day: The number of floats between 0 and 1 is the same as the number of floats between 1 and 3 No, the number of floats between 0 and 1 is (approximately) the same as the number of floats between 1 and positive infinity.…
The Good and Bad of C++ as a Rust Dev I'm a professional Rust programmer and I admit I'm a bit of an evangelist. So you can imagine my pain when my little sister with very little programming experience said she wanted me to teach her C++. I tried to explain that one day she'll be debugging segfaults…
how I think of the expression problem The expression problem is a fundamental problem in programming language design. It is extremely simple, unsolved, and every programming language exhibits it. It is also extremely simple! However, it has a fearsome reputation. Many have tried to understand it and…
Setting up a media server Setting up a media server sounded easy: You have a server, it has movies, it sends your device a movie. Little did I know, I was about to descend into my own personal hell. I'm writing this to encourage you not to follow in my footsteps and to just buy movies on Apple TV…
My new Rust binary search Good programmers use good tools, and binary search is one of the most important tools in your toolbox. That's why you shouldn't accept anything less than the very finest binary search implementations. You want a binary search that is absolutely reliable and returns the…
levers in the brain There's a principle that I've not seen written down anywhere, but I'd describe it as "the levers in the tool should resemble as closely as possible the levers in the user's brain". What I mean by that is, when we have the choice between a "direct" implementation and an…
Error-Driven Development It is often said that the compilation time of compiled languages slows down development. It makes sense - any time you make a change and want to see the results, you have to wait for your code to compile. If you were using an interpreted language, you could run it and see…
I'm so glad I started learning music Music came before art and language. It's one of the most ancient parts of our psyche. So how sad is it that most people only sing in the shower, if they sing at all? When you turn on the radio, you hear some of the most optimized songs ever made. They're catchy,…
solving-macro Capitalist economies have sometimes seem prone to large recessions. The Market Monetarist school of thought says that this is not an inherent feature of capitalism, but instead a feature of our current regulatory system and monetary policy regime. Can the right monetary policy make the…
What's Wrong With A for Loop? In a Rust project I'm working on, we have some code that looks like this: It's a behemoth expression that spans 24 lines. It could easily be rewritten as a for loop, and many developers would prefer it that way. But once you get used to it, writing code in this style is…
my-rustfmt-toml You can configure rustfmt by adding a rustfmt.toml file to your project. The full list of configuration options are on the rustfmt homepage, but these are my preferences: Why these? This is the latest edition of Rust. If you have a cargo.toml, rustfmt will read the edition from…
git collapse commits So you want to contribute your change to your favorite open-source software. Seems pretty easy. Fork the project on github, hack hack hack, push your changes to your branch, and PR. Couldn't be simpler. Or could it? Well, if your experience with open source is anything like…
Semaglutide has changed the world 100 years ago, there were virtually no obese people. Now, there are. What happened? One thing that changed is that economic growth made food much cheaper and better-tasting. People also probably get less exercise now. So, the theory goes: some people in this…
my-mse-experience Here's a pic of my skull before MSE: And after: Note the screws! They're the yellow bits that can be seen them through my airway in the second pic. That scan was taken right before I got my device taken out. My teeth are a bit wonky now, but my invisalign should straighten them out…
chewier-foods-for-children 85% of Americans over the course of their lifetime will have their third molars, also known as their wisdom teeth, removed. In supply chain management, a fun game to play is “five whys”. It means that when there’s a problem, you try to ask “why” at least five times to get…
Chad Nauseam Home Contact me via Twitter, Discord, or email. cool-stickers Here in chicago, stickers are everywhere. I love them. Often they're advertisements, but sometimes they're just something that someone made and stuck somewhere, just because they wanted to. The stickers I'm talking about…
Cool People In no particular order :P Élie Michel I discovered him through the Learn WebGPU for C++ tutorial. I was stunned by the quality of the tutorial and the effort that must have been put in - everything that should have been annoying (setting up emscripten, choosing between webgpu-native and…
지난 6월달에 열린 DDD eXchange의 키노트에서 에릭 에반스가 도메인 주도 설계의 개요를 설명하면서 모델이란 무엇이고 책 출간 이후 기술 변천에 따라 DDD는 어떤 의미가 되었는지 발표했습니다. 모델이 무엇인지 지도를 사용해서 설명하는 데 모델은 현실을 그대로 반영하는 게 아닐 뿐 아니라 완벽할 필요도 없다는 얘기가 인상적입니다. 발표 내내 이벤트 소싱은 여러번 강조했고, 역시나 (요즘 인기있는) 마이크로서비스를 가지고 제한적 컨텍스트(Bounded Context) 약 파는 것도 잊지 않았습니다. 약 한 달 전에 회사 동료와…
저는 소프트웨어가 점차 사회의 핵심 요소로 사용되는 만큼 소프트웨어 개발자도 중요한 역할을 맡게 되었으니 전문가 의식을 가지고 그 역할에 맞는 행동을 해야 한다고 생각합니다. 대부분 개발자도 회사에 고용이 되어 일을 합니다. 하지만, 일반 노동자의 경우 고용자가 생산 수단을 제공하고 노동자는 단지 이 생산 수단을 운영하는데 필요한 노동력을 제공하는 것이 주인 것과 달리 소프트웨어 개발자(그리고 다른 지식 노동자)는 자신이 가진 지식과 지능으로 제품을 만들기 때문에 그 지위도 고용인과 대등한 관계에 있다고 볼 수 있습니다. 저는 이런…
이 글은 에츠허르 W. 데이크스트라가 1999년에 16년간 가르치던 오스틴 텍사스 대학에서 은퇴하고 2년 후 대학에서 프로그래밍 입문 과정에 자바를 가르치기로 했다는 소식을 듣고 대학에 보낸 편지(원문)입니다. 데이크스트라는 이 편지를 보낸 다음 해에 암으로 사망합니다. 예산 위원회 회원들에게 학부 프로그래밍 입문 교과의 함수형 언어 하스켈을 명령형 언어인 자바로 바꾸려고 한다는 소문 때문에, 그리고 예산 위원회가 잘못된 수준에서 이 결정이 내려지지 않도록 책임져야 한다고 생각해서 이 글을 씁니다. 여러분도 알다시피 이는 사소한…
페이스북에 공유된 “[번역]OOP를 빨리 잊을 수록 여러분과 여러분의 소프트웨어에 좋습니다“라는 글의 제목을 보고 누르면서 데이크스트라 옹이 인용되었겠거니 했는데 역시나 그렇다. 데이크스트라옹은 코드의 정확성(?)을 중요하게 생각하는 사람이었고 수학처럼 증명을 하면서 엄격하게 코드를 쌓아 올라가는 편을 선호했다. 그리고 그는 OOP란 아이디어를 별로 좋아하지 않았다. 반면에 OOP를 창안한 앨런 케이는 조금 더 실용적인 편이었고 데이크스트라가 지나치게 엄격하다고 비판하기도 했다. 암튼, 이 글은 유효할지 모르나 유용하진 않다. 글을…
저는 컴퓨터 과학 전공자가 아닙니다. 워낙 호기심이 많고 몰입하는 성향이라서 어릴 때 애호가로 프로그래밍을 시작했다가 전공을 버리고 프로그래머로 사회생활을 시작한 사람입니다. 그래서 체계적으로 이론 먼저 배우기 보다는 몸으로 먼저 익히고 나중에 이론을 배우면 정리를 하는 편입니다. 재귀 호출도 저에게는 그와 같은 사례 중 하나 입니다. 어릴 때 이런 저런 프로그래밍 관련 지식을 배우면서 알게 되었고 자연스럽게 익혀서 쓰는 기법입니다. 어떤 문제는 재귀가 아니면 쉽게 푸는 방법을 전혀 모르기도 합니다. 시간이 된다면 이 문제를 하나…
회사는 재화나 서비스를 고객에게 제공하고 이윤을 내야 할 사명이 있는 조직입니다. 이윤을 내지 못하는 회사는 본연의 사명을 잘 감수하지 못하는 나쁜 회사입니다. 따라서 회사의 모든 구성원은 회사의 이윤을 극대화하고 지속가능하게 하는데 기여해야 하고 모든 에너지를 그곳에 집중시켜야 하는 것은 이론의 여지가 없는 명제입니다. 이는 IT 조직도 예외가 아니어서 대부분의 회사는 IT 조직이 사업에 밀착해서 최적화되어 일하도록 강하게 요청합니다. 사업의 목표를 이해함은 물론이고 사업의 요청에 충실해야 하며 비용 효율화를 달성해야 하고…
존경하는 최범균님께서 얼마 전에 “면접이 이리 어려워서야“라는 글을 쓰셨습니다. 범균님은 몇몇 회사에서 SW 개발자를 뽑으면서 지나치게 높고 폭넓은 수준의 역량을 요구하는 것 같다면서 그런 사람을 뽑고 싶은 마음은 이해하지만 그런 사람이 세상이 몇이나 되겠냐며 현실에 맞춘 기준이 필요하지 않냐고 제안하십니다. 글을 읽으면서 이 비판(나쁜 의미가 아닌)에 일부 동의하면서도 제가 비판 대상의 일부임을 솔직히 인정하지 않을 수 없었습니다. 그래서 약간의 변명이 필요하다는 생각이 들었습니다. 사실 저는 이렇게 다른 사람의 주장을 논박하면서…
스티브 맥코넬은 우리 컴퓨터 업계에는 주기적으로 골드 러시가 일어난다고 했다. 기술 혁신이 계속되고 새로운 기술이 부침을 거듭고 이에 따라 새로운 기회가 열리며 이 기회를 잡으려고 사람들이 우루르 달려드는 일이 반복된다는 것이다. 그러다 보니 새로운 금광이 발견되었다는 소식을 빨리 접하고 남들보다 먼저 깃발을 꼽는 것이 소프트웨어 개발자를 포함한 컴퓨터 관련 종사자의 중요한 생존 전략이 되어 버렸다. 심지어 어떤 (전직) 개발자는 직접 금은 캐지는 않고 금을 찾으려고 혈안이 된 개발자에게 새 금광 소식을 전하거나 금광 채굴단을…
해커와 화가의 폴 그레이엄이 2001년 4월에 쓴 “Java’s Cover“라는 글을 번역했습니다. 오해가 있을까 싶어 번역 의도를 말한다면, 저자의 자바에 대한 생각과 상관 없이, 외관으로 특정 기술을 평가하는 능력의 중요성에 대해서 동의할 뿐 아니라 이 글을 썼을 당시보다 새로운 기술이 쏟아져 나오는 속도가 훨씬 빨라졌기 때문에 이런 능력의 중요성이 더욱 커졌기 때문입니다. 15년 정도가 지난 지금 자바가 어떤 길을 걸어 왔는지 정리해 보는 것도 재미있을 것 같아서 그 글을 작성해 보기 전에 이글을 먼저 번역한 측면도 있습니다.…
폴 그레이엄이 오래 전에 작성했던 What Languages Fix란 글을 번역했습니다. 읽어 보시면 알겠지만 그냥 재미로 읽고 넘길 내용입니다. 케빈 켈러허(Kevin Kelleher)가 프로그래밍 언어를 비교하는 재미있는 방법을 제안했다. 각 언어가 해결하려는 문제를 적어 보자는 것이다. 이 방식으로 많은 언어가 정말 잘 설명되는 것을 보고 놀랐다. 알골(Algol): 어셈블리 언어는 너무 하부 수준이야. Algol: Assembly language is too low-level. 파스칼(Pascal): 알골은 데이터 타입이…
작년에 처음 들었는데, 무척 흥미롭고, 얼마나 퍼질지, 경향으로 자리 잡을 수 있을지 지켜보는 용어가 하나 있습니다. 언프레임워크(Unframework)라는 용어에요. 이 용어는 작년에 cujoJS를 통해서 처음 접했습니다. 그리고 금년엔 구글에서 “unframework”이라고 입력하면 Flourish가 가장 먼저 검색되네요. 잠깐 검색해 봤을 때, 아직 아주 저명한 분들이 권위 있는 의미를 실어서 사용했다거나, 공통된 의미로 사용한다거나 하지는 않은 것 같지만 대략 다음과 같은 의미로 사용되는 것 같습니다. 작은 애플리케이션이라서…
TechSource에 올라온 “Top 50 Programming Quotes of All Time“이란 글을 번역했습니다. “오늘날 프로그래밍은 바보도 문제없이 쓸 수 있는 프로그램을 더 거대하고 더 낫게 구축하려 애쓰는 소프트웨어 기술자와 더 거대하고 더 나은 바보를 만들려는 우주의 경쟁이다. 지금까지는 우주가 이기고 있다.” “Programming today is a race between software engineers striving to build bigger and better idiot-proof programs,…
기관총은 여러 면에서 인류의 역사를 바꿔놓은 발명품으로 인정받는다. 비단 전쟁의 역사뿐이 아니다. 기관총과 더불어 수탈의 역사, 야만의 역사, 학살의 역사, 식민 제국주의의 역사가 활짝 펼쳐지게 되었다. 화약과 총알을 총구 앞쪽에서 집어넣고 열심히 쑤시던 전장식 소총방식에서 좀 더 간편하지만 여전히 비슷한 메카니즘으로 동작하던 후장식 소총이 개발되었지만 보병들의 최고의 미덕은 변함없이 원샷 원킬에 돌격 앞으로~였다. 전장식보다 후장식이 편하긴 하지만 이 정도는 전장에서 승패를 가름짓는 큰 차이로 작용하지 못했다. 하지만 분당…
"세계는 바뀌었고, 우리는 패배했다" 이 말을 한 사진 속 미모의 여성은 아이돌 스타가 아니다. 강남에서 우연히 사진에 찍힌 어느 얼짱 여대생은 더 더욱 아니다. 사진 속에서 환하게 웃고 있는 이 일본인 여성은 세상에서 가장 과격했던 테러집단을 이끌었던 리더였으며, 이 말은 그녀가 2001년 4월 옥중에서 남긴 말이다. 그리고 이 말이 가진 의의는 크다. 1991년 소련 연방의 해체가 공산주의의 실존적 토대를 무너뜨렸다면, 마지막까지 무장투쟁의 미련을 버리지 못했던 공산주의 혁명 전사들에게 체념을 안겨준 말이 바로 그녀의 이 말…
<맥가이버 칼>로 알려진 스위스제 만능 칼이 있다. 최대 48가지 기능을 가지고 있어 캠퍼(Camper)들의 머스트 해브 아이템이기도 한 이 칼의 공식 명칭은 <스위스 아미 나이프>다. (빅토리녹스사의 128년 장수 히트상품, 스위스 아미 나이프) 이 이름은 1891년부터 스위스 군대가 정식으로 이 칼을 장병들에게 보급하면서 붙여진 이름이다. 득템만 하면 폭발물 해체에서 가구조립까지 다양하게 활용할 수 있는 이 나이프는, 제2차 세계대전 기간 연합군 병사들의 폭발적인 수요에 힘입어 세계적 명성을 얻게 되었다. 한국에서는 미드…
No articles.