
The Apprentice Programmer - seubert
http://tobi.lutke.com/the-apprentice-programmer
======
dxbydt
I simply do not understand this anti-college anti-credentialling sentiment. I
am featured in the latest Hacker Monthly ( print version of HN). So they asked
me for a bio. I wrote something about how I learnt everything in college...am
not a hacker...and that you should go to grad school if you want to get better
at CS. So they edited out all of the pro-college stuff and just said this guy
is data scientist. You don't figure out Dirichlet allocation and principal
components and matrix regularization hacking away in your garage. This stuff
isn't going to occur in your mind out of the blue. Its fairly complicated and
even those of us who were systematically taught these things at school take
years to internalise it. Don't downplay education. You are missing out on a
treasure trove of knowledge humanity has collated over centuries, just to hack
away and reinvent the wheel by yourself...well, good luck with that.

~~~
ismarc
I'm of two minds of this. 1) I'm very much NOT anti-college/anti-
credentialing. 2) I don't see your average business application software
developer having any need for a degree in CS.

I believe the anti-college/anti-credentialing stance is primarily how people
are sold on degrees. People are told they will get better jobs and make more
money if they get one. However, no one really takes the time to tell them that
just getting your degree does not qualify you to immediately go get a job
doing exactly what you want. Essentially, people have been oversold on what
the degree actually gives them.

My belief is that a vast majority of the technology related jobs are the
modern day equivalent of 'blue collar' work, more akin to tradesmen, such as
electricians. If you read up the requirements for an electrician in the U.S.
(a brief read of <http://en.wikipedia.org/wiki/Electrician#United_States> is
good enough), it follows the same general trend we see with software
development experience, even if the lines aren't as clearly drawn.

One caveat, I don't have a degree. I'm pretty close if I were to want to go
back and finish it, but I didn't drop out by choice. I'm of the firm belief
that it is possible, but significantly more difficult, to gain the same
knowledge outside of a college or university, it's just harder to quantify the
knowledge you have. I would also suggest everyone go to college and get an
undergraduate degree in something that interests them, but focusing on core
classes and general requirements, not their particular interest. Universities
are great for two things, imparting a general base of knowledge and
specialized knowledge. However, undergraduate degrees have shifted to focus on
specialized knowledge at the expense of general knowledge.

One last note in my long-winded comment, I really appreciate how you state
'you should go to grad school if you want to get better at CS' rather than the
usual defense of schools saying that it's absolutely needed.

~~~
prawks
> Essentially, people have been oversold on what the degree actually gives
> them.

The degree certificate itself, perhaps. But I think people also miss what can
come along while getting the degree. Networking with senior faculty members.
Participating in undergraduate research. Independent classes with those
faculty members. Networking with peers of similar interests.

It's what the student makes it. As such, you're quite right that just "getting
a degree" doesn't make you qualified for anything aside from being a degree
holder. I think it's important to keep this in mind when discussing
undergraduate degrees.

------
templaedhel
I feel like confirmation bias is in play when you read about successful people
who have dropped out of school, succeed, and then blogged about it. You have
to keep in mind the hordes of people who have followeded a similar path only
to archive not enough to blog about.

Self education may appeal to many of us here, but it applies to less than it
appeals to.

~~~
doktrin
> _Self education may appeal to many of us here, but it applies to less than
> it appeals to._

That's missing the major point of the piece, IMHO. The OP isn't describing
"self education", and (coming from a US perspective) is not even a typical
drop out.

What's being described here is a vocational pattern of learning, where on-the-
job experience is backed up with classroom instruction. That's not exactly
what "drop out" or "self educated" imply in the US.

~~~
keithpeter
Yup. In the UK we are trying to reconstruct the 'dual system' and we have
things that are called apprenticeships but not quite as well organised as the
ones they have in Germany. The OP is not a drop-out. He has followed an
established path!

