3 ms·
Absolutely not true. You can learn all of that and more with C. You might not like C and that is a different issue. Let's take it down even further: Every l
by robomartin 14y ago
Absolutely not true. You can learn all of that and more with C. You might not like C and that is a different issue.
Let's take it down even further: Every language you care to suggest ultimately ends-up in machine language. You can implement ANY algorithm or data structure management you care to mention in assembler. So, assembler isn't any less capable in that regard than any language anyone might care to propose.
Now, of course there's the practical matter of the very real fact that doing object oriented programming --as an example-- in assembler would be extremely painful, so yeah, this would not be the first choice.
Nobody who has done a reasonable amount of programming across tools and platforms would, for a minute, suggest that C is the be-all and end-all of programming languages. That I have never said anywhere. In fact, in a recent post I believe I suggested a progression involving assembler, Forth, C, Lisp, C++, Java (or other OO options). Even less popular languages like APL have huge lessons to teach.
As the level of abstraction increases one can focus on more complex problems, algorithms and data structures. That is true.
One of the problems with a lot of programmers I run into these days is that a lot of what happens behind the code they write is absolute magic to them. They have almost zero clue as to what happens behind the scenes. That's why I tend to like the idea of starting out with something like C. It is very raw and it can get as complex as you care to make it.
One can use C to write everything from device drivers, operating systems, mission critical embedded systems, database managers, boot loaders, image processors, file managers, genetic solvers, complex state machines and more. There's virtually nothing that cannot be done with C.
Is it ideal? No such language exists. However, I'll go out on a limb and say that if I have two programmers in front of me and one only learned, say, Objective-C and nothing more while the other started out with C and then moved to Objective-C, the second programmer will be far better and write better code than the first.
All of that said, there is no magic bullet here. Start with whatever you want. No two paths are the same. Just different opinions.
- derleth 14y ago> So, assembler isn't any less capable in that regard than any language anyone might care to propose. You're arguing against a strawman here. > Nobody who has done a reasonable amount of programming across tools and platforms would, for a minute, suggest that C is the be-all and end-all of programming languages. And I never used that strawman. > As the level of abstraction increases one can focus on more complex problems, algorithms and data structures. And this is my point. You can focus on what you're learning without having to waste time on anything else. Why don't you advocate a return to punch cards? > One of the problems with a lot of programmers I run into these days is that a lot of what happens behind the code they write is absolute magic to them. And most programmers don't know enough physics to understand how a transistor works, either. You can learn stuff like that as and when you need it. The actual core needs to come first. > There's virtually nothing that cannot be done with C. Ditto machine language, as you just said. So why didn't you say everyone needs to start with machine language?
- robomartin 14y agoI merely used the fact that all languages ultimately compile to (or are interpreted by) machine code to illustrate the fact that you calling me an idiot and asserting that "C is one of the worst languages for learning the actual fundamentals of programming, which are algorithms and data structures." is, well, misplaced. You can learn just as much with assembler. It would be a huge pain in the ass. And, just in case there's any doubt, I am not proposing that anyone use assembler to learn complex algorithms, patterns or data structures. Your original comment "what an idiotic thing to say" is just false. You can learn ALL fundamentals of programming with C. And, yes, you can learn ALL fundamentals of data structures with C. Classes and OO are not "fundamentals". That's the next level. And there's a whole movement proposing that there are huge issues with OO to boot. I have a question. You were quick to call me an idiot for suggesting that newbies need to start with C. OK. I have a thick skin. Thanks. Now, let's move on. I noticed that you did not offer a solution. What would you suggest someone should start with? Why? How is it better than starting with C? Now, keep in mind that we are talking about STARTING here. We are not talking about --and I have never suggested that-- C is the ONLY language someone should learn. Quite the contrary. Your ball.
- derleth 14y ago> you calling me an idiot I NEVER DID THAT. I merely said an idea was idiotic. I will not proceed until you acknowledge that. It's a question of honesty.
- robomartin 14y agoHmm, semantics? Dont' know: http://dictionary.reference.com/browse/idiotic http://dictionary.reference.com/browse/idiotic 1. of, pertaining to, or characteristic of an idiot. 2. senselessly foolish or stupid: an idiotic remark. Either way, not a wonderful statement to make. But, that's OK. I can take the criticism, even if misplaced. I am far more interested in how you would answer my questions. Reminding you that we are talking about what might constitute a reasonable choice for someone to learn as their very first programming language, the questions were: What would you suggest someone should start with? Why? How is it better than starting with C? And I'll add: What will they learn that they cannot learn with C? How would learning C as their first language hinder them? Why is C an idiotic first choice?