This is by far the most extensive part of my review. My plan was to make two separate posts, but I realized I couldn’t talk about the subjects without talking about the teachers.
There was an extensive discussion with the fourth year students about what could be changed in the faculty. There were many interesting ideas, such as replacing C with Python or Alice in the basic programming course and replacing the x86 assembler course with a more general course that would allow students to program on pretty much any platform. A more radical proposed approach was to put the C in a separate course, taught after the computer architecture course.
I finally got to presenting my experience in the faculty. For those who might read this later on, I must say I have a 5 years degree. Nowadays, students only spend 4 years in the faculty and the curriculum has changed a little. In the end I will talk about the new subjects, but let’s start with the old stuff.
The first year was full of non-technical subjects. Math, Physics, Culture & Civilisation or Sport were all useless courses meant to quickly go in the history’s recycle bin.
The two most important courses were Computer Programming (with E. Kalisz) and Data Structures and Algorithms (with F. Moraru). Both subjects were taught in C and unfortunately the emphasis was on the language’s capabilities rather than the actual principles. My opinion is that the choice of the language was correct, as C allows the students to familiarize themselves with curly-brackets languages as well as presenting them (the hard way) with some notions on parameter passing. Some might argue that learning C pointers just to illustrate some of the many parameter-passing techniques is just too much, but I disagree. Once you understood pointers, other similar structures will be much easier to grasp.
The second year was pretty much like the first one. 17 courses in all, with lots of electronics and little computer science. Again, I will not go in details about most of the subjects. They’re a necessary evil in my opinion, but they shouldn’t distract a student from learning as much as he can from books or tutorials on the internet.
The two programming courses were PLAS (Assembler language programming) and OOP (Object Oriented Programming). PLAS (with Prof. Lungu) was pretty much a review of x86 assembler commands. Again, too much focus on the language itself and too little about the principles of computer architectures and assembler programming. As one TA put it:
After this course, students should be able to program pretty much any device, from an ARM to an x86.
OOP is the most extensively discussed course in the whole faculty. It’s importance is beyond discussion, but the language chosen to illustrate the concepts is again at the center stage of the fight. The teacher (Prof. Moraru again) chose Java many, many years ago. Microsoft technology fans argue that .NET should be used instead, while other want a comparison between the two or C++. What I would have liked to see is a specially designed, all-object, no thrills language that would provide little more that OOP-specific properties (inheritance, polymorphism, etc.). If that was impossible, I would have preferred C++, because it offers some features abandoned in high-level languages.
This was the first year when I felt I was at the right faculty. 🙂 We had courses like Algorithms Analysis (AA), Computer Architecture, Computer Graphics, Data Transmissions, Software engineering or Communication Protocols, that reopened our taste for the faculty.
The AA course, with prof. Cristian Giumale, should have been done in the first year, not in the third. It talked in a not-so-easy-to-understand way about P/NP problems, the O, o and omega functions and so on.
The software engineering course was the first opening on the industry we had from the moment we entered the faculty. It talked about software development cycles, testing and design patters. This course, as well as the Protocols course were taught by TA’s only 3 or 4 years older than us, which allowed for easier interaction. Unfortunately, the Protocols course is misplaced, it should be taught AFTER the Networking course.
The Computer Graphics (D. Zaharia) and Data Transmissions (can’t remember the teacher’s name) could/should have been some great courses. Unfortunately, they were little more than history lessons. The same cannot be said about the Computer Architecture course (taught by prof. A. Petrescu, the father of most Romanian compuers in the 1970s and 1980s). This one started with the oldest computers but continued with the most recent technologies. Too bad the TA’s (the 4 Popescu as they were known) were not anywhere near prof. Petrescu’s enthusiasm and knowledge.
This year was divided in 2 very different semsters – in the first one there were more CS subjects, while the second represented the beginning of the specialization.
In the fall semester we had to pass through Operating Systems, Networking, Microprocessors and Database. The Operating Systems (with D. Zaharia) and the Microprocessors (with N. Ţăpuş) courses were yet again history lessons. Fortunately for us, the OS lab was excellent – taught by Cristina Cărbunaru after labs written by Răzvan Deaconescu.
The Networking (R. Rughiniş) and Computer Structure (E. Sluşanschi) courses were much more updated, as they were taught by younger teachers. Both had their problems though – Rughini? was much too concerned with cheating and Slu?anschi too focused on the top 500 supercomputers list.
The Database course was quite interesting (with. F. Rădulescu), but the lab sucked. A special mention should be given to Management – the only non-technical course in the faculty to be taught seriously AND in a way that was easy to understand for geeks.
In the second semester we met the famous subject that make this faculty such a feared one: Compilers (V. Palanciuc) and Operating System Design (O. Purdilă). Unfortunately, both teachers had serious problems with pedagogy and those problems shadowed their high technical skills. The labs were very interesting and the homeworks much easier than in previous years.
Other courses were Database Design (much less interesting with prof. M. Petrescu), Parallel Architectures (an introduction to OpenMP and MPI with prof. N. Ţăpuş) and Functional Programming with C. Giumale. The latter turned out to be like an Ali Baba’s cave – a totally new approach to programming, something different from what we knew before. Unfortunately, it was also very difficult to grasp, despite the teachers best efforts.
The final semester was, as expected, the easiest one. We had 2 subjects with prof. Valentin Cristea and a Distributed Systems course (which turned out to be more like a J2EE course) with Corina Stratan.
Most of us were pleasantly surprised by the attitude prof. Cristea had towards the courses. From the older student we found out that he was pretty much uninterested and distant with the students. This year there was a whole different story. We felt that he was extremely motivated in trying to send us the maximum of knowledge. Perhaps all the changes in the curriculum actually managed to get the teachers a little more interested? Hope so…
The most notable new entry is USO – Operating Systems Use. It teaches students on how to use a *NIX system: how to compile a program, how to secure the system, what’s a process, a thread, a I/O device, etc. The teachers are the same as in the Networking course.
Another novelty in the 4 years system is the Information Technology specialization. The way I see it, it’s just another way to squeeze even more students in an already overcrowded place.
I also noticed that the last year of study is different – you can choose subjects from other specialization branches as well as from a common pool. This is a good thing, as it allows for more choices from the students.
As a conclusion, I might say that the faculty actually begun for me in the third year. Even then, there were few subjects where both the lectures and the labs were good. Most of the time, only one of them was well-made.