4 ms·
Ask HN: What wont you learn (probably) as a self-taught programmer?
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 :)
- 0x12 15y agoThe 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.
- viscanti 15y agoObviously 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.
- andrewcooke 15y agoback 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-way-to-do-this-type-of-mining/7237972#7237972 http://stackoverflow.com/questions/7076349/is-there-a-good-w...). 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).
- giberti 15y ago1) 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?