02325 Pro­gram­ming Pro­jec­t

Table of Contents
  1. In­troduc­tion§1
    1. Learning Ob­jec­tives§1.1
      1. Teach­ing Phi­los­o­phy§1.2
        1. Rules§1.3
          1. The Goal§1.4
            1. Tech S­tack§1.5
              1. Group­s§1.6
              2. Re­quire­ments§2
                1. Group Con­trac­t§2.1
                  1. Git Repos­i­to­ry§2.2
                    1. Re­port§2.3
                      1. Prod­uc­t Video§2.4
                        1. In­di­vidual Re­flec­tion­s§2.5
                        2. Grad­ing§3
                          1. Course Plan§4
                            1. Course Eval­u­a­tion and Feed­back§5

                              This is the home­page for the course 02325 Pro­gram­ming Pro­jec­t, which is taugh­t in the pe­ri­od from the 8th to the 26th of June.

                              In­troduc­tion §1

                              The goal of this pro­jec­t is to chal­lenge y­ou with a re­al-life-ad­ja­cen­t de­vel­op­men­t pro­jec­t. Hope­ful­ly, y­ou will sur­prise y­our­self about how much y­ou have learned in the last year, but al­so re­al­ize that there is stil­l some­thing to learn.

                              Learning Ob­jec­tives §1.1

                              A stu­den­t who has met the ob­jec­tives of the course will be able to:

                              • Orga­nize, plan, and car­ry out col­lab­o­ra­tive work in a s­mal­l pro­jec­t group;

                              • Im­ple­men­t and adap­t a so­lu­tion in code to a prob­lem with chang­ing re­quire­ments over mul­ti­ple de­liv­erables;

                              • Break down a de­vel­op­men­t task in­to s­mall­er pieces;

                              • Pri­or­i­tize re­quire­ments;

                              • S­tore, ac­cess, and mi­grate da­ta from/­to a data­base;

                              • Use lay­ered ar­chi­tec­ture de­sign;

                              • Ver­i­fy code us­ing auto­mat­ic and man­u­al test­ing;

                              • Use ver­sion con­trol for col­lab­o­ra­tion and attri­bu­tion; and

                              • Doc­u­men­t the de­sign and de­vel­op­men­t process.

                              Teach­ing Phi­los­o­phy §1.2

                              Our teach­ing phi­los­o­phy is that y­ou on­ly learn from y­our mis­takes. We will there­fore push y­ou to y­our lim­it­s, so that y­ou get a change to make mis­takes now where it does­n't mat­ter in­stead of lat­er when it might cost y­ou y­our job.

                              There­fore, we will ask y­ou to do things be­yond y­our cur­ren­t skil­l lev­el, and that we do not ex­pec­t y­ou to com­plete al­l tasks.

                              We do know that this is tax­ing, but don't let y­our­self get s­tuck or give up. In­stead con­tac­t the TA or teacher as they re­al­ly wan­t to help.

                              Rules §1.3

                              We ex­pec­t y­ou to com­plete the task with most mean­s nec­es­sary. This in­cludes the use of GenAI (ex­cep­t for a­gentic AI) as well as the in­ter­net as large. Y­ou are, how­ev­er, stil­l bound by the Dan­ish copy­right laws and gen­er­al acad­e­m­ic rules:

                              • Do not p­re­sen­t oth­er­s work, GenAI in­clud­ed, as y­our own.

                              • If y­ou use code or re­sources from the in­ter­net, make sure y­ou do not in­fringe on their copy­right.

                              S­ince the goal of this course is to learn to de­vel­op code, con­sid­er turning of al­l GenAI tool­s as they will hin­der y­our a­bil­i­ty to learn. The use of A­gentic AI (e.g ., tool­s like Claude Code or Open­Code) is pro­hib­it­ed.

                              The Goal §1.4

                              The goal is to build a the­sis and in­tern­ship allo­ca­tor for UT­D, the Uni­ver­si­ty for a Tech­ni­cal Den­mark.

                              At UT­D every stu­den­t need to com­plete mul­ti­ple pro­ject­s with an ad­vi­sor. In the cur­ren­t set­up, each stu­den­t have to send e­mail­s to every ad­vi­sor, they might wan­t to do a pro­jec­t with, and hope that those ad­vi­sor are avail­able. This so­lu­tion is a big pain poin­t for the stu­dents be­cause it is hard to fig­ure out which ad­vi­sors have s­lot­s left, for the ad­vi­sor as they get many e­mail­s from stu­dents that wan­t ad­vis­ing, and for the ad­min­is­tra­tion as they have to help the stu­dents find an ad­vi­sor so they can grad­u­ate.

                              UT­D, there­fore, wants as sys­tem to keep track of stu­den­t and their ad­vi­sors. The sys­tem should be we­b-based and s­tored in an data­base.

                              Tech S­tack §1.5

                              The cus­tomer al­ready had a team working on the as­sign­men­t but trag­i­cal­ly they al­l got hit by a bus. For the pro­jec­t y­ou will be us­ing the fol­low­ing tech s­tack.

                              Group­s §1.6

                              In this pro­jec­t, y­ou are working in group­s of 4 picked at ran­dom at the s­tart of the course. We do this be­cause of t­wo rea­son­s:

                              • As in re­al life y­ou can­not al­ways de­cide who y­ou are go­ing to work with. Peo­ple skill­s in soft­ware de­vel­op­men­t is ex­treme­ly im­por­tan­t.

                              • This is a chance to broad­en y­our net­work and get to know more peo­ple to work with in the fu­ture.

                              We know that y­our skil­l lev­el­s are stil­l var­ied. It is im­por­tan­t then that the strong pro­gram­mer­s in the group help the less strong. We fol­low the LEGO phi­los­o­phy,

                              Blame is not for fail­ure, it is for fail­ing to help or ask for help. ― Jor­gen Vig Knud­stor­p

                              Re­quire­ments §2

                              The course has the fol­low­ing hand-in­s.

                              Group Con­trac­t §2.1

                              Set­ting ex­pec­ta­tion­s is im­por­tan­t in group work. The con­trac­t will not be grad­ed and the con­tent of the con­trac­t is com­plete­ly up to y­ou, how­ev­er, if y­ou ex­pe­ri­ence any dis­agree­ments dur­ing the course pe­ri­od, then we, the in­struc­tors, will use the con­trac­t as the ba­sis for any en­force­men­t.

                              Y­our group con­trac­t MUST con­tain al­l the group mem­ber­s names as well as their git­lab ac­coun­t.

                              To make sure y­ou cover al­l the im­por­tan­t top­ic­s, con­sid­er us­ing the fol­low­ing Con­trac­t Tem­plate.

                              Re­mem­ber to do the hard con­ver­sa­tion now. What is ac­cept­able be­hav­iour, what is not? How many days can y­ou be late be­fore it will have con­se­quences.

                              As soon as y­ou hand in y­our group-con­trac­t, y­our group will be giv­en a repos­i­to­ry, which con­tain­s y­our first user-sto­ries.

                              Git Repos­i­to­ry §2.2

                              As part of the fi­nal com­mit y­ou have to hand in a copy of y­our repos­i­to­ry.

                              Y­our con­tri­bu­tion­s to the pro­ject­s code and re­port are measured us­ing the com­mit­s to y­our join­t repos­i­to­ry. On­ly com­mit­s in the main branch are count­ed. Make sure y­our git is set­up correct­ly (see Git (§1)).

                              Us­ing a com­pli­cat­ed set of met­ric­s we will cal­cu­late a Con­tri­bu­tion S­core, which in­di­cate how much each in­di­vidual con­tributes to the fi­nal prod­uc­t.

                              Dur­ing the course, we will push a file SUMMARY.md to y­our repos­i­to­ry which con­tain­s both y­our ac­tive user-sto­ries as well as y­our con­tri­bu­tion s­core.

                              To pack­age up the repos­i­to­ry fol­low the guide in Git (§3.2).

                              Re­port §2.3

                              The re­port must be no larg­er than 100 k­B (~100.000 char­ac­ter­s in­clud­ing spaces), and should be writ­ten in Mark­down and ren­der nice­ly on git­lab. It should be hand­ed in as part of y­our repos­i­to­ry (see home (§2.2)).

                              Prod­uc­t Video §2.4

                              A 5 minute video show-­cas­ing the most in­ter­est­ing fea­tures of y­our ap­pli­ca­tion. Con­sid­er us­ing OB­S, as a screen recorder.

                              This video is used to help the cen­sor get a feel­ing of the fi­nal prod­uc­t, as well as some­thing y­ou can show­case to friend­s, fam­i­ly, and po­ten­tial em­ploy­er­s.

                              In­di­vidual Re­flec­tion­s §2.5

                              A pdf with in­di­vidual re­flec­tion on y­our work in the pro­jec­t. Y­ou should cover:

                              • What did y­ou do well, where do y­ou felt like y­ou shine?

                              • Where did y­ou fail, and what did y­ou learn from those fail­ures?

                              • How did y­ou use GenAI, and did it help or hin­der y­ou?

                              • Do y­ou think y­our con­tri­bu­tion s­core is ac­cu­rate?

                              The in­di­vidual re­flec­tion­s should be less that one page, t­wo or three para­graph­s.

                              Grad­ing §3

                              As a rule of thum­b, y­ou can­not fail this course un­less y­ou do not par­ti­c­ipate. To show y­our par­ti­c­i­pa­tion, y­ou need to have writ­ten a reason­able amoun­t of code dur­ing of the three week­s and have pushed it to git.

                              Y­our grade will be based on:

                              Val­ue cre­at­ed is measured as a num­ber be­tween 1 and 5 for each user-s­to­ry, this num­ber is se­cret but y­our cos­tumer will try to hin­t im­por­tance to y­ou if y­ou ask them.

                              The amoun­t of code writ­ten and test­ed is measured us­ing y­our git his­to­ry, it is there­fore im­por­tan­t to make sure y­our Git is set up correct­ly.

                              Course Plan §4

                              Find the cur­ren­t course plan here.

                              Course Eval­u­a­tion and Feed­back §5

                              Please do not h­e­s­i­tate to write to me di­rect­ly or fil­l out the anony­mous for­m.