About Me

Training

Develop With Passion® - Developer Bootcamp

Subscribe

Sharpening the sword

Written September 30, 2011 at 09:00 MDT Tagged learning, education and improvement

The following document outlines a collection of resources which you can use to help you pursue the art of software craftsmanship.

There is a wealth of material in here that will take a significant amount of time to work through. The goal is not to complete it in a certain amount of time; rather to use the resources as a way to allow you to continually and incrementally work on honing your skills.

Some of the resources in here focus on areas related to general computer science and software engineering, others are resources that are there to help you improve more general areas of your skillset, including tuning up the old gray matter!!

Work Incrementally And Consistently

It is very important to remember that the majority of peoples brains works best when challenged consistently over a long period of time. To this end, it is important that you embed habits of daily practice into your routine. Much like it is important to commit to a workout schedule for you physical health, it is also just as important to apply the same level of discipline to the way that you train your career skill set.

The resources

Software Craftsmanship

This is really what this entire document is about, the art of crafting a long lasting career as a software professional. There is a huge wealth of information that the craftsmanship site links to. All of it is meant to give you ideas of what it means to be a software craftsman. Some of my favourites from the reading list are:

Lumosity - Train Your Brain - 10 minutes a day

One of the tools on this list which is specifically focused on brain training is a tool called Lumosity. This site is a collaboration between neuroscientists and computer programmers who have developed a system whereby you can increase a host of cognitive functions over the course of a prolonged training program. The initial 45 days of the program helps you establish a baseline for where you need to improve, and from that point on the program tailors itself to help you develop the skills in the areas that you need improvement.

Code Katas - It just takes 20 minutes

The following set of exercises is a collection of code katas that you can use on a daily basis to spend a small amount of time every day working on a set of problems that can allow you to work on broadening the following areas:

Here is a small list of some katas that can keep you moving for a while:

Close some of the gaps in your math skill set

Now of course, it should be noted that you can probably enjoy a very long and successful career as a software developer without ever needing to get into higher level math. Especially if the majority of your dev effort is spent in the line of business "crud" style realm. Of course, if you start wanting to branch out into other areas of software such as:

You willl definitely require the use of those higher level math skills. At that point, you will either identify that you have the skills, can refresh them, or you will have to learn them from scratch. If this is the case, I believe Khan academy can definitely equip you with the tools to get into the areas that you have interest in!!

Get a better education

A large majority of computer science based education is not really equipping programmers effectively with what I call "a solid core". Like building a house on sand, if you don't take the time to learn and apply the fundamentals, it will be much more difficult to adopt an attitude of confidence in your ability to tackle problems. For some of us, that means we may need to revisit topics that we never had the opportunity to cover in the school that we attended. For some that means even going back and learning about fundamentals such as basic data structures and algorithms. There is a myriad of learning resources out there that are focused on just this task, the following list is a small representation of the huge amount of options that you have to be able to use to ramp up the "core" skills:

  1. MIT Opencourseware. For quite a number of years now MIT has been making large sections of its courses freely available for public use. Specifically for computer programmer, you can spend time looking at the Electrical Engineering and Computer Science. There is a raft of courses relating to a wide field of computer science based disciplines. My recommendation for a lot of people would be to start with the following:

    To see the impact that MIT Opencourseware is having, check out the following article.

  2. Stanford on iTunesU.

    Once again, the wealth of information on here is just amazing. Even in the computer programming section alone there are lots of video lectures from topics ranging from algorithms to iphone programming.

Read some books

Books are a great resource for getting differing viewpoints on techniques and practices. My recommendation while reading books (especially technical) is to focus on active reading techniques that allow you to implement what you are reading as soon as possible. You want to give yourself the opportunity to build your own mental models for how the concepts apply, and I believe that a large majority of technical information you read is best distilled in your editor writing code and playing around with the ideas.
I have put together a small book list that I have created to focus on some fundamental areas of both software engineering and computer science. Granted it definitely leans heavier into the realm of software engineering that raw computer science, but the books that are on there are a great starting point for helping you to further the building of a solid core.
Check out the book list here:

Feel free to comment on this resource list (yes comments are working again) and let me know if you think there are good additions I can make to the list of recommendations.

God Bless You.

Develop With Passion®