views:

1156

answers:

21

I've been doing application development for a long time but never really any web programming. I've made some (simple HTML) web pages in the past but that is the extent of it. I've got a pretty strong C/C++/C# background and I'm going to be getting up to speed on WPF.

I'd like to focus part of my development efforts on web development and it will be pretty much a clean slate for me. I've seen a fair amount of traffic talking about ASP.NET, PHP, Rails, etc. etc. and quite honestly I'm looking for some folks who've been doing it professionally to give me some feedback about which of the many routes I could take would be the one they'd take. The 'safe' part of me thinks that sticking with .NET type web development would be the quickest ramping up time, but there's a lot of the world NOT doing .NET web development. What would you choose?

Thanks, Matt

+6  A: 

Im a full-time PHP developer and I can tell you, and most people won't argue, that PHP has the best documentation available. Aside from that it is loosely based on C so that would be a bit of plus for you.

PHP despite it's bad rep among the .Net community is incredibly powerful, not nearly as slow as they say, easy to develop and fast to deploy.

Unkwntech
PHP's documentation is, by votes, the most popular "hidden feature" of PHP according to this question: http://stackoverflow.com/questions/61401?sort=votes#sort-top
Kyle Cronin
The documentation is the BEST thing about PHP, NO other language has anything like this.
Unkwntech
My favorite part of the PHP manual is the ease of looking up a function: http://php.net/FUNCTION-NAME (i.e http://php.net/date)
Unkwntech
+1  A: 

I personally do not know .NET but I have heard nearly only good things about it so sticking with it might well be a good idea.

I would suggest you look at some potential companies that you'd want to work for, tell them that you are looking to start web programming and that you'd like to know 1 or 2 key areas that they would want expertise in. Be friendly and polite and you may well find them very helpful.

It can't hurt to learn a little PHP, Python or Ruby too but it's not cruical.

Teifion
+13  A: 

Django.

After several years of using PHP for almost anything web-related, and a lot of other languages for anything else, i'm totally sold on this.

Hey, Google seems to agree with me!

Javier
Django is way nice.
docgnome
+1  A: 

With your great programming experience starting from C,C++etc.. I would say it will be just a piece of cake for you to start with new ASP.NET3.5. Because it hides a lot of Client/Server implications while you code. The new VS2008 environment is so cool to start with ASP.NET development.

And you have said you are interested in WPF also, so with that in mind you can try out Silverlight also along with ASP.NET.

StackOverFlow.Com is a best example of the new ASP.NET 3.5 website with MVC pattern

Jobi Joy
+1  A: 

It depends a lot on what are you going to do.

If this is just an experiment, to "see how things work", I'd recommend PHP: it's quick (and not always necessarily dirty) and lets you see a bit of the wiring which other frameworks and languages tend to hide.

I had a quick peek into Rails, and though the learning curve might be a bit steep (Ruby+ROR+Mongrel+HTML+Javascript+whatever) it surely is another good starting ground to build a small webapp in no time. But ROR does not let you see through its pre-made scaffoldings, so it is not very "didactic".

If you want to build professional software with a long lifespan, lots of maintenance, a lot of traffic expected and with many developers involved I think Java and .NET platforms are still the path to choose. I'm leaning toward Java, since it's the one I know better.

Manrico Corazzi
+5  A: 

Leaving the platform issues aside, you need to really like using the web. You need to use the web when you're not writing applications for it, looking at how things are done and always bear the user in mind.

And you need to see web development, not as a poor cousin of real development, but as developing applications for an awkward, non-homogenous platform with massive reach, that is massively relevant in todays world.

Too many non-web developers think of web stuff as tinkering and frills. Unsurprisingly, they don't make good web application developers.

reefnet_alex
I think I'm quite the opposite of your statement - I think web development is a 'whole different world' that I suspect will continue to gain market share, particularly since so much is done on the web these days. Thanks for the input.
itsmatt
I had meant to add that you've already ruled yourself out of this bracket by asking the questions you have!
reefnet_alex
Plus, web developers are also jealous that they don't know how to write NT kernel mode device drivers and the like... :)
reefnet_alex
+10  A: 

