3 ms·
Did a micro-architecture directed-study in highschool covering the MIPS architecture, MIPS assembly execution, implementation of many fundamental components suc
by knappador 13y ago
Did a micro-architecture directed-study in highschool covering the MIPS architecture, MIPS assembly execution, implementation of many fundamental components such as latches, MUX's, ALU's etc, pipelines, caches, and many other topics of how machines execute programs.
To this day, I wind up drilling through several layers of abstraction and run-times naturally simply by having intuition that there is no other way for data to get from point A to point B without it being expressed in registers, atomic instructions, and abstractions that can be built on top of them. I use it to understand theoretical explanations of Turing machines, automatons, fastest implementations of algorithms, buffer overflow exploits, language implementations, data models, OS's, threads, processes, memory addressing, intrinsics, tail-recursion optimizations, JIT's, GC's, objects, C++ vtables...it goes on. Probably anything I will ever study always seems capable of mapping back to a problem space where Jump-and-load has to exist and cache coherency completely breaks down when playing with threads that compete for writes without locks.
The course was entirely optional. I was done about half-way through the semester and continued reading the course textbook until I had at least brushed across every part of it. Compared to other subjects of fundamental happenings, such as boot loaders in Linux, studying micro-architecture completely blows open the doors to your long-term capability to problem solve in any space in computing without the slightest question of what happens in the end.
In programming communities, as the original knowledge becomes boiled down into maxims and the maxims get repeated without the original discussion, people start parroting the whole argument against early-optimization or complaining about how scripting languages have no type-safety or how impure functions have side-effects and don't have reliable return values. It's very convenient to build your knowledge on the fulcrum of every community teeter-totter, the sheet-metal of every bike-shed, the fundamental logic from which all abstractions are born and all abstractions can be decomposed. Micro-architecture is the axiom space of programming. If you understand micro-architecture, it will give you a path of understanding into anything you will ever encounter in programming.
I had studied a lot of anecdotal micro-architecture when following the AMD Intel competitive race when it was at its hottest and reading tons of articles on overclocking and pondering how north-bridges and south-bridges might work, but taking the course basically paved the way for everything else I've done in computing since, much more-so than the C++ intro and OOP classes I took. Languages seem to have no foundation without some micro-architecture experience. You think that there might be some magical way to do X that you simply can't see through the abstractions. After studying micro-architecture, the magic is gone. Everything magic after that is how you abstract those ideas on top of each other.
- japhyr 13y agoThis doesn't sound like a typical high school class. Were you at a specialized high school? Can you say a little more about the class itself?
- knappador 13y agoIt was at a magnet school, as were the C++ and OOP classes. The class was self-paced. I was the only student. We only had about fifteen three-hour lectures before the prof basically said, "and that's all I got." Book was about 1k pages. Drained it. Totally forgot the title, but it was definitely a university text on MIPS and microarch. There was a class in OS's, data-structures, and probably some others that I could have taken instead. I had long been trading AMD and other tech stocks and naturally had a huge preference for anything hardware. Data Structures would have gotten me closer to writing meaningful programs faster. It's not clear that had I focused more on high-level programming, especially with scripting languages, that I would have had the willingness to approach lower-level tools and programming languages over the years. My time at the helm of scripting languages has made it very efficient to tool around with various highly abstract constructions in OOP, API writing, and also making money. My ongoing trip back into the low-level these days is what gets me excited. For the record, I highly recommend magnet schools. I highly recommend supporting increased education spending, founding companies that focus on better value for education, and especially projects like MOOC's that can offer more selection while bringing down geographic barriers. Offering only Fordist institutions from last century is inexcusable.
- japhyr 13y ago>> founding companies that focus on better value for education What companies do you see doing this? I see so many areas ripe for improvement in education. But most efforts I see in education that are affected by a profit motive seem to be taken over by that profit motive. It seems to me that if you really want to make education better for all students, you have to go down the non-profit road.