5 Things I wish I was taught in software school

February 4th, 2008

It’s hard to believe, but it’s been 3 years since I graduated from Mohawk College’s Software Engineering Technology Program. That means that it has been 3 years where I’ve been able to reflect on what the program taught me, and some of the things that I wish I had learned. There are many things that I am happy that I now know, however I also feel that there were some key elements that were completely overlooked. I don’t want this to be a rant piece, that’s just not my style, I just feel that if I had graduated knowing about the following things I would have entered the professional world a much stronger developer.

1. How to use source control
This one is huge, everything I know about source control and version control systems I have had to teach myself since becoming a professional developer. I’m not saying that every software program should have an entire course dedicated to this, but at least knowing the basics would be nice since it’s so critical to the development process. Perhaps this is specific to the program that I went though, but when I graduated I had no idea what version control was, only that Visual Studio had something called Source Safe that I never bothered to install. Perhaps if it were a requirement for the larger final semester projects to be submitted through a source control tool, don’t even force students to use a specific tool, but use SOMETHING.

2. How to write secure code
When I was in school the web application world was still in it’s infancy so perhaps this isn’t as much of an issue now. Never once did I hear the term ‘SQL Injection’ or ‘Cross-site Scripting,’ but now they are serious issues, especially for developers working in web applications. The only parameter checking that we did were the ones that were enforced by the compiler/interpreter. We would never go so far as to verify that if your code expects a 4 digit number, a 6 digit parameter causes an error.

3. How to do automated testing
This is another big one, and in my situation as a PHP developer, one that I still don’t have figured out yet. We were taught that as long as our programs gave a specific set of output for a given set of inputs, it was correct. While the idea seems rational, our test inputs were more often than not insufficient to catch even the most glaring of errors (like the example in the previous section). Most software shops these days do some sort of automated testing so I think graduating school having never written a unit test puts us at a major disadvantage.

4. Agile development / Extreme Programming
I can’t completely blame them for this, but I think it’s important to mention anyway. The only SDLC that I was taught was the old-school waterfall processes. You know the one, design the entire system using a binder of varying diagrams covered with boxes of arrows, write code to make the boxes do stuff, test that it does what it’s supposed to do, then release it to the world at large. Fortunately for us, the software world is changing, people are starting to realize that software development is a more fluid process than building a bridge for example.

For anything large it’s nearly impossible to figure out every last detail without writing any code at all. This is where Agile/Extreme programming comes in, shorter release cycles, small increments or features between each release.

The other problem with the old methods, as I’ve learned from experience, is that most of the time customers don’t really know what they want to begin with, so how are you going to design it for them?

5. How to write modular software
This is another important one, most of us were taught to write our code as self-contained methods and/or classes. The idea was that it could be swapped out at some later date or extended with new functionality. This is totally fine, but what if you wanted to add functionality without having to change the base code? Not many of the developers I know were actually taught how to make their code extensible through add-ons or plugins.

I think it would be a great idea for students to have to write a base program with extensibility in mind. Later projects could modify it via plugins without touching the original base code.

I have a feeling that this topic wasn’t covered for two reasons, one being that the faculty assumed that all their students would be working on mainframes in banks. The other is that this sort of stuff isn’t exactly trivial code, from my limited knowledge of it anyway. I am still just at the beginning stages of this journey, walked through how systems like Wordpress implement hooks in their API.

So there you have it
I’ve tried my best not to bitch too much. I think each of the 5 things I’ve mentioned are valuable tools for any software developer to have under their belts.

Please feel free to add to the list or let me know what you think through the comments.

Share this:
  • Digg
  • Twitter
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • Print
  • PDF

I’ve Moved to a New Host

October 25th, 2007

After a year of nearly constant frustration with my previous web hosting company I have decided to switch. If you are seeing this page that means that the DNS updates are nearly complete.

You may also notice that the site is a bit different, during the host migration I decided to switch from PostNuke to WordPress since most of what I do is blogging anyway and PostNuke seems to have fallen quite a bit away from the competition on that front.

I’ve migrated most of the stories that actually mattered from the old site, and there will be plenty more to come in the near future.

Check back soon for much more frequent updates.

Wally

Share this:
  • Digg
  • Twitter
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • Print
  • PDF

‘Synchronous AJAX’ or SJAX for Short

January 27th, 2007

We had a problem at work the other day, we had a piece of JavaScript code that was making an AJAX style web server call, unfortunately other UI elements on the page required the results of that call to be available before the user attempts to use them. I tried searching the web for all sorts of things, ’synchronous ajax,’ ‘ajax wait for response’ etc., leading to many explanations of the differences between asynchronous and synchronous requests, but no indication on how to do a synchronous request.

Finally, by looking through the JavaScript documentation for the XMLHttpRequest object and discovered that by simply adding an additional ‘false’ parameter to the normal http.open() call it forces the XMLHttpRequest object to run in synchronous mode. Exactly what we were looking for!

Here is an example: xmlhttp.open(“GET”, url, false);

This solved our problem completely, but since it was a difficult solution to find I figured I would post an example here in hopes of spreading the word of this useful tool.