~~~
walshemj
Ah you mean the Torry plan to bring back the 11 plus and ship off poor kids to
dumbed down Modern Apprenticeships so they can stack shelves at safeway.

~~~
meaty
You hit the nail on the head.

Except they also have the "back to work scheme" which means they don't even
have to pay them to stack shelves in safeway (or Morrisons as it now is).

~~~
keithpeter
Yes, that 'scheme' has lost me a really good student who was attending a
college course off his own bat. He has been _required_ to waste his time
totally in a mickey mouse scheme that won't get him anywhere. We will try to
catch him up when he is let out.

~~~
meaty
That sucks. My nephew managed to get out of it by calling his manager at Tesco
"fucking spineless arse licking cunt". Worked wonders. He now fixes laptops at
the local computer shop for a reasonable amount of cash.

------
jmduke
This is well written, but I feel as though I'm missing something.

The best way to get better at being a career programmer is to be a career
programmer. This is understandable! And the author's initiative at 16 years of
age to identify his passions and stick with them at the exclusion of higher
education is commendable.

But I've learned a whole, whole lot in college -- and yes, I completely agree
with the author that the amount of time I spent tinkering around with
computers is smaller than it otherwise would. Instead, I spent time joining a
fraternity; taking classes comparing Milton to Bradbury; learning how to pitch
a stock; volunteering with the homeless; getting blackout drunk on a Tuesday
night; learning the differences between Brahman and Brahma.

Do those things make me a better programmer? No, but I absolutely think they
make me a better person than had I spent the past four years as an apprentice.
(And, I'd wager that they're better for my career in the long term, but that's
not really relevant to this discussion.)

So, I guess, my takeaway: if you know with absolute certainty that computer
programming is your sole passion in life, then college is probably not your
best choice. (I'm not saying that the author is being anti-college in this
post: but I fear most of the readers might interpret his post as such.)

~~~
terhechte
I did both, I first did an apprenticeship, and then some time after that went
to college. I think that's a great way to do it, because I first learned the
pragmatic way, and then could expand it with theory. In addition to that (I
think), I had matured enough when college started, to better decide what to
do, which courses to choose.

I wholeheartedly agree on all the other things you list about college; doing
an apprenticeship doesn't give you any of that. I'm confident that going to
college was one of the best decisions of my life, maybe _the_ best decision,
given all the contacts / friends I made, the things I exprienced, the new
topics I learned about, the discussions I had, the parties I had, etc.

