10 Jun, 2009, Havok wrote in the 1st comment:
Votes: 0
I am a student going to college as a Software Engineering. I have dove into c a little and used the circlemud codebase and editing information and begin my learning experience, but I need some expert advice. I am wondering if I should begin this time doing the same, getting a c codebase and learning the information or convert to a c++ mud and learn c++ instead. Like I said I have not learned enough in c to hurt myself if I go to c++. I could use some advise. I also have two c books called "C for dummies" and "Sams teach yourself C++".
Thanks,
Havok
10 Jun, 2009, David Haley wrote in the 2nd comment:
Votes: 0
You're much better off learning C++ than C, as C++ is (basically) a superset of C so you'll only be learning more, and will be able to take advantage of many good features of C++. That's not to say you shouldn't understand the C component, it's just that C++ will give you more knowledge with more immediate payoffs.

But if you're going to college and taking courses, well, you might as well follow the courses. Jumping ahead without understanding things can sometimes create more trouble than it's worth.

I don't have any opinion on those particular books as I don't know anything about them.
10 Jun, 2009, Silenus wrote in the 3rd comment:
Votes: 0
I cannot really comment on the books you are using and unlike DH I am more of a programming hobbyist than someone working in the industry. C++ is a far more complex beast than C and many people I have spoken too think it's a bit crufty (overly complex). I suspect developing expertise in C++ takes significantly more time than developing expertise in C. I think most ppl I have spoken to and the research I have done point to a couple books for C and a whole bevy of materials for C++. The books I found quite helpful for C are the K&R book and the Expert C book and as a reference perhaps Plauger's book on the C library.

I would argue since both languages are quite close to the machine though you might be best served by having a brief introduction to programming with a language then jumping into books like Patterson and Hennesey (Comp Org and Design and Comp Arch) for an understanding of how the machine works.

Doing this stuff on your own however often can be quite problematic if you are planning to study them in college. I find that the difficulties arise since mastery of all aspects of the area is quite difficult (there is almost always more to learn) that the material tends to get "fore-shortened" in different ways there might be conflicts. The instructors might present one approach to some task while you have mastered another.
10 Jun, 2009, David Haley wrote in the 4th comment:
Votes: 0
Quote
The instructors might present one approach to some task while you have mastered another.

It is relatively rare for somebody of college age to be truly self-taught to the extent that they are not going to learn anything at all in college, assuming of course that the college is worth its salt. I started programming at age six, and yet learned more in 6 years of college and grad school than I did in the 12 years leading up to it. Granted, I was only seriously programming for about 4 years, but nonetheless, being teaching yourself is a great way to learn all kinds of bad habits without even realizing it. It's relatively unlikely to have "mastered" something to the extent that you wouldn't learn something useful from somebody else.

It's worth noting that if you're just trying to learn to program, C++ might not be your best first language.

C is "simpler" than C++, although that doesn't mean it's easy. There are fewer concepts to understand, but it's just as easy to shoot yourself in the foot, and C++ makes simpler a lot of things that really should be simple but in C are rather annoying. The most immediate example in my experience is a simple growing array. C++ just gives it to you; C makes you deal with every detail yourself.

Reading books about machine architecture won't hurt you, although it might be a bit too much to take in too quickly if you're learning the high-level concepts. Also, getting your head stuck in details until you understand the high-level problems is a very good way to miss the forest for your trees. Too much exposure to a certain kind of thinking can get you stuck in that way of thinking. Anyhow, I think that any programmer needs to understand at least some of the hardware, but I don't think you need to do this straight away and understanding the intricacies of processor design won't help you understand general algorithmic principles, at least not at first.
10 Jun, 2009, elanthis wrote in the 5th comment:
Votes: 0
Both of those books suck. They will get the basic ideas across, but they aren't going to do much for you compared to better titles. Anything from "Sam's Teach Yourself" is crap, and the Dummies books are great for basic stuff but not for something like C/C++. Find titles by O'Reilly or Charles River Media when you can. For learning C, I'd recommend this: C Programming Language (2nd Edition). It's been a while since I've reviewed any books on C++, but from some quick perusing at the book store, I thought this one looked pretty decent: C++ Primer Plus (5th Edition).

I usually recommend learning C first, then C++. C++ is easier to use, but harder to understand. Without understanding C, C++ is impossible to truly grok. Essentially, the way I like to explain it, C++ gives you the tools to save yourself a lot of time, but only if you learn how those tools work and how to properly use them… which requires a very firm understanding of the concepts C requires you to know. If you want ease of use without the learning curve, skip both C and C++ and go for a higher level language.
10 Jun, 2009, Tyche wrote in the 6th comment:
Votes: 0
elanthis said:
Anything from "Sam's Teach Yourself" is crap…


