Lade Daten...
iLearn
Cau-siegel-color-300

Note: this page can be reached via http://infprogoo.de.

Some of this material is still tentative and will be updated throughout the semester.

Organizational Matters - Things to do Quickly

For a smooth start for you and us, please perform the following registrations (at least until Step 6) rather soon. If you are not sure what to do, ask us, or a fellow student who seems to know her way around.

1) Activate your RZ account - Deadline: Wed, October 26, 23:59

When you enroll at CAU, you get an "RZ account". RZ stands for the Rechenzentrum, which provides support for the whole university, hence this account is also referred to as "university account". The RZ account gives you, for example, an E-Mail address of the form "stu123456@mail.uni-kiel.de". As explained in your enrollment documents, this account must be activated by you by setting a password in the StudiNet.

2) Register in iLearn - Deadline: Wed, October 26, 23:59

Click on the "Registrieren" button on top of this page and fill out the form that appears. For "Benutzername", please use the login of your university account (e.g., "stu123456") For your E-Mail address, please use your university address (e.g., "stu123456@mail.uni-kiel.de"). Important: Click on "Ich bin ein Student" and fill out the required information.

3) Register for a practical class - Deadline: Wed, October 26, 23:59

Before doing this: CHECK YOUR SCHEDULE OF OTHER CLASSES ETC.. Once you have registered yourself in iLearn (see above), fill out this form and rank the different practical classes according to how well they fit into your schedule. We will then take your data and calculate an assignment of students to practical classes that is as fair as possible. You will end up in a practical class in iLearn by the end of the week. Unlike for the "Vorlesung" and the "Globalübung", participation in the practical class is mandatory, so please check your schedule carefully for the whole semester before filling out this form. After the assignment has been performed, it is quite cumbersome to move you to a different practical class. Also, we are likely to be filled to capacity in all groups, so any imbalances due to changes will be inconvenient. It is rather irritating to get complaints of the form "I now got a time slot which conflicts with class XY", when it then turns out that you gave that time slot as one of your top-three preferences for the practical class. (At least you should acknowledge that it was your mistake, not ours. And yes, we will still try to find a solution ...)

So again, before doing this: CHECK YOUR SCHEDULE OF OTHER CLASSES ETC..

4) Register in StudiDB - Deadline: Wed, October 26, 23:59

Sign up for our course on StudiDB. You will find a single group you can sign up to: Globalübung. Every student is required to sign up for that.

Based on this registration, the "IfI account" will be created. IfI stands for Institut für Informatik, or Department of Computer Science (CS). The IfI account is managed by the CS department's Technik-Service. You need the IfI account for InfProgOO as well as other CS classes. The IfI-Account also comes with an E-Mail address, of the form "stu123456@informatik.uni-kiel.de". This account is not the same as the RZ account (see above), but you use the same user name ("stu123456") and the same password as for the RZ account. The creation of the IfI account takes some time, but should happen within 24 hrs after you registered in StudiDB.

5) Optionally, but highly, highly encouraged: Participate in our survey - Deadline: Sun, October 30, 23:59

For the benefit of aspiring Computer Science students, we wish to take this opportunity to investigate the success factors in studying this subject. To that end, last year we conducted a survey whose results can be seen here. This time, we have teamed up with Prof. Andreas Mühling, head of the Didactics of Computer Science group, to create a survey that will run through the semester. We - and your fellow future students - would be greatly indebted if you would start participating by filling out this questionnaire. THANKS!

6) Optionally: Sign up for the mentoring program - Deadline: Sun, October 30, 23:59

Studying at the university is very different from going to school, and adjusting to the new demands and to your new life as a student can be quite a challenge. We thus offer a mentoring program to help you understand those demands and how you can successfully meet them. Find more information on this website.

7) Towards the end of the semester: Register for the project phase - Deadline: Sun, February 5, 2017, 23:59

The two week project phase (explained below) will start on Feb. 27 and will last until March 10, 2017. Fill out this form to register, just as you already did at the beginning of the semester for the practical class. However, as the project will be an assignment for two people, you should directly register yourself and your partner in one step this time. But don't worry if you don't have a partner yet. In this case, we're going to assign a partner to you.

