What Language Should I Learn First?

This is a question I often see asked online – what language should I learn first?

The answer – don’t worry about it – just pick one!

At school I was taught COMAL, which is similar to BASIC. At University, Java and Visual Basic. I then learned PHP in my spare time, which I initially used when I landed my first job, before eventually switching to C# and ASP.NET.

I now program exclusively in C#, yet that isn’t where I started out.

Your choice of language is a very personal thing – C# just happened to appeal the most to me. The syntax made a lot more sense than any other. Some others love python and swear by that, others love Java. Some even like Visual Basic (Weirdos!). Whatever you start with, probably won’t be what you end up using.

You’re Not Learning a Language, You’re Learning Programming

The one thing I learned in my career is that programming itself is a skill, and that’s what you need to master, not a particular language. You need to learn to think logically, in a way that the computer will understand. You need to understand structure, in terms of objects and classes, and also loops and functions.

None of this is language dependent.

Once you master programming, you realise that the rest is just syntax – it’s like when you were young you first needed to master the skill of speaking, writing and reading. Once you had mastered that in one language, learning a second language is straightforward.

I do C# now, but if I wanted to switch to Java or Python, I could do so in no time at all.

So what language should you learn? Don’t worry about it – just pick one and start learning, you can always switch later – and you almost certainly will.

Read More

Don’t Ignore The Freelance Sites

It’s often said that you shouldn’t even bother looking on freelance sites such as PeoplePerHour and Upwork if you are looking for freelance work. In fact I’ve been guilty of saying the same thing myself. I’ve tried looking for work on these sites on and off for a few months now, with little success initially. But after speaking to a friend recently, he persuaded me to keep trying, saying he had succeeded in finding some good customers on PPH in the past, so I kept trying, and finally I landed a major client, paying close to my normal rate.

Below I will share some advice on how to succeed on these sites.

The Problem With Freelance Sites

The biggest problem most people have with freelance sites such as PeoplePerHour, Upwork, Rentacoder etc is that they are a race to the bottom. Due to their international nature, anyone from anywhere in the globe can bid on a job, meaning those from countries with a lower cost of living have a massive advantage over those from countries such as the UK and US where the cost of living is higher. This puts a lot of people off at first, when they start getting drastically underbid by someone prepared to work for £5 an hour, when you’re trying to charge closer to £50.

As a client trying to hire a programmer, this presents an easy way to complete a project on the cheap. But not everyone is on the site trying to find a freelancer on a budget, there are still many companies using these sites as an easy way to recruit an experienced freelancer. By persevering, you can still make a living and find some high value customers on here.

Ignore The Number Of Submissions / Applicants

I’ve used PPH as both a buyer and a seller, and one thing I’ve come to notice is that few people bother to read the specifications of a job. When posting a job, I would always get flooded with applications that were clearly a copy + paste response. If I’m outsourcing a job, it’s normally because it contains some specific technology I’m not familiar with, yet I’d receive countless generic responses from people who clearly hadn’t read the specification, and were just applying to any job in the category they had chosen, and didn’t seem to have any experience with the technology at hand.

Anything that looked like a generic copy and paste, I just binned immediately out of principle. If they don’t take the time to read the job and formulate a proper response, then I don’t expect their work to be of a very high standard either.

As a result, you can all but ignore the number of submissions. A job may have 20+ applicants, but you can bet at least half of those will be rejected instantly for being generic, or showing no apparent experience with the technologies at hand.

Only Bid On Jobs With Proper Specs / Detailed Descriptions

The way to really succeed is to become selective on what you bid on. As you spend more time on the sites, you’ll soon get a feel for what jobs you are likely to succeed with, and what jobs are just looking to get something done on the cheap. The biggest giveaway tends to be the level of detail they have provided in the description. Any user posting a very brief description of the requirements, probably isn’t terribly serious about the project, and just wants it done quickly and cheaply. Those taking the time to fill out an exact description or provide a full specification, are more likely to be serious about the project, and will pay better.

Bid On Jobs From Your Own Country

