
How do self-taught developers get jobs? (2016) - _qc3o
http://brianknapp.me/how-do-self-taught-developers-actually-get-jobs/
======
twblalock
I'm a self-taught programmer, and I got my first job in the industry in 2012.
Now that I've been interviewed as a candidate and interviewed candidates for
jobs at my company, the thing that stands out most to me in the software
industry, whether engineers are self-taught or not, is that networking and
personal connections really matter.

The hardest part about getting your first job as a self-taught engineer is
getting companies to take you seriously. A lot of companies will just throw
out applications from candidates without CS degrees, unless those candidates
were referred by someone inside the company. Like most job requirements, the
degree and experience are flexible if you can get past the bureaucracy, and
knowing an insider helps you do that.

So, I agree with the author of the article that a good portfolio is necessary,
but I would rate networking just as highly.

~~~
toexitthedonut
>Whether engineers are self-taught or not, is that networking and personal
connections really matter.

As someone who has no good network, is there any other good way? I tend to
read "X really matters" as "X is essential" in that without X you're nothing.
I don't believe in essential ingredients- I believe that, as professional life
is very open-ended, there is a multitude of good recipes for success in which
there is no common ingredient.

~~~
twblalock
Few people start out with a good network. You need to meet people. If you live
in an area with a lot of software companies, there are probably going to be
meetups, clubs, and that sort of thing.

I got into the field by working at a startup in a nontechnical role and
transitioning into the engineering department after demonstrating that I could
code and helping with some minor projects. I know several other people who
went that route, and I think it's viable at startups, but not at large
companies.

~~~
toexitthedonut
I already have held four different jobs as a web developer and still have no
good network. See my reply to "developer2" for more details.

------
cyberferret
I am both a self taught programmer, as well as a self taught guitarist (both
for over 30 years now), and I don't agree completely with that answer in the
blog post.

Self learning is great, and it will give you experience and chops in both
disciplines, but at the end of the day, you will hit many walls that only a
formal education (or a good teacher) can give you.

I've written hundreds of (perhaps over a thousand now?) apps over the decades
which are used in the real world to save/make businesses time or money. I
would probably categorise myself as a 'fairly decent' programmer, but I know I
would fail most whiteboard tests which have basic CS knowledge patterns. I
often look at discussions right here on HN about machine learning or
cryptographic patterns etc. and feel like a green newbie again because I find
the technical conversations hard to follow.

To bring it back to guitar playing - I remember when I was in my first band in
high school, I had no idea how to play a guitar solo, but a session musician
visiting the school showed me the pentatonic scale, and how you could move it
up and down the neck to suit different keys. Mind blown. Pick any standard 3
or 4 chord song and I could play a semi decent sounding solo over it. Forget
theory or all that Jazzy stuff - I was on a roll!

But after many years, I discovered that I was simply playing the _same_ thing
over and over again in different keys. I wasn't really moving forward. I
remember telling other guitarist that - "The _best_ thing I ever learned was
the pentatonic scale, and the _worst_ thing I ever learned was the pentatonic
scale...". I felt boxed in and felt that my skills had plateaued.

It wasn't until a couple of years ago that I started taking lessons from an
experienced guitarist, that I realised what I had been missing on by omitting
basic music theory from my vocabulary. I was astounded by the power of
learning the differences in scales, and using modes, triads, augmented chords
etc. Stuff that I thought was too 'intellectual' or that I believed would
restrict my creative freedom actually proved to be the exact opposite. It was
the first time I experienced the concept of "the more you learn, the more you
realise there is out there for you to learn". A kind of reverse Dunning-Kruger
effect?

TLDR: Self learning is great, but formal education is a force multiplier.

~~~
thomastjeffery
I think it's worth mentioning that theory need not be learned in a formal
setting.

I, like practically every guitarist, followed the same learning pattern. Early
on, I learned the pentatonic scale, so my noodling was more structured. Later
on, I learned about scales and modes. Those two elegantly simple constructs
are the most useful, extensible points of knowledge I learned, but I learned
then from friends, and even from the internet.

