

Where's your magic layer? - Macha
http://blog.webicity.info/2011/01/16/the-magic-layer/

======
phamilton
I'm a computer engineering student. As such I have a lot of classes with
electrical engineers on the one side, and computer science majors on the
other.

The EE kids like programming because it's a means to an end. It let's them
simulate whatever it is the are working on in a very effective manner. They
would never program for fun.

The CS kids like programming because it's a means to create. They enjoy the
end result, a game, a website, an algorithm. They thrive on abstraction
because it increases their productivity.

The computer engineers are just fascinated by everything. They often find
assembly as fascinating as Lisp. These are the students who don't believe in
magic layers, and will tinker their way lower and lower until they contemplate
over whether they should take a class on solid-state physics because CPU
architecture is relatively clear to them and they want to really understand
how transistors work.

It may be different at other schools, but this article seems to describe
computer engineers at their best.

------
dedward
I've often thought in similar terms... and I think everyone has a different
story here.

I used to write some simple software (we're talking some ASM and some BASIC
here, with some C and Pascal - no OOP or design patterns or fancy stuff.... I
was young, it was a while ago). At some point I took some digital electronics
course, and at some point during that course, when we moved from transistors
to discrete logic ICs to Intel 8080 trainer boards programmed in Octal -
something clicked. I got it. I couldn't necessarily go out and build you a CPU
- but I get it. Networking too.. I get it, down to the electronics, the
modulation, the analogic/digital circuitry. I get it enough to understand
what's on both sides.

So where's my magic? I may not understand the hellishly complex details in
anything past the 486, with all the pipelining and caching and whatnot, but I
get it enough to know what it's about. There's no magic - I know I could go
study (probably for a good long while) and understand it better.

So now there's no more magic (I never really felt there was, I knew I could
always pick up a book and figure it out) - but there is discovery. It's the
software patterns, the network protocols. It's complex systems and emergent
behaviour. It's the interface between humanity and computers. I get the
internet (and local networking, and network stacks) down to the bits - I love
it when I find a mysterious network behaviour that I can't seem to grok in my
head - because I know that either I'm being fed faulty information, or my
mental model is wrong (which means I might learn something - which is always
good). I love an especially frustrating problem.

As a generalist - a lot of that knowledge goes unused. I get how SSDs work
(I'm using one now) - I've had a decent career, and there are tons of avenues
I could take if I need a hobby.. because it's all interesting. But there's no
magic.

TL;DR: The only magic left is human behaviour.

------
cperciva
ICs. I understand down to the level of circuits built out of logic gates, and
I understand up to the level of transistors (well, to the extent that anyone
ever understands quantum mechanics); but the step from logic gates to layers
of doped silicon is magic as far as I'm concerned.

------
jtchang
This is a good way to describe a good computer science or engineering degree.

Can you describe what really happens when you visit a web page? How does a
flip flop fit into the grand scheme? Why does it matter?

As a generalist it is critical to understand as many different levels of
"magic" as possible. This lets you put into perspective just how important new
technologies like SSD hard drives or multicore processors will eventually
become.