Another good strategy is to always bid on jobs from your own country. I now search exclusively for jobs posted by people based in the UK, like myself. There’s a huge advantage to working with someone in the same country as you – common language for a start, no time difference, and the ability to pick up the phone and speak to them easily when you need to. It’s also a lot simpler for the client, without having to deal with foreign currency conversions and taxes.

Those who are prepared to pay a decent wages will almost always hire someone from the same country as them. This can be another reason why the number of submissions can be ignored – most of them will be from abroad.

Check The Budget / Experience Required

PeoplePerHour forces every job poster to select an experience level required when posting a job – this can be a great indicator of how much they are prepared to pay. Those choosing “Beginner” generally want the job done on the cheap, while “Expert” level jobs tend to pay a lot more.

Upwork has a similar setting, showing “beginner”, “intermediate” and “expert” level projects, but also for each person posting a job, it will show you an “Average Hourly Rate Paid” figure for previous jobs they have posted – make sure this is at least close to your normal rate, but bear in mind this is an average, so charging slightly above this rate may still be acceptable.


After much trial and error on these sites, I finally found a system that is fairly reliable in finding decent prospective projects. I now search exclusively for “Expert” level job posted by people from the UK, who have an average hourly rate spend of at least £25+. I then read the descriptions and specifications to see how much detail they’ve gone into – anything with just a brief description I discard immediately.

By following these rules, I’ve been able to land clients paying my requested rates. Let me know how you get on.


Read More

Going Freelance

In December of last year, I decided to leave my job of 11 years to concentrate full time on freelance work, and to try and build up a software company of my own – Nighthawk Software.

8 months in, and it’s been a lot more challenging than I thought, but at the same time a lot more rewarding than anticipated.

One of the biggest challenges I’ve faced has been trying to define exactly what it is I do.

I’ve always concentrated on backend web development work – creating the software behind the scenes that powers web applications such as CRMs, email systems, project management suites etc. Personally, I’d call this “Web Development”.

But when people here this, they automatically want you to design them a new website for their small business. While I often work as a full stack developer, and I’m proficient with CSS, HTML and Javascript, I suck at design.

While I’d call this type of work “Web Design”, in order to distinguish the two, the terms seem to be used interchangeably within the industry, particularly amongst clients.

That’s been my biggest challenge so far – explaining what I do to clients, and specifically, what I don’t do.


Read More

Beirut, Lebanon – May 2012

Everyone’s heard the saying “it’s like downtown Beirut” – and it’s never meant in a good way. When Lebanon descended into civil war in 1975, central Beirut became one of the most fought over parts of the country. The constant fighting made downtown Beirut a no-go zone. But that all ended in 1990, and I’d read good things about it since – so when a friend won a pair of free return tickets anywhere on bmi’s network, it seemed like the logical choice.

A Sprawling City
An overview of the city, from the nearby hills

While relatively safe nowadays, there are still a few things to be aware of when visiting Beirut. The main one, is the country’s neighbour – Syria. The consiage at our hotel had recommended visiting some ancient ruins to the west of Beirut, but when checking a map we found these ruins were just 20 miles from the border – an area we had been warned by the Foreign Office to avoid at all costs – kidnappings of western tourists near the border tended to happen occasionally. We were also told to avoid the north of the country, for similar reasons. Thats fine – I don’t intend to stray too far from Beirut anyway! News reports the day before revealed there had been a car bomb in an area on the outskirts of Beirut – just off the main road from the airport. It all adds to the fun, right? People pay good money for excitement like this… We decided to spend our first day exploring central Beirut. Our hotel was located close to the coast on the northern tip of the city, so we headed down to the coast and started walking along the relatively newly constructed promenade.

A fisherman casts off into rather rough seas,right in the centre of Beirut

Redeveloped Waterfront
Redeveloped Waterfront

As you start to explore, you immediately see the amount of redevelopment that is taking place in Beirut. Once the most important financial centre in the Middle East, the civil war saw a drastic withdrawal form the city, but investment is now starting to return. But the reminders of the citys past are still there to be seen, while Versace may be building a new luxury apartment block, right next door is the shelled remains of the former Holiday Inn


The Past Remains
New developments alongside the ruins of the former Holiday Inn


