Course Outline

Contents

Course Details

Course Code COMP2041, COMP9044
Course Title Software Construction
Units of Credit 6
Course Contact <cs2041 at cse.unsw.edu.au>
Convenor/Lecturer Dr Andrew Taylor <andrewt at unsw.edu.au>
Admin Dylan Brotherston <d.brotherston at unsw.edu.au>
Classes Lectures: Mon 12-14, in-person/online; Thu 14-16, online;
... timetable for all classes
Course Website https://cgi.cse.unsw.edu.au/~cs2041/24T1/
Handbook Entry https://www.handbook.unsw.edu.au/undergraduate/courses/current/COMP2041/
https://www.handbook.unsw.edu.au/postgraduate/courses/current/COMP9044/

Course Summary

This course is designed for students who have mastered the basics of programming. It aims to broaden your knowledge of techniques and tools for software construction.

Assumed Knowledge

Before commencing this course, students should ...

For undergraduate (COMP2041) students, the above material will typically have been covered in COMP1511 (or its predecessor, COMP1917) and COMP2521 (or its predecessor, COMP1927).

For postgraduate (COMP9044) students, the above material will have been covered in COMP9021 and COMP9024, or in equivalent courses in their undergraduate degree.

We will be assuming a basic (introductory) knowledge of Python. Most of the class has this knowledge from COMP1531 (pre 2022), COMP9021 or coding experience outside UNSW. If you have not coded in Python previously you'll need to do extra work to understand the Python material in lectures, tutorials and labs.

Most of the class has previously used C. Some knowledge of C may be assumed during lecture examples. Students who have not programmed C may need to do some extra reading to understand these examples.

Learning Outcomes

After completing this course, students will have:

  1. practical experience in programming with the Unix shell and Python scripting;
  2. broader and deeper knowledge of building software systems;
  3. appreciation of the use of specific technologies and strategies during software development;
  4. exposure to tools for version control, system configuration, debugging; and performance improvement.
  5. improved their ability to articulate and communicate concepts related to programming and systems.

This course contributes to the development of the following graduate capabilities:

Graduate Capability Acquired in
scholarship: understanding of their discipline in its interdisciplinary context lectures, assignments
scholarship: capable of independent and collaborative enquiry lab work, assignments
scholarship: rigorous in their analysis, critique, and reflection tutorials
scholarship: able to apply their knowledge and skills to solving problems tutorials, lab work, assignments
scholarship: ethical practitioners all course-work, by doing it yourself
scholarship: capable of effective communication blog, tutorials
scholarship: digitally literate everywhere in CSE
leadership: enterprising, innovative and creative assignments
leadership: collaborative team workers lab work, assignments
professionalism: capable of operating within an agreed Code of Practice all practical work

Teaching Strategies and Rationale

This course uses the standard set of practice-focussed teaching strategies employed by most CSE foundational courses:

This course has a heavy practical orientation. Do not take this course unless you wish to do a very large amount of coding. This will place large demands on your time, particularly in the second half of session.

Lectures

Lectures will be used to present the theory and practice of the techniques and tools in this course. Lectures will include extensive practical demonstrations of various technologies. Lecture notes will be available on the course web pages before each lecture.

We plan to use broadcast lectures using Teams live events with the opportunity to ask questions via chat. Recording of all lectures will linked to the class home page. Lectures may be pre-recorded on some topics.

Tutorials

We will use Blackboard Collaborate for online tutorials and labs. Your will be emailed links.

From week 1 onwards (excluding week 6), you will also be expected to participate in a one-hour tutorial session to clarify ideas from lectures and work through exercises based on the lecture material. You should make sure that you use them effectively by examining in advance the material to be covered in each week's tutorial, by asking questions, by offering suggestions, and by generally participating. The tutorial questions will be posted on the Web in the week before each tutorial. There are no marks for tutorial participation.

Laboratory Classes

Following the tutorial class each week, there will be a two-hour laboratory class, during which you will work on a variety of small practical problems involving the tools introduced in lectures. Because this course is practical in nature, laboratory classes are important: if you do not put a great deal of effort into the lab classes, you risk failing the final exam.

Each week, there will be one or more exercises to work on. These exercises will be released in the week preceding the lab class.

Completed exercises need to be submitted. You must submit exercises before the deadline using give to obtain a mark for a lab exercise, The usual lab exercise submission deadline will be Monday 12:00 noon but some lab exercises may have an extended deadline.

