Ask HN: Best way to learn the CS background I missed by not going to school?
I'm not sure if this is the right place to ask if it's not I apologize. This is my first post to HN.<p>Background: Basically I've been a developer for almost four years now. I started as a front-end developer writing HTML/CSS/JS, but quickly moved to the back-end writing PHP. Before now I've considered myself a decent developer, but lately I've been feeling burnt out and have been looking to move to a position that would make me happier. I've been looking at Ruby/Rails positions on the various job boards and I really feel like I don't have enough CS knowledge to land any of these positions. I'm feeling more and more like a copy and paste PHP developer. I mean, how can I get a job that is asking for engineers to apply? I really got a punch in the face when I read through a post on Stack Overflow about lesser known data structures like Ropes, and Bloom Filters, and Skip Lists. I have ZERO understanding of this kind of stuff and I think it's going to hold me back in my career.<p>What's the best way to learn all the stuff I missed by not going to school? Are there CS books or technical papers that are pretty much required reading for CS students? Should I take some open courses on the web from places like MIT or Stanford?<p>I can't live my life as a jr. PHP programmer... I'm feeling burnt out as it is, working on the same enterprise app for an employer that won't embrace open source or even new technology!<p>Help me hacker news, you're my only hope.
13 comments
[ 5.2 ms ] story [ 37.2 ms ] threadThe short of it though is to study the same stuff. There is a lot that a CS background will fill in for you which you won't tend to learn on the job.
I'm trying to learn the basics of a new language every week for 6 months. Then I'm going to focus on the ones I like best and dedicate a few months to learning the ins and outs of each language.
Thanks for your reply!
It is one of the classic CS textbooks still used by Berkeley (CS61A) and MIT (not sure) intro CS courses. Its not trivial stuff. While it wont teach you obscure data structures like ropes, it will expose you to a wide variety of topics including but not limited to: functional programming, lambda calculus, OOP, logic programming, client/server programming, non deterministic programming, streams as data, the meta-circular evaluator, lazy evaluation, and concurrency. I had a fairly strong CS background before taking CS61A at Berkeley, but this book (thanks to Scheme) taught me how beautiful computer science can be. Now working in Java is a complete turn off ;)
Start here, follow the topics you have not tried yet: http://www.tuxradar.com/practicalphp
What's the best way to learn all the stuff I missed by not going to school?
how can I get a job that is asking for engineers to apply?
You need skills that those engineers have.
You don't need to go to school to master the data structures and algorithms, for reference there are bunch of university resources available, and there are lot of implemented code for us to checkout. Refer links others have suggested here. Give some time to learn these advance topics.
Edit: added few lines
I meant it more as, trying to get work in Ruby, or Objective-C makes me feel lesser of a developer, as IF I was a copy and paste coder.