Once the tallest building in the city, the Holiday Inn provided an ideal location for snipers during the civil war. As a result, it became one of the most fought after buildings, as each side wrestled for an advantage over the other. The remains can still be seen, along with many other buildings still riddled with bullet holes.


Old Meets New
Ancient Roman Ruins

The Holiday Inn isn’t the only throwback to the cities past. Beirut was also an important Roman town, and a former Roman Bathhouse discovered in the 1960s has been well preserved, and is open to the public to explore. Lebanon changed hands many times, most recently becoming a french colony. The French influence is very apparent in central Beirut, with wide avenues adorned with street side cafes. You could easily forget you are in Beirut, and confuse it with Paris.


French Influence
Wide, cafe lined streets, the French influence is apparent.

Hamidiya Clock Tower
Hamidiya Clock Tower

The following day, we decided to head out of the town and explore some of the surrounding area. The concierge at the hotel suggested we hired a driver for the day, and after pricing it up, we decided it was indeed the way to go. Slightly more expensive than an organised bus tour, but it gave us the flexibility to go where we went, and when we wanted. No rushing about, or waiting on others. We took a drive up into the hills to get an overview of the city, before heading up the coast to a beach town the driver had suggested for lunch. It appeared to be a popular spot, and despite the stone beach, the beautiful blue sea certainly made up for it.

White Stone Beach
White Stone Beach

After lunch we continued up the coast to our destination – Byblos, thought to be one of the oldest continuously inhabited cities on earth, tracing its routes back to 8800BC. The city is built around a rather picturesque old harbour, while narrow market streets wind their way inland from there. Unfortunately, as is the case throughout the world, the market streets are now selling tourist tat, rather than the fresh produce and wares of days gone by.

Byblos Harbour
Byblos Harbour
Narrow Market Streets
Narrow Market Streets

All in all, Beirut was a fantastic place, and somewhere I would highly recommend visiting. Very cosmopolitan, with a strong French influence, but with their own unique Lebanese twist.

For more photos from my trip, please see my flickr account: https://flic.kr/s/aHskQ5FYZ4

Read More

Using WebAPI? Disable WebDAV To Avoid PUT/DELETE Issues

This one turned out to be a right head scratcher!

A WebAPI that worked fine in development, but as soon as I deployed it to the live server, any DELETE command started returning “500 – Internal Server Errors”. I stripped the code back as far as I could, to the point where the DELETE function was only returning a string. Nada, still getting errors.

I checked the request directly from the server, so it would bypass the standard error page, and give me the real error. It was all down to WebDAV.

It turns out that by default on IIS, WebDAV will be configured as the default binding for DELETE and PUT requests.

If you disable WebDAV (which it was by default), it STILL remains the default binding! IIS passes the requets to WebDAV, which immediately rejects it, due to it being disabled. Thus causing the 500 error.

If you are using WebAPI, then you need to disable the module WebDAV in your web.config file, as follows:

  <remove name="WebDAVModule"/>
  <remove name="WebDAV" />

Read More

Never Trust Your Hosts With Your Backups

On Saturday, 123-Reg informed their customers that one of their scripts had gone wrong, resulting in around 67 servers being accidentally deleted. As these were all un-managed VPS servers, there were no backups.

This came just days after someone posted on Server Fault  asking for help after one of his scripts also went wrong, deleting the accounts and data of all 1,500 of his customers. All his backups were also deleted by the same script.

While the latter case is now claimed to have been a publicity stunt, it does raise an interesting question about the safety and security of web hosts own backup solutions.

The Dangers Of Trusting Your Backups To Your Web Host

Often a web host will offer a backup solution for an additional price on top of the hosting package. This is often configured as a location on a remote backup server, which is mounted as a drive on the web server for easy access.

This seems to be the kind of backup solution offered in the second example above, and as we can see it proved to be next to useless. Sure, it would help in the event of a physical hardware failure on the server, but for every other case, it is of no use. It doesn’t protect against mistakes made by the host, it wont protect against hackers or viruses penetrating the server, and it certainly doesn’t help in the event of the host going bankrupt.

