Links for Software Engineers

Pot Pourri

I was talking to our .NET Development Postgrad students and we decided that there were a few things that you should be familiar with if you want to become a “proper” Software Engineer. These are the things I think you should do:

Read “Code Complete 2” by Steve McConnell. Perhaps the best book ever on software construction.  Then keep your copy where it is handy, and have a policy of reading a bit now and then, just to keep up to speed. If you can track down a copy of “Rapid Development” you should read this to.

Read I.M. Wright’s “Hard Code” blog. And buy the book if you like.

Read “How to be a Programmer”. Excellent stuff.

This is not everything you should do. There are other good places to look. But it is a start. Oh, and if anyone out there has other ideas about good, pragmatic texts for budding coders, then let me know and I’ll add them.

Hull Digital

I’m really pleased to find out that there is now a Digital Community in Hull:

http://hulldigital.co.uk/

They are organising a live event in October which has some interesting speakers:

http://www.hdlive09.co.uk/

I’ve persuaded my boss to pay for a ticket, and I’m really looking forward to it. I’m pleased to find that they do student pricing for the event (which seems to me quite reasonable) and with a bit of luck we can involve some of our students in their events in the future.

One of the most important things about computing is that the field is constantly changing and professional development is something you really need to work at if you want to keep your skills up to date.  Hull Digital looks like it will be a neat way of doing this.

I M Wright Speaks

You’ve probably heard me go on about I M Wright before. He is the “Microsoft Development Manager at Large” alter ego of Eric Brechner. He wrote the book Hard Code, which is a wonderful look at how to create software properly. He also has a blog which is brilliant. And now he has a podcast too, so you can listen to the good word rather than have to read it. You can find the file here.

Bad/Mad Practice

Alfred Thompson had a good post in his blog about software testing. Alfred and I are around the same generation (I hope he won’t mind me saying this) and we’ve both written software for money in the past. When I was writing my largest projects I didn’t make use of any kind of tester particularly, I just make sure that it worked before I handed it over. Alfred was the same.

Nowadays it seems that there is a trend towards developers handing stuff over which they haven’t really tested, on the basis that the test people who receive it will find any mistakes they made. Alfred (and I) hate this idea. I put quite a verbose response to this effect on his post you can find here:

http://blogs.msdn.com/alfredth/archive/2009/01/27/how-not-to-develop-software.aspx

I’ve since talked to people in the business and was appalled to hear that this practice is not uncommon nowadays because developers are pushed to meet deadlines and the only way they can do this is by skimping on the testing they do. Ugh. I reckon this really goes back to Bad Management, in that a manager will get a good feeling if they are enforcing a strict regime with tight deadlines which the programmers are all hitting.

The end result though is that the testers keep sending stuff back for re-working because it has bugs in, the developers lose time on the next phase because they have to fix all these bugs, so they send the next version out (in time for the deadline) with more bugs and so on. The words Vicious and Circle spring to mind. Along with Bad and Product.

It turns out that one of my heroes, Eric Brechner, has written a lovely post about this that sets it out really nicely:

http://blogs.msdn.com/eric_brechner/archive/2009/01/01/sustained-engineering-idiocy.aspx

Developing the Future

I have just received a nicely printed document called “Developing the Future” from Allison at Microsoft UK Academic Alliance. This is a summary of a report produced  by the British Computer Society, software firm Intellect and Microsoft. The report is produced every year and takes a look at the way the UK Software Industry is going. If you are interested in the business I strongly suggest that you take a look at the summary. It makes lots of good points about the future. The full report is even more interesting (but is also 128 pages). Points that I took away were:

  • The UK is still a great place to start a software business, with access to venture capital, a good tax regime and a public who provide a ready market for new developments. (although you might get bought out by a large multinational company if you do well – which might not be too bad I suppose). Other countries are starting to compete though, with targeted incentives for particular fields – notably Game Development in France and Canada.
  • Whilst Small, Medium and Large software development companies are doing well, there has been a decline in “Micro” companies, with less than 10 employees (although the small company sector has got bigger – so perhaps the Micro companies are growing).
  • There is still a “Knowledge Gap” in the Software Industry. Although there are many Computer Science courses in the UK, some are having difficulty recruiting students and there is a feeling amongst employers that not all software graduates have an appropriate skill set. Which leads to a good jobs market for those that have.

I read this with my “Hull University, Department of Computer Science” hat on of course, and I like to think that the graduates we produce are useful and have good employment prospects. Past experience seems to bear this out, and (not wishing to blow our own trumpet or anything) the fact that we are presently ranked sixth in the country for graduate employment bodes well.

You can get the summary, and the full report from here:

http://www.microsoft.com/uk/developingthefuture/default.mspx

The Future of Computing

If there is one person who should have an idea of where computers are going it is Andrew Herbert. As Managing Director of Microsoft Research he gets to spend a lot of time thinking about the future of this business. I was very pleased that I woke up from my impromptu nap just in time to go off and hear his talk to Imagine Cup students where he gave a brief exposition of the way he thinks things are headed.

Very interesting. He made the very good point that even though computer use has changed massively since he started in the field, with personal computers now commonplace, and everyone carrying around huge amounts of processing power in their phones, cameras and laptop pcs, the processors inside these devices work in fundamentally the same way as the first ever computer. The rise of increasingly clever and friendly systems has been on the back of the continuous improvement in processing power that has made more advanced software possible.

The bad news is that the way we build solutions in the future is going to have to change, for two reasons.