As for the practical class, rank the different project class time slots accorting to how well they fit into your schedule. We will then take your data and calculate an assignment of students to project classes (hopefully by Feb. 9) and will then inform you via the iLearn mailing list. Participation in the project class is mandatory, just as with the practical classes during the lecture phase. So please check your schedule carefully before filling out the form. If you have conflicts during the time of the project, you can state them in the registration form. Please also read the "project phase" explanations further below in the Time Line section.

8) Towards the end of the semester: Register for the final exam - Deadline: Wed, March 1, 2017, 23:59

You register for the final exam in the StudiDB. More information on the final exam is found further down.

Done with all that, at least until Step 6, if it's still early in the semester? Great - now you can find out what you signed up for ...

Components of This Class

Technically, Inf-ProgOO consists of a lecture, practical classes, and a recitation class. Time-wise, we distinguish the "lecture phase" and the "project phase", as described below. For detailed times and places, see UnivIS.

Lecture ("Vorlesung"), 2 x 90 min per week

What you expect - the lecturer (usually Prof. von Hanxleden) presents and explains new things, sometimes rehearses old things, in particular at the beginning of the Tuesday lecture, and answers questions. Presence is not mandatory, but of course advised (see also "Do's and Don'ts" below).

Recitation Class ("Globalübung"), 90 min per week

In addition to regular lectures, we offer a recitation class where we discuss solutions to homework assignments. The idea is to give you another opportunity to learn how a more experienced programmer would go about solving the assignments. The recitation class is offered each Tuesday from 2:15pm to 3:45pm in the Frederik-Paulsen-Hörsaal in the Audimax (Christian-Albrechts-Platz 2).

Practical Classes ("Praktische Übung"), Mini Exams, 2 resp. 4 hrs per week

The practical classes take place in the Grundausbildungspool (Hermann-Rodewald-Str. 3, Room 105). Each practical class is staffed with teaching assistants that will answer your questions and help you with programming problems. Practical classes thus are a good place to ask questions about your homework assignments. In fact, you are expected to work on your homework assignments during practical classes. If you have already finished your homework, you can further hone your programming skills with the C4 platform described below. Mini exams (see below) also take place during the practical class.

As mentioned above, the practical class will also take place during the project. During the lecture phase, you participate in the practical class for 2 hrs / week; during the project phase, you participate in the practical class for 4 hrs / week. Note that in general, homeworks may require more time than just the 2 resp. 4 hrs per week of the practical classes. If you do need more time and you do not have a computer to work with, you may still work in the Grundausbildungspool at any time during the day whenever there is a free terminal (unless there is some lecturer that does not want any guests).

C4 CAU Coding Challenges

C4 is a platform where you can try to solve a range of programming problems of varying difficulty. We may award some prizes for the top scorers at the end of the semester. But participating in C4 is entirely voluntary, so no pressure here. Most problems are taken from the ACM International Collegiate Programming Contest and are meant to be solvable in a short time. However, some problems require an algorithmic background that you may not yet have but will acquire in later classes. So don't get frustrated if you cannot solve them right away. C4 is brand new, and has been developed by your fellow students at CAU - so feedback is very welcome!

Time Line

Lecture Phase

The bulk of this module takes place during the "lecture phase" (WS 16/17: Mon. Oct. 24, 2016 - Mon. Feb. 6, 2017), with lectures, recitation classes and practical classes.

Project Phase

There is also a two week "project phase" (WS 16/17: Feb. 27 - March 10, 2017), during which there is no lecture, but the recitation class and the practical class still take place. The idea of the project is that you work on a larger problem than you did during the semester, for which you also team up with a partner. Thus we advise you to find a suitable project partner during the lecture phase; if you do not find a partner yourself, we will team you up with somebody who also still needs a partner.

The project work load is calculated at 2 ECTS, i.e. 60 hrs, of which 2 sessions of 4 hrs each are conducted during the practical class, one session in each week. The third and last mini exam, covering your joint approach to the project, will also be conducted in one of these sessions. The project description is founde here. Thus you may start on the project before the project phase, which may be useful in particular if you have other obligations during the project phase (see below). However, the deadline for submitting the finished project is the end of the project phase.

If you have other obligations during this time, e.g. the Einführung in die numerischen Methoden der Mathematik (EMMI), we suggest the following:

  1. Team up with a partner who is in the same situation.
  2. Start early on the project.
  3. Prioritize those practical time slots that do not conflict with your other obligations. E.g., EMMI does not take place on Wednesdays, so you should prioritize the practical class slots on Wednesday. If you still end up with a slot that imposes a conflict, let us know and we will find a solution.