I have been developing web sites since 1996.

You have three alternatives at the moment:

  • Java The most used of the three, not so easy to learn because of the huge quantity of libraries ("the stack"). Generally used on large sites.

  • PHP Second to Java usage-wise, it is simple to learn, but hard to scale (*). As a starting platform might not be so good because it is easy to pick up bad habits, like not separating code from presentation. PHP has ways around this (like Smarty) but it's not included in the standard distribution. It is mostly used on small projects (but also on large ones, like Facebook)

  • ASP.NET Arguably the least used of the three, it offers a very good compromise between complexity and power. It is very fast, but it does not have the open source support that the other two alternatives have. Generally used on small/medium size sites.

Whatever you choose, though, learn how to use a Database and SQL. You will need it!


(*) Note that this is disputed in the comments and it is merely a personal opinion. I am referring to the coding style that would come "natural" to a self-learner using these languages.

Sklivvz
Thanks for the input - I've starting doing some DB work this year, but am by no means an expert. Appreciate the breakdown of the alternatives.
itsmatt
I'd argue that PHP scales incredibly well see: sourceforge.net, several million hits per day (if not more) and built in PHP.
Unkwntech
Unkwntech, PHP scales, but it's hard to scale. You can bet that those site are not written like common php.
Sklivvz
@Skliwz: No it's not. Facebook, Yahoo, Digg, Flickr. All handle a lot of traffic, there are no secrets to scaling PHP.
Till
Let's stop this, it's degenerating into holy war.
Sklivvz
Developing good or bad habits is not a matter of the technology of choice, imho. But the communities behind Java and PHP are quite diverse in their approach to development.
Manrico Corazzi
PHP is not hard to scale. Just about any language scales the same way: via its architecture.
Ryan Doherty
This list lacks python/ruby. I'll throw in smalltalk+seaside just for kicks.
Zach
@Zach: The purpose of this list is not giving every possible alternative. Then I would need to put in Perl, C, etc... the three alternatives already cover more than 90% of modern sites and I think that choosing one of the three is a betters starting point than learning much less used languages.
Sklivvz
@Zach: (cont.) If you think Python or Ruby are good starting points, you can give an answer separately. Thanks for your feedback!
Sklivvz
+4  A: 

I was going to mod up the PHP answer, but to be honest it's really more about you and what kind of support environment you require. The other thing is that web programming is very different from application programming (mostly because of security), so it might be a good idea to NOT stick with what you're comfortable with (force you outside the square and all that stuff).

da5id
+6  A: 

I would suggest using the new asp.net MVC framework.

Reasons:

  1. It is still part of .Net, so you get to leverage your existing .Net/c# skills

  2. The conceptual model is MVC (Model-View-Controller) which is what a lot of the other non-.Net web frameworks are like, so that if you later say decide to try Ruby on Rails, you will already understand it's conceptual model.

  3. It is not the default asp.net web forms model, which I think is a good thing, because that model attempts to hide the way the web works from you, which in the short term is useful, in the long term only harms you.

zadam
+4  A: 

Whichever route you choose to take, take some time to hand write some stuff in HTML, CSS and JavaScript. Many frameworks will generate controls and layouts for you but there is no substitute to knowing how the browser (or different browsers for that matter) react to the actual code. Its the C of the web and you should at least have a feel for it.

Besides, JavaScript is a pretty neat programming language which is simply fun to use. Check out Douglas Crockford's site.

Avner
Thanks for the link, Avner.
itsmatt
+3  A: 

Django is excellent, as is Pylons, which I don't see recommended here yet.

William Keller
Thank you William for the link to Pylons - I'll check it out as well as Django.
itsmatt
+1  A: 

I would say that thing that seemed important to me was understanding the whole process. From initial browser request through the server back out to the response back to the browser.

Knowing the process will help you understand what frameworks are trying to accomplish better (no matter which you are using).

