Time flies when you're having fun; its already almost half-way through 2007 and I haven't reviewed Year 1 Semester 2 of my university course, Professional Software Development. I will use the Atomic method of rating: a real 0-10 score where 0 is absolutely shocking, 5 is average, and 10 is brilliant. This rating is opposed to the typical ratings you see on the internet, ranging from 5 at the lowest to mostly 7s and 8s and maximums of 10.

Computer Systems

Computer Systems was supposed to be a lead on from Computer and Logic Essentials and it started out that way, but then deviated. This subject was a bit of a mess this semester, starting out with some theory about operating systems (quite interesting stuff), moving quickly into a little Linux and a lot of Bash scripting, sliding into a tiny bit of boolean algebra and logic gates, then diving into writing assembler (not x86 assembler).

Although, I came out of this subject unscathed and with good marks, a lot of people had a lot of trouble with this subject. The first assignment was writing four or five scripts in Bash. This doesn't sound too bad until you realise that the subject doesn't actually teach any Bash. We were referenced the quite terrible Advanced Bash Guide and given a lab or two and that's it. With Bash and Linux being quite different to Windows and Pascal (the language we learnt last semester), and almost no help from the subject itself, it was no surprise that many people had a lot of trouble with this assignment.

The other main assignment was a rather complex program written entirely in assembler. Again, a lot of people had a lot of trouble with this assignment. Assembler is particular complex (even for the simple chip that we were writing it for) and very different from normal programming (no branching, loops have to be written manually, etc). It also didn't help that the subject moved too quickly through the assembler and left everyone behind once they got lost at the beginning. A review meeting was held with the staff and the PSDs present and it was agreed that the assignment was to be made easier and the subject slowed a little. Once we had gone back over the basics and got them grounded better, most people started getting a grip on assembler. However, it was too little too late. I had a good grip on assembler from right at the beginning (I was able to follow the lectures better than most), but even I had to do the cut down assignment because there simply wasn't enough time to do the original assignment (this meant I lost marks automatically, which was nasty).

The subject was mostly taught by Rob Allen, with Raj Vasa jumping in at the beginning for some operating systems and Linux stuff. Although Rob is a really nice guy, his explanations were often hard to understand, and he moved too quickly through the subject without making sure people actually understood what he was talking about. Once he realised that people were failing the subject, he went back to the basics and taught them more slowly and most people responded well to that.

All-in-all, I quite enjoyed most of Computer Systems, although I'd probably be the only one in the course who'd say that. I found all the topics facinating, except for boolean algebra and Bash scripting which almost weren't taught at all, and subsequently were a pain in the arse.

Rating: 6/10

Internet Technologies

Internet Technologies was like a crash course in all things internet. It basically ran through lots of topics very quickly, ranging from TCP/IP to HTML/CSS, to Javascript, to accessibility, and to PHP. If there is one thing that this subject bashed into your head repeatedly with a large hammer, it would be to validate your HTML against the W3C standards.

The lectures were taken by Clinton Woodward and were mostly good. If anything, I sometimes found them boring because I already knew the stuff he was talking about, but whenever some new stuff came up, like some advanced Javascript or a good explanation for the CSS box model, I regained interest. So my boredom wasn't the subject's fault.

I found the labs entirely pointless because they were so ridiculously easy. I basically never needed to ask the tutor anything because I already knew it all. All the labs really did was further bash in the "validate, validate, validate" message deep into my skull.

The assignments were better. In the first assignment I had to group up with some friends and create a standard set of XHTML that each of us individually would style with CSS. We then had to present our work to the lab group in a presentation. Again, I found this easy, so I spent some time creating a dynamic stylesheet switcher in Javascript as an extra feature.

Although I knew most of this subject already, there was one main valuable thing it taught me: good standards. I taught myself HTML and CSS by hacking and Internet technologies showed me the way it should be done: standards compliant, don't use IDs more than once, etc. I look at DigitallyCreated's HTML now and cringe. I should update it someday, because its really shocking.

Rating: 8/10

Object-Oriented Programming

Object-Oriented Programming continued from where Algorithmic Problem Solving left off. It handled the transition from procedural programming to object-oriented programming. The subject was taught in C#, which was a new language for the PSDs to learn.