Conversely, everything I've ever purchased from Addison-Wesley is golden.
10 Jun, 2009, Silenus wrote in the 7th comment:
Votes: 0
I guess my experience might be slightly different than yours. I find unless you are fortunate enough to find yourself at a truly topnotch institution- it is quite common that the instructors may know of some method of achieving said goal and you may know of others. I think these days with the right materials and some guidance you can in principle learn a fair deal about programming w/o formal instruction. You are more likely to pick up some poor habits which may need to be corrected but I find this is true also at alot of schools which tend to gloss over a fair amount of stuff.

I suspect with C you really do need to understand to some extent how things are organized in memory(IMHO) of course which may not be a bad thing in the long run. The thing that concerns me about C++ sometimes is they give you too much. For algorithmic understanding perhaps this is fine but to truly understand the language -> machine mapping this is problematic and if you intend to learn a language like C/C++ I think having some understanding of the hardware is thus important. I think that shooting yourself in the foot with C is perhaps no more likely than doing so with C++. Also since C++ has alot of features that took experts in the area some time to understand i.e. exceptions -> template interactions. So I think mastering C++ does take signficantly more time.
10 Jun, 2009, David Haley wrote in the 8th comment:
Votes: 0
Quote
I find unless you are fortunate enough to find yourself at a truly topnotch institution- it is quite common that the instructors may know of some method of achieving said goal and you may know of others.

That doesn't mean you have nothing to learn from them: it just means you know of a different way of approaching the problem. It is rather typical of "hotshot self-taught students" to think that they know all the answers just because they happen to know one way of solving a problem. If this attitude is not corrected, the risk of turning into a one-trick pony is a lot higher than it needs to be.

Quote
I suspect with C you really do need to understand to some extent how things are organized in memory(IMHO) of course which may not be a bad thing in the long run.

You need to understand the concept of memory and pointers, but you certainly don't need to understand anything about virtual memory, paging, how the operating system works, and so forth, in order to understand how to program. Such knowledge might help you optimize your code, but it's orthogonal to the concept of a pointer in general.

Quote
So I think mastering C++ does take signficantly more time.

If by "mastering" you mean understanding every last detail in its absolute entirety, then yes, this is a very hard statement to disagree with. I happen to also think that very few people actually need to have such completely exhaustive knowledge, but, well, that's another question. You can be an extremely good C++ programmer without knowing how the internals of the compiler works, for example.

And I maintain that intimate knowledge of the hardware, such as processor pipelining or memory fetching, will not help you at all in understanding programming – it will help you write more efficient code in some cases, but it is very unlikely to contribute to algorithmic understanding.
10 Jun, 2009, Silenus wrote in the 9th comment:
Votes: 0
Quote
That doesn't mean you have nothing to learn from them: it just means you know of a different way of approaching the problem. It is rather typical of "hotshot self-taught students" to think that they know all the answers just because they happen to know one way of solving a problem. If this attitude is not corrected, the risk of turning into a one-trick pony is a lot higher than it needs to be.


I think you are putting words in my mouth :D(or at least implying something I do not mean). I did say there is information to be learned in a formal setting also I was aware there were alternate methodologies which could be used. I am not sure about this idea that that self taught individuals view themselves as hot shots or that they feel that they know all the answers. In fact I think learning things well on your own entails a certain amount of humility. What I do however observe is a tension between sometimes the product of formal institutions and autodidactic approaches to things which manifest themselves at the political level which leads to these sorts of situations where one side or the other may decide to start type casting the other. I.e. you can sometimes find individuals with little formal academic training who are more knowledgabe than those who have come through the system. In some cases you may just know different things. The path is in some ways "harder" but also the advantage is that you at present at least can tailor the material so you cover specific topics you are weak on.
10 Jun, 2009, Cratylus wrote in the 10th comment:
Votes: 0
David Haley said:
If this attitude is not corrected, the risk of turning into a one-trick pony is a lot higher than it needs to be.


I would like a pony.

I don't have one. : (

-Crat
10 Jun, 2009, Banner wrote in the 11th comment:
Votes: 0
Cratylus said:
David Haley said:
If this attitude is not corrected, the risk of turning into a one-trick pony is a lot higher than it needs to be.


I would like a pony.

I don't have one. : (

-Crat

Did you use that link in another post? I know I've seen it before.
10 Jun, 2009, Runter wrote in the 12th comment:
Votes: 0
Well, if we change the question a little bit to "Which is better to know?" the answer is indisputably C++.
10 Jun, 2009, Silenus wrote in the 13th comment:
Votes: 0
I think coming up with a list of good C++ books to read is more difficult though. Stuff I do have on my bookshelf are things like Essential C++. The C++ Programming Language. The Design and Evolution of C++. The C++ Object Model. C++ Common Knowledge. Exceptional C++/More Exceptional C++ Modern C++ Design and some others on more specialized library specific stuff. The list is to me is quite a bit longer.
10 Jun, 2009, elanthis wrote in the 14th comment:
Votes: 0
Tyche said:
Conversely, everything I've ever purchased from Addison-Wesley is golden.


