Book Review: Becoming a More Effective Developer

A lot of programming books teach you about a new framework, language, or computer science theory, but very few teach you how to actually be effective at your day job. The book, The Effective Engineer is a great one to learn all the ways in which you can be the best developer you can be.

 
 

This book goes through three main points:

  • Developing the right mindset
  • Executing effectively
  • Building long term value

Each of these has some really good and actionable insights on how you can become better as a programmer.

Developing the right mindset

As Carol Dweck mentions in her book Mindset, the most successful people have a certain mindset in terms of how they view their learning. They believe that your brain can be changed and you can learn anything once you put in the work. That's definitely true for programmers.

Continuous Learning

A large part of being a software developer is that you are continuously learning new things. Whether new frameworks, languages, or software theory, there is no shortage of things to learn.

A majority of the time this learning comes from actual work on the job. No longer being able to learn on the job is a reason a lot of developers change jobs, so it's definitely cared about. Sometimes, though, that learning may need to be supplemented outside of the job. This is where you hear some developers doing projects and learning during nights and weekends.

The book goes through a few ways developers can actually do this learning, such as reading code from developers who are more experienced and to have them review your own code.

Prioritize

One of my favorite authors, Tim Ferriss often talks about being efficient vs. being effective to help boost productivity:

Focus on doing the right things (efficiency) vs doing things well (being efficient).

Doing things to be efficient may include items such as replying to emails, updating status reports more than they need to be, and other tasks that make it seem like you're busy but doesn't actually contribute much to the project you're working on.

That's where prioritization comes in. Once you take some time each day or week to prioritize what needs to be done, you'll have a clear way to move forward with the actual project.

This is similar to Getting Things Done in that you define clear tasks and prioritize the ones that need to be done. I would also argue to break up bigger tasks into much smaller ones.

Executing effectively

Now that we have the right mindset for our productivity, we also need to know how to execute them. A few things from the book stand out in what I believe will help the most.

Master Your Environment

Do you use Visual Studio for all of our development? Then knowing as much as you can about it can save you so much time in terms of keyboard shortcuts or knowing when to move to the command line for certain tasks. Speaking of the command line, knowing PowerShell or bash can save you a ton of time as there are snippets and commands that can do a lot that you may not even know of.

Improve Your Estimation Skills

All too often you, as a developer, will get asked by your boss or a manager how long a certain task will take. How often have you said, "I don't know?" Improving your estimation skills is an easy way to be thought of as a senior programmer.

The main way to improve this is to just keep track of your tasks. Once you are asked to estimate you can refer back to your tasks and get an idea of how long it took you to do something similar.

There's also the book Software Estimation that can give a lot more details in improving your estimation details.

Building long term value

To be the best programmer you can be is to build long term value for your company and your clients. The book offers some great ways in order to help you build that long term value.

Balance Quality with Practicality

How often have you come across this scenario: you implement a new feature and the deadline is very close, however your boss wants you to go ahead and get it in to start testing. You mention how many more tests you need to write, yet your boss says to not worry about that and just check it in. Often referred to as technical debt, us programmers can perfectionists in that we want our code to be perfect before we send out for all to work on and see.

Having this type of balance on having your work be perfect vs. being practical in your work can be beneficial in terms of providing value to your company or clients.

Invest in Your Team

I think the biggest thing you can do for long term value is investing in the team. This can be done in many ways, such as the following:

  • Providing a nice way to onboard new team members: Having a good onboarding solution will make new team members so much more productive and have them committing code within their first week on the job. This leads to higher morale overall across the team.
  • Collaborating on all aspects of the code: This includes having efficient code reviews on all pull requests, and team members not afraid to volunteer for certain bug fixes or features.
  • Building a great culture: This can be a hard one to accomplish, but if done correctly this will build higher morale with the team which will reflect team members making sure they give everything their best.

Of course there are other ways to help invest in your team, but these are some of the ways that can have the most impact.


This book is definitely worth reading for a lot of ideas on how you can easily improve your effectiveness as a programmer. For even more you can checkout the book's blog.

Book Review: Deep Work

Soon after I was about to finish So Good They Can't Ignore You, I stumbled upon a post by Ryan Holiday (another author I frequently follow), and it mentioned another book by Cal Newport - Deep Work. I thought a second and realized, "I think I have a book by that name." I go up to my library and, sure enough, there it is on my shelf. So when I finsihed the current book I was reading I picked this one up. I expected to receive similar benefits as I did in his previous book that I just finished and, sure enough, I got some good insights and advice from it as well.

 
 

