Bachelor
2020/2021
Introduction to Programming
Type:
Compulsory course (HSE University and University of London Double Degree Programme in Data Science and Business Analytics)
Area of studies:
Applied Mathematics and Information Science
Delivered by:
Big Data and Information Retrieval School
Where:
Faculty of Computer Science
When:
1 year, 1-4 module
Mode of studies:
offline
Instructors:
Рудаков Кирилл Александрович,
Сысоев Марк Валерьевич,
Ахременко Анна Андреевна,
Julio Cesar Carrasquel Gamez,
Georgy Pyatsky,
Sergey Shershakov,
Tamara Voznesenskaya,
Georgi Zhulikov
Language:
English
ECTS credits:
10
Contact hours:
258
Course Syllabus
Abstract
The training course “Introduction to Programming” is offered to students of Bachelor Program “HSE and University of London Double Degree Programme in Data Science and Business Analytics” at the Faculty of Computer Science of the National Research University — Higher School of Economics (HSE). The course is classified as a compulsory subject; it is a whole-year course. The course is divided into two logical parts, which do not basically depend on each other. The first part is given during semester A (quartiles 1 and 2) under the responsibility of Dr. Tamara Voznesenskaya. The second part is given during semester B (quartiles 3 and 4) under the responsibility of Lect. Sergey Shershakov. The first part of the course is intended to be taught during the first semester of the program, so it starts from the very beginning and takes into account, that some of the students may have zero experience in programming. The lectures and practical classes are closely inter-related. The lectures are primarily intended to introduce new topics, focus on more theoretical aspects whereas the practical classes are intended for solving specific problems by coding programs in Python. The second part of the course is intended to be taught during the second semester of the program. It is dedicated to the base features of the C++ programming language and C++ Standard Library (STL). The part covers all necessary topics that are needed to start developing a modern CLI1-applications in C++14. The lectures and practical classes are closely inter-related. The lectures are primarily intended to introduce new topics, whereas the practical classes are intended for solving specific problems by coding programs in C++.
Learning Objectives
- One of the objectives of this course is for the students to will study the methodology of programming.
- During this course, the students will develop algorithmic thinking.
- During this course, the students will study approaches and toolkits for the development of Python applications.
- During this course, the students will study approaches and toolchains for the development of C++-applications.
- During this course, the students will practice application debugging and deployment with respect to various platforms and toolchains.
Expected Learning Outcomes
- Students will learn basic concepts and methods of software development.
- Students will acquire skills in Python programming to formalize and solve simple development tasks.
- Students will learn to select the most appropriate toolset for app development.
- Students will practice application debugging and deployment with respect to various platforms and toolchains.
- Students will learn to analyze a problem to be implemented in the form of a C++-application.
- Students will learn to design app architecture with respect to problem decomposition and known limitations.
- Students will learn to create a testbed environment for essential testing of the application.
Course Contents
- Introduction.
- Dynamic typing. Operations of sequence, selection, and iteration.
- Number systems. Float in the computer memory, rounding and other aspects.
- Strings.
- Functions and recursion. Lambda-functions. Named parameters.
- Tuples. Lists. Function map. Methods Split and Join.
- Zen of python. PEP-8. Files. Exceptions and errors. Program debugging.
- Sets. Dictionaries.
- Sort and found. Introduction into the complexity theory.
- Elements of functional programming. Function Enumerate. Module Functools.
- Object-oriented programming. Main ideas: encapsulation, inheritance and polymorphism. Operator Overriding. Function Isinstance. Examples.
- Python for data analysis. Overview.
- Introduction to C++.Introduction to C++. C++ program structure. Statements. Programs and modules. Toolchains and building C++ Programs.
- Data types and Objects.Datatypes and Objects. Primitive, composite and user datatypes. Scope of variables (objects). Constants. Basic input/output. Introduction to streams.
- Control flow statements.Control flow statements: conditional (if, switch); loops (while, do..while, for).
- Expressions and Operators.Expressions. Operations and operators. Operator precedence. Logical and Bitwise operations.
- Functions and procedures.Procedural decomposition. Functions and procedures. Formal and Actual Parameters of a Function. Function return value. Function signature. Passing parameters to a function by value and by reference. Function overloading. Operator overloading.
- C++ Memory model.Memory model of a C++ program. Addresses and pointers. Difference between pointer and reference. Stack- and heap-memory. Object life-cycle.
- Classes.Classes overview. Class members: methods and fields. Access modifiers: public, protected, private. Classes vs. structures. Te (.) “dot” and (->) “arrow” operators. Constructors. Destructor. Safe array. Copy constructor. Copy operation. Copy-and-swap idiom. Rule of three.
- Strings.Strings in C++. Null-terminated string. std: string class. Unicode supporting. String streams. Approaches to deal with strings.
- Standard library (STL).Standard library (STL) overview. Containers and adapters. Algorithms. Iterators. “for-each” loop for iterating collections/containers. stl::vector
and C-style arrays. Dynamic resizing of a vector. Standard library components. Sequence containers: vector, list, dequeue∗. Associative containers: map, set, unordered_map, unordered_set. Adapters: stack, priority_queue. Main std algorithms. - Operator overloading.More on operator overloading. Bitwise operations. std::bitset
class. - Templates.Templates: classes and functions. Header-only approach. typename and inner types. Templates and duck-typing. Concepts. std template framework. Lambda functions.
- Exceptions and Move semantics.Exceptions. RAII idiom. Smart pointers. Move semantics. Rvalue reference. Rule of five.
- Inheritance.Te Tree Pillars of Object-Oriented Programming: Encapsulation, Inheritance, Polymorphism. Single inheritance. Virtual and pure-virtual methods. Abstract classes and interface classes.
- Object-Oriented Analysis and Design.Introduction to Object-Oriented Analysis and Design. Class relationships.
- C++ plus Python.Binding c++ and python together.
Assessment Elements
- 1st semester Ongoing AssessmentThe ongoing assessment grade is accumulated throughout all the classes and is related to a participant’s activity. An ongoing control structure is individual for every class. During the classes, there are some activities available for students to be involved in. They include (but are not limited by) writing code and developing applications, evaluating practical problems, solving tests, answering questions and so on.
- 2nd semester Ongoing AssessmentThe ongoing assessment grade is accumulated throughout all the classes and is related to a participant’s activity. An ongoing control structure is individual for every class. During the classes, there are some activities available for students to be involved in. They include (but are not limited by) writing code and developing applications, evaluating practical problems, solving tests, answering questions and so on.
- 1st semester ExamFirst part exam, which takes place at the end of the first quartile.
- 2nd semester ExamThe exam may be carried out online via distance learning platforms. The second part exam, which takes place at the end of the second quartile.
- Regular testsStudents’ skills in programming are tested using automated testing. This way, a student is assigned an individual task, prepares it by using a personal computer and, then, submits it by using a special service, such as Yandex.Contest or a repository-based tool. The specific solution is subject to further clarification
- Individual Home tasksStudents’ skills in programming are tested using automated testing. This way, a student is assigned an individual task, prepares it by using a personal computer and, then, submits it by using a special service, such as Yandex.Contest or a repository-based tool. The specific solution is subject to further clarification.
Interim Assessment
- Interim assessment (2 module)0.4 * 1st semester Exam + 0.6 * 1st semester Ongoing Assessment
- Interim assessment (4 module)Final grade = 0.7 *min(1st semester grade, 2nd semester grade) + 0.3 *max(1st semester grade, 2nd semester grade)
Bibliography
Recommended Core Bibliography
- Davis, S. R. (2014). C++ For Dummies (Vol. 7th ed). Hoboken: For Dummies. Retrieved from http://search.ebscohost.com/login.aspx?direct=true&site=eds-live&db=edsebk&AN=784132
- Gregoire, M. (2018). Professional C++ (Vol. Fourth edition). Indianapolis, IN: Wrox. Retrieved from http://search.ebscohost.com/login.aspx?direct=true&site=eds-live&db=edsebk&AN=1729638
- Pilgrim, M. (2009). Dive Into Python 3. New York: Apress. Retrieved from http://search.ebscohost.com/login.aspx?direct=true&site=eds-live&db=edsebk&AN=326208
Recommended Additional Bibliography
- Olsson, M. (2015). C Quick Syntax Reference. [New York]: Apress. Retrieved from http://search.ebscohost.com/login.aspx?direct=true&site=eds-live&db=edsebk&AN=944034