I do have more than a few Addison-Wesley books that are absolutely fantastic. I've just never found anything in the "Sam's Teach Yourself" line of books to be worthwhile.

Banner said:
Did you use that link in another post? I know I've seen it before.


That picture is an Internet classic, so you've probably seen it all over the place. :)

Silenus said:
You are more likely to pick up some poor habits which may need to be corrected but I find this is true also at alot of schools which tend to gloss over a fair amount of stuff.


Or just teach it wrong. Or try to teach it but do so in an incomprehensible manner. Some people naturally learn best on their own by reading. Some people learn best under instruction. Some people learn some topics easier one way and learn other topics easier another way. Some books are fantastic learning aids and some are horrendous pieces of crap. Some teachers are genius instructors and some make you dumber just by being in proximity to you. Find what you're comfortable with and go from there.
10 Jun, 2009, Runter wrote in the 15th comment:
Votes: 0
elanthis said:
Tyche said:
Conversely, everything I've ever purchased from Addison-Wesley is golden.


I do have more than a few Addison-Wesley books that are absolutely fantastic. I've just never found anything in the "Sam's Teach Yourself" line of books to be worthwhile.


Yeah. I'll have to agree with you on that one. Also the "C++ for dummies" was somewhat rubbish in the edition I skimmed through at a book store years ago.
10 Jun, 2009, David Haley wrote in the 16th comment:
Votes: 0
Silenus said:
I am not sure about this idea that that self taught individuals view themselves as hot shots or that they feel that they know all the answers. In fact I think learning things well on your own entails a certain amount of humility.

Well, I didn't say that all self-taught people are hot-shots, I was talking about a specific category of students. However I feel that it is rather incorrect to generalize that people learning on their own are humble about it. Speaking from empirical evidence of seeing students enter a top university into the "accelerated introductory programming class", so many think they know all the answers, and are not at all humble about much of anything. (The sample is admittedly somewhat biased, but I've seen it on places like MUD forums as well. Hell, I've even seen it here.)

Neither approach is inherently superior – learning in a bubble is not likely to give you real-world understanding, and learning on your own is likely to give you a partial picture – which is why I believe it's very important, on average, to do both. It's just what Elanthis said here or in the other thread: it's one thing to learn about something, and it's another to just do it over and over and over and over again. You need to do both to succeed.
10 Jun, 2009, Havok wrote in the 17th comment:
Votes: 0
Well, I appreciate all these informative posts. I don't view myself as a hotshot in any way. I just want to get a little knowledge. Reading from other Software degree bearing people, they seem to throw you into the lions and you have to find a way out. I know I'll be learning something to do with c++, because there is a object oriented programming classes. I know there are others, but I don't see why they wouldn't teach a software engineer about a language like c++. I don't want to hurt myself, but I want to know some before I enter this class. I am not the type with an ego, it always hurts you in the end.
Thanks
10 Jun, 2009, Runter wrote in the 18th comment:
Votes: 0
Havok said:
Well, I appreciate all these informative posts. I don't view myself as a hotshot in any way. I just want to get a little knowledge. Reading from other Software degree bearing people, they seem to throw you into the lions and you have to find a way out. I know I'll be learning something to do with c++, because there is a object oriented programming classes. I know there are others, but I don't see why they wouldn't teach a software engineer about a language like c++. I don't want to hurt myself, but I want to know some before I enter this class. I am not the type with an ego, it always hurts you in the end.
Thanks


Well, I think it's just a long road realizing that languages will come and go in your career but the underlying skills you learn should last the ages.
10 Jun, 2009, flumpy wrote in the 19th comment:
Votes: 0
Runter said:
Well, I think it's just a long road realizing that languages will come and go in your career but the underlying skills you learn should last the ages.


… can someone ring recruitment agencies and tell them that please? Any maybe a few pointy haired bosses while you're at it??
10 Jun, 2009, Runter wrote in the 20th comment:
Votes: 0
flumpy said:
Runter said:
Well, I think it's just a long road realizing that languages will come and go in your career but the underlying skills you learn should last the ages.


… can someone ring recruitment agencies and tell them that please? Any maybe a few pointy haired bosses while you're at it??


Point taken. :)

But, still, such is the life of a computer scientist. One should be prepared to learn many languages over the years. Many of which without anyone holding their hand.
0.0/24