

Ask HN: What wont you learn (probably) as a self-taught programmer? - the_cat_kittles

I have spent the past year writing python, primarily for statistics and data mining, but also for websites with django. I haven't worked in a professional setting since last year when I wrote 100% entry-level php. I haven't taken any cs courses, and I'm wondering what valuable skills I'm probably missing. I know there are many :)
======
viscanti
Obviously it depends on the person. A self-taught programmer is likely to miss
out on the idea of abstraction (data and code) early on. Lots of things might
just seem arbitrary or "magical". A solid CS curriculum will do a good job of
showing the "big" picture that can be missed by a self-taught programmer.

That said, there aren't any magical skills taught in CS courses that you can't
easily find online. Teaching yourself gives you the advantage of being able to
focus on what you find interesting, and can get you in the habit of
continually learning. You can never know enough, so getting in the habit of
teaching yourself something new all the time is great.

Things you might have missed include pointers (how they work), thinking
recursively and building a compiler. Those are all used to weed out weaker CS
students. I think the key for self-teaching is to get to a point where things
no longer seem arbitrary or magical. From there it's easy to see what you like
and don't like, and focus on what you're really interested in.

------
0x12
The biggest thing you will miss is how much better some of your peers (and
elders) are, who they are and where you can find their stuff. This has gotten
a lot better since the web came around so you have an easier time of it than
some old hand autodidact.

Self taught programmer here, it took reading a pile of source code and a bunch
of links posted on HN for me to realize that I wasn't half as sharp as I
thought I was.

Pretty humbling, the upside is that now there is more to learn.

CS courses as such are not the main differentiating factor between self-taught
and not when it comes to quality, it is who you learn from, what and how.

If you teach yourself there are problems with perspective and breadth of
knowledge about the field as a whole where a mentor could probably make you
move much faster.

------
giberti
1) Architecture. Understanding what the actual hardware is doing when you walk
through a program. Knowing this can help answer questions like: Why does a
variable go out of scope? When a data file might benefit from an index.

2) Algorithms. Learning the math behind why one approach is significantly
faster can change the way you think about solving problems.

3) Approach. More advanced thinking around handling information. Why might you
use a btree vs a linked list etc. Can I achieve the same result using less
memory?

------
andrewcooke
back in the day when i was "bootstrappping myself" i decided the answer was
functional programming and compilers. i don't regret for a minute looking at
both of those (i was a hipster haskell programmer - using it _way_ before it
was cool... ;o)

these days functional programming is pretty much mainstream, but more
declarative approaches are still quite obscure - i think learning a little
prolog and datalog helped me better deal with sql, but i still don't feel
comfortable with these topics so have recently been trying to understand more
using stack overflow as motivation (latest attempt:
[http://stackoverflow.com/questions/7076349/is-there-a-
good-w...](http://stackoverflow.com/questions/7076349/is-there-a-good-way-to-
do-this-type-of-mining/7237972#7237972)). i also feel i am slipping behind on
distributed computing, so i guess i should be looking there next.

(i only started using stack overflow "seriously" about a month ago and i think
it's great for learning - you can treat questions at the edge of your
expertise as homework, or just read other people's answers).

