“Didn’t someone already write this?”
Software is primarily a matter of process, not product. If I can make one word processor, I can make a hundred million word processors without much more effort.
Because of this, and because millions of programmers have been solving problems for decades, there are a wealth of problems that have already been solved. Usually their solutions aren’t quite right; they did most of the work, but they packaged it wrong. When people discover no tool does what they want to do they (hire someone to) write a tool that does.
All of which begs the question, how can I, as a programmer, get at all the stuff that other programmers have already done? Surely someone already figured out how to display a window, sort a list of numbers, read data from the internet, interface with every graphics and sound card in existence, and do all kinds of complicated mathematics correctly. Shouldn’t programming mostly be just gluing these pieces together, maybe adding one or two pieces that no one has done before?
As I hope to show in future posts, making programs that work together drives a huge amount of software design and impacts ordinary users in surprising ways. Most programs use at least four and often six or more distinct approaches to sharing work. Each of these can impact the user’s experience.
As a programmer, there’s another problem to consider. If I decide to use, say, the FFTW in my code, what happens down the line when they change how their system works? This versioning problem, too, I hope to explore in future posts.
And, unlike most of my posts, I think I may actually end this series with a suggestion or two of my own… unless, as is all too likely, the process of writing the posts causes me to re-think the advisability of my ideas.