COMP1110/COMP1140: Structured Programming

From Hitchhiker's Guide to CS
Jump to navigation Jump to search


Runs Both semesters (1110), Semester 2 (1140)
Languages Java (taught)
Course webpage https://cs.anu.edu.au/courses/comp1110/

COMP1110/1140 follows on from COMP1100/1130, and introduces students to the widely used Java programming language. If you haven't programmed before (other than in 1100/1130), then this course will likely be your first experience of some "software engineering". There is also a strong emphasis on learning how to code collaboratively, emphasised in the major group project. As a course, it is similar to COMP1100/1130 in terms of difficulty even though the content is very different. Most students also find Java a more intuitive language to learn than Haskell, and the skills you learn will be more widely applicable to learning other languages.

The course begins at an extremely fast pace, as both lectures and labs are focused on teaching you to syntax and core concepts which underpin the Java language. This includes imperative programming, basic datatypes, object orientation programming (OOP) and the basics of JavaFX, a graphics library which will be used throughout the semester. Many students find the first half of the course the most difficult part due to the pace (you're essentially learning a new programming language from scratch in just a few weeks!), so it is important that you keep up with the content and ask lots of questions when you get stuck. Labs are especially useful as tutors can assist with understanding the nuances of the language. It is important that you build a solid foundation in the first half of the semester, as the second half assumes a reasonable level of familiarity with Java.

The course then dives into deeper topics within Java and software development including generics, abstract data types (such as arrays, lists, trees, sets and hash tables), recursion, hash functions, handling IO with text files, basic multithreading and test driven development. Although taught at a slower pace, these concepts can be tricky to grasp, especially if you are programming for the first time (aside from Haskell). However, these ideas are found in virtually every major programming language so you will leave the course having a wide array of practical skills which can be applied in further CS courses.

Throughout the course, you will learn core software engineering skills that will be useful throughout the rest of your programming career - including version control and collaboration with Git and GitLab, software testing strategies, the use of professional-grade integrated development environments (IDEs) such as IntelliJ, and teamwork.

Unlike COMP1130, COMP1140 does not have any extra content in addition to the concepts covered in COMP1110. All assessments and marking criteria are the same between the courses, with the exception of the major group project. COMP1140 will also have an extra lecture in the semester by a guest speaker on a topic related the major group assignment. This is assessable, but rarely results in more than one or two multiple choice questions in the exams.

The group assignment accounts for a major portion (30%) of your final grade is completed in groups of 3 randomly assigned within your lab groups. Note that this means that 1140 students are only paired with 1140 students, and 1110 students are only paired with 1110 students. COMP1110 students will recreate and solve a digital version of a "puzzle" game using Java and JavaFX. On the other hand, 1140 students must recreate a playable turn-based board game with AIs that users can play against. In both cases, there are deliverables throughout the semester (each worth a small percentage of the assignment mark) concluding with a final showcase in front of your lab group. Although the project is wide in scope, you are provided with some structure to help guide your group along the way. Labs give you an opportunity to share your progress and ask for help from tutors if needed. Working collaboratively is key in this assignment so it is essential that you communicate often, get to know one another and are understanding of different people's programming backgrounds. Your mark is largely decided by how well you are able to work in a team. At the end of each deliverable, you have an opportunity to quantify the contribution of yourself and the other teammates to the assignment, which can be helpful if someone isn't pulling their weight.

The remaining assessment pieces include a short introductory assignment, a lab test, class/lab participation, a mid-semester exam and a final exam. All the assessment apart from the major project is redeemable against the final exam. That being said, like any class, you shouldn't rely on the final exam for all your marks as some sections may be found harder. In terms of exam preparation, the actual exam is heavily based off the practice exams (which is often past final exams themselves) so be sure to use them as a resource.

Not sure whether to take COMP1140 instead of 1110? If you're interested in doing well in the course, you may be at an advantage in the group project if you pick 1140, because you'll be paired with other 1140 students who have also volunteered to take the harder course. Although the alternate assignment can require more work, having highly committed and motivated group members often makes teamwork much easier. Note that if you didn't do COMP1130, you may still be able to request a permission code to enroll in COMP1140, especially if you have previous programming experience or did 1100 in second semester (when 1130 is not offered).

If you have substantial previous programming experience (particularly in Java), you may find the first part of the course relatively easy. But don't let it fool you - in the second half of the course, there's still a lot of core computer science concepts to learn which you may not have come across before.