I did some Python/Webware stuff for my first job and found out not knowing this hurt me. I don't do web stuff anymore, but if I ever do I will go back and review all of that no matter what tools I am using.

Arthur Thomas
+1  A: 

Since you're already familiar with the Microsoft eco-system (tool-chain) I would suggest you stick with it and start doing some ASP.NET stuff to learn the basics of web development. Then start applying your C# skills to create more advanced stuff.

+3  A: 

I think it depends on what kind of websites you want to create, and what kind of support you need.

PHP has by far and away the best documentation of all languages I've used. There's also a lot of support out there for web apps written in PHP; a lot of open-source projects, a lot of code snippets, a lot of tutorials. As always though, the good comes with the bad, and there's also a lot of really shite code out there that will hinder rather than help you. There are quite a few frameworks for PHP so that you can write your code in an OOP manner and shorten down the time it takes to write something. PHP gets a lot of stick, but is really easy to pick up, and will give you a good primer on writing code for the web.

Ruby (on Rails) has been getting a lot of hype lately, but personally I don't think the documentation is quite there yet. Ruby is also considered quite slow by some, which I guess isn't a factor if you're looking to learn, but perhaps something to consider. Ruby has a better reputation than PHP.

I see someone recommended Django above; I really love Python, and the Django framework is excellent. If you started off with that the learning curve might be a little higher, but in my opinion it would be well worth it as Django makes it really fun and easy to code.

I don't really have an opinion on the .NET languages. I've been working as a web developer for ten years or so and have never had occasion to use them.

At the end of the day, it probably isn't going to matter much which language you learn, as most of them can be used for most purposes (I stress the most, obviously not every language is a good tool for every job).

As well as the language, you should consider other aspects of web development that may not be present in software development. For example, relational databases, security, and presentation standards. You might also want to look into learning JavaScript, which is similar to a lot of languages, and will help you when presenting content.

thesmallprint
+1  A: 

I wouldn't forget about coldfusion, contrary to popular opinion it is NOT a dead language. It still had huge support from adobe. Its on its 8th adobe release and already three open source alternative and proprietary engines (railo, openbluedragon, smith project). They compile down to java at runtime so you can use the wealth of java libraries in your coding. I have even seen object written in coldfusion mark up language (cfml) that were then loaded in pre-compiled java programs, essentially writting java on the fly, but without the headache of java server pages (jsp's).

I've found the community smaller, but quite helpful. Also a surprising amount of internal applications still run it. Standard sales pdf ( swear i believe its a viable solution and don't work for adobe LOL!)

Also if interested in RIA's (rich internet applications) coldfusion, adobe's version at least provides seemless integration.

ethyreal
no worries, every language has its own libraries and frameworks and can easily tackle every problem, its really all about which one you are most confortable with.
ethyreal
A: 

I'll go against the flow and recommend ASP.NET to you. I have seen your earlier posts and from that I can gauge that you are quite comfortable with Windows development in C#.

With ASP Web Forms, you will smoothly migrate to web app development while utilizing the tricks you learned developing windows apps. Your knowledge of the .NET framework already provides you with the foundation for web development using C# and ASP.NET.

Moreover, although PHP is a very good web development language, developers with lots of .NET programming background get turned off by it's laissez faire attitude and it's structural (functions based) approach.

Finally, to be fair to ASP.NET and PHP, I suggest you write a small application in both using features such as AJAX and grids and see which was easier and more fun to work with. My bet is on ASP.NET

Abbas
Thanks Abbas - a good idea to try them all out and see.
itsmatt
+1  A: 

ASP.NET has some pros:

  • Easy to install and configure (once you learn your way past the gotchas)
  • The .NET libraries will cover your needs for most tasks, and aren't impossible to figure out
  • Good IDE, with a WYSIWYG page designer (although everybody has that)
  • If you already know C# or VB, it's an easy transition
  • Master pages, while not a Nobel-worthy idea, are at least a relatively easy way to make all your pages look kind of the same

