
Self-Taught Programmers vs CS-Educated Programmers - freshfunk
http://chezpete.posterous.com/self-taught-programmer-vs-cs-educated-program
======
kenjackson
_But before I went to college I was self-taught and after college I consider
myself to be self-teaching all the time. Learning should never end._

And while in college were probably self-taught too. As an ex-academic I
believe formal education is about credentialing. Being able to tell someone
that you've acquired a degree of mastery we believe is appropriate to some
level. And that's fine, but I fundamentally believe that all learning is
really self-taught.

Someone lecturing to you is just a different medium from reading it in a book
or online video. In all these cases someone who knows the topic better than
yourself has manifest some information in some way for you to learn. (It's not
like anyone using the term "self-taught" actually means they learned how to do
AI from first principles. They learned it by reading a book written by Russell
& Norvig.)

And with that said, let me say that CS isn't programming. No more than a
degree in biology is the same as being a doctor. In fact the profession of
doctor is so specialized they created a special degree just for it, with
residencies in specialties -- and you don't need a bio undergrad degree to get
into med school.

And as a general rule, if you're passionate about an intellectual pursuit
you'll probably be pretty good in it (not asserting how the causality works).
Those that learn via books outside of a formal setting are self-selected as it
requires a special type of discipline. Although as more people race to become
founders and teach themselves, this pool probably gets diluted.

~~~
bartonfink
_As an ex-academic I believe formal education is about credentialing ... but I
fundamentally believe that all learning is really self-taught._

As an ex-academic with this view, how much stock do you put in credentials?

~~~
kenjackson
Credentialing is useful, especially in cases where other forms of information
are difficult to obtain.

Medicine is a good example. As a patient you don't really have the expertise
(and maybe not the time) to determine if your physician is of good quality.
You rely, partially, on the credential received by getting a medical degree
and passing the boards. While not perfect, it gives you some information.

The same goes for computer science. If I were looking for an expert witness
for some computer science related legal case I'd take their credentials into
account -- in part because a jury will.

But hiring a _programmer_ is different. Like I said in my original post a
computer science degree isn't a programming credential. There's some overlap,
but the degree of overlap is variable and generally unrelated to program
quality -- Stanford tends to have a lot more pragmatic "programming" courses
than MIT, at least historically.

Additionally with hiring a programmer you, the person doing the hiring is also
usually an expert in the field. You can more easily ascertain their degree of
knowledge and aptitude in areas you care about. Plus you have more time to do
so (you'll usually get a full day if not more to question them).

Now with that said, do I consider CS degrees when hiring? Honestly it depends.
If I was hiring someone to do some signal processing work I'm more inclined to
look for someone with graduate degree background in the field, as a starting
point. It's a domain that tracks closely to foundational work. OTOH, for a web
dev I'm just as likely to hire someone who dropped out of high school as a PhD
-- since frankly the PhD probably has spent less time doing web development
than anyone else. But in all cases, if you come to me with some asset that
shows great skill in what I'm looking for -- maybe a portfolio, or a paper you
wrote, or a program, or a recommendation from someone I respect -- that will
always get you in the door, period.

~~~
sevenproxies
Unfortunately that isn't an efficient solution when you have hundreds of
applications to process. Perhaps this is why degrees are often required for
entry-level software positions as someone with a degree is seen to be better
employees (compared to the high school drop outs).

------
pkaler
The one difference I see is that CS Educated Programmers that went to good
schools took a lot of math.

I have met very few self-taught programmers that also happen to be self-taught
mathematicians. This limits the type of code you can write.

Linear algebra is required to deeply understand computer graphics.

Calculus is required anywhere you have signal processing. This means audio and
video editing.

Physics is required for simulation software and video games.

Discrete and combinatorial math is required in systems software like
databases.

You're just not going to hit these issues if what you do all day is glue
Javascript and Ruby together.

~~~
jawngee
Huh?

I'm self taught, the last math class I took was 9th grade Algebra.

I wrote one of the first vector based, anti-aliased, alpha channeled UI
frameworks for Windows 95 (16 bit!). I wrote a DSP processing engine for a
telemedical application to monitor heart rate and blood pressure in 1997. I've
written control software for elevators. I've written contract after effects
plugins for post fx shops. I've written audio and midi sequencers. My video
editing app, Shave, is the only other useful editor in the Mac App Store other
than iMovie.

I've never cracked a math book.

Am I the exception that proves the rule? I'm not saying I could write Maya,
but I think you are overvaluing your opinion a little.

~~~
Jupe
Similar story here - I taught myself 68000 assembly by hex-dumping the opcodes
out of the only compiler I could afford (i.e. free), and then taught myself
calculus to find the tangents along a bezier-curve for my flagship product at
the time (a 3D editor/converter, which eventually sold quite well)

I've also had the severe displeasure of working with CS grads who couldn't
figure out why a 54MB file wouldn't fit on a floppy disk, or asked "where _is_
the .EXE" when working on a windows web site.

I'd take a motivated "self-learner" over a paper-backed "scientist" any day.

------
entangld
Geez where do we get these stupid fallacies?

>"There are some things that can't be self taught."

Do books not matter anymore? The most brilliant ideas ever conceived and
implemented in society are written down. All information that goes into your
head comes in as a concept in some form or another. If it can be
conceptualized, it can be communicated (whether in a class, a book, or
experienced through trial and error). What we're really saying is there are
some concepts that self-taught programmers aren't discovering. Point them out
and they'll find them (they're in books).

