views:

112

answers:

3

Hello, everyone.

I am a 2nd year student at the Portuguese Engineering Faculty at the University of Oporto. I am currently studying for a Joint Degree (5 yr undergrad + masters) in Informatics and Computer engineering (which is basically software engineering :P).

I think the course is great, and well structured, but I was in for a nasty surprise.

For a class called Computer Labs (link to the syllabus, english), we have to use obsolete software - Windows 98/MS-DOS (because of protected mode limitations in XP+). I think this has no room in 2010 - even if we don't take into account the fact we should be learning multiplatform programming! All of my lecturers have made sure the software/technologies they selected was 1. updated, 2. compatible with AT LEAST the big three OSs (Mac/Win/Lin), and now this.

My knowledge of this sort of programming is insuficcient to effectively think of alternatives, but we want to change this situation for coming students.

Can I get your opinion and some suggestions for alternatives we can discuss with our lecturers? Please take the syllabus into account.

Thank you for your time!

PS: Extra info on the class here (english)

+7  A: 

I looked at the syllabus and I think that this setup is appropriate for the goals of the class. The problem with more modern computers for a class on interfacing is that the operating system has become detached from the hardware. The HAL (hardware abstraction layer), Direct-X (graphics abstraction), and the modern toolkits for device driver development mean that interfacing to a modern Windows machine is (in my experience) more a task of understanding the security and framework requirements than it is learning what is involved in making code interact with electronic circuits. This is a course that sets the foundation for what you will learn when you get a job. It shouldn't be a course that teaches you what you will use on the job - in ten years no one will care if you had a school course interfacing to Windows Server 2010. But to add a robot control interface to the latest brain interfaced cell phone will still require an understanding of how code interacts with circuitry.

verisimilidude
Thank you for your feedback! Why should we be learning today with 20 year old tech? And why not something freely available for every platform? And also, instead of an exam we have to develop a project. Win98/DOS is near impossible to configure on a modern machine, so we, the students, can't work on our machines. I find the whole situation ridiculous.
Francisco P.
@Francisco, there is an emulator called DOSBOX which runs DOS very well. You could also try a VM for Win98, but that may install inside DOSBOX. Ask your professor about it--perhaps the course's department offers some software to help you off campus?
Kizaru
Almost none of the routines we develop work with DOSBOX/VMWare. The emulation is good, but not perfect. Confirmed by the lecturer himself. He only got the first three lab assignments to work, the third one with some hacking.
Francisco P.
Why should you be learning with 20 year old tech? you ask. Because modern interfacing is not done with computers you can program on. Tying into an IPad, a Droid, or interfacing the network controller to a stack of hard drives to create a SAN (to give a few examples of modern interfacing) is too expensive for a school lab. The programming is done on development computers and downloaded onto the hardware which is monitored with expensive dual ported memory devices that replace the target's memory. And DOS is still used for micro-computer special purpose devices.
verisimilidude
I understand. What I can't believe is that there are no Operating Systems which run on modern hardware with the same properties we want from Windows 98/MS-DOS, namely the lack of a "protected mode".
Francisco P.
However, for all the sticking up I am doing for your professors, if this was my course I would use single board x86 contollers running a low level Linux - no GUI, download across a network, monitor using a serial port. And for apps I would have you develop interfaces to scientific equipment, adding smarts to the machines that the biology, chemistry and geology departments probably already have.
verisimilidude
+2  A: 

Low level programming of this sort cannot be compatible with multiple platforms. By definition, this is platform specific.

From a "working at home" point of view, it gets worse: this is hardware specific.

In my undergraduate course, we did this work on an embedded system (specifically, a Freescale HCS12 microcontroller) rather than using a general purpose PC. It still generally means that you can't work from home - we were provided with out-of-hours access to the lab - but emulators for microcontrollers tend to be about emulating the hardware rather than just getting the majority of software to work.

In terms of the syllabus you linked, we covered almost exactly the same material, with the only differences being that we used CPU12/Motorola assembly language rather than IA32 and a different set of tools. You could suggest using a simpler processor (such as the HC11 or HCS12), but the main advantage is that people expect it to be simple and understand that they can't use it at home: your situation doesn't change, but it is easier to accept.

Zooba
Are there no OSs which don't have a "protected mode" and work on modern hardware?
Francisco P.
Protected mode is a feature of the Intel architecture (see vol 1 and 3A at http://www.intel.com/products/processor/manuals/). Without enabling it, you get "the execution environment of the Intel 8086 processor" [vol 3A, p747] which is not exactly modern hardware.
Zooba
Also, modern/IA32-based hardware comes with multiple (large) volumes of documentation - the IA32 instruction set reference is 1680 pages. Microcontrollers are far more accessible in that respect, and since you've only got a semester, less documentation is considerably better.
Zooba
I don't think I am making myself clear. A modern computer can't run Win98 properly, due to drivers, etc. What I am asking for is an OS which runs properly on a modern machine and is able to provide us with the features we want from Win98.
Francisco P.
Some variety of Linux may be your best bet - they tend not to break backwards compatibility so often. Whether you get the features you want depends on what features you want. The lack of device access protection is actually a security hole, so it is unlikely that you'll find a modern general purpose OS that allows it. Embedded operating systems are a different matter, so I'd still recommend moving from IA32 development to a microcontroller.
Zooba
+1  A: 

dos is still alive and well, actively used in ATM (bank teller machines) cash registers, gas pumps, and the like. Basically is one of the most widely used embedded operating systems. The tools and (used) books, web information, etc are still available, inexpensive, etc. A balance of just the right amount of system calls with the freedom to get at the hardware without the OS getting in the way. The windows 3.x based kernels (windows 3.x up to windows 98 or maybe me) also easily allow for direct access with minimal operating system interference. Linux, Windows nt based kernels (windows nt, 2000, xp, etc) do not have those features, are too high level in their drivers, too much operating system in the way. The connection from dos/win3x to the present windows is still there and the student can then understand and use the more advanced/complicated modern operating system.

Encouraging DOS, AmigaOS, pdp-11 assembler, 6502 assembler, and the like in the curriculum is a good thing for future generations not a bad thing. Perhaps call it hands on computer history if you like but it is important to get a well rounded education in software engineering. Students will get a better understanding of the C language for example when they see the platform it was developed on/from (pdp-11/lsi-11). pdp11 is probably one of the best first assembly languages to teach (or msp430) and x86 is clearly the last you would ever teach if ever. (well briefly touching on I/O mapped memory vs memory mapped memory is important, also segmented architectures and how they were used instead of mmus is important, perhaps taught along side some harvard and other now less popular architectures).

Behind the curtain knowledge is dropping off at an alarming rate in the software industry. To the point of being a crisis. Fixing that starts at the schools. You cannot learn it with linux or windows 7 or anything like that.

If you want to replace this class with something else then non-operating system (non-rtos) microcontroller work. msp430 or ARM are good platforms for teaching C interrupts, have good tools, are good instruction sets for teaching for the some assembly that is required. ARM being the most widely used processor today means the student would be immediately marketable for the devices using that platform (mp3 players, mobile phones, pretty much everything handheld). avr and arduino is not bad, covers the same c and interrupt thing, but is not a great instruction set for teaching.

dwelch