Exam

As other modules, we offer two exams. Most modules, e.g. Mathematics A, offer one exam during the CAU's "first exam period", which is right after the lecture phase, and one exam during the "second exam period", which takes place right before the following summer semester starts. However, because of the project phase, our timing is a little different.

The first exam for this module, which encompasses the lecture phase as well as the project phase, will take place shortly after the project phase (date see below).

For you this has the advantage that exams are spread out a bit, and that you can focus on the project while you have the other exams already out of the way. And yes, we strongly advise you to get the other exams out of the way during the first exam period, and that you do not wait with your first attempt until the second exam period. The idea of having two exam periods is that if you fail an exam during the first period, you have a second chance fairly soon thereafter.

Class Requirements

To pass this class, you must achieve at least 50% in the final exam.

To be admitted to the final exam, you must fulfill the following requirements:

1) Participate in Practical Classes

Fine print: you may miss up to two classes without explanations. If you miss more classes, you need an "Attest" (or a reaally good explanation for the head TA or the prof). But since practical classes are also where the mini exams take place (which is also one of the reasons why the practical class is mandatory), it makes things complicated when you are not there. So please just try to show up, it is for your own good after all.

2) Submit the homeworks

Fine print: the homework problem sets are made available in the iLearn system, and this is also where you upload your solutions. Typically, problem sets are posted on Friday and are due Sunday (23:55) ten days later.

Each problem set (a.k.a. Serie or Blatt) consists of a number of problems (Aufgaben) to solve, and each problem is weighted with a number of points. The points of the problems of each assignment add up to 100 points.

We recommend that you give all problems of a problem set at least a try. Typically, it is not too difficult to achieve at least 98 points in a problem set. If you have less than that, this indicates that you are struggling. At the minimum, you should achieve 52 points. (You can think about why 52 ...) If you have fewer than 52 points in a problem set, this constitutes a failed problem set. If you have more than two failed problem sets, you will not be admitted to the final exam.

An assignment may include one or two mandatory problems that by themselves have around 50 points. A mandatory problem does not have to be particularly difficult, however, it is particularly important for us that you solve that specific problem.

An assignment may also contain a bonus roblem that is more difficult than the others. You are not expected to solve this, but we of course invite you to try.

A solution is a meaningful program that shows that you yourself seriously worked on the problem (see also "plagiarism" below). Usually there is an automatic test that your program has to pass (see also "note on automatic tests" below), often there is an additional requirement such as writing a comment that explains how your program relates to the concepts taught in class. (Hint: these comments are of particular importance to us ...) If your solution does not pass an automatic test, or if it does not contain the descriptive comments asked for, then it will not receive full credit. If this happens on a mandatory problem, this means that you risk failing that problem set.

As noted above, we expect that you work on your homeworks during the practical classes (see above) and probably also beyond that. If you feel like you need assistance for a longer time than just your own practical class slot, you may drop in in other practical classes as well, provided there is space. Of course, those who have signed up for that practical class have priority in finding a seat/a terminal. Even in the (unlikely) scenario that you should not find any space, you may still ask questions to the assistants. You may also send us questions by mail, but the preferred way is to ask one of us during a practical class.

Again, if you have problems fulfilling this requirement (e.g. due to extended illness), contact us asap and we will find a solution. If you follow class, spend reasonable effort on the homework and use the practical classes to clear up any remaining issues, you should have no trouble to fulfill this requirement.

We recommend that you regularly check, in iLearn/"Blätter", the homework scores that you have achieved so far. If you have a failed problem set and feel that there is an error, contact us asap.

3) Pass three mini exams ("Testate")

Fine print: during the practical class, the head teaching assistant will come to you in more or less regular intervals to take a look at your homework solutions ("mini exam", "Testat"), and also to give you feedback and advice for improvement. The idea is that we want to make sure you are on track, and give you feedback early on. This is a pass/fail thing; if we see right away that you are doing okay, this will be less of an "exam" and instead mostly be a chance to get compact advice. If you can explain your solution to his or her satisfaction, you will receive a signature to certify that you passed the mini exam. If you fail, you will get a second chance later. If you fail that as well, you have forfeited you admission to the final exam this time. You can then try again next year, but we advise that you talk to the prof as well concerning your further study prospects. By the end of the semester, you need to have passed three mini exams to be allowed to be admitted to the final exam. If we can't administer your last mini exam because you don't participate in the practical class for whatever reason, please contact us so that we can try to find a solution. It is your responsibility to be available for the mini exam.

