Skip to content

The Computer Science Major

Computer Science is no more about computers than astronomy is about telescopes

So says the oft-quoted adage misattributed to Edsger W. Dijkstra. Given that my two years experience as a Masters student at the International Centre of Radio Astronomy Research (ICRAR) largely involved staring at a terminal, you could argue that quote stands the test of time.

Computer Science (hereafter CS) was my second major at UWA (for my reflection on Physics, see this post). Taking a second major generally means taking only the 8 core units and any other additional units; complementary units are optional. This means I was one of a select few Bachelor of Science students who escaped the boredom of the generic first-year Science Communication unit (as of 2019 that unit is no longer required).

Where my feelings for Physics were mixed and a little bittersweet, CS was a completely different feeling altogether. Ever since my first exposure to programming in high school (making GameMaker games no less), I have always been fascinated with programming, and definitely wanted to learn more in a formal setting. Unlike Physics, where I was familiar with many of its concepts thanks to incredibly supportive high school mentors, CS was completely new to me. In one way this was a good thing; able to start from scratch, not weighed down by pre-existing conceptions, free to forge a new path forward (so to speak). Perhaps because of this, I found the content to be more interesting. That is not to say that there weren’t any times when I genuinely considered choosing a different major. Perhaps I surprised myself that my average mark for CS turned out to be higher than for Physics. In this post I will go through the good times, the bad times, and all the points that impacted me throughout my journey studying CS.

The Curriculum

When I took the course in 2015-2017, the CS major had 8 units with 1 complementary unit (these are optional for second majors). Of course there were other computing units that did not form part of the CS major, but I did not have the space to indulge in any. Since 2019 there is an additional complementary unit in third year. The overall structure was as follows:

YearSemester OneSemester Two
1Introductory object-oriented programmming with JavaRelational database management systems
2Data structures and algorithms (Java)Systems programming and operating systems (C)
+ Mathematics for computer science (complementary unit)
3Computer networking (C), computer graphics (C, GLSL)
+ Cybersecurity (complementary unit)
Algorithms and AI (Java), professional computing (semester-long real-world project)

Objects are always first with Java

First year is always an interesting time as a University student; it’s a time when you’re not quite sure exactly what you’re doing, and you tend not to register the hidden meanings in many things. Or maybe, like me, you become more cynical as you age. No amount of cynicism can dispel the fact that CITS1001, the first CS unit for many, is renowned for its elevated fail rate (as high as 20%). There were many posts that did the rounds on social media recently that decried the unit for teaching code with “handwritten notes”, lamented the lack of support and low morale, protested the assumption that the voice of the top students were the voice of the majority, and slammed the exam as “punitive”. When I took this unit back in 2015 it too had its fair share of issues, but clearly things have taken a downward turn. Either that or bad news just gets more airtime.

One thing I will say is that CITS1001 has to cater for a very large audience; you’ll have everyone from absolute beginners to full stack developers all taking the same final exam, all coding away at the same assignments. So yes, naturally those with prior exposure or work experience will tend to attract better marks, and perhaps because of the large spread in the overall skill level this effect is amplified more than most. It also reflects how this unit (and programming in general) is practical. CITS1001 teaches Java, a mainstay in the professional world. There is always a debate about which language is best as a “first” language, but its fair to say that CITS1001 is a baptism by fire regardless.

Why are the labs so quiet?

It’s an unwritten rule that no one goes to labs. Period.

Most people I know simply do the work at home (there also exist people who don’t do the work until the last few days before the exam). Personally, since the labsheets are often available ahead of time, I started work on the lab straight after the lectures. Not all units have assessed labs, and the labsheets are often nothing more than a set of programming exercises.

Lecture material and lab submission

The School of Computer Science and Software Engineering maintains its own site with dedicated webpages for most units. All content is posted there instead of on the learning management system (LMS). This also has the benefit of publicly disseminating the content. I am a strong advocate for openly accessible course material (I essentially studied an entire year of physics via MIT OCW). That is why it is disappointing to hear that some units (including the venerable CITS1001) are migrating away from the CS website and are now closed-access on the LMS.

For almost all units, each lecture is accompanied by lecture slides, and each week with a labsheet. These are all available as PDFs, and generally made available well ahead of time. Projects and exams are all easily accessed on the course website, with a generous supply of past tests and exams. As far as content and organisation are concerned, CS is ahead of the curve.

CS has its own method of submitting assignments. This is through the cssubmit site, where you essentially login with your student credentials, click on your unit, select the relevant assignment and upload your code. For units with automated marking, the site then proceeds with a series of tests and returns your indicative mark (to be later checked and confirmed via manual inspection). The only hiccup I can recall with this system was in third year when the automated marker crashed (apparently someone had an infinite while loop), so I would certainly recommend submitting your code sooner rather than later. There are supposedly penalties for misuse (e.g submitting many times to debug your program) but I have not heard of anyone incurring anything. And, assignments are due at 23:59:59 exactly, so you can technically leave it to the last second.

