Ask HN: What do I miss as a self-taught developer?

18 points by ess3 ↗ HN
Hey! So I'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.

What are the most common knowledge gaps a self-taught developer has and where/how can one find out about them?

17 comments

[ 9.5 ms ] story [ 47.2 ms ] thread
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.

Textbooks and practice! That's all it takes.
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)

Oh and ternary operators and bitwise operators
Why ternaries? I can understand why a web dev might not know about bitwise operators though...
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.

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.
For me school was mostly a place where I discovered concepts that I didn't know that I didn't know.
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/ is useful (you don't need to be top at all of it, though!) but leaves out a lot of important skills.

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"
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 :)

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...:)

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.
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.

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?

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)

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.