I responded to this question on reddit. I just wanted to archive this here
It is a puzzle that will never be fully solved, and a discipline that you will never master because its “mastery” in this field is purely subjective. I think it’s more about competency and flexibility than it is “mastery”. It’s geeky, it’s intellectual, and it’s evolving constantly.
People come at it with different approaches; some look it like science, some look at it like some sort of elitist club, some look at it like a mechanic would look at a car, some look at it as a means to an end, some look at it like art. I look it as all of these things, simultaneously.
I do look at it like science. Logic, in particular — with a touch of psychology. Most of the science of it all has been abstracted away if you only think of computer “science” as the electrical switches being flipped on and off. But, there are other areas of science involved with coding. The puzzle solving part is great, though. Especially when you get to mess with something new. For instance, if you’re primarily a web developer, you don’t really work in byte streams all that often, but every once in a while you get to and that is a wonderful change of pace. For example, figuring out the logic behind a file format, or messaging spec, or building state machines to help communicate with peripheral devices, and so on can sometimes feel like Beatiful Mind level stuff! From the outside, it seems really boring, but it’s pretty fun when you’re actually doing it imo. At least for me.
Also, hunting down and killing bugs. I personally hate this with a passion because most systems I’ve worked with have shitty logging, so it’s like searching for a needle in a haystack, but there’s still some love for it too. You pick up lots of troubleshooting techniques and that is fun. For instance, deliberately breaking some area of the system in order to cause further symptoms of the problem you’re trying to track down. I actually learned that from watching House M.D.. True story. But you also come up with theories and then try to create the environments to prove or disprove them. Many times, I’ll even ask for a peer review in a diagnosis. If that isn’t science, I don’t know what is!
I do look at a codebase like a car engine. Thousands of moving parts; cogs in this intricate machine. But I also love the game of trying to carve out those cogs in such a way that it makes real-world sense to most people reading it, and also in a way where that unit could be removed and replaced without the entire machine falling apart like the end of a Jenga game. When you’re coding, you’re building things without the hinderance of the physical world. E.g. building a fire without the need for wood or any other combustable material in general.
I do look at it like an intellectual, elitist sport – or even like kung fu… You battle others with your prowess but there really isn’t any one right answer for anything. You attack with crane style, they counter with monkey style. Anaemic model, or domain-driven model? Database queue, or message queue? There’s an argument and a counterargument for everything and the only way you can be a real competitor (against others, or against the problem domain) is to study all of it so that you can apply the right technique at the right time. Another example is design patterns — you can say a thousand things with 2 words, e.g. Observer Pattern — enough said; I know what you’re saying.
I do look at it like art. Beautiful, fluid code… it gets me hard. I like elegant succinct code — where I don’t have to wade through oceans of jibber jabber to get to the point. Walls of code (e.g. the 100 line method) makes me angry. While some find it to be the easiest to read, I do not. Like my car… if I need to change out the fuel filter on an 1980 Nissan 300ZX, I don’t want to have to read an entire manual and then disassemble the engine first, in order to do so. I should be able pop open the hood, find the fuel filter right in front, pull the bitch and swap it out. In visual studio, I should be able to read something in units and F12 my way to glory.
What’s more is not just “art,” but rather “The Arts” involved with coding. I mean… it’s language. You’re essentially using one language to talk to another language, and that language talks to a machine. That’s beautiful to me. Beyond the code, there’s the SDLC. Using all kinds of methodologies in order to get a group of people to achieve a singular goal, whatever that goal may be. Maybe it’s creating a product, maybe it’s establishing a work culture, maybe it’s fixing a legacy product in order to keep a company alive. It’s also strategy — in every aspect of being a developer. Also, leveraging every tool you can find to make your life easier — IDEs, code quality tools, source control, diff tools, logging tools, communications frameworks
And yeah… it pays a ton of money. I get to play with computers and other tech all day. I wear shorts and a tshirt to work. My work schedule is flexible. I am not micromanaged. And I get to give the finger to my step-father that used chew me out for wasting too much time on my computer as a teen and basically telling me I’m a lazy piece of shit. Well, I did it anyway AND I’m a veteran and a former music educator so … F**K that guy.
I know many people will read this and think that I’m full of it. I’m not. I actually do look at coding like this (and much more) which is why I love it so much. I’ve worked in food service/dining, graphic design, print, in a lab at Coca Cola, in manufacturing, and even as as a jet mechanic (crew chief) in the military. I graduated from high school with a 1.8 because that world was uninteresting back then, but then I graduated with my Bachelors at a 3.72 because I discovered coding while I was on special duty in the Air Force (I wrote a debriefing system for them in order to gain back some personal time – it cut a task down from 4 hours down to 5 minutes lol) and found that it was what I loved and this very quickly opened me up to studying up on a lot of other, unrelated things as well. It was life-changing. It’s the best job in the world if you have the head for it.