Most software developers are laser-focused on one thing: writing code. That makes sense, as it’s ostensibly the thing that they are paid to do. However, software development is about so much more than writing code. It’s also about communicating well with others, creating simple solutions to complex problems, and working in a team.
In this post, I’ll outline three non-technical books that will help every software developer raise their game and help improve individuals, teams, and organizations.
Start With Why
Start With Why, By Simon Sinek
Before embarking on the journey towards becoming a more effective software developer, you must develop your why. You will run into difficult problems on a regular basis. During these times, you want to be able to think back to why you even got started in the first place. What is the driving force behind becoming a software developer?
Is it to have the skills to build your own apps and use them? Is it to bring your family out of poverty? Is it to be able to live and work anywhere in the world? Is it to build products that have a positive impact on humans and the world? It’s ok for money to be a driver behind your decision, but merely getting rich is usually not a strong enough driver to accomplish a difficult goal. There must be a deeper reason behind it.
Make sure you take the time to develop your why. Make it simple and specific. Once you know what it is, write it down on a piece of paper or a post-it note and paste it near where you work. The next time you get stuck or feel like giving up, look back at your why: it will help you move forward during difficult times, and come up with solutions when you are at an impasse.
Develop A Growth Mindset
Search Inside Yourself, By Chade-Meng Tan
The single most important skill in becoming an effective software developer is not Javascript, binary trees, or AWS. It’s embracing failure. Making software that works is difficult. Making good software that people want to use is exponentially harder. Along the path of becoming and improving as a software developer, you will undoubtedly fail over and over again. You will encounter errors that seem intractable, run up against concepts that seem incomprehensible, and get rejected during the interview process.
In these situations, the most powerful thing you can do is not to find a relevant post on Stack Overflow and try all the suggested answers. It’s not to try the same approach using a different programming language. It’s not to send your resume to as many companies as possible. The most powerful thing you can do is to develop a growth mindset by learning from each of the failures that come across your path.
When faced with difficult situations, try to keep two things front and center in your mind:
The goal is not necessarily to simply make this program work, it’s to learn how to make it work.
If this was easy, I wouldn’t be learning anything. Effort makes me stronger and makes it easier to solve more difficult problems in the future.
For more detailed research on the benefits of a growth mindset, check out the work of Carol Dweck. Her TED Talk, “The power of believing you can improve” is a great place to start.
Structure Your Schedule
Whether you are a college student, learning to code via a non-traditional background, or already working as a developer, you must manage your time effectively if you want to effectively grow your skill set. The most important thing you can do with your time is to set aside a dedicated period where you can work on deep and difficult problems.
Software development is a challenging job which requires periods of deep focus that focused on progress and learning. However, for most people the day is a never-ending parade of distractions. There are meetings, coffee breaks, slack messages, lunch breaks, emails, and coworkers to contend with. Each time you get distracted from your focus, it can take up to 30 minutes to get back into the mental state necessary to solve complex problems and learn new concepts.
In order to fight against these constant distractions, set aside time each and every day when you can guarantee that you won’t be distracted to work on the most difficult and important thing facing you. For some people this means waking up early, before the onslaught of the day’s distractions hits. For others, this may mean setting aside a few hours on your calendar each day where your colleagues know you won’t respond to messages and you can tune out any distractions.
Ultimately, writing code is only one aspect of effective software development. To succeed as a developer in today’s world, it’s more important than ever to keep your driving force top of mind, lean in to difficulties in order to grow as an individual, and set aside dedicated time to make progress against your goals.