To contrast, through high school, I learned scales, and a lot of theory. I was
forced to practice specific aspects of performance, learned about breathing,
embouchure, sight reading, etc. I learned how to have a good ear, and work
together with the rest of the band.

The only things I learned from formal education, that I likely couldn't
reproduce independently, were physical. Things like breathing, embouchure,
etc. This, I believe, is where the analogy falls apart. In music, especially
as a performance art, most of what you do is _physical_. That simply is not
the case with software. Everything I learned about programming, I learned on
my own. I learned theory and implementation. I learned several languages. I
learned how to interface with the operating system.

Programming is not a performance art; in fact, it is the opposite. The
computer is the performer. You are the _composer_. The most wonderful aspect
of writing is that it is only information, and with the internet, information
is really available, no matter what setting, formal or not.

~~~
cyberferret
Yes - I think to expand upon my post above and your excellent reply, it all
boils down to "context matters".

I think learning theory and concepts (in both guitar playing and programming)
is far more interesting to me when applied to 'real world' situations.

Basically, instead of learning and memorising the various keywords of, say,
SQL, if you gave a student a dataset with several tables and thousands of rows
of data and said - "Now extract X for me from these tables", then they will
see that there are several ways of doing so, with different benefits and
downsides.

Similarly, if you gave a guitarist an unusual chord progression with, say a
diminished or minor chord in the mix and said "Work out a solo that sounds
good over that", then there will be some interesting learning in there without
having to memorise every single scale that they could use. Many ways of coming
up with a solution to the problem.

Another anecdote that relates to my favoured method of learning - When I was
in high school, I disliked trigonometry, and never really got to grips with
soulless diagrams and charts on the page. But when I graduated and went to
flying school, and had to learn spherical trigonometry (several fiendish
levels harder than standard trig) in the context of learning navigation on a
globe, I absolutely fell in love with it, and indeed I think the first time I
ever got 100% in a maths test was in one of my first spherical trig classes at
flight school.

------
chrisbennet
I'd say the best developers are self taught and by that I mean autodidacts.
Those few courses in college are great but if you don't keep "schooling
yourself" you won't ever be very good.

Something I do think is great about formal education is that you are forced to
metaphorically, "eat your vegetables" i.e. learn some fundamental things that
aren't interesting or aren't as interesting as some other things you would
study if it wasn't for a test.

------
stirno
Nearly 20 years in now as a self-taught developer.. and I agree with most of
what the post says. I would just add that a young person should continually
keep trying to get a job, any job, building software. The process of applying
for these kinds of jobs helps you identify areas to focus on.

I think the biggest thing that keeps people from being successful is the
assumption that, even with all the effort they are putting in, their potential
peers are better at the job. In some strict sense that is true but delivering
customer value is number one. Keep your focus on that, people will want to
work with you. Ignore any feelings of being an imposter.

I got my first contract development gig at 14, first salaried position at 17.
Stick with it and make it happen. Be confident. Don't be a dick.

Also, the original question talked about using Java. There is nothing wrong
with Java and there are a lot of jobs in that space but I can't imagine a
harder place to come in as a young untrained programmer than Java Enterprise
development.

~~~
Mandatum
> but I can't imagine a harder place to come in as a young untrained
> programmer than Java Enterprise development.

It's funny, I can't think of a better place. Well-established companies will
have the money to support you as you learn, cogs move slowly in these orgs so
you don't have to rush - take your time as you learn about the code base, and
figure out how things are done certain ways and make suggestions to improve.

~~~
stirno
Ya I understand that, if you can get in the door. Those same companies are
also the ones I've found more likely to automate rejections of applicants who
can't check the right boxes though, making it harder to get in without
experience.

~~~
Mandatum
This is true, I guess networking is key here - I got into that kind of company
by reporting a bug on their website and explaining it over coffee with one of
the tech leads. Hired the following week.

