views:

661

answers:

9

I have BS in Computer Science, and thus have experience developing software that runs at the command line or with a basic GUI. However, I have no experience making real, functional, websites. It has become apparent to me that I need to expand my skills to encompass web development. I have been using Ruby to develop applications, but I am aware that it is quite popular for web development. I want to use my skills as a programmer to assist me in developing a personal website for a band.

I have experience with HTML, but very little with CSS. I want to leverage my skills with programming languages to create a website containing pictures, audio clips, a dynamic calendar, a scheduling request tool, and other features common to band websites.

What kind of resources are available for a competent desktop programmer to learn the entire process for developing a website? Is it best to use free CSS templates and WordPress as a foundation for my site or make it from scratch? Should I use GUI tools or write it all in Vim/Emacs? Is Ruby on Rails sufficient for my personal website, or should I consider a more mature development platform?

My main goal for this project is to come up to speed on current web design technology, and actually understand the entire process for building a website.

+1  A: 

For what you're describing, Rails or Django might be slight overkill but it wouldn't hurt to learn them. Django, in particular, might be good because of the notion of a project containing multiple apps (e.g. calendar).

Whether you use a framework or write everything yourself, though, you'll need to know HTML and CSS. CSS is extremely simple if you have a BS in CS...you could read a tutorial and know it in five minutes.

endtime
+1: Frameworks are rarely overkill -- just start with Django.
S.Lott
+18  A: 

I think one really important thing to understand in web development is HTTP. HTML and CSS are important, but I think it's more critical to understand the stateless nature of the web, and how each of the HTTP verbs work, and what they can/can't do.

http://www.freeprogrammingresources.com/http.html

A good tool for seeing how HTTP works is Fiddler.

Andy White
Good point on the statelessness. +1
John MacIntyre
+1 for suggesting more than just the presentation aspect of the web. Great point.
bedwyr
+3  A: 

If your goal is to

My main goal for this project is to come up to speed on current web design technology, and actually understand the entire process for building a website.

Then start from scratch in Ruby, PHP, Java, ASP.NET, etc...

When you run into a design problem or just want to know how others have approached something, then look at the frameworks.

Once your up to speed, and your website is starting to grow, then segway into a framework, to get up to speed on the frameworks.

John MacIntyre
+1 Frameworks are important, but so are the fundamental patterns that those frameworks encapsulate, as you point out. If deep learning is the goal, then a sense of history is very important.
Jarret Hardie
+1  A: 

If you are starting from scratch as per John MacIntyre's suggestion, you may lean towards PHP. With all of it's shortcomings, it does have one really good user manual. It is also easy to get started with and is installed on pretty much every host and goes well with Apache.

Also, w3 schools is good to learn about CSS and XHTML and don't forget to check out the specs at W3C.

Also, please read this Stack Overflow question & answers.

alex
+7  A: 

You really need to understand html, forms and css to get anywhere. I say forms as this will give you the round trip needed to understanding the stateless nature of web dev.

To further labour the point, I have interviewed many people who think you can only have one form on a page and can only have one submit button per form. This is all down to a lack of foundation knowledge.

So for that I'd recommend starting with htmldog.com.

After that, a lot of web development is done with frameworks. Gone are the days where you do it yourself (well mostly) but my above point still stands. You do need to be able to peep under the hood with some confidence.

I've been doing web development for 12 years and started out with Perl on Solaris and Linux. Since then I've also done Java and more recently ASP.NET. However, I'm slowly falling for Django in my private projects.

What I've found over the years is that the inherent problems - cookies, javascript, presentation, state, authentication are all the same but just handled differently. So ultimately its down to you and your language preference. Plus a little of enlightened self interest when it comes to potential employment.

Programming aside, you should also become familiar with web servers (Apache and IIS spring to mind), Http codes and headers, Mime types and encoding and FTP. As well as Javascript (mentioned already), plugins, browser platforms and good development practises such as using Firebug, Fiddler and so on. It also wouldn't hurt to have a good idea of the image formats available, image optimisation, CSS sprites, content compression, caching and the like.

All depends on where you want to start!

For a newbie, I'd pick Django and (obviously) Python. Good, clean language with cheap startup options, low cost IDEs (ie free) and hosting your sites is very affordable.

But that's just a subjective opinion.

Simon
+2  A: 

I agree with John on this one.

As you know from your own experience in pursuing your BSc, understanding the basics of any language is what makes you even more capable in expanding that knowledge or specializing.

