Writing
Issue #47: Rust
Adrian and I take rather distinct approaches to Rust in this issue. I learned the language from Programming Rust: Fast, Safe Systems Development but you couldn't tell from the article as I talk about the value in future-proofing existing code over abandoning for the Great Rewrite. Adrian used his signature line: a whistle-stop tour of the ecosystem.
Around the web
'The best thing we can do today to JavaScript is to retire it,' says JSON creator Douglas Crockford
Now that the JS people and the non-JS people agree that JS needs to go, maybe we can do something about it. I actually like JS-the-language well enough, but like many 90s or earlier languages you have to keep a set of rules in your head like "don't use this keyword" (I personally am OK with using this
keyword but plenty of JS devs find that problematic too) and "this operation will yield nonsensical results".
And, unfortunately, Javascript's biggest problem today isn't the language (TypeScript is a good upgrade among many good upgrades): it's the ecosystem. As soon as you pull in any dependencies from npm
, forget being able to understand your software bill of materials or to audit your project for security or license compliance.
GeePaw Hill on Twitter: "I spoze the historic and ongoing inability/unwillingness of the software trade to grasp and adopt test-driven development (TDD) is one of the most frustrating & demoralizing events of my forty-two years as a professional geek."
In this thread, GeePaw Hill contextualises the introduction of TDD to explain why it didn’t have the impact it could have. This sort of analysis is crucial, and often lacking: ideas often succeed or fail not (only) because they are good or bad but (also) because something else was happening at the time.
Hill notes, among other factors, that personal computing was “done” at TDD o’clock and that SaaS was just getting started. This changed both the community’s receptiveness to TDD, and the extent to which it could make a difference.
Iran reveals use of cryptocurrency to pay for imports
Most of the promises of cryptocurrency turn out to be bogus: it doesn’t function well as a store of value, it doesn’t function well as a medium of exchange, and it doesn’t typically function well as an unregulated liberal market either. Finally the cryptanarchists’ stopped watches are correct: although maybe it’s a bit of a stretch to hear “you can make whatever trades you want free from state interference” and accept “a state can make whatever trades it wants free from your interference” as a valid implementation.
I’m going to take a rare step outside the authorial voice here and assert some credential authority. While I am indeed quite negative on cryptocurrency, it comes from a position of open-mindedness and research. I was in a bitcoin working group at a previous employer, and attended (without submitting the coursework) Stanford’s CS251 course. I’m in tech communities where people rag on things they don’t like from a self-professed position of ignorance, and I don’t think that this lends itself to quality discussion, so I just wanted to make the claim that I have actually engaged with this topic.
How to Freaking Find Great Developers By Having Them Read Code
Consider hiring people who can read your existing code. As you’ll find out in this month’s De Programmatica Ipsum, I think this is a really important skill.
how to stop being "terminally online"
This looks like a really useful exercise to go through. There are many great resources online and many useful contributions one could make, as long as we are being intentional about it.
C23 is Finished: Here is What is on the Menu
Everybody’s favourite language that is actually used by people gets a new version.
Effects of malloc and free on C APIs
Any memory management approach—with the exception of full automatic garbage collection—leaks into the interfaces you provide (full automatic garbage collection merely leaks into the implementations). If you're lucky, this can be indicated by machine: what you're getting back here is a shared pointer, drop the reference when you're done and everything will be well.
If you're moderately lucky, then it will be indicated by convention: if you see the word new
or init
in a method name, you're taking ownership of the return value. But of course in many cases you're unlucky and you just have to read the documentation to work out what to do.