School is awesome. I went. But don't believe the hype.

~~~
jcnnghm
Some people actually believe it isn't possible to learn sufficiently complex
things without instruction. I suspect this is because they themselves are
unable, unwilling, or have not tried to learn without instruction. I had a
professor that insisted I was cheating because I was able to get A's on
projects and tests in a C course, but did not attend any classes or
discussions. He insisted that it was absolutely impossible to learn C without
taking a course and attending the lectures.

~~~
nwmcsween
I believe you can learn whatever you wish, but depending on your field of
study it's pretty hard procuring multimillion dollar machines used in some
(chemistry, nuclear sciences, etc) sciences.

~~~
rch
Um.... <http://aws.amazon.com/>

~~~
jat850
AWS kicks ass, but it doesn't (yet) offer scanning-tunneling electron
microscopes or particle accelerators to the best of my knowledge, which might
be what grandparent was referring to?

~~~
invalidOrTaken
AWS April Fools 2012, I just know it.

~~~
TillE
If Congress slashes Dept. of Energy funding (which seems likely), RHIC is
going offline. Amazon could buy a particle accelerator.

------
silentbicycle
Also, there are many kinds of self-taught programmers. Some are task-oriented
learners* , and will learn CS concepts they encounter on the way to achieving
their underlying goal. (This seems to be the kind the article has in mind.)
This has its problems. For example, rather than realizing that their problem
is easily solved with parsing tools, they may just lean harder on the regular
expressions they already know. Learning within a classroom setting would
direct them to ideas they may not otherwise encounter, nudging them out of
local maxima.

Others self-learners try to get a full overview of whatever niche they're
working in. Perhaps they've been burned by missing concepts from purely task-
oriented learning, or perhaps they find having some big picture understanding
makes finding practical applications easier. (I fall into the latter.) One
problem with this group is that learning everything by breadth-first search
can take a while - I wrote a web server from scratch to figure out how web
programming works, while some people would be content just going through a
Rails tutorial or something. That kind of perpetual, open-ended research
really adds up, though.

* just making up terms here.

~~~
kragen
> Perhaps they've been burned by missing concepts from purely task-oriented
> learning, or perhaps they find having some big picture understanding makes
> finding practical applications easier.

Or we just like to learn, or we've been told by people we respect that we
ought to be better grounded in theory. (Both are true in my case.)

~~~
silentbicycle
I guess I took those for granted. :)

------
onan_barbarian
In response to a post about raising smart kids on Slashdot a long time ago,
someone posted this:

"Uh-oh, the ground is trembling, (Score:4, Funny) by Anonymous Coward on
Thursday November 29, @08:06AM Small mammals are scurrying for cover, All the
birds have taken wing.

The hordes of self-proclaimed geniuses who wander the halls of Slashdot
approach."

This is possibly the Hacker News equivalent of that topic. It appears
impossible to have these discussions without the whole thing degenerating into
thinly-concealed self-praise.

'Self-taught' vs 'CS-educated' covers such a wide range as to make the
question almost meaningless, in any case. Even among CS-educated people, most
of us have progressively forgotten and relearned so much as to have way more
in common with 'self-taught' than we'd care to admit. For example, I took
computer architecture courses in both undergrad and grad school, but pretty
much forgot it all and relearned almost everything that I know about it now in
a very different context (high-end x86 that didn't exist back when I took comp
arch). Much of what I 'knew' then isn't even true anymore...

