Hacker News new | past | comments | ask | show | jobs | submit login
Ask HN: How do I improve my programming/engineering skills
18 points by lurking_lurker on July 6, 2012 | hide | past | favorite | 16 comments
Ask HN: How do I improve my programming/engineering skills

Hey HN. I've been lurking here for sometime now and have seen similar posts, usually with positive and helpful responses. So decided to see if you guys could help me too.

So a little background about me. I'm 23 years old and been living in Scandinavia for 3 years now.

I'm not one of those guys that have been programming since they started walking. I started programming about 3 years ago when I started Electronic and computer engineering. There I learned Java for 1 year, one course per semester. After that year I found out that a strictly engineering-focused education wasn't for me and that I didn't even like hardware stuff anyway! So I rebooted my bachelor degree in a cross-disciplinary education which included all kinds of topics, ranging from 3D modeling to making sounds in Max/MSP with a lot of focus on academic reports (around 100 pages for one semester, which I hate btw) and user testing, and programming courses sprinkled in-between.

Therein lies the problem, since the education is cross-disciplinary, maybe one third to half of the students aren't very or at all interested in programming and as a result the quality and the challenge of the programming courses have suffered. Since starting that education they have taught ActionScript, C++ and C#, each on it's own semester and no-one is close to proficient in any of them.

I do realize that no-one should be responsible for my education except me, therefore I started learning Python on my own last summer. I've only really played around with it, not doing anything serious with it. Started one or two Django sites, finished neither since I was in over my head wanting to implement very complex ideas. I have made one rather complete script to download Google Docs folders contents and compiling them to LaTeX for my reports, but it's neither very complex or impressive. I'm very interested in web development and want to get better.

I do agree that you learn most my actually doing, actually coding something and I have tried to find open source projects to participate in, but I cant seem to get into any of them due to me not understanding the whole program. Maybe I just haven't found a small enough program to get my feet wet. I'm also not making much head way with Project-Euler either, usually getting stuck on some math stuff. I read a lot of tech and code blogs about webdev, Python and programming to keep upto date.

I tried getting a job at some local startups hoping to get the chance to learn from great coders but, of course, no-one was interested in my underdeveloped skills.

