Be curious about your craft

Be curious about your craft
Photo by Dominik Van Opdenbosch / Unsplash

"Be interested" sounds like telling you to fall in love with a particular person.

I'll grant you it's similar, but being curious about the aspects of software development is much simpler. Which is great because it's essential for your career as a software engineer.

My personal story

My interest in constantly improving, honing my craft, and thinking deeper about software development wasn't a gradual, linear process; it was more like a step function.

The first big step came when I was at my first full-time job, working on Logitech's e-commerce shop, integrating JSP (Java Server Pages) templates with a Java backend. Yeah, that was in 2001.

Suddenly, I saw (felt!) the beauty of crafting pieces together to make a whole, functioning, and flexible system. That was the first time I enjoyed programming. I started coding very late, at the university, and it wasn't something I felt passionate about. It was the coming together of building something that works reliably, which is engineering, and the freedom within the constraints of how I made it work, which is creativity.

The second jump in the step function occurred when I learned about Ruby in 2008. It seemed to have been an era of "nice to work with" languages, and I coded in Python then. Ruby was just as convenient but also elegant, consistent, and aesthetic.

This is not to diss Python, which is also a great language. It's to show that each person has their taste in programming languages, too, and different things can evoke passion in different people, even in such "soulless" domains as programming.

Curiosity boosts learning

My passion for Ruby made me realize I wanted to be more than a pair of coding hands.

I wanted to become an outstanding craftsman who constantly strives to improve by practicing and learning. Software development is much more than "just" programming: you have to design systems, make trade-offs, and know the workings and constraints of the platform you're developing for.

If you want to make the most out of your tools, you must improve your knowledge and efficiency. By mastering and customizing your shell, operating system, and text editor (unlike screwdrivers and wrenches, software tools are configurable), you'll accomplish more work in the same amount of time and enjoy it more.

Crucially, you must be able to communicate clearly and efficiently, both verbally and in writing, and work with your team members.

In short, you must acquire many skills to level up, only some of which I've listed above. Furthermore, even the required technical skills change over time: pointer arithmetics is not so much in vogue anymore, but using AI to assist you is.

The good news is, if you're motivated and curious about how to improve in each of them, learning will feel like fun. So you'll gain valuable new skills while having a great time!

Embrace your "why?"s

Many questions arise as you work, learn, browse tech-related newsletters and social media, watch courses, and read (or write) articles.

Why do we refactor? Why is it essential to give variables descriptive names? What's so special about GraphQL? Why is functional programming better than imperative programming? Is it better? Under which circumstances? Why are immutable data structures useful? What kind of tests should you write? Should you do TDD (Test-Driven Development)? In which contexts is the inconvenience and cost of defining types in a typed language worth it?

It's imperative (pun intended) that you hold on to these questions and try to find an answer that satisfies you at that moment. Later, you might come back to those questions and have a different conclusion, which is completely fine.

At the beginning of the learning process, we look for guidance and accept the answers of more experienced individuals. This phase is a natural and effective step in acquiring any skill, and you should embrace it.

Yet, it's essential to maintain a curious mindset: anything you learn this way will stick a lot better, and you'll be able to explain it to others. Second, you might reach your own conclusions, which you can then argue for. Third, you practice critical thinking, a valuable skill in most domains (the military being one exception).

Challenge the status quo

I'm not urging you to become a software revolutionary and subvert the consensus on best practices for the sake of subversion.

However, asking why things are the way they are is healthy. You'll either make a more senior developer think hard and give a well-formed explanation, or you'll find that there is no clear agreement on the topic, and you'll have a chance to refine your opinion. You'll also deepen your understanding of the software engineer mantra: "It depends."

For example, DRY (Don't Repeat Yourself) was an axiom when I was a Ruby novice. We diligently refactored code to avoid repeating the same thing. This is generally a good practice, but not always, not necessarily right away, and the ideal amount of duplication depends on the type of duplication, too.

In summary, being interested in software development and engineering can help you in many ways.

  • You're motivated to learn new things, which is essential in our profession
  • You're much more likely to enjoy the learning process
  • Seeking out answers to your questions makes the learnings stick amazingly well. You'll also gain communication and argumentation skills in the process, which are precious "soft skills"