Firstly we are running out of scope to improve the speed of computers. The processors themselves, and the memory they use, cannot be made to work faster in the future. Instead we are going to have to build systems which get performance by providing extra throughput from multiple processors, rather than a single chip that goes more quickly.

Secondly it is becoming increasingly hard to create and deploy software with the level of complexity that is expected today. Many large developments end up being abandoned just because we cannot produce something which solves the problem, or can be made reliable enough to be useful.

All this points to massive change in the way that computers will be programmed in the future, with a need to mathematically prove that crucial software always works, and new programming languages being created to allow code to make better use of the new arrangements of hardware that will become commonplace.

Programmers of the future will have to use different ways to express their solutions, and develop new techniques of building, documenting and proving the correctness of what they write. The model of computer use itself is also changing, with distributed systems being used to access large centralised services via the network, leading to even more change.

The great news is that nobody in the room seemed particularly scared by these prospects. They didn't seem to regard them as things to worry about, but as a whole new set of challenges and opportunities to make their mark and do great things, which is just as it should be.

If you are looking for a field where what you do can have the greatest impact on the largest number of people and how they live their daily lives, I think you will be hard pushed to find one more interesting than computing just now.

The Value of a Degree

Earlier this week there was a big feature on the UK MSN homepage about the value of a university degree. The central thrust of the feature was that a degree does not prepare you for the real world and leaves you only with an enormous debt and a huge hangover.

The article contained a link to a discussion where folks told tales of woe and how their hard earned qualification has not landed them the job of their dreams.

The way I see it (if you really want to know) is that if you decide you want some thing (such as the "job of your dreams") then you should plan a campaign which will get you it. A degree can be a useful part of such a campaign. But it is not the only one. You should find every other possible way to get there. Try to land some work experience in the area. Do things that broaden you out and make you more "interesting" to people working in the field.

If you want to be a games programmer, by all means do a degree in it, but also start writing little games and putting them on your games programming blog. Start contributing to forums about the field, asking and answering sensible questions. Get a job in the business, even if it is just working in a games shop. It all helps make you into a more enticing prospect.

Getting a degree and then expecting to be snapped up because of your evident brilliance will not work. In fact I don't think it ever did. When I did mine, all those years ago, when history was current affairs etc etc I remember being told that a degree is not a job ticket, but merely a licence to hunt....

Why not spy on the kids?

I've just done a piece for Radio Humberside which took as its starting point an attempt by an anxious parent to spy on the internet doings of their kids. It did not end well. If you want the thoughts of Rob on the subject, here they are...

I can’t really understand what all the fuss is about with these social networking sites. But then again, I’m almost certainly not supposed to. I write a blog, but that is just because I happen to like writing and my ego is so big that I think other people like to read it. Putting more stuff out there about me seems rather silly, but perhaps that is because I know what I'm like...

At the end of the day the internet is just another communication tool and another way that children (particularly teenagers) can make themselves different from parents. I think every generation does this one way or another. There were huge ructions when postcards were invented because for the first time they provided a quick and cheap way for people to keep in touch (which fathers and chaperones were probably not that keen on). Then it was the telephone, then the mobile phone and now the internet. All the way through the poor parents had to watch their offspring employing new media and devices to communicate. I guess mum and dad just ended up gritting their teeth and trusting that their kids are going to do the right thing, which is probably the best plan.

Using all these wonderful new toys should not be a problem, but just like you’d probably ration someone who wanted to play football all the time and not do any school work, you should do something similar with computer time. And, whilst it is never a good idea to “go under-cover” and spy on your children/young adults (not going to encourage trust across the generations) I think that if you suspect that something is going on which is causing your kids unhappiness then it is important to try and find out more.

Whatever you do, don’t move in just to try and get “down with the kids”, this is pretty much doomed from the start. Good advice, such as not giving out personal details, steering clear of strange web sites and never running programs that you’ve just downloaded are always important though. This should be taught in the same way as we teach road safety. Learning a bit about the computer is also very good plan. Find out how you can make sure that your system is up to date. Discover how to take backups regularly so that important work doesn’t get lost and you can recover from nasty virus infections. If you can make yourself the family “computer guru” that would be a very nice place to be.

Something which is important is that everyone needs to understand that anything that you put out there is visible to everyone, for all time. Even if you take down those snaps you took at a party for a laugh, they may have been copied already, possibly by one of your "friends". And you don’t want to apply for a job and find that your web personality from ten years ago means that you don’t even get an interview.

Remember that employers are frequently using Google to check up on applicants. I would definitely Google someone who wanted to work for me and I would expect anyone thinking of hiring me to see what they could find out about me in the same way. I never put anything on the web that I would be unhappy about anyone reading. Even my emails are censored like this. You just never know where the data might end up one day.

Of course another thing about the internet is that you can create completely false “alter egos” which let you be anyone you like for a while. I’m not sure why you’d want to do that, but we’ve already established that the point of these things is lost on me anyway. I think that in the future we are going to see a need for people to have a slightly more solid internet persona. For example, if you want to bid on eBay for something you find that many people won’t deal with you unless you have some transaction feedback. That requires a tie back to a concrete identity with proper email and payment technology. Maybe in the future it will be harder to hide behind a fake self that you’ve created, which is probably a good thing in the long run.

I suppose at the end it all boils down to trust, you trust your kids to do the right thing, and they trust you in that they feel happy to tell you when things get tough.