How should I get started with programming? Which language should I learn first?
marco.org
marco.org
However, I disagree that every language is equally hard. There are three challenges in learning programming: syntax, logic, and resource management. Those can be optimized for beginners:
Syntax: A syntax that is more natural and less symbolic will be easier to learn. There is a lot to be said about brevity for experienced programmers. For new programmers, it is completely wrong.
Logic: While certain, highly mathematically-inclined people may be different, most people understand the concepts involved with imperative programming (I do this, then this, then this; if I do this thing a lot, I can abstract its concept; etc.). Functional programming, "pure" object oriented programming, etc., are concepts that add impedance.
Resource Management: Whether memory, pixels on the screen, or bytes to a network connection, you've got to interact with the hardware at some point. Different languages approach this in very different ways, from manage everything directly to nearly complete abstraction.
Trying to learn all three at once for any but the most highly motivated is a recipe for frustration and, ultimately, failure.
I don't use it for months at a time. I proceed to forget everything. Shortly after, a need arises so I pick it back up. A week later, I'm a pro again.
The error output is what make it so amazing.
If I were teaching somebody who wanted to do embedded work (and Python/Lua/<insert "easier" language here> really wasn't a deployment option, which is very feasible), I would start them with Python to get them to the point of understanding how programming works, then switch them to a more appropriate language for the project. Teaching the algorithms in Python, then converting them to C is a great way to learn the difference between the languages and to introduce the resource management that occurs.
Once you can master understanding programming syntax regardless of language, how to write good code and how to solve problems then you are well on your way to becoming a good developer.
PHP is simple, good documentation and great community. Facebook is built on top of PHP so as Drupal and Wordpress.
But the main point about my recommendation is that PHP is installed everywhere, you don't have to spend much time configuring and doing sysadmin stuff to make it work.
I don't feel that a newbie should be learning a web language as his first. It just seems like an unintuitive learning process to me.
I'd definitely recommend PHP to anyone who wants to jump into web development.
Currently, we use Flash with a focus on OOP with ActionScript 3 (not timeline based loose junk). The advantage of this is that they can easily create rich assets in a simple and familiar environment to make the code part more genuine and purposeful for them. I've found that if you teach it this way they are very motivated to learn the programming concepts to realize their visions which are usually heavily tied to the visual and surface levels of a project. Gotta admit things you directly see are pretty sexy to many people. Once this "wow" moment is satisfied, it's much easier to point them in directions that go back to the programming theory to improve the depth of their work.
If you have a purpose and drive to want to accomplish something concrete you'll stick with the ups and downs so a programming language that supports that goal I think, is an appropriate language. It works well for us, the class is immensely popular and many of my students are very curious now of other languages like JavaScript, objective C, etc. The concepts transfer well too and some have even transitioned toward development. You can always learn new languages later although one commenter poses a good question of how one's starting language influences thinking. Don't have an answer for that one. But, my take is just try to get a good foundation with a language that supports what you want to do.
NOTE: I learned to program myself, and sought out specific programmers I admired to teach me so I don't have the experience of what a typical compsci program and curriculum is like. You might seek those opinions too. I would consider myself pretty darn good at understanding education and learning matters though so if you want any pointers, advice, or questions I'd be more than happy to discuss on this thread. I'm excited that you want to dive into programming. :-)
At my school, CS classes started in C, did a touch of PHP/JS, then a functional language (was scheme, now OCaml), and then a giant hodgepodge of whatever you/the professor wanted.
Which, honestly, isn't necessarily a bad thing. If you know how to think, and you have experience with a language that's at least something like what you want to learn, you can pick up almost anything quickly.
For example, I started with BASIC, and then moved to C. Thinking in loops was really hard for me at first (as opposed to using goto).
What would be like if your first language was a Lisp?
Less seriously, what about Unlambda? Or Brainfuck?
(1) DO INTERCAL
DO FORGET #1
PLEASE GIVE UPFirst, you should learn one of the easy dynamic languages. This means Perl, PHP, Python, Ruby, Lua, Clojure. I think Ruby is a good choice because it has a lot of cool concepts built in to the core language that the others lack, and so it can be a foundation for learning many different styles of programming -- it does this, in my opinion, better than Python, and has a nicer syntax than Perl. _why's poignant guide to ruby is a bit outdated but still a pretty awesome and cool introduction.
http://mislav.uniqpath.com/poignant-guide/
Second, and this might come as a shock, some form of basic assembler. I recommend LC-3 assembler. And the main reason here is that a decent understanding of the memory model is going to help you a lot when it comes to dealing with pointers, complex data structures, or anything, really. You'll probably never write a program longer than 100 lines in LC-3, but the short things you do write will give you a deeper understanding of your code everywhere else.
http://en.wikipedia.org/wiki/LC-3
http://highered.mcgraw-hill.com/sites/0072467509/student_vie...
There may actually be a newer "learning assembler"-styled language out there, but I am not aware of it. LC-3 is showing its age, but it was great when I learned to program, and I learned as much programming for three months in LC-3 as two years prior in Java.
That said, you should definitely familiarize yourself with control structures prior to jumping into assembler or you could break your brain.