And 'self-taught' could mean "ploughed though Cormen, Leiserson and Rivest +
TAOCP + SICP + Hennesy&Patterson" while CS-educated can equally mean "took a
bunch of Java courses and dodged all the hard stuff I could".

------
jarin
I'm a mostly self-taught programmer (I took a class on QBasic and a class on
Visual Basic in community college).

At the risk of generalizing, self-taught programmers tend to learn things as
we need them, since our primary focus seems to be on making features or making
products.

I will say that I greatly appreciate the academic programmers though, as
without them I wouldn't have any tools to work with. I have no drive to create
a new database storage engine, a more efficient bloom filter, or an
experimental programming language, but I'm grateful that someone gave me those
things to play with.

------
gnaffle
My experience is that CS-educated programmers will often be more humble and
ready to admit that they might not know all there is about a subject, and
self-taught programmers more certain that they know the one way to solve a
certain problem.

Of course, this might just be the people I've met, but based on personal
experience, I think university teaches you that you're _not_ the smartest one
in the world, that there are lots of things you don't know, and that things
are usually not as simple as they seem.

That said, a lot of the self-taught programmers I know get more humble as the
years go by. And of course, all the great CS-educated programmers I know
learnt programming in their spare time, and got the theoretical and low-level
background at uni.

------
yelsgib
I think this statement is funnily self-negating: "I already understand
grammatical structure, the relationships between subject/object/verb and the
uses of prepositions." This guy must be learning Romance languages (e.g.
surprise! he's learning Portugese) since languages outside of this family
differ in a lot of ways. E.g. all the things here can and do differ:
[http://en.wikipedia.org/wiki/Romance_language#Linguistic_fea...](http://en.wikipedia.org/wiki/Romance_language#Linguistic_features)

This sort of euro-centric natural language egalitarianism seems to bleed over
into his thoughts about programming languages as well, e.g. those expressed in
this statement:

"Learning a new language simply teaches me to communicate the same thoughts
and feelings but in a different way."

This is wholly false. Languages differ with respect to their requirements for
self-description. These requirements, when propagated into code through the
actions of a large community, shape the types of programs that are written and
how those programs can be expected to interact.

For instance, part of the reason that Haskell programs can be very short, is
that the type system on which Haskell is based is extremely deeply thought out
and based on a rich mathematical framework. This framework allows the programs
to be self-describing in a consistent and meaningful way and for that self-
description to be used to express ideas more clearly.

Ruby is self-reflecting through a sort of imperative set of meta-programming
techniques. This allows "conventions" to exist in ruby code which enables a
framework like rails.

Etc. etc.

When will people realize that not all languages are created the same? Language
shapes culture and culture shapes language. Once you put a stick in the ground
and decide where features will be located and how they will be inter-related
you are planting the seed for all sorts of complicated emergent behavior.

It's true for natural languages and for programming languages. This guy just
seems to have missed the ticket.

------
KeyBoardG
The problem here is that you can't group all of one type together. There will
always be brilliant self-taught programmers. From my experience in the field,
however, is that self-taught will often take the first solution over the best
solution, or will pick the best solution to their particular problem without
thinking enough about coding standards or clean integration into the code
base. There are plenty of tools out there to ensure this kind of thing in
other languages, but I don't often work with those.

Of course, there are also many schooled programmers which may be able to think
critically but lack the ability to go from a program to a product.

But not all of course... you can't make these stereotypes without starting a
flamewar.

~~~
bendmorris
"self-taught will often ... pick the best solution to their particular problem
without thinking enough about coding standards or clean integration into the
code base."

I disagree that getting a CS degree has a positive effect on your ability to
write clean code or adhere to coding standards. Those things come from work
experience. I would argue from my own experience that self-taught programmers
are better in this respect. The majority of code I see written by CS academics
and students in my department is hideous.

------
joelburget
I tend to agree with Mark Twain on this point: "I have never let my schooling
interfere with my education."

For me, I have learned more outside of school than I have in it. Really I'm in
it for the diploma. I wish companies would look at your software rather than
your certificates, I think they would tend to find better developers. I know
some companies are good about this but the reality is that programmers do need
to go to college if they want to compete for jobs.

I will say this for school: it fills in gaps in education so companies can
expect some standard knowledge from everyone. Also, it can be helpful for
people that don't have the motivation to learn on their own.

------
EMRo
Agreed on the math point. I took CS50 (Introduction to Comp Sci) at school my
Senior Year and being that my focus was directed mostly to kegonomics, I
didn't quite get as much out of the course as I should have. I also took
"Bits" which is watered down Comp Sci though the professor Harry Lewis said
Zuckerberg got a C in it (?!?!?).

What I did learn was the basics of putting together algorithms and "thinking
like a computer." For a guy who studied Social Anthropology and whose last
math course was in High School, you can imagine the nitty gritty of building a
C search algorithm was difficult to get at first glance (Linear search, bubble
search my a$*).

To cut the BS:

1) CS I took was broken into discrete testable units. For each problem set
there was a core CS theory that you needed to understand to be able to finish
it. Some were less functional (ie arcane data structures), others were basics
of programming that anyone should know like the back of their hand (pointers,
data manipulation etc).

