I'm no coder... but I felt the need to understand what a computer really is, and there's only one way to do that at a gut level ie. "touching" the hardware directly - no abstraction. In my first year at university we hand-compiled ASM to machine code and typed it into a hex pad connected to a Z80 processor, but I was overwhelmed by everything and didn't really understand what I was doing. My later hardware programming was for fun, and at my own pace. If I was advising a student wanting hardware programming experience today there are many options to get that gut understanding. The options I can suggest are: * playing with FreeDOS and DJGPP with inline ASM and learning how to interface directly to hardware. This is probably preferable to other options because it can be done on a "real" computer. I actually made my own very simple "windowing" environment back in the day. * playing with Arduino programming, perhaps directly in ASM, and interfacing with different peripherals/hardware. * building a computer from scratch. There's a project from the sixties called the "paperclip computer"... this design could use updating for more modern electronic components, and perhaps handle some extra features. The bare basics of computing hasn't changed since WWII... it's just about making binary switching faster/smaller, and hooking binary logic to more interesting peripherals. I've even seen a binary adder implemented using wooden switches and marbles on YouTube(!)
I've also thought that rather than teaching beginning programmers python or javascript, a better intro would be to get close to the hardware. Maybe that's just my own stupid idea but what originally fascinated me about computers was the really low level stuff- assembly code (or even shellcode), how to build logic gates and circuits out of transistors, and how operating systems work, and how to control things at the most fundamental level. Wanting to understand these secrets was what led me into programming, not wanting to write a basic "app."
I think the best intro to programming book I've personally seen is "Hacking: The Art of Exploitation." It takes you through writing a simple C program, and helps you dig into every facet of it. Basically, you wind up writing buffer overflow exploits of increasing complexity (against your own program), which teaches you more about how a computer works at a really low level than you could get out of anything besides actually building your own hardware.
Yeah, perhaps close-to-the-hardware is good... or perhaps a very high level and very low level perspective that meets in the middle? I guess different students have different things they'd want to know.
(Score: 2) by Pav on Sunday November 09 2014, @02:02PM
I'm no coder... but I felt the need to understand what a computer really is, and there's only one way to do that at a gut level ie. "touching" the hardware directly - no abstraction. In my first year at university we hand-compiled ASM to machine code and typed it into a hex pad connected to a Z80 processor, but I was overwhelmed by everything and didn't really understand what I was doing. My later hardware programming was for fun, and at my own pace. If I was advising a student wanting hardware programming experience today there are many options to get that gut understanding. The options I can suggest are:
* playing with FreeDOS and DJGPP with inline ASM and learning how to interface directly to hardware. This is probably preferable to other options because it can be done on a "real" computer. I actually made my own very simple "windowing" environment back in the day.
* playing with Arduino programming, perhaps directly in ASM, and interfacing with different peripherals/hardware.
* building a computer from scratch. There's a project from the sixties called the "paperclip computer"... this design could use updating for more modern electronic components, and perhaps handle some extra features. The bare basics of computing hasn't changed since WWII... it's just about making binary switching faster/smaller, and hooking binary logic to more interesting peripherals. I've even seen a binary adder implemented using wooden switches and marbles on YouTube(!)
(Score: 1) by novak on Sunday November 09 2014, @08:48PM
I've also thought that rather than teaching beginning programmers python or javascript, a better intro would be to get close to the hardware. Maybe that's just my own stupid idea but what originally fascinated me about computers was the really low level stuff- assembly code (or even shellcode), how to build logic gates and circuits out of transistors, and how operating systems work, and how to control things at the most fundamental level. Wanting to understand these secrets was what led me into programming, not wanting to write a basic "app."
I think the best intro to programming book I've personally seen is "Hacking: The Art of Exploitation." It takes you through writing a simple C program, and helps you dig into every facet of it. Basically, you wind up writing buffer overflow exploits of increasing complexity (against your own program), which teaches you more about how a computer works at a really low level than you could get out of anything besides actually building your own hardware.
novak
(Score: 2) by Pav on Tuesday November 11 2014, @11:09PM
Yeah, perhaps close-to-the-hardware is good... or perhaps a very high level and very low level perspective that meets in the middle? I guess different students have different things they'd want to know.