Students, who are successful in the course will be able to:
- use both object oriented and functional programming constructs to design maintainable, and resilient software composed of clearly encapsulated, and loosely coupled objects.
- analyze the runtime performance (in terms of time, memory and I/O) of their software solutions and alternatives.
- Be able to design performant algorithms for common information processing tasks, recursive or otherwise
- choose, based on the problem, or implement the most suitable data structures, or combinations thereof