FROM useless compsci undergrad TO web app developer: how do I get started?

5 points by combinate ↗ HN
A few years ago, I could do basic HTML, CSS and JavaScript but didn't really get into web design. Fast forward to now and I'm in my second year of uni doing computer science and can handle, C, C++, Java, Standard ML (yes...). I've also done quite a lot on the algorithms/data structure side.

I want to make web apps that are clean, fast and fun. I want to do this by myself. I'm not ready for anything more yet (obviously) but I have a view to making some serious stuff one day, so I don't want to learn some toy language.

I'm struggling with analysis paralysis. What should I immerse myself in? What are the guides I need? I'm happy to use multiple guides and real-world examples to learn Python, JavaScript, Ruby, whatever - I just need a starting point and a plan.

Otherwise I'll waste time.

Can anyone help?

8 comments

[ 4.4 ms ] story [ 16.6 ms ] thread
The best way is to complete as many projects as you can and read as much code as you can. You'll want to take a deliberate learning approach.

Check out out "Pragmatic Thinking and Learning" by Andy Hunt. It will show you how to build a skill investment portfolio.

Cool, thanks - "Pragmatic Thinking and Learning" looks very interesting, is it a well-known thing?

Any ideas for a first project that'll get the wheels turning?

best way to start is to scratch your own itches, if you pick some arbitrary problem it's much more difficult to maintain steam and actually complete the project (ie learn the skills you want to)
From one student to another:

The best advice I can give you is to just build something.

Pick some small annoyance you have and give yourself a strict timeframe and then build. You'll learn best by coding not reading.

Just pick a language, anyone the ones you mentioned are great. Don't worry about which is easiest or has the best guides. Just start and when you get stuck do a Google search for your problem then move on.

Some small ideas to get you started in case you have none: A personal todo list or a comment system for a website

I hope that helps and good luck!

Great, thanks. Yeah, to some extent this is all procrastination, isn't it? I'll start off with the two you suggested and then move on!
Cool, feel free to let me know if you need help or get stuck. I'd be glad to help you out.
I'd highly recommend to not "immerse yourself in learning a language" (highly paraphrased). What makes you think the language-du-jour will be relevant in 2 years? 5 years? 10 years?

In my opinion, the point of a CompSci degree is to understand computer science. I love CompSci because I get to solve problems that are only possible via a computer or 1,000 computers; knowing a language doesn't solve the problem all by itself.

As to where to start, I suggest that you dabble in everything -- find a couple different types of simple web apps (blog, to-do list, game); try to create them with whatever tool (i.e., language) is best for the job; and think critically about why that tool is the best for that particular job.

I don't want to learn some toy language.

My advice is to learn a toy language.

This is where your analysis paralysis is coming from. You need to come to grips with the terrible realization that nobody cares whether your web app is built out of a "serious" language or a "toy" language. People care what the app does. The ratio of the number of visitors to the number of people who will ever see your code is going to be a thousand to one, and that's if your app is a failure.

Web publishing is about the content. Deliver the goods. Use whatever is handy. There are about a thousand ways to build a web app, and most of them work. As a rule of thumb, the stupidest thing that could possibly work is the best approach to a new problem. If static HTML works, use static HTML.

The other thing to realize is that you need to learn many approaches. You will attack problems of many different complexities. You will solve problems that will take you years, and you will solve problems that should take you minutes. You will be programming for years and years, so you have plenty of time to learn some "toy" languages and some "serious" languages and everything in between.

Here are some exercises. Do them in any order. Do them fast. These are toys, so don't forget to smile while you're playing with them.

Build the best web page you can using nothing but HTML, CSS, and static assets. Practice thinking and working like a designer.

Build the best web page you can using only Javascript, HTML, and CSS. Client-side Javascript for starters. Then look into server-side Javascript.

Build a website the old-school way. Use PHP and MySQL. Bonus points for skipping the PHP and working directly in C. No frameworks, no Django or Rails, no OOP.

Write a web server in C. You say you can handle C? Now's your chance! It doesn't have to be a fancy web server: Write the dumbest web server you can, serving up HTTP GETs. Once it works, aim some tool like Siege at it and make it cry bitter tears. Compare its performance to, say, nginx. See if you can figure out why your web server sucks compared to nginx. See if you can at least double the throughput of your web server.

Build a site in Drupal. (Shameless plug: www.drupalgardens.com. But don't forget to export your code, put it on your own server, and install a module or two just to prove you know how. You're a CS student, after all.)

Build a web app using Rails. Google Michael Hartl Rails for help. Tell him he owes me a dollar for the plug. ;)

Build a web app using one of the many Lisps. Arc, Racket, Clojure, Common Lisp, take your pick.

Build a web app in Erlang, Haskell, or Factor.

Meanwhile, and now I'm being totally serious: Learn Emacs, VI, or Textmate. Learn Git, Bazaar, or Mercurial. Learn to install Linux on a VPN. Learn regular expressions. These things are not toys; these are going to be your bread and butter.