~~~
MikeKusold
I wish I did things this way. In college I formed a lot of uneducated opinions
(why would you ever not have a completely normalized database? That's dumb)
that only thanks to my extensive coop experience did I retrospectively see the
value of.

------
ender7
The OP was incredibly lucky to find a mentor like Jurgen. Being handed a
thoroughly "proofread" review of your work is perhaps the best way to improve
at almost anything. Unfortunately, creating such high quality feedback demands
more time than most people are willing to spend, especially if it's above and
beyond their normal duties.

~~~
seubert
I wonder if a company that stressed a role like this up the career ladder as
an alternative to a high-level architect role would see much success.

~~~
invalidOrTaken
I don't know, but I can think of several things to make it more workable:

\---you could probably pay less. Programmers' opportunities for meaningful,
understood-by-the-recipient service are few and far between. I don't think it
gets any more meaningful than this. One of my favorite gigs ever was tutoring
Python for Tutorspree, and watching my students progress. \---It has a higher
meaningful skill ceiling. The problem with "architects" is that _every_
programmer is an architect, or should be. The title creates the idea of "one
smart architect, many stupid implementors." But the 10x phenomenon means this
is the last thing you want: you want a few smart developers, not a lot of dumb
ones. So why waste your talent managing labor, when the labor is useless and
what you need is more talent?

~~~
vermasque
In the US, I see an apprenticeship program not necessarily as an alternative
to college (yet), but as a way for companies to groom junior engineers into
senior engineers. If top talent is hard to find and costs a lot, it makes
sense to invest in your employees to build them up. I can't see a 10x return
from such a program, but just 2x would justify an investment. Like code
reviews, it would reduce rework with more feedback to avoid future mistakes.

------
jboynyc
It may be worth recalling that Americans have been interested in the
apprenticeship system for a very long time. For instance, Booker T.
Washington's strategy for racial uplift at the Tuskegee Institute was based on
the apprenticeship/vocational training model -- that's more than 100 years
ago!

His critic, the famous sociologist W. E. B. Du Bois, had the following
reaction after a trip to Germany in the 1930s:

    
    
       The Siemens AG factory, in Berlin-Siemensstadt,
       particularly excited him, with a training-and-
       apprenticeship system that he believed could 
       provide the model for American Negro industrial 
       education.[1]
    

(Yes, that's the same Siemens that Tobias refers to in his post.)

More recently scholars like Katherine Newman and others have looked at such
programs as a model policy not for racial uplift but to boost the US's
shrinking middle class.[2][3]

With college debt now at $1 trillion and rising, it definitely is not a bad
idea to explore alternatives to the way education works in the US.

    
    
       [1]: http://chronicle.com/article/WEB-Du-Bois-in-Nazi/1896/
       [2]: http://books.google.com/books?id=1jfAhghdH7MC
       [3]: http://dx.doi.org/10.1007/978-94-007-2272-9_10

------
blt
I wish I could have a mentor like Juergen in the article. Ever since I started
writing code, nobody has had enough time or dedication to go over my work
line-by-line like that. I learn those lessons by trial and error when my code
breaks. And they aren't lessons I could have learned in college. I've got a
long way to go, but one day if I'm actually a good programmer I'll try hard to
be a mentor like that to the new guys.

~~~
ams6110
This is a good point. A university CS education will not be about writing good
code in any particular language (at least mine wasn't). If you are not at an
engineering school there will not be a lot of emphasis on software engineering
practices. And you can't really lean on your peers very much because they are
as inexperienced as you are. Even your TAs and professors likely don't have
any experience writing production quality, maintainable code in a
commercial/business setting: they are more likely to write "proof of concept"
code for their particular research interests.

In short, a traditional Computer Science curriculum is not designed or
intended to churn out e.g. Rails developers who can be immediately productive.
An apprentice-style training system could do that, however at the expense of
not teaching some of the more theoretical computer science (or teaching it in
a much more applied style).

------
hkarthik
I actually met with some programmers from Shopify at a conference this week.
They spoke of Tobi's leadership very well and I could see he's worked hard to
cultivate a certain culture at Shopify. Reading this essay really validates a
lot of what his programmers said about him.

------
uokyas
In Portugal we adopted the same system, 5 years ago or so, and i can say its
not working as good as in Germany, for young adults who live in rural areas
they don´t have the industry to get an apprenticeship like you did,not
everybody gets a chance to work with smart minds like you did, and have the
adult discern like you did to make yourself useful at such early years of
life. That´s is a good story, i can tell you that. But it does not means that
its reachable to everyone everywhere.

~~~
terhechte
I can see the problem there. Germany has the advantage of the Mittelstand, a
strong net of middle class companies layered over the whole country. Even
ever-so-small villages oftentimes have one mid-size company that does
processing, engineering, or something else to modify or edit products for
another companies toolchain.

However, oftentimes these jobs are mostly catering to blue-collar workers. If,
instead, you want an apprenticeship as a programmer or something other more
white collar, then - in a small village - chances are dim, too. In my case I
had to move to a different city, so I could find one. Which is something many
of my friends did, in order to find a suitable apprenticeship: Move away.

------
davidroberts
God. If only the US had something like this instead of the stupid everybody go
to college, everyone spend years studying vapid idiocy after already wasting
years doing the same in high school. I'm not anti-college. I'm anti no choice,
one size fits all, we don't care if you actually can do anything as long as
you were able to put up with enough wasted time to prove you are not the type
to buck the system and maybe cause problems.

And by the way, I do have a degree.

------
fallous
In the US a model akin to this exists in certain trades, such as sheet metal
workers, plumbers, etc. The trade unions essentially act as guilds (rather
than the more worker vs company model of UAW and the like) that sponsor
apprentice programs. The apprentice has to obtain instruction at a trade
school for basic skills and then apprentices through the union for an employer
or employers. The unions have their own insurance plans that the members pay
for themselves, and in essence the group of workers are "contracted" to the
companies.

In order for something like this to extend to programming, you'd need someone
to establish such a guild structure and trade training capacity.

Whether such a thing ever occurs is doubtful in my mind due to the established
interests of those who are already credentialed and in the workplace. Much as
becoming a lawyer was once a matter of simply passing the bar (no Juris
Doctorate was required) but now has erected barriers built by the ABA to
protect its membership, I suspect that there would be resistance by
established tech workers and managers. (as an amusing aside, the state of
Washington actually still has an apprenticeship program for lawyers but due to
the ABA those apprentices can only practice in the state of Washington and
will not receive reciprocity with regards to taking and passing the bar in any
other state.)

------
shanelja
I was an apprentice, fairly recently actually, only last year. I loved it -
the crappy pay, the meaningless jobs and the terrible teaching aside - I found
that I was in my element.

Half my life I've been fascinated with computers, for a quarter of it, I've
been actively building programs to populate them, replacing the typical
childhood experience with code and logic.

When I got my first job in programming I had been a hobbyist for a few years
and I was a fresh mind to mold, but I felt used, I had a house and food to pay
for and it was a hard experience.

It's more than a year ago now and I'm at another company, one which valued my
skills in a better way, more money, better prospects and far better training,
I feel like I learn more every week at my current job than my entire time at
my last job.

To anyone out there who is young and jobless, or unsure of what they want to
do, or sick of stacking shelves at Asda, I implore you, try one out, the job
satisfaction and the change in your mentality will be more than worth the
effort.

You don't need to program from your youth like me, most people start between
the ages of 16 and 21 (so far as I can tell) and codecademy and other services
are making it a lot simpler to learn these days - anyone else remember
learning HTML from W3SCHOOLS?

I said this to my best friend a few months ago, when he had just had his baby
and had no job: Why do nothing, when you can do something you will love?

~~~
oliverhunt
What country do you live in and what company did you do your apprenticeship
with?

~~~
shanelja
I live in the UK, in the north, the company was tiny: www.cicsolutions.co.uk,
only a small 3 person company, don't get me wrong, they were a great bunch of
people, but the teaching style was all wrong - I was punished severely for
infrequent mistakes (accidentally deleting a CSS file instead of renaming it,
there was no backup system etc in place) - and the money was fairly horrific.

~~~
walshemj
err a 3 person company is in not in an position to support apprentices - this
is the problem with the half assed Modern Apprentice system its abused to hell
by tax dodging coffee shop chains and supermarkets to get cheap 1/3 the
minimum wage trainees for non skilled work.

~~~
shanelja
I couldn't agree more, like I said, I was in a position where I was already
capable on the day I walked in the door (I sat down on day one and head my
first website live by day 6) - I dread to think how it would have turned out
if I hadn't have been.

For a start, the college taught the most irrelevant of things - how to use
Microsoft word, how to set up a router, _what an email was_ \- I mean, in what
world should you seriously consider jumping in to the deep end of web
development in a paid job _if you don't even know what a fucking email is_?

Then there was the poor time management, I was given only one afternoon a week
for my coursework _which I was to complete in work and not at home_ \- I was
royally screwed the first time I got behind and playing catch up after that, I
could not be given more time, couldn't do any at home and no one really seemed
to care.

I was on of only 2 technical people, and the other one was my boss, who almost
never had time for my training from day one, in 9 months there, I had 3
lessons from him, one of them a one on one on how Joomla components worked,
another a 15 minute tutorial on the class structure used in CodeIgniter and
the third (and this was the only truly useful one) was a 2 hour lesson on
Database design, not just "Well, that should use an ID and be an int(6)" but
actual useful theory, not just how two tables interact, but why they interact,
and what joins do. In 9 months, I only had one lesson where I walked away
knowing more than when it started.

In a way I feel sorry for the person they replace me with, but in another way,
having to do all the work on my own, to deadline and design was probably the
best training I could have had.

~~~
UK-AL
Sounds like an awful apprenticeship, since you are unaware of what you don't
know.

Did they use source control?

~~~
bvdbijl
In a few posts up he says they didn't have a backup system :)

~~~
UK-AL
I would not call source control "backup". More like a standard requirement for
collaboration.

------
pascalo
Good article, and most of it sounds very familiar. I went through the
apprenticeship system in Germany after dropping out of Uni (I guess I wasn't
cut out for German literature and philosophy after all).

At the time there was a true disconnect between the real industry and the
schooling part of things, mainly due to the fact that unlike baker of
carpenter, front-end programming was such a new thing, so it got thrown into
the same basket as print publishing, and thus I had to spend my once-weekly
days at school memorizing various paper-fold patterns and Colorspace and DPI
settings which were highly irrelevant to what I was doing throughout my days
building websites at a digital media agency.

Like the OP, I got taken under the wing by a guy called Thomas, who was a
pretty decent coder, and to whom I owe a lot.

Germany wasn't doing so well economically at the time, so shortly after I
migrated to the UK. My three years of industry-relevant experience gave me a
great base to build my career upon, for which I am thankful to this day.

------
walshemj
What he doesn't say is the the dual system in Germany is very stratified it
can be very difficult to go to a tier 1 university in Germany if you don't get
steamed into the right sort of high school.

note that he moved to the USA where the stigma of going to the wrong sort of
school is less of a problem.

------
zenbowman
Apprenticeships are awesome, but a lot of comments here refer to dropping out
and just going it on your own, which is a lot different from an
apprenticeship, which, for better or worse, we don't have here. I would
recommend the apprenticeship route if we had one, but as we don't, a college
degree will make your life a lot easier.

And one of the best reasons to go to college for computer science is making
friends who share your interests, those are the people you will network with
to find great jobs, start new companies, etc. So while the classroom
environment might not be thrilling, there is plenty of education to be had
outside the classroom. If you are super enthusiastic, you might even get to
work on cutting edge research as an undergrad in a university lab.

------
larrywright
As someone who essentially went the same route (though I finished high school,
and took a slightly more circuitous route), I've often wondered what I missed
out on by not going to college.

Don't get me wrong, I don't think it would have made much of a difference in
where I'm at in my career, but I wonder about the rest of me. The people I
know who went to college tended to have social experiences that I didn't have
(though perhaps working at a startup these days offers some of that). They
took classes in subjects that I have only a basic understanding of (physics,
chemistry, politics). In some sense of the phrase, they're more "well
rounded".

I'm not certain how much that matters. Maybe it doesn't matter at all.

------
zdgman
Now I love that the company job board conveys the same type of ideals.
<http://www.shopify.com/careers?posting=ruby-developer>. Nothing gets me more
than founders saying "I didn't go to college and look how great I did" while
requiring their employees to have a CS degree to even get an interview. I know
this is more of a filtering tactic but it seems so disingenuous. The biggest
take away from the article wasn't dont go to college, it was find an
environment that suits your learning style! College isn't right for everyone
especially with student loan debt just about to eclipse 1 trillion dollars.

------
sebastianmarr
I also live in Germany and am currently writing the thesis for my masters
degree in CS. In my case, I wished I left college after getting my bachelor. I
had a solid foundation of theoretical CS knowledge after 3 years. I continued
to study only because I wanted the degree, in case I "need" it later to get a
job.

For over a year now I didn't see any lectures, but have been working at a
company instead. I had all my exams, the only thing I have left to do is my
thesis. It's hard motivating yourself to do scientific work if you know you
can get by just fine without it. And all just for a degree that doesn't matter
(to me at least).

~~~
pascalo
What's the cost for a semester these days? Did they introduce fees?

What you're doing would be a very unlikely scenario in systems where studying
is setting you back a couple of thousands every term, i.e. Australia, UK or
the US.

------
DasIch
I very much doubt that he "dropped out" of "high school" and was able to get
an apprenticeship, this is probably a bad translation.

He probably left a Gymnasium after tenth grade without getting an Abitur or
didn't go to a Gymnasium after finishing Haupt- or Realschule. Unlike dropping
out of high school in the US, this would still leave him with a diploma which
would make getting an apprenticeship as a Fachinformatiker plausible, which is
practically impossible to get without some kind of diploma.

btw. you can't just drop out of school as a minor in Germany as not attending
school regularly would be illegal.

------
phatbyte
I'm the process of getting a H-1B visa denied because of my lack of degree on
IT. I order to get working H-1B visa without a degree one would need to have
near 12 years (which I have, but not 12 straight years obviously with a few
months lacking here and there) of working verified experience. My company
however, seems to find me valuable enough to want me to work for them even if
remotely. The US gov does not....go figure....

------
genwin
If you don't have a degree then simply leave an education section off your
resume and don't bring the topic up. Ignore degree requirements for jobs;
apply regardless. Doing this, your lack of degree will probably have little
remaining impact on your career. This strategy works because a CS degree has
small actual value to an employer, and most employers know it.

------
javajosh
tl;dr The OP is not alone in finding a real problem highly motivational to
learn the solution; there is a missing component to computer science education
that doesn't address 99% of what application programers do; apprenticeship
programs would particularly benefit from certain practical additions to the
curriculum.

His learning "disability" is all but universal: teaching style doesn't give
students a real problem to solve. That's how science is supposed to be taught.
Ask your students: can you build an engine out of a pot of water, a tight-
fitting rubber cap that expands, and a small weight that can be attached and
detached from a crank at any point in it's motion?

This is how you introduce temperature, heat, pressure, volume, work, etc. And
I can't help but think that an apprenticeship basically achieves the same
thing: it motivates the learner with real problems that motivate them to find
a solution.

This is great in theory, but in practice CS doesn't really answer the problems
you have as an application programmer. Much of CS "book learning" is focused
on things like compilers, systems programming, or data-structures and
algorithms. I don't know about you guys, but I spend very little of my time
designing languages, compilers, or systems programming. I don't even spend
that much time choosing data-structures. No, I spend most of my time learning
the interfaces that other people have built around these things - learning how
to parameterize and operate within someone else's higher-level environment
(which is also known as a platform).

So what should ordinarily be an exercise in data structures and algorithms
becomes a piece of techno-social detective work: nothing less than the
determination which library/tool/framework is appropriate for the project, and
then to get busy learning that combination to be able to release real
software. If there exists, anywhere in the world, a class on how to discover,
evaluate, and integrate libraries into an existing project, I don't know of
it. In the same way, I doubt there exists a class on comparative application
architectures.

------
dreamdu5t
I'm so sick of success being portrayed as an institutional choice rather than
a process of individual choices.

~~~
mijustin
I'd say that Tobias' post portrays both: his individual choice to make certain
choices (and pursue Jürgen's team), and the context of the German
apprenticeship.

------
inquist
I work for a US company and have had a similar experience to what is described
here! My employer had that type of practical education, and so even though I
have a bachelor's in Physics I am working as a programmer, gaining valuable
experience and feedback.

------
namank
Actually the apprenticeship model exists in Canada too. But it`s restricted to
trades like electrician and plumber and does not extend to engineering or law.

------
gdsimoes
I wish we had these type of programs in my Country...

------
mickgardner
I would love to have done an apprenticeship in Programming. Australia really
needs an apprenticeship program like the one Germany has.

