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?

Andrew
  • 23
  • 3

2 Answers2

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).

Jörg W Mittag
  • 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
  • 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 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
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.

Frank Hileman
  • 3,922
  • 16
  • 18