The subject was taken by Andrew Cain, and was presented in his typical Beyond Bulletpoints style that we found very effective when used in Algorithmic Problem Solving last semester. The lectures taught broad concepts which were honed and developed in the labs and assignments. Apart from one lecture, C# was taught only in the labs, which was very effective since the best way to learn a language is to practice it, not to hear about it in a lecture.

A lot of the OO design theory wasn't taught in the lectures in detail, and was left for reading tasks. This was rather boring, but Andrew had created reading questions to answer after reading the text book. They were a pain in the arse, but did their job well: forcing you to remember what you read. A much better approach than just straight reading.

Although, some OO design was taught in lectures, I found I learnt the most doing the assignments. The second assignment was the one that taught me OO. The assignment was to create a Zork style text-based adventure game. The actual design was already done by Andrew and we had to read his notes and implement it in C#. This was a really good way for us to look at how OO is done, without going in too deep initially by having to create our own design. Creating your own design was handled by assignments three and four.

Object-Oriented Programming was structured differently to other subjects. The third and fourth assignments were optional but required if you wanted to get a distinction or high-distinction respectively. There was one test and no exam (unless you failed the test). This was a good structure and meant that people who wanted high marks had to work for them, which is fair enough. Having a test instead of an exam meant that we could use computers during the test and write code on a computer (fancy that!). This was a good way of doing it, since it tested actual real skills, instead of the useless skill of programming on paper.

OOP was the best subject of the lot. It was challenging and interesting and taught me many valuable programming skills. I loved C# so much that I now count it as my main programming language.

Rating: 10/10

Usability

The content of Usability promised to be good: how to create applications that are easily usable by the end-user, however, the subject's implementation left a fair bit to be desired. My first disappointment with this subject was that Usability taught the theory behind creating usable applications, not actually how to create usable applications. Sure, it showed how to follow a process to research how to create a usable program, but there were no guidelines like "all popup dialogs must have an OK button".

The main problem with Usability wasn't what it was trying to teach, since what it was teaching was sensible and useful. The problem was how the information was presented. As you can image, theory on creating usable programs is dry, dull, obvious stuff that feels like its being overcomplicated and theorised for theory's sake. So how this content is presented is very important. Unfortunately, Usability's lectures had boring bullet-point slides with little information, no notes, and a textbook with too much information.

On the plus-side for Usability was its approach to assignments. There was one big assignment which was due in pieces throughout the semester. Although this was a good approach, I felt that sometimes each piece was due too soon, because the assignment was a team project, and team projects are difficult to get organised within short times such as a single week.

The assignment itself was mostly good. It took a practical approach to the theory and asked us to work through the process of designing a kiosk software interface. We started by collecting information like existing solution problems and users' needs. Then we designed prototypes and eventually performed a 'scientific' test on real human subjects by using a lab. This test involved having users sit down and use the system while we watched them through one-way glass and recorded their every movement and comment using cameras and microphones. That was fun.

All in all, Usability wasn't a bad subject, it was just a boring one. With a bit of work, this subject could be made a lot more interesting. You can tell the subject convenors tried to make it interesting by the way they made the assignment (thumbs up), but their approach to the lectures needs a rethink.

Rating: 5/10

Summer Scholarship 2006

The Summer Scholarship (SS) was a program that was offered to all PSD students through a voluntary application process. Only six PSDs were selected to participate, and I was lucky enough to be one of them. The SS was a four week program that was run a week after the exams finished. It ran 9 to 5 for three days a week and paid us a $1200 stipend at the end. The purpose of the program was for us to do some programming projects and learn things as we did it.

The six of us were split into three groups. Three of us worked together using PHP to create a web application based on the Werewolf game. Two of us worked on a C# minesweeper clone (to learn Windows Forms), and then rewrote it in Java using Swing (to see the difference). I worked on my own, creating a side-scrolling game called Escape from Swinburne.

I won't detail much more about the SS since I've talked about it before here and you can read the SS blog here. Basically, the Summer Scholarship was brilliantly fun.

Rating: 10/10

The second semester of PSD, while not as refined as the first semester, was still enjoyable. If the rough edges are smoothed, this semester could have been awesome.

Trivia: I actually started writing this blog in January, got three-quarters through, then got distracted by commitments to my web development business and University. Apologies for the drought.