Why do I have trouble with passing this subject?

Why do I have trouble with passing this subject? #

Every year a significant percentage of the students have trouble with passing this subject. There are various causes of this phenomena. Below we put a short list of those we observe the most frequently.

1. Lack of programming proficiency #

The laboratories require writing a working computer program in a relatively short amount of time. Meanwhile, every year we see that many students have trouble with the absolute basics of the C programming language. Consequently, most of the time is wasted by looking for trivial mistakes in one’s code or frantically searching the internet for answers to basic questions.

It is worth to remember that programming is mostly a practical skill. Mere technical knowledge is insufficient, it is also needed to practice writing programs. On the other hand, we observe a significant lack of theoretical knowledge - e.g. in understanding the C language’s memory model.

To pass this subject it is necessary to not only pass “Programming” 1 & 2 with a good mark, but also to independently polish one’s programming skills. It is wrong to think about it in a ,,cram, pass, forget’’ fashion, since these are the absolute basics that we later build upon. A poor mark from those subjects, or worse, repeating them, should be a strong signal that we have to put in a lot more independent work.

2. Lack of computer skills #

We regret to observe, that many students have little computer skills. Presumably, it may be tied to the growing role of smartphones as an everyday device of choice. As a result, simple and repetitive laboratory tasks (handling files, writing code, compilation, running the program) take much more time than they should. It is additionally painful that our laboratory computers are not the fastest.

A computer is a primary tool of a programmer. The ability to properly set up your working tool and use it is absolutely fundamental in every field of work. While studying computer science, it is worth to invest additional time on acquiring those skills. It is a topic partially covered by the subject “Unix fundamentals”, however, as always, the subject alone is not enough to gather significant proficiency. It is especially beneficial to spend time on correctly configuring one’s development environment on the laboratory computer (it can be done in the room no. 311).

3. Too little time spent on learning #

“Operating Systems” is a particularly demanding subject - but incredibly important, constituting the basics of other topics. Studying assumes that students, besides the time spent during class, also learn on their own at home.

It is impossible to give a concrete number of hours - everyone learns at their own pace, depending on the predispositions and previous experience. In order to prepare for graded laboratories, for a student with a significant programming experience and no issues in digesting the lecture, it may be sufficient to read the tutorial and solve one of the example task (~2-3 hours of work). On the other hand, a person having issues with the basics (points 1-2) has to spend significantly more time for preparation and solve more tasks. During the class, we often observe how students are only just familiarising themselves with the tutorial - the result is then predictable.

During one of the past course editions, one student took it upon himself to track the time he spent preparing for the lab and posted his results on the website. Since this student passed the course, these figures can be considered a useful reference.

4. Learning improperly and overusing AI #

Apart from the amount of time spent for learning, how one uses this time is equally important. In general, the proper way of preparing for the laboratories is independent solving of as many tasks as possible. Reading the lecture and the tutorial is important, but only as a prerequisite to later problem solving - to know where to come back, when we have a problem.

In particular, it is incorrect to think that it is sufficient to go over our colleagues’ solutions or ones that were generated with AI. This way we do not build proficiency, but a mere false sense of understanding the subject matter. It is especially AI generated code that teaches bad practices, those tools are unfortunately still imperfect.

5. Improper approach to the subject #

Many students believe, that the subject is too difficult, unnecessary or useless in real life and professional work. In turn, they are trying to pass the subject through “the path of least resistance”, then fall even further behind and finally fail.

While it is true, that the subject is difficult, it is at the same time fundamental if we desire to pursue computer science. The topics which are presented on the subject, are still the absolute basics without which we cannot proceed further. The knowledge and skills obtained on OPS are truly useful (downright essential) in many practical use cases.

Obviously, if someone’s goal is the so called vibe-coding e.g. websites then OPS is not useful for them. It is important to note, that in such a situation an overwhelming majority of subjects from the curriculum is also not useful. If we plan such a career path, presumably, a better move would be dropping out of university and starting a dream job.

6. Different predispositions #

If after avoiding the above traps getting good results is still troublesome, perhaps we may have different predispositions. In practice, if we cannot find satisfaction in programming, studying (and then work) become only a source of frustration and a cause of burnout. To achieve (and maintain) sufficient proficiency it is necessary to spend sufficient amount of (also free) time - and to be able to do that, one has to be doing it with pleasure.

In the end, it is worth to remember that there are many other very interesting development paths, both scientific and professional. Perhaps it may be worth exploring them?