“It just works, that’s why” should not be in your vocabulary. The phrase is about as useful to a software developer as “it’s magic, that’s why.” This explanation should not even satisfy curious children, let alone grownups.
But this explanation is frequently found in software because, frankly, more people know how to use software than know why it works. Let’s take Facebook, for example. I can post some pictures. Then people in Paris can like these pictures, and I can find out that people like these pictures. Magic!
False. Facebook is very clever, in that its customers can use it without knowing how it works, but it’s not magic. Somewhere, some team of developers wrote some code that serializes your picture, posts it to a server somewhere, which persists it somewhere, and notifies other servers, and … I am not going to speculate any further about Facebook’s architecture. Rather, I use this example to convey a mindset. Picture posting does not work because Facebook employs magical unicorns that teleport your pictures around. It works because real people wrote real code in real programming languages that you can actually learn. They put this code on server that are connected to the Internet and so can you. The difference between the developer at Facebook and you is that the developer at Facebook built a thing you didn’t build, not that he or she is a unicorn and you’re not.
This mindset is surprisingly exhilarating. Every time you see a thing that uses software, you should think, “how does that work?” I like to try to imagine the people that built that. Did they sketch a flowchart on a conference room whiteboard? Probably. Did they wonder about what the public API should look like, or how the thing would perform under load? Almost certainly. They probably have a favorite text editor.
So, now that you don’t believe in unicorns and your childhood is ruined forever, how will this new mindset help you? It will help you by turning real life into giant learning machine. Look at the software you work with. Does anything seem magical? If it does, props to its development team, and now go learn how it works. Is it open source? Go read some code. Does it have an SDK or good documentation? Go look that up. The less magic is hiding in your assumption about how things work, the faster you can learn.
(This post owes a lot to an old post by Eric Lippert about interviewing programmers. You should follow his blog. I have an article coming up on which blogs I found most helpful when teaching myself to program. Eric’s blog is at or near the top of that list.)
Till next week, happy learning!