I was asked recently about what I would tell myself shortly after graduating if I had the opportunity to give my younger self some advice. Based on years of commercial experience, there are a few relatively simple things that have made a big difference.

Automation means that you will make fewer mistakes

If you can automate a repetitive task, do so as it will mean fewer problems due to human error. The trick is being able to automate the task sufficiently quickly such that you don't spend more time setting up an automation that it would have taken you to complete the repetitive tasks one by one.

Know at least one programming language at an advanced level

This sounds fairly obvious but many developers know lots of languages but only to an intermediate level. It is really important to have at least once tool in your development toolbox with which you can perform any task that you need to do. The actual choice of language isn't too important as long as you're comfortable with it. I would suggest at least one of the following would be useful for most job opportunities:

  • Java
  • C#
  • C++

Specialising in one particular language has numerous advantages. Firstly, you learn more of its features and so it takes you less time to program them. In addition, most higher level languages at the present time are surrounded by a plethora of frameworks and helpers that take the basic language implementation and build on top of it - so it gives you the opportunity to understand these frameworks too. Knowing when it makes sense to use a framework and when not to is also an important skill.

Learn how to use regular expressions thoroughly

Regular expressions have become one of my favourite things over the years. As a developer, you are regularly faced with occasions when you have to search or transform very large sets of data in a specific way. This could be something as simple as replacing every instance of 'specialize' with 'specialise' in a large document or something a little more complicated such as replacing the first three characters from the third field in a comma-separated file with 'XYZ' where the fourth column is 'Y' and the third field starts with 'ABC'. Regular expressions build the foundations of many of the most useful UNIX tools that I'll describe in the next section - so knowing them well is very helpful.

Copy and paste rather than retype where possible

This will result in fewer mistakes. Your eyes are very good at interpolating images so that you see what you expect you will see - even though you didn't actually look!

Learn Linux / UNIX basics - streams, command [cat, grep, sed, awk, find, xargs]

The more you use UNIX or Linux, the more you realise that the vast majority of problems that you encounter on a day-to-day basis have already been solved. The solutions are available for you to use - you just have to know where they are.

Understand hash functions (many applications in searching, loan balancing, map-reduce)

Hash functions will definitely have been covered in your university course if you studied Computing Science or Software Engineering. You are likely to have encountered them when talking about searching as one of their uses is allowing you to search a very large data set in constant time.

Understand the problem you're dealing with

In order to solve a complex problem effectively, it is important to understand all aspects of the problem. This enables you to structure the data to achieve whatever you're trying to do. Don't be afraid to build a prototype quickly without necessarily adhering strictly to your normal development and testing methodologies and standards. The idea of a quick prototype is to help you to understand the problem. Just make sure that you avoid the pitfall of evolving the early prototype too far without adding in proper testing.