I am here to ask a question that has been asked many times before. What programming language should I learn to become a intelligent conceptual programmer?

Many people agree, you do not have to learn any one programming language; you need to learn programming as a concept itself (Most of us can become semi proficient in a language under a few weeks).

Would it be better to learn procedure or event driven languages for conceptual purposes? Why?

Let me be even more precise with my question above on this. I have written lots of basic code and program examples. I feels I have a firm root on basic concepts and now am ready to try some more complicated task like programming a graphic rendering engine or compiler. From what I understand C/C++ should teach me more of the important principles that I may carry over to fields like electrical engineering.

  • Maybe you want to revise your question to ask whether you want to learn Procedural or Object Oriented language (or even Functional Programming language such as F#). – NoChance Apr 22 '12 at 0:13

Learn the C programming language.

Why should I learn C?

C is one of the most used programming languages in the world. It is used in Universities (to learn), and workplaces (to use ;-).

C also inspired many other programming languages, which will make it easier to learn other languages in the future.

But most importantly, it will teach you all of the major concepts you should know in a regularlized syntax. That's why C is a great learning tool. If you write to equivalent programs, one in C and one in Perl, the Perl script will be shorter, but the C approach will be quicker and much more structured.

How do I learn C?

Read a book. Not just any book. Read the book. The C Programming Language, in my opinion, is the book for learning C. After you read that book, you will not be a C programmer yet. Take the following steps:

  1. Get a book on Data Structures in C.
  2. Get a book on Algorithms in C.
  3. Get Code Complete.
  4. Finally read Structure and Interpretation of Computer Programs

Hey guess what! You still not a good C programmer. Do you want to know why? You haven't coded enough. The best way to learn is by doing.

In my opinion, this is the best approach you can take to learn procedural programming. And if you can go through this, you will, in my book, be concidered a C programmer, and a programmer in general. After this, all other languages will come easy.

  • Great answer, thank you for the detail! I agree on the practice makes you great. – user51762 Apr 22 '12 at 17:28
  • A good souce for material on C [stack discussion]stackoverflow.com/q/562303/1275386 – user51762 May 1 '12 at 0:31

You've misquoted somebody. It's not "you do not have to learn any one programming language", it's "you do not have to learn only one programming language." Learn ALL the languages. Every one you can get your hands on, every one you can find a book for, every one you can download a dev environment for.

C gives you a good low-level understanding of the machine. Lisp gives you the notion of "little languages," of starting from a tiny thing and building huge structures out of it. Java tells you about living in an environment you don't 100% control, SQL or Haskell free you from thinking about time, Javascript lets write code anywhere you can fire up a web browser. (I solved a dozen of the problems from Project Euler sitting a public library.)

No computer language is complicated; they average about thirty "words," and twenty of those words are the same everywhere. (Think about "if," or "while," or "+".) You can learn any of them in a week, get skilled in two or three months.

  • "Learn ALL the languages"? That's an insurmountable challenge. I agree you should be familiar with several languages, maybe even a dozen or so, but I don't think learning all languages (or even a majority) is much more helpful than learning a carefully selected few – Bryan Oakley Apr 22 '12 at 13:34
  • I didn't miss quote but I should have been more clear. Yes you need to know a few languages but it is more important to know the concepts like inheritance, polymorphism and data structure to name a few, but I am more interested in what language will give me the most when trying to be a great engineer that creates not only innovative but efficient code. – user51762 Apr 22 '12 at 18:07
  • No! Think of the resume potential! Entry level at: en.wikipedia.org/wiki/List_of_programming_languages – Erik Reppen Dec 5 '13 at 20:23