We recommend that you regularly check, in iLearn/"Prüfungen", the mini exams scores that you have achieved so far. If you have a failed problem set and feel that there is an error, contact us asap.

About the Lecture

At last, after the administrative stuff out of the way: this lecture is all about learning the foundations of programming. It covers the foundations of imperative and object oriented programming. It teaches you how to write computer programs that interact with the user, process data, and report information textually and graphically. It prepares you for later classes in that it enables you to translate abstract algorithms into running programs, and in that it makes you versatile in programming in the small on which you can build for creating larger projects.

Homework Assignments

You won't get better at programming until you actually sit down and do it. That's why each week we post a number of homework assignments you are expected to solve. The assignments can be accessed through the lecture's iLearn site. To solve them, you will use the Java programming language. We choose Java for pragmatic reasons, in particular its wide usage in academia and industry. However, one should keep in mind that Java for us is merely a tool to teach fundamental principles that apply to most programming languages. To find out if your solution works, submit it via the iLearn system. This will usually cause a set of tests to be run on your solution, and iLearn will show you the test results once they have finished.

You are encouraged to help each other for solving the assignments. However, you must submit your own code. Copying/adopting somebody else’s code or parts thereof is plagiarism and may result in not admitting you to the final exam. See also Do's and Dont's.

A Note on the Automatic Tests

Automatic tests are your friend. They help you to check your program, and they allow us to spend less time on manually checking your solutions - which in turn helps you because we then have more time to assist you in the practical classes. The tests are not there to make you fail a problem set. In fact, we try to make sure that you still get a passing score if you have developed a solution that (more or less) works but fails the test for some obscure reason. If you fail a problem set, then not (only) because of a failed automatic test.

If a test fails, you will see a stack trace that might seem a bit overwhelming at first. However, usually the first few lines tell you what is going on. And it seems that most students can get their solutions to pass the automatic tests without too much difficulty. However, no system is perfect, and it is hard to foresee all the things that can go wrong and produce immediately helpful error messages for all cases. If you think your program works and you do not understand why the test still fails, please contact the staff if this happens during a practical class, or send us a mail. In that mail, please include the failing program and the complete test report, and tell us who you are (Name + Practical Class you are in).

Literature

Our main source is The Art and Science of Java by Eric S. Roberts (Stanford University). This book does not assume any prior knowledge of programming, and explains fundamental programming concepts from the ground up, also pointing out possible pitfalls and common mistakes not to make. It thus may sometimes seem a bit slow, especially to those with prior programming knowledge. To get quick answers to specific questions you might want to use something else, such as Oracle's tutorial mentioned below or another of the references. However, it is a great resource to learn from, and especially programming novices seem quite happy with it. Each chapter includes a summary, review questions (answers are on-line, see also "Preparing for the Final Exam") and programming exercises.

There are three different versions of this book available: (1) An early draft of the book, which is freely available online, (2) the "International Edition" (ISBN-13 978-1-292-02603-9), which compared to (1) e.g. contains an extra chapter on event-driven programs, and (3) the "US Edition" (ISBN-13 978-0321486127), which compared to (2) contains extra chapters on collection classes and (briefly) concurrency and the MVC pattern. Not all, but most of the material covered in class is presented in this book. The lecture slides indicate the corresponding book chapters, using the numbering from the "US Edition".

Another handy and quite in-depth (German) Java reference is Java ist auch eine Insel by Christian Ullenboom. This book, too, is freely accessible online.

Students reported that Head First Java (or its German translation, Java von Kopf bis Fuß) is a good resource.

We also recommend Oracle's tutorial. Finally, if you really want to find out the nitty gritty, we recommend the Java Language Specification as the definitive reference.

Languages - English and German

Most written material in this class is English. The spoken language is generally German. Exam questions will have English and German translations. For anything you produce in writing (software or prose) you may choose either language, the same for the oral mini exams.