I do like programming and trying to find solutions to problems but I seem to lack both ideas of a manageable size (maybe that's an idea for a web site? Practice programming ideas, ranked by "size" and only provide hints and no solutions.) or the skills to implement those that do pop up in my head...

I look at someone like Kenneth Reitz and I think to myself that I would like to become like him some day but I have no idea how to get there. I also wonder if it is worth it staying in university when so many hackers seem to do fine with out the degree. And I would have take a Master's degree to get anything out of my education since it's so broad.

Does anyone have advice how I can improve myself? Or should I just find another field to try to make it in?

Sorry for the long post and thanks for reading it.




Hack. Side projects, websites, whatever, hack. Start a website, you don't finish it? never mind you learnt something now start something new using something different. You got it right, you just need to keep pushing. The only thing that really pays is experience and to get experience you must try, break, play. Never mind on what, how, why, just keep doing stuff. IMHO university is useless. I did not need it and most of the good developers i know did not need it. The fact is, it takes time. And there is nothing to do. Experience is time converted in skills. To me you really seem to got it right but as i said you just need to keep it up.

If you lack ideas(totally normal) think of small problems in your daily routine that could be improved/fixed and do it.

Good luck, and don't give up, seriously. When you start getting rewarded for your work this is one of the most emotionally(and maybe even financially) remunerative jobs.


Thanks for the advise!


My free advice: Learn Lisp for the reasons PG outlines in Hackers and Painters [http://www.amazon.com/gp/product/0596006624] i.e. Lisp is a higher level language than x.

Peter Seibel's Practical Common Lisp is available online (and as a book) and provides a lot good advice including a link to lispbox, which in the best "learn the hard way" tradition, requires you to finally learn emacs.

[http://www.gigamonkeys.com/book/] [http://common-lisp.net/project/lispbox/]

PG's own Ansi Common Lisp is more of a traditional textbook as well as a reference to the language. The exercises are thought provoking. It is available through Amazon including used copies.

Because Lisp originated as a way of describing Turing machines, the discussions tend to cover a lot of the theoretical background and deeper insight into how particular features may be used...or at least that's my impression.

Good luck.


Unfortunately, lispbox is badly out of date: "Last updated: February 6, 2011."

If you're on windows, try Lisp Cabinet. Elsewhere, you'll have to configure things yourself.


I've always been on my way to work through SICP. Maybe that's something that I should actually do... :)


I think you're generally on the right path, just keep trying. Since you're still getting your feet wet, you should pick a language and stick with it for a little while, but don't stick with it as your only language forever. Too many people make the mistake of getting comfortable with one technology, and deeming themselves "done" learning anything else.

Start with Python, or Ruby, or Javascript. Something simple. If you're a fan of Windows, take a look at C# (which you say you've had a semester of already).

Start S M A L L. You say you try to build things that are over your head. Don't do that. Build things that are just about your level, while still providing a challenge. You're not going to come out of the gate with something like Kenneth Reitz' "Requests" framework. You're going to have years of learning and experience ahead of you before you can produce work like that (unless you're a prodigy, which almost none of us are).

Most importantly, do not give up. You are not stupid or incapable of programming if you hit a wall and can't seem to get by it. We all hit these walls, at every level of our craft. The issue is recognizing when you have the ability to climb the wall, to blow a hole through it, walk around it, or just go back the way you came and pick another path.

You could try applying for unpaid (or lightly paid) internships as more of a learning experience. If companies don't think you'll be a drain on resources, I would imagine certain companies would love to have someone who is eager to learn hanging around to take minor tasks and to be mentored for a few hours a week. The key there is finding the right company with that kind of time/support.

Best of luck.


I can only suggest some things that have helped me become better over the years - and maybe they'll work for you :)

1. Scratch the really high level stuff and start digging into some C or x86 assembly ( with GCC and binutils), read the coreutils and glib source and program some of your own system tools ( like find or ls ). This will give you a really solid understanding of memory and hardware internals which you can use to your advantage in other software apps.

2. Start programming games. It doesn't matter if its in javascript for browsers or python but I would say do NOT use any external libs - program yor own solutions and read other libraries source for ideas. Nothing has helped improve my math and algorithm skills ( not to mention AI, physics, and graphics ) like programming html5 js games.

hope this helps and good luck!


Both of your suggestions have been lingering at the back of my head. Your encouragement is all they need to resurface and I think I'm definetly going to go trough Learn C the Hard Way and I might start making small game (not the biggest fan of gamedev but I do like the AI side of it).


There are a number of things you can do (which most other posts are covering) but there is one I want to focus on: internships.

If you are in the financial situation to do so (especially if you are still in school) find an (people won't like me saying this) unpaid internship. At 17, in high school, living in the middle of nowhere, I put up my resume (with very little web development skills) on HackerNews saying I would work for free, remotely, about 8 hours a week. I got 10 responses. I took one doing Ruby on Rails with an organization that did pair programming exclusively and I learned more than I did in years of Java classes. With this training, I was able to find a two month paid internship in Ruby on Rails this summer, and hopefully this chain will continue upward into jobs. I cannot explain the value of on-the-job learning and experience, and if an unpaid internship is what it takes to get you there, I really recommend it.

In the meantime: -Learn git inside and out if you don't know it -Pursue a web development framework -If you have programmer friends, get together and code with them. Productive people make you more productive. -Whatever you do, put yourself out there. The more you are out there, the more opportunities will come your way.


here is a concrete suggestion (vs vague philosphizing).

Since you already know some Python, sign on to Udacity's (free) CS 212 Design of Computer Programs by Peter Norvig. It has 7 weeks worth of classes and teaches you a tonne in that time. It is a class targeted specifically at "I know some basic programming but what do I do to get to the next level?" people.

The official version of the class is over, but nothing stops you from joining today, watching the videos, doing the assignments etc.

Since one of your aims is to 'learn from great coders' this should be right up your alley since Peter is one of the best developers in the world and you can see him developing multiple programs and refining them step by step till they are gems of elegant code, and you can trawl the forums to see questions people asked and answers to them.

Once you work through the class - should take you 7 weeks if you are disciplined -and you understand all the techniques demonstrated there, you'll be in good shape to start/join an open source project in a domain of your interest.

And oh prepare to have your mind blown. Peter Norvig is one seriously good developer.

Good Luck.


A great programmer, sure! A good developer... I don't think so :) But I'm not here to discuss semantics.

I wouldn't recommend that course at all and I would even rate it as an utter failure.

It is not aimed to people with basic programming skills. The code snippets mostly consist of complex, clever one-liners and the examples are bit unfortunate.

You just need to take a look at the forums and see the prevailing discontent. Folks who had just completed CS101 were just not able to get past the very first units. And instead of addressing this problem, they just apologized and (rightly) ranked the course under the advanced category!

He'll be better off reading PAIP. Which is an excellent, timeless book. And still the best way to learn Common Lisp IMO.

Norvig has all the potential to be an excellent teacher, but he should stay away from mentoring introductory courses.


Yeah, I just finished going through Unit 1 and I didn't feel like I was learning that much from him and his cleaver, but a bit obscure, one-liners. I'm thinking about looking at the Coursera.org courses.


Learn C - get http://c.learncodethehardway.org and work through it. Seriously, it sounds so simple, but I was in a similar situation to you - learned a bit of this and a bit of that. Nothing boosted my programming knowledge like really working with C. It is the basis of so many modern languages even if just from the syntactical point of view. Plus, learning manual memory management, pointers etc, even if you never have to do it in production, is invaluable in just making a better programmer.


imo, keep asking questions. direct, honest questions can be scary, but they can be remarkably effective.

also, start learning python and don't stop until you can actually build something you like. experiment.


Before I write my advice, I want you to hear this. "Do not worry about the fact that you are not finishing your side projects. The idea is to learn and not necessarily get to the end goal i.e a working app". I am usually in same boat as you but many of my unfinished side projects have taught me tremendously. For example, I recently worked on a python program to covert financial trasactions in OFX format to csv. It taught me how to use lists, dictionaries in python, file input/output etc. I never finished it actually to the point where my dream was to release it as open source library and I even have a git page for it but I moved on. Even then, I learnt a heck of a lot.

"Start Small". But what does that mean really ? It means that focus on a specific topic and give yourself a task/side project out of it. For example, "Build a user registration system". Now pick the language/framework etc. You seem to be using Python/Django already so that could work in your case.

Keep hacking even if not finished. "It is about the journey not the destination" (cheap attempt at using a favorite quote).


> Started one or two Django sites, finished neither since I was in over my head wanting to implement very complex ideas.

I think this is perhaps the first thing you should approach differently. Begin with simple projects that you know are within your reach, even if they are dead simple (make a tic-tac-toe in Django). Completing those projects will boost your morale so you will stay motivated. Also I would say that you need to build up your Github account into a professional signature that someone would look at and see where your interests are, whether you have potential as an intern / junior dev who may grow to become a good dev, with some coaching and mentorship. Also, the world is moving towards agile and you are going to impress a lot of people if your activity on Github shows that you have the ability to build software in an agile way.




Join us for AI Startup School this June 16-17 in San Francisco!

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

Search: