Saturday, 13 May 2017

Getting into the software development business

A couple of weeks back I spent the day at the Leeds Digital Job Fair. I've been doing a lot of recruitment for the last few months, and been fortunate enough to find a few good developers to join our dev teams.

Hardly a month goes by when I don't get asked "( I | a friend | a colleague ) wants to move into software development from (some totally unrelated field), how should ( I | they ) go about it?". This post aims to consolidate my answers to that question.

Everything that follows is my own opinion. But bear in mind, I (and other devs like me) am the one who decides whether you get an interview or not based on your training & experience.

First of all, be realistic. Yes, there are jobs out there paying big money for good developers. They require experience - lots of experience. You really aren't going to get a 50k GBP job (2017 Northern England rates) based on no experience and a boot camp course.

Speaking of boot camps, there are lots of companies out there doing introductory software development courses of very varied cost and quality. I saw one charging 6k for a syllabus that made no sense to me, and another at half that price that was much more coherent. RESIST THE SALESPEOPLE! Make an informed decision - I'm guessing if you want to get into dev then you're maybe in a lower paid job, so you can't afford to throw money away.

Here's my list of most important pointers:

1. If you regard learning new things as a chore, forget it altogether. You cannot function as a developer without learning new things all the time. If you don't enjoy that, you will hate it.

2. Experience is everything, and you don't have any. So get some: write websites for yourself, friends, clubs, local charities. Look at getting involved in open source projects, maybe do some documentation for them if your coding isn't good enough to contribute code.

3. Don't try and learn everything at once, pick a coherent direction and follow it. I've seen courses promising to teach 'full stack'. IMO learning to be a full stack developer takes time and experience.

Coherent directions might be:
  • Java
  • Javascript, Node.js, Catalyst
  • PHP
  • Python
  • C# and Visual Studio
  • some other language and context
(Every developer needs to know some HTML/CSS, but unless you're a web designer rather than a developer, those skills alone will not be enough.)

4. If you're going to shell out a load of cash on a training course, choose carefully. Ask for advice, assess whether the syllabus looks coherent or will just give you a smattering of widely different topics.

5. There is a lot more to it than just being able to write code. Any jobbing developer has a working knowledge of the following
  • Libraries and frameworks (jQuery, Catalyst, Spring, Hibernate etc etc etc, depends on what they're working on and in what language)
  • Unit testing (and writing code that's easy to test)
  • Agile methodologies (e.g. scrum
  • Algorithms
  • Continuous integration and build tools (Jenkins, maven, teamcity..)

If you can talk sensibly about these things in an interview, I'm going to take you more seriously whether you have commercial experience or not. You can get experience of them by downloading and experimenting with open source code.

6. LEARN AN IDE! It doesn't matter much which one, choose whatever is in widespread use for your language/platform. The important thing is to learn about:
  • the debugger - most languages have one, they allow you to pause the code and see what's happening in real time. You won't realise how important that is until you've done it.
  • code completion - the IDE will give you hints about what to type next, this can save you a lot of time
  • code navigation - moving around a complex project with hundreds of source files is painfully slow without an IDE, and instantaneous with.
  • build tools - the IDE normally has build and run tools built in, this will save you time and also help you to learn the build tools.

OK, so all that was probably a bit intense and daunting. Here's the lighter side:  I've been working in the computer industry now for about 25 years, 15 as a developer. I'm learning new things every day, and having an enormous amount of fun at it. A lot of software development is about financial systems, or ecommerce sites, but software permeates every aspect of life. I've been lucky enough to work in ethically valuable fields for many years, but even before that I contributed to open source projects, including software to make the lives of severely disabled people easier. Writing code can be great fun, and it can be a worthwhile thing to do.

Good luck :)

Friday, 1 July 2016

Key programming books

A top 5 of programming or related topics books I've found most useful:

Pragmatic Programmer
The Mythical Man Month
Perl  Testing, a developers notebook
UML in 24 hours
The Design of Everyday Things

I'll blog details of each one later, in particular 'The Design of Everyday Things' which isn't an obvious 'programming' related book.

Monday, 13 June 2016

Dangerous design flaw in wordpress

Wordpress insists on storing fully qualified URLs all over the place. Especially in the database. This means that if you restore a backup of a wordpress installation onto another machine (a test/dev machine for example), you can unexpectedly end up being switched to the live site at any moment.

Add to this the fact that as previously complained about, the whole thing is stored in the database, so you are logging into a dev machine with the same user account as live, and the potential for catastrophe is huge.

Monday, 6 June 2016

fun with recursive chown and dotfiles

 rm -rf .*  
removes all hidden subdirectories and their contents, but generates an error and does nothing when it tries to remove '.' and '..'
I've always just accepted that behaviour without thinking. I now discover that it's the wrong thing to do. I discovered this by doing
 chown -R codehare:codehare .*  
This has a very unexpected effect. A very bad, very unexpected effect. It chowns everything that matches .* (i.e. hidden directories) in the current directory, then it starts in the parent directory and recurses through all subdirectories of that. This is not good news. Especially if you do it as root/sudo. Especially if you do it in a home directory. Especially if you use key based authentication.

Well that was a fun start to the week...

Tuesday, 10 May 2016

Wordpress - yet more 'everything done in live' horror.

I've just restored a copy of a wordpress DB from a colleagues dev machine. When I run it up locally none of the resources (CSS etc) are accessible because the base URL is wrong.

It turns out that all URLs are absolute, and written into the database. Tools apparently exist to traverse the database changing all these entries.

This really is appallingly noddy and unprofessional. It's no wonder web development as a discipline has such a dreadful reputation.

Tuesday, 3 May 2016

12 Factor

This is a good set of principles for neatly encapsulated services. In many ways it reads like the SOA special case of the Pragmatic Programmer. This is what SOA promised from the start

Friday, 29 April 2016

When writing documentation

Tip for developers when writing documentation. Normal people (by which I mean non-developers) do not look at 5000 word blocks of solid text and think "yay! Lots of useful information!".

Diagrams in documentation don't have to convey any illuminating and helpful points. Sometimes they can just be a way of stopping your reader bursting into tears before the halfway point.