| Something I've recently realised after having listened to Kevlin Henney talk
about software engineering is how much of the existing knowledge we ignore. The
early software engineers in the '60s and '70s were discovering pattern after
pattern of useful design activities to make software more reliable and modular.
Some of this work is really rigorous and well-reasoned. This is knowledge most engineers I've met completely ignore in favour of the
superstitions, personal opinions, and catchy slogans that came out of the '90s
and '00s. It's common to dismiss the early software engineering approaches with
"waterfall does not work" – as if the people in the '60s didn't already know
that?! Rest assured, the published software engineers of the '60s were as strong
proponents of agile as anyone is today. Read this early stuff. Read the reports on the NATO software engineering conferences. Read the papers by David Parnas on software modularity and designing for
extension and contraction. Read more written by Ward Cunningham, Alan Perlis, Edsger Dijkstra, Douglas
McIlroy, Brian Randell, Peter Naur. To some extent, we already know how to write software well. There's just nobody
teaching this knowledge – you have to seek it yourself. |
You can read all the papers you want. At the end of the day, you actually need to practise writing code! Every piece of software involves a different domain, different requirements, etc.
I feel like the majority of developers these days just copy and paste stuff from the internet and glue some npm/nuget/maven packages together, brush their hands together and feel like gods. That is not how you become a good developer!
How do you become a good developer? Write code _yourself_. Then rewrite it again and again. Keep thinking "how can this be done better, cleaner, more elegantly? how could this be more readable, maintainable?" .. "Maybe others have found a better solution for this, let's do some research and investigate all options, weigh the pros and cons, and select the solution that fits best for this particular problem". Don't forget to factor in the cost of complexity. Is the code you are writing too difficult to understand for the next developer? Is the abstraction too rigid and complex? There is a cost to that.
Rinse and repeat. Sooner or later, once you've written enough code and thought critically about every line, you will acquire a "feel" for what it right and what is wrong. Then suddenly you are an industry expert. Suddenly you are training and mentoring others. Because you put in the goddamn effort.