The first part of the book goes into how deep work is valuable, yet it's increasingly rare in our work environments. In fact, the author goes into two core abilities you must have to thrive in our work environments. You must have the abilities to do the following:

  • quickly master hard things
  • produce at an elite level in terms of both speed and quality

These two abilities, though, depend on your ability to perform deep work. The author pretty much sums it up in this statement:

If you don't produce you won't thrive - no matter how skilled or talented you are.

This makes sense, of course, but what we may currently produce may not be the best value that we can give.

Deliberate practice needs deep work

You may recall my current strategy for doing deliberate practice for my programming career. However, doing deliberate practice in itself is a practice in deep work because core components of deliberate practice are

  • Having tight focus on a specific skill you’re trying to improve or an idea you’re trying to master
  • Receiving feedback so you can correct your approach to keep your attention exactly where it’s most productive

The first core component of deliberate practice is getting deep work done on the skill or idea you're working on to master. The second component is essential so you can receive feedback to better tailor your next deep work session so you can continue to improve.

In order to produce great work that is valuable working for extended periods with no distractions at all is the key. This is essentially what deep work is, and it is essential to getting the deliberate practice you need to master a skill.

Enemies of deep work

Earlier in this post I mentioned, as the author does several times in the book, that deep work is very valuable, yet it is very rare in current work enviornments. If it's so valuable why isn't it happening more?

The author gives several reasons why, but one of the biggest enemies of deep work is the need to always be connected or to always be reachable, whether through email or through a chat application. I always knew that email was a big distraction from my readings of The Four Hour Workweek. You'll save so much time by scheduling when to check email and only do it, at most, twice a day. Another connection it drew in my mind was, in the Tim Ferriss Podcast episode with David Heinemeier Hansson, DHH (as he's often refered as) goes into how they get so much work done. Once you listen its very simple how...they're able to get deep work done often. The whole company seems to love being able to get deep work done. From a post about working four day work week they mention how they reduce or completely remove the common distractions one can have during a typical work day. Meetings, email, and chat can be very distracting and will remove your concentration causing you to not get much deep work done.

As I say this, me and my company do a good bit of email and we have even adopted Slack as our main way of communication. This doesn't mean that we have to change our ways as a company or anything. This simply means that we have to be more mindful of how we are personally using these tools.

It's ok if we don't immediately respond to an email or chat message. Nothing work related is going to be life or death. The author even mentions a small study done with a group of management consultants at a very big company who were asked to disconnect for a day. Naturally, the consultants were nervous that the clients wouldn't like that, but it turned out that the clients didn't care. People will usually respect your right to become inaccessible as long as those periods are advertised in advance, and are able to get in touch with outside those periods.

How can this help your programming career?

The author cites a great book for developers on honing your craft, The Pragmatic Programmer:

We who cut mere stones must always be envisioning cathedrals.

As developers we are constantly trying to hone our craft of programming. There's always something new to learn in our field, whether we want to stay up-to-date or to go in a different area. Deep Work has good advice to do deliberate practice and ways to change your work day so you can get as much deep work done as possible.

Even in your day-to-day work what you produce can be greatly expanded if the rules of using deep work are applied. Outside of your daily work, incorporating these deep work rules can also be of great use. Going through training material or working on that side project will yield better and quicker results if they are done as deep work.


There were some great insights from this book that I plan to incorporate in my own working life. Even turning off email and checking it on a schedule, I believe, can yield great results. I recommend this book if you feel like you can do more during the day but not quite sure of how it can all be done. It can be done and this book shows you a few ways to get there.

Why I'm Reading Research Papers

In my recent post on doing deliberate practice to become a better developer I mentioned that I was going to spend some time to read and understand some research papers. This may seem a like an odd thing to do in order to become better at my craft, but I figured a little experimentation couldn't hurt. At the worst, I'll have a few research papers read and understood. Perhaps I'll even meet one of the co-authors and have something to engage in discussion with. However, I believe I may get a bit more out of it than just that.

Understand Latest Research

Seeing what the latest research trends are, I feel, can be quite beneficial in a practical sense. For instance, there's a paper that suggests that simple testing can prevent most critical failures in software. From reading the paper and Adrian Colyer's post about it one can get a lot of insight about preventing most crashes in software. One having that insight, you can put it to good use in all of the software that you currently are developing.