2) When self-teaching, you tend to pull together bite size chunks of important
info necessary to solve a particular problem rather than building a solid
foundation. If you're completely self taught, you'll miss 101 level theory
points that may help you later when tackling a known problem that has a
solution or is nearly impossible. That said, in self teaching myself, I've
cobbled together quite a bag of tricks as well as the resourcefulness to pull
up any info I need to solve a problem and absorb it quickly. I've yet to meet
a problem I couldn't tackle just because I wasnt a "CS Educated Programmer".

Through the course though, the biggest takeaway for a non quant type like me
was breaking problems down into discrete parts solved and tested by logic
loops (read: thinking like a computer). The basic structures and solutions to
problems involved I still use today when I program for the web.

------
kailashbadu
Someone who is CS educated but hasn't done a great deal of _self-teaching_ in
programming is going get a heart attack when applying for his first job.

------
kirbman89
I see too many programmers that get in it for the money and not the passion.
Having passion removes the need to be formally instructed. Passion gives
people the drive to excel and be the best. However, you do get a big picture
view of what's going on having earned a degree. The slackers tend to be the
non-self-teaching among us.

------
shriphani
I once read something to this effect from Oded Goldreich's book (his book on
Computational Complexity): Knowledge is the result of hard computation on
publicly available information. I think getting a formal education definitely
aids the process of learning. Otherwise how do you get around Meno's paradox
(i.e. how do you enquire about something if you don't know of its existence?)
? And self-taught programmers definitely would benefit from some structure in
their education (again - the structure is decided by a formal CS curriculum).
I have been trying to learn signal processing over the last couple of years
and I found that OCW + Berkeley webcasts took me a lot farther than random
googling about how to accomplish something.

------
onassar
"Learning a new language simply teaches me to communicate the same thoughts
and feelings but in a different way. This is the same with programming
languages: you accomplish the same tasks in a different language that has
different syntax."

I liked that. A computer language, or CS, are both, for me, means to turn an
idea into reality. I don't think it necessarily matters which way you were
trainer, so long as the idea you're trying to execute gets done. Success
either way imo.

------
lowprofile
I would have very much liked to have a CS education (I have an MS in
Neuroscience), but did not really know I had aptitude and a passion for it
until later in my life. I took the long self-taught route to programming being
very task driven, ie the first business I started needed certain things so I
just did it. Was it ugly? oh heck ya! To some degree it still is, but for many
years it has more than payed the rent.

I very much miss a mathematics background but these days there are many
sources of information that can and do aid in the solving of programming
problems.

I have railed against "credentialism" for years because ultimately there have
been many people I have worked with who were capable of many tasks but not
allowed to the opportunity because they lacked a degree, but not the skills.
And don't get me started on people doing the identical job but one getting
more due only to a degree.

A credential tells me what you might be able to do, a body of work shows me
what you can do.

------
kunalb
A bit of background about me before I add my 2 cents: because of my rank in an
entrance examination (JEE), I ended up majoring in Civil Engineering and
managed to work towards a minor in CS (which was, and is my passion). I'll be
graduating in a few months.

I've experienced a bit of both worlds—I picked up books on Data Structures
(including Red Black trees), attempted to implement Rjindael in C++ (without
understanding any of the underlying math) in high school, learnt
PHP/JS/CSS/C++ and started building from there.

What I've observed is—as a self taught programmer the biggest disadvantage is
that you don't know what all is available/standard—as someone else mentioned
in the thread, I did not know about parsers until I managed to take a course
in Programming Languages.

Since I realized that there was so much I did not know, I've tried to make it
a point to keep asking my batch-mates in CS what they are reading, picking up
textbooks recommended by professors in class; reading other books as
recommended on HN, and elsewhere (SICP, Learn you a Haskell..., started
reading TAOCP, etc.) and have attempted to at least match my batch-mates who
are CS undergrads. At the very least—try to get a fairly broad idea about
known solved and unsolved problems.

The biggest advantages an avg CS undergrad has over me is that s/he has the
credentials (which, I've tried to match by having my own open source project,
doing interns in well-known companies, etc.), and that s/he is exposed to much
more theory than I would ever be without actually having to do much beyond
attending classes (for which I have to go the extra mile).

The advantage _I_ have over the other, standard CS guys is that I have the
freedom to find out more about what I really want to do, and explore/follow
certain areas which I find more interesting without being bound by academia
(tests, reports, stupid & pointless assignments), and in general, perhaps—have
a lot more fun while learning.

------
nwmcsween
There is no divide, like anything in life if a person simply uses it as a
means to an end then the product is going to reflect this. This is true with
anything.

------
dean
" _I think computer science students who've spent a lot of time doing research
(particularly Ph.D.s) gain something that can't be self-taught._ "

Isn't research the very definition of self-taught? You're learning as you go
-- no one has defined the path yet.

~~~
jtheory
I think this the the point -- that in general someone who is _not_ in a PhD
program generally won't spend such a huge amount of time focused purely on a
very narrow but deep problem.

There are obviously exceptions to every rule, but I think this is a good
point. Most folks who are NOT in an academic program don't take out loans and
stop work on all practical projects for 3-5 years to focus like this.

I'm not very familiar with the CS PhD world -- I'm very much in the self-
taught category, personally -- but I'm married to an author who got a (fully-
funded) MFA in creative writing. It was great -- not because the profs were
teaching anyone how to write (if you didn't already know, you didn't get into
the program), but because it gave her a couple of years out of the real world,
focused entirely on her writing, surrounded by very supportive & similarly
focused people.

