>>1
Forgive
/prog/, my friend. They're a bit [strike]buttfucked[/strike] angered these days, so they're just being fucktards in every thread.
Since you're asking "and other languages" it's obviously your first language, so you probably should know that C++ sucks for a first language because it involves more complicated programming concepts and will probably teach you a lot of bad habits. (Actually, C++ sucks most of the time, but that's another story.)
There are mainly three approaches I can think of to start learning programming. I can hardly choose one for you, so you have to pick your own poison:
1) The traditional approach: Probably the right place to start is C. C is the traditional imperative/structured programming language and can be very powerful if you learn how to use it. It might difficult to really master, but there's nothing that is hard to
understand, even for a beginner. The downside of this approach is that all C implementations are die-hard "traditional" -- there are no interactive environments (REPLs) or any lazy way to experiment with it. So you'll have to be a masochist, but you'll profit a lot. Just make sure you don't become a hardcore traditionalist retard who hates new languages because they are "lawl not compiled".
2) The quiche-eater approach: Using a toy language like Python. The upside is that their interactive environments make learning and experimenting an easy task, and you'll learn the same concepts you find in every imperative programming language and more (Python supports OOP and even some functional programming features). The downside is that toy languages will probably teach you bad habits, but then again, all programmers start out with some bad habits and eventually weed them out as they become more proficient. Just make sure you don't fall in love with Python and become another scientific mind-lacking retard because it's "lawl easier".
3) The functional approach: One word - Scheme. Scheme belongs to a whole different family, Lisp-like functional programming languages. Scheme itself is not difficult to understand in any way, but the functional approach is not very newbie-friendly. (I'm not sure what "Abstract the problem" sounds like to someone who just learned yesterday what's an expression and a variable) Lisp-like languages need a lot of intelligence, or rather, ambition and the willfulness to develop your skills and eat your vegetables. So if you are into things like mathematics, meta-linguistics and puzzle solving, you'll find Scheme pleasant to learn. Otherwise... I'm not sure. You might want to learn it later as programming in general might infect you with these bugs anyway.
If you choose #3, then Racket is for you. Racket is a Scheme implementation with a great interactive development environment called DrRacket. Download it from here:
http://racket-lang.org/
Read this introductory book:
http://www.htdp.org/ and read the Racket Guide (which comes with Racket; just start DrRacket from your Star Menu, then click Help -> Help Desk). And after you finish become familiar enough with Scheme, read SICP (
http://mitpress.mit.edu/sicp/), which will turn you from a nothing into a very proficient programmer.
After you finish SICP and master Scheme, you might want to try out other Lisp dialects such as Common Lisp or Clojure. Learning Lisp in general is very rewarding, as you'll use a lot in your everyday life to extend your environment. (If you use, for example, Emacs or image editors like the GIMP)
Learning C is hardly rewarding in your everyday life but you'll mainly profit from it in learning what real programming is like, in a project where you don't need meta-programming altogether, that is. If you decide to start your entire journey from C, I recommend the book
The C Programming Language aka K&R. But it's commercial.
If you want the quiche-eater way, grab Python from
http://www.python.org/ and read these books:
http://diveintopython3.org/
http://openbookproject.net//thinkCSpy/
You'll probably end up having to learn the three of them (excluding Python -- any other toy, such as Ruby or Perl, would suffice). So even if you start from one, keep the others in mind. Especially Lisp-like languages. You must get your hands dirty in Lisp sooner or later. Just do not jump to the next language before you are proficient enough in your first one.
Languages to stay away from AT ALL COSTS: Java and Microsoft languages like F# (anything that has a #).
Google is your friend. If there's anything you don't understand it, it's just one Google away. Alternatively, come and ask here and someone might help you, but do not expect them to be nice. Many of them are either non-programming trolls or people with self-esteem issues.
Good luck.