Hacker News new | ask | show | jobs
Ask HN: Getting Better
5 points by deffibaugh 5624 days ago
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.

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?

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.

3 comments

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.

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

As mentioned in previous discussions on HN, software development is not the same as computer science. Just building stuff will probably make you a better software developer, but won't necessarily teach you theoretical topics such as algorithms. I think it really depends on what you build and what you are interested in. For example, writing a jquery plugin might teach you about frameworks and certain design patterns; building something like a recommendation engine for Netflix might expose you to some more theoretical concepts.

With that said, I think the best way to self study theory is to pick a university course that has posted materials online (MIT OpenCourseWare comes to mind) and try to finish it. To do something like that takes a lot of determination, but I think it could be well worth the effort in the end. Good luck!

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.

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

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

Thanks for the advice. I have been thinking about making my own blog from scratch for a while now. I am going to get on that asap.
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.

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