give me six hours to chop down a tree, and I will spend the first four sharpening the axe. -Abraham Lincoln
As programmers, sometimes it is not clear what the axe is or how to sharpen it. Some people will say just get better at programming, learn more about your language or framework. That really only gets you so far, and may not be the best thing for you to work on if you are already a few years into your career.
Our process has the biggest impact on how quickly we can get productive. Step one is we should look at our process. Record what your day looks like in a list. Don’t go into too much detail, but list the tasks as you do them throughout the day. ie your day might look like this:
- answer email
- read/digest your feature
- reply to text.
- check your slack
- open your text editor
- start writing about where to start.
- answer another email
- get write a failing test
- get into another email.
- oh someone is being loud. ill just start some spotify.
- ok what was that test doing again?
- oh yeah start getting into the code to fix it.
- oh, my coworker needs some help fixing a bug.
I purposely didn’t get into too much detail about he the actual coding process(ill get to that next), but this list is an example of how much can get in the way. The more “non coding” tasks we take on, the harder it is to get a feature out. These are tools, but not our axe. They might be more like boots or gloves, they help but we can get the job down without them.
Some ways I have tried to eliminate these distractions are automating them or shutting them down until I have the time to deal with them. Set a clear goal an remove distractions. some ways I have removed distractions:
- Momentum: it is a chrome extension that hides your “most visited sites” and says “what are you doing today?” this is helpful to stay focused.
- turn off all OSX notifications.
3. turn phone into airplane mode.
4. close your email.
5. for a week, click unsubscribe to every newsletter email before you delete them.
6. automatically turn headphones on, even if not listening to anything. best investment I ever made was noise canceling headphones.
you may think you cant do this because you need to be notified about all the things. YOU DONT! just get through what you need to and then turn it back on, set aside time for these things or they will take all your time.
Programming is our axe. I could probably spend weeks looking into and talking about ways become faster at programming that doesn’t have to do with actually learning how to recognize patterns quicker or understand OOP better.
one of the biggest things you can do for yourself is tightening your feedback loop. you might think it is not that bad to write some code and go over to your browser and then reload the page and click something to see it change. but there are a ton of ways we can make this way faster.
In Frameworks like Ember.js the browser is reloaded for you when you save a file. there is also an automated testing suite that uses Quint, that gets re run when you save files. this process kills two birds with one stone, you get a really fast feedback loop, and really good test coverage. if you can do this without taking your hands off the keyboard uber props to you!! I love this crap, its like using your backswing to cut another tree down.
you can look into the tools that automate this in other frameworks other than Ember.
if you are using Ruby On Rails there is a great gem called guard and guard-rspec or guard-minitest. this gem automatically runs your tests when you save files. Guard-rspec is uber smart as well and if you save the `/model/user.rb` file, it will only run the tests in the `spec/models/user_spec.rb` file.
Implementing these have saved me a ton of time. I keep my hands on the keys and see results quickly without leaving my text editor.
Text Editing is another huge area that will improve your speed. I have recently started using Vim. It has slowed me down in the short term but I have persisted because I have seen the power of using vim from other users that are really quick at editing. In a little more than week’s time I have gotten back to how fast I was in sublime/atom.
Maybe you are like I was for years and have too many excuses to not learn Vim, well before I started using Vim I was an avid sublime text user. I found every package and every shortcut I could to keep my hands on the keyboard. I spend a week seeing if I could use my computer without my mouse. I failed, but I found out about a ton of ways to do things without leaving the keyboard that stuck around. This sped my coding up a lot as well.
All the new skills I learned slowed me down at first, but have made me a better programmer from it. It may be annoying to try and learn automated testing or take time to setup guard, but stick through it. it will pay off sooner than you think.
At the end of the day you need to find your biggest point of impact and hit it hard, that is your 80/20 rule (where are you spending 80% of your time and only getting 20% of the results you wish for). If you are spending the most time in the browser, do the extra work to automate this process so you can spend more time writing code. If you are repeating a task over and over again, write a sublime snippet or vim macro or script to automate this.
keep re-analyzing and chipping away at your process, automate and get rid of what you can. Soon you will look back and be amazed at how much you have learned.
I would love to hear more tips from you guys and what things you have implemented speed up your process.