Course guarantor for English study branches: Adam Dingle
Note: This subject is intended for second-year students and begins in the summer semester.
Registering for this subject in the winter semester is only for students who did not fulfill the prescribed requirements during the preceding summer semester.
So second-year students should not register for this subject in the winter semester.
The objective of the course is to build a larger software project using an arbitrary programming language.
In the first week there is an introductory presentation for all English-speaking students; see the schedule.
Students work independently, regularly consulting with a project supervisor.
Each student will find a supervisor to work with and will be officially assigned to them. A list of possible supervisors and their suggested project topics appears in SIS.
A supervisor may choose to limit the set of possible projects (for example, only projects related to artificial intelligence... or not related to it) or the possible languages or target platform (e.g. only C++ for Unix/Linux). Any such limitation is listed in the "Public notice to the schedule" field. A supervisor may offer their own suggestions for projects.
Each supervisor's group has its capacity set to 0 in SIS. Students are officially assigned only after coming to agreement with a supervisor.
Think about what you would like to build and how, and contact a suitable supervisor. After you come to mutual agreement, the supervisor will add you to his or her group.
Typically a software project leads to a bachelor's thesis (by agreement with the project supervisor when discussing the preliminary project topic - take this into account). It is generally assumed that the supervisor of a software project will become the supervisor of the bachelor's thesis.
For theoretically oriented students, it is possible to complete a shorter project in NPRG045 followed by a more theoretically oriented bachelor's thesis with a literature search.
Students must register for this subject by the standard registration deadline
For the tutorial (cvičení), register for the common parallel that lists no supervisor
A project supervisor can assign a student to their group (or change an assignment) until 28.3.
After coming to agreement with your supervisor, ask them to add you to their group.
Make sure that you have actually been assigned to your supervisor by the deadline! If you are not assigned to a supervisor by 28.3., neither the supervisor nor the guarantor will be able to make this assignment afterward, and your supervisor will not be able to give you credit for this subject!
Steps to assign a student (for project supervisors)
Log into SIS, and click on "Students registration into subjects"
In the text box in the upper right ("course code"), type NPRG045 and hit Enter
At the top of the page, click on "List of registered students for the schedule item"
Change "Parallel class" to "23bNPRG045x01 (the third item in the list, without any teacher name)
Click the Show button
Click the check box to the left of a student's name
In the list box at the very bottom, select "change the parallel class"
In the list box to the right of that, select the parallel with your name
Click "Do"
Your supervisor will determine deadlines to follow, depending on his/her availability and the project's attributes. The following are common:
End of March - problem statement (following the topic agreed to preliminarily)
Around April - detailed specification
By end of semester - an implementation including the previously agreed functionality to some degree of completion
The extent of the detailed specification, the scope of the implementation and the required degree of completion should be agreed on in advance while assigning the task and specifying the project.
In theory anything at all involving designing and implementing a computer program.
If possible the topic should be interesting and non-trivial, definitely not something that has been built 100 times before, with at least some degree of independent thought (essential if the project will be expanded into a bachelor's thesis)
A software project cannot be primarily theoretical work such as research, algorithm design, formal proofs, etc.
Language: in theory any, though mainstream languages are preferred: C++, Java, C#. It is best to approve other languages (Python, Ruby, Kotlin, Go, Scala, ...) with your supervisor. Web, mobile or cloud applications are also possible.
Operating system: in theory any, though the following are preferred: common Linux or Windows variants, mobile platforms and platform-independent projects. If targeting a non-traditional operating system or platform, it is the student's responsibility to make the platform available to the supervisor.
The student must continuously use a version control system for developing their project. Preferably they should use a MFF GitLab repository. Alternatively, by agreement with the supervisor it may be possible to use e.g. a public GitHub repository.
The supervisor will create a repository for the student in the MFF GitLab section designated for individual software projects.
The list of repository commits will be used to evaluate the student's work, so the student should commit source files and other files on a daily basis.
Uploading only the final version of the project to the repository is unacceptable and will result in a loss of credit.
The URL of the repository must be listed in the student's entry in SIS (Study group roster).
The repository must also contain all documentation including the approved project specification.
Problem statement - a short description of the program agreed to:
Name, cca 5-15 line description of the topic, OS, language, libraries or other external components, development environment, ...
Detailed specification - a detailed description of the proposed implementation which would allow another programmer to write "the same" program:
A short analysis of existing programs, a description of all significant intended functionality and attributes of the program, emphasizing how it will differ from existing programs (how it will be better, which additional features it will have, and so on)
A description of the main functions
A design for the structure of the program (modules, libraries, possibly a framework, mutual dependencies)
OS, language, development environment, other source code to be used (libraries, modules, and so on)
Implementation (for credit - see Credit, below)
a sufficiently large self-contained part of the application that reliably works in the scope of the specfied/agreed functionality.
scope and functionality to be agreed on in advance, but certainly not only a shallow GUI
Final version
A functional, stable software product with a usable user interface and/or programming interface.
An 'installation package' containing everything necessary for installing and launching (libraries, configuration, data, ...)
Test data - if the program requires certain data to demonstrate its functionality, the data must be included in such a way that the full functionality can be demonstrated.
Documentation
Installation manual - describes how to install, configure and launch the program
User's guide = describes how to use the program (what it is possible to do with the program, and how), as well as the user interface
Developer documentation = how to compile the program, a description of the implementation (what, in what language, how), a description of non-trivial algorithms and data structures
Text automatically generated from source code (Doxygen, Javadoc, ...) is not considered to be developer documentation
The documentation should consist of what is not in the source code.
Program: overall quality of the work, stability of the program, user-friendliness, quality of the source code, comments
Documentation: clarity, readability, completeness, quality of the work
Software Project and related Bachelor Thesis with the same supervisor
Credit for NPRG045 [4 credits] is awarded by the supervisor of the Software Project upon completion of the agreed-upon requirements (detailed specification, implementation of a substantial part, ...), but only after the student registers for a related Bachelor Thesis with the same supervisor
Once the project is absolutely complete (including complete documentation) the student will receive credit for NSZZ031 [6 credits]
The most common case
Software Project without a related Bachelor Thesis
Once the project is absolutely complete the student will receive credit for NPRG045 [4 credits]
Credit for an unrelated NSZZ031 [6 credits] will be awarded by the Bachelor Thesis supervisor
Mainly intended for the case when a student decides while working on their Software Project that they do not wish to continue it, so they will register for an independent Bachelor Thesis
If you registered this year in the winter semester (irrespective of whether this is your first or second enrollment in the subject): do not register again, come to agreement with an supervisor (if you have not done so already)
If you registered last year, but not yet this year: after agreeing with your supervisor, enroll in the supervisor's group in the standard way. You must earn credit for the subject by the end of this year's summer semester at the latest
If you have not yet registered: sign up in the standard way
If you have an uncompleted prerequisite, typically Programming 2, do not register for this subject
Reason: in the summer semester you'll need to write semester projects for Programming 2 and also for Programming in XXX, so you won't hvae time for intensive work on an independent software project as well
You can register for an invididual software project in the winter semester
You can still come to an informal, tentative agreement with a supervisor and begin to think about your project topic
Forgiving prerequisites is a non-trivial administrative process and we'd like to avoid it whenever possible