Provide advanced knowledge of both theoretical and practical programming in C++ and Python, with particular regard to the principles of object oriented programming and best practices of software development (advanced use of version control systems, continuous integration, unit testing).
- Familiarity with linux terminal and a text editor (e.g., emacs, vim)
- A bit of knowledge of git is helpful
-
Programming: Principles and Practice using C++ (Second Edition), Bjarne Stroustrup, Addison-Wesley 2014, ISBN 978-0-321-99278-9
-
The C++ Programming Language, Bjarne Stroustrup, Addison-Wesley 2013, ISBN 978-0321563842
-
Design Patterns: Elements of Reusable Object-Oriented Software, Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides, Pearson Education 1993.
Lecture room is A-005 in the main SISSA building in via Bonomea 265. On 12/10 and 19/10 the lecture will at the Big meeting room (VII floor).
-
Scientific programming environment. You will learn the basic ingredients needed to efficiently develop scientific software in *nix environment.
-
Introduction to C++. You will learn the logic and the basics of C++, the built-in data types and how to effectively use them. Best practices in programming will be addressed.
-
Object orientation in C++. The principles of Object-Oriented programming will be presented with particular attention to their implementations in C++. Some of the most important Design Patterns will be discussed.
-
Advanced features of C++11/14/17. Some of the new features of standard C++11/14/17 will be introduced and explained.
-
Object-Oriented programming in Python. After a recap of the basics of Python, you will learn how to program in object-oriented fashion in the Python programming language.
- Very first time
(N==0)
- open a terminal
cd
in a suitable foldergit clone https://github.com/asartori86/advanced-programming.git
cd advanced-programming
- take a look at software carpentry lecture and pro git book
N > 0
- open a terminal
cd
to the folderadvanced-programming
git pull --rebase origin master
- if(conflict)
- ask
- Very first time
(N==0)
- fork the repository
- clone either your fork or this repository
- add the other remote
N >= 0
- use branches
- rebase on the correct master branch
- merge the branches in your local master
- push on the master of your fork
- if(conflict)
- if(rebase)
git add
git rebase --continue
- if(bigger mess)
git rebase --abort
- if(merge)
git add
git commit
git merge --continue
- if(bigger mess)
git merge --abort
- if(rebase)