Follow Slashdot blog updates by subscribing to our blog RSS feed

 



Forgot your password?
typodupeerror
×
Programming IT Technology

Stroustrup Says C++ Education Needs To Improve 567

simoniker writes "Over at Dr. Dobb's, C++ creator Bjarne Stroustrup has given an in-depth interview dealing with, among other things, the upcoming C++0x programming standard, as well as his views on the past and future of C++. He comments in particular on some of the difficulties in educating people on C++: 'In the early days of C++, I worried a lot about "not being able to teach teachers fast enough." I had reason to worry because much of the obvious poor use of C++ can be traced to fundamental misunderstandings among educators. I obviously failed to articulate my ideals and principles sufficiently.' Stroustrup also notes, 'Given that the problems are not restricted to C++, I'm not alone in that. As far as I can see, every large programming community suffers, so the problem is one of scale.' We've discussed Stroustrup's views on C++ in the past."
This discussion has been archived. No new comments can be posted.

Stroustrup Says C++ Education Needs To Improve

Comments Filter:
  • I completely agree (Score:5, Insightful)

    by betterunixthanunix ( 980855 ) on Sunday March 30, 2008 @09:25AM (#22911278)
    I completely agree with Stroustrup. Too many people these days have little or no exposure to C++, and never learn how programming in the absence of garbage collection works. It is especially problematic in our research labs, where computationally complex problems must be solved with very fast code, but the people writing it get completely confused by pointers and memory management. Worse is when a proof-of-concept is distributed, with horrible bugs and completely incomprehensible code.
  • by bfwebster ( 90513 ) on Sunday March 30, 2008 @09:38AM (#22911350) Homepage
    ...is that C++ is a rather complex and brittle language. :-) ..bruce..

    P.S. Feel free to flame away at me, but not only have I developed professionally in C++, I've actually rescued a C++ project by (among other things) drafting C++ coding standards and guidelines for the 30 or so developers working on it.
  • by Anonymous Coward on Sunday March 30, 2008 @09:41AM (#22911366)
    It's way too complex to be managable, resulting in unmaintainable (No IDE can fully go through all typedefs; and if you ever stepped through a program and went into every godam -> operator of boost, you're on my side), unreadable and unneccesary code ("Better declare a private but not implemented copy constructor just to be sure"). It tried to implement all possible paradigmas at once, while trying to be backward compatible at the same time. It's the worst language ever.
  • by lexarius ( 560925 ) on Sunday March 30, 2008 @09:57AM (#22911454)
    Agreed. Also emphasize that, while Python is not as efficient as compiled languages, you can come back later and rewrite important parts of it in C. Then you can teach C with an emphasis on high-performance computing, rather than the typical "here's how we ask for user input, here's how we copy strings" emphasis typically taught in C courses that I've seen. Eventually, you could then show them how to add in assembly code to get at special-purpose processor operations not exposed by C. Probably do this over the course of a few semesters though.

    Hell, who am I kidding. Just teach them to code in brainfuck. Or maybe INTERCAL. Normal languages will seem much nicer after that.
  • Re:C++ has issues (Score:5, Insightful)

    by IamTheRealMike ( 537420 ) on Sunday March 30, 2008 @10:03AM (#22911500)
    C++ isn't going anywhere. Nearly all serious desktop software outside of Mac-land is written in it because the alternatives (Java? C#?) suck rocks. Large amounts of high performance code is written in C++. I don't know where you got the idea that people who care about performance use C from, that's flat wrong in my experience. I agree that D is a very nice language. It will make great strides in the next five yeras. However, maturity counts for a lot.
  • by ubernostrum ( 219442 ) on Sunday March 30, 2008 @10:25AM (#22911624) Homepage

    Computers and the logic that runs them is complex and brittle, thus why it is important that developers understand a lower-level language like C++.

    ...and several previous generations of programmes roll over in their graves at the thought that C++ is a "lower-level language".

    The thing is, C++ is huge. Just to have a solid working knowledge of the core language, you need to master whole rafts of things that have nothing whatsoever to do with the low-level operation of the machine, because even the core is a labyrinth of obscure corner cases that make language lawyers drool, and which, if expressed in pseudo-code, would be a bunch of gigantic switch statements with a couple dozen levels of ifs nested inside each case. Now, add the STL on top of that, and add common third-party bits like Boost on top of that, and you're left with a monstrosity. To really understand programming at a lower level, you need at best only a small subset of C++, and unfortunately for C++ that subset is properly called "C".

  • by gbjbaanb ( 229885 ) on Sunday March 30, 2008 @10:26AM (#22911630)
    I agree too, to quote TFA: "Conversely, there is now a generation who is firmly convinced that a program is only well-designed if just about everything is part of a class hierarchy and just about every decision is delayed to run-time."

    I'm not sure if the problem is bad education or the lazy coders who expect everything to be easy (ie done for them) so they don't have to really think about what they're doing.

    Even MS's clever chaps have this problem - "lets have C# and GC so no-one need think about memeory ever again" they cried. Then they realised that objects are more than just memory so you do have to worry about destruction of the non-memory resources held by an object (eg file handle, etc). Then they realised they were getting problems writing code that interacted with the OS, so they introduced reference counting objects [msdn.com] that they could put in their "deterministic" finalisation objects that they could put in their Garbage-collected objects.
  • Re:more to it (Score:3, Insightful)

    by Zeinfeld ( 263942 ) on Sunday March 30, 2008 @10:39AM (#22911710) Homepage
    The key advice any C++ expert is "restrict yourself to a specific subset of C++".

    Yes, that subset is called C.

    Seriously, at this point it is time to call a halt to C++ education. Treat it like COBOL, Fortran or any other legacy language that still has demand for programmers but is long since past utility. It is a good idea for students to understand that they have to keep current with programming languages and not expect to be employed as a programmer if they can only code in one. But that does not mean we should start by teaching an obsolete language.

    You don't need to tech kids to write in C++ for them to learn how bad an idea lack of GC is. Just give them some existing code and tell them to chase buffer overruns and memory leaks.

    I would not code in any language that does not have a garbage collection feature, period. When I coded C in the 90s I wrote my own garbage collector using macros and some extensions to the memory allocation routines. More importantly I would not allow anyone else to write code without GC because none of them were capable of doing it right.

    Second, do not use the null terminated string handling. This was one of the key coding requirements that Tim Berners-Lee set out in libwww. All string catenation was checked. It is one of the reasons libwww was so widely used, it was buffer-overun error proof.

    I would certainly specify C for use in a low level O/S platform project, but not C++. I think the language is Algol 68 to Algol 60, worse than the original.

    Above that point I would use either C#, Java or objective C. From an education point of view they are interchangeable.

    C# is at least as fast as equivalent C++ code. The code generator used is identical. You can switch in your own GC if you choose.

  • by wrook ( 134116 ) on Sunday March 30, 2008 @10:41AM (#22911726) Homepage
    I wish I had mod points. While I agree with the grand (grand?) parent post, it didn't really provide any information (not sure why it was modded +5 interesting...). This post really explains the issue faced by many would-be C++ programmers. It's a long learning curve to write modern style C++ code. Not only that, but many people don't even realize *why* they would want to program this way. The bash out some horrendous code that nobody on earth can maintain.

    C++ is also complex in and of itself, but there are good reasons for almost every piece of complexity in the language. Though severely dated the ARM is still a useful place to learn why the language is like it is. Despite it's complexity, I still think C++ is a very handy tool to have in my toolchest for certain types of problems. However I find myself turning to it less and less over the years.
  • by Latent Heat ( 558884 ) on Sunday March 30, 2008 @10:52AM (#22911786)
    Let me get this straight, that some wieners at Purdue decided to teach Java instead of C++ in their Intro to Programming course, and that you had a wiener of a prof who was teaching you Java without adequate experience, this all put you on the path to dropping school, dropping your CS major, and taking courses at community college without finishing a degree?

    I will grant you that if you or the parents are shelling out the Purdue tuition, maybe their CS department should find a better professor for their intro course. I am sorry to hear that this experience dissuaded you from completing a CS degree, and there is probably a lot more to your personal story than can be shared on Slashdot.

    But I would like to communicate to others out there that you will have a few good teachers in your educational career who are really inspiring, a vast group of average teachers, and a number of who you consider to be really, really bad teachers. The "bad" teachers are that way (in your opinion) for a number of reasons -- they may be "nice guys or gals" who don't have enough preparation or smarts to teach, they may have admitted to you gaps in their preparation that you have taken upon yourself to hold them in disrespect for, or maybe they assign too much HW and work you too hard.

    If one is going to take a passive approach, show up to class and demand, "Here, educate me", that is a good way to fail at getting a degree and also to fail at every other opportunity that presents itself down the road. If one is going to take an active approach, working as hard as one can at learning from all teachers, the good and the bad, supplementing gaps in instruction with self-study, working coding jobs, group study, one is going to be successful at college and everything else.

    To suggest that a person can have one "bad" prof means that they are on the street drinking methyl antifreeze out of a jar wrapped in a paper bag, this suggests a very passive approach to not just education but life in all its aspects.

  • by cbart387 ( 1192883 ) on Sunday March 30, 2008 @11:06AM (#22911904)
    I'm full of errors today. I wasn't thinking of the primitives (double,int,char etc). I should have said something like 'first-time programmers have to use objects whereas C++ you can get away with keeping a procedural-oriented mindset. Therefore, you can limit what is introduced. Is that better? ;)
  • Re:more to it (Score:5, Insightful)

    by gbjbaanb ( 229885 ) on Sunday March 30, 2008 @11:07AM (#22911910)

    You don't need to tech kids to write in C++ for them to learn how bad an idea lack of GC is. Just give them some existing code and tell them to chase buffer overruns and memory leaks
    You don't need to tech (sic) kids to write in C# for them to learn how bad an idea of GC is. Just give them some existing code and tell them to chase memory leaks [ibm.com] and finalisation issues.

    There, fixed that for you.
  • by skroll82 ( 935998 ) on Sunday March 30, 2008 @11:07AM (#22911916)
    "My favorite lecturer quote, "Oh, I don't really do any coding at all"." That's not a big deal. Computer Science is not about coding in particular, but understanding the practices to design and implement solutions to a problem. Computer Science is more about applied math then writing in language X. I learned some of the most important concepts in a class that was all done in pseudocode. Understanding how to approach a problem and solve it efficiently is more important then learning a language. In fact, once you know how most things are working, with a few basic concepts such as pointers or how a computer interpret an instruction listing, you should be able to pick up almost any language fairly easily. If you are not capable of learning things on your own without being handheld through a set of power point lectures, even if you knew C++ instead of Java you aren't going to be worthwhile in the real world anyways. You are destined to be a code monkey.
  • by shutdown -p now ( 807394 ) on Sunday March 30, 2008 @11:17AM (#22911976) Journal

    The thing is, C++ is huge. Just to have a solid working knowledge of the core language, you need to master whole rafts of things that have nothing whatsoever to do with the low-level operation of the machine, because even the core is a labyrinth of obscure corner cases that make language lawyers drool, and which, if expressed in pseudo-code, would be a bunch of gigantic switch statements with a couple dozen levels of ifs nested inside each case.
    Absolutely. This is fairly easy to check, too; here [open-std.org]'s the most recent draft for C++0x, and it's already 1200+ pages! And they haven't even included everything they want to get there yet (such as concepts, which alone will add a lot more; a full list of what's not yet there, but is going to be, can be seen here [open-std.org]). Now, how do you think, how many developers are going to understand it well enough?
  • Re:more to it (Score:3, Insightful)

    by Chapter80 ( 926879 ) on Sunday March 30, 2008 @11:19AM (#22911994)
    I agree. C++ served its purpose in the language world. It was a great FIRST STEP toward object oriented programming, but it has outlived its usefulness. Stroustrup should take pride in his great contribution, and not be discouraged because C++ has been superseded by other, better languages. C++ provided a bridge from the world of no objects in C, to the world of objects. But now that there are languages that are designed with objects in mind from the ground up, it's only academically interesting (and of little practical value) to learn C++ except to support (or port) legacy applications.
  • Re:more to it (Score:5, Insightful)

    by johannesg ( 664142 ) on Sunday March 30, 2008 @11:35AM (#22912158)
    The "restrict yourself" stuff is stupid. It's like saying "tie one hand behind your back while programming". Can you think of *any* other profession where professionals are advised not to use their best tools?

    The correct advice would be, "use precisely what you need and no more".

    I have been programming in C++ for a very long time, and I have needed *every single tool* that some of you nay-sayers would say was unnecessary. And that's needed in the sense of "the best solution was achieved using these tools", not "I padded my CV by adding unnecesary complexity".
  • by laffer1 ( 701823 ) <luke&foolishgames,com> on Sunday March 30, 2008 @11:43AM (#22912204) Homepage Journal
    I'm going to have to disagree. The C++ Programming Language is useless to actually learn the language and often times it fails as a reference. If all the ego was removed from the book, it might be useful for something. Compare it to K&R. You'll notice a difference in tone. I realize not everyone likes K&R, but aside from the chapter on pointers I feel it is a very concise book that allows one to pickup the basics of C very quickly.

    I am not alone in my opinion. Consider the difference in rank on amazon. Many third party C++ books have better ratings. In fact, I'd argue C++ is such a large language that one needs more than one book to provide adequate information. I don't think The C++ Programming language should be anyone's first book on C++, but it could be an extra backup reference.

    As for the O'reilly book, I agree it is not complete but there are a few useful items for reference. Absolute C++ is a better book. Even the deitel C++ how to program book is better and I don't think much of deitel books after having to use three as text books.
  • by mcvos ( 645701 ) on Sunday March 30, 2008 @11:43AM (#22912210)
    For quick prototyping, use Python or Ruby. Or even Perl, if you really can't help yourself.

    Yes, the lack of top-level functions in Java is well-known criticism (at least from the Python/Ruby crowd), but personally I've never had any problems with that, mostly because I don't use Java for quick scripts. The constant need to cast everything is a much bigger problem, IMO.
  • by Profane MuthaFucka ( 574406 ) <busheatskok@gmail.com> on Sunday March 30, 2008 @11:51AM (#22912280) Homepage Journal
    Mostrosity? Have you looked at java.com lately? That website is a tangle of twisty little API's, all alike.
  • Re:more to it (Score:5, Insightful)

    by twistedcubic ( 577194 ) on Sunday March 30, 2008 @12:12PM (#22912478)

    Did I mention using the right tool for the job? Use perl for this example.

    You guys are weird. Someone gave incorrect, convoluted code (in C++) for doing something, and you criticize C++ for this???
  • by LizardKing ( 5245 ) on Sunday March 30, 2008 @12:13PM (#22912482)

    Err, are you saying that you *have* to use an IDE to generate a class to run a Java app? The equivalent of your C++ main would be:

    public class Test {
    public static void main(String[] args) {
    // ...
    }
    }

    Why do you need an IDE to write that?

  • by vectra14 ( 470008 ) on Sunday March 30, 2008 @12:40PM (#22912768)
    Wow, how were you modded "Troll"? I'd mod you up if I could.

    Yeah, array/pointer ambiguity is a key "broken" feature of C++, although at the same time it's exactly the kind of thing that makes it possible to use the same language for code running on a microcontroller and for a full-blown GUI. But yes, for most things it would be incredibly useful to have proper arrays with index checking and so on. Most templated solutions that I've seen (Boost?) are just butt-ugly and make the code that much more difficult to understand.

    I think anyone that's used C++ a lot (this is probably a truism for all things) develops a strong love/hate feeling towards it. So it goes.
  • by pherthyl ( 445706 ) on Sunday March 30, 2008 @01:06PM (#22913002)
    That example is complete bogus. Sure you can write some horrible code in C++, but I write C++ code for a living, and it's at least as clean as any Java or C#. You just need to use the right libraries. Qt provides a class library at least as good as those shipped with C# and Java, and you don't get any of the disadvantages of a virtual machine, with most of the advantages.
  • by Capt. Skinny ( 969540 ) on Sunday March 30, 2008 @01:18PM (#22913100)

    I'll never forget those fateful words from the professor: "I don't know this language myself, so I'll be learning it with you as we go."

    Isn't the whole idea of a Computer Science education to learn the underlying concepts of programming, not just the syntax or semantics of a particular language? The programming language used is merely a vehicle for conveying those concepts. The professor who was "learning [J++] with you as we go" was referring to the specifics of the new programming language, not the concepts that he was going to teach in the course. Presumably (unless he was unfit for his position), he knew those concepts well and was able to convey them to the class using whatever syntax and semantics were thrown in front of him.

    The quote I'll never forget came from one of my professors during an advising session: "I'll often get calls from IT managers asking if we have any graduating students who know COBOL. I always tell them that ANY of our graduates could know COBOL - and ask if they are hiring someone for their intellect and understanding of programming concepts, or for their knowledge of a particular language."

  • by ceroklis ( 1083863 ) on Sunday March 30, 2008 @01:40PM (#22913262)
    I think the main problem of C++ is that people who know C assume they automatically know C++ as well. They don't. You might want to read up on this std::vector thing.
  • by Hal_Porter ( 817932 ) on Sunday March 30, 2008 @01:56PM (#22913372)

    All of our C++ apps, without exception, require a nanny process to kill em when they hemorage too much memory.
    You have to make sure that you match up calls to new with calls to delete, free to malloc and so on. C++ only leaks when it is written by sloppy, disorganized people with a poor eye for detail.

    It's hemorrhage (US spelling) or haemorrhage (UK spelling) BTW.
  • by JamesP ( 688957 ) on Sunday March 30, 2008 @01:56PM (#22913374)
    "Oh, I don't really do any coding at all"." That's not a big deal.

    That is BS

    It is ok for, I dunno, a discrete math prof., or maybe an algorythms professor not to code. It is NOT OK for a C++/JAVA/etc teacher NOT TO code.

    It is ok if a cellular biology professor is not a practicing MD. It is NOT OK for a surgery professor to not know how to open people up and not to work with that (with the rare exception of 'I can't operate anymore with a bionic hand' kind of stuff).

  • by shutdown -p now ( 807394 ) on Sunday March 30, 2008 @02:06PM (#22913444) Journal

    Your logic is flawed. It assumes ...
    No, it does not. I wasn't comparing C++ to anything (and there are more complicated industrial languages out there: Common Lisp comes to mind), merely pointing out that its sheer size and complexity is more than most can handle.

    That developers actually learn the language from the ISO standard rather than books.
    They don't, and that's part of the problem (because the books are inadequate; and the books are inadequate because any book that'd cover all the subtleties won't be much shorter than the Standard).

    That developers have to relearn the whole language when C++0x comes out.
    They will, when they run into code written using new C++0x features that they'll have to understand, debug and maintain. That's the problem: in theory, you can only use a subset of the language, but in practice, there's no standard subset, so as long as you use third-party code, you'll get it all eventually, and will have to understand it all as well. If you want a standard subset, that's Java (or C#).
  • Re:Ruby? (Score:3, Insightful)

    by SanityInAnarchy ( 655584 ) <ninja@slaphack.com> on Sunday March 30, 2008 @02:28PM (#22913606) Journal

    Where ruby is lacking is in the static department. Static polymorphism, static typechecks, metaprogramming and that stuff.

    You can still use the === operator, or the kind_of? method. And I'm fairly certain metaprogramming is supported.

    I've just found that static type checking is about all that's missing, and it isn't incredibly useful, especially when you're doing unit tests.

    Just wish they had used unicode as the compiler language, then we could have gotten real less-than-or-equal operators :)

    I'd assumed they did? After all, Ruby is from Japan...

    It is nice that it really only uses ASCII for the language itself, though. I should add that to my list.

    Indeed, but only dynamic. Not overloading, specialisation or anything like that. :(

    I'm feeling a bit lost in this jargon... Can you give me some specific examples?

    For big projects, code completion, class summaries and refactoring support is very nice.

    When these are done for me, via things like Eclipse plugins, I don't worry too much about how complex they are under the hood, so long as they work.

    Real constants and constant functions would be nice, though.

    For what, though?

    The existing constants are difficult enough to override without at least a warning, and I think that's really all you need. The same could be said of the private/protected methods -- there is a bit of a mess with the usage of 'send', but in a language which truly supports reflection and metaprogramming, private/protected is effectively only a warning anyway, as there's always a way around it.

    Rather, I'm thinking of stuff like "you write a grammar, and the compiler+library builds the parser from that."

    Ruby is at least as strong as C++, I'd think, due to how easy lambdas are. This seems to be about DSLs again, right?

    The syntax for calling functions, and for passing them blocks, is simple and clean enough that it almost feels like defining your own language directives. Yet it's all still valid Ruby, which means it's usually readable by anyone who understands Ruby, and it's easy to mix and match.

    This is a point very C++ is extremely strong, though far from perfect. In practice, it requires the compilation part of the language to be Turing complete.

    In other words, LISP.

    Duck typing does not require the typing to be implicit. I want the compilation to fail if and only if the type passed does not meet the required abilities.

    I'd argue that the sanest way to do this is to just make the typing implicit.

    C++ does this with templated methods.

    Which still means that you have to put everything (somehow) into the type system, in order for the template to match, if I understand it. It also means that you have that extra template syntax in order to give you something that I think should be on by default.

    Yes, but it relies on a virtual machine. I do not like that requirement, and I don't think it is strictly necessary.

    Why don't you like that requirement?

    It is merely that if I have a function that adds to numbers, I should be able to make a function that computes a number + 4.

    In the simplest case, I suppose you can define such a function explicitly:

    def add(a, b)
    a + b
    end
    def add_four(x)
    add(x, 4)
    end

    But I suspect that's not what you want. I suspect you're talking about bind variables, which Ruby can do. (Even JavaScript can do those.)

    That is, you want something like:

    a = generate_add(4)
    a.call(3)

    And this can be

  • by Giant Electronic Bra ( 1229876 ) on Sunday March 30, 2008 @03:23PM (#22914018)
    On an already ugly programming language, or at least one which is at best obsolescent from a technology perspective.

    Having 25+ years of experience in the field my opinion is C++ is aweful. No amount of hacking around the edges of it is ever going to fix that. Due to the very nature of the language defect rates are exceedingly high. Even with modern development, test, and debugging tools building software in C++ is an endeavor which requires an inordinate amount of expertise, mostly in how to avoid doing most of the things the language allows you to do because 99% of them are bad ideas. Instead of learning to program well, most instruction in C++ has to be focused on how to work around its hodgepodge of misfeatures. Personally I wouldn't even consider allowing anyone with less than 5+ years of experience touch a commercial C++ application.

    The whole stankin' mess should be retired. The sooner the better.
  • by dark404 ( 714846 ) on Sunday March 30, 2008 @03:48PM (#22914242)
    Where are they teaching it actively again? I'm a student on computer science at the moment and all they teach in any depth is Java. The only reason I know c++ is my desire to learn it, despite the fact that various parts of my course have recently required a fairly in depth knowledge of c++.
    As background, I have worked with Java, C, and C++. I've also dealt with functional languages (Lisp, Haskell), scripting languages (perl, php, python), and a bunch of other stuff. In all my experiences, my response to C++ is pfft, I can live without it. If I want to get into the guts of the operating system, muck with the kernel, or do something nasty by hand in memory, I'll use C, if I want to write an application I'll use Java. C++ is a terrible language for application development, it combines all the worst aspects of OOP with all the worst aspects of C style memory handling, but brings no advantage to the table!
    I'm tired of all this chest beating of wanabe's complaining oh they teach me java, but I am such an uber geek I want to learn C++! Computer Science education doesn't teach you to program in JAVA, it teaches you computer science, in the course of that you learn to program, not to program in X, but to program. Any computer scientist worth their salt can program just as easily in one language as another, and can pick up any other language just as easily.
    The only big mental shifts come between procedural languages vs oop languages vs functional languages, etc. Everything else is syntactic sugar. Choose the language which best fits the problem at hand.
  • Re:C++ has issues (Score:3, Insightful)

    by quigonn ( 80360 ) on Sunday March 30, 2008 @04:48PM (#22914816) Homepage
    Hello Mr. n00b, you can fulfill agile requirements in any programming language. And, no, "shipping code in a hurry", as you put it, is not agile, absolutely not. It's more the Dilbert version of agile development.
  • Re:Sad... (Score:3, Insightful)

    by Zeinfeld ( 263942 ) on Sunday March 30, 2008 @05:02PM (#22914922) Homepage
    The GC point is very simple. My experience is that less than 5% of C++ programmers can write code that does not have memory leaks and buffer overruns. So even though I can write code that I memory leak free, I typically have to rewrite other people's code written in C or at the very least spend time working out if they have a clue or not. With Java I can at least know that they will not deplete resources.

    And anyone who is saying 'learn to use the leak detection tool', testing programs for correctness is a total lose. You can never test every state of anything but the simplest programs. A good GC will guarantee that there are no memory leaks without needing to test. Better code safety and better performance as well, memory leaks are the most common cause of performance problems that I see.

  • by bfwebster ( 90513 ) on Sunday March 30, 2008 @05:46PM (#22915312) Homepage
    To be honest, I would have been tempted to score my own post as flamebait, though it was not intended as such. Let me quote from myself back in 1995, in the Bibliography section of my book Pitfalls of Object-Oriented Development (M&T Books, 1995):

    The Design and Evolution of C++, Bjarne Stroustrup, Addison-Wesley, Reading, Mass., 1994. This is a good book to have when you reach a point in your C++ studies that you want to throw things through windows. In the first place, it allows Stroustrup to explain the thinking and debates that provide insight into various aspects of C++. In the second place, it's softcover, which means it will bounce off the window when you throw it.


    Elegance is that term of art in software engineering that we use to describe a piece of architecture, design, and/or coding that accomplishes what it needs to (and often a good deal more) with a minimum of complexity and a maximum of clarity. In all my years of dealing with C++, I have never heard anyone call it "elegant", and with good reason. ..bruce..
  • by RzUpAnmsCwrds ( 262647 ) on Sunday March 30, 2008 @06:17PM (#22915544)

    In fact, I recently took an informal survey of about a dozen CS seniors and found that none (yes, none) of them knew what K&R, the "white book", or the "Art of Computer Programming" were.

    Why the hell should they? Is knowing the title of a C book that's out of date (OK, the second edition is better, but K&R usually refers to the original edition) important?

    Perhaps you don't understand what CS is. CS isn't about C - in fact, it's not even about programming at all. CS is about the theory of computation. Things like programming language theory and computational complexity theory are subsets of CS.

    CS doesn't include coding practices, use of source control, project/time management, or software testing. All of that is part of software engineering.

    The problem is that people expect CS programs to produce functional software engineers. And while functional software engineers certainly need a strong grasp of theoretical concepts (such as a basic computational complexity theory and common algorithms), what they really need is software and systems engineering experience.

This file will self-destruct in five minutes.

Working...