TDDD63 Project: Starting
Read these documents now!
General project information, before you start (this document)
Why a project? Why now?
The programming project is essential in several ways.
It gives you direct hands-on experience in using programming to solve interesting problems at a very early stage in your university education.
It is sufficiently large to let you produce a very interesting final "product", in contrast to ordinary short lab exercises.
It lets you use your own creativity in choosing your own programming task, after a set of introductory tasks with detailed guidance.
It allows you to practice working independently and to take personal responsibility for what you do, how you do it, and how much you learn.
Since this course takes place very early in your studies, we don't expect the end result to be a perfect product. What we do expect is for you to enthusiastically dive head first into the world of programming and software development, to work hard and spend a great deal of time on the project, to write a lot of code, to try different approaches to solving problems, to make many mistakes, to learn as much as possible from those mistakes, and to show us what you have learned. Enthusiasm and hard work counts!
Groups and Project Types
There are five project types, each of which has a senior person with the ultimate responsibility for the project definition and an assistant taking care of questions, progress reports and other day-to-day contact with each group.
Group and project assignment will proceed as follows:
You read the project descriptions linked above and sign up for a preferred project in WebReg by the deadline given at the project lecture.
We randomly divide you into preliminary groups of 3. Project preferences will be taken into account, but we must also consider limitations in equipment, space and supervision, especially for the humanoids.
You meet your preliminary partners during lab 1 and ensure that everyone is actually going through with the project.
We may have to change the project groups slightly between lab 1 and lab 2 in case someone has dropped out.
The random assignment has similarities to working at a software company, where you cannot expect to personally choose your coworkers. Getting used to this is important for your professionalism.
If someone drops out or "disappears" and cannot be contacted after lab 2, inform your assistant immediately so we can try to minimize the impact.
Setting Up and Using Version Control
As soon as the project groups have been finalized, we will set up version control accounts for all groups. Using version control is mandatory – here, in most companies, and in most open source projects.
If this is new to you: Version control systems essentially allow you to store and keep track of multiple versions of your code, documents and files. By regularly checking in (storing and registering) the current version as you implement new features and resolve bugs, you will be able to:
- Keep track of what has been changed, when, and by whom.
- Retrieve and merge the latest changes checked in by other project members, without manually emailing versions back and forth.
- Provide a specific version of the code to your assistant simply by giving him a revision number, rather than mailing your code.
- Revert to an old version if you realize that you made a bad change, without manually copying versions and getting directories such as "project", "project-old", and "project-really-the-newest".
- See exactly what you have done since last week's progress report.
- ...and so on.
Learning to use version control is essential. Starting now will save a lot of time in the long run. We can also use this for communication, to see the current version of a piece of code we are discussing, and as part of the examination, to clearly see how much progress has been made from week to week.
We will set up version control repositories for you. More information and instructions will follow soon.
How to pass the course (important!)
The only grades given for the project are U (Fail) and G (Pass).
To pass this course you must finish, demonstrate and present your project within the course period. If you have finished most of the project but not everything, or you miss the mandatory demo or presentation, your next opportunity to finish this course and receive course credits will be in April.
Apart from this, the critieria for passing are not easily expressed in terms of code quantity or the number of tasks/milestones achieved. Such criteria are easy to measure but often do not correspond to actual knowledge being gained or the effort involved.
What we care about is that you participate, work hard, show a practical understanding of programming, and learn a great deal. That you have learned can of course be shown by flawlessly achieving milestone after milestone, but also by making mistakes, explaining the mistakes, and demonstrating that you know better now. Your project assistant will try to help you stay on the right track, and the input you provide to the project assistant will influence your grade.
So remember this:
When you are having problems: Saying "I didn't get anywhere this week" or "I didn't know how to continue so I haven't done anything" is obviously not sufficient, not here and not when you finish your education and get a job. But there is still a lot you can do to show your progress in learning, even if you are having problems solving the task at hand!
Write down what you have tried and which resources you have used to find more information. Try again, many times. Think, but also write code and experiment with programming. Show the code you have written, including code that did not work out as expected (save it!). Show the assistant how you have reasoned about the problem and why. Explain clearly, in your written report. Show that you are working hard and spending plenty of time trying to solve the problems that arise. Then you can still pass the course!
If you are inexperienced, you must still try, and you must make sure you get your share of coding time. Be active, and be proud of what you learn!
If you are experienced, you must also work hard. If the basic project isn't challenging, then challenge yourself by spending time elaborating it, designing new functionality, and exploring new aspects of programming. No project is so simple it cannot be expanded into something that you can learn from.
Page responsible: Jonas Kvarnström
Last updated: 2016-09-26