|1 YEAR||2 semester||9 CFU|
|Prof. Flavio Lombardi||2018-19|
The course aims to provide students with knowledge and skills for an effective use of computer methodologies and tools in the field of engineering, expecially for the development of algorithms.
KNOWLEDGE AND UNDERSTANDING:
Acquire knowledge of the internals of computer architectures.
Acquire knowledge on data structures and algorithms.
Acquire knowledge on the principles of programming languages, including the object-oriented paradigm, and on tools and techniques for software development.
APPLYING KNOWLEDGE AND UNDERSTANDING:
Acquire ability to analyze problems and produce a design and implementation of software artifacts addressing them.
Acquire capability of group working on software development and documentation.
Being able to choose appropriate languages and tools for software development.
Being able to evaluate the correctness and efficiency of a software implementation.
Be able to describe and document software artifacts correctly and effectively.
Being able to use effectively the technical documentation and the reference manuals of systems, products and languages.
- Introduction to Computer Science; Von Neumann architecture; Computer Architectures; CPU and GPU; Programming Paradigms; Functional and Object Oriented Approaches; Principles of Software Engineering and Modeling; Basic concepts and comparison of Programming Languages; Variables; Control structures (Loops, Conditional Selection), Data structures and algorithms; Computational Complexity; Functions and parameters; Recursion; Sorting algorithms; Input/Output; Concurrency and Parallelism; Networking and Distributed Applications; Version Control; The Art of Documentation; Introduction to Safety, Security and Reliability concepts.
- The programming languages taught are C, Java and Rust