The rationale for including English early on is basically that it is the lingua franca of computer science. For example, most internet resources (such as Stack Overflow), software documentation (e.g. Javadoc comments and API descriptions), scientific papers (that you will have to work with during your studies when preparing a seminar presentation) and programming language standards (the ultimate source for clarifying details of the language) are in English. In short, you will have difficulties to have a career in computer science if you do not have at least passing reading skills in English.

This seems to work out quite well in practice (e.g., from the 200+ anonymous written comments received during a survey conducted throughout the 2016/17 semester not a single comment mentioned this as a problem). Having said that, we are aware of the fact that not everybody is equally versed in English, and we try our best to help you if you have language-related problems. E.g., the practical classes or the breaks during class are an excellent opportunity to ask us (or your fellow students) any questions you may have. And of course you might also consult non-English resources such as the German references from our literature recommendations above.

At this point optional, but certainly helpful is it to have good writing skills as well, and this is your chance to improve on them. We do not require, but encourage you to write your software "in English", i.e., use English variable/class/method names and write comments in English. If you want to, you can also submit your answers to "free text" problems in English.

Languages - Java

To quote from the aformentioned book by Roberts: "The purpose of this book is to teach you the fundamentals of programming. Along the way, you will become quite familiar with a particular programming language called Java, but the details of that language are not the main point. Programming is the science of solving problems by computer, and most of what you learn from this text will be independent of the specific details of Java." Replace "book" by "class" and you have a pretty good description of what this class is about and the role that Java plays in it. It might be hard to argue that Java is "the best" programming language, just like English may not be "the best" language from a linguistic point of view. However, Java certainly has everything one needs to teach imperative and object-oriented programming, which are the main programming paradigms that we will deal with, and there is a huge ecosystem around Java that you can access as you start learning the language. According to the Tiobe Index Java has consistently ranked as one of the most popular programming languages (together with C and C++) since around 2000. So there is a high chance that knowledge of this language might come in handy later during your career, including other classes at university.

To start programming in Java, you need access to a computer that has Java installed. An application that helps you write Java programs (called an Integrated Development Environment, or IDE) is also helpful. We have a simple guide to help you get set up.

You find our Eclipse Cheat Sheet here: Eclipse Cheat Sheet

But I Already Know Java!

For those of you who have already programmed in Java, we're pretty sure we have enough to keep you busy and interested as well:

  1. Most homework assignments will include an optional assignment that will be challenging even for advanced students.
  2. You may consider preparing for/participating in the ACM International Collegiate Programming Contest (ICPC), see also the site for the German Collegiate Programming Contest. If you are interested this, feel free to look for peers, e.g. on the C4 system mentioned above, and/or to set up a "programming club" that lets you practice together. If you need support in this, like finding a room for regular meetings, feel free to contact the Prof.
  3. Finally, many of your peers don't know Java yet. Take the opportunity and help them with whatever Java problems they have. Don't solve their homework assignments for them, however; see Do's and Don'ts.

Above all: Always keep in mind that we all started out not knowing anything about this whole programming business. So don't laugh at beginners, but instead help set them on the best path to becoming capable programmers.

Lecture Slides

