The FAQ assumes you want to start making desktop applications, with the most likely purpose of preparing for a Computer Science or Software Engineering degree. If you want to program websites, stop reading this and head over to w3schools.com. If you’re aiming for a particular domain (games, robotics, research etc), read this and then if any doubt remains please ask in the forums.
1) What programming language should I start with?
Short answer: Any widely used, general-purpose programming language can be a good choice. If that can be of any help, this author’s opinion is that you can’t go wrong with C#.
Long answer: What you’re looking for is a general-purpose programming language that:
- Will teach you elements common to most languages (statements, expressions, loops, conditionals, functions, objects, operators etc)
- Has a relatively clean syntax, logical design, and doesn’t lose you in low-level details
- Is popular and useful
- Has good IDE support so you can concentrate on learning how to program and not how to fight your way around crappy tools
- Barebones, “close to the metal” language, goes hand-to-hand with a course on computer architecture
- Ancient and eternal
- Hard to do anything graphical or even text-based (GUIs, games): C is primarily designed as a systems programming language
- Lacks such basic features as a string type, a container library, support for OOP, etc.
- All the advantages of C plus support for objects and generics, and better standard library
- Essential skill for any game programming position and in a wide array of domains
- Complex at the outset: hard to learn, hard to master
- Like C, it is mainly designed as a systems programming language
- Logical, reasonably simple
- Productive for GUIs, games, databases etc.
- Shields you from the OS (the .NET framework act as an intermediary), a good thing in many ways except for learning how computers work
- Not meant for writing device drivers or other such low-level code
- Highly intuitive and elegant, geared towards beginners
- Interactive prompt lets you learn by trial-and-error much faster
- IDE support (debugging tools, etc) not great
- Shields you from the OS and computer architecture (same as C# in that regard)
- Java (similar to C#; if you're on Windows, C# is the better choice)
- Ruby (similar to Python, but not as popular)
- Objective-C (popular for Mac and essential for iPhone development)
- Visual Basic (very similar to C#, but geared towards VB6 developers and beginners; many would say its peculiar syntax and legacy baggage make it an inferior choice)
- Functional languages like Scheme, Haskell, F#, Lisp, etc. which are interesting from a CS perspective but not that widely used.
Classified by language:
- Yellow Book by Rob Miles - this is an excellent introduction to programming!
- C# Tutorial
- C# practical learning
- Dot Net Perls
One good IDE (Integrated Development Environment). What is available depends on your platform:
- For C, C++, C# and Visual Basic, look no further than the Express Editions of Visual Studio. They are free, stripped-down versions of the most widely used IDE in the industry. Check out the video tutorials there to get you started. If you are a student, you also might be eligible to a free, full version of Visual Studio through Dreamspark or MSDNAA.
- For Python, get the official runtime and IDLE from http://www.python.org/download/.
- For Java, both Eclipse and Netbeans are great choices. Be sure to check the great tutorials offered on both of these sites.
- An alternative for C, C++, C# and VB development is MonoDevelop. Frankly, Visual Studio trumps it on Windows, but it's pretty much the only way to do serious .NET (C# and VB) development on Mac and Linux, where Visual Studio is not available.
In addition to the cross-platform tools mentioned above:
- For C, C++ and Objective-C, be sure to get Xcode. The recommended choice for developing iPhone applications as well.
In addition to the cross-platform tools mentioned in the Windows section:
- For C and C++, the best IDE is probably Code::Blocks, but there are several alternatives.
- Note that you don't necessarily need any particular IDE. Some people, especially Linux users (for some reason) prefer a "simpler" setup using just something like Programmer's Notepad (or even plain text editors like notepad. gedit etc) in combination with their favorite compiler (GCC, MSVC, etc).
4) Can you recommend some books?
For complete beginners:
C Primer Plus (5th Edition)
C++ Primer Plus (5th Edition)
Illustrated C# 2008
Beginning Visual Basic 2010
Learning Python: Powerful Object-Oriented Programming
How to think like a computer scientist: Java edition, C++ edition, Python edition, Ruby edition
Will add more later !