Last week, I was approached by several students, asking which elective courses I would be offering in the upcoming spring term semester. This was unusually early, bearing in mind that there are still 5 weeks to go until the next semester starts, which will be by midst of March. In the past years, the first student inquiries came in only about two weeks prior to that.
So, over the weekend, I have updated the official course web pages and put the new versions online. I have added a couple of things, and I have also redesigned and extended some parts of the online entry test. For those of you who are interested, here is the link:
As of now, there are currently ten students who have made it through the first stage of the test. It is still too early to say more since the first part is rather easy and is primarily aimed to get potential participants into the right mood for what is ahead (and because it is just more fun to do it this way). The second part will consist of a series of various small and more serious C programming tasks. That part is for me to get an impression of how familiar each candidate really is with the basics of C programming.
I will keep you posted
Edit on 03/04/2019: I was asked to add links to the current project pages here for easier reference, which I gladly do
Your course text could actually say 'Getting the best performance you can out of the hardware you've got, using C and assembly' or alternatively 'Embedded software engineering'.
Yes, that is great, thanks for the suggestion!
Is it ok for you if I add that to the course web page?
So far, I have deliberately refrained from using the term "software engineering", to avoid political discussions with academic colleagues who define software engineering as the art of writing portable and maintainable code which is easy to read and easy to understand.
In a certain sense, this course is about the opposite. Yes, it is definitely about efficient algorithms and data structures. But it is also about hacking (programming), and the pure joy of hacking: using every dirty (low level) trick there is to make your code more efficient on a specific target, usually resulting in crazily obfuscated (and, of course, undocumented) code, which nobody will understand any more a year later. The very opposite of software engineering.
I think, in order to really understand programming, a good programmer should be aware of both worlds and be able to flexibly move between them. I am rather open minded here, but for me good software engineering and good programming is about knowing and understanding both worlds. So in my opinion, "embedded software engineering" is a very nice synonym for "hacking"
When, in their first and second semester, the students are introduced to the basics of (C and C++) programming, we try to teach them how to write "good" code: use well-structured code, use modularization, pass information by means of function parameters, do not use global variables, do not use goto, …
Now, when it comes to programming the Vectrex, all those good intentions are thrown overboard and I tell them to do the opposite: do all the stuff you are not supposed to do! Use void functions and use global variables to store/pass information (no overhead for pushing and pulling args to/from the stack), use function inlining, use loop unrolling instead of nicely condensed for/while statements, do not use high level array indexing, use pointers to directly operate on the array elements instead, …
Essentially, this is mimicking assembly language style programming in C. Also, do not leave all the thinking to your C compiler, do not rely on C compiler optimization only.
Of course I weep every time people jump from assembly to C and bypass Forth, because you miss out on the essential tradeoffs between performance and implementation speed, but then, I'm also happy that you can justifiably say Forth is just as popular today as it was 50 years ago...
It is not necessarily the definition used here at our university. It is just that I have met lots of colleagues all over the world who seem to define it that way, and who often seem to do software engineering just for the sake of software engineering: applying certain techniques just because they are there and defined to be state-of-the-art, and not because they are best suited to the task at hand.
Of course, software engineering with all its aspects is important, and it is important to know stuff like design patterns etc. But I find it similar to certain discussions about object oriented programming: people code in an object oriented way, regardless of whether the task really calls for an object oriented approach or can much more elegantly be solved using a non object oriented software design. Of course this is a matter of personal style and of personal opinion, and programmers tend to be highly individualistic, so each to their own. I am rather pragmatic, and I rate pragmatism and elegant solutions over programming ideology.
As for using C in this course: It was just the natural choice, because learning C (and C++) is part of the curriculum in the first semesters. If I had to start from scratch with a programming language which is completely new to the students, then we wouldn’t get very far. Hell, it is already hard enough to do a vectrex project with just 180 hours at hand ;-)
Especially when considering that with 99% probability the students have never met the Vectrex before.
But yes, it would be fun to try this with a different programming language one day. Somewhere at the back of my mind I am also playing around with the idea of having a similar programming contest, writing a retro game for an Atari XL or Commodore 64 just using BASIC. Or who gets the best out of a 1K ZX81? So many ideas, so little time…
Of the 13 students who had made their way through the online entry test, 11 are currently actively participating in the programming puzzles I sent them as subsequent preparatory tasks and are trying to solve them. Haven't heard again from the other two for a while.
The new semester is rapidly approaching, and the first meeting of the course will be on March 18th. As in the past years, I expect some more students to show up there (in addition to those active 11 ones), who have not cared to check the course web page before. It remains to be seen, how many will stay in the course.
I am already curious, and I am looking forward to that event.
Not much of an update, but some things I just wanted to say.
Teaching the Vectrex programming class is great fun. Even more so because of the feedback and the great support from the Vectrex community. There have been many people "from outside" who have helped and contributed in the past, and I am very grateful for that.
Right now, Malban is going out of his way to help fixing some bugs in the gcc6809 C compiler. Whenever we have been in touch and were brainstorming about some useful new Vide feature, it was usually there the next day. Basically he always goes "tell me what you need for the course, and I'll do it". And that is exceptionally great. I have thanked him many times before, but it surely doesn't hurt to repeat it here once more: thanks!
So, if Vectorblade development is currently delayed, please feel free to put all the blame on me
There are others as well who continually help. This is not the Oscar's ceremony, and I can't mention them all, so apologies if you do not explicitly find your name here. There are always beta testers providing detailed feedback, the Vectrex Wiki is growing and including our projects, two of our past games have been selected and played in the last Vector War event, and there are even people donating equipment and motivational samples to the course...
The vectrex community is great! Many thanks to all who I have been in touch with the course in whatever way in the past and to all who follow the classes.
The first meeting of the 2019 course will be tomorrow. I will keep you posted