

Ask HN: Best way to learn the CS background I missed by not going to school? - brandoncordell

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.&#60;p&#62;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.&#60;p&#62;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?&#60;p&#62;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!&#60;p&#62;Help me hacker news, you're my only hope.
======
choochootrain
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 ;)

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

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

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

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

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

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

------
helwr
[http://www.quora.com/What-are-the-most-learner-friendly-
reso...](http://www.quora.com/What-are-the-most-learner-friendly-resources-
for-learning-about-algorithms)

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

------
Jasitis
<http://cslibrary.stanford.edu/>

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

~~~
brandoncordell
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!

