Computer Engineering at UQ

This rant is based on an email I wrote when I learned that UQ is planning on dropping the Computer Systems Engineering major, and with it the COMP2304 course “Programming for Engineers”. I don’t know if this has been publicly announced yet, but from what I’ve head it’s happening and there’s nothing we can do about it. Although my job title is “Software Engineer”, Computer Systems is my major, and COMP2304 one of the courses that I was involved in teaching at UQ so this is a issue close to my heart.

COMP2304 emphasises C++, subversion, unit testing, and an automated build environment.  It was introduced as a direct consequence of earlier IAB meetings where industry stated that they needed strong coding skills and strong C++ expertise.  These coding skills and build tools were built into this course over several years by tutors who had worked for Google and are now Senior Google Software Engineers.   Graduates also stated that their degree was weak in this area.  Certainly both Google and CISRA rate this course very highly and it is one of the reasons they really like our graduates.  The program can certainly change but I think it would be very bad for the degrees if this material was not covered appropriately elsewhere.

I’m not particularly fond of COMP2304 as a course, and I think that version control, unit testing and automatic build systems should be able to be covered by CSSE2002 (or perhaps CSSE2003, but that is only taught to SEs). That said, C++ is a uniquely useful language with a great many features and concepts that are not taught elsewhere at UQ. It is also notoriously difficult to use correctly, so graduates with no experience using it cannot be expected to quickly pick it up on-the-job. Dropping C++ would effectively shut UQ graduates out of entire industries.

If anything, UQ should be teaching a wider variety of programming paradigms and environments - which unavoidably means a wider variety of languages. With CSSE1001 now being taught in Python (in itself a huge improvement), functional programming at UQ is no more than a week of irrelevant, quickly-forgotten material.

Worse still, UQ students are taught very little of how programming languages are implemented, and thus have little ability to relate the code they write to what the computer actually does. Some of the implementation details of C are taught in the (excellent, and highly regarded) CSSE1000 and COMP2303 but the material is being slowly removed to make room for higher-level concepts like threads, and to make the courses easier. COMP4403 obviously teaches the implementation of programming languages, but business of dealing with actual computer hardware is skipped over and the course is (sadly) only taught to a small number of SEs. This leaves UQ students with little ability to reason about the performance of their code (a topic that is largely ignored at UQ anyway, with the exception of COMP3506 which only teaches the very basics of computer science theory, and only from the imperative-language objects-are-references perspective of Java).

Two big growth areas in computing right now are mobile and GPGPU - areas in which a strong understanding of how code runs on actual hardware is required in order to produce efficient solutions - and UQ is not equipping its graduates for success in those areas. 


I don’t believe Electrical or Software Engineering graduates would be well-suited to the work I am doing now. In the last two weeks I’ve been writing software to enable automatic testing on a production line, hacking on Linux kernel drivers, designing a system architecture for production automation, finding board design faults (and fixing them with a soldering iron) and designing digital logic with VHDL. A pure Electrical Engineering or Software Engineering program might prepare you for half of that.