------
simonsarris
This is good advice, and "Go out there and build something" can be extended
even to "Go out and be a developer in public." Blogging is way under-rated, so
is (not mentioned by the article) StackOverflow.

I wasn't self-taught but did get a lot of interview offers this way (and job
offers and book offers). Around 2010 I started answering questions on
StackOverflow for the 'canvas' tag, which began because I had some questions
and then realized lots of people had interesting questions of their own and I
wanted to help. It got addicting in the way that playing with Lego blocks is
addicting as a child. Just this strange urge to do it and to get excited about
it, and its quite gratifying to feel useful.

Not a lot of people continuously participate, so if you do you stand out. All
of a sudden I had a "public" developer persona, and I was getting recruiter
emails (some very serious but most typically flippant) or just people emailing
me questions personally even though I didn't really have any projects to my
name. I wrote just a couple blog posts to help out with common issues, and
then Pearson asked me to write a book. Sadly the book-writing crushed all my
free time and it was actually the reason I stopped regularly participating on
SO.

So you don't have to build anything to be taken seriously, you just have to be
out practicing your craft in public. Blogging and answering SO questions are a
great way to build some kind of presence and there are no barriers to entry.

------
xupybd
I like a lot of what the author is saying, but there is still value in
learning the theory.

You can get learn a lot building your own apps, but then you're forced to
learn some lessons the hard way. Sometimes you can avoid making mistakes by
learning from someone with years of experience. You don't need to take a
course, but reading can help so much. Books like The Pragmatic Programmer,
Code Complete or Literate Programming can set a good base for thinking about
your code.

Also to address the how self taught programmers get jobs, it's worth pointing
out that the first question was from a 17 year old. I'd say it would be tricky
at that age to get given a chance by an employer. So with time and age their
employ-ability should increase as a factor of age alone.

~~~
thaumasiotes
> the first question was from a 17 year old. I'd say it would be tricky at
> that age to get given a chance by an employer. So with time and age their
> employ-ability should increase as a factor of age alone.

Seriously? Who do you think is more employable?

\- 17 years old; high school graduate; never had a job.

\- 30 years old; high school graduate; never had a job.

If it isn't the second one, you're describing something other than "age
alone".

~~~
xupybd
To be honest 17 is very young. I'd employ neither, without something that blew
me away. I don't know that making that comparison is really relevant.

30 years and no work history implies some problem that has prevented them from
working.

17 years implies a lack of life experience and likely a lack of soft skills.
Once they hit their 20's however they're going to be less of a gamble,
regardless of their work experience.

So yes at some point too much time will have passed for them to become more
employable. But I was only thinking in a sub 5 year term. More as a means of
encouraging someone in that situation, not as a hard and fast rule, that the
older you are the more easily you're employed.

~~~
thaumasiotes
Hey, whatever you like! Who's more employable?

(1a) 17 years old; high school graduate; never had a job.

(1b) 22 years old; high school graduate; never had a job.

Or, if you prefer:

(2a) 17 years old; college graduate; never had a job.

(2b) 22 years old; college graduate; never had a job.

I submit that in every case the 17-year-old is more employable.

~~~
xupybd
I'd disagree, the 22 year old in every case to me.

~~~
drakonandor
You wouldn't wonder what he's been doing for the last 5 years?

~~~
xupybd
Yeah I would wonder, but it wouldn't automatically raise concerns. I'd imagine
that the unemployment rate for that demographics is relatively high. 22 is
still very young and I'd not be surprised if many had not yet had a
professional job at that age.

Perhaps my views are not typical, but I find a lot of maturing happens in late
teens and early 20's. I might be jaded but I find people get significantly
easier to work with when they hit mid 20's. There are many exceptions to this
however and not all people mature at the same age.

------
thatwebdude
A common misconception with "self-taught" is that theoretical knowledge is
always a black hole. This isn't true for music or development.

