Linked by MOS6510 on Thu 10th Jan 2013 23:25 UTC
General Development "For years I've tried my damnedest to get away from C. Too simple, too many details to manage, too old and crufty, too low level. I've had intense and torrid love affairs with Java, C++, and Erlang. I've built things I'm proud of with all of them, and yet each has broken my heart. They've made promises they couldn't keep, created cultures that focus on the wrong things, and made devastating tradeoffs that eventually make you suffer painfully. And I keep crawling back to C."
Permalink for comment 548563
To read all comments associated with this story, please click here.
Comment by RareBreed
by RareBreed on Sun 13th Jan 2013 03:06 UTC
Member since:

I too think the productivity aspect of C is overrated by the author.

I think what the author fails to consider is when your programming language of choice is "fast enough". Also, too many times, I have seen algorithms to solve problems using brute force approaches isntead of choosing smarter algorithms. I don't care if you write machine code, if you're using a dumb algorithm, your program's runtime efficiency will pay for it. I think that C's reputation as a "high-level assembly" actually makes people less likely to truly think about algorithm design, and instead rely on tricks of the compiler. In other words, C's reputation as a fast language is actually detrimental to good algorithm design.

Many people have been addressing C's lack of OO as a good thing, but I will say that C's lack of functional style programming is a bad thing. Having had to torture my brain to grok functional programming languages, I think that people just don't think easily in it. Recursion tends to hurt people's brains, and generally, people come up with iterative solutions instead. Also, the immutability of variables throws people for a loop (no pun intended from above). Unfortunately, C is horrible from a functional perspective. Start writing functions in a map-reduce style, using first class functions for filtering, having the ability to generate functions dynamically, or using to closures to encapsulate data....and you will truly miss it when you have to write things in an imperative style.

Reply Score: 2