For quite a while now--since I can really remember--I've wanted to get into heavy computer programming but have never really had the opportunity or time to do so.. But as of late, for the past year or so, I've been working with Lua within WoW for addon creation--mainly for my own purposes--and I've been getting a decent grasp on it. I understand the basics, and can code most things I come across without a problem. But I've got no formal training there--I've learned everything I know from various WoWWiki pages,WowAce forums pages and by examining addons and reverse engineering their code. I've taken things rather slowly, learning bit by bit only what I needed for any one thing. Well, I'd like to go a bit deeper than that.
I've noticed around here there seem to be several very good and well-experienced coders. I'm wondering if perhaps they could point me in a good direction. I'm looking at learning programming in general, going over both basic concepts and more advanced ones, not only to improve my ability to write WoW addons but for general use outside of the game as well. What's a good place to begin such, and can anyone here recommend some good general resources on the topic?
I'd recommend something that might sound silly, but which could prove very fun in the end.
The first thing you need to do is take a step back and look at your computer, then, without looking, try to think of the applications that you use on a day-to-day basis, and concentrate on the ones that are most important to you, or the ones you most enjoy working with. Now, find out if those applications already are open source, or if there are some open source alternatives.
If there are none, then what might be a good exercise is to just install Linux, get WoW going, and trying to use it on a daily basis to do your regular work (yes, WoW runs fine on Linux through WINE).
Now you should either have an application that you enjoy, which is open source, or you could be in a full open source environment (Linux), so the next step is to visit that projects site, get a feel of the structure, join their IRC channel, and start working in their bug reporting system. Help them clean out old bugs, produce test cases, and just ask one of the developers for some bug that you could take a look at -- explain to them your experience level and what you'd like to try.
This might sound like a lot of work, but in the end, you'll have a sense of achievement, and you'll also get a relationship with the project, which can even lead to business opportunities you hadn't imagined.
Just to let you know, you could even do this with Firefox and Mozilla. There are plenty of easy-to-CODE things they want done in their core rendering engine, Gecko, which do not require first-hand knowledge of C/C++ at all. It just requires someone to actually do it. Obviously, Firefox is a HUGE project, but you must remember that even a huge project is divided into very small code modules. The same goes for OpenOffice and other giant applications. Don't be afraid :)
Some other people might suggest that you read a book or something -- that is probably just as good :)
What Rabbit suggests may seem like a huge step (it does to me) to start helping out with real software, etc, but that's how you start with WoW addons. Besides FF and OOo, there are plenty of other open-source alternatives to common programs. Two more are GIMP and Scribus.
Not my computer so going that far is out. But I am using GIMP at the moment, as well as Notepat++, which I know are both open source. I suppose I can do that.
When I started on Lua all I knew was literally the basic idea of what an if-then statement will do. I didn't even know elseif existed. That was it. I reversed engineered from there and went through much trial and error and came to where I am now, 1 year later. I'm sure this will work just as well ina different environment/language, but it's rather intimidating to open up a full, long page written in an entirely alien language.
Learning by doing, thats how I learn at the moment Visual Basic.Net.
Read the beginning of some tutorials to get common knowledge about the programming language.
Then think about a programm you want to have and code it.
Of course you will be slow at the beginning till you get a feature completed and must read
little tutorials at the same time
but mostly you learn better/faster when you directly use your new knowledge.