

Ask HN: Smartest thing you've ever done? - vinchuco


======
knappador
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
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?

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

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

------
bloodorange
Marrying the right person.

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

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

------
thecodemonkey
Starting to tinker with programming at a very young age.

~~~
accomplice
Moved to San Francisco and spent time with people smarter than myself.

------
unimpressive
Installed Linux.

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

------
toddrew
Quitting the military to make significantly less money doing something I
loved.

------
centdev
Balancing work and personal life/family.

------
smalleat
Dropped out of college.

