Hacker Newsnew | past | comments | ask | show | jobs | submitlogin
Ask HN: Best way to learn the CS background I missed by not going to school?
18 points by brandoncordell on May 28, 2011 | hide | past | favorite | 12 comments
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.


Structure and Interpretation of Computer Programs http://mitpress.mit.edu/sicp/full-text/book/book.html

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 ;)


Thanks choochoo! That's something like I was looking for! How's the book for someone with no formal CS background? Is it something I can just into now, or should I use another book as a stepping stone.


From next time write the code yourself and minimize the copy/pasting habit as much as you can. Using a good IDE helps control the copy/pasting habit to some extent.

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


Thanks for your reply. When I said copy and paste PHP developer, I didn't mean I literally copy and paste. I don't think I've copy/pasted code in my work for a few years, except for a few times I just needed to get working code into a prototype.

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.


Others already recommended great books, but I think it might be helpful to clarify one thing. I'm extremely pleased with the breadth and depth of my undergrad education; I'd never encountered ropes, bloom lists, or skip lists. These are all concepts for very specific subsets of problems, so if you were just worried that you hadn't heard of them, don't be. If on the other hand you looked up their implementations and still didn't understand how they worked and couldn't compare them with more mundane structures then most definitely pursue the resources listed in this topic.


When I did this I looked at the books necessary for a CS degree from the University of Washington (but it could have been anywhere) and I read them. Nowadays it is easier. A lots of CS classes are online now. Berkeley and Stanford both have full classes in podcast format. MIT has OpenCourseWare which contains the notes and homeworks.

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


Why not trying googleing around for information on the topics. You don't necessarily need school to learn.



Shoot me an email and we can talk about it. I'm working on a related problem right now, so we might be able to help each other out. Address is in my profile.



If you have experience as a PHP programmer and only as a PHP programmer, AND you feel like you are a copy-paste PHP programmer... you need to program more. Plain and simple. Take on different projects. Use new different tools, just for the sake of having to learn something new or use a new framework or a new data structure or architecture, etc.


I only have professional experience in PHP and Perl. I've learning/using in my personal projects Ruby, Python, Objective-C/Cocoa, and Java.

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!




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: