[Semi Offtopic]Programming?
If you're intent on using Windows, the best compiled language you can probably learn is C#.NET. It's in wide use, and it's actually a really good language for a MS product. It's a proper OO language with all the trimmings - generics, delegates, lambdas, garbage collection, etc; and without the headaches of something like C/C++. As of 4.0, there's even a limited form of dynamic typing.
The downsides are, having an IDE is pretty much a requirement, and all the open source IDEs for .NET pretty much suck (you can check out SharpDevelop if you want). Your best bet is to pick up VS.NET express, which is free, but it has a subset of the features, and you wont be able to install Resharper, which I find so helpful as to be nearly essential nowadays.
So if you're serious and you don't mind spending some cash, I would buy VS.NET 2010 and Resharper. But if you're just doing it as a hobby, VS.NET Express by itself will do fine.
For web development, I would start off with ASP.NET MVC, which will teach you some important design patterns. I wouldn't bother with Web Forms anymore, which just encourages bad habits. WPF is the fat-client app framework of choice, though as a web developer I haven't used it much and can't give much guidance there. If you're creating something with a database, I would highly recommend using an ORM like NHibernate, which should be generally less painful and less error prone than using ADO.NET, at least in simple cases.
I'm not sure where to point you for a basic OO primer - probably just Googling something will do, but after you pick up the basic concepts of inheritance, polymorphism, and encapsulation, and have played around with OO in C# a bit - I would start yourself off on the right foot and pick up the book Head First Design Patterns, which is a more accessible version of the seminal work by The Gang of Four. I would read up on Uncle Bob's SOLID principles, Unit Testing, and Test-Driven Development.
Obviously how much of these things you pay attention to is going to depend on how serious you are. If you want to just hack out some code every once in a while on the weekend, then many of these things probably don't apply. But if you want to actually learn the proper practices of software craftsmanship, then I believe those concepts put you on the right path, and you'll probably discover more as you go along.
Having said all that, I would at least consider using Linux for this, and going with Ruby on Rails. Ruby is a better OO language than almost anything else around, and the Rails community typically have the best practices and standards regarding high quality design and coding. Ruby on Windows, is, however, a huge pain - so I wouldn't recommend it unless you go with Linux or Mac.
bababadalgharaghtakamminarronnkonnbronntonner-
ronntuonnthunntrovarrhounawnskawntoohoohoordenenth ur-
nuk!
BTW, happy birthday!
bababadalgharaghtakamminarronnkonnbronntonner-
ronntuonnthunntrovarrhounawnskawntoohoohoordenenth ur-
nuk!
Another vote for C# .NET. Not only is it free to get started (you can see the link provided by james_joyce below), if you're familiar with Windows applications at all the logic behind a lot it will be immediately familiar, at least in terms of creating basic application functions like button clicks and drop-down menus.
The reason I say C# and not Visual Basic is that C# bears a closer resemblance to C++, should you ever desire to start working with that. It's also my feeling that people who pick up C# tend to do better at switching to Visual Basic when the project requires it than vice versa, simply because Visual Basic is the easier to "read" language, IMO. Also, you may be thinking "I'll never be good enough to do C++" but with baby steps you might surprise yourself. Since C++ is the language most big budget games are written in it's a great language to know if you ever decide to do mod video games, for example, as you can do with stuff like Civilization IV (a game that actually ships with its source C++ code for you to toy with; IMO an ASTOUNDING resource for the aspiring game programmer).
Note that knowing C# or VB will also allow you to develop develop for Silverlight, Microsoft's Flash competitor (used on sites like Netflix to broadcast your movies). That is also free to get started with, but requires you to download Microsoft Visual Web Developer, a separate tool. Personally, I am a former Flash developer who now prefers to work almost exclusively in Silverlight due to cost savings.
(Note, however, that my clients sometimes want things developed in Flash anyway. That language is ActionScript 3, which I actually find to be "learner friendly." It is, IMO, much easier to learn the basic steps of writing a game in Flash/ActionScript than almost any other tool/language. However, I also find that as projects get more complex ActionScript can become frustrating, due to limitations that language has. In particular, ActionScript's insistence on making Arrays generic objects can lead to HUGE programming headaches that C# sails by; on the other hand, I have lost countless hours yelling at C# on my computer monitor because I can't figure out what load path it's using to grab external pictures/sounds/XML files etc.)
The deployment limitations of .NET can be frustrating, as james_joyce noted in his post.
I have no experience with Ruby on Rails but after reading Jame's praise for it may need to check it out.
Much to think on there, thank you both.
How serious I am will depend on how quickly I pick it up, in an ideal world it'll get me a job... obviously the world is far from ideal so it'll most likely be something I use to make things more fun.
I'll certainly give Ruby a look at though not sure if it'll go further than that, while C# (keep calling it C(hash) not sharp) was something I had already looked at but wasn't sure if it was any good for someone starting from scratch or not. As for C/C++ I've looked at them (well IIRC C++) in the past but never got further than that... and it was the distant past, (Borland C++ 4.5 IIRC came on about 8 floppies).
Edit: Just booted my linux box and tried to add any form of Ruby (which I'm after rather than the web development for RoR) and found that a)My Kubuntu install is very out of date and b)Couldn't get either package manager to install anything to do with Ruby. And I'm not going to start compiling stuff myself at this stage. However I will grab a new Kubuntu disc at some point soon and do a clean install (I'll stick the laptop onto Win7 while I'm at it, and then try again. Until then I'll give C# a go.
I'll certainly give Ruby a look at though not sure if it'll go further than that, while C# (keep calling it C(hash) not sharp) was something I had already looked at but wasn't sure if it was any good for someone starting from scratch or not.
|
Edit: Just booted my linux box and tried to add any form of Ruby (which I'm after rather than the web development for RoR) and found that a) My Kubuntu install is very out of date ![]() |
bababadalgharaghtakamminarronnkonnbronntonner-
ronntuonnthunntrovarrhounawnskawntoohoohoordenenth ur-
nuk!
I think it's hard to argue that C# is easier for beginners than C/C++ - the syntax is much more semantic, and you don't have to worry (for the most part) about pointers or memory allocation. Java is good for beginners for the same reason, but it's gotten pretty bloated over the years. However, Java would be a good alternative if for whatever reason you didn't want to go with C#.
|
Then again, I don't know much about C#, as I never ran across it in the field. I mostly use Perl in my work these days, but I would advise AGAINST it for the simple fact that it's much more heavily reliant on sygils and "default" variable, two things I can never remember offhand.
Samuel_Tow is the only poster that makes me want to punch him in the head more often when I'm agreeing with him than when I'm disagreeing with him.
|
I want to be different and cast my vote for Java. It may be a bit bloated, but it has an excellent free compiler in Eclipse, the Java runtimes are free and easy to acquire and already on a lot of PCs due to being required for some sites, and Sun Microsystems provide excellent free support with a full library of classes and their uses. Half of what I know about Java, I learned from library-diving in their archives.
Then again, I don't know much about C#, as I never ran across it in the field. I mostly use Perl in my work these days, but I would advise AGAINST it for the simple fact that it's much more heavily reliant on sygils and "default" variable, two things I can never remember offhand. |
The downsides of Java, at least a few years ago when I was using it, are that 1) You often get caught in XML hell - every configuration file seems to be in complex XML and it makes my brain hurt. I never encountered fluent interfaces or convention over config until C#/Ruby. 2) I really dislike their fat client library Swing for semantic and design reasons. You can always tell when something is Swing - it just looks off. Maybe this has changed since I used it (which was a while ago). 3) I also don't think they have a good MVC web app framework, though I could be wrong. I really dislike JSP after using it for a while.
I will say, I think the Java community does a better job encouraging good practices than the MS community. For instance, in .NET there's a movement called "Alt.NET" which is basically people who want to do .NET using good OO principles and design. In Java, that's just the mainstream community.
The other minor thing I like about Java is the syntax around inheritance. They actually use keywords instead of symbols, "extends" and "implements" rather than a colon. I always prefer semantic keywords to symbols.
That's actually why I hate PERL so much.

bababadalgharaghtakamminarronnkonnbronntonner-
ronntuonnthunntrovarrhounawnskawntoohoohoordenenth ur-
nuk!
Since you want to primarily work on the Windows platform, like others said, C# would be good to learn. It's a full blown OO language so if you ever decide to learn Java or C++ down the road, they'll be easier to pickup.
Visual Studio is a great IDE, I'd say it's Microsoft's best product, although it can be pretty expensive. The free version should serve you fine for starting out.
[U][URL="http://boards.cityofheroes.com/showthread.php?t=251594"][/URL][/U]
If you're just going to learn to program "academically", you can go with any of the above. If you learn better having a specific objective in mind, i.e., making something useful, you can always try VBA, particularly inside of Excel, to make good stuff.
@Texarkana
@Thexder
The other minor thing I like about Java is the syntax around inheritance. They actually use keywords instead of symbols, "extends" and "implements" rather than a colon. I always prefer semantic keywords to symbols.
That's actually why I hate PERL so much. ![]() |

What's more, a colleague of mine who uses Perl more often says it's best used either for direct command line mini-programmes or for very simple 5-line programmes, whereas pretty much anything you do with Java ends up with a LOT of code, much of it for basic structure. Then again, the kind of programmes he asks for help with kind of require exactly that sort of complex programming, such as tracing through a list of RNA fragments and looking for "clumps," which was the latest I had to do. You can do it in Perl, but you turn it into Java anyway.
I don't know if Java is a the best programming language out there, but it's the one I'd suggest to novice programmers, because it's the easiest I've seen to follow the logic of, especially if you name your variables right. I moved from Pascal to C++ to Java, and it seemed like each was more clearly designed than the last.
Plus, Eclipse is AMAZING. If you let it, it can write half your code for you. It can do such things as auto-generating basic methods like setters and getters, it can do a global variable rename, where you can rename one variable and it replaces that name everywhere it's called, and it's very smart about making "suggestions." In fact, I find it good practice to ALWAYS ask Eclipse for suggestions, both so that I don't make a stupid typo and to check if it actually offers anything. If it has nothing to offer, it means Eclipse can't follow my logic, which more often than not means my logic is wrong. I just love the thing. And, just as a bonus, there's an addon for it which allows it to handle Perl programming, as well

Samuel_Tow is the only poster that makes me want to punch him in the head more often when I'm agreeing with him than when I'm disagreeing with him.
|
It's very true that Eclipse is a free and pretty good IDE. I'd mark that as another point for Java. It might also be a good language to learn OO principles with. It's what I learned with in college, at least.
The downsides of Java, at least a few years ago when I was using it, are that 1) You often get caught in XML hell - every configuration file seems to be in complex XML and it makes my brain hurt. I never encountered fluent interfaces or convention over config until C#/Ruby. 2) I really dislike their fat client library Swing for semantic and design reasons. You can always tell when something is Swing - it just looks off. Maybe this has changed since I used it (which was a while ago). 3) I also don't think they have a good MVC web app framework, though I could be wrong. I really dislike JSP after using it for a while. I will say, I think the Java community does a better job encouraging good practices than the MS community. For instance, in .NET there's a movement called "Alt.NET" which is basically people who want to do .NET using good OO principles and design. In Java, that's just the mainstream community. The other minor thing I like about Java is the syntax around inheritance. They actually use keywords instead of symbols, "extends" and "implements" rather than a colon. I always prefer semantic keywords to symbols. That's actually why I hate PERL so much. ![]() |
However it's problem is is tries to be "best at everything" and therefore fails sometimes and can be bloated. Eclipse is a great tool though, using it right now.
Java with Tomcat and Servlets might be a good place to start, with some JSP as you already have done PHP. JSP can be the devil and really annoying if overused but it will give you a good starting point since you can use your php experience in understanding it.
Plus, Eclipse is AMAZING. If you let it, it can write half your code for you.
|
Resharper is that company's plugin for Visual Studio, and it makes Visual Studio just as good. It's really amazing. I love Jetbrains.
bababadalgharaghtakamminarronnkonnbronntonner-
ronntuonnthunntrovarrhounawnskawntoohoohoordenenth ur-
nuk!
I want to be different and cast my vote for Java. It may be a bit bloated, but it has an excellent free compiler in Eclipse, the Java runtimes are free and easy to acquire and already on a lot of PCs due to being required for some sites, and Sun Microsystems provide excellent free support with a full library of classes and their uses. Half of what I know about Java, I learned from library-diving in their archives.
Then again, I don't know much about C#, as I never ran across it in the field. I mostly use Perl in my work these days, but I would advise AGAINST it for the simple fact that it's much more heavily reliant on sygils and "default" variable, two things I can never remember offhand. |
That said, after about a month and a half of trying to teach myself Swing (my university's comp. sci. professors were largely of the opinion that GUIs are for losers and real men work with 4000-character long Unix commands, so I never really got any formal training in it) I remain of the opinion that it's the most unintuitive, finicky thing I've ever worked with.
Having Vengeance and Fallout slotted for recharge means never having to say you're sorry.
The most important thing to do is have one or more small projects to work on that's within your abilities and interest. Given that and your existing experience, almost any reasonable language will be easy to pick up. If you have PHP experience, you may know of some small tasks like parsing web log files or something that will work as a good training exercise.
That being said, I'm a Python fan--it's a very nice language, readable and elegantly designed for the most part. Lots of online resources, including some good tutorials. I've taught a handful of people the language myself, and I've always been surprised at how quickly they do clever things that are correct and reasonable for the task.
For future-proofing your knowledge, stay away from anything that's single platform (eg, C#) and stick with cross-platform technologies (Java, Python, etc.).
Quote of the moment: This, too, shall pass.
Justice superteamers: We have a website now, in case the forums get closed early. If you've ever run with us, come visit us again before the curtain falls. We're running bucket list characters--anything you've always wanted to play but never got around to.
Depends a lot on what you're trying to do. The top languages I use are Ruby (I enjoy working in it, and I like Rails for web stuff), C (all-purpose chainsaw, and I do some low-level stuff where it is the sole viable option), Unix shell (it's available "everywhere" for my purposes, and makes up for flaws by being so very easy to reuse)...
MS has spent the last thirty years systematically getting other companies to invest heavily in a particular technology or API, then deprecating that API and building a new one. This allows them to maintain a substantial competitive advantage, as long as they can determine what the new API would be. Because of this, I'd tend to shy away from relying on their APIs. Of course, that assumes you have your choice of what you want to work on... You may not.
I tend to think that it's a pretty good experience for people to have done at least one language around the level of C, but I'm not sure it's actually all that useful anymore.
I will say: Don't dismiss scripting languages as "just" scripting languages. They're every bit as much real programming languages as the compiled languages, and they are often much, MUCH more expressive. There's a reason that, despite being a reasonably good C programmer, I still do a ton of stuff in Ruby, or perl, or sh... It's because there are things they do better.
If you have PHP experience, you may know of some small tasks like parsing web log files or something that will work as a good training exercise.
|
But if I have to reach up to the $ every time I want to reference a variable, I'm gonna get annoyed. If common libraries don't follow a standard naming convention, I'm gonna get annoyed.
For future-proofing your knowledge, stay away from anything that's single platform (eg, C#) and stick with cross-platform technologies (Java, Python, etc.). |
bababadalgharaghtakamminarronnkonnbronntonner-
ronntuonnthunntrovarrhounawnskawntoohoohoordenenth ur-
nuk!
I would never, ever, rely on Mono -- at some point, the author is going to realize that Bill Gates is never gonna sleep with him and give up. More significantly, MS has no reason to preserve compatibility with it, and a lot of reasons to actively break it if it ever looks like a threat to their domination of the API.
I would never, ever, rely on Mono -- at some point, the author is going to realize that Bill Gates is never gonna sleep with him and give up. More significantly, MS has no reason to preserve compatibility with it, and a lot of reasons to actively break it if it ever looks like a threat to their domination of the API.
|
bababadalgharaghtakamminarronnkonnbronntonner-
ronntuonnthunntrovarrhounawnskawntoohoohoordenenth ur-
nuk!
I have never been madly keen on new years resolutions as January is a time of year I pretty much want to sleep through. So I make my resolution to coincide with my birthday.

so asking this question here is likely to get flamed, trolled, locked or just plain deleted. So I will add that of course I plan on writing things for City of Heroes (but not those evil red dudes
).
).
Which is today...
This year I've pretty much decided to try and learn to program in a real language and not just a scripting language (I have some skills in web stuff (PHP, MySQL, XHTML) and a little bit of knowledge of how LUA works (mainly from WoW addons but also from some other games that use LUA for scripting)).
So I want to know which language is a good starting point?
Specifically something that is similar in structure to PHP or LUA so I can build on what I already understand/know rather than learning something entirely new. Also I have no intention of trying to actually write games though writing for games is definitely something I like the idea of. Lastly I plan on working within the Windows platform as while I have a linux box I'm not a huge fan and don't use it much, so a windows based environment is essential. On the other hand I don't always need a GUI so a 'Visual' language isn't essential.
While no longer especially relevant I learned to program Turbo Pascal (Borland Turbo Pascal v5) a long time ago, which I used for my Computer Studies GCSE in about 1995 (TP was upto v7 IIRC at the time).
Oh and training (web and book based) is going to be needed so something that isn't only known to a handful of developers however good the language is.
Now I know that this forum is for City of Heroes and Villainous scum...
Reason I'm posting it here is while this is not a programming community there are some people here who are programmers and I'm less likely to get flamed down or to Google it (which I have done BTW) and just told an answer.
Any help much appreciated (and birthday wishes too.