------
antiterra
Am I missing something, or does this article basically say: within the domain
of self-taught and c-educated programmers, there are groupings with various
levels of theoretical and practical skill?

It seems it wouldn't be a stretch to say that, "cs-educated programmers"
aren't even really identifiable by trait, since course selections made by both
the university department and the student can change the curriculum
unpredictably. The same could be said for "self-taught;" in my experience,
half the people in cs-related math or theory classes just read the book and
don't bother to attend class anyway.

------
simonhamp
This feels a little late to the game, but many of the comments here (as well
as the original post) have crystallised some ideas I was writing:
[http://scrumpy-jack.com/post/4374327890/learning-should-
neve...](http://scrumpy-jack.com/post/4374327890/learning-should-never-end)

It's a slightly different slant on the topic, not taking up any one side, but
perhaps self-taught people (in any field, not just programming) are inherently
more passionate about learning?

------
yanilkr
If a person can teach himself/herself something non-trivial like programming,
I am sure (s)he can easily learn what is academically taught. The learning for
self learned-programmers is mostly driven by need, unlike in a college
setting. The toughest skill to learn is teaching yourself which not many
people learn at college/university.

------
heresyforme
The best programmer I met in college quit after 2 semesters because he already
knew the concepts.

However, aren't we really talking about IQ? From what I can remember,
companies really started using degrees when testing for IQ became illegal. If
a possible employee has an IQ of 120, then you can be pretty certain he's
going to pick most of the concepts you throw at him. The college degree
filters (beginning with the SAT, ACT, and high school diploma) a lot of low IQ
people out the process (at least, in theory) and if not, it at least filters
out those individuals who don't work hard improving their mental capacity (for
instance, cognitive abilities may be improved through the study of music).

What an employer really needs is the ability to quickly filter out bad
candidates. In reality, it is HR that does the culling. They don't know how to
filter technical candidates, so the first thing they use is the college
degree.

------
smithbits
"The truth is that for some it does and for some it doesn't." A pleasantly
reasonable thing to say.

------
neilalbrock
I'll be honest and say that I'm a CS dropout who's never felt like any kind of
maths wizard. I didn't enjoy the CS course I took back when I was 17 but that
never stopped me from pursuing a career in the field that I'm passionate
about.

