Herewith notes from the white-hot center of the Internet software profession. Maybe the reality these reflect prevails across other technology territories, but I wouldn’t know. In no particular order:
Videoconferencing · Generally it sucks. There’s Skype ’n’ TeamViewer ’n’ Zoom ’n’ Webex ’n’ our own Chime ’n’ GoToMeeting ’n’ join.me and they all suck in their own unlovable idiosyncratic ways. The visual glitches I can tolerate, but the audio problems make me want to scream; dropouts, static, echoes, the noise of hands softly leafing through a document drowning out any non-booming voice.
In my decades-long career, I’ve used one videoconferencing system that was reliable and almost always Just Worked. It was by Polycom, but then the infrastructure people said “super old school” and replaced it with something modern that often doesn’t. I suspect darkly that the technology is passable but a bean-counter somewhere has refused to buy enough bandwidth to make it sing? Blecch.
Screens · The amount of screen real-estate per geek grows monotonically. Dual-27" screens plus your laptop’s own screen are table stakes, and I’m seeing the occasional massive 50"-plus 4K screen. I asked one guy “How can you use all that space?” He said “I can’t of course, all the stuff I’m actively working on is in the middle third, bottom half. But having everything else within visible reach is such a win.” OK then.
I have to admit that I’m becoming increasingly conscious that the pixels on my curved 34" Dell U3415W are in fact visible, and the contrast between that and my Retina laptop screens is a perceptible irritant. #FirstWorldProblem.
Desks · The proportion that are motorized is higher every quarter. I’d find it hard to live without mine. The mix of people standing and sitting makes the otherwise-dreary rows of software-engineer desks a little easier on the eye, which welcomes disorderly human distributions.
Office space · Since I mentioned it: All the high-tech companies I’ve worked for have resolutely ignored the research I hear about that seems to say putting expensive engineers out on the floor with no separating walls leads to grievous productivity losses. Isn’t this biz supposed to be data-driven?
Diversity · We do work on the problem, but the gender ratios are still not good.
If you can get past that (I can’t) there are grounds for good cheer. Here in Vancouver we draw from the very considerable Canadian talent pool, but our immigration law lets us hire major distributed-systems talent from almost anywhere in the world. The resulting mix actually makes me feel optimistic about humanity; the AWS Service groups that surround me offer visible in-the-flesh proof that there’s plenty of software talent in any ethnic, linguistic, or geographic slice across the membership of Homo sapiens.
I’m amused that when chance lands two engineers on a problem who happen to share a native tongue, they immediately drop out of English and into Polish or some south-central Han dialect or whatever it is Nigerian geeks speak to each other. There’s this one group near me that has three guys named Muhammad; one them is called by his actual name, then there’s “Mo” and “Momo”. It seems to work, and by the way Momo seems to be the leading expert on AWS Region Build Automation, which is a big freaking hairy deal around here. Protip to the industry: If you’re not recruiting out of West Africa, you’re missing out on major engineering talent.
Darkness · I’m talking about screens. What with the advent of Mojave, light text on a dark background has officially re-entered the GUI mainstream. But more or less all the younger engineers had already switched their IDEs over to light-on-dark. My white-background IntelliJ and Goland screens mark me as a dinosaur.
I’ve cared deeply about typography and presentation for a long time and the issues here are interesting. I freely acknowledge that my preference for dark-on-light is probably an artifact of my having tuned my brain, in my youth, to ink-on-paper. Since screens are, at the end of the day, light-displaying devices, there’s an argument that the natural on-screen design language for typography and information display is light-on-dark. I wonder if there’s quantitative research in the space?
Speaking of IDEs · I guess the big story is the decline of Eclipse from “more or less everybody’s default” to “there are still people using it”. VS Code has momentum but IntelliJ has a plenty of loyalists, and then the front-end tribe are often in Atom and Sublime. I’m happy to report that neither Vim nor Emacs have gone away. But recently our license server was having problems and I couldn’t use Goland and found the Emacs go-mode story pretty weak.
Speaking of languages · It’s no secret that the Internet still runs, more than anything else, on Java. Could be worse, I remember when it all ran on PHP and Perl. And I don’t want to diss Java too much. The tooling story is exceptional, and once your JVM gets properly warmed up, there’s nothing that runs usefully faster. And these days, for new stuff you should spell Java “Kotlin”. Especially since if you let those young pups who won’t get off my lawn use Java, they’ll emit all this Java 8+ stream/lambda stuff that is easy to make indecipherable.
What’s happening out on the front-end frontier, the Cambrian explosion of JS-based technologies, makes me happy that I mostly don’t go there.
On the back end where I live, we’ve got Go and Rust creeping in big-time. I’m no longer surprised when I pull up some package buried deep in our serverless infrastructure and it turns out to be in Go. Well, and for serverless code too, if only because of the fast startup.
If you live in the world of ML or data science, you’re using Python; you don’t have a choice and it’s not terrible.
Then Rust, for when you get close to the metal. There was an internal new-languages thread where someone said “If you can’t tolerate GC, use Rust. Otherwise use Go.” Sounds reasonable. A few zealots are saying everything new should be in Rust because otherwise you’re being wilfullly unsafe. But I like having the runtime manage memory for me, whenever I can get away with it.
Inside the software · REST is still a really good way to piece pieces of the software world together. Of course, what with the rise of HTTP/2 and QUIC, what the programmer thinks of as RESTful requests are something quite other, out on the wire. This feels about like us thinking we’re using x86 instructions on our silicon even though what the circuits are doing is really totally different.
To the extent that interfaces aren’t REST, they’re mostly event streams of one kind or another. Where by “Event” I mean “JSON blob”; by and large good enough. This is the area I’m working on this year, lots of opportunities for improvement.
The good news: Each generation of devs that comes along is a little more test-infected than its predecessors. I still run across islands of ignorance where they think it’s OK to ship code now and do the unit tests later (as if that ever happens), but less and less each year.
Which computers? · Still more Macs than anything else, although there’s an undeniable Windows renaissance. Having said that, even the smart people with the coolest Surface devices are often bitching about problems with things called “drivers” — what are those for, anyhow? — and lockups, and saying “Sorry, just a moment while I get my computer going”.
If I were a little less aged and cynical, I’d be boiling over with anger at Apple’s inexcusable stewardship of the Mac franchise; Gruber’s “D” grade is maybe even generous. This is a product that used to feature instant wake-up (gone), MagSafe (gone), lots of useful I/O ports including SD card readers (gone), a good built-in photo editor (gone), and the world’s best keyboards (gone). It absolutely shocks me that a company can get away with making its product successively worse and then worse again, year after year. Among other things it speaks to how good the core design of MacOS is.
But maybe 2020 is the year of Linux on the desktop?