The field of software development is not as young as you might thing – it is much older than you; actually, it is even much older than the majority of the professors at our faculty. Therefore, it is also quite heterogeneous and covers the development from specialized drivers to extensive banking information systems. The technologies in this field, as well as in the computer science in general, are changing fast, striving for new and better solutions, although prospective solutions and good practices survive these technological changes and often even reincarnate in the new technologies; similarly to jeans and The Beatles that are trendy almost from their first appearance. There are some "general truths" in the software development that every programmer should be familiar with. The subject Software engineering offers these useful practices and practical knowledge to the students.

The student is first put in the role of a project manager in the development of a software system, which requires many months of development, will have numerous functionalities and might be used by thousands of users. The expertise in software development is therefore very important, as well as familiarity with various approaches to software development and related activities, such as user requirements analysis, design, implementation, and also software maintenance, where the best practices, accumulated through many years in software engineering, are irreplaceable.

A special emphasis is given to good programming practices for computer programmers. As we need high quality ingredients and chef's precise execution of the recipe to prepare an excellent cake, there is only one way leading to the excellent program: carefully designed and accurately performed steps of program development. And what is the most important in the process? For cake, it is definitely the chef; and for software, it is the programmer. The cake tastes so good because the chef puts in her experience of many years and the knowledge of generations. What about the programmer?

The course requires solid knowledge in programming (especially in Java language), algorithms and data structures, and databases. Beside lectures and laboratory exercises, it includes also project work in teams, covering everything from project preparation to its realization and presentation.