Search our site
Search our site

Programming I: Thinking Like a Programmer

  • Module code: CI4105
  • Year: 2018/9
  • Level: 4
  • Credits: 30
  • Pre-requisites: None
  • Co-requisites: None

Summary

This module is taken by all first year undergraduate students undertaking a degree in the computing subject area. Previous experience of programming is not assumed. The module seeks to introduce a foundation for programming that can be built on in subsequent years and that accommodates specialist practice within computing eg games, software engineering, media, UX etc.

Teaching and learning is split between a variety of different units to ensure the module is flexible enough to accommodate each cohort and student's needs. As befits a practical discipline like programming, a hands-on approach is used that facilitates self-paced and self-directed learning. Students are encouraged to engage with, develop and experiment with programs in a constructivist fashion inspired by bricolage (Stiller, 2009; Stiller, 2017).

The intent is to build students' confidence as they learn to program, and provide a foundation that can be built on so that in later years they can go beyond simple solutions to problems and be ready to engage in full-fledged application development.

Aims

  • To introduce the essential concepts and constructs of programming
  • To develop students' ability to decompose problems into smaller parts to support the design and implementation of programmatic solutions.
  • To develop students' ability to use the correct programming constructs in combination to solve a programming problem
  • To develop students' enthusiasm for, confidence in, and experience with programming

Learning outcomes

On successful completion of the module, students will be able to:

  • Decompose a programming task into a set of smaller sub-tasks
  • Demonstrate an understanding of the relevant structure and syntax of at least two programming environments
  • Read code that is provided, understand the key constructs involved and how these combine to create a program flow
  • Write programs that demonstrate the appropriate use of variables, arrays of variables, expressions, subroutines, conditional and iterative control flow structures and that demonstrate an understanding of elementary object-oriented concepts such as classes and objects.
  • Write programs that interact with an end-user and provide alternate program flows based on these interactions
  • Use debugging strategies and write tests to find errors and validate programs using appropriate tools and techniques

Curriculum content

  • Fundamental programming constructs in a language independent environment, e.g. variables, conditional processing, repetition, functions and arrays
  • Decomposing non-abstract (visual) problems into smaller sub-tasks and implementing a solution using blocks to express fundamental programming constructs
  • Introduction to fundamental programming concepts using industry standard programming languages
  • Handling interaction and creating programs that respond to users
  • Introduction to basic object oriented concepts
  • Introduction to basic data structures such as lists, trees and maps and algorithms for searching and sorting

Teaching and learning strategy

The module material will be divided into several different units of taught material. The first topic will be the primary Thinking Like A Programmer unit in which the basic principles and concepts are established in a (mostly) language agnostic fashion. Subsequent units will introduce several real-world programming languages; the selection of which languages are used will be informed by pedagogic need and current industry practices.

Programming is a practical discipline. In keeping with this the module adopts a hands-on approach where students are expected to learn through direct engaging with programming tasks. Each week teaching will include one lecture and one workshop. The lecture will be used to establish certain concepts and the subsequent workshop will involve students engaging with practical activities designed to reinforce their learning. Students will be expected to examine example code, modify example code and author original code of their own. They will start with relatively small programs designed to illustrate a single programming construct or concept, gradually move to code that incorporates several and eventually build up to complex programs that could be considered small applications in their own right.

Each and every activity the student undertakes during the module will contribute to their assessment. In lectures, students will undertake activities designed to test their understanding of theoretical concepts. In practical workshops, each programming activity "counts" regardless of its size or complexity. All of these activities combine to build a portfolio across the whole module which is summatively assessed.

Breakdown of Teaching and Learning Hours

Definitive UNISTATS Category Indicative Description Hours
Scheduled learning and teaching Lectures and practical workshop sessions 88
Guided independent study Continuation/completion of practical workshops online; further materials eg. videos, quizzes 212
Total (number of credits x 10) 300

Assessment strategy

The module adopts a hands-on portfolio-based approach as befits a practical discipline like programming. Students assemble a portfolio of solutions to small programming challenges, designed to gradually build understanding of programming constructs, concepts and techniques over the course of the module. At appropriate points, students will build small applications to further showcase their understanding and ability to independently bring several constructs/concepts together. The portfolio is further supplemented with in-lecture activities. All assessment is summative - students earn credit for each and every activity they undertake. This means that assessment becomes a "slow burn" and, combined with the absence of single large pieces of assessment, there are many opportunities over the year for students to maximise their potential and learn from their mistakes. Feedback is an intrinsic part of this approach and will similarly be given on a constant basis, given not only by lecturers during workshop sessions but also automated through systems such as NoobLab, Canvas etc. Feedback on overall progress and the growing portfolio and feed forward on how best to enhance the portfolio in the future represents an additional opportunity for formative learning; this will be given in writing and/or verbally at regular and appropriate points during the module (eg. at the end of a unit).

Mapping of Learning Outcomes to Assessment Strategy (Indicative)

Learning Outcome Assessment Strategy
Decompose a programming task into a set of smaller sub-tasks Assessed predominantly through the activities in the early weeks of the module during the Thinking Like A Programmer unit.
Demonstrate an understanding of the relevant structure and syntax of at least two programming environments Practical programming challenges and in-lecture activities span multiple programming languages.
Read code that is provided, understand the key constructs involved and how these combine to create a program flow This is split between practical programming tasks involving example code, and in-lecture activities such as MCQs
Write programs that demonstrate the appropriate use of variables, arrays of variables, expressions, subroutines, conditional and iterative control flow structures and that demonstrate an understanding of elementary object-oriented concepts such as classes and objects. Most practical programming tasks in the students' portfolios will involve this learning outcome.
Write programs that interact with an end-user and provide alternate program flows based on these interactions Many practical programming tasks in the students' portfolios will involve this learning outcome.
Use debugging strategies and write tests to find errors and validate programs using appropriate tools and techniques There are practical programming tasks particularly in the second half of the module which explicitly deal with testing and debugging. Students will also engage in these processes throughout the module as they attempt to find and correct errors in their own code.

Elements of Assessment

Description of Assessment Definitive UNISTATS Categories Percentage
Portfolio of in-class activities: small practical programming exercises; simple application implementations; responses to (clicker-based) questions during lectures Coursework 100%
Total (to equal 100%) 100%

Achieving a pass

It IS a requirement that the major element of assessment is passed in order to achieve an overall pass for the module.

Bibliography core texts

Horstmann, C (2012), Big Java (Late Objects), Wiley.

Duckett, J (2011),  HTML and CSS: Design and Build Websites, Wiley.

Duckett, J (2014), Javascript and JQuery: Interactive Front-end Web Development, Wiley.

Savitch, W and Mock K (2015) Absolute C++, Pearson

Ullman L (2016), PHP for the Web, Press.

Bibliography recommended reading

Horstmann, C (2012), Java for Everyone (Late Objects), Wiley.

Vickers, P (2008), How to Think Like A Programmer - Problem Solving for the Bewildered,  Cengage Learning.

Find a course

Course finder

Find a course
>