had kind of a long rant on twitter today that i felt was important. reproduced here slightly modified for format.
the more i write code & interact with others’, the more i become convinced that abstraction is incredibly dangerous & a two-edged sword.
underpinning 90% of nontrivial bugs i see is a fundamental lack of understanding of how an abstracted component works. abstraction can easily lead to devs having a black-box mentality and utterly ballooning code complexity.
one thing i’ve done that has kept my code much, much more manageable than a lot projects i’ve seen is simply to implement everything i can. on my own. and it’s easy to cry “reinventing the wheel”&mdashl
—but at the end of the day my code has extremely minimal dependencies, i understand how every moving part works, and because i can tailor the implementation to my needs it can very easily work better than something designed to be more generic.
Twine is a massive unhosted JS app for interactive storytelling that has tons and tons of dependencies & requires node.js & a node build tool chain. the results were bulky, full of hacky HTML, and easily breakable. unsatisfied with the available options, i wrote my own.
my compiler was around ~600 lines of C++, has no dependencies outside the C compiler and stdlib (and even then only for string classes), runs in milliseconds and produces very optimal output.
also i wrote the whole thing in under 24 hours.
why is this? fundamentally the underlying problem is not a complex one. it’s something computers are extremely well-suited to handling.
but we don’t do that anymore. we’ve learned to code by stringing together libraries and bludgeoning generic solutions and writing masses of glue code instead of just solving the problem ourselves.
i was talking earlier about the trimet mobile ticket application and scorning it vocally. fundamentally the underlying problem is extremely simple! the only abstraction needed is for network access, GUIs, and arguably message serialization. i could write something like it in a week (i’ve done it before) but this company GlobalSherpa manages to expend tons of (mostly-)man-hours on this thing, hacking it together out of JS, spit, and prayers, when a native Java app would be perfectly sufficient, tiny in comparison, and much, MUCH more responsive and usable.
we don’t know how to solve problems anymore.
we’ve learned to outsource them instead.
very capitalist of us.
computer tech is getting better. it’s getting more and more powerful and capable and clever. and in the meantime software is getting lazier and fractured and more and more disorganized. by 2050 i am comfortable predicting that the average personal computer will be less usable and less functional than a 1980s mainframe because the hardware will be buried under a maze of bulky, badly-architected software.
i’m clinging to arch linux because it’s the last vestige of the old ways, where systems were built on an underlying design principle instead of hacked and glued together out of available components.
because that’s the other thing. in the FOSS world, new software just doesn’t seem to get written. projects are forked, old software is cloned, but there are close to zero genuinely new or interesting projects around. i ended up writing nitasema because there simply was NO tool that could accomplish what i wanted. twine was the closest but even it fell laughably short.
and the few new projects i do see are often just pieces of glue for other existing systems.
tech is just broken and i feel so utterly powerless to do anything about it.
there are a billion and one tetris and pacman clones out there. the number of new ideas, genuinely new games? vanishingly small.
and yet we just keep churning out clone after clone after clone.
i’m so tired of it.
i want a community that’s creative. that looks at a C++ compiler and sees the same beautiful, overwhelming skein of potential for creativity i do. instead of just staring at the screen with dull eyes and going “uh imma write an(other) Atari emulator” or whatever.
we can do so much better. the hoi polloi have never had access to the kind of tools we do now, and we’re squandering them on pointless shit.
it makes me fucking sad.