The role of a software developer often gets distilled down to a singular activity: coding. While coding is undeniably the heartbeat of the profession, defining a developer by this act alone is akin to defining a painter by their ability to mix colors. It’s a crucial part but just the tip of the iceberg. The true essence of a software developer’s role is multifaceted, encompassing many different skills, mindsets, and disciplines.
Imagine a world where every software developer is just a coder. In such a world, code might get written, but would it solve any problems? Would the code be even useful or just an implementation of something fancy? The difference between a developer and a great developer is the breadth and depth of their approach. It’s about collaborating effectively with others to deliver value, not just code.
I want to talk more about what makes a great software developer. What are the habits of highly effective engineers? And I’m not going to talk about coding (too much).
To summarize the whole article: To be successful/great/awesome/whatever — coding is not enough.
Focusing beyond the code
Coding is to a developer what a brush is to a painter or a chisel to a sculptor. It’s the primary tool, the foundational skill upon which everything else is built. Every application, every website, and every digital solution starts with a line of code. Someone wrote it. You probably write it daily as well.
However, while coding is fundamental, it’s essential to recognize that it’s not the actual purpose. It’s about writing meaningful lines of code. It’s about solving problems with the code. A line of code means nothing if there’s no context to it.
Being a great developer means being efficient in coding. It’s not something you can skip. It’s the entry ticket to the world of software development. But what separates the good from the great is the ability to see beyond the immediate lines of code. How will it interact with other components? How will it scale? How maintainable is it? These are the questions that a decent software developer constantly grapples with.
We’re not going too deep on the coding; there are better teachers than me out there who share practical wisdom on how to master the machine. Here are some books purely on coding/programming that will boost your skills immensely:
- Cracking the Coding Interview, McDowell [Link to Amazon]
- Introduction to Algorithms, Cormen [Link to Amazon]
- Clean Code, Martin [Link to Amazon]
- Coders at Work, Seibel [Link to Amazon]
The Pursuit of Efficiency
All the best engineers that I’ve met have been highly efficient. I don’t know how they manage to do it, but it seems they’re always one step ahead of you. It’s a feeling when you’re near them; the progress is felt in the air. Everything moves smoothly — challenges get resolved in a timely matter, and things are under control and moving toward the purpose that the engineer has set.
Great feeling.
Some may argue that efficiency = the opposite of stability. But this is not the kind of efficiency I’m talking about. I’m talking more in terms of Antifragility. No running around and doing everything as fast as possible. You don’t have to make tradeoffs by reducing the buffers that you have, and be wary of making changes that reduce your resiliency to unexpected things.
So we’re talking about staying efficient. At its core, efficiency is about progress — momentum, ensuring that the wheels of development are always turning. To make it clear what I’m talking about, let’s take a look at the opposite. Every developer knows the feeling of being “stuck” – whether it’s a particularly challenging bug — where you start doubting your competence or a piece of code that just won’t cooperate. The progress seems to have come to a halt. The pursuit of efficiency, in this case, means not letting these obstacles impede you. It’s about thinking on your feet, finding resources to solve the issue, finding alternative solutions, and keeping the end goal in sight.
🏄 Think of it as adopting a proactive mindset, where doing something – even if it doesn’t solve your problem directly – is better than doing nothing.
This means breaking a complex problem into smaller, more manageable tasks. It means seeking input from a colleague when you’re feeling stuck or temporarily setting aside a challenging task to focus on another aspect of the project. The key is to maintain forward momentum with small increments.
You might say, “Solving hard problems requires time. You shouldn’t hurry”. And you will be correct. Solving complex problems does require a lot of time. But even solving one big problem has forward momentum — For example getting a new exception after hours of debugging is cause for celebration as you move closer to figuring out the issue.
The Joy of Tinkering
I will be honest: great developers aren’t just skilled or knowledgeable; they’re passionate. They’re eyes light up at the mention of a new programming language. They spend hours diving deep into a challenging problem not just because they have to but because they want to. They’re driven by an insatiable curiosity, a hunger to know more, do more, and be more.
I have nothing against people who are not passionate about programming; it’s okay, but these people will also not be pursuing greatness doing 9-5.
This passion manifests itself in various ways, but one of the most evident is the joy of exploration. Great developers are explorers at heart. They’re not content with just knowing the tools and technologies of today; they’re always on the lookout for what’s on the horizon. They tinker, they experiment, they play. Whether it’s a new framework, a novel algorithm, or an emerging tech trend, they dive in headfirst, eager to learn, understand, and master.
So here’s George Hotz having great time tinkering with LLaMa and building a chatbot, can you see the joy while he’s coding? I find this so cool.
This kind of tinkering keeps the spark alive. In a field as vast and ever-evolving as software development, it’s easy to feel overwhelmed or stuck in a rut. However, by embracing curiosity and actively seeking new challenges and learning opportunities, developers can keep their skills sharp and enthusiasm high.
Moreover, this exploration has a more profound, more intrinsic value: the sheer joy of the process. I think great developers also enjoy being passionate about programming. From my personal side, I can tell you I could not see my life without some kind of programming.
Knowing the Why
Nowadays, developers often find themselves engrossed in specific layers or components, be it perfecting a REST API request or finetuning CSS for that impeccable web design. We’ve gotten very high in abstractions in the last decade or so. Nobody wri