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?
-
Compared to what? – Telastyn Jan 08 '15 at 20:43
-
Compared to learning programming without c in your toolkit – Andrew Jan 08 '15 at 20:44
-
No, C specifically won't provide you any added benefit over the majority of other languages. – Telastyn Jan 08 '15 at 20:57
2 Answers
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).

- 101,921
- 24
- 218
- 318
-
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 08 '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. – daniel gratzer Jan 08 '15 at 23:50
-
1C has abstract data types through pointers to incomplete types. Did you mean algebraic data types? The rest is pretty much spot on. – Doval Jan 08 '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 09 '15 at 00:15
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.

- 3,922
- 16
- 18