Over the course of the semester, we'll post links to the lecture slides here. Grateful acknowledgement: the slides are extended versions of the original slides provided by the author of our text book, Eric S. Roberts, reposted here with kind permission. Typically, the slides with red titles and serif fonts are not shown during the lecture, but are delivered orally. The slides are initially those used in the previous edition of this class, but are updated throughout the semester.

  1. Lecture 1: Introduction (Chapter 1) pdf, last updated 28 Oct. 2016
  2. Lecture 2: Programming by example (Chapter 2) pdf, pptx last updated 24 Nov. 2016
  3. Lecture 3: Expressions, Context-Free Grammars (Chapter 3) pdf, pptx last updated 30 Nov 2016
  4. Lecture 4: Statement Forms (Chapter 4) pdf, pptx last updated 15 Nov. 2016
  5. Lecture 5: "Guide to Success" + Methods (Chapter 5) pdf, pptx last updated 28 Nov. 2016
  6. Lecture 6: Objects and Classes (Chapter 6) pdf, pptx, last updated 22 Nov. 2016
  7. Lecture 7: Arrays and ArrayLists (Chapter 11) pdf, pptx, last updated 12 Dec. 2016
  8. Lecture 8: Objects and Memory (Chapter 7) pdf, pptx, last updated 09 Dec. 2016 (classes we wrote in class: DynamicArray and Wubbel)
  9. Lecture 9: Strings and Characters (Chapter 8) pdf, pptx, last updated 20 Dec. 2016
  10. Lecture 10: Detecting Bugs, Object-Oriented Graphics (Chapter 9) pdf, pptx, last updated 19 Jan. 2017
  11. Lecture 11: Collection Classes (Chapter 13), Computational Complexity pdf, pptx, last updated 24 Jan. 2017
  12. Lecture 12: Files, Exception handling (Chapter 12.4) pdf, pptx, last updated 31 Jan. 2017
  13. Lecture 13: Event-driven Programs (Chapter 10) pdf, pptx, last updated 31 Jan. 2017
  14. Lecture 14: Wrap-Up - MVC, Concurrency, Race Conditions (Chapter 14) pdf, pptx, last updated 31 Jan. 2017 (Code: HousePoints, Timer)
  15. Lecture 15: Going Beyond the ACM Library pdf, pptx, last updated 31 Jan. 2017

Recitation Class Programs

The programs we work out together in the recitation class, will be posted here. The solutions to the homework assignments will generally become visible in the iLearn system after the deadlines passed.

  1. Recitation of Set1
  2. Recitation of Set2
  3. Recitation of Set3
  4. Recitation of Set4
  5. Recitation of Set6
  6. Recitation of Set8 + Christchess
  7. Recitation of Set9
  8. Recitation of Set10
  9. Recitation of Set11
  10. Recitation of Project 1 (Observer Example)

Additional Material

Other universities also offer courses based on the book by Eric Roberts. In particular Stanford University, where Roberts teaches Computer Science, uses the book in its CS106a class Programming Methodology. There are on-line videos of an earlier edition of this class conducted by Mehran Sahami, who like Roberts regularly teaches CS106a. Btw, an interview with Mehran Sahami, which also contains general advice for CS students, can be found here.

Note that we post that link here only to offer you additional ways of explaining the material. For the exam at the end of our course, the important thing is what happened in our lecture, not in the one we linked to.

Code used in book and lectures

The code for each book chapter can be found here.

Do's and Don'ts

Do: talk to each other

Unlike in some other classes, you work on the homework problems individually, at least for most of the semester. This is to make sure that every participant advances, and not just possibly a team partner who already knows this stuff. However, that does not mean that you should be left totally to your own devices. On the contrary - if you get stuck somewhere, seek help, and the closest available help are typically fellow students. This help should not involve sharing code (see below), but it should be the type of help that you would also expect from a teaching assistant. The practical classes are a great chance to not only talk to the TAs, but also to other students, as long as you keep the noise level down enough.

Don't: Share Code / Plagiarize

Our policy on that is simple: don't do it. The solutions you submit must be your own, individual creations, not submitted by anybody else. Obviously, you should also not take somebody else's solution and alter it, e.g. by variable renamings, changes in the comments, moving code portions around and other obfuscation techniques. If we detect (close to) identical solutions, both will be awarded 0.1 points. Moreover, this leaves a very poor impression on the people who grade your work (and who you may want to/have to work with later during your studies as well).

If we detect code sharing on a mandatory problem, this means a failed problem set for all parties involved. Btw, not only our human graders may detect such cases (and will get annoyed), but we also regularly run automated and surprisingly effective plagiarism checks over all solutions. These, e.g., are not fooled by the aforementioned obfuscation techniques. You invest your time much better by simply trying to solve the problem yourself, and get help if necessary. We much rather help you learn and understand than having to deal with plagiarism cases.

If despite our help you still feel that you cannot solve the problems yourself, then may be this class/this subject is just not the right one for you, at least not this time around. Again, talk to us if you're in doubt.

Don't: skip class thoughtlessly

The prof tries to provide enough "added value" in class to make it worth your time to participate. The same for the recitation class. However, participation in these is not mandatory. Depending on what type of learner you are (and how socially inclined you feel), you might prefer to just work alone with the book and the slides. That's fine - as long as you still keep up with the material covered in class. If you can solve the homeworks without any problem and understand rightaway the material covered in the book and the slides, you should be okay. If not, then the first thing you should consider is to stop skipping class. Because that's another thing that is annoying - a mini exam where the student has no clue of the material covered in class because (s)he did not bother to attend. In particular those who have some previous programming experience and have a false sense of security are at risk here.

