
Ask HN: What do I miss as a self-taught developer? - ess3
Hey! So I&#x27;m a self taught web dev and the hardest part of that, I feel, is discovering your unknowns and getting validation of your knowledge. These things come naturally by having a CS degree.<p>What are the most common knowledge gaps a self-taught developer has and where&#x2F;how can one find out about them?
======
jstewartmobile
I wouldn't assume too much about a CS degree. If I relied solely upon what I
was taught in college, I wouldn't be able to get a job. It was sheer
providence that some of my profs were so bad that self-directed study was an
obvious necessity.

Best advice I could give to any professional is to ACTUALLY READ the great
books of the field. Everyone wants the distillation and the cliff's notes
versions, and a lot gets lost in translation. There are a lot of threads on HN
where people recommend their favorite programming books.

The other thing would be the old "harder you work, the better you'll get"
adage. Book learning can only take you so far.

~~~
inimino
Textbooks and practice! That's all it takes.

------
hluska
I dropped out of a CS program because frankly, I was writing useless code for
one-off assignments and solving problems that had last baffled me in high
school. I remember spending my days solving tremendously boring problems, then
running home to quickly remind myself that I actually enjoyed programming. I
ended up moving over to business and then dropping out entirely when I started
my first real company.

Years later, I went back to school and finished a degree in marketing. Oddly,
I wrote way more useful code while I was studying business, and developed a
tremendous sense of navigating client expectations versus technical
limitations.

My background might influence my answer - I have had an interesting career
despite (or perhaps because of) my marketing degree. I'm not convinced that I
would have accomplished the same things with a CS degree. Accounting (my first
business major) and marketing helped me look at technical projects in terms of
market opportunity vs cost.

That said, I have missed out on things. When I work with young developers and
the subject of Big O notation comes up, I am usually at a complete loss. I've
also had to invest quite a bit of time reading large, well maintained open
source projects. I simply don't have much formal training in algorithms or
design patterns and so it's nice seeing them implemented in projects that I
use.

Also, I occasionally wonder about things like the strength of my network.
Maybe a CS degree would have given me the chance to meet a few more people who
could help me in my career. It seems like the vast majority of the people I
graduated from business with work for banks. I can think of a dozen ways I'd
rather torture myself than working in a bank...:)

------
jfaucett
I understand where you're coming from completely. I worked as a software
developer for about 5 years before starting an MA in CS having previously
gotten a BA in the humanities.

To answer your question, the biggest knowledge gaps for me where in the
following: Mathematics, Physics and just being able to parse and understand
theoretical stuff like books and articles on information or complexity theory.

The biggest thing that has helped me has been to just do tons of math, i.e.
working through calculus, linear algebra, combinatorics, probability theory,
etc. and once you get relatively comfortable with these subjects most of the
"CS Theory" stuff seems pretty simple IMO or at least easy enough to
understand and apply.

From experience, I can also tell you the theoretical stuff is generally the
biggest gap all developers have whether they have a degree or not, simply
because they are developers not theorists and rarely if ever use 90% of the
theory except perhaps O-Notation.

So my advice would be to do lots of math/physics in your free time if you're
not already really comfortable reading and comprehending more advanced "math
texts". Once you get comfortable there, I'd just read the following books till
you understand and can apply them, if you do that you will probably know more
than 95% of software developers out there.

Books:

1\. Introduction to Algorithms (by Cormen,Leiserson,Rivest,Stein)

2\. Introduction to Automata Theory, Languages, and Computation (Hopcroft)

3\. All of Statistics (Larry Wasserman)

------
EJTH
You probably missed out on some of the exiting algorithms that all CS students
learn, but don't worry I think few knows them without looking them up years
later.

It is hard to know what you have missed, since you specificly say webdev, you
can get by with very little knowledge and still make functional websites. Im
guessing that low level stuff is what you are probably missing, maybe some
design patterns.

I think the best way to get validation of your skills is to get your work peer
reviewed, either by working in a shop that actually does code reviews or
participating in open source or even just putting your own stuff on github.

~~~
tyldum
I am a developer without a programming degree, and I am lacking terminology. I
often see the solution to a problem, but I don't know what pattern it falls
into and the proper name for it. That makes it harder to find libraries or
literature which again results in me reinventing the wheel in a poor way. If I
had more savvy co-workers it would probably have helped, but we are all in the
same boat.

------
itamarst
Can't say I learned much useful from getting (most of) a CS degree. I dropped
out to get a programming job, which was much more useful :)

So good news: you didn't necessarily miss very much. Get a basic
algorithms/data structures book and skim it, and you're good to go.

But like all programmers there's lots more to learn, and mostly you will learn
it on the job from coworkers. Things like testing and API design and
performance analysis.

[http://sijinjoseph.com/programmer-competency-
matrix/](http://sijinjoseph.com/programmer-competency-matrix/) is useful (you
don't need to be top at all of it, though!) but leaves out a lot of important
skills.

~~~
ess3
That seems like a pretty useful link. Also looking at it I feel pretty
confident that I didn't miss out on too much like you said. I guess it's just
a matter of overcoming some kind of social phobia of being seen as a "you will
never become a real developer"

~~~
itamarst
Just be aware of the things it's missing: it mostly focuses on implementation
skills, but diagnosing problems, finding solutions and teamwork skills are
also very important.

Not that you learn much of those at school either :)

------
bjourne
Complexity analysis, ability to explain and implement sorting algorithms on
your own, understanding of threading, mutexes, semaphores and all that.. Think
of the difference between knowing how to program sql and understanding
relational algebra and normalization forms.

Perhaps you can figure out what you don't know by looking at the study
schedule for a computer science program?

------
ishbits
Algorithms perhaps. Not necessarily known them all off hand, but at least
knowing the existence of a variety of them so you know when to use them.

Of course this can be done with self study as well.

------
h1d
I've self taught for quite some time and being a solo but yes, with a single
mind you can miss on something obvious.

Since no one will fill you in, you should go check some well written open
source projects to see how others solve problems.

------
jamesmp98
Ha I'm too scared to try to get a job, because I suck at algorithms. I can
develop a product, but I don't have a degree and I cannot do that algorithm
stuff well at all.

------
happycodework
Algorithms datastructures OOP? Softwaredesignpatterns

hardware, chip, logic gate design. Asm.

inheritance, templates/generics

compiler design, some math stuff

fizz buzz, fibonacci, fucking sort functions, and palindromes

(From what I've seen from other devs)

~~~
happycodework
Oh and ternary operators and bitwise operators

~~~
EJTH
Why ternaries? I can understand why a web dev might not know about bitwise
operators though...

------
Raed667
For me school was mostly a place where I discovered concepts that I didn't
know that I didn't know.

