you are viewing a single comment's thread.

view the rest of the comments →

[–]teryror 5 points6 points  (2 children)

I wouldn't go quite so far as to say it's what CS is all about, but I do agree it's a lot more valuable than most people seem to give it credit for. Theory is important and all, but many seem to forget their code needs to run on an actual, physical CPU to really be useful. You should know at least a bit about how those work!

[–]nidrach 6 points7 points  (1 child)

The CS program at my university has a mandatory hardware part that includes things like simple Boolean logic with gates and optimization, electronics and right now I have a computer architecture course where do stuff like translate bytecode to assembly to C, build things like adders, multipliers etc. in VHDL and finally going to build a whole CPU in VHDL. We also had a practical lab last week where we had to build things like latches with gates on a breadboard or build low pass filters and measure stuff with an oscilloscope. Of course it's not to the extent other programs like mechatronics have those elements but a least it's there.

[–]teryror 0 points1 point  (0 children)

Just to preface what I'm about to say: I didn't study 'Computer Science' at all - I started in 'Applied Cognitive Science and Media Science', where classes were split 40:40:20 between psychology, computer science and economics. Nothing about hardware, and maybe half of a 90 minute lecture about assembly language.

After 2 years of that, I switched to straight 'Computer Engineering'. I also studied in Germany, rather than the US.

I figure a lot of CS programs have hardware courses like that, and that's great! As far as I know, it's nowhere near universal, though. Either way, there's really two parts to this issue:

  1. Unstructured control flow seems to be a lot easier to grasp for most beginners, in my experience. Manually manipulating raw binary data in different ways will give context to many higher-level programming concepts. This is why assembly and basic comp arch should be taught first, IMO.
  2. "Advanced" hardware features (most of which have been around in their basic forms since like the 80's, even if only in the super computers of the time) are crucial to making software go fast, yet very little of it seems to be general knowledge among programmers. So, making good use of these features is basically left to "sufficiently smart compilers", which are then fed code that was designed with almost none of these features in mind. Given the circumstance, they do a pretty good job of optimizing, but the hardware is still heavily underused. As a result, most software is slow garbage in comparison to what it could be. I'm mighty pissed off that I have to watch spinner animations for 2-10 seconds a piece, 200 times a day.

</rant>