No it’s not a reference to Star Wars or anything sinister, let me explain..
For the last 15 years I’ve spent my IT career working on servers, Microsoft operating systems and all the things that come related to that.
The one skill set I’ve never explored is the magical world of programming, don’t get me wrong I can write basic scripts, SQL queries and the majority of time read other people’s code and work my way through it, but I’ve never spent the time to learn how to program. The biggest reason for this is because my brain seems to rebel against learning the structure of a programming language.
In an effort to increase my skills set and give myself a challenge I decided it was about time I learnt how to programme, the first obstacle, choosing which language to learn. To be honest this is probably the hardest part for a “new” programmer as the list of choices and possibilities seem to be endless. Luckily I had a requirements list (more about this later) and some help from a friend who has been programming for the last 20+ years (cheers Brian).
My requirements where the following:
- Cross platform support – I wanted to learn a language that would run regardless of the OS and in some cases the hardware platform.
Network/Database support – I intend to use my new programming skills to eventually build applications that can access networks and databases so I needed a programming language that already had extensive built-in networking and database support.
Makes sense – This might seem a bit of an odd requirement but I wanted a programming language that made sense to me, because I’ve always struggled with programming I wanted to feel at ease with what I was learning.
Once I had my requirements and with the help of Google I created a shortlist of languages that might fit my requirements. These were the ones I came up;
Based on my requirements I removed the following languages from my list.
Python and Perl were removed because although they will run on Linux and Windows operating systems it’s not “native” for Microsoft Platforms and I was looking for something that would run “out of the box”. Microsoft .NET was removed because to my knowledge it only runs on Windows operating systems.
Ruby was added to the shortlist because I had read that it was used to write a lot of Security tools and as this is an area I am interested in it was added to the list. It was removed because it wasn’t a language that I knew a lot about or what the requirements for running it within an operating system were (remember people this is my reasons, whether they are right or wrong).
That left C and Java on the list. I understand that C is for all intents and purposes the grandfather of programming languages, learn C and everything else is “easy”. The only issue for me is that C is quite complex (especially to new programmers) and although it supports multi platform seems it didn’t quite fit what I’m looking for.
So my final choice was Java, Java appealed to me for several reasons, 1) I already had a “Teach yourself Java..” book, 2) Java is not platform or operating system dependant (according to Java it’s installed on 3 million devices worldwide), 3) It already has an extensive library for network and database connectivity and finally, 4) looking at examples of code on the internet it makes sense to me.
I’ve been reading through my book for about a week now, the information is slowly sinking in and to be honest I’m actually enjoying it, I’ve got a long way to go but I’m pleased I’ve taken the plunge. I’m already thinking about applications I can write that will help me in my current job, and once I start I will publish anything of interest on the blog for others to review/comment or use.
I will leave you with one final thought, I’ve worked with a lot of programmers over the years and during that time I’ve spent a lot of time and energy proving that the infrastructure isn’t always to blame for an application not working. The one thing I will strive to avoid as I learn Java is to ensure that anything I write works with the infrastructure (no matter if it’s a laptop or a network) so that I can avoid ever saying this.. “The application is awesome in isolation“.