Ask HN: Smartest thing you've ever done?

12 points by vinchuco ↗ HN

14 comments

[ 3.2 ms ] story [ 44.5 ms ] thread
Starting to tinker with programming at a very young age.
Moved to San Francisco and spent time with people smarter than myself.
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.

This 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?
It 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.

>> 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.

I went to PyCon this year and last year.

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.

Installed Linux.
Close 2nd for me. Freshman year down at the student union after getting totally sick of working with Codeblocks and MSVC++ on Windows for trying to make something meaningful in OGRE, installed Debian, got it working but wasn't making a lot of progress and blamed it on the distro, decided to go more hardcore and do Gentoo. There was a Linux gap somewhere when I wad going to install OpenBSD on a new machine before I got Ubuntu and was totally blow away by how fast the hardware support had come in such a short time. Nowadays I preach towards the "harder" distros like Arch because Ubuntu did tend to water down the whole configuration hacking experience and seemed to get in the way.
Quitting the military to make significantly less money doing something I loved.
It may sound silly, but the smartest thing I've ever done was: to start writing.

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.

Balancing work and personal life/family.