and some cons:

  • Lots of different ways to perform the same tasks, many of which encourage forgetting to close streams or to explicitly dispose of objects
  • Weird event model designed to make web page programming seem like windows forms programming is (IMO) an excellent implementation of a bad idea
  • So-so integration between the server-side code and the client-side javascript
  • Lack of just a simple damn calender date picker control (unless one of these is now in ASP.NET 3, you will waste a lot of time finding one of these and putting it in your project, and you'll probably end up having to incorporate some huge folder structure full of *.js files, a few of which reference needed *.js files on the Internet, making your app sometimes break mysteriously when running on the client's intranet)

I would recommend using ASP.NET, but only because that's all I know.

MusiGenesis
Thanks for your input.
itsmatt
+1 - Good listing of pros/cons, regardless of that being the only background.
Mat Nadrofsky
A: 

It seems that "web programming" is what you need. Then PHP is the fastest way to get it. Very good documentation and lots of examples will make you a web programmer fast. The syntax is C like so it won't stand in your way. After you are good at creating web apps then you can move to other languages and frameworks and concentrate on those not on "web programming"

alfinoba
+1  A: 

You need to realize that programming for the web, especially if you're doing GUI programming, is a bit different from application development, and you need to find out what these differences is.

  • statelessness
  • do's and dont's
  • vulnerabilities (xss, sql-injection etc)
  • javascript integration on front end
  • ajax technologies
  • etc

Platform wise, stick with the one you know, if you've done c# dev earlier, go for asp.net to get a quick start.

:)

//W

superwiren
thanks for your feedback!
itsmatt
+1  A: 

I'd say avoid php, the language is really a mess. As I become a better programmer I am really seeing the issues with php.

Since I'm currently learning Ruby, I would recommend that. In addition you can do desktop development with Ruby which makes it even more appealing.

The syntax is more of a jump from C than PHP but it might open your mind to new ways of thinking about problems.

Mark Lubin
+2  A: 

I know a lot of people have given great advice here already, so my only advice would be:

  1. Learn HTML+CSS+javascript. They are the backbone of the Internet from a client perspective and ultimately you need to know what the higher level languages and frameworks are going to emit.
  2. Understand what is going back and forth across the wire between client and server.
  3. Start thinking of decoupling systems.
  4. Understand how relational databases work.

Once you've got this all in hand, you're much better positioned to choose a higher level language/server architecture/framework.

ASP.net is good, but hides so much that unless you really know what you're doing, you can really create a 'heavy'/slow site. Particularly if you don't know what AJAX is doing under the hood, you can easily create a slow site. Still, obviously Visual Studio is awesome, and if you know C#, you can just get on with making a site without too much trouble. I would likely start with the newer MVC way of doing things than the Forms approach, for lots of reasons that you can read about. Just my opinion.

PHP is good and incredibly successful, but I found debugging to be tedious, although I believe there are so great tools here from Zend which help, but I haven't used them. I just logged everything (like the good old printf() days ;))

I think one other option which could be good for you, is to try out Google App Engine (GAE), despite it's various gotchas and issues, with GWT (Google Web Toolkit). I've found this an excellent environment to work, because you don't have to worry about servers (Apache/IIS) or traditional databases (SQL/MSSQL), you just write in good old Java for the backend, and also Java for the client side, which emits very optimised javascript. Plus you can work inside Eclipse on Mac/PC (I'm on Mac nowadays), with full debugging etc. You will be forced to think in a distributed manner right from the start, including database structure, so you'll build good habits. It also supports Google accounts sign in, as well as memcache and session state. Really, I think it's an excellent solution and could be a great way to get started.

Oh, and you can also code in Python if you like on GAE, which is nice because you can try out two new languages easily.

That said, if you're looking for a job in this business, you'll probably need ASP.net, so you might not have much choice. Just make sure you understand the points 1.2.3 above.

Anyway, good luck. I was in your position a year ago, and I tried it all, but ultimately settled on Google App Engine+Java.

Shane
Thanks for the input - the GAE/GWT environment sounds interesting though I'm not a Java dev.
itsmatt
That's ok, you can code in Python too :)
Shane