The Recipe for a Good Developer
Learning software development isn’t a fast food experience, it’s not a one-pot instant dehydrated meal. It’s a recipe that takes time to prepare, but as with many home-made dishes, it’s worth the effort.
Introduction
If you cook, I'm sure that you've noticed that Internet recipes nowadays seem to take forever to get to the point with miles of scrolling before you get to the ingredients and method. This article will be the same, loads of back-story before I get to the recipe, but I assure you that it’s delicious and worth the wait.
People often say to me “I want to become a good coder”... But that’s a whole mouthful, and trying to figure out what that means raises more questions than it provides answers. How does one become a “good” coder, what happens when you become “good” and what even is “good”?
Can you learn to code in 12 days/weeks/months?
Short answer yes, long answer no... Sure, you can learn the basics in a matter of weeks, but the problem with people is that they often want concretion, for something to be “done”. But in reality, being a technologist is never done as there’s an almost infinite amount to know already and the landscape continues to grow. You will sooner be able to forget gravity and fly than you will master all of technology.
The inconvenient truth is that you can never know it all, it’s 1,000+ lifetimes' of material, but you can know enough for now, to be useful and help others. Many people think they’re a "good" coder coming out of college/university/their bedroom (ahem, myself included), but it’s such a vast field that the chances are that they’re not. However, when that illusion is dispelled, what they do next is the important part.
Knowing isn’t half the battle
As part of my Yale University course on wellbeing, they explored the G I Joe fallacy. In the cartoon of the same name (created ostensibly as 1/3 toy sales vehicle, 1/3 public service announcement and 1/3 entertainment) they usually ended with “... and knowing is half the battle”, which is demonstrably untrue in any given discipline. Knowing helps, but the key is active practice. You can read as many books on driving technique and performance car management, but until you drive, you won’t become a good driver.
The secret is really not a secret
People are often fixated on there being a secret, a quick fix, a short-cut to success, and many will sell you on the notion that one exists in almost any field. A great Filipino master once offered to tell the martial arts practitioner and author Loren Christensen the secret to his art. Excited, he moved closer, and the master whispered in his ear “if you practice very hard, you will become very good”. But even that statement needs some fleshing out to be really useful to us, as practice alone doesn’t make perfect.
Practice doesn’t make perfect
The old adage “practice makes perfect” is untrue; after all, you can drive incorrectly for as long as you like and fail your driving test spectacularly, and part of driving is being part of the public ecosystem of other drivers. The adage is untrue for two reasons, 1) unqualified practice isn’t always good and 2) perfect is unattainable. Maybe “good practice, sees improvement” would be a better, if less snappy, way of putting it.
There is no destination, it’s all about the journey
Anybody claiming to have fully mastered any given art or craft is probably deluded. When training for my 3rd degree black belt in karate, I did spend some time reflecting on my journey. When I first started, I viewed black belt as a destination, rather than a journey. Sure, in some sports settings, you can win gold in a definitive, finite space, but that’s not how technology works as an industry, there’s no world-championship, it’s not a sport. It’s a jutsu, not a do, it’s infinite and it will outlast all of us.
The more advanced you become, the further away the horizon stretches, and you can take comfort in that. You’ll never run out of learning if you don’t want to, you’ll never find a limit, but your method of being on that journey is the real jewel, because it will keep paying off, for your entire life.
If one link in the chain is weak, it isn’t a strong chain
If your fundamentals are poor, your working practice sloppy, your team not committed to learning or your project itself not one where you can grow then you won’t be getting the most out of your time. But there’s hope, you can always change, be that through learning, good practice or switching projects/jobs and by finding a new mentor. The limit is your own motivation and perseverance.
Don’t choose one style or one master
I believe that my dear, departed karate master was incorrect in one crucial thing, that one should only learn a single style from a single teacher. This creates a lack of depth, a rigidity of approach and a lack of practicality that can be really detrimental to your progress. When I left to study elsewhere, I found that although the quality wasn’t as high (he was exceptionally skilled and rose to 8th degree black belt), the change in perspective and learning magnified my learning for a couple of years. The same goes for coding, choose multiple mentors, pair with different people, have your code reviewed by many, even if they’re more junior to you. You can learn from everybody, don’t put artificial limits on yourself.
Stay curious, although you can't learn it all, your curiosity will broaden your horizons. When all you have is a hammer, everything starts to look like a nail, so keep your curiosity, keep experimenting.
Not a rockstar 10x developer? No problem
One thing I learned from karate was that diligence and perseverance win over time. My master pulled me aside and pointed to somebody who had started at the same time as me, only had advanced far faster. What he said, I’ll never forget… “they find it easy, but in six months, they’ll get bored and leave, you’re diligent, you practice more and you find it difficult, you’ll get there eventually”. The good thing about that route, is that it’s open to everybody who wants it. So, if you find yourself with a rockstar developer, worry not, you’ve got the rest of your life to improve, where they might have their ego stroked to the point where they stop learning.
Passion often trumps over natural ability in many walks of life, if you're passionate about software, you'll go above and beyond those who are simply "good" but disillusioned. If you're losing your passion, try to find a way to reignite it, take a break, change your focus. When you have your passion, treasure it, people will see the glint in your eyes, your love for what you're doing. A disengaged developer is a sad sight to behold, because face it, we didn't join the industry for an easy ride (I hope).
Sharing your loaves and fishes, the more you give away, the more you’ll have
I’ve long been of the opinion that in order to teach something effectively, you have to first make sure you have good material, and in order to have good material, you have to do your research. In teaching SOLID principles to graduates, I learned more about SOLID than I ever knew before. By sharing what you know, you amplify your knowledge, you solidify it, you fill in the gaps. By giving everything away, you will end up more knowledgeable and skilful than ever before. There are no secrets, nothing you should hold back, open-source your mind!
Do other things
Inside of work - Many moons ago, developers did a multitude of jobs. Because there weren’t many dedicated platform engineers, business analysts or testers, we turned our hands to everything. With the expansion of the industry, we have more specialised roles nowadays and that can lead to some tunnel vision or “not my job” attitude. Stretch your legs a little outside of the coding box into something else, just for a while. Pick up that breadth and perspective in our industry and it’ll be time well spent.
Outside of work - I believe that having fresh perspectives makes you a better thinker, which is why I write and why I make electronic music. That way, you can always draw parallels, find the contrasts and use your other interests as a palette cleanser. If you think about one thing 24/7, you doom yourself to living in an echo chamber.
Change what technologies you use - Trying to be too narrow for too long can lead to fatigue, it's great to reinvent yourself, it will ignite your curiosity and passion again. Plus, as the technology landscape is ever changing, it will prevent you from being left behind.
Do things for the right reasons, the right way
Doing things for the money doesn’t make us happy. Studies have shown that once we reach a certain salary, it’s sharply diminishing returns, the same goes for other material things. However, purpose and flow are invaluable, they bring us happiness and wellbeing, especially when we're working with a group of people we respect.
Find a just cause - Choose a project or job that you believe in, where the product matters to you. Don’t work for more money for something you don’t believe in or worse, are morally opposed to. This will differ on an individual basis as everybody has their own belief system.
Find your own flow - Over time, you’ll find your own accelerators, your own flow, your way of working. Distil that down into its essence and find how you can work it into your life, both working as an individual and as part of a team.
Do something you're proud of - Pride is oft misaligned as a sin, but being proud but not boastful of what you've achieved is a healthy mindset. If you're not proud of your work, what can you change to improve things? Is it you're too rushed to be able to do a good job, push back, if the work is simply something you can't be proud of, change projects.
Work on "good" projects
In addition to the above, try to find “good” projects, these might not be the coolest tech, but they’re usually a mix of:
- Learning opportunities in the technology
- Learning opportunities in the sector/product
- A team with somebody you can learn from
- An outcome that you believe in
- Space to do a good job, using best practices, nurturing quality
Of course, this means that you might need to move to find that mix, which can be anxiety inducing, but the only real resource you’re limited by is time, so don’t waste it on something you don’t believe in or take something from. "Good" projects will often not be the latest technology, or the next Spotify, but that doesn’t make them bad, as even a fairly mundane technology stack can provide a huge amount of learning and growth, because even things like Java have vast swathes of learning in them you probably haven’t found yet. In my opinion, a "good" project is actually the one you need now, so finding the right project will win over endlessly trying to find the sexiest one.
Make a mess so it's tidy later
Be unafraid to experiment and to fail, as every failed experiment is a new learning opportunity. Some of my greatest moments have come after a slew of messy failures. The key is to not get over-invested in a solution, know when you're in sunk-cost logical fallacy territory and be prepared to pivot. Software rewards flexibility and punishes rigidity.
Master your ego
Have you ever had that feeling, when somebody younger, maybe less qualified on paper comes in and has some say on a project and you feel like you’re burning up inside? I think we all have, those who claim not, are probably not looking deeply enough inside themselves. That’s your ego trying to take control of your actions, but although you feel it, it doesn’t mean you have to act upon it.
Everybody has an ego, you can’t destroy it as it’ll just pop up as a proxy elsewhere. People who suddenly find a belief system, thinking they’ve destroyed their ego, have often just transferred it into their new setting and hidden it a little behind its dogma. But, even though you can’t destroy your ego, you can make it work for you rather than against you. Make your opponent (the only true opponent that you’ll ever have) work for you.
Don't hurry, but don't dawdle
You can't rush experience; if somebody said to me that Person A had gained a decade's experience in six months, I'd be sceptical. However, time alone isn't the answer as just because somebody has a decade plus experience, doesn't mean it's useful experience or time they've spent growing. Time is your main limiting factor, so try to spend it mindfully, with purpose, but without haste. If you keep at it diligently, you will progress, it's almost inevitable.
The recipe… at last
Ingredients for my view on the ideal software development lasagna:
- Pinch of good fundamentals
- Handful of good coding mentors and peers
- Cup of good projects, choose a variety for flavour
- Heaped spoonful of humility
- Drop of your own flow
- Just cause to taste
- Preheat your motivation to 220c, let bake for a few years, until ready
- Season with other interests, serve warm
But importantly, always share, never eat alone.
Conclusion
Becoming a “good” developer isn’t really possible, it’s like trying to define the shape of water. What you can do though, is foster a growth mindset and enter into a lifelong journey, it’s more rewarding and it has no limits.
As a footnote, we should also work on ensuring that our journey is available to all. Computing is becoming a democratised industry, all walks of life should be able find a good career in it. We have work to do on inclusivity and diversity, but with the right efforts and the right organisation, most people can become a developer who is an inspiration to others.
Special thanks to Marco Santulli (CTO at Sysdata) for providing some great insight which I've worked into this article.
Senior Quant Developer
4 年Many of the things in this post apply to all other careers, not just software development.
Co-Founder of MY8.IO
4 年A good read, thank you ????
Very insightful post Jeff, thanks for sharing!
Faster. Lighter. Reducing the scrap in Composite Manufacture with our Revolutionary IoT Digital Assistant.
4 年Hi Jeff - what a great way to start my Monday. Many things here resonate. I think that one thing stands out from my personal experience is about achieving humility. I invite people to review my work with the instruction to "rip it apart - I'm emotionally separated from this - you're only making it better". I think those that achieve this become the people that are looked up to, rather than the noise and fury of supposed 'rock stars'. I now feel inspired to tackle this from a management perspective. Secondly, the "do something else" ingredient is super important. I'm writing some complex stuff for microcontrollers right now (wireless mesh distributed car wiring system) and I'm having to manage trade-offs between style, complexity and expediency. It's the journey.