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.
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.
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.
I have taught high school math and science for about 15 years now. My father was a software engineer in the 70's and 80's, so I had played with programming all my life. When my father passed away a few years ago, I went through his computer and saw the programs he'd been working on for years, which would never see any actual use. I decided then and there to take my own programming more seriously, and try to do something more meaningful with it.
I was incredibly intimidated to go to a professional programming conference as a non-professional programmer. I couldn't believe how positive the experience was. The first year I went to PyCon I got a clear sense that I could do something meaningful. The second year I made all kinds of connections that I continue to build on, and I have a couple really meaningful projects started.
Short version: Going to PyCon helped me jump-start a second career, and makes me a much better teacher as well.
When I've finished my studies and I was working, I've realized I've could not write with an acceptable level. I mean, I knew my language, knew the words but I could not compose anything interesting. All stories, emails and other texts were equally difficult to read, full of grammar errors and many times I lost the argument points.
That's when I started a blog, and secretly to write everyday, until I improved to a level I've never imagined. My blog became so popular that open the professional world. With that I went to Europe and other countries.