Programming question

Hello all, I know this topic has come up before but I can't seem to find it/get answers I would like. I barely skimmed Programming in College and would like to return to school to learn it. I have forgotten most of everything and am wondering if anyone has specific books they suggest and programs. I downloaded Visual Basic Express 2010, C++ Express 2010, and C# Express 2010. I believe you get free licenses for these since 2012 is out. I was wondering if anyone could suggest any other free compiler software to use/languages to learn/books to purchase. Thanks guys

Well, first I'd suggest not to start with C++. It can get frustrating when your programs don't compile for an obscure reason. It's best to start with something simple enough to grasp most of the basics but not too complicated so you don't get overwhelmed. I'd suggest Java (with the eclipse IDE; forget netbeans, everytime I tried it it just seemed like a badly designed and programmed environment) then move up to c++ for more in depth lower level knowledge and to ruby/python for high level programming.

It really depends on what it is that you want to do, if you are looking for application programming, or web programming. If you are looking to do web stuff its worth checking out "Codecademy" great for learning javascript etc

Worst thing for you to make a bad decision at the beginning and waste your time so I will just write general info about languages so you can chose
C++: Hard to learn, very hard to master. It's used in every area but mobile applications as far as I know. You can easily find job with good payment if you are good at it.
Java: Easier to learn. Mostly used for mobile applications. Other than that you can see java in Embedded Systems, web, desktop applications.
C: Easy to learn, hard to master, hard to develop programs. It's suitable for programming operating systems or system-level programs, very low-level boring stuff if you ask me. Also used for low-level graphics programming(game engines).
C#: Same as java but it's hardly seen on mobile environment other than windows phone.
Scripting Languages: Well, there are some good scripting languages like phyton and you can do everything with it as long as abstraction(the program that makes scripting language work) is programmed. Be it an graphical user interface to game or some sort of system-level thing. A good programmer should know one scripting language

Well if you really consider programming as your career go with C++ unless you want to work in a very specific are that it has no use for C++(eg. Mobile Applications). I suggest Object-oriented programming in C++ of Robert Lafore. Good for starters.

this website has good undergraduate courses for free. You should definitely check it. Also check this. Finally, if you are really into this, I strongly recommend taking courses IRL. You can learn by yourself but that would be a good hassle for you because asking questions and getting right answer while learning is very effective.

I think that C++ is the best way to go.
Although it may be harder to master than the likes of Java, Python and other such languages, it which teach you about other things fundamental to coding.
Yes, your program may not compile do to a stray bracket or the lack of a semicolon at the end of a line, but this teaches you to be consistant with your programming method and to care about syntax which is important.
As this is an OOP (Object-Orientated programming) language, the concepts you grasp in learning this will make transitioning to the other OOP languages (like Java) much easier then learning them from scratch.
You could go from a less strict language and then transition up but starting from C++ will put you in the mindset of good coding practice.

In terms of the actual coding/compiling side of things, I recommend you run a partition or virtual machine of linux to makes things easier as these normally come with GNU compilers installed including a C++ and C one. Also, although it pains me to say, if you have a mac this will have these features aswell.

I'm not sure I'd suggest starting out with C++. It's important to learn C/C++ for a large variety of reasons, but it's a form of cruelty to use C++ as a means to introduce people to the way of thinking needed to program well, let alone some of the rather abstract constructs involved. C is a far better choice as an "intro" language if enforcing good practices is one of the orders of business.

Worst thing for you to make a bad decision at the beginning and waste your time so I will just write general info about languages so you can chose
C++: Hard to learn, very hard to master. It's used in every area but mobile applications as far as I know. You can easily find job with good payment if you are good at it.
Java: Easier to learn. Mostly used for mobile applications. Other than that you can see java in Embedded Systems, web, desktop applications.
C: Easy to learn, hard to master, hard to develop programs. It's suitable for programming operating systems or system-level programs, very low-level boring stuff if you ask me. Also used for low-level graphics programming(game engines).
C#: Same as java but it's hardly seen on mobile environment other than windows phone.
Scripting Languages: Well, there are some good scripting languages like phyton and you can do everything with it as long as abstraction(the program that makes scripting language work) is programmed. Be it an graphical user interface to game or some sort of system-level thing. A good programmer should know one scripting language