There isn't anything keeping you from learning the Lydian-Chromatic Concept,
or how to fully understand the 12-Tone System in music. There also isn't
anything keeping you from learning key fundamental concepts taught in Computer
Science. The information is out there. And most information is free.

------
cagataygurturk
I want to highlight the difference between people who are self-thaught
programmer but with engineering/math/etc. degree and people without any
technical education. From what I see for engineers the life is easier even
they did not study CS.

------
EliRivers
That's all very nice, but it doesn't seem to be answering the question "How do
self-taught developers actually get jobs?"

It dances around becoming good and having a lot of things to point to to
demonstrate being good, but doesn't go near the actual question.

~~~
lr4444lr
I think he's implying that you get it through an abundant portfolio and the
ability to ace the "practical" kind of technical interview, but you're right,
that needs to be spelled out. I imagine that very few people doing everything
this guy is describing are going to get a job at one of the larger companies
with a more rigorous vetting process where the gaps in the CS fundamentals are
going to show. He should delineate the kinds of jobs these people will be
strong for.

~~~
Coincoin
I agree even though there are several ways, having a portedolio is the best.

The first method I personally used was to work for the guy one week with
ludicrously low pay. He said yes at 7$/h, but I would have gone down even
more. This kick started my carrier enough to not worry about searching for
jobs anymore.

Second method I employed to get to the place I wanted to be was to build
something that would impress them and publish it. It took 2 years and it
worked.

This is all anecdotal but it worked for me.

------
thomastjeffery
Learning to play is different from learning to write.

As a mostly self-taught guitarist, and almost entirely self-taught programmer,
the most difficult thing, both in programming and music, is writing.

The main advice is always to keep creating; but creating _what_?

As a guitarist, I started out reading tabs for my favorite songs, and
perfecting my _performance_. The most fulfilling experiences for me were
getting together with someone, and improvising. Writing music is artistic,
rather than functional, so improvising works.

Writing software is not art. You need a problem to solve before you can write
anything. But _what_ problem do I focus on? The hardest thing for me was
always finding a project to exercise my skills.

Take SQL for example: If I want to learn SQL, and how to administer a
database, I need _data_ to put in it. I need a reason to _query_ that data.

I need a purpose, however trivial, to implement software, just so I can
_practice_ implementing software. That is the hardest thing to find on my own.

------
ptr_void
I don't entirely like this picture of self-taught developer. A self-taught
developer should teach themselves necessary theory as well, not just build
things. Otherwise one will be biased towards learning only the things that are
fun or easy (theory is seldom fun) - and there will be gaps.

------
mattbgates
What a beautifully written article. You explained me. You explained it well.
I've never picked up a guitar, but I am a coder, and really, to learn
anything, you have to at least be interested and wanting to learn. Most
important, you could read a hundred books, but actually doing something with
the knowledge is the only way to really learn.

