Comment Web (Score 1) 565
I've been developing professionally for 25 years, and used a good many languages and environments in that time, including all of those that you mention.
The vast majority of our development these days is web delivered apps, which in general appears to be the way things are going, certainly in the Enterprise. They might be a bit more work to develop, but from a deployment and maintenance point of view they're fantastic.
So, if you were to spend some time learning HTML, CSS and Javascript, then you'll be in a fine position to develop not only websites and desktop apps delivered through the browser, but also apps for the iPhone/iPad/iPod Touch, Android devices and several others using the likes of PhoneGap or Titanium. These basically act as a wrapper around your web app and give you access to things like GPS, touch events etc. from within Javascript, as well as allowing installation in the same manner as a regular natively coded application.
Of course, you'll need a server side language, and whilst C# and the Microsoft
This setup doesn't however exclude you from developing "local" desktop apps, as something like XAMPP (which you'll probably use for your development environment anyway) will give you a pretty small install that includes a web server, database, PHP and various admin utilities, which can be dropped on the user's machine. In a small production environment, you can also use XAMPP on a server. If the size of your installs is a major issue, then there are a number of tiny web servers which can just be dropped onto a client machine, and I set up one a while ago which included PHP and the relevant libraries that came in at under 2.5Mb when compressed.
You may also like to take a look at ExtJS and Touch from a company called Sencha. Whilst there's a bit of a learning curve, these Javascript libraries/frameworks provide you with a toolkit of client side components which allow you to build apps that look and behave in a very similar manner to their classic desktop GUI counterparts, and end-users tend to like that sort of thing a lot. There are other frameworks which do a similar job, but coming from a traditional GUI development background, I found that they gave me a familiar set of controls and a similar event model, which just seemed right.
If you go the PHP route, also consider using something like CakePHP for building your back end. It's a modern Model-View-Controller framework which provides a simple and scalable way to build a model driven back end, handle routing to give your application structure, and maintain a separate set of presentation pages, which depending on your application may simple be dumping out JSON or XML data. CakePHP will even automatically build you a "scaffold" which is essentially a simple web application for administering your database. You'll probably not want to use this scaffold for anything other than testing, but you get a lot, very quickly, for very little effort, and it's a good way to learn how it all fits together.
There are a lot of very good free applications out there which you can use, especially if you choose PHP as your back-end language, and with one exception (a designer for ExtJS front-ends from Sencha which is great for prototyping) everything I use day-to-day is free, and in most cases cross-platform:
- XAMPP (Apache, MySQL, PHP, FTP server, essentially a full server back-end which you can run locally on your machine)
- Netbeans (in my case the PHP version, which is comfortably the best development environment I've found, with recent versions of Visual Studio coming in a close second)
- MySQL Workbench (a great admin and database modelling tool)
- TortoiseHg (a front-end for the Mercurial version control system, which integrates nicely with Netbeans, but the Windows version also includes a handy shell extension)
- Google Chrome (very fast and includes excellent web developer tools, but also consider Firefox with Firebug)
- ExtJS (you can use the Open Source version until you have your apps ready, and then just pay a very reasonable annual subscription which also includes support)
- JQuery & JQueryUI (a nice Javascript library and set of controls which are a better fit for building websites and some types of application)
- IETester (Windows only. Allows testing of your app/website in all versions of IE since v5.5)
- OpenOffice.org (as a development tool, I use it to put together PDF form templates which my back-end applications fill in, but it's also a damn good office package)
- VirtualBox (for setting up test environments, and copies of client production environments if you're in a position to do so)
- AutoHotkey (Windows only. At a basic level allows the setting up of hot-keys for various tasks if you're a keyboard oriented developer, but also offers full scripting if you need it)
- VirtualDimension (again, Windows only, but gives you multiple desktops, allowing you to better organise the applications you have running)
- Filezilla (an excellent FTP client)
- 7zip (very handy and flexible compression/decompression tool)
- The Gimp (you're likely to end up drawing icons and cutting up pieces of artwork if nothing else)
Whilst others will no doubt have different preferences, I've tried a lot of different tools and settled on these as the best for my requirements.
Once you start using these sorts of tools, you'll quickly realise just how good they are, and may like to make a donation to the relevant projects.
The one thing you'll definitely find and absolute ball-ache with web app development is browser compatibility issues. You'll need to test in all of the browsers you can get your hands one, and invariably everything will work fine except some if not all versions of IE, which will require some tweaking. Using ExtJS and/or jQuery will help a lot as they include work-arounds to handle most of the common problems, but there will still be plenty of frustration ahead.