See Cutting Edge Technologies

I'm sure most of y'all have seen this graph on emerging technologies.

CC BY 2.5, https://en.wikipedia.org/w/index.php?curid=11484459

Keeping up with new research articles allows me to be a part of the early adopters. Whereas now, I'm most likely split between the Early Majority and the Late Majority. Getting in early to new technologies will give multiple advantages, such as being among the first to submit pull requests if they have their code on GitHub, or generating the first set of blog posts on the subjet.

For example, Elm, a functional web language that outputs to JavaScript, was first introduced as a research paper. While I would say it is still in the late stages of the Early Adopter phase, if I was able to get on it earlier soon after this paper came out I could be considered one of the go-to people for this technology and even could help contribute to future releases of it.

Try to Understand More Math

A lot of computer science, and especially most of the research done in the field that I've seen, has a good bit of math behind it. While I took some math in my own studies of computer science, a lot of that was lost due to just not using it or keeping up with it.

While it's not necessary in day-to-day programming, it can be a bit helpful. Learning the math can help develop that extra bit of logic that will help in my daily programming, whether business logic or debugging.


With these benefits in mind, I plan on reading a paper a quarter this year and see how that goes. I'll definitely report back any benefits, or lack of any, that I believe I receive during that process.

My Deliberate Practice Plan to Become a Better Programmer

In the previous post, I reviewed the book So Good They Can't Ignore You. I wanted to take the ideas and advice from there and to create my own plan for deliberate practice as a software developer. Here's what I came up with...

Continuous learning

Being a software developer means to always be learning. Whether it's a new framework, new programming language, or a whole new programming paradigm learning something new is integral.

There are several ways to do this and I will try to incorporate all of them, though more will take more presidence and attentnion than others.

  • Use sites like Pluralsight and Udemy for on-demand tutorials and training.
    • Watch at least one course each one or two weeks, depending on the length of the course.
  • Watch at least one software presentation on YouTube or similar site.
    • Watch one at least each week. This should generate some "Top 10" posts for everyone to enjoy or, if it's really good enough, a post about a specific presentation.
  • Read at least one technical book each quarter.
  • Read and try to understand at least one journal paper on programming each quarter.

Practicing

Of course, one of the biggest and best things to do as a developer is to actually program something...anything to help put into practice what I've learned. The above methods are great for learning new things, but they have to be put to use, as well, otherwise I won't be able to retain what I've learned.

  • Have at least one personal project going at a time.
  • Blog about things learned and always have a demo project for it, if possible.
  • Get certified, if available.

Being uncomfortable

Doing deliberate practice often means being uncomfortable during the practice. This is an easy way to know if the practice is good or not. Here a couple of ways I can step outside of my comfort zone.

  • Speak at a local user group at least once each quarter.
  • Try to speak at a conference at least once this year.
  • Do more screencasts instead of regular text posts for the blog.

Keeping track

Now, none of the above doesn't mean all that much if I don't keep track and accoutable for each of these. Saying I'm going to do it doesn't mean I am going to do it.

  • Once again, blogging about each of the above items as much as possible
  • Use a time tracker such as Plan to keep a digital record and for some nice reports.

Since it's very close to the 2017 year, this is a great time to get started with this.

Do you have something you've done work very well for you but wasn't mentioned? What are your plans for having deliberate practice?

You Are Good Enough

"I don't think I'm a good developer." 

I think a lot of developers out there think this or something similar at one point in their career. Mainly during the first few years when they started out. Maybe they just started their first job or even thinking of moving to a second job.

Here's my advice if you're one of those who think this...just relax.

Yes, I definitely have done this myself. All through college, when interviewing for my first job, during my first job, interviewing for my second, and during the first couple of months of my second. Seems like a lot of times worrying and doubting yourself, doesn't it? 

It's kind of nice that you worry about this stuff. It means you actually care, right? But just think, if you weren't as good as you may think, how would you have gotten the job you do now? How would you have been able to stay there for as long as you have? 

If you still feel the same about your skill, take this opportunity to learn new stuff. The internet has tons of stuff online to get you started. One tutorial doesn't make sense? Go to the next one.

So go on, challenge yourself. After doing that you'll become better than good enough.