1

How much does learning C to moderate level help you as a programmer. For example, does being competent in C make it easier to pick up languages as time goes on and get a better understanding of them?

marked as duplicate by Dan Pichelman, gnat, Telastyn, Blrfl, John R. Strohm Jan 9 '15 at 0:11

This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.

  • Compared to what? – Telastyn Jan 8 '15 at 20:43
  • Compared to learning programming without c in your toolkit – Andrew Jan 8 '15 at 20:44
  • No, C specifically won't provide you any added benefit over the majority of other languages. – Telastyn Jan 8 '15 at 20:57
3

Learning C will only help you in learning languages which are very much like C. But then, what do you gain from you learning them? The further away from C the language you want to learn is, the less learning C will help you.

In particular, C is missing a lot of concepts, paradigms and ideas that are present in more modern languages: first-class procedures, Objects, Algebraic Data Types, parametric polymorphism, ad-hoc polymorphism, inclusion polymorphism, subtyping, inheritance, delegation, concurrency, parallelism, asynchrony, modularity, first-class control flow (e.g. continuations), static compile-time metaprogramming, dynamic metaprogramming, higher-kinded types, rank-n types, dependent types, type inference, dynamic typing, EDSLs, … (those are just a few that spring to my mind).

  • first-class procedures? That's a new one, the others all talk about functions... And what could be more abstract than a type without definition? – Deduplicator Jan 8 '15 at 23:47
  • @Deduplicator Some people call methods or functions in languages procedures because they're a list of imperative instructions rather than a function we'd find in math. – jozefg Jan 8 '15 at 23:50
  • 1
    C has abstract data types through pointers to incomplete types. Did you mean algebraic data types? The rest is pretty much spot on. – Doval Jan 8 '15 at 23:54
  • 1
    @Doval: I removed AbDTs, added AlDTs. I think AbDTs are more of a design pattern or idiom than a language feature in C, but it's indeed a very simple one, so doesn't really count as "missing". – Jörg W Mittag Jan 9 '15 at 0:15
2

Learning C or something similar, such as Pascal, may help you to understand how the compiler, linker, and run-time libraries work together, so you can better understand the low level details of computer systems. This was my experience when comparing the output of a C compiler to assembly code. C will not help much with higher level language ideas, which are easier to use in other languages, such as those described by Jörg W Mittag.

Not the answer you're looking for? Browse other questions tagged or ask your own question.