Archive for the ‘Software Engineering’ Category

Awareness is Key to Kicking a Bad Habit

Golf Tips for Web Developers

Yesterday evening I had a pro golf lesson with the very capable David Lavelle. The lesson started off with me hitting a few balls so he could see my swing. Straight away, he was able to tell that my grip needed work and that I was standing too close to the ball.

Within five minutes he was able to show me a new grip, change my stance and correct the distance between me and the ball. It felt a little uncomfortable but I stuck at it.

It made an instant difference. I began hitting the ball cleaner and it flew far straighter then before. It was an amazing feeling to see such an immediate improvement from just a few small tips.

You Can’t Beat Expert Advice

If you don’t know what you’re problems are then there’s no way you’ll be able to address them. Having an expert take a look at my golf swing allowed me to see what faults I had.

Before yesterday, I had no idea that my grip was all wrong. I was also blissfully unaware that my stance was the cause of most of my drives skewing off to the left. So with the new knowledge from the 30 minute lesson I now have an angle to improve my drive and my overall game.

Developers Have Bad Habits Too

The golf lesson and the advice David gave me got me thinking about applying this approach to other aspects of my life, like writing code.

As a developer I’m always looking for new ways to improve my skills. I’m an avid reader of many different developer blogs like Sitepoint, jQuery’s John Resig, and Irish PHP and open source evangelist, David Coallier. I keep up to date on new frameworks and other modern approaches to make my code more readable, scalable and extensible. I also refactor my code as often as possible to prevent it from becoming stale and unreadable. So in general, it’s safe to say that I’m constantly trying to find new and better ways to architect my software.

But it’s not perfect, and I’ve no doubt that I have as many bad habits in my coding style as I have in my golf swing. My recent golf lesson, and the advice given to me by my instructor has made me think about how I could use the same approach to improve my skills as a developer.

Learning to Learn

If you’ve ever heard of the Conscious Competence Learning Matrix, you’ll know that there are four steps to learning anything new. These are:

  1. Unconscious Incompetence
  2. Conscious Incompetence
  3. Conscious Competence
  4. Unconscious Competence

(thanks to Louise from Optimum Training for showing this to me)

This matrix outlines how humans learn. Basically, it highlights the steps taken during the learning phase of anything new. These four steps can be explained as:

  1. We’re unaware that we don’t know how to do it
  2. We’re aware of it, but we still don’t know how to do it
  3. We know how to do it but we have to concentrate really hard to do it
  4. We know how to do it and can do it instinctively without thinking

For me, it’s the first stage that I struggle with. I’m constantly worried that I’m missing something new. That a new framework or a new approach will somehow pass me by and I won’t hear or learn of it.

However, once I do hear about something new, I’ll voraciously pursue it until I’ve either satisfied myself that it’s not relevant or I’ll convince myself it’s the next big thing and I’ll spend time adopting it into my armoury of development tools. Either way, I’m constantly trying to get passed the stage of unconscious incompetence. I’m eager to learn, but I can only learn what I know I don’t know.

Becoming More Open About My Code

I think every developer, myself included, could benefit from expert/peer advice on their own coding practices. Just like in the golf lesson, a 30 minute meeting with another developer could help highlight some weaknesses and help to identify aspects of my coding style that could be changed easily yet deliver maximum impact on the quality of the code.

I’m keen to get this type of advice, as I’m used to working in isolation away from other developers. So to help get around this I think I’m going to become more open about the way I code and start to publish parts of my work so I can start to get some feedback from the community on the most effective way to write software.

Helping Each Other Out

If there are any web developers reading this who would like to discuss their coding practices or get feedback on their approaches to solving the everyday problems of the web I’ll be happy to give my two cents. Email me or leave a comment here.

Microsoft Institute of Technology

Colleges Need To Align To Industry

Microsoft has a tight grasp on Institute of Technologies, and it’s choking the life out of the students.

The vast majority of computer science based courses in Ireland focus largely on teaching Microsoft technologies to the students, despite the fact that they’re only used in niche areas of the industry.

Ever thought about using VB Script as your client side scripting language? Of course not, it’s only supported by Internet Explorer. Want to build a web application powered by Microsoft Access? Don’t even think about it, it’s got a total absence of security features. Oh and it’ll also collapse in on itself with just a handful of simultaneous users. Want to build a web application with ASP? Don’t even bother, ASP is a joke.

Here’s a list of the typical technologies covered in computer science based courses in Ireland right now:

  • Microsoft ASP
  • Microsoft Visual Basic
  • Microsoft Batch Scripting
  • Microsoft Access
  • Microsoft SQL Server
  • Microsoft Active Directory
  • Microsoft VB Script
  • Microsoft IIS

Do you see the pattern here?

Microsoft has it’s fingers in all the educational pies across the country that teach the next generation of IT workers and they know exactly how to maximise the use of their technologies in industry: to get’m while they’re young when they don’t know any better. But the reality is that these technologies are not used by the majority of Irish companies in the web industry. In the job market there’s only a minuscule portion of employers looking for graduates with skills in these areas.

Adjusting for the Industry

For college graduates, the majority are blissfully unaware that they are now armed with a set of useless skills that have no practical use in the real world. It’s only after a few job interviews and a rude awakening do they realise that the last four years has been spent learning skills that are worth almost nothing in the work place. They now face the long hard struggle of relearning everything all over again, getting to grips with the actual technologies used in the industry.

