By Mark Garratt

I started coding at a young age, but the first substantial projects I created were in PHP. From that point onwards in my mind I was a PHP Developer, I carried that thought right the way through university and into my first job. By the time I started working I’d experienced Java, Delphi, C, Basic and a few other languages, but I knew I still wanted to be a PHP developer..

After I left university I stayed in contact with a couple of the lecturers and returned to present examples from industry to the final year students. During these return visits I discussed what it was like moving from education to industry with the lecturers. It seemed a recurring issue for them was students starting their courses with a mindset of becoming a language specific programmer. They were not interested in a course being taught in Java because they were dead set on Python, for example.

This got me thinking about the virtues of learning how to code versus learning a specific language. Up until this point I had been working at an agency that only used PHP on a single framework, I was beginning to stagnate. Luckily they took on a client that needed some work done in Node.js and I was able to get assigned to that project. At this point I had a very rudimentary knowledge of JavaScript, mostly using jQuery instead of actual JavaScript, suddenly I was writing a server-side application with reasonable complexity.

For me it was a huge learning curve, all the time getting more and more frustrated that things weren’t working the way I was used to. Over time however I came to understand how an event loop works and the considerations you have to give to an application that doesn’t lose all state at the end of each request. This was a major turning point.

Eventually the Node.js project came to an end and I went back to the familiar PHP on the usual framework. This time, however, something was different: the experience of using a different language with different paradigms had changed (and improved) the way I was writing my PHP code.

Fast forward a little to when I started at MOO, where I was initially hired as a PHP developer on a team that also maintains a reasonable amount of Java code. I hadn’t used Java since uni and had forgotten most of what I learned, so was practically starting from zero. My first couple of months were spent working on the PHP application, with the occasional small modification to Java with support from my manager and more experience engineers on my team.

Not long after I started, the decision was made to migrate a large part of the existing application into a new standalone application in a more service oriented architecture. As a team we decided PHP did not really fit the purpose for this work and having a good amount of Java experience on the team it was obvious to go with Java for our new services.

Moving to Java was a completely different experience than learning Node.js. I had a different mindset, after the good outcome last time I was eager to get another language under my belt, especially stepping into something slightly different like static typing and compilation. I think if I had to use Java for that first non-PHP project I would’ve found it a lot harder, but picking up a new skill at MOO felt seamless.

After getting to a point where I was competent in Java it was really clear to me what the university lecturers were trying to get across to their students who had already chosen their technology; what you really need to do is learn how to program. Once you’ve mastered the basic building blocks and then a few common paradigms then you’re set to move into any language.

There is a lot to be said for having access to people who are already experts in the thing you are trying to learn, and MOO was full of them. Whenever I didn’t quite get something there would be someone available to explain it to me and get me moving again. No one would even hint that I was asking a stupid question, even though when I got the answer sometimes I thought I had clearly asked something trivial.

On top of having peers available to help me learn, MOO provided books, online and in-house training. These resources helped me to properly learn the language and why it behaves the way it does. Previously I had only learned from freely available online resources, but dedicated technical books and in person training sessions are worlds apart from even the best open resources on the internet.

In the same way that learning Node.js made my PHP better, learning Java has improved the way I go about writing both Node.js and PHP code. I am now focusing on learning Python at work and dabbling in many other languages in my spare time to see what is out there. The idea of being a one language developer is long gone. My job title is now Software Engineer and I like that title, I feel now I have the ability to choose the right tool for the job at hand as opposed to only having a hammer and seeing everything as a nail.