

Ask HN: Established developer with no CS experience looking to catch up - inceptor

Hi HN!<p>I've been an avid spectator here for about a year now and wanted to start by thanking everyone here for keeping me up to date on the latest and providing a source for me to read intelligent discussion on the things I care about.<p>As a bit of backstory, I got into computing when I was about 12 years old and programming shortly thereafter. I never accomplished much, but I learned the fundamentals as I bounced from VB6 to C++ to C# to Java to PHP and eventually found Ruby whilst serving a tour of duty in Iraq a couple years ago. I was going to attend school after I returned and get a CS degree, but something much more wonderful happened that prevented me from doing so.<p>One day while I was in Iraq, I read a blog post written by someone who would become one of the most influential figures in my life that had a profound impact on the way I went about doing my hobby projects. I emailed him directly to express my gratitude, and to my surprise he responded! We continued to correspond during the remainder of my time overseas, and I worked on a small Rails project that he had the idea for but never the time to do.<p>Shortly after I returned home, he proposed one day that instead of going back to stocking shelves at Wal-Mart as I had originally intended to do when I got back, that I come work for his consulting company as an intern, with the potential for a salary offer sometime down the road. Midway through the year and I was a full salaried employee working for a respected consulting firm, which was more than I could have come to expect in my wildest dreams. Our firm was acquired by a hot startup earlier this year, and I'm now still doing my dream job in the company of some of the most amazing people I've ever met.<p>One thing has been itching at the back of my mind ever since last year though, and that's my tremendous lack of knowledge when it comes to CS fundamentals. Algorithms. Data structures. Math. These are things that I see most people in my field around me excel at, and I often find myself stumped at the what would seem to be the most trivial problems when it comes to them.<p>So today I decided that I am once again going to try my hand at seeking the advice of people who are way smarter than me in the hopes that something profound will happen.<p>What can I do now that I already have the career of my dreams, with no time for school, to gain the basic CS knowledge that I find myself lacking in?
======
smharris65
I agree with groby_b that understanding concepts is the key. That's how you
can remember things that apply across any programming language. For example,
when I first studied Objective-C I didn't care about syntax. I wanted to know
the language concepts first. The "why". My first years as a programmer I
studied concepts at night. Coded during the day.

You'll probably want to buy some used computer science books from Amazon in
any language. First, lay a good foundation with the basics, but don't get
bogged down in implementation details. Instead, when you're reading ask
yourself what is the core idea? For example: "why would I use a hash table vs
a linked list?" "What's the purpose of CSS floats?" "What are closures in
Javascript?" "What makes an SQL query scan the entire table?"

Almost anyone can use Google to find an example of how to code something. But
ask those people why they wrote their code a certain way and most will give
you a blank look. They probably just copied some other code and didn't take
the time to understand it.

For web application development, make a study plan for each
layer(presentation: html/css/javascript, business logic:data
structures/algorithms, database: SQL). And find some open source projects that
you respect and browse their source code. See how they organize things. If you
find something you don't understand stop and research it.

------
groby_b
There was a giant thread on reddit about introductory texts for pretty much
any field of computer science...

Here's what I found:
[http://www.reddit.com/r/books/comments/ch0wt/a_reading_list_...](http://www.reddit.com/r/books/comments/ch0wt/a_reading_list_for_the_selftaught_computer/)

Not the link I had in mind, but not a bad starting point.

Ah, here we go:
[http://www.reddit.com/r/compsci/comments/gprp0/is_there_a_li...](http://www.reddit.com/r/compsci/comments/gprp0/is_there_a_list_of_the_canonical_introductory/c1pcqe5?context=3)

So, pick one that interests you, and start reading. The trick: The very moment
you don't understand a concept it's referring to, explore that concept.
(Wikipedia is your friend). You want to lay a foundation, so never just gloss
over things. Make sure you understand.

Trick #2: Take any knowledge you gained, and _write code_. You learned how a
hash table works? Go write one, see what happens. Step through it with a
debugger.

Trick #3: Once you think you understand it, try explaining it. To really
whoever you think is listening. It might be a mentor, it might be your blog,
or it might be a plush animal. (Me? I've got Rico from Madagascar sitting on
my desk. He's an awesome debugging buddy. ;)

That should at least get you started.

~~~
inceptor
Thanks for the advice, I'm going to distill your points and put them on postit
notes on my monitor :) Also, thanks for those links, this list looks like a
great place to start!