Here’s what that the above list should have looked like:

  • PHP
  • Java
  • Perl
  • MySQL
  • Oracle
  • JavaScript
  • Apache

But it a seems that unless you can provide lucrative course sponsorship or another similar type of sweetener, big businesses such as Microsoft, will win the syllabus wars over open source technologies for as long as colleges find the lure of the greenback more appealing then providing their graduates with real industry strength skills.

Better Doesn’t Mean Harder

Learning the industry standards, isn’t any more difficult or doesn’t take any longer then learning the poorer Microsoft alternative. It simply means a shift in the content of the course syllabus. Why spend time learning ASP and Access powered web applications when you could just as easily learn how to make a scalable, well structured PHP, MySQL powered web app? It makes no sense.

Calling All Students

If there are any students reading this doing an IT based course, then please consider going to your course director tomorrow morning and ask him/her why there are so many irrelevant Microsoft technologies taught in your course and request that a larger emphasis be put on open source technologies instead. It’ll save you having to relearn what you thought you knew, on a platform that’s actually used in the real world.

Microsoft’s Mesh Operating Environment

This morning, Microsoft launched a preview of what they’re calling the Mesh Operating Environment (MOE). It’s an online platform geared at solving the device divergence, data convergence issue that I wrote about recently.

From the new www.mesh.com website, here’s the official description:

“Live Mesh puts you at the center of your digital world, seamlessly connecting you to the people, devices, programs, and information you care about— available wherever you happen to be.”

Sounds like the perfect solution, except it’ll only support windows devices (for now). See Scoble’s review for the full background to the launch.

Why Am I Interested?

This is Microsoft’s first real attempt at an online application. When it’s fully launched (probably in October this year), it’ll no doubt prove extremely popular, and as a developer I need to make sure that my own applications will be ready when this happens.

Microsft’s Mesh is going to provide a few interesting ways for developers to hook in their own applications. It’ll support ‘two-way RSS’ and have a RESTful API. Both of which combined enable other applications to fully interact with the MOE.

So why am I interested again? I’m interested because if this is where the community is going, my applications will need to provide tight integration options with it.

Critical Mass of Adoption

Once there are enough people using it, and I don’t think that’ll take too long (there are over 10,000 beta testers alone), Microsoft’s Mesh will likely become a one stop shop for online file management.

If it’s possible to integrate this online file system with existing web applications (my own included), which I think it will be, then people’s expectations of traditionally ‘stand-alone’ web applications will sky rocket.

Having fragmented data strewn across the Internet at various locations may not cut it anymore. People want their data in a central location (at least I do), so if I stumble across a web application that does what I need and also integrates with my existing online storage, I’ll be sold on the spot.

Now all I need is a beta preview account to help me prepare. Anyone feeling generous?

New ECOdrive Web Application

New Client Application Released

Fuel Efficiency for Your Fleet

ECOdrive is a new web application that helps to manage training sessions on driver fuel efficiency. Commissioned by Authentic Solutions Ltd, it stores information on a driver’s behaviour both before and after fuel efficiency training has been provided. It also measures the differences and provides the trainee with a certificate upon completion.

Good Clean Design

It’s got a pretty clean UI and includes a reverse pyramid menu so that the user always knows where they are within the hierarchy of the application.

The project took just two weeks to complete and is built on PHP and Smarty with a MySQL backend. It also makes use of the excellent FPDF utility for generating dynamic PDF documents.

Private Installation

The application was built exclusively for a single client and won’t be available to the public. For those who are interested in taking a closer look at what I do, I’m currently working on some other projects that will be released soon to the general public. I’ll post more about those in the next week or so.

If you want to find out more about what ECOdrive is, visit www.ecodrive.ie for loads of useful information.

SaaS is the Future

Software as a Service

Great Web 2.0 Services

Using online web services is part and parcel of my daily routine as a web developer. For time-keeping and invoicing I use the excellent FreshBooks by 2ndSite, for To Do lists I’ve been using Remember The Milk, for document collaboration Google Docs is the best option at the moment, and I use Google Calender and Google Reader for scheduling and RSS feeds respectively.

As more and more services, which traditionally were only available as desktop software are adopted for the web, they become more flexible, accessible and are far easier to use. For developers, hosted software is easier to update, maintain, and monetise. And with complete control over who has access to the software, the idea of software piracy is now as old as the notion of a downloadable trial version.

Taking Advantage

Software as a Service (SaaS) has really gotten my attention of late and I think I’ll be spending more of my time in this area over the next while. I believe there is a great opportunity to provide tailored software for specific industries and communities. The days of large software houses dominating the market is coming to an end. Tools that try to be all things to all people often fall short of the mark and end up bloated and difficult to use. In contrast, providing software that is highly tailored to market niches is a more focused approach that is growing in popularity.

Collaboration is King

Hosted software can be accessed by any computer with an Internet connection, it all runs directly within the browser. This simple shift in the software paradigm highlights a major advantage that SaaS has over traditional desktop software. It facilitates a truly collaborative and multi-user environment, which will encourage a whole new wave of software applications to be created. So far, this opportunity has mainly been manifested in social networking websites, but they have struggled to convert their huge visitor numbers into huge piles of cash.

A business collaboration tool built on the SaaS model that also harnesses the inherent social networking capabilities of the web is the type of project that really interests me.