4 ms·
> "Nevertheless, I don't think anyone should call themselves a (true) programmer unless they know C." You could make an even stronger claim about knowing an as
by ZenoArrow 9y ago
> "Nevertheless, I don't think anyone should call themselves a (true) programmer unless they know C."
You could make an even stronger claim about knowing an assembly language. The point being that understanding how a computing device works is helpful in getting the best out of it. If that wasn't your point, then C is no more special than any other popular programming language.
Also, whilst I only know the basics of C, it's pretty clear things have moved on considerably since the days of K&R. It doesn't cover any of the enhancements included in C99 and C11, nor does it cover the tooling and coding conventions (the ones that help avoid problems) that have become commonplace since 1989.
For a more up-to-date reference, I've heard good things about 21st Century C:
http://shop.oreilly.com/product/0636920033677.do http://shop.oreilly.com/product/0636920033677.do
- msla 9y agoAny modern introduction to C should make heavy use of Valgrind at the very least. In addition to catching the nastiest class of bugs C programs are heir to, it can be used to teach how memory works at a low level.
- newman8r 9y agocan you recommend any books that introduce the concept well?
- Koshkin 9y ago> If that wasn't your point It wasn't; it is perfectly possible and normal to use C as one would any other programming language, i.e. without knowing much about the computer architecture. Even the pointers, often seen as something low-level, aren't really: the rules of their behavior and use are very simple, and they are easy to describe at a high level. C is special in that, as I said, it has been, and remains, a very important programming language in its ubiquity and sheer power.
- ZenoArrow 9y ago> "C is special in that, as I said, it has been, and remains, a very important programming language in its ubiquity and sheer power." In that case, you could say the same about Java, Python, C#, etc... If being a "true" programmer is just about getting the job done, any of those languages will suffice. C may be a useful tool for certain performance critical code, but that's a very small fraction of what's required in most day-to-day programming activities. I would say the following list describes the key qualities of good code (in the order described, from most to least important, for most cases): Correctness, clarity, conciseness, performance. As for pointers, you can describe them at a high-level but to understand why they're a low-cost abstraction it's helpful to understand how computers work. That's the type of knowledge that C can help expose you to.