Software Development 1: My impressions
Published on January 20, 2010 under the tag ugent
Why this post
This semester at UGent, the university I attend, we received a first course on Software Development. I had the feeling a lot of students didn’t like this course, so I decided to my thoughts on the matter here.
Software Development I
This course follows our two Programming courses, so all students are already more than familiar with the basic concepts of programming – the second programming course included writing a non-trivial GUI application. I put my solution on GitHub (after the course was over).
The thing is, these two courses are taught in Java, and Software Development I is taught in C/C++. And while you can translate most of these ideas from Java to all other programming languages1, going from Java to C is not easy.
So, what I first thought would be a course on design patterns and best practices (I had this idea because of the name “Software Development 1” as opposed to “Programming 3”) turned out to be an introduction to C and C++.
First Java, then C
Although I am not a big fan of Java, I have come to appreciate the language, and I think it is, in fact, a very good “first language”. It is, however, not easy to go from Java to something like C. It is always harder to go more low-level, and many students were confused by pointers, the fact that pointers can be arrays, and all those typical C things.
I had already had a little bit of experience with C/C++ before starting the course (I wrote jvgs this summer) – which, once again, makes this post a little biased. But I thought the C part was pretty interesting (the exercises at least, the theory was rather boring, but well, you can’t have everything, I suppose). I mean, C is still used today, and to quote our Data Structures & Algorithms professor:
If you want, or need, something really fast – when all the constant factors do matter – you would write it in C, even in 2009.
This aside, I had the feeling a lot of people still weren’t very familiar with C when we started on the C++ part of the course.
Java and C, then C++
I know there is a lot of C++ bashing on the internet, and when I read these things I sometimes think I must be one of the 5 people on the world who appreciate C++. So my problem here is not with C++ – I just fail to see why it is taught.
Let me explain: I see C++ as an object-oriented superset of C. Students know the concept of object-orientation from Java, and they know about pointers and those things from the C lessons: I do not think C++ adds any more ideas.
As far as I can see, the only new thing we saw with C++ was templates, but we only used templates to write abstract data types – the primary use for Java generics. Admittedly, we did not see generics in our Java courses, but we could have.
We also had to write a project in C++. There has been a lot of bullshit talk and criticism about this project. I’m not going to repeat that (also because I don’t agree with most of it). You could work together with two people on the project – here is the solution by me and Javache (of course, this repository was not publicly accessible during the project). In the end we had about 2500 lines of code, including comments, which is not a lot – especially not when you’re with two. I also really appreciate the fact the tutors tried to come up with a project that is not “boring” – hey, it even included robots.
Summary, I think C++ should not be taught, and more attention should be spent on C, because:
- C++ does not add any general programming knowledge – ideas we can use when learning other languages.
- A lot of students didn’t know C well enough after the C part.
- It would be interesting to see a larger C project (now, we only had some rather basic C exercises).
- More time could be spent on C design and C best practices.
Well, that’s my thoughts on this course. All feedback and criticism is welcome, of course. I know the chance this would actually change approaches zero, but I thought I’d give my opinion on it anyway.
All other programming languages, as long as they’re object-oriented and imperative – or at least imperative.↩︎