Better Is Not Good

Note: an early draft imported from heavily broken LinkedIn draft (they must have done a lossy migration in the past 10 years). Leaving it pretty much as it is with light edits for clarity and formatting.

I’ve been programming for more than 25 years now, almost 20 of it professionally. As with many of us it started as a hobby and then somebody offered to pay me for it and here I am. But in these 25+ years, I have to be honest and say that I have seen very little improvement in tools. My Borland Turbo C didn’t have syntax highlighting and intellisense but the development flow was pretty much the same as what I still do today.

There are only great improvements that I can think of that actually impacted my development flow (in no particular order):

  1. Package managers. I do a lot of my work in Node these days and without NPM built-in, it wouldn’t be as half as interesting tool. I also revisited Java after 10+ years and was happy to find that there are package managers for it - Maven worked well from me and allowed me to start implementing something much faster than I could have otherwise (the mere thought of including other people’s code in my source tree made me queazy)1

  2. Virtualization. I was going to write Docker but it’s just the (current) pinnacle of 15+ years of virtualization. I used to live and breath in development VMs but it was never, ever fun (awesome but not fun). Docker made it fun (even if it’s not perfect) and an integral part of my development flow (vs. just something for testing)

  3. Distributed revision control. I simply cannot overstate the impact here - I would find it very difficult to go back to the bad old days of centralized version control systems. This has completely, utterly changed my development flow.

Talking about this earlier this week, a friend suggested StackOverflow as another one of those things. At the time I dismissed it - it didn’t feel quite right and there are some obvious differences here: it’s a privately owned site, not an open source technology that can be used by anyone. But if I just apply the influences development flow in a positive way criteria, then certainly, StackOverflow raised the game and has become an integral part of my development flow.

So life is good… right? I would say that it’s better but not that it’s good. We could for example have much better code editing. I’m all for keeping, pretty much forever, the source code files as plain text. But map is not the territory and continuing to edit source code the way its stored and processed by machines, is mixing up map (source) with territory (semantics). There is a lot of stuff that we could do here but let me just put a few out there:

  • Our editors should not only recognize the semantic links and constructs in our code but should allow us to edit these at the semantic level. Why would I want to paste a snippet into my source code (essentially invoking a micro code generator) vs. declaring what I mean and keeping the rich references of what I was expressing for future use?
  • Keep track of the metrics on my use of such semantic expressions (vs. text - what is this? 1971?), of the number of rewrites between commits, of number of defects between and after commits.
  • DO NOT allow me to waste my time on tabs vs. spaces, indentation standards, if there is a space between a for and its parenthesis. These are all just time wasters without - decide for me and for the entire team, enforce it implicitly, never allow for it to be changed (if somebody wants to change it they can write a plugin)
  • Help me understand my mistakes faster and no, just marking something as a possible typo is not enough. If I write a loop ask me to confirm that it cannot be written better. Go to StackOverflow for me, ask the right questions (you already have the context!) and proactively give me the answer. Mark my comments as “out of date” whenever code in their immediate semantic unit/vicinity is edited.
  • Make my code reviews semi-automated, offer to correct my mistakes proactively and so on.

[1] In other news Java is still the language preferred by Architecture Astronauts, people essentially unable to pass up any abstraction no matter how insignificant it may be without seeing that it raises, instead of lowering, the cognitive burden. Or maybe it’s the documentation tools that are so bad that they give the same significance to something like Collection<> and ArrayList<> even though the first one is literally useless to writing functioning code while the later is essential to having a growing array. Oh and no type inference by choice and no typedef equivalent? Too bad I’m old enough to remember when Java didn’t have generics by choice and look how good that turned out. 1995 called - it wants all of its messed up decisions back.


Last modified on 2025-04-22