

Ask HN:  Getting Better - deffibaugh

I am senior working to finish up my undergraduate degree in Information Sciences and Technology.  As you might have guessed, IST is no CS degree.  I came to school not knowing what I wanted to do.  I was always kind of geeky growing up and I know a fair amount about tech so I decided to major in IST.  My programming experience was very modest and I wasn't sure I even liked so I didn't think I would get through CS.  Time went on and after having to work a internship at which I did PHP programming I found that I actually did enjoy the craft.  I learned as much as I could at work and this got me more work at two different startup companies doing Rails development.  I worked hard at each and I really fell in love with the hacker/startup lifestyle.  Unfortunately I have only been at it for about a year and half.<p>As I mentioned earlier in this post, I am graduating this spring.  I have not yet been able to find employment.  I somehow managed to get a phone screen Google in Pittsburgh that is scheduled.  I feel like I really lucked into it.  Regardless, I have been trying my hardest over the past few weeks to learn some CS principles on my own.  I ended up purchasing Introduction to Algorithms due to the recommendations from this site.  I have excepted that I am not at the level I need to be at yet to get through the interview with Google.  However, I am really motivated to get better.  I was wondering what the best approach is to tackle the self education of CS?  Should I read the book only when I need to reference it, or should I work through all the chapters doing all of the exercises?<p>I want to get better so that I don't have to take a job after school that is just a pay check.  I want to be able to work in a place that I continue to get better and hone a craft that I just recently discovered a passion for.  I just can't afford to get a CS degree at this point.
======
bricestacey
If you are interested in learning CS stuff you should find an interesting
domain outside the web. Traditional web development is too simple (all based
around CRUD operations) until you run into problems of scale.

My favorite CS courses and the ones I learned the most in were:

* graphics (algorithms, data structures, and OpenGL)

* compilers (wrote a parser and compiler for a subset of Java)

* lisp (blazed through the SICP)

* operating systems (wrote a tiny linux-esque kernel)

I would suggest scratching a few itches and see where it leads. Pick up an
introductory book on the topic and your choice programming language. Read
through these cover to cover to get your fundamentals, but simultaneously
start a project incorporating new skills as you learn them.

------
ecaroth
programming is not about being able to memorize language-specific syntax or
function calls. If the book has good exercises, by all means do them - But
rarely will you find yourself in a situation where you don't have a book, the
internet, etc to reference specific functions.

Best approach to tackle self education is CS? Just start making stuff. Who
cares if somebody already made it. Who cares if nobody will ever see it. I
know it goes against the programming mantra of "don't repeat yourself" but
there are many times when a jquery plugin or open source piece of software
existed to do something I wanted... yet I rolled my own simply for the joy of
learning how to do it. Build yourself a blog from scratch, for example.

And if you plan on programing for the web, read this:
[http://stackoverflow.com/questions/72394/what-should-a-
devel...](http://stackoverflow.com/questions/72394/what-should-a-developer-
know-before-building-a-public-web-site)

~~~
Travis
I would like to emphasize ecaroth's point:

 _Just start making stuff. Who cares if somebody already made it. Who cares if
nobody will ever see it._

Getting over that, in the last couple of years, has been the single best thing
I could do for myself -- personally, skill wise (programmatically), and
professionally.

Nike is right: just do it.

~~~
deffibaugh
I definitely have a hard time with this! I need to get over thinking
everything I do has to be original. I think it definitely holds me back. I am
also sick of the class grind at school. I feel like I am stuck doing pointless
work that just takes up all my time.

~~~
Travis
Take it from me -- you'll feel like you're doing pointless grind work in the
"real world" as well. Except in a job, you'll feel the oppression even more.

My problem has always been the curse of originality, or analysis paralysis. I
think many people on HN share those traits -- what's the point of copying
someone else, and what is the _most optimal_ way of doing something.

It turns out, for me, that my parents were right when I was little. Don't
overthink, just do. For my personality, there is very little danger that just
doing things won't also have some pretty serious thought along with it (I'm
very much not impulsive by nature).

~~~
deffibaugh
You sound like me so much. I over think everything. I have actually considered
becoming a Buddhist to try and shut my mind off for a little while through
meditation. I tend to have a very hard time doing things unless I spend a ton
of time reasoning through whether or not I should do it. Most of the time when
I decide I missed the boat.

~~~
Travis
You don't need to "become a Buddhist". Just expose yourself to some of their
ways of thinking. Also, practice (= meditation).

You'll pick a lot of this up as you get older, as well. It's a natural
maturation process. I've been out of college for 7 years now, and am just
starting to feel like I'm understanding mindfulness. Granted, I've wasted many
of those years...

------
curt
Just do it, I'm an engineer who only took two programming classes in college.
Nearly every language I know is self-taught, I just jump in with a
goal/project in mind and start building and learn along the way. Just started
a php/mysql site, I haven't used it in years but should have a functional
prototype after a two weeks.

With stackoverflow, tutorials, and google once you get the basic terminology
down (so you know what to search for) it's really easy to build as you go.
Then you also have a portfolio to show when you're trying to find a job.

Programming is more of the logical thought process of how you work through a
problem. If you approach it like that, different languages don't pose much
problem to learn since they all adhere to the same basic format/structure.

~~~
deffibaugh
I have been doing this at my various internships and side projects. I am
pretty good at fitting things together from examples, tutorials, etc. I think
I am lacking in not understanding how the magic works. I feel like a plumber
most of the time just fitting different pipes together to get things working.

~~~
curt
Then my method isn't the best choice until you develop the knowledge to solve
widely varying problems. You don't need to understand the exact syntax but you
definitely need to understand why it works since that's what most problems
share.

You can learn this by changing and manipulating the code to see how changes
effect the program.

