7 ms·
I cannot agree more. I started when a computer did not have an OS, let alone 1.000 applications. You got dropped right into the interpreter. There was not alre
by YouKnowBetter 8y ago
I cannot agree more. I started when a computer did not have an OS, let alone 1.000 applications.
You got dropped right into the interpreter. There was not already a GB of OS loaded that you had a hard time to learn. All the code that was there was what you wrote (copied) yourself.
The processor & interpreter was about as fast as you could think, so it was easy to follow and step though (mentally). Reversing to assembly was the logical next step and since the programs where small, it was easy to learn & memorize.
After years of coding yourself, you'd stumble on the first OS, which consisted of the most rudimentary libraries that one could basically read & remember.
Years later still, the first rudimentary networking picked up. Slow and not business critical so again easy to experiment with. By the time I connected the first commercial network to "the internet" downtime of email for less than 24 hours was not even noticed.
I do not envy the kids who nowadays stand 0 change to ever learn the complete stack of code running on any modern device. From what I see, they all are "stuck" on top of a GUI with only the slightest idea of what happens between their mouse and the actual hardware (and even that is often not hardware anymore).
- ur-whale 8y ago> From what I see, they all are "stuck" on top of a GUI with only the slightest idea of what happens between their mouse and the actual hardware (and even that is often not hardware anymore) I tend to agree with the feeling, but, on the other hand, only the really worthy will chose to dig in and really understand how a computer works. Separating the wheat from the chaff.
- 3rdAccount 8y agoI haven't read it yet, but I think Nand2Tetris was meant to address this. Petzold's CODE is also really good going from logic gates to microprocessors to assembly language. I still wish you could buy something like a Pi board that has just an interpreter and compiler on it as well as a textbook and you implement a simple version of a file system, text utilities, task manager...etc.
- mtreis86 8y agoCheck out Interim, http://dump.mntmn.com/interim-paper/ http://dump.mntmn.com/interim-paper/
- 52-6F-62 8y agoRe: Nand2tetris I was going to reference the same thing. Particularly the text Elements of Computing Systems. https://mitpress.mit.edu/books/elements-computing-systems https://mitpress.mit.edu/books/elements-computing-systems
- exikyut 8y agoNot sure what to make of it[s downloadability], but I found a PDF: https://archive.org/details/TheElementsOfComputingSystems_201408 https://archive.org/details/TheElementsOfComputingSystems_20...
- squarefoot 8y agoThis seems a nice and open platform to experiment with; strictly speaking not what you are looking for but can be tailored to the task: https://wiki.odroid.com/odroid_go/odroid_go https://wiki.odroid.com/odroid_go/odroid_go To me it also looks like a great gift for tech oriented kids. Many Espressif MCU boards come with Lua already installed, and some other boards are supported by eLua. https://github.com/whitecatboard/Lua-RTOS-ESP32 https://github.com/whitecatboard/Lua-RTOS-ESP32 http://www.eluaproject.net/ http://www.eluaproject.net/
- zenojevski 8y agoIt might not exactly be the same as operating real hardware, but I have tried to address this by creating a small VM that is simple to use, understand, and modify[1]. [1] https://latenightsnack.io https://latenightsnack.io
- pjc50 8y agoOne of the original concepts for the Pi was an Atmel-based system that booted into BASIC. Unfortunately these days you can have simplicity or you can have a web browser but not both. And without a web browser a computer feels extremely limited.
- codeulike 8y agoI do not envy the kids who nowadays stand 0 change to ever learn the complete stack of code running on any modern device. I also started back when things were simple (BBC B with interpreted BASIC, no GUI). Having transitioned to modern development, I think the bare bones system was good for self-learning. But for the last 2 decades I've worked on systems where many layers were hidden from me (Windows, RDBMS, Salesforce etc) and most of the time it doesn't matter. I very rarely need to learn anything about low levels Windows stuff. With SQL Server you need to learn a bit about query plans and how to influence them, and where to put indexes. But mostly, you can ignore lower layers and just let them get on with what they do. And thats the whole point isn't it? One huge exception to this is the modern web stack, if you think of the browser as the bare metal, with HTML and JS and CSS as some sort of machine code. On top of that you have Content Management systems and PHP and so so many JS frameworks. And whatever you do, soon enough you need to get down to the HTML/JS/CSS level. So thats the modern equivalent to our experience of the old days - no matter how many frameworks and CMSs we throw at the web, everyone still has to know their HTML/JS/CSS to get anywhere. Perhaps one day we will escape from that and people will reminisce about angle brackets and escaping ampersands.
- Nursie 8y ago> most of the time it doesn't matter. It's true. However to have an understanding of things from top to bottom is definitely a benefit. People get silo'd in their various layers and lack comprehension of much that's going on below (or above) them. It can make you a more rounded developer, to have a good idea of the whole stack, even if it's not always in-depth and some of the mental models used aren't strictly true.
- codeulike 8y agoIts a benefit, but whats the cost/benefit of the time it takes to learn that, vs maybe learning something else?
- Nursie 8y agoAs someone who's coded everything from web front ends to embedded systems with no OS and manual memory partitioning, via mainframes, network management tools and all sorts of other things, I'd say the benefit is pretty high! Someone needs to know how it all works, someone needs to build the kernels, the low-level libraries, the compilers, network protocols server programs etc etc. You can certainly have a great career without them, I wouldn't dispute that.
- linkmotif 8y agoYeah you’ll never step in the same water twice, but I was born in 85 and I don’t miss 90s hardware much, not even nostalgically. Do you miss 70s hardware? I mean in terms of what you can practically get out of it, not how nice the keys felt. Yeah I missed seeing and learning from a lot of advancement unfold, but progress has been massive and I do enjoy my computer-video-phone global communication device. What an amazing thing to have seen in a lifetime. As a kid I did not expect there to be videophones. You’re right, my generation definitely missed a lot but I hope some day to work through NAND2Tetris. Furthermore, also I didn’t study CS, but a good CS/EE program would really take you through first steps. No matter what, you can’t keep a book from a scholar. There appear to be many resources to learn this stuff if one has the opportunity. Combine NAND2Tetris with the x86-64 assembly on Ubuntu book I saw here yesterday and you should be golden, right?
- wiz21c 8y agoYeah, but the problem is that it takes time. Learning assembly takes time ('cos you need to understand the whole system at the level of machine code : bios calls, memory protections, interrupts, DMA, graphics cards, sound card, I/O,...). Then you have to go up a level into the OS stuff (hello file systems, processes, threading, paging). Then once you get that, you have to learn how a (extreme example) Java VM connects to all of that (welcome GC, optimization, compiler, byte code). then, ah finally, something one can easily understand : Java code :-) (and don't even start me on WS/rest over HTTS over SSL over IP). Learning stack by stack, one generation at a time, let us, old gray beards, digest the whole thing. But now, starting from scratch ? Not even with a 10 feet pole.
- linkmotif 8y agoYeah it’s not the same but it’s amazing starting from scratch at a new baseline. Every generation of humans has had to do that with everything. I missed out on all the stuff you mentioned and really want to learn it, but I am grateful that I get to use all this stuff that’s developed. Instead of spending time learning the above listed fundamentals, which would have been revelatory in its own way, I have the opportunity to use Java on Kubernetes to build and operate globally whatever Internet software dream comes to mind. It’s not the end all, and I am crippled by lacking fundamentals, but it’s so much more than before and I am grateful to have the opportunity to have these tools.
- jacquesm 8y ago> There was not already a GB of OS loaded that you had a hard time to learn. All the code that was there was what you wrote (copied) yourself. Typically you had 16K of ROM BASIC, if you were really lucky on a half decent machine (BBC or so) you would have something more akin to todays BIOS in another 16K. So there was some code there, just not easily accessible or replaceable.
- eesmith 8y agoFor a while I thought the same. Then I starting meeting more people from the generation before me, who complained about how the kids nowadays (meaning me and my generation) didn't really know how the machines worked. The kids only wrote code, but since they didn't build and maintain the hardware, they didn't grok the full stack. And to be fair, they are right. There was a level of UART programming and video logic control that I never understood, because they required knowledge of analog circuitry that was beyond me. As I grew older, I realize that every generation has people who that about the next one. Sure, car engines in my g'grandfather's day were so simple that anyone could take one apart and really learn how it works. But I prefer the benefits of modern engines. BTW, the first real OSes were in the 1960s. I do not think you started with computers in the 1950s. And how is it that "all the code that was there was what you wrote (copied) yourself" when you were "dropped right into the interpreter"? - who wrote the code for the interpreter?