Midterm Test and Final Exam

Midterm Test Downloads

Here are the past midterm tests (WT16/17 and WT15/16), along with our sample solutions. We recommend trying to work through the test yourself before looking at the answers.

Preparing for the Final Exam

Apart from the obvious (work through programming assignments, attend class and recitations and pay attention, team up with a study buddy), we want to point you to the Review Questions at the end of each book chapter. We highly recommend that you work through these Review Questions after the material has been covered in class. You can compare your answers also with answers provided here. It is likely that some of these questions will also occur in the final exam. For further advice, see also the "Guide to Success" discussed in class (Lecture 5, see Lecture Slides).

Previous Final Exams

First Exam Winter Term 16/17

See above ("Class Requirements") for the requirements to be admitted to the final exam.

The final exam will take place Wed, March 15, 2017, from 14:00 to 16:00. To get a smooth start, you should be there at 13:45 at the latest. Afterwards: excursion to Kieler Brauerei. The room you will take your exam in depends on the first three letters of your last name:

Last Name Room
Akg - Heh Otto-Hahn-Platz 5 - HS 1 (Chemie I)
Hem - Mil Otto-Hahn-Platz 5 - HS 2 (Chemie II)
Moe - Schr Olshausenstraße 75 - HS 1
Schu - Zwe Olshausenstraße 75 - HS 2

Note that if your name starts with "von", as in "von Hanxleden", we consider the first three letters to be "von" (meaning that you will end up taking your exam in OS75 - HS 2).

Signing Up for the Exam

Registration in the StudiDB system will be open for your from Dec. 26, 2016, to March 1, 2017.

Getting the Exam Results

You can take a look at your results and check what you did right or wrong on March 20 in CAP4 1304a. The time depends on which practical class you attended:

Practical Class Time Slot
Mo, 10 - 12 16:00
Mo, 12 - 14 16:10
Mo, 14 - 16 16:20
Di, 10 - 12 16:30
Di, 16 - 18 16:40
Mi, 12 - 14 16:50
Mi, 14 - 16 17:00
Do, 10 - 12 17:10
Do, 12 - 14 17:20
Fr, 12 - 14 17:30

Second Exam Winter Term 16/17

The final exam will take place Thu, April 6, 2017, 8:00 - 11:00 Uhr, OHP5 - [Chemie II]. Be there at 08:00 at the latest.

Getting the Exam Results

You can take a look at your results and check what you did right or wrong on Mon, April 10, 2017, 16:00 - 17:00 in LMS2 - Ü1.

What's next: From Java to C

Depending on what degree you pursue and where you are in your studies, it may very well be that you will encounter C in one of the classes you take in the next semester, for example Inf-BSKS: Betriebs- und Kommunikationssysteme.

Like Java, C is a vastly popular programming language; the aforementioned TIOBE index has ranked C as number 1 or 2 since 1987. C predates Java, and much of Java is inspired by C. C is not object-oriented, which is one reason why we don't use it in this class. However, C does have some nice features that Java does not have, such as direct access to memory addresses via pointers and pointer arithmetic. C programs are not interpreted but compiled into machine code that can be executed immediately, and programs written in C are typically quite efficient. For these reasons, C is particularly suited for "system level" programming, e.g., for operating systems or network controllers.

Conceptually, if you know how to program in an imperative language such as Java, it should not be too difficult to program in C as well. And remember, the programming class is not so much about learning a particular programming language but more about general programming principles. As of this writing, it is planned that there will be a brief introduction to C at the beginning of the aforementioned Inf-BSKS class. However, if you don't feel very confident about learning a new language on the side when the semester starts, it might be a good idea to invest a bit of time beforehand. In particular, you should try to understand the concepts of pointers, memory allocation/deallocation, structures and arrays in C. Here are some pointers to help you with the transition.

In addition to these self-study resources, the CAU Rechenzentrum also regularly offers the course Programmieren in C for members of the CAU including students. As of this writing, the next course will be offered Feb. 21-23, 2017. To participate, you must register in advance here. Registration is free, but the number of places is limited (first come, first served).