Most lab exercises will be automarked. There will be partial marks for attempts which do not pass autotests. Tutors will separately provide feedback on your approach to the problem and on the style of your solution. Some labs may contain exercises which will be assessed during the lab.

Submission of any work that it is not your own will result in an automatic mark of zero for the entire lab component.

The lab exercises for each week are worth in total 2 marks. All of your lab marks will be summed to give you a mark out of 18; if their sum exceeds 15, your total mark will be capped at 15.

Challenge exercises may be specified for some labs. Challenge exercises may be involve concepts not covered in lectures and range in difficulty from not-very-hard to almost-impossible.

The contribution of challenge exercises to lab marks will be limited to 20%

Hence you can obtain almost full marks (95+%) for the lab component without completing challenge exercises.

Weekly Tests

There will be weekly tests from week 3 onwards, designed to give you timely and realistic feedback of your understanding of the course material. Tests may be programming exercises, multiple choice questions, or both.

These will be conducted in your own time under self-enforced exam-like conditions. Each test will specify the conditions, but typically these will include:

  1. no assistance permitted from any person;
  2. a time limit of one hour;
  3. no access to materials (written or online) except specified language documentation or man pages.

Each test is worth 1.7 marks, and will be automarked. Your total mark for the tests component is computed as a sum of your best 6 of 8 test marks. Any violation of the test conditions will result in a mark of zero for the entire test component.

Assignments

There are two assessable programming assignments. Assignments give you the chance to practice what you have learnt on relatively large problems (compared to the small exercises in the labs). Assignments are a very important part of this course, therefore it is essential that you attempt them yourself.

The assignment weighting and deadlines may be slightly varied when the assignment designs are complete.

Late Submissions

Late submissions will be penalised. The UNSW standard late penalty will apply which is 5\% per day for up to 5 days. Submissions after 5 days will not be accepted. This course implements the late penalty as 0.2% per hour off of your raw mark.

Final Exam

There will be a three-hour final exam, held in-person, in CSE computer labs, during the exam period.

No online exam will be offered.

Students must be available to sit the exam in-person in Sydney.

This will be centrally timetabled, and appear in your UNSW exam timetable.

The exam will contain short-answer questions, which may require you to read code, and implementation tasks, where you will be required to write code.

During this exam you will be able to execute, debug and test your answers.

The implementation tasks will be similar in nature to those encountered in lab exercises.

You will not be expected to remember all the details of programming languages used in the course; reference information will be provided along with the exam paper, giving a summary of any language that we expect you to use.

There is a hurdle requirement on the final exam. If you do not score at least 40% (18.0/45) on the exam (after scaling), you cannot pass this course. If your overall course score exceeds 50%, despite scoring very poorly (<40%) on the exam, the hurdle will be enforced via a grade of UF.

Student Conduct and Academic Integrity

Student Conduct

The Student Code of Conduct (Information, Policy) sets out what the University expects from students as members of the UNSW community. As well as the learning, teaching and research environment, the University aims to provide an environment that enables students to achieve their full potential and to provide an experience consistent with the University's values and guiding principles. A condition of enrolment is that students inform themselves of the University's rules and policies affecting them, and conduct themselves accordingly.

Students have the responsibility to observe standards of equity and respect in dealing with every member of the University community. This applies to all activities on UNSW premises and all external activities related to study and research. This includes behaviour in person as well as behaviour on social media: for example, in Facebook groups set up for the purpose of discussing UNSW courses or course work. Behaviour that is considered in breach of the Student Code Policy as discriminatory, sexually inappropriate, bullying, harassing, invading another's privacy, or causing any person to fear for their personal safety is serious misconduct, and can lead to severe penalties, including suspension or exclusion.

If you have any concerns, you may raise them with your lecturer, or approach the School Ethics Officer, Grievance Officer, or one of the student representatives.

Use of Generative Tools in COMP(2041|9044)

Systems such as Github Copilot and ChatGPT based on large language models or other generative artificial intelligence techniques, look likely to become heavily used by programmers.

However, you need a good understanding of the language you are coding in and the systems involved before you can effectively use these tools.

Using these tools to generate code for COMP(2041|9044) instead of writing the code yourself will hinder your learning.