Hope that helps!

Share this:
  • Digg
  • Twitter
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • Print
  • PDF

Getting things done…

January 25th, 2007

Wow, what a busy holiday season that was! Always is this time of year, Christmas, the New Year, my birthday and anniversary all within a two week span. There was so much going on that it is all very overwhelming and exhausting. Even after the holidays it felt like no matter how hard I worked nothing seemed to get done.

Finally I have been able to start digging myself out from underneath the pile. Many of the things that have been on my todo list for months have suddenly been completed, plus many more recent items. Here’s the plan I have been following to keep it going:

  • Keep a detailed list of everything that I need to do
  • Get rid of anything on the list that doesn’t actually matter
  • Finish things before I move on to the next, don’t leave items @ 90% complete
  • When something is finished, put it away so that it’s out of my mind
  • Re-prioritize my to do list often in achievable chunks, starting the whole process over again

The results have been good, as I get caught up, my head feels more clear and I’m actually able to get things done even faster. This week I’ve scratched 3 times as much stuff off of my lists as I have in previous weeks, and we all know how good it feels to get out that marker and cross something off our list. I no longer feel like I’m buried under a pile of stuff.

So give it a try if you like, let me know how you make out.

Share this:
  • Digg
  • Twitter
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • Print
  • PDF

Avoid Comwave like the plague!

October 4th, 2006

This is a head’s up to anybody who is thinking about signing up with Comwave for their VOIP service. I have been a customer of theirs since June of 2005 (1.5 years) and until recently had been generally satisfied with the service they provided. There were a couple of instances of dropped calls, but nothing terribly bad.

That all changed just over a month ago. During the entire final weekend of August my iPhone refused to make or receive any calls. I was unable to get through to Technical Support on numerous attempts. I would wait on hold for 10+ minutes before the call was dropped.
On August 30th I received an e-mail from the president of Comwave apologizing for a botched upgrade, at the time I thought it was a nice gesture. That was until the problems that were apologized for never actually went away.

I started to hear from friends of mine that they were having difficulties getting through to us, they would call our number and get a busy signal right away. They would sometimes get through on the 3rd or 4th attempt. Under normal circumstances they should have at least been forwarded to my voicemail so that I would know that I had missed some calls, this was not the case.
I attempted to contact Technical Support again, I waited on hold twice for more than 20 minutes before my call was dropped.

Shortly after this started I began having intermittent troubles making calls out, when I picked up my phone I would get a busy signal, that doesn’t seem right does it?
I was starting to get really angry about the whole situation so I dedicated an entire Tuesday night to trying to get on the phone with somebody at the company. On my first attempt I waited on hold for 22 minutes before getting through to a technician. I explained all my problems and we did some basic troubleshooting to make sure there were no problems with my Internet connection, which there wasn’t. I then reluctantly installed their remote control application so that the technician could look at my settings himself. While he was in control of my computer the phone got disconnected, noticing that he was still moving my mouse around I opened up notepad and informed him that the line had been dropped and gave him two (non-VOIP) phone numbers to call me back on. I never received a call and about 5 minutes later the technician disconnected the remote session. Not one to give up, I called right back, waited on hold for 20+ minutes again, but finally got another technician on the phone. I went through the whole spiel again (apparently my previous technician did not make any notes on my account) and finally the technician gave up and said he would have to elevate a support request to figure out what was going on. Apparently this means that a higher level technician would look into my problem and get back to me within 24 hours.

So much for that. Two days later I had not received a call so I got back on the phone again, this time getting through in a surprisingly quick 5 minutes. When the technician pulled up my account he said there was no record of the elevated support request that I informed him about. Trying to be helpful, he insisted that we go through the entire support process again. Another 10 minutes of him poking around in the iPhone settings and he agreed that there needs to be another elevated support request entered.

I let him do this, and got his name this time, Leonard, as he assured me that it was entered on my account. It’s been a week since that call, my friends still say that they have to call 3+ times to reach me after getting a busy signal. I called back this morning from work mentioning my history to the operator who then informed me that they cannot troubleshoot my problem unless I am at home with access to the iPhone. I tried to explain that these steps had all been tried before but got nowhere, she did however offer to schedule a time for a technician to call me at home so that I wouldn’t have to wait on hold. I agreed to that and we booked the call for between 5:00 and 5:30 EST (I made sure), I also gave them my cell phone number in case they were unable to get through.

The current time is 6:46 EST (just for consistency), and I have still not received the call. I just got off the phone with somebody in Customer Service (since I don’t have any reason to trust the tech support people anymore), who said my only course of action was for him to schedule the next available technician to call me when they get off the phone. After waiting 35 minutes I received a call from a technician, his only recommendation was to do a factory reset on the iPhone and waiting a day or so to see if the problem goes away. Not exactly what I would call helpful…

I am going to be switching to Cogeco ‘s Digital Phone Service tonight, hoping that they can install it soon. My next challenge will be to try to wrestle my $50 deposit from the incompetent hands of the people over at Comwave.

Any suggestions on a good way to handle that?

Share this:
  • Digg
  • Twitter
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • Print
  • PDF