CS also has its own marks portal called csmarks. Here you can view your marks for every assignment, as well as a colour-coded histogram of the mark distribution. I appreciated that the site presented all the statistics as-is, rather than merely giving an average (plus a median if you’re lucky) as on the LMS.

The Lecturers

The CS lecturers were outstanding. Many were clear and engaging, and I appreciated how lighthearted and understanding some were. Tutors at labs were also fairly approachable (for those who go to labs, that is). That said, don’t expect too much one-to-one correspondence (I’ve had several emails go unanswered). I get that feeling largely because CS seems to be one of those degrees where most people figure things out for themselves. It’s not to say that people were disconnected, or that no one goes without help, merely that everyone tends to have their own way of doing things. There’s a big onus on you to learn; it can seem as if no one is listening or that no one cares, but if you make use of the excellent online help forums (CS have their own – it is independent from the LMS) and enquire during consultation hours, you’ll get more than sufficient support. The relatively small attendance at lectures tends to promote more discussion of the material, especially for units with workshops (such as the discrete math unit), but the lecturers generally get on with lecturing – and to that extent they do a good job.

My Sequel

Databases is the odd one out in more ways than one. Not only was this the only unit that did not require coding for its project, it was also the only unit that used the flipped classroom model. The content was posted online many days before the lecture to be read through, while the lecture itself largely went through examples. This unit was not a pure flipped classroom, instead it could be described as a hybrid. Flipped classroom was used very early on to teach SQL, but then more traditional lectures were used to go over some of the database theory and relational algebra. The project involved coming up with an ER diagram to model a relational database for a real-world inspired scenario.

This unit can also be described as an odd one out due to its location in the sequence: immediately after the introductory Java unit yet before any further programming units. As such, it did feel like a pause to program for 3.5 months, then play around with MySQL for another 3.5 months, and only then get back into programming the following year. I personally would move a unit like this into second or third year as an applications-style unit, and bring forward the C unit into first year.

Systems programming: a knife’s edge

CITS2002 “Systems programming” also has a reputation for its high fail rate. It has a larger class size than most, as it also caters for software engineers. So again we have the “broad ability” problem. As the previous units are all taught in Java, absolute beginners are somewhat thrown into the frying pan with the very fast-paced introduction to C. This is where starting with a high-level programming language such as Java is problematic; C is harder to adjust to. This is also why I would have preferred C as a first unit. This unit tries to do two things at once; teach practical UNIX system programming skills and operating system theory. Thus the workload is much more intense than any other unit in the entire major. Although OS theory covered is relatively benign (it doesn’t cover signals, concurrency, architecture or virtualisation for example), most of the work lies with the two programming projects in C.

When I took the unit, these programming projects involved implementing a mock single-CPU process scheduler, and creating our own version of the UNIX find utility. Other projects have included implementing a UNIX shell program, a Wi-Fi statistics utility, and even a version of the make utility. No wonder, then, that CITS2002 is also renowned for its high incidence of contract cheating. The exam is also brutal, with averages rarely hovering above 55% (the exam I took in 2016 had an average mark of 52%). This unit will sort out the wheat from the chaff. It will test your endurance. I would lie if I said this unit didn’t bring me to my knees. Indirectly, this unit was what inspired me to write poetry as a coping mechanism, and take up the Calm meditation service. Make of that as you will.

Programming projects

All but the simplest of programming assignments can be done in pairs. This is generally the preferred way to go about the unit (in my case I was especially fortunate to go through the course with a friend from high school). That said projects can be done solo – and some people might prefer it that way – but just keep in mind most second and third year projects also require a written report. Hint: use LaTeX for your report. Lecturers fawn over it. You’re absolutely guaranteed to get better marks.

Computer science or data science?

UWA used to have a course called Applied Computing, which was later reworked and relaunched as the Data Science major. Data Science includes several computing units and some statistics units, but there is fairly little overlap with Computer Science. For students who are motivated by the lure of obtaining practical programming skills, Data Science is a much more tangible option with units ranging from web design to data mining to statistical learning. On the other hand, Computer Science is, well, computer science. There is a heavy emphasis on theory and the abstract, but what CS does do is ground you in the fundamentals. There’s nothing stopping you from picking up a Udemy course (as many do for the semester-long group project) to learn specific skills such as web development or machine learning. Indeed, with a CS background, the material should be a whole lot more approachable to you compared to most. CS is less about programming and more about problem solving. Of course, it doesn’t hurt to bolster your degree with more computing units, so if your course structure has the space for it, I heartily recommend appending some data analytics or machine learning units.

When all is said and done

Computer Science was a surprisingly refreshing and an overall positive experience. I think that coming into this major without any prior experience with the subject matter actually helped me. As my high school Physics teacher said, “Expect nothing, that way you’ll always be satisfied.” I would, however, expect to be challenged, and expect to get your hands dirty coding and studying. The course demands stringent time management skills, but most of all it demands respect. With plentiful, easily accessible and well-formatted learning materials, the content is there to be embraced with open arms.