+3  A: 

Go straight to MVC2, and skip webforms!

Mitch Wheat
MVC2 is ASP.NET. I think you mean skip WebForms - which is a very good idea.
Charlie Somerville
Oops, I did!....Thanks
Mitch Wheat
I **wish** I did this. Instead I'm now stuck maintaining a system I had a large hand in writing which would've been much better suited to MVC than Webforms. It is crucial to learn Webforms though for legacy code and because sometimes it does fit the problem
Earlz
@Earlz - At work we're developing new sections in MVC and slowly transitioning older WebForms sections. It's actually fairly easy to share, e.g. use controls in MVC or partial views and controllers in WebForms. But this is suited for an actively developed application, not one in maintenance :(
orip
@ori well it's being actively developed, but so much code is already WebForms and we are attempting to get to market relatively quick.
Earlz
A: 

I'm a mostly-C programmer who has recently (over the last 6 or so months) picked up a good deal of experience with PHP, PostgreSQL, jQuery, and HTML. I plan to learn Ruby on Rails in the near future.

I guess the best place to start would be (if you haven't already): learn you a jQuery. Although working with jQuery (along with CSS and HTML) will teach you crucial web development skills, it will also be an enlightening experience. In my opinion, jQuery has one of the best APIs on earth.

There's not much to say in the area of SQL databases. PostgreSQL and MySQL are the leading open-source SQL RDBMSes, though there are many others. If you already know SQL, you will probably feel at home in just about any SQL implementation.

How well do you know PHP? Have you made any PHP-based websites that work in concert with a SQL database? After getting a feel for PHP doing simple stuff, you may find that you're writing more code than you really should have to (e.g. simple table pages taking 300 lines of code). This is where frameworks come in.

Joomla! and Drupal are two major PHP-based content management systems (CMS). CMSes revolve around articles; just write some articles, and the CMS will figure out how to display them. They can be extended with plugins that you write in PHP, and you'll pretty much need to write plugins if you plan to have arbitrary applications on your site using a CMS. Because CMSes tend to be a good fit for many websites, I guess they're the "frameworks" of the PHP world.

I plan to learn Ruby on Rails next because it's designed for high productivity. Until I learn it, I really can't say much about it.

Joey Adams
-1. It's pointless to learn jQuery when you have no idea what HTML is.
Earlz
@Earlz: It's pointless to learn HTML when you have no idea what a keyboard is. Okay, to learn web programming, start by learning how to use your fingers. To use fingers, you need to rely on your brain's procedural memory to actuate the appropriate muscles, a skill many developers hone over the course of their lifetimes. After that, you can graduate to higher-order skills such as starting up a computer and inputting information. Of course, none of that matters if you have not learned to process sensory input and utilize inductive and deductive... I said "along with CSS and HTML", btw
Joey Adams
@Joey Yes but you made it more like "You should learn jQuery and as a secondary thing learn CSS and HTML" since it was in parentheses.
Earlz
I have to wonder. Does anyone really need to state explicitly that they know HTML? I know HTML, XHTML, XSML, XSLT, JavaScript, and CSS.
Sean Ochoa
@Sean: Mmm...Well, since HTML is not a *real* programming language anyway...http://stackoverflow.com/questions/145176/is-html-considered-a-programming-language
Robert Harvey
@Joey Adams - don't forget PHP's frameworks, such as Zend Framework and CakePHP. If you like the language, the frameworks are there. If you want to try a new language, then go right ahead with RoR, you won't be disappointed, but you won't be disappointed learning to use PHP better either.
orip
A: 

Given your background, and given that you have stated that you are looking at the future for a position in non-Microsoft technologies, then I would suggest your best place to start would be to learn more PHP.

You mention that you have some PHP knowledge already, so that would be a good foundation to move to a good PHP framework such as Zend; CakePHP; CodeIgniter. All three of these frameworks utilise an MVC approach, which is only going to make your life easier on bigger projects. Whether it's worth it for smaller jobs is something you need to decide.

Couple that with some MySQL or SQLite database development and you're already most of the way there as far as server side is concerned.

When it comes to front end stuff, again there are a raft of frameworks available to make development life easier. The most common options (hence the easiest to come across samples and help) would be the JavaScript frameworks, jQuery and MooTools. Whilst many people see these two frameworks as being interchangeable they are and they're not, depending on what you want to achieve.

Aaron Newton has put together a great site which summarises and highlights the differences (and similarities) between these two popular choices.

http://jqueryvsmootools.com/

There are also a large number of CSS frameworks available if you want to go down that route, such as 960 Grid System and YAML.

IDE-wise, well it depends upon your development platform. I use both Mac OS and Windows, but for different things. I tend to do most of my web work on the Mac and use Coda with MAMP, but that's more personal choice than anything else.

On the Windows side, I don't think you can go wrong (IMHO) with Visual Studio. I use VS.PHP for PHP coding which gives you all the power of VS when writing PHP, which saves oodles of time. But again there are a raft of options to choose from, all of which come down to personal taste, and to a degree budget - although never rule out something just because it costs a few quid/bucks. If it's going to make you more productive in the long run then it'll save the cost of itself pretty quickly.

Ira Rainey
-1 for what exactly? If you disagree with any of my points then that's fair and valid, but without expressing that an anonymous marking down of an answer is pointless.
Ira Rainey
+1  A: 

try Ruby on rails, used for rapid development very successfull

http://rubyonrails.org/

klay
of course u need:http://www.w3schools.com/ for CSS, HTML, JavaScript.u need also Jquery: www.jquery.com: very good library...
klay
+7  A: 

I was in your shoes a few years ago. My suggestion is: learn the basics of web programming by building your own web framework.

It's not that difficult, and it will make you really understand the different layers in a web stack. If you use a specific language and environment for this you'll gain good experience in those. In your case, Python on Linux sounds appropriate.

  1. Write a simple TCP server that listens on a port and returns some "hello world" string. You can use Python's SocketServer. Not all browsers will display it without the HTTP headers.
  2. Make that server return a proper HTTP response (you can hard-code the HTTP headers). You could use Python's SimpleHTTPServer, but then you'll miss out on the precise structure and relevance of the HTTP headers.
  3. Learn HTML and return a proper HTML page.
  4. Write a trivial URL router. Examples:
  5. Use a templating engine, such as Mako, Genshi, or Jinja2, to generate the HTML.
  6. Add an SQLite DB.
  7. Add a URL to your app that returns some JSON response, using Python's json module.
  8. Learn some JavaScript, with or without a framework (preferably both), and use it in the page for some AJAX (with the JSON URL above).

Now you have an extremely basic, but functional, full web stack. You can write a trivial application to see it working, e.g. a blog engine.

Up until now all the steps are language and platform agnostics.

The next steps would be to flesh out your framework with more standard Python components:

  • Replace your TCP/HTTP server with WSGI, and change your layers above to hook into the WSGI API. This means that your stack will run on almost all web servers (even Google App Engine, apart from the DB component), and you'll learn the API well.
  • Replace your routing with a standard routing component, like Routes or werkzeug.routing. Search the web for examples of integrating these with other frameworks to help you out.
  • Use a DB layer such as SQLAlchemy instead of accessing the DB directly.

IMO, you now have a complete education in web framework basics. Whichever real web framework you try next, you'll have a great understanding of everything working behind and in front of the scenes, which will give you leverage in tweaking anything you'll need.

I believe this can be done over the course of a few weekends, just to remember to keep it very rough around the edges. This is a learning exercise, and if you don't resist the urge to polish it you will spend an incredibly long time on it.

orip
This is probably one of the best suggestions and/or answers that I've ever seen on stackoverflow.com. I can't express how cool it is to know that there are others out there that learn this way. I should mention that I've done this sort of thing (i.e. learning by exercise, investigation, and example). Thanks.
Sean Ochoa
@Sean Ochoa - HTH. Beats me why this approach isn't more popular, for me it's effective and fun :)
orip
@OriP As a result of your answer to my question here, I've begun development (on the side) for a tool to help my wife with her writing as a novelist. I've got a list of requirements from your answer, and I'm about halfway done. I've got another 3 projects slated to be completed in the next seven months. Technologies that will be covered in the different projects include (in no particular order): Django, Zope, Jquery, CherryPy, Java, Perl, RoR, CouchDB, MySql, PHP, Asp.NET MVC 2, and Silverlight. Its ambitious, I know, but it'll make me a real contender for a web development position.
Sean Ochoa
Awesome! Share your results if you feel inclined (and have a blog...)
orip
@OriP -- LOL. Yep. I just set one up last night: http://import-sean-life.blogspot.com/
Sean Ochoa
A: 

My two cents:

  • Learn HTML and CSS thoroughly. These are the very basics.
  • Learn Javascript and jQuery. jQuery makes life so much easier.
  • Learn some basic Ruby. This is to enable you to leverage more power out of Rails, rather than just starting with a framework.
  • Try Ruby on Rails. It is designed for rapid development, and does lots of the little things for you.
bennybdbc
+1  A: 

My suggestion is to go off the mainstream, and study Erlang.

Why?

  • It's a language designed for concurrency, distribution and fault-tolerance, which are important qualities for a server-side application.
  • It's not "more of the same": Erlang is a functional language which supports asynchronous message-passing. It presents a chance to study new programming skills while working in a real-world environment, not in an academic context.
  • The Erlang standard library and public code-base includes many smart designs for scalable applications, and there's a lot to learn from it.
  • Great web frameworks and facilities, such as Nitrogen, CouchDB and Riak.
  • Entirely Open-Source.
  • Comes with it's-own built-in debugger and other auxiliaries, so you are not too dependent on a specific IDE.

I'm know that Erlang is not well-accepted in the market. However, I find it a great personal skill. It forces you to think more clearly about parallelism and events, thus helps you to design better scalable applications.

Little Bobby Tables
A: 

If you want to land a job working on open source, you're quickest route is to become a contributor to a project. Start by contributing bug fixes and work your way up. There's nothing that goes further in the interview than,

Q: You don't have much Open Source experience. Do you know the Foo Framework? A: Yes, I'm a core contributor to that Framework. I've been working on it as a side project.

You can't be an expert in all open source projects, but being an expert in one can get you a job.

Some ideas:

  • pick a project that will be popular, not end of life. This may be easier said than done, so there's some risk you'll pick the wrong thing. But remember-- having an active development community is actually a major contributor to the success of many open source projects.

  • Figure out what you're MOST interested in: Ask yourself what you're most passionate about: How close to the front-end do you want to be? There are emerging CSS frameworks, lots of interesting Javascript work evolving, as well as all the server side and new database approaches.

ndp