NOTE: In the next post to this one, I'll post either a list of links to good programming sites for each language or a site that has such lists. No time at the moment.
While I'm not a huge fan of all the web-based applications, you should keep in mind that the current trends seems to be more and more torwards web-based applications, so you need to consider this strongly. Of course the idea here is to build web-based software that you can also run on your desktop, but it does require a different mindset.
That is true and that makes your program "cross-platform". But there is great merit in making a desktop program - it is much more complex to make a LAMP/WAMP installer and then add your application to it and then get it up and running. Additionally, the user cannot fix it by uninstalling and reinstalling if another person has used the same method to make a portable desktop application and this user has installed that one as well on his machine. Conflicts with multiple Apache installs are a common thing, often resulting in both not working. Obviously your end user is not capable of installing and maintaining the very basic things about a webserver. so, desktop software will not go anywhere. And if you plan to make a living out of programming in any way, you should know desktop programing.
The most important question I think is this one:
"Do i want to learn programming skills mostly for the pleasure of learning it - or to make money?"
I second that.
I'd like to see it get a little bit better cross-platform support (see monow) before i embraced it, but i don't rule out doing more C# coding at some point.
Generally, the world goes where Microsoft wants it to go. That, to me, is called .Net v3. But Microsoft has also pulled in Novell and has never ever objected to Mono, inspite of the fact that it was a direct competitor to .Net. Now the cat is out of the bag, Microsoft wanted to forge a partnership with Novell all the way, so Mono was a smart trick they played on Linux. Which for us, means that Microsoft also plans to reach Linux users through Mono via the Novell proxy. So Mono *is* the future for some audiences.
App103 maintains a page she can point you too soon I'm sure.
(mouser: Link needed)
I'm actually a huge fan of the approach of finding a book that "speaks to you" and embracing that.
If you were thinking of learning Java, this is exactly what the "Head First" series achieves. Do have a look at it Amazon. The books are "cool" and "hip". They have a lot of fine technical info as well, but are written in a *very* informal style. (I personally find it distracting
Then there is the "The Missing Manual" series which is quite nice as well, but I'm not sure they deal with any desktop languages, do have a look, though.
The good thing about Java is that in the Java world, software, documentation, IDEs, other tools, information, users, helpful people, IRC, google groups / usenet, forums all are freely available in
The bad thing about Java is that it is perceived negatively, it does not look sleek/sexy, it needs 512MB RAM (may sound like a constraint, but it is an advantage
, when you consider that Microsoft's new big thing Vista, "just needs a minor hardware upgrade to 1GB of RAM". Java was supposed to be slow. Damn slow. But with M$ and Vista, a "minor upgrade of 1-2GB of RAM for normal operation" of the Wow
is "perfectly fine" considering that the hardware industry "follows Moore's Law"
It used to be said that Java is (C++)--
That is, Java is C++ minus its bad things
C# is (Java++)--
That is, Java with some cool features added and uncool features removed.
So, C# is the best, IMO.
What about the huge Java resource-base? Well, C# has developed an equally impressive one rather quickly due to the web's recent exponential growth.
See codeproject and codeplex.
Another question you have to ask yourself is if you want to develop Windows-only stuff or if you want your programs to run on Mac, Linux, etc.
If you want Linux interoperability also (ie. just a one button compile to have your C# code run on Linux), use Mono/C#
So, in short, either Mono/C# or .Net / C# should be your choice.
There are *hundreds* of sites and thousands of blogs, let alone blog posts, about good programming style, methods and practices. (Even I have written a blogpost!!!)
You should read a few, at least the good ones.
But, that's an overwhelmingly huge resource database. How do you deal with all those?
Use the following set of well-tested tools:
(NOT digg - which is a *social* bookmarking site - more opinion, less links)
Yoono, if you are comfortable with sharing your bookmarks - NOTE WELL - that makes your web surfing a PUBLICLY READABLE entity - as public as it can get - so you can't go looking for "britney spears pics" and bookmark that, if your surroundings don't allow you that (eg. office)
2. A feed aggregator. The popular one is Google Reader, but you may choose others if you fear google already knows enough about you. If you use a desktop RSS program, like I do, subscribe to ANY and EVERY feed on programming sites. Let me say it this way:
Law of information relevance and extreme interlinking on the WWW aka "2stepsback's Law"(just joking
): "Every news feed related to programming is directly or indirectly related to your current programming language and platform."
So, subscribe to every feed. Since feeds are meant to be one-line introductions about the topic of the article, generally sifting through the feed list gives you an idea of what you want to open and what not to. That is the only way you don't have to spend hours without tangible results on your specific project or task at hand
(which is what I generally do and then sit cursing myself at the end of the day
3. Usenet either via subscription to a news server or freely via freenode/etc, OR, freely via google groups - very very highly recommended - again, your every word is public record and permanent. NOTE.
4. Forums at the most popular sites.
5. mailing lists
That's a lot of side work to learn a programming language, is it not? Yes.
That's why we're here Traditionally, M$ Windows ppl (like me) have learnt programming GUI applications in VB6.0, which is now replaced by VisualBasic.Net Express *freely* available from Microsoft(!!)
That's one. Second, SharpDevelop from icsharpcode.net is equally good, if not better. Which is also what I use to earn my daily bread considering that Microsoft is known to change licenses when they feel that they are not making enough money out of people using their free software legally - they change the license or subtly still, they stop supporting it, or still subtly still, they introduce a better low-priced or heavily-marketed version that makes everyone stop supporting the earlier thing. That's really the point where it begins to trouble. No such for Sharpdevelop. You can always stop using Sharpdevelop without losing a penny and painlessly one-click migrate all your code to Visual Studio (whatever version) when you decide to purchase M$ products.
If you prefer Pascal or C#, go to turboexplorer.com, where they say, "the Turbos are back!" - and they are, really. Eclipse has forced everyone to give out free versions of their products. So, the Turbo Explorer Series is fully free even for commercial development. IMO, that's next best for learning C#, after M$ VS Express, and the only choice for Delphi.
Then there are Smalltalk, Eiffel, etc, but they are not mainstream and are not worth spending time on. If you want a cheap, supported version of Visual Basic-compatible compiler, then RealBasic is best ($100). Code is >95% VB-compatible. For free hobbyist use, there is LibertyBasic. OBasic, X-basic are totally different and NOT like VB, so stay clear.
Then, there are Boo and Nemerle, but they are far from extreme and they aren't supported by a big group.Ah yes, how could I forget Python!
Python is cool, hip, great, awesome, whatever else, and is recommended as a good first language by a person no less than Eric Raymond. IIRC, there is PyWin for Windows GUI development, has PyClipse, an Eclipse Plugin. I think there should be not less than 10 (T E N) IDEs (not smart-editors, but GUI designer-enabled *IDE*s for GUI python development) go to Python@wikipedia.