

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

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.<p>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.<p>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.<p>Otherwise I'll waste time.<p>Can anyone help?
======
jsarch
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.

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

------
dtwwtd
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!

~~~
combinate
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!

~~~
dtwwtd
Cool, feel free to let me know if you need help or get stuck. I'd be glad to
help you out.

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

~~~
combinate
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?

~~~
catlike
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)