If the lights go out at your hosting provider – how do you access the backup to restore your data on your new server?

The Preferred Way – A Third Party

The only way you should ever consider doing backups is with a third party company. In almost all cases, they will provide you with a piece of software that does the physical backups. This creates a nice air gap between your server and the backup, keeping them safe from viruses and hackers. The fact that they are owned by a different company protects you against bankruptcy, and they will almost certainly be in a different physical location, again offering protection from extended failures or loss of a data centre.

Anyone not using a third party for backups is just putting all their eggs in one basket. And we all know not to do that, don’t we?

Read More

Bloggers: Always Date Your Posts!

One of my (many) pet peeves is blog posts or articles that don’t have a date on them. The world of technology moves quickly, and technical articles can very quickly become obsolete.

Recently I was implementing Stripe payment support on a website I run, and was looking for articles explaining how to use it with C#. A google search produced plenty of articles, however it quickly became apparent that the Stripe API had changed in the last few months, and therefore anything written more than 3 months prior was obsolete.

Google makes it easy to identify old articles: it shows the date in the search results, allowing you to skip over the article.

google dates

Yet despite this, I still frequently come across blog posts and technical articles that don’t contain a date.

PLEASE: Always date your posts so we don’t have to waste time reading them to find out if what you are saying is still relavent, or has become obsolete.

Read More

Remote Desktop & High DPI Displays

When I received a new work laptop last month with a 4k screen, I began to come across all sorts of issues with various programs. While some applications scale nicely, others do not. One of my biggest pains has been with using Remote Desktop.

Here’s a typical remote desktop session window:



With the server running at 1600×1200, and my desktop at 3840×2160, you can see that the remote desktop window takes up less than a quarter of the screen. On a 15″ screen, that makes the text almost unreadable!

Remote Desktop doesn’t support scaling, but fortunately Remote Desktop Connection Manager does. You can download it here: http://www.microsoft.com/en-us/download/details.aspx?id=21101

Now I can scale the Remote Desktop window, and save having to squint at the screen all day long!



Read More

Windows Power Plans

I recently received a new laptop at work – a 2.4Ghz i7 with 16 Gb of memory.

That’s quite a beast of a laptop, so you’d think it would have no problem coping with Visual Studio 2013. But over the last few days it’s been frustrating me a little – there’s a noticeable lag when typing, and Visual Studio as well as various other programs were performing a little slow.

I immediately disabled all extensions, and removed the recently installed virus checker, but to no avail.

It wasn’t until I checked Task Manager that I noticed the problem, CPU usage was 0% of 0.77 Ghz.

That can’t be right!

It turns out I had switched the power profile last week while running on battery, and changed to “Power Saver” mode. I thought these settings only took effect when running on battery? Apparently not. I’m now back on “High Performance”, and Visual Studio is once again responsive.

Read More

Changing The DPI Scaling In Windows 8

Screen real estate is important – so much so, when I was looking for a new laptop, it was one of the key factors I considered. I like to have enough space to have the Visual Studio Solution Explorer open, while still being able to see plenty of code, and ideally still have enough room to see at least part of the web browser next to it – the more the better.

Despite wanting a portable laptop with a 13″ screen, I wasn’t prepared to accept a screen resolution any less than 1920×1080. I eventually found one that met my needs.

On receiving the laptop however, I was disappointed to see that I didn’t have as much space as I had expected. I could barely view a single web page, and to say VS was crushed was an understatement. I double checked the screen resolution, and sure enough it was indeed 1920 x 1080. What was wrong?

It turns out Windows 8 will scale the DPI depending on the size of screen and resolution selected. While this gives a sharper image, it comes at the expense of real estate. It’s an easy enough fix if you’d rather have the space back, however.

How To Adjust Size In Windows 8

Right click anywhere on your desktop. In the popup menu that appears, select “Screen Resolution”


The Screen Resolution dialog will appear. At the bottom of this dialog, click “Make text and other items larger or smaller”


You can now adjust the slider to resize items on the screen. I’ve set mine to the smallest possible setting, but on a 13″ screen this may be a little too small. I’ll need to have a play around with this over the next few days.



Read More