## Introduction to the Course

Engineering students use computers for a large number of curricular tasks mostly computation centred. However, they do not see this as coding or programming tasks and usually are not even aware of the tools and techniques that will help them to handle these tasks better. This results in less than optimal use of their time and resources. This also causes difficulties when it comes tocollaboration and building on other peoples work. This course is intended to train such students in good software practices and tools for producing code and documentation.

After successfully completing the program, the participants will be able to:

- understand how software tools work together and how they can be used in tandem to carry out tasks,

- use unix command line tools to carry out common (mostly text processing tasks,

- to generate professional documents,

- use version control effectively for both code and documents,

- automate tasks by writing shell scripts and python scripts,

- realise the impact of coding style and readbility on quality,

- write mid-sized programs that carry out typical engineering / numerical computations such as those that involve (basic) manipulation of large arrays in an efficient manner,

- generate 2D and simple 3D plots,

- debug programs using a standardised approach,

- understand the importance of tests and the philosophy of Test Driven Development,

- write unit tests and improve the quality of code.