Algorithms & Data Structures

There are literally limitless ways to solve any given problem. A good programmer will know the right tool for the job by using existing Algorithms and Data Structures.

I think it’s also a good idea to have the basic intuition of how well known algorithms work. For example, know how the various sorting algorithms are implemented. This will highlight good algorithn design.

I also plan to eventually finish the Algorithms course on Coursera starting here.

Design Patterns

This is very similar to the previous point. I need to learn to identify situation where I can use an existing Design Patterns.

Head First Design Patterns is on my reading list. I think this will give me a good base to start learning about Design Patterns on the job.

Test Driven Development

The concepts of TDD make much sense to me and I believe that it’s critical if you want to end up with maintainable code. I don’t think it’s makes development ’easier’ as you need to think about and write tests. It also forces you to deal with all edge cases in your code which is only a good thing.

Becoming comfortable with the TDD workflow will be my first priority.

Writing clean code

Beginner’s code is not pretty. I’m hoping to write some proper clean code as soon as possible. Not enough attention is spent on this subject in courses or schools.

Java & Python

I want to be proficient at both Java & Python. That way I have nice balance between dynamic and statically typed. These language also see two difference usages in the workplace and they both still have a bright future ahead of them.

In developing for the web I’ll also pick up some Javascript.