You are not permitted to submit code generated by automatic tools such as Github Copilot, ChatGPT, Google Bard in COMP(2041|9044) including for lab exercises, assignments and weekly tests, unless the exercise explicitly allows this (see below).

If the exercise does not explicitly permit it, submitting code generated by Github Copilot, ChatGPT, Google Bard and similar tools will be treated as plagiarism.

Assignment specifications may make an exception and explicitly permit use of small amounts of general-purpose code produced by generative tools such as Github Copilot, ChatGPT, Google Bard.

You must clearly attribute the source of such code in an accompanying comment.

Please read the assignment specification carefully to see what is permitted.

These automatic tools will not be available in the exam environment.

Academic Integrity

UNSW has an ongoing commitment to fostering a culture of learning informed by academic integrity. All UNSW staff and students have a responsibility to adhere to this principle of academic integrity.

Plagiarism is defined as using the words or ideas of others and presenting them as your own. Plagiarism undermines academic integrity, and is not tolerated at UNSW. Instances of plagiarism are treated by UNSW and CSE as acts of academic misconduct, which carry penalties as severe as being excluded from further study at UNSW. There are several on-line resources to help you understand what plagiarism is and how it is dealt with at UNSW.

Make sure that you read and understand these. Ignorance is not accepted as an excuse for plagiarism. In particular, at CSE you are responsible for ensuring that your assignment files are not accessible by anyone but you by setting correct permissions in your CSE home directory and for any code repositories you may use. Note also that plagiarism includes paying or asking another person to do a piece of work for you, and then submitting it as your own work.

The pages below describe the policies and procedures in more detail:

You should also read the following page which describes your rights and responsibilities in the CSE context:

Assessment

Item Topics Due Marks LOs
Tests all topics Weeks 3-10 10 1-9
Assignment 1 shell programming Week 7 15 1-5
Assignment 2 Python programming Week 10 15 1-5
Labs most topics most weeks 15 1-5,9
Final Exam all topics exam period 45 1-9

Your final mark for this course will be computed using the above assessments as follows:

CourseWorkMark = TestMark + LabMark + Ass1Mark + Ass2Mark out of 55
ExamMark out of 45
ExamOK = ExamMark ≥ 18.0/45 true/false
FinalMark = CourseWorkMark + ExamMark out of 100
FinalGrade = UF, if ! ExamOK && FinalMark ≥ 50
FL, if FinalMark < 50/100
PS, if 50/100 ≤ FinalMark < 65/100
CR, if 65/100 ≤ FinalMark < 75/100
DN, if 75/100 ≤ FinalMark < 85/100
HD, if FinalMark ≥ 85/100

Course Schedule

The following is a rough schedule of when topics will be covered. This will most likely change over the session as topics take more or less time to cover.

Week Lectures Tut/Lab Tests Assigns
1 Course introduction; Unix filters. Regex - -
2 Unix filters (cont'd); Shell programming. Pipelines - -
3 Shell programming (cont'd). Shell Scripting Test 3 released (due week 4) -
4 Introduction to Version Control with Git. Shell Scripting Test 4 released (due week 5) Assign 1 Released
5 Practical Python programming. Git Test 5 released (due week 7) -
6 Flexibility week - Test 6 released (due week 7) -
7 Python programming. (cont'd). Python and Regex Test 7 released (due week 8) Assign 1 Due (Monday)
8 Git in more detail Python Text Processing Test 8 released (due week 9) Assign 2 Released
9 Tools for System Configuration & Deployment Web Scraping Test 9 released (due week 10) -
10 Revision; Exam Information. Python Modules Test 10 released (due week 11) Assign 2 Due (Friday)

Resources for Students

There is no required textbook for the course. Useful (both for this course and beyond) reference books include:

Pointers to other useful reading material, including documentation for all of the tools used in the practical work, are provided from the course web pages.

Course Evaluation and Development

The course will be evaluated at the end of the session using the myExperience system; feedback will be used to make continual improvements to the course. Students are also encouraged to provide informal feedback during the session, and to let course staff know of any problems as soon as they arise. Suggestions will be listened to openly, positively, constructively, and thankfully, and every reasonable effort will be made to address them.

The myExperience feedback from the last course offerings was very positive.

Based on it we are looking to add more explanation to sample solutions, and make course exercises more relevant to working on containers and virtual machines/cloud infrastructure.