THE UNIVERSITY of EDINBURGH

DEGREE REGULATIONS & PROGRAMMES OF STUDY 2019/2020

University Homepage
DRPS Homepage
DRPS Search
DRPS Contact
DRPS : Course Catalogue : School of Informatics : Informatics

Postgraduate Course: Programming Skills (INFR11177)

Course Outline
SchoolSchool of Informatics CollegeCollege of Science and Engineering
Credit level (Normal year taken)SCQF Level 11 (Postgraduate) AvailabilityAvailable to all students
SCQF Credits10 ECTS Credits5
SummaryThis course is designed to help you to produce higher quality code; code that is readable, maintainable, usable, correct and efficient in less time and with less effort. These programming skills are applicable to programs in any language and the course is illustrated with examples from C, Python, Fortran 90, and Java.

Areas of specific relevance to parallel high-performance computing, including the use of batch systems, scientific libraries, profilers, and performance analysis, are also covered.
Course description The course covers the following:
- Best practices for scientific computing.
- Introduction to operating systems, compilers and batch systems.
- Writing programs for people, programs that are readable, maintainable, and usable.
- Reviewing code to identify bugs and share expertise.
- Debugging using code browsers and debuggers.
- Managing versions and collaborating using revision control.
- Automating common tasks and building programs using a build tool.
- Automated regression and unit testing to help ensure and maintain program correctness.
- Profiling and performance analysis to identify and improve a program's use of processing and memory resources.
- Security, authentication and authorisation concepts.
- REST application programming interfaces.
- Open source software.
Entry Requirements (not applicable to Visiting Students)
Pre-requisites Co-requisites
Prohibited Combinations Students MUST NOT also be taking Informatics 2C - Introduction to Software Engineering (INFR08019) AND AI Large Practical (INFR09043) AND Computer Science Large Practical (INFR09044) AND Software Engineering Large Practical (INFR09045) AND Informatics Large Practical (INFR09051)
Other requirements You must have experience in a programming language e.g. C, C++, Python, FORTRAN or Java.

You must be familiar with programming concepts including conditionals, loops, arrays and functions.

A knowledge of bash shell is highly recommended.

No knowledge of parallel programming is required.

Some of the above relevant prerequisite material will be made available for self-study, but will not be taught in classes.
Information for Visiting Students
Pre-requisitesYou must have experience in a programming language e.g. C, C++, Python, FORTRAN or Java.

You must be familiar with programming concepts including conditionals, loops, arrays and functions.

A knowledge of bash shell is highly recommended.

No knowledge of parallel programming is required.

Some of the above relevant prerequisite material will be made available for self-study, but will not be taught in classes.
High Demand Course? Yes
Course Delivery Information
Academic year 2019/20, Available to all students (SV1) Quota:  84
Course Start Semester 1
Timetable Timetable
Learning and Teaching activities (Further Info) Total Hours: 100 ( Lecture Hours 9, Supervised Practical/Workshop/Studio Hours 18, Programme Level Learning and Teaching Hours 2, Directed Learning and Independent Learning Hours 71 )
Assessment (Further Info) Written Exam 0 %, Coursework 100 %, Practical Exam 0 %
Additional Information (Assessment) Coursework 100 %.

This is a practical course. The course is assessed by two pieces of coursework based upon improving an existing program written in C. The assessments are:

1. Using revision control; rewriting source code to be more readable and well-designed; writing a build script; writing documentation (50%)
2. Writing automated tests; measuring and reporting performance (50%)

No C experience is assumed or expected. Students will be given a handout introducing the key aspects of C syntax and how to compile and run C programs.
Feedback Provided on assessed work within 15 working days of deadlines and through practical sessions
No Exam Information
Learning Outcomes
On completion of this course, the student will be able to:
  1. Develop code in a Linux/Unix environment.
  2. Develop code that is modular, robust, reliable, maintainable, efficient and understandable.
  3. Develop unit and regression tests.
  4. Use software development tools including integrated development environments, code browsers, debuggers, revision control, build management tools, automated test frameworks, and profilers.
  5. Design, implement, analyse and write-up software performance experiments.
Reading List
Wilson G, Aruliah D.A., Brown C.T., Chue Hong N.P., Davis M., et al. 'Best Practices for Scientific Computing'. PLoS Biol 12(1): e1001745. doi:10.1371/journal.pbio.1001745.

Wilson, G., Bryan, J., Cranston, K., Kitzes, J., Nederbragt, L. and Teal, T. 'Good enough practices in scientific computing'. PLoS Comput Biol 13(6): e1005510. doi:10.1371/journal.pcbi.1005510.

Sandve G.K., Nekrutenko A., Taylor J., Hovig E. 'Ten Simple Rules for Reproducible Computational Research'. PLoS Comput Biol 9(10): e1003285. doi:10.1371/journal.pcbi.1003285.

Barnes, N. and Jones, D. 'Clear Climate Code: Rewriting Legacy Science Software for Clarity'. IEEE Software 28(6), pp36-42, Nov-Dec 2011. doi:10.1109/MS.2011.113.

Bailey, D.H. 'Twelve Ways to Fool the Masses When Giving Performance Results on Parallel Computers', Supercomputing Review August 1991, pp54-55. Author copy: http://crd-legacy.lbl.gov/~dhbailey/dhbpapers/twelve-ways.pdf.

Bailey, D.H. 'Misleading performance in the supercomputing field', Supercomputing '92 Proceedings of the 1992 ACM/IEEE conference on Supercomputing, pp155-158, November 1992. doi:10.1109/SUPERC.1992.236699.

The following text books are not essential, but one or the other is recommended, if pursuing a career in software development:

McConnell, S. 'Code Complete: A Practical Handbook of Software Construction' (2nd ed.), Microsoft Press, 19 Jun 2004. ISBN-10: 0735619670. ISBN-13: 978-0735619678. Either this or The Pragmatic Programmer below is a good programming best practice book.

Hunt, A. 'The Pragmatic Programmer', Addison Wesley, 20 Oct 1999. ISBN-10: 020161622X, ISBN-13: 978-0201616224. Either this or Code Complete above is a good programming best practice book.

Additional links to other recommended papers, blog posts, articles and online resources are provided.
Additional Information
Graduate Attributes and Skills Project planning.
Effective written and diagrammatic communication.
Technical writing.
Data collection and analysis.
Reflection on learning and practice.
Adaptation to circumstances.
Solution Exploration, Evaluation and Prioritisation.
Programming Skills.
Special Arrangements There are limited spaces on this course. Students not on the MSc in High Performance Computing or MSc High Performance Computing with Data Science should contact the course secretary to confirm availability and confirm that they have the required prerequisites before being enrolled on the course.

The course is available to PhD students for class-only study. PhD students requiring a form of assessment (e.g. SUPA/School of Physics and Astronomy CDT students) must contact the course secretary to confirm method of enrolment.
Additional Class Delivery Information One two-hour practical/tutorial per week plus one lecture per week.
KeywordsProgramming,PS,EPCC,Fortran,C,C++,Python,Java,Debugging,Software
Contacts
Course organiserDr Michael Jackson
Tel: (0131 6)50 5141
Email: Mike.Jackson@ed.ac.uk
Course secretaryMr Ben Morse
Tel: (0131 6)51 3398
Email: Ben.Morse@ed.ac.uk
Navigation
Help & Information
Home
Introduction
Glossary
Search DPTs and Courses
Regulations
Regulations
Degree Programmes
Introduction
Browse DPTs
Courses
Introduction
Humanities and Social Science
Science and Engineering
Medicine and Veterinary Medicine
Other Information
Combined Course Timetable
Prospectuses
Important Information