With that in mind, it would be best to understand the basics of HTML and CSS.

Understanding the syntax and overall language will help in the future when you want to pursue large projects using frameworks like Django and Rails. The basics will also especially help with tweaking CMS' like Wordpress to be more customizable to your needs.

One thing in particular that I'd like to mention is that web programming, like many other forms of programming has its own special structure and "proper" way of doing things.http://www.w3.org is a great way to ensure that your work is passing general web design standards, most sites don't follow this because it is tedious, but from a learning perspective it ensures that you get a nice strong foundation.

www.w3schools.com is also a great resource for detailed help on web programming. Lastly, I like colourful code, so I like using basic text editors such as notepad++ or notepad2 or gedit to do my web coding. GUIs like dreamweaver may tend to fill up your code with extra junk and spaces, so I don't recommend them, but they are still great tools.

Jaime
+2  A: 

Don't bother with Rails yet -- write CGI scripts in Ruby. It will be very similar to what you have done for class.

After you have about thirty of those under your belt, you'll know what you want out of a web framework.

Steven Huwig
Agree, write CGI scripts in a language familiar to you and learn what is easy and what is hard to do at that level.
Thorbjørn Ravn Andersen
+7  A: 

If it's as much a learning exercise as anything then take an iterative approach. Build revise. Build revise. My (very) rough guideline below:

Client

  1. Start with the structure of a website and concentrate on the client.
  2. Use notepad and build a bunch of static pages for your band. i.e. Hand code initially. Try to build all your pages with CSS. No table markup. Then play around with some Javascript to bring things to life. (Navigational menu\ Calendar selections\etc). Learn about how to import and link to Javascript and CSS files.... and how these files are treated re:caching etc.
  3. Try to learn up to the limits of what you can do on the client (generally). Factor in the nuances of 3-4 browsers (Firefox/IE6/IE8/Chrome) re:DOM and client side eventing.

Server

  1. Then start looking for what you might want to change across pages/sessions. i.e. what needs to be manipulated server side. And pick a server side technology.
  2. Start with basic post-back processing. Forget databases at this point. Learn how your framework of choice maintains state..... not just the name of the technology but the real nuts and bolts of it. One of your single greatest assets as a web developer is understanding the state model(s) of the technology you're using.
  3. Then go for a deep dive on the web server technology of choice (and in general). Understand the full request pipeline from client to server and back. This will teach you forms, http and its verbs, web server, filters and modules, server to framework hand off, page and control life cycles, back to the client.
  4. Now start working on dynamic content injection and the like. How to make and use reusable components in your web pages.
  5. Databases, caching, performance and diagnostics.
  6. Then get into into all the fun stuff like ajax, etc. Replace your javascript with jQuery, etc.
  7. Then you got the whole Webservices\XML\JSON\etc side of things to discover.

Resources

Well the web obviously. For client side stuff, going to the sites of companies who make third party web controls can be quite interesting. Asking how the hell they did that? Viewsource is your friend. Look at how they structure and build their pages. Pick a couple of good web designer sites, and you find a plethora of rants about browser wars etc that will give you good (under the hood) info.

Once you hit server side, I'd go for white paper type learning from your vendor of choice for your technologies.i.e. webservers/frameworks/etc. Again find a 3rd party howto/evangelist site (I used to use a lot of "4 guys from Rolla" for example) that will demonstrate how to do various things. Language learning is ongoing. Basically just do the best you can till you find a better way.... and always be on the lookout for a better way.

rism
amazing - exactly what I was looking for
Mutewinter
+1  A: 

I'm a Computer Scientist and a web programmer and I would suggest you learn both HTTP and CGI:

As the titles of the above tutorials claim, they made the concepts "really easy" for me.

Once you've got CGI and HTTP down pat, I'd suggest checking out following sites that provide a wealth of articles and references for web programming:

Assuming you want to concentrate on writing web apps, then Perl, PHP, Python and Ruby are all fine choices (I myself use Perl predominantly) and I'd suggest doing some research into the popular web frameworks available for each language.

Most importantly, pick something simple as your first web app, e.g. a form and a page that shows the results of submitting that form. Some good examples (using Perl's CGI module) can be found here:

When you want to start writing web apps that use a database, read up on SQL and popular libraries/modules in your chosen language for database manipulation, especially ORM (Object-Relational-Mapping) interfaces that allow you to deal with records in an Object-Oriented fashion.

Good luck with it! Being a web programmer is fun because your audience is teh intarwebz! :)

Youdaman