I’d wager the classical model is far more sane to the individual than the modern one: fewer tools, more time using them. Also, less of the weird collectivism going on where you must cobble your app out of ten different frameworks because we believe the crowd has more collective wisdom than the people actually doing the work.
weird collectivism going on
weird collectivism going on
↑ This formulation really captures the ’17 zeitgeist, Matt, in more aspects than just software development.
To your point, though: I’ve recently come to realize that there is immense value in being able to slash dependencies and write just the code you need. Say you need to do A. Instead of reaching for the 1000-line library (with bad tests or memory leaks) that does A, but also does B,C,D, you can just write a small component that does A and be done with it.
You do spend some time up front having to implement A, but you gain a lot more time in the future that would be spent on keeping up with changes, breakage, bugs, or drama upstream. Yossi Kreinin has a good blog post that touches tangentially on this topic.
There is a lot more going for the classical model, not least the fact that engineers can actually learn their domain and become valued experts, vs. $fad-of-the-day-fungible-cogs.
In my article I’ve made the argument that even small tasks like looping over a list can require a lot of wisdom you might not possess. As typical web developer you don’t know that much about the runtime and how to optimize it.
If you are developing all by yourself, chances are high that you have to deal with many “unknown unknowns” (quoting D. Rumsfeld).
This is depressing and horrible. No wonder everything we use is a tower of poor abstraction and riddled with bugs.
Oh, no need to be like that, turn that frown upside down. :-)
It is a great gig replacing all that webscale cruft with 10 lines of shell and making it faster in the process too.
Usually it depresses the developers, but really they brought it upon themselves.
I believe a much bigger change for software development in the last 20 years is the now pervasive use of CI. Thanks to cheaper hardware, we can now run expensive test suites for every commit on a collection of different platforms, architectures, operating systems, configurations, etc. Sure, testing does not catch every error, but it is great for regression testing. Once an error is fixed, you write a test and ensure that the error stays fixed forever.
“This is what makes a good developer: finding the right combination of libraries, keeping them up to date, and reducing self-written code to the absolute minimum. Ideally the only code you write should be the part that makes your application special.”
I agree with the author. The part he misses is that modern day applications do a lot more. Small teams build exceedingly complex applications. So yes while you have more tools at your disposal (open source, APIs, managed services etc.) the scope of the work has also expanded. So yes the work has changed, easier in some ways, harder in others.
In my experience it is that the solutions are more complex than need be.
Actually I had planned to cover the change in scope of modern applications, but it was that much text, that I decided to write an own article about that topic ;)
welcome to lobsters!
Nice to be here.
Really, we should be saying that the modern day programmer surely produces less code her/himself, but that doesn’t mean the modern day programmer doesn’t need to know how to write/read/evaluate code.
As I am the author of this article, I have to say that I tried to stress out the importance of being able to actually evaluate a new framework. In order to that, you will require lots of “classical” programming skills but also a lot of experience.
Still the question is, how far you do you have to dig into the source code? That depends on the project’s size. Given a programming project where a huge amount of developers will be working on for some years, you will certainly invest a lot of time in evaluation versus a one-man-show webapp where you simple use React or Angular these days.