I haven't done a lot of coding since finishing my university computer science program about 11 years ago, as I've focused primarily on testing, quality strategy, and people leadership in my career so far. In the past year or so, though, I've taken on two coding projects: one was building data analysis tools for the Code Stewardship initiative I worked on, and the other is building this web site (if you couldn't tell by the less-than-amazing layout and design so far... but my goal is to learn and experiment, not necessarily to make a beautiful web site :) ).
Anyway, something that has struck me repeatedly is that it often feels like any programming task I want to tackle is already fully solved in a well-known way. For example, I thought it'd be fun to build an image gallery "from scratch"; turns out an image gallery was one of the first examples in an intro to CSS tutorial I came across. Then I thought I could do something cool with Twitter APIs to pull in the latest activity from my account and display it on my home page; turns out all you have to do is check a bunch of boxes in a UI and then Twitter automatically generates some JS you can copy. Add a button to follow me on Github? Same deal. Display some basic info from my LinkedIn profile? Yep, same thing. And when I was building my data analysis tools in Python, any time I'd notice that I was spending more than a couple minutes mapping out an algorithm, a quick Google search would show me that there were already well-established libraries to accomplish exactly what I'd been planning.
As much as this is going to make me sound like an old person, I don't remember there being so many existing, shared, and open source solutions to everything when I was first learning programming. (For one thing, stackoverflow.com didn't exist when I graduated.) I guess being a software developer these days is more about creatively tweaking or combining existing building blocks for new purposes. And I think this is actually a good thing.
Obviously, it means developers can spend their time solving more interesting, challenging, and unique problems. From a quality perspective, using standard libraries or generated code certainly reduces the surface area where new bugs could be introduced. And perhaps all of this re-use also makes programming more accessible to more people (as in, I wouldn't even need to know what an API is in order to display a nice-looking live Twitter feed on my site).
I also get this feeling (i.e., that everything has been done before) more and more frequently as I progress through my career. I worked at one company for the first 8 years or so after graduation, and didn't venture outside of its walls very often for learning or problem solving ideas. I think I felt overwhelmed enough by just trying to stay afloat with day to day tasks, and figuring out how to operate effectively in a large organization. Being somewhat isolated from the rest of the industry somehow led me to believe everything we were doing was totally unique and special, and we'd therefore need to figure out how to tackle our challenges all on our own.
These days I am a lot more involved in the larger software community, and the more I explore it the more I realize that almost everyone is facing (or has faced) very similar challenges, and that there is a LOT we can learn from each other. This applies to technical issues, people and culture problems, and even seemingly trivial things like deciding how seating plans are organized. I don't recall exactly when the shift happened for me, but now when I come across a new problem, instead of thinking "I am the first person to ever encounter this" I always think "I wonder who has solved this before, and how I can figure out who they are". If initial research doesn't turn up any information about the problem I'm interested in, I start to question whether I'm on the right track at all, and if I should consider changing my approach altogether - maybe I'm trying to solve the wrong problem.
Furthermore, it's not only software or tech where this concept of incorporating and learning from existing solutions applies. Lately, I've been really interested in the idea of biomimicry. From biomimicry.org:
"The core idea is that nature has already solved many of the problems we are grappling with. Animals, plants, and microbes are the consummate engineers. After billions of years of research and development, failures are fossils, and what surrounds us is the secret to survival."
"You could look at nature as being like a catalog of products, and all of those have benefited from a 3.8 billion year research and development period. And given that level of investment, it makes sense to use it."
I'm not sure yet what I'm planning to do in this space (if anything), but there sure are a lot of interesting things to read and think about.
What problem are you currently trying to solve that probably already has a solution?
In closing, here's an entertaining webinar by James Bach on how to incorporate techniques from the animal kingdom into test strategies:
And I'm sure I'll be able to find a more meaty programming challenge to solve soon enough!