I am a self-taught programmer and never had any dreams of ever doing it for a
living, yet here I am, started off getting hired as a programmer for Visual
Basic 6.0 working on autobody shop software. I eventually left that job (
[http://www.confessionsoftheprofessions.com/the-
opportunity/](http://www.confessionsoftheprofessions.com/the-opportunity/) )
and got a job working in web design for a media company.

I had taken a few college classes in programming and realized it really was
mostly just theory and little sample designs. Nothing that I have really ever
used or that helped me. Sure, I got a good grade.. passed the class, but that
was about it.

Most code that has been useful has always come from me learning it myself. I
tried taking a database course and ended up having to drop it because it just
confused me. A few weeks later, I spent 3 hours teaching myself about SQL
queries and adding, removing, editing, and deleting data. I completely
understood it and that escalated me into actually making valuable web apps in
which I am actually charging money to clients to use.

And as you said, "build and build some more" .. absolutely right! This is the
project, a free web app, that got me started doing what I am doing:
[https://mypost.io](https://mypost.io)

Solve a problem: I wanted to get a web page up on the internet in seconds
without having to worry about registering for an account or having to share my
email with yet another website.

Everything since then has only be escalating my knowledge and even helping me
to enhance my code for the better.

Great advice!

~~~
conorcleary
"Generate URL" isn't working for me on your Create Post page.

~~~
mattbgates
You have to enter something into the headline. If nothing is entered, it
automatically pulls from there.

------
wcummings
By applying? People almost never ask me about my education, I don't even
include it on my CV anymore. If people are nitpicking education you've got a
weak CV.

~~~
flukus
You're not wrong, but it's worth mentioning that employers care more earlier
in your career. After a few years it's largely a non-issue, except for
backwards places like banks and other large corporate environments.

Even at the entry level though, a lot of graduates can't handle the FizzBuzz
test, a self taught person that can probably has a better chance in the job
market.

------
haspok
Beware of self-taught people: there are diamonds in the rough, but in general,
the problem is that practice does not make anyone perfect, _perfect practice_
makes someone perfect! There is a huge difference, and the problem is that
people generally don't know what to practice and how to practice it - they may
not even realize the existence of important topics!

Of course, there are exceptions to this rule, but the average person can save
so much time and effort just by getting a basic education (learning about
big-O, for instance). It does not have to be formal education however, just
try to be around people smarter and wiser than you and pay attention to what
they are doing and - most importantly - why.

------
banachtarski
Self-taught programmer (as well as guitarist) also chiming in. I take umbrage
at this article as it is pretty much not the advice I give to anyone. You
being self-taught doesn't make you off the hook for learning operating systems
fundamentals, data structures, distributed systems, etc. You still need to
learn it and not doing so puts a hard cap on your capability, in the same way
that not understanding scales and modes, fingerings, and chord shapes will
hamstring your abilities as a guitarist.

Build for sure, but don't neglect the fundamentals.

------
analog31
I'm a self taught programmer, but a formally trained musician.

My observation is that you can learn practically anything on your own, but
some skills are so rare among the self taught, that one might as well assume
they won't happen.

For instance, most self-taught musicians can't read sheet music at a useful
level of fluency. That includes the vast majority of guitarists. Now there are
plenty of playing opportunities that don't involve reading, and you'll
generally do just fine, but if someone calls you for a gig that involves a lot
of reading, you'll have to turn it down. Every town has a small cadre of
musicians who enjoy this kind of work, and everybody knows who to call.

Also, some instruments lend themselves to self-teaching. The one that I play
-- double bass -- is physically dangerous if you don't follow a "correct"
approach, and most people who try to learn it on their own, give up in
frustration. Guitar is a great instrument for the self taught. You won't kill
yourself trying, and it pretty much makes a pleasant sound right off the bat.

As for programming, I use it in my job, but I'm not employed as a programmer
_per se_. Programming is my secret weapon. I've never applied for a
programming job. I work in a big enough shop, that if I have a theory
question, or a problem that would really benefit from the opinion of someone
who is steeped in theory, I just have to ask.

------
bgammon
I am a recent undergraduate. My undergrad CS major did not offer courses in
line with my interests (they focus on data science, I focus on systems). The
bulk of my working knowledge has come not from that program, but from the
countless hours I spend reading at practicing at home.

Undergrad has given me credentials, and provided invaluable momentum to get me
started, but over 4 years has acted as a hindrance to allowing me to become a
strong candidate for jobs in the focus area I care most about.

------
_nalply
I am a self taught programmer who later made an engineering degree. The
courses only told me the names of the concepts I already knew. This is in
itself valuable because it gives you a language.

In my youth I found my first gigs by good contacts (in German «Vitamin B»).
After that it was easy because of «official» experience.

------
G3E9
Answering the HN title, as a self-taught developer, I did some full-stack web
development work (pro bono) for a small company and built my reputation up
there over 2-3 months. From there that company introduced me to a staffing
agency which has placed me in interviews with above-market offers (starting my
next project through them soon!)

I have had no recruiters or clients question my lack of formal education (I'm
2 history classes away from an associates) except for a health care
organization who's insurer required their workers (direct-hire/contractor)
have a degree by their definition of being HIPPA compliant.

I've built relationships up over time and have proven myself to others that I
can deliver and solve technical problems - really, they're sponsors... I mean,
isn't that all a degree is, someone trusted saying you can do something?

------
cdevs
Here's the problem, thinking every job comes with a whiteboard test and needs
you to know every sort algorithm as if you're going to build the next
database. You know some Java and HTML and CSS? Great you'll either make it as
a junior and become a awesome developer with those 8-9 hour days of new
experience learning around other devs or you will flop. Maybe the question is
how much does the industry generally tolerate as a junior dev? Forcing myself
into the areas I hated or dreaded was what helped me the most. Realllly learn
how the stack communicates.

------
pramini
The essential building brick of programming is the function, simply because --
unlike the class/object -- it is also a perfectly valid basic building brick
for a turing-complete axiomatization.

Once you know this, you can [1] search for existing functions [2] compose new
functions [3] and debug them, in order to solve the particular problem at
hand.

Is that what you learn at school? No. Never.

At school, you will not do any deep sea fishing. You will only read about deep
sea fishing. So, someone with a degree in deep sea fishing, is not a deep sea
FISHERMAN at all. He is an avid deep sea fishing READER.

------
Daviey
My education has never got me my foot in the door, my reputation and
demonstrable open source work has. Education was really only due diligence
after they wanted to hire.

------
CM30
As a self taught front end developer, I got my first job as a paid internship
after narrowly missing out on the original job the interview was for. It's an
odd story, but it worked out none the less. Personal connections helped a bit
too, especially since my second job was gotten purely because I knew someone
working at the company (well, running the company) and it turned out they were
hiring for the exact job I needed.

------
bobbytherobot
Although I have a Computer Science degree, which I value, I am mostly self-
taught when it comes to my career as a programmer.

------
doggydogs94
Another option is to not work for somebody else. Write your own apps (I would
do iOS because Apple customers seem to be more willing to spend money for
apps). Maybe you will get lucky and one of your apps will go viral; then you
will be on easy street.

------
sp4rki
As a self taught guitar/piano player, programmer, and investment trader I
couldn't agree more. I learnt by reading and playing/coding/investing as much
as I could when I could.

As to how to get a job as a self taught anything? Being persistent.

------
nunez
networking. finding a person that knows your work personally that is willing
to bring you on for an interview. or craiglist. or that odd recruiting analyst
that actually looks at your github and realizes that you can code

------
dizzystar
I'm a full-on autodidact. I've never seen a college campus, much less been in
class. I should be, by all definition, for this article. I play guitar and
program. How good vs others is a matter of opinion.

I hate the short-cut analysis that this response gives. I hate it when people
confuse classical training for do-it-yourself learning. There is simply no
excuse for not knowing the theory, and sadly many autodidacts feel like
dismissing theory is proper justification for self-baked learning, and I'm
sorry, this is not true. It's pure laziness, especially in a day and age when
so many excellent books are on the cheap, and even MOOCs are available that
really drill down and challenge you to rethink your own IQ. Even if I've never
actually used DFS or had to build my own hash table, the ideas have been
incredibly valuable to know about. These are all components of proper design
and thinking.

I'll say it bluntly: You CANNOT play guitar well without learning the
underlying theory and you CANNOT program well without learning the theory of
what you are doing. Yes, I know people point to famous musician X who knows no
theory, but they do know more than absolute zero. They are, more often than
not, saying they don't know enough to teach it, but they certainly know it.
Even Hendrix knew his scales and proper chord progressions.

Yes, you can sort of BS your way into something resembling knowledge, but the
problem is, if you can't use language to describe _why_ something is good or
_why_ it works, you are guessing, pure and simple.

How do you find a job as an autodidact? Well, the main problem we all have is
that we simply don't know where we are in the pecking order. We sit in
interviews and don't really know how to describe why we are better than a
college grad (to be honest, we probably aren't).

For autodidacts, it is probably easier to get contracts or build our own
businesses.

The language for a contractor is "I'm able to do this and this is what I
charge," as opposed to "I'm able to do this better than the other 8 people you
are interviewing." Contracting is a much easier sell. If you have a convincing
project, then you are good to go, and that's all you really need.

A business is the same language as a contractor: You are able to do this and
you are good to go. Post ads, open a paywall, whatever. There is no asking
permission to work, just do it.

~~~
toexitthedonut
I'm self taught by most accounts, but I have a 4-year degree. I think it's a
curious predicament I'm in, because part of the curriculum is "web programming
but not really Computer Science". The major I took doesn't even exist in that
college anymore- it had a name change and major curriculum overhaul. I think
it felt the throes of trying to teach by the tool, which is a big problem in a
fast-paced field like web development.

In short, my degree was very "bootcamp-y" in nature, in a decade before coding
bootcamps became very popular. Even worse, I think bootcamps have made a lot
of my 4-year degree obsolete.

I got a few jobs at mom & pop places, I've consulted for a media agency, and
yes, most were indeed contract jobs. But these jobs are not stable as working
for a major tech corporation. And these are not places that allow me to really
refine my engineering skills and learn how things are developed to a large
scale. Building websites for clients that do not intend to grow on a national
level are what you'd be limited to if you don't learn the theory behind
programming.

However, I have no interest in building my own agency business. I'm a very
technical guy through and through. I am an autodidact with a dilemma in which
I want to follow the mainstream career path of a CS graduate. One that is
marked by working as an engineer reputable companies and connections in these
companies. But trying to do that with a self-taught background and with no
friends that know me well enough to refer me in a professional capacity, it's
been a very rough road.

------
mdip
Equating learning programming with learning a musical instrument was an
interesting take. Like most analogies, it fits in some ways and doesn't in
others, but the ways that it fits ring quite true. Programming _is_ in large
part an art and an act of constant 'practice'.

A lot of us divide into two camps - "self-taught is better" or "university is
better". In interviews I've ran in the past, I've often been an advocate for
lesser considered candidates that lacked formal degrees but showed exceptional
understanding of the craft. I've also been on the side of devaluing the degree
of a person due to their lack of experience or quality code that demonstrates
their practical abilities. Self-taught programmers can lack some of the
foundation of software craftsmenship, but not always. It usually just depends
on how long they've been at it and what their exposure is to large projects.
The self-taught tend to start out like self-taught musicians -- "do first"
then learn the specifics later...if they're needed at all. Unlike a musician
-- who might be able to get away with _never_ learning to read music or
understanding anything about music theory, it's not possible to design a
supportable piece of software without understanding major core concepts of
computational theory, or design practices like 'SOLID' and the Single-
Responsibility Principal. The moment you have to _extend_ a large program
you've written, you discover these mistakes and tend to start learning them.

Here's the thing, though. Self-taught programmers get jobs the same way as
everyone else because _we 're all self-taught_. The moment we leave
University, our skillset and even parts of computational theory, become
outdated (or maybe our skillset was already outdated due to the choice of
technologies that the school decided to use)[0].

Regardless of being _self-taught_ or _University trained_ , I look for people
who can demonstrate a constant state of learning. I like a candidate who knows
the language I'm targeting for a job, but comes in talking about a couple of
other languages that they're poking around with and find _interesting_ (as
well as understanding _why_ they find them interesting). Way too often we'd
get University graduates who clearly chose Computer Science because someone
told them that those jobs pay well[1]. They had little-to-no passion for it,
had no hobby-projects[2] and had nothing to _show_ me that would demonstrate
an ability to actually _write code_ in the language we were seeking candidates
for. On the _two_ occasions we landed a candidate with _no_ formal education
in software development, I advocated for both of them (with _strong_
disagreement from the other interviewers)[3].

[0] I often joke that anything I've written six months ago might as well have
been written by someone else... someone else who doesn't know what they're
doing. Part of that is because I strive to hone my craft. I _want_ to feel
this way about old code. But there's another side to this phenomenon. If I
study the code carefully, my biggest complaint is usually that I've chosen an
overly complex approach when there was a much easier way to do something.
Further investigation usually yields that this _much easier way_ only became
possible shortly after or during the middle of the time that the majority of
this code is written due to features being added to the language or runtime
that weren't there previously. I'm not sure there's another industry where I
can look at a product and think 'that design is just ... ugly' when it was
cutting-edge 6-months ago ... maybe hair-styling?

[1] Part of this was that the only job I had where I was regularly
interviewing candidates was for a somewhat non-sexy IT development position at
a large company who's primary business wasn't technology. It didn't naturally
attract passionate programmers looking to solve interesting problems so we got
the candidates that were probably the most appropriate for the job we were
posting.

[2] And by none, I mean literally _no_ code to show me. I wasn't even
expecting them to come with a few GitHub repos of personal projects -- A blog
post describing something related to programming, a Pull Request to another
person's GitHub repo or even a single Stack Overflow or a programming-centric
forum of some kind would have been nice. Nope. And since I _refuse_ to do
white-board coding, that pretty much disqualified the candidate.

[3] The first was somewhat reluctantly hired due to my persistence. I made the
argument and backed it up with the code the candidate had showed off in the
interview -- personal project code that was written _very_ well. He was such a
successful hire that I ended up doing _many_ later interviews and the second
time this issue came up, the candidate was hired on my recommendation without
the required persistence. _Both_ quickly became senior developers. Both, also,
left after a couple of years for more interesting work.

------
dozzie
> Yet, if I sat down and decided to build my own computer language or
> operating system from scratch, I bet I’d learn a lot of interesting things
> along the way.

Or, in some fields, you would learn nothing at all, because you would hit a
brick wall of your lack of understanding basic concepts that are taught in
some of the classes you've dismissed in the article.

Though most of the fields in IT are reachable by people without external
training.

~~~
santaclaus
> because you would hit a brick wall of your lack of understanding basic
> concepts that are taught in some of the classes you've dismissed in the
> article

Ehhhh, it is possible to learn just about anything on your own if you are
interested enough. I have a coworker who didn't go to college but who has been
working through those little yellow Springer-Verlag math books for fun for 30
years, and is thus our first go to anytime some weird theory questions comes
up.

~~~
dozzie
> Ehhhh, it is possible to learn just about anything on your own if you are
> interested enough.

Not really. There are several fields that have two types of learning material
available: most basic and trivial stuff only good for showing off at parties
and academic books and papers, too difficult to learn from without guidance.
Unless "interested enough" means "you're ready to put in _enormous_ effort".

> I have a coworker who didn't go to college but who has been working through
> those little yellow Springer-Verlag math books for fun for 30 years

Of course there are exceptions. Who do you think _developed_ all these fields
if not untrained researchers?

~~~
gravypod
> Not really. There are several fields that have two types of learning
> material available: most basic and trivial stuff only good for showing off
> at parties and academic books and papers, too difficult to learn from
> without guidance.

Do you have an example? I can't think of anything in my field, computer
science, that can't be learned by self-experimentation and reading.

A good example of more hands-on science learning would be Cody from Cody's Lab
who has claimed to have done similar experiments dating back to his early
teens in highschool before he started his college education.

~~~
dozzie
Cryptography is one prominent example. Modern compilers would be another
(though an amateur can go here a little farther than in others, because of
parser generators and such). Operating systems more sophisticated than a toy-
grade proof of concept is yet another. And writing (again, non-toy-grade)
databases. And formal verification of programs, this is hard to learn on one's
own, too.