Since that time I've taught myself everything I needed to know and never
really felt the poorer for it. It's not easy and a degree is a great
foundation but it's exactly that, a foundation. What comes after graduation
day is a lifetime of learning.

If you really want to pursue programming, to any level, it's your passion and
willingness to keep learning and pushing yourself that will ultimately
determine how successful you are. Degree or no degree.

------
hessenwolf
Uni makes you learn really boring shit that you really don't want to learn and
don't think is relevant at the time, and then gives you a credential. Both of
those aspects should not be underestimated.

------
humbledrone
The plural of 'anecdote' is not 'data'.

Is anyone else who's been following this discussion disturbed by the absolute
paucity of any hard evidence to support any of the arguments given?

It appears to me that nobody (including me) actually knows anything,
statistically speaking, about what the differences are between self-taught and
CS-educated programmers. Everyone has an opinion, and some anecdotal evidence
(I worked with ... or I've met ...), but that's a far cry from hard data.

Is anyone aware of any studies that might shed some light on the topic?

------
Killah911
In the tech world I think the only time it matters is when you're a noob. A
college degree give some credibility to landing a job etc. But if you've got a
proven track record developing kick-ass software, that's what will keep your
career moving. As far as interacting with other college student and networking
goes that can be pretty easily be done by hanging out at with the right crowd
online (like here!) or at other professional settings in the rel world.

------
Joshim5
One thing to consider is that some people are not of the age to earn a degree
yet. I am a high school student and people asume I am not capable or competent
way too often.

------
ef4
There's no contest between a person who spent their childhood messing around
with computers and somebody who's trying to learn it all in school.

I think CS degree programs are actually most valuable for people who already
know how to program. You get to spend the time refining your art, whereas
somebody starting from scratch barely has time to become competent.

------
DrHankPym
I don't think it matters how or where you get started in the business, so long
as you keep hungry to learn more.

------
malouie
I've seen that self-taught programmers can reach the equivalent of programmers
educated at top universities. _However_ , the self-taught programmers rarely
specialize like those with Masters or PhDs in say, machine learning, data
mining, information retrieval, and so on.

------
joshfraser
I learned programming in college in spite of my classes, not because of them.
I was doing 3x the coding outside of class and learned way more practical
stuff that I'm actually using today. College taught me way more about dealing
with people than with code.

------
grigy
University taught me to learn and then I picked up the rest myself. Is this
called self-taught or formally educated?

------
devan
Self taught programmers are more passionate.

my 2 cents.

------
michaelochurch
This is an either/or fallacy. To be excellent, you need a mix of _both_.
Formal schooling isn't required, but you generally need to have been exposed
to other smart people, many more experienced, because otherwise it's
impossible to tell what self-study will be fruitful and what not. So some form
of instruction, whether it comes from school or from a lucky landing in the
work world, is required. That said, if you're not autodidactic to some extent,
you're going to be unable to grow.

By the way, I've learned a lot of those "skills that self-taught people lack"
on my own. Lambda calculus and type theory I hadn't even studied till I was
24. I'm not an expert on either, but I know as much as a well-educated non-
expert (i.e. I know what the typed lambda calculus is and why it's
interesting, I know about System F as the basis for ML, et cetera).

------
ignifero
As an outsider (i studied physics), I always thought computer science was NOT
about programming. I find it fascinating that you CS people can work on the
foundations of computation, like P=NP (see, only know the basics). Programming
to me seemed a very pragmatic thing: you learn as you go. Need to build a
parser? read parsing theory. Need to do text mining? learn it. In that sense,
i don't think there are "CS-educated programmers". While everyone can benefit
from taking an introductory course, in the end everyone becomes self-taught

~~~
gte910h
While it is true, computing requires repetitive, continual retraining, I
disagree about the parsing/logic/etc stuff.

In class you're taught principles of X Y or Z and how they relate to Q V and
R, or at least they do.

When haphazardly picking up skills, you often do not come across the greater,
abstract ideals, and instead see craftsman level heuristics to solve a
problem. For your example, the parser thing, recognizing if you need an
parser, a regular expression engine, or a simulator is a pretty heady,
abstract thing for some cases. Very few people would ever educate themselves
on the difference between the cases just to do so. But that difference is one
of the ones a college trained CS grad should have.

