Software Development for Students
Computer science students shall achieve technical excellence when reaching bachelor level. They should be proficient with industry good practices.
Students understand the theory and principles behind these practices. Experience with one of the best of breed tools enforces learning and automatism.
The focus of a technical university is to teach the concepts and methods. The tools are used to practice and to increase student learning.
Source Code Version Management with Git
Git is the standard tool for the distributed source code management system. It is supported by all major development IDE and continuous integration environments.
First-year undergraduates shall master the basic git commands to write their semester projects.
Second-year sophomores shall master the Git commands used to work in teams. Pull requests are a standard approach to review team colleague works and to consolidate new functions into the application.
Modern Java Software Development
Java is the preferred programming language for the majority of teaching institutions around the world. The programming language has evolved over the last ten years. Students should learn the current way of writing code in Java.
The actual Java approach is to use streams and renounce in most cases to use instructions such as for or while loops or conditional if statements. Delegation and lambda constructs often replace inheritance design.
Since JDK 16, Java has provided Algebraic Data Types with records and sealed classes. Records implement Product Types. Sealed classes implement Tagged Unions, also called sum types.
The IntelliJ IDEA IDE is now the industrial standard for the Java and often Python world. The IDEA environment promotes the use of modern Java constructs. Currently, constructs such as records, sealed classes, closeable resources, switch instructions as expressions are new approaches to writing legible Java code. Concepts such as Optional, Streams, immutable objects, and unchecked expressions promote more functional programming styles.
Gradle is our preferred build tool for Java projects. The approach is straight forward.
Technical Excellence
The DevOps and software craftsmanship movement strongly promotes technical excellence and intrinsic quality in software development.
Students shall be fluent with
-
Static code analysis. IntelliJ IDEA provides an analysis function for static code analysis. The IDE environment is free for students.
-
Unit tests and integration tests Use the seminal libraries JUnit5, Mockito, and AssertJ
-
Continuous integration pipeline uses the CI pipeline of your product management tool; either GitLab, GitHub, Bitbucket, or Azure DevOps.
Documentation
Agile and Scrum
Agile and Scrum are the standard methods to develop software products in the industry. All students shall excel in agile development approaches. Scrum is the most used approach and should be taught to all computer science students.
Students shall understand the agile concepts and main constructs. When working in a Scrum environment, they have used the backlog, issues, stories, definition of done. They have planned their projects with a vision, a roadmap, epics, and sprints.
Gitlab as a Student’s Tool
Gitlab is an integrated solution for software development in teams and DevOps approaches. It is the official tool provided in our Computer Science Department.
Students learn computer science principles and hands-on how to develop software applications. They will use their learning to develop commercial software components when working after the completion of their studies.
Gitlab as a Lecturer’s Tool
All the source code and artifacts of a student class are available in Gitlab. The development history over a project or a semester is visible in Git. The lecturers can access the artifacts or use scripts to extract the data necessary to set the grades for the students. The grading process can be standardized. The decision process is part of the Gitlab data and is auditable.
Links
The student series is a set of blogs showing how to use central tools for modern software development.