41039 Programming 1
Warning: The information on this page is indicative. The subject outline for a
particular session, location and mode of offering is the authoritative source
of all information about the subject for that offering. Required texts, recommended texts and references in particular are likely to change. Students will be provided with a subject outline once they enrol in the subject.
Subject handbook information prior to 2025 is available in the Archives.
Credit points: 6 cp
Subject level:
Undergraduate
Result type: Grade and marksAnti-requisite(s): 48023 Programming Fundamentals
Description
Programming computers is an essential skill for computer scientists, software engineers, software developers and data scientists, and successful programmers integrate many diverse capabilities to be able to solve complex, abstract problems. This subject introduces the core programming concepts using an object-oriented approach to programming, prioritising project-based learning and independent research, experimentation, and communication skills. Additionally, most programming in industry occurs as alterations to a portion of a large existing codebase, and this subject introduces students to how their initial programming explorations may eventually expand to making fixes or improvements to complex industry-scale projects.
Subject learning objectives (SLOs)
Upon successful completion of this subject students should be able to:
1. | Apply basic programming concepts of state, iteration, and decision. (D.1) |
---|---|
2. | Solve computational problems by using abstract modelling and conceptualisation. (D.1) |
3. | Design and create simple functioning programs to achieve objectives. (C.1) |
4. | Interpret, describe, and document programs using clear communication. (E.1) |
5. | Reflect on programming decisions and formulate alternatives. (C.1) |
Course intended learning outcomes (CILOs)
This subject also contributes specifically to the development of the following Course Intended Learning Outcomes (CILOs):
- Design Oriented: FEIT graduates apply problem solving, design and decision-making methodologies to develop components, systems and processes to meet specified requirements. (C.1)
- Technically Proficient: FEIT graduates apply abstraction, mathematics and discipline fundamentals, software, tools and techniques to evaluate, implement and operate systems. (D.1)
- Collaborative and Communicative: FEIT graduates work as an effective member or leader of diverse teams, communicating effectively and operating within cross-disciplinary and cross-cultural contexts in the workplace. (E.1)
Contribution to the development of graduate attributes
Engineers Australia Stage 1 Competencies
This subject contributes to the development of the following Engineers Australia Stage 1 Competencies:
- 1.1. Comprehensive, theory based understanding of the underpinning natural and physical sciences and the engineering fundamentals applicable to the engineering discipline.
- 1.2. Conceptual understanding of the mathematics, numerical analysis, statistics, and computer and information sciences which underpin the engineering discipline.
- 2.1. Application of established engineering methods to complex engineering problem solving.
- 2.2. Fluent application of engineering techniques, tools and resources.
- 2.3. Application of systematic engineering synthesis and design processes.
- 3.2. Effective oral and written communication in professional and lay domains.
Teaching and learning strategies
This subject will employ several parallel learning structures to allow students to find a mixture of learning experiences that suits their particular needs.
The flipped lecture format allows the students to engage with the learning material in an asynchronous, self-paced, location-independent manner. It also supports a modular approach to delivering core content, permitting students to revise, engage and re-engage as suits their needs. Included in the learning material are staged practice exercises to help the students develop their knowledge and skills in a consequence- and stress-free environment.
In the workshops, this learning will be reinforced with scaffolded exercises that weave the core material together and provide a practical experience of the subject matter. These exercises are then capped with a low-stakes assessment task to help the students gauge their progress and understanding of the material.
Tying these two structural components together is the weekly drop-in sessions, that offer students a face-to-face expert contact point tailored to their current progress, addressing the exact difficulties they are facing at the time.
The learning material also builds towards the larger, ongoing project, which ties the content together into a functioning whole.
Content (topics)
1. Simplest Working Program, and Simple Output
2. Data Types and Variables
3. Decisions and Branching Program Flow
4. Arrays and User Input
5. Loops and Iterative Program Flow
6. Classes and Constructors
7. Methods, Properties and Access Control
8. Lists and Polymorphism
9. File Input and Output
10. Object Oriented Programming Techniques and Structures
11. Inheritance and Interfaces
12. Review and Preview of Programming 2
Assessment
Assessment task 1: Lab Assessments
Intent: | This task provides a mixture of formative and summative assessment to allow students to gauge their progress towards the subject objectives in a low-stakes, controlled environment. |
---|---|
Objective(s): | This assessment task addresses the following subject learning objectives (SLOs): 1, 2, 3 and 5 This assessment task contributes to the development of the following Course Intended Learning Outcomes (CILOs): C.1 and D.1 |
Type: | Exercises |
Groupwork: | Individual |
Weight: | 30% |
Assessment task 2: Code Comprehension
Intent: | The ability to understand code at a higher level than simple line-by-line translation is a key skill in developing strong mental models supporting program design and development skills. |
---|---|
Objective(s): | This assessment task addresses the following subject learning objectives (SLOs): 4 and 5 This assessment task contributes to the development of the following Course Intended Learning Outcomes (CILOs): C.1 and E.1 |
Type: | Exercises |
Groupwork: | Individual |
Weight: | 25% |
Length: | 50-100 lines of code, commented. |
Assessment task 3: Project
Intent: | While understanding of the elements of a computer program is foundational, without comprehending how they function in a larger whole the core goal of programming is lost. |
---|---|
Objective(s): | This assessment task addresses the following subject learning objectives (SLOs): 1, 2, 3, 4 and 5 This assessment task contributes to the development of the following Course Intended Learning Outcomes (CILOs): C.1, D.1 and E.1 |
Type: | Project |
Groupwork: | Individual |
Weight: | 25% |
Length: | Approximately 500 lines of code. |
Assessment task 4: Exam
Intent: | Programming well requires robust mental models of both the problem to be solved and the tools and approaches that can potentially be used to solve it. The exam is an opportunity for students to demonstrate understanding of key elements of programming skills independent of more complicated software development concerns. |
---|---|
Objective(s): | This assessment task addresses the following subject learning objectives (SLOs): 1, 2, 3, 4 and 5 This assessment task contributes to the development of the following Course Intended Learning Outcomes (CILOs): C.1, D.1 and E.1 |
Type: | Examination |
Groupwork: | Individual |
Weight: | 20% |
Length: | 1 day |
Assessment task 5: Extension
Intent: | Knowledge and skill can be demonstrated in many ways. In programming subjects in particular, more sustained and free-form development than that allowed by normal assessment tasks can reveal a deeper understanding than otherwise apparent. |
---|---|
Objective(s): | This assessment task addresses the following subject learning objectives (SLOs): 1, 2, 3 and 5 This assessment task contributes to the development of the following Course Intended Learning Outcomes (CILOs): C.1 and D.1 |
Type: | Project |
Groupwork: | Individual |
Weight: | Mandatory task that does not contribute to subject mark |
Minimum requirements
To pass this subject, students must achieve an overall mark of 50% or greater.
References
Introductory Texts
1. H. Schildt, “Java: A Beginner’s Guide”, 8th Ed., McGraw-Hill Education, 2018.
2. K. Sierra & B. Bates, "Head First Java", 2nd Ed., O'Reilly, 2005. (Only covers up to Java 5, but the differences won't matter for this subject)
3. Eric Matthes, "Python Crash Course", 2nd Ed., No Starch, 2019.
4. Al Swigert, "Automate the Boring Stuff with Python", 2nd Ed., No Starch, 2019. (This gets a bit away from learning to program, to just using Python as a tool without deep comprehension, but it's still useful and the cover matches the Matthes one).
5. Z. A. Shaw, "Learn Python 3 the Hard Way", 1st Ed., Addison Wesley, 2017. (There's an older version for Python 2.7 which is just as good, and a follow-on book as well. This is probably my pick of the three intro texts at the moment).
6. P. Barry, "Head First Python", 2nd Ed., O'Reilly, 2016. (Same series as "Head First Java", so if you like that, you'll probably like this.)
More Advanced Texts
7. C. S. Horstmann, “Core Java, Volume I – Fundamentals”, 11th Ed., Prentice Hall, 2018.
8. J. Bloch, “Effective Java”, 3rd Ed., Addison-Wesley Professional, 2018. (Advanced text.)
9. H. Schildt, "Java: The Complete Reference", 11th Ed., McGraw-Hill Education, 2019.
10. M. Lutz, "Learning Python", 5th Ed., O'Reilly, 2013. (Maybe getting a bit old now, but quite comprehensive, and part of a huge series of O'Reilly books on Python.)