Amitai Schleier
@schmonz@schmonz.com
The year is 2025 and people are still telling me that TDD only works "in theory".
A large-scale study of dev activity in the IDE found that only 1.7% of developers did TDD at least *some* of the time.
This is a number worth remembering when listening to strong opinions - positive or negative - about TDD.
@jasongorman Most of what is called "TDD" these days, is really "not-quite-end to not-quite-end" tests written after the code, by programmers who regard it, justly, as a tedious chore.
It bears no resemblance to our TDD.
@GeePawHill ...and it's often the "TDD" they're talking about when they say "TDD doesn't work in practice"
@jasongorman @GeePawHill then again, TDD also really suffers from No Real Scotsman.
There's probably a term for it but I think TDD reached the point where the term is used so often incorrectly that the term has little value anymore. Like what happened with agile or even Scrum
@mark @GeePawHill I think TDD is pretty clearly defined and it's very easy to tell if someone's doing it.
@mark @GeePawHill The problem has always been that the vast majority of developers have never seen anyone do it. And that's understandable, because - thanks to the "birds of a feather" clustering effect - if you're not in that 1-2% bubble, you're unlikely to get to work with someone who is.
@jasongorman @mark (I don't. Too many fifth rate epigones have destroyed it.)
@GeePawHill @mark It's true that, e.g., YouTube is awash with "TDD tutorials" that don't show TDD. But it's easy to tell that they're not doing TDD 🙂
@mark @jasongorman Fair enough, Mark. But let me ask you, outside of you noticing how our movement turned in to a corrupt nothingness we all decry, be that movement "agile" or "scrum" or "TDD", what would you a) have rather we should have done, vs what we did, and/or b) want us to do now?
There's a very high probability that their opinion's based on no experience - doing or seeing - of TDD at all.
@jasongorman I think the trouble is they have learned the skills from someone, who learned them from someone, who learned them from who knows where. It’s the broken telephone game. Which means that the underlying principles and practices have been pragmatised to nothing.
The conclusion I have come to is people don’t want to learn because they don’t want to think. They want something that “just works” - in other words, they want Fred Brooks’ proverbial silver bullet. We just don’t learn, do we?
@jasongorman Building on this, I think the saddest thing I now realise is many folks don’t want to learn is because what they do is “good enough”. There are simply no consequences since the rewards for doing things right are delayed, and invisible to the annual accounts bottom line. Eg. things like reliability, failure demand, downtime, cost of change etc
@jasongorman well I read the book … ok I read the book’s title … ok I haven’t actually developed code in 20 years. I don’t see how TDD can work. 🙄
@jasongorman actually @schmonz started helping me with TDD (his oldest son’s age) years ago.
@jasongorman I recently worked with a PM that does “Practical Agile” because “Agile only works in theory”.
Of course “Practical Agile” was just codeword for waterfall.
Strong suspicion I could swap out #macOS for #Linux, do better with #Minecraft and most everything else, and not do much worse at macOS-specific stuff like #GarageBand and Messages under #OSXKVM (https://github.com/kholia/OSX-KVM).
Anyone done this, or something similar?
@schmonz ooh! I have a 2017 iMac that is quite long in the tooth. This might be a good idea for it, too.
@schmonz The kvm for osx doesn't support the gpu. macOS uses gpu acceleration for basic ui, this makes anything beyond ssh'ing into the vm for programming tasks a horrible experience. If you need Messages and GarageBand it won't end well.
@schmonz Last I checked, and it's been a while since I have, gpu passthru required 2 gpus and a board that supports passthru.
Just spent some time converting 11 years worth of resume updates into a Git repository.
I had an existing Git repo for this that contained... one commit.
One of the advantages that Git has over some other SCMs is that you can declare a specific date that the commit will record. In other words, you can lie to Git about when you're committing a tree and it will record the date and time you give it.
This is handy for making retroactively building Git repos for archival purposes.
Put another way, you don't have to do it the old-fashioned way:
MyResume-20230115.pdf
MyResume-20230823.pdf
MyResume-20241212.docx
You can use the mtime of the file as the Git author date/commit date and check-in "MyResume.pdf" and the metadata of when that file was edited will be recorded in the commit. And nowhere else, so don't think "git checkout" will preserve this mtime for you.
This means (1) fewer stray DOC/PDF/TEX files in your ~/resumes directory with "guess what I was for" names like "Resume_send-to-Gary_at_TechnoCorp-20220404.doc", (2) having an archive of your documents, and (3) the ability to use branches to track to whom you're sending your resumes.
You can keep your resume naming simple and maintain multiple concurrent Git branches for TechnoCorp, FAANG, goverment positions, et cetera.
I do wish other SCMs had this ability and made it more prevalent or well-known. I settled on Git because I know Git does this. Other investigations I've made into competitors haven't ended with any good equivalent workflows.
Programmatically it's easy to just run "git add Resume.doc" and "git commit -m 'checkin'" but that will lose any tribal knowledge you have about why you wrote that specific resume, so caveat emptor.
In my opinion, the only two resumes that matter are your last one and your next one. If you want to maintain different flavors of resume based on different career goals, you can still do this, either with different file names, directory names, or branch names.
One of the reasons I've been putting off this project was the mild annoyance of having to write the tools to do the finding, renaming, and committing. I spent a little time this morning asking ChatGPT to give me Perl scripts.
While "opendir(); while (readdir()); closedir();" is a pattern I've written countless times[0], I just didn't feel like writing it yet again from scratch, and I couldn't remember any recent script I could scoop out and repurpose. So ChatGPT it was, and after reading its code, it looked good enough to try and I was pleased to find it did exactly what it said on the tin.
While Perl has a reputation for being a write-only language, AI tools are quickly making it a "write-never" language, easy enough to generate one-off scripts that can be read, reviewed, run, and then pushed into a repo for reuse or eventual abandonment.
At the very least this process isn't also taking 30 minutes of my time I'll never get back.
[0] Or, as I prefer, IO::Dir->new, etc, etc.
Experiences with #dreckly / #pkgsrc on obscure Unixes:
#UnixWare - bootstrap succeeded! Just needed a few simple fixes.
#OpenServer - see UnixWare.
#BSDOS - kernel panic during installation. Support incomplete.
#HPUX - kernel panic during installation.
#QNX - bootstrap success! No changes needed.
#Haiku - bootstrap failed due to open() behaviour. "Invalid argument".
If you have a shell on an #IRIX or #HPUX machine, please let me know!
@washbear this is all good, but I don't understand why we'd support Irix, but say hard luck if you use older #NetBSD (even the oldest supported branch such as 9 when we get to the time when 11 is branched). To be clear I am in favour of supporting both.
I will try to boot my Irix on my Indigo2 though if I can.
@jmcwhatever @washbear Perhaps I'll try #pkgsrc on RISCiX just to really piss myself off. I remember it being painful to get GCC running on Irix back in 1995, I can't see it having got better since.
@jmcwhatever @sborrill @washbear And that's why the IRIXNet people eventually gave up and went for rpm https://forums.irixnet.org/thread-2072.html
@sehnsucht @jmcwhatever @sborrill The bootstrap version of awk was also a big problem on other platforms - it seems it got updated over the years without the consideration for keeping bootstrap on old platforms in working order.
@washbear I've been trying to get pkgsrc to bootstrap on HP-UX 11.11 (11i v1) on PA-RISC. I did not succeed because I'm an idiot.
@thomholwerda @washbear Do you have some way to allow other people access to the machine, for example with ssh?
@sehnsucht @netbsd We have an HP9000/715 running HP/UX 9.04 with guest access https://connect.sdf.org
- Things always go as you, your teammates, and your customers expect, or
- Nobody cares about the costs when they don’t
@schmonz
- You're never going to come back to this code/system.
@gdinwiddie @schmonz There are times where TDD is an investment today that gives me a corpus of tests that might be useful in the future.
There are times when TDD helps me go faster today. This hour. In the next minute.
@JayBazuzi @schmonz
Yeah, I had a manager who gave me a last-minute feature that "had to go out tonight" and said to skip my usual testing to save time. I wrote it TDD because that was the fastest way I knew to work. What I didn't write was tests at the UI level.
As we were leaving, his phone buzzed because the build failed. I had forgotten to check in one new file. ;-)
:; jq -r '.id' < $(ag -l 'six thirty twelve meters' ~/sites/schmonz.com/snac/data/user/schmonz/public)
https://schmonz.com/snac/schmonz/p/1743383179.235112
@schmonz I just "discovered" snac on Friday, set up my instance on Saturday and suddenly I'm seeing posts about how everyone is using it. Damned Baader-Meinhof phenomenon.
@schmonz um well ok
@schmonz you're the real snac
@schmonz
"Understand only what we are taught?"
No, curiosity can lead us to understand new things without a teacher.
#PairProgramming (if you'd like to) #TDD #JUnit5 #Kotlin #Java
What's Greencently, you very reasonably want to know? https://github.com/schmonz/junit-greencently
A start: https://github.com/schmonz/junit-greencently/commit/99bd02f4757923faa1fcc12e103a9e967fabdd19
https://github.com/schmonz/junit-greencently/issues/4#issuecomment-2810303244
Let's see how this setup pans out: https://schmonz.com/2025/04/15/sensible-basic-minecraft-hosting/
Does this inhibit actions we think we don't want taken?
Does it afford actions we think we do?
Will this inhibit or afford an action to change what we inhibit or afford?
How will we find out whether we ought to change what we inhibit or afford?
✨ New blog post: "STF Milestone 3: Release verification and automation"
A major goal of the @sovtechfund is to help projects become more sustainable and decrease their truck factor. For #JUnit, one activity in desperate need of improvement in this area was performing a release. Prior to this milestone, all JUnit releases of the past years had been performed from my local computer. It was high time to change that!
https://marcphilipp.de/blog/2025/04/01/stf-milestone-3-release-verification-and-automation/
A new #blog post appears!
I built a native GCC 14.2.0 for Mac OS X 10.4 Tiger PowerPC.
https://briancallahan.net/blog/20250329.html
#macos #macosx #tiger #powerpc #power #unix #bsd #freebsd #openbsd #netbsd #dragonflybsd #linux #solaris #illumos #gcc #llvm #clang #compiler #compilers #assembler #linker #toolchain #freesoftware #opensource #gnu
@schmonz my favorite thing about spikes is that planned or not they happen, so save yourself the trouble and plan them in!
@schmonz i prefer continually playing the cure on repeat, sorry ;)
What have I missed?
Also, how often might I need to send other server commands?
@schmonz That's how I would do it (but I would use execline's trap command 😉)
Also, Minecraft is written in Java? Oof, that shows its age.
@schmonz infinisil wrote a pretty incredible automatic config a few years back https://github.com/infinisil/on-demand-minecraft
Maybe that helps. Since it starts the server on demand and serializes & stops it after 15 mins or so.
Today I became a student and I will graduate (which I never did) after one spoken conversation in Swedish and a thesis work with lower academic standards than my publications. I already started the thesis and expect to graduate in June.
I feel so many things about this. Happy that schools know how to score the budget they need, without lowering the bar they have. Awful on switch from uni to vocational. Horrible on customers thinking this matters when I’m part of bids.
@schmonz have two decades on that, and it’s hard to imagine it’s more than a story of versatile paths, and persistence. I always loved a story though. It’s funny how this will make the question of my school background the Finnish IT magazine always tries to capture in article info boxes even harder.
#!/bin/sh
set -emain() {
:
}main "$@"
exit $?
@schmonz I notice an unnecessary indirection
@schmonz It was great to catch up with you on Monday :) Maybe we can meet in person if you’re ever back in Europe.
When I was a consultant, I chose to get rusty with technologies rather than with team skills — and I'd choose the same a million more times.
@schmonz Why are you presenting it as an either/or choice? I work alone most of the time (which means I'm not practicing team skills) and I still manage to get rusty with technologies too!
@schmonz
New account on your own server?
(Before that, I was nervous I wouldn't get it done before the old instance goes offline in a few days: https://octodon.social/@CobaltVelvet/112897672123037837)
@schmonz
Ahh, self hosting: the joy of knowing you can set things up the way you want; the drudgery of knowing you have to set things up the way you want. 🥹