

Ask YC: Learning Web Development, were should I start? - german

Here's my problem, I know, HTML, CSS, and I'm already learning JavaScript.
The thing is that I want to learn about server side programming, Python, Ruby, etc. But I also need to know DB like SQL.
So where do I start?
======
iamelgringo
I had a similar issue a year or so ago. I tried to jump right in to a web
framework, but I ran into a few problems. Like so much in the technology
world, web frameworks grew in response to a certain set of problems. If you
dive into web frameworks without having a least a rudimentary understanding of
the problems that are being solved, you'll end up puzzled more often than not.
So, when I picked up a bunch of Rails books, and started to work through them.
So much of it was confounding, because so much of Rails is developed in
response to problems in PHP + Java web development.

You could just say, "Screw it all," pick up a PHP book and dive in head first.
You'll pick up some pretty bad habits along the way, but it depends on how you
like to learn.

Here's a syllabus that I'd suggest to really get your head around web
programming and understand what's going on:

HTTP--learn the basics of what the protocol does, and why. Learn the different
response pages, because they are going to be your error messages.

Web servers--you just need a 100 ft overview. Learn how to setup and configure
a web server.

Programming--You need to pick a language, Python or Ruby and learn how to at
least do some basic programming with it. I'd recommend Python, personally.
It's more explicit, and has less "magic". You probably need to understand
variables, iteration or looping. You need to understand some basics of the
object oriented programming concepts like methods, classes and scoping. And,
if you're going to get into any of the web frameworks, you need to understand
what things like a dictionary and array are. At least a basic understanding of
regular expressions are necessary to learn Django's URL naming convention. The
better you know programming itself, the better web developer you'll be, and
more things will become possible for you to program.

CGI -- This is the ancestor to pretty much all dynamic web pages, and the
foundation of most web development. Pick the language that you're learning,
and go through some tutorials on CGI scripting for the language you're going
to focus on. And, this will help you understand the basics of what goes on in
the address bar, GET and POST methods of the HTTP protocol. You'll also get
familiar with the idea of taking variables and inserting them into HTML
templates dynamically, which is the basis of most web frameworks.

Learn SQL, and database basics. You need to understand what a database is, how
to create a database, why databases are important, how to create and drop
tables, how to do queries, etc... Having at least a basic understanding of
relationships, foreign keys and constraints is helpful when reading some of
the web framework documentation. You really should understand how to do a
query in SQL, just so you can understand what the web framework is doing for
you.

Finally, pick up a web framework, and start to work through it. After learning
the above, learning the web framework will tend to make a lot more sense than
if you dive into a web framework deep end first. Pick the framework that's
most popular for your language, that way, you can be assured you will have
plenty of documentation to work with. I'd recommend Django for Python, and
Rails for Ruby.

Lather, rinse, repeat. Iterate through the above steps, and learn more and
more each time you approach each subject.

~~~
german
Thanks a lot, you really understood my problem :) I don't want to learn PHP,
now I have to decide if it's going to be Python or Ruby.

Can you please point me some of the information sources you used.

Thanks again.

~~~
iamelgringo
Honestly, if you're going to make a serious study of the subject, I'd suggest
an O'Reilly Safari subscription. For $15 a month, you get access to 10 books
at a time. For $40 a month, you get access to their entire library. I'm not a
shill for the service, I just really like the service. It's well worth the
cash.

Online tutorials are good for a quick, down and dirty overview of a topic.
But, if you're going to learn something a bit more in depth, I'd think that
you're better off looking at a book. It's pricey, but it's worth it for me. I
figure I'd spend $40 a month on tech books anyway. I'd might as well pay them
and get the whole library as well as the Lynda.com video all at the same time.

Also, if you're really serious about it, I might consider finding a web
database development class or certificate program somewhere. It might be
slower going than you want, but you'll have a more complete understanding of
the subjects once you were done.

~~~
sgoraya
Agreed - I would also recommend taking a class or two if you have the time.
Decent community colleges will have many courses for web development ranging
from beginner to intermediate. Studying and learning in a classroom
environment has many benefits - Who knows, you might meet a few new friends
and like minded folks as well!

Good Luck!

(PS: In the Bay area, foothill college is great, IMHO, for continued
education)

~~~
cdr
Also, if you're taking classes, you may have free access to Safari and other
ebook collections through the school's library.

------
bprater
Blah, blah, blah. I think most of these recommendations are from 15-year-olds
who just read about a cool web framework and are now spouting how damn good it
is.

Anyone recommending a framework before someone understands web programming
isn't someone I would hire. Frameworks are where you go when you finally get
what is missing with your web programming language. It might take you years to
get to that point.

Go with PHP. Period. People are going to blah, blah, blah about how PHP gives
you bad habits, has bad function naming, ran off with their kid sister,
whatever. PHP is a mess but it works. Name a webpage .php and you are good to
get going. Try that with Ruby.

PHP is a tool that gets the job done and let's you quickly become immersed in
web programming. If you don't know your GET from your POST, a great Ruby
framework ain't gonna help you.

Once you get PHP figured out (and now are employable as a programmer?), try
Python or Ruby out. They are gorgeous, elegant languages. I love using both of
them. Then slap a great framework like Django or Merb on top. You'll love it.

But only after you get the basics down. I'm ashamed at you guys, really.

~~~
doubleplus
Before I got to this, I was wondering if anyone was going to mention PHP. I'm
at the exact same stage as the OP and I'm just going with PHP (and learning
MySQL simultaneously). I do want to play with Python eventually, but my first
goal is to actually be able to find a job doing this stuff by the end of the
year. Plus, even though every virtual human I run across has been programming
RoR since 1963, everyone I know in meatspace uses PHP... and those are the
people I'll be bugging for help.

Go to your local craigslist web/info design job page and run a search for PHP
and count how many ads come up. Then run searches for Python and Ruby. That's
enough help for me when it comes to making a decision.

------
henning
There's multiple things you want to learn:

1\. How to program (hack) 2\. How to hack on the web 3\. How to create
application databases for your web stuff

I suggest tackling each of these separately in turn if possible, starting with
#1. Python and Ruby both make great beginner's languages.

Be goal-oriented. Once you know your way around a little, worry less about
having the right technology and more about getting things done. Create
something that you can use every day, like a blog, a calendar program, or
something like that. Ignore all the "X is better than Y" talk on the Internet
and just work hard on getting stuff done: that's all that really matters.

------
rapind
Ruby on Rails. I recommend following a screencast tutorial, like the ones at
lynda.com <http://movielibrary.lynda.com/html/modPage.asp?ID=324>

Sure rails hides a lot but it'll introduce you to some best practices, like
the concept of MVC etc.

~~~
nickb
I agree. Rails is currently the way to go. It's much more mature than Django
and has more flexibility and more mature gems/plugins.

Lynda tutorials are great. I'd also recommend free ones:

<http://railscasts.com/>

[http://www.akitaonrails.com/2008/2/1/rolling-with-
rails-2-0-...](http://www.akitaonrails.com/2008/2/1/rolling-with-
rails-2-0-pdf-version)

And for-pay ones at <http://www.peepcode.com>

Also, grab "The Rails Way" book by Obie Fernandez (it's THE BEST book on
Rails.. when you learn the basics, it's better than 'Agile Web Development
with Rails') and "The Ruby Way" by Hal Fulton.

~~~
mrtron
Rails is much more mature than Django? Please provide some sort of evidence
surrounding that, instead of stating it as fact.

First, let's start with the languages they are based on, since performance and
scalability depends on this. Do you feel Ruby is more mature than Python too?

~~~
tel
For applications launching soon it's worth noting that Django is in a period
of flux at the moment. Ver 1.0 is being actively worked toward and will break
backwards compatibility.

I mean, no one is keeping you from working using Django .96, but several of
the neater features in the platform (ContentTypes & Generic relations) are a
little sketchy at the moment.

------
tel
Write a toy web server. It'll get you up to par with how the requests actually
happen which is a good base for understanding CGI and the more complex
systems.

~~~
bprater
He is just figuring out HTML. You are joking right?

~~~
tel
Of course not.

It's practically requisite to understanding Rails or Django and is not so hard
a project that you can't start to tackle it quickly (by reading any of the
hundreds of simple web server tutorials online)

------
mikesabat
This seems to be the most asked question on YC, by far. This may be impossible
(which would explain why it doesn't exist) but can someone put together the
quickstart guide "Learning to Web Develop"?

1-2 page exec summaries of popular languages and the specific problems they
solve. Include links to resources that explain things further. It would help
to get a snapshot from 1000 ft. above the situation.

There is definitely a need here.

Thanks

------
lowfat
Hi, I asked a similar question a month ago and got some great advice. Check it
out: <http://news.ycombinator.com/item?id=90782>.

------
a-priori
I think everyone else here has covered the specifics fairly well.

The best advice I can give is to remember that you're at the start of a long
road. You need treat it as such. No matter how smart you are (or think you
are), it will take you long time to learn everything you need. Persevere.

Err on the side of learning more than you need. You'll find later that
knowledge will be useful. Be curious.

------
ivankirigin
With a framework like Django, you don't really need to know SQL. It helps to
understand the backend, but you basically design the tables based on Python
classes. That's how I learned, it and it got me far enough to already launch
tipjoy.com

I already knew a good amount of Python though.

djangoproject.com

------
topcoder8
My advice is to pick a language and go from there. Start with either PHP, Ruby
or Python. Once you are comfortable with the inner workings of the language,
then move forward with an agile development framework. Depending on which
language you finally chose you will find open source frameworks for each:

Ruby: Ruby on Rail, Merb PHP: CakePHP Python: Django

I truly think that understanding the language itself will help a lot before
jumping into the framework.

------
jkkramer
I'd start by coming up with a project, a goal. What are your interests?
Gaming, sports, cooking, art? Decide to make something web-based that pertains
to whatever interests you have. Doesn't matter if you're reinventing the
wheel.

Now, start creating. Learn the necessary technologies as you go along, mixing
in healthy doses of theory and best practices when you get the feeling there's
a better way to do what you're trying.

It's hard to learn technologies in isolation, when they have no meaningful
connection to problems you're solving. So give yourself an interesting
challenge that can be overcome with the tools you want to learn.

If you're using automated tools along the way (installers, package managers,
code scaffolding), consider doing what the tools do for you manually. Unravel
things and get closer to the metal until you're satisfied.

Consider sharing the source code of your project with others. Maybe nobody
will take notice, but it will give you motivation to make your code beautiful.

As far as specifics, Python strikes a nice balance among power, maturity, and
marketability. MySQL is standard. Be sure to "unravel" your DB code into SQL
without just relying on framework magic.

------
davidw
Something like Django or Ruby on Rails would be a good platform.
"Unfortunately" it hides a lot from you so you won't get to see what's
actually going on. Maybe try writing a few CGI's just to see what's physically
happening to get a feel for that aspect of things.

~~~
illicium
Pylons and CakePHP are also quite good frameworks, if you're into that kind of
thing, but I'd also suggest writing something simple in PHP (which is pretty
much still _the_ webdev language these days),

------
tjr
<http://philip.greenspun.com/seia/>

------
cjlesh
If you want to give Django a try, you might want to check out my simple
tutorial:

<http://www.instantdjango.com>

It includes a portable Django development environment for Windows, no
installation required, and it even runs from a USB thumb drive. The tutorial
walks you through creating a simple website, and explains what is happening
each step of the way.

The website is overdue for some updates, and I really need to finish writing
the second chapter, but you might find it an interesting way to spend 45
minutes.

------
rrival
Spend some time on intro cs theory/topics - freelance PHP 'scripters' whose
understanding of structured logic is abysmal are everywhere and they tend to
start with HTML and go horribly astray.

------
tzury
SQL is a language that will take you half a day to learn and you will use it
for the rest of your life. Since it varies from platform to platform you
better pick the one you are going to use (Postgres, mySQL, etc.) -- Don't fall
into those ORM which hides the database behind a "nice" api. for programming I
would suggest you Python. The best place to start is by looking at
<http://webpy.org> which is a compact yet robust web framework in Python.

good-luck

------
wamboldt
I recommend PHP, and SQL, using MySQL/PHP/Apache/Linux. For an editor, I
recommend Bluefish. After that, go with Perl(Old style, but it has it's uses)
and then Python. Ruby is the next step after that. W3Schools is a good place
to start learning, but the best way to learn is by doing.

------
german
Thanks a lot, not it's time to start learning. I'll let you know how is it
going. :)

------
edw519
Find an on-line tutorial that walks you through every step (including
installing the software). Don't worry so much about which technology; you can
always change. To get an idea of what I mean, here's one (you can google many
others):

<http://www.php-mysql-tutorial.com/>

Here's another oldie, but goodie:

[http://webmonkey.com/webmonkey/programming/php/tutorials/tut...](http://webmonkey.com/webmonkey/programming/php/tutorials/tutorial4.html)

You didn't say which platform you're on, but you could save yourself a lot of
trouble by installing an "all in one" LAMP distro, even on Windows.

------
ecarder
PHP is the best web programming tool to start with!!!

~~~
pchristensen
I'm sure you'll get downvoted for that because of the l33t crowd here, but I'd
have to agree that if you don't know conventional programming, a super
straightforward language like PHP is better for learning web programming, as
opposed to languages like Python/Ruby that are general purpose languages
suited to programming.

------
Tichy
You could also check out arc.

------
Prrometheus
HTML

------
ahold
Join to some opensource project at sourceforge.net