Well if you really consider programming as your career go with C++ unless you want to work in a very specific are that it has no use for C++(eg. Mobile Applications). I suggest Object-oriented programming in C++ of Robert Lafore. Good for starters.

this website has good undergraduate courses for free. You should definitely check it. Also check this. Finally, if you are really into this, I strongly recommend taking courses IRL. You can learn by yourself but that would be a good hassle for you because asking questions and getting right answer while learning is very effective.

Actually, C++ is also used in mobile. C++11 is the latest version, it's just starting to come to market, and replaces the 2003 version of C++ (aka C++03). I know that Embarcadero allows C++ iOS development, and Android support is due to follow early next year (along with ARM compilation). I'm not sure how Microsoft's offerings are faring right now for mobile, but it's evident they're making tracks to support it with their tablets (and Metro in general).

I disagree on a developer needing to know a scripting language. The only scripting languages i know are web ones (PHP in this instance), and even that's only been picked up very recently (within the past month), originally due to wanting to provide an easier way of distributing updates for my apps, but has evolved into a work in progress API for my projects. I could quite happily carry on coding apps without ever having bothered to pick up PHP. It's advantageous for bringing my applications into a more social space (i've got big plans for the future), but it's not a requirement. I don't know any "desktop scripting" languages and i'd say i'm doing pretty well. Of course, there's times when it'd be advantageous, such as if i wanted a seamless updater, but it's not overly difficult to work around if you take a modular approach to development (and it becomes even easier if you happen to have access to a web server).

C# is great for the desktop, admittedly one of the best, but as you say, it's rarely seen on mobile outside of Windows Phone.

I'd personally recommend C# (or Delphi, but hey, not free and it's still viewed as a lesser solution since many libraries have never been translated... really relies on you building what you need from the ground up if a prebuilt library isn't available). Perhaps move on to C++ later on (as that's one of the most supported languages out there, and typically, it's where support for many hardware libraries originate from).

I'd also only choose Embarcadero's C++ offering over Microsoft's for the simple fact i prefer their IDE, the offering of Firemonkey (native crossplatform framework available as standard), C++11 64-bit support (not sure if MS has 64-bit support for the standard yet, i do know they support the new standard as 32-bit with the latest version of VS), but not for price (that's something it's impossible to beat Microsoft on). At the very least, i'd download the latest express version of VS (http://www.microsoft.com/visualstudio/eng/downloads). Completely free. 30 days usage initially, but just register for a free key to keep using it after that.

For a bit of background, I'm an academic teaching people to program at bachelors/masters level, and have participated in a little pedagogical research in this area. I've long held the belief that C is the best place to start because it's analogous to so many other languages. From there it's fairly easy to make the jump to C++ (at a trivial level, object oriented C), C#, Java and a slew of others. By contrast, C# and Java abstract memory management from the programmer to such an extent that you don't need to even remotely understand the concepts to be a successful user of the language. And don't get me wrong, that's not necessarily a criticism (though I can pen many pages of rant on the subject of garbage collection), but it does mean that going from C/++ to C# or Java is very easy, yet going the other way is undoubtedly considerably more difficult.

That said, obviously I'm talking from the perspective of supported lectures and tutorials (i.e. when my students hit an obscure error, I can likely fix it before their brain starts leaking from their ears) - I understand that you likely won't have that level of support immediately available, that learning C through tutorials alone can be a gruelling business, especially when an abstract error bogs you down (link errors in C++ are notoriously unpleasant for beginner programmers). There's nothing wrong with starting from C# or Java (I'd recommend Java over C# - see below*), but be aware that making the change to C will be considerably more difficult than making the jump the other way.

* Java and C# are EXTREMELY similar languages, however Java is platform agnostic and useful for android development, while C# doesn't have any significant advantages from a beginner perspective to my mind.