Slashdot Mirror


Head First C#

Michael J. Ross writes "For computer programmers who do not have a solid understanding of object-oriented programming (OOP), learning the C# programming language can be rather challenging, even if they have experience with C or C++, which at least would give them a head start over non-C programmers. Any developer in this situation may well want to begin the learning process with a book that aims to teach both OOP and C# in as gentle a manner as possible, with plenty of patient explanations and illustrative diagrams — such as those found in the book Head First C# by Andrew Stellman and Jennifer Greene." Read below for the rest of Michael's review. Head First C# author Andrew Stellman and Jennifer Greene pages 778 publisher O'Reilly Media rating 7/10 reviewer Michael J. Ross with Greg Hanson ISBN 0596514824 summary A heavily illustrated intro to object-oriented programming and C# Published by O'Reilly Media on 26 November 2007, under the ISBNs 0596514824 and 978-0596514822, Head First C# is one in a series of "Brain-Friendly Guides." The introduction to this particular book discusses how the series attempts to present the concepts and technical material in a way that is far more intellectually compelling and memorable than the approach currently taken by most books. Some of their guiding principles include: making things visual, oftentimes using novel and even outlandish diagrams; using a casual and conversational style; engaging the reader through exercises and questions; and spicing up the discussions with humor.

On the book's Web page, readers will find links to download the book's sample code, participate in a forum dedicated to the book, register their copy of the book, read and submit any errata (of which there are many), and submit a reader review and read those of other readers.

The book's material is organized into 15 chapters, covering the topics in a progressive order that would probably be most helpful for the inexperienced developer: the advantages to programming visual applications in C# and the Microsoft Visual Studio integrated development environment (IDE); building a simple application to get started; the C# code produced by Visual Studio; basic C# language constructs; an introduction to objects and their components; data types, including arrays and references, and how C# allows you to work with them; protecting an object's data from unintended access, through encapsulation; extending classes through inheritance and subclasses; finding and using class interfaces, and the advantages of doing so; storing data in arrays, lists, and dictionaries; saving data in files and directories, as well as working with file streams and serialization; exceptions and debugging techniques; event handling; how to build complex applications; creating user interfaces with controls and graphics; object destruction and garbage collection; and connecting your C# programs to databases using LINQ. Interspersed throughout the book are three C# labs, which encourage the reader to put into practice their new programming skills, and thus better internalize the ideas of OOP and C# covered in the chapters preceding each lab. The lab applications comprise a racetrack simulator, a simple adventure game, and a re-creation of Space Invaders.

When they see this book for the first time, some prospective readers may be overwhelmed by its size, clocking in at 778 pages. Yet a sizable portion of those pages will read faster than those of the typical programming book, largely due to all of the diagrams and whitespace, which really help to break up the material and make it more digestible. However, what many might perceive to be a strength of the book, could be seen as a weakness by others. In fact, if the unnecessary diagrams and redundant material were to be removed from the book, it might end up only half its current size. But this may only be a deterrent for people who are carrying this book around, or who tend to be impatient and wish to get right to the point of any book they are reading, or who may be upset by the extra trees chopped down to double the number of pages (the book does not appear to have been printed on recycled paper).

Despite Head First C# being clearly intended as an introductory book to object-oriented programming in general, and C# in particular, the target audience especially may be frustrated by all of the errata and other sources of confusion that they will encounter. This is especially true when readers are doing their best to implement all of the sample applications, and struggling when, for instance, the code does not match the figure provided, or even the code on another page. For example, on page 50, the authors instruct the reader to drag a new PictureBox onto a new form, but readers will probably struggle to figure out where to drag it from. On page 105, the authors instruct the reader to flip back and look through the code, to fill in some class diagrams, but they don't clarify what code should be considered. Readers' comments on the online bookseller sites, list far more similar problems. In fact, that there are so many technical errors in this book is quite remarkable given that the technical review team comprised no fewer than 14 individuals! How could so many eyeballs miss so much?

The authors make a real point of reviewing material explained earlier, which generally is an effective approach for this type of book. But the repetition sometimes becomes excessive — enough to annoy even the greenest novice. For example, on page 445, we find the question: "Okay, I still don't get it. Sorry. Why are there so many different kinds of exceptions, again?"

On the other hand, the book has some real strengths, including those mentioned above for making the material more approachable. In particular, when the reader becomes accustomed to the visual style of presenting concepts, he or she will probably find it a faster approach to learning the ideas. Admittedly, veteran developers may still prefer the more narrative style of conventional programming books — especially when they encounter rather convoluted diagrams, such as that on page 292. Yet the illustrations are particularly potent for explaining interfaces, as done in Chapter 7.

Although the book will be of most value to newer programmers, experienced C# programmers will find topics of interest and perhaps even some language details and analysis that they have never previously encountered. For instance, some of the questions posed in the sections titled "there are no Dumb Questions," could be valuable — such as the comparison of File versus FileInfo, and when to use one over the other. Also, some of the utilities could help the reader for future development, such as the hex dumper program on page 432.

Sadly, Head First C# is weighed down by excessive redundancy and an errata-to-number-of-technical-reviewers ratio possibly unequaled by any other programming book. Yet, for any programmer new to object orientation and C#, this introductory book should prove an extremely comprehensible and reader-friendly resource.

Michael J. Ross is a Web developer, writer, and freelance editor. Contributor Greg Hanson is a C# programmer in Fort Collins, Colorado.

You can purchase Head First C# from amazon.com. Slashdot welcomes readers' book reviews -- to see your own review here, read the book review guidelines, then visit the submission page.

243 comments

  1. C# isn't a language... by QwkHyenA · · Score: 0, Flamebait

    It's M$ goo. It's a "we lost our J++ lawsuit so we gonna rewrap our crap" thingy..

    --
    LFS. Have you built your system today?
    1. Re:C# isn't a language... by j-pimp · · Score: 0, Flamebait

      It's M$ goo. It's a "we lost our J++ lawsuit so we gonna rewrap our crap" thingy..

      Except it came out better this time.

      --
      --- Justin Dearing http://www.justaprogrammer.net/ We're just programmers.
    2. Re:C# isn't a language... by Anonymous Coward · · Score: 0, Funny

      Does the fact that you sound just like twitter not scare you to the depths of your soul? It should...

    3. Re:C# isn't a language... by Anonymous Coward · · Score: 1, Funny

      Mate. That probably is Twitter.

    4. Re:C# isn't a language... by Anonymous Coward · · Score: 0

      I would like to pontificate on the fact that the correct spelling is Zimbabwean..

    5. Re:C# isn't a language... by dedazo · · Score: 2, Insightful

      Please, elaborate as to how C# is "goo". What exactly do you mean? In the sense that you don't think the language is designed correctly? The runtime doesn't do it for you? The compiler? The type system? The platform itself?

      Because "teh M$ goo" is not exactly enlightening, other than in the "I hate Microsoft" sense, which is your prerogative of course, but has nothing to do with the technical merits of their products. Especially when you

      we lost our J++ lawsuit

      base your opinions on incorrect premises, since J++ (and J#) have nothing to do with the Sun complaints that brought the antitrust trial, which is what I assume you are referring to here.

      Someone actually modded you up, which means that someone out there assumes you were not merely trolling (which is what it looks like to me, frankly). So a more detailed explanation of your claims would be double plus good.

      --
      Web2.0: I love when people Flickr my cuil and digg my boingboing until my google is reddit and I start to yahoo
    6. Re:C# isn't a language... by Dogtanian · · Score: 3, Insightful

      It's M$ goo. It's a "we lost our J++ lawsuit so we gonna rewrap our crap" thingy..

      Except it came out better this time.

      Flamebait? One could argue not. Admittedly my experience with C# is very limited, but the first time I used it about five years ago, it struck me as as blatant a copy of Java someone could make without getting sued... but without the baggage and with a few nice improvements.

      MS don't deserve *too* much credit for this, since (unlike Sun) they were able to benefit from five or six years of someone else's experience when creating their language, but with the ability to start with a clean slate and no backwards-compatibility baggage.

      (Java inevitably accumulated a fair number of dead ends and improved reinventions of the same functionality over the years.)

      --
      "Slashdot - News and Chat Sites Deviant". (Click "homepage" link above for details).
    7. Re:C# isn't a language... by AppleOSuX · · Score: 4, Insightful

      So? Linux is a blatant copy of some other *nix.

      Open Source software factories are constantly churning out copies of commercial software.

      What's your point?

    8. Re:C# isn't a language... by QwkHyenA · · Score: 1

      Exactly. What he said. I also respect no language that does away with pointers. Heck, I don't really like C++ too much either. Polymorphism, Encapsulation, inheritance and abstraction scare me. Give me a Struct or a Union any day. Of course don't take my ramblings as gospel as I also cut my grass at home w/ a chainsaw.

      --
      LFS. Have you built your system today?
    9. Re:C# isn't a language... by 0xABADC0DA · · Score: 3, Interesting

      MS don't deserve *too* much credit for this, since (unlike Sun) they were able to benefit from five or six years of someone else's experience when creating their language, but with the ability to start with a clean slate and no backwards-compatibility baggage.

      ... were able to, but didn't. The difference between C# vs Java was like C++ vs C. C++ and C# basically just add a lot of syntactix mumbo-jumbo onto a plain, reliable, usable language.

      Mandatory generics, iterator yield, implicitly typed variables, 'object initializers', extension methods, embedding C++ and SQL directly into the code, operator overloading, implicit conversions, conditional compilation, etc -- none of those C# features actually helps you write better programs, and a lot of the so-called improvements in C# just make it a complicated mess.

      The main problem in C++ and C# is that just looking at a statement you can never be sure what it does without poking around a lot of places (in Java a statement always says exactly what it does). A simple statement like "x.y = a[b]" can involve at least 6 different method calls. In Java is always means assign array element to a field.

      Like C++, there are some people who will claim more features are better no matter how much more complicated (and generally the 'never enough features' crowd lives in Redmond). But at the rate C# is gaining kitchen sinks I think it will only be a few years until people switch back to Java because it doesn't have all that baggage.

    10. Re:C# isn't a language... by Westley · · Score: 2, Insightful

      Mandatory generics, iterator yield, implicitly typed variables, 'object initializers', extension methods, embedding C++ and SQL directly into the code, operator overloading, implicit conversions, conditional compilation, etc -- none of those C# features actually helps you write better programs, and a lot of the so-called improvements in C# just make it a complicated mess.

      I couldn't disagree more. Leaving aside your mischaracterisation of LINQ as "embedding SQL directly into the code" all of these features can *hugely* improve the readability of code.

      Having used both Java and C# extensively, I know which language I prefer by a long chalk. Happily Java 7 will (eventually) gain at least some of the nice features of C#, but unfortunately not all - and it won't get rid of checked exceptions...

      I now use Java professionally, but I'm constantly missing the features of C# which consistently allow me to write readable, reliable code.

    11. Re:C# isn't a language... by Dogtanian · · Score: 1

      So? Linux is a blatant copy of some other *nix.

      Open Source software factories

      (Side point, but what are these "Open Source software factories" that you speak of? I'd have said that- whatever you think of open source- its development model is generally far less factory-like than that of commercial software firms).

      are constantly churning out copies of commercial software.

      What's your point?

      My point was that it wasn't unreasonable to argue that C# could be considered an improvement upon Java.

      I then went on to explain why indeed this probably *would* be the case given the circumstances of C#'s birth. Credit to MS for the improvements, but it shouldn't be read that MS are better than Sun (or whatever) solely because they improved upon their work.

      And get off your high horse- though they've done a lot, I wouldn't give Linus Torvalds or Richard Stallman the credit for inventing Unix and its descendants either.

      --
      "Slashdot - News and Chat Sites Deviant". (Click "homepage" link above for details).
    12. Re:C# isn't a language... by Dogtanian · · Score: 1

      I also respect no language that does away with pointers.

      Don't Java and C# still feature pointers implicitly via their referential handling of objects?

      --
      "Slashdot - News and Chat Sites Deviant". (Click "homepage" link above for details).
    13. Re:C# isn't a language... by hjrnunes · · Score: 0, Flamebait

      Huh, what features? If they're so nice it would sure be good to hear about them...

    14. Re:C# isn't a language... by Anonymous Coward · · Score: 0

      it struck me as as blatant a copy of Java someone could make without getting sued...

      Well duh!

      The whole reason C# came about was because Sun was suing Microsoft for developing its own version of Java. Microsoft simply renamed it C#.

    15. Re:C# isn't a language... by Westley · · Score: 2, Informative

      Um, the features listed by my post's parent.

      I don't have time to describe them all in detail here (or, more importantly, how they can improve readability of code) but here are a couple of URLs which give a bit more information:

      http://csharpindepth.com/Articles/General/BluffersGuide2.aspx
      http://csharpindepth.com/Articles/General/BluffersGuide3.aspx

      Shameless plug: for a lot more detail, read C# in Depth... (there are sample chapters available at http://manning.com/skeet)

    16. Re:C# isn't a language... by QwkHyenA · · Score: 1

      Yes. But C# handles pointers in "unsafe" coding areas which then need special permissions =(

      I really did make my initial comment well before I had my first cup of coffee (Again, I'll drink Java but won't code in it.) So I hope everyone doesn't get to bent over my ramblings (frick'n MS fanboys! All of ya! Not you dogtanian of course.)

      --
      LFS. Have you built your system today?
    17. Re:C# isn't a language... by encoderer · · Score: 3, Insightful

      We all stand on the shoulders of giants.

      Java was not revolutionary, it was evolutionary. Sun certainly had a lot of 'prior art' to guide them when they developed Java.

      I'm sitting here wondering what you think made Java so special that it was, by your logic, in a class unto itself? It wasn't the first OO language, it wasn't the first platform-agnostic language, it didn't expose a new and wild syntax, etc.

      Java was successful not because it was groundbreaking: It was successful because it took all the best innovations from the existing languages of the mid-90s and coupled them with a familiar syntax and a large and cruft-free library.

      The framework ecosystem gave a further boost by giving C and C++ programmers a route to web development that didn't involve terrible pain (CGI) or the loss of self respect (VB Script).

      I imagine Anders had similar goals for C#.

    18. Re:C# isn't a language... by QwkHyenA · · Score: 1

      I don't know who this guy is but i like him already.

      --
      LFS. Have you built your system today?
    19. Re:C# isn't a language... by QwkHyenA · · Score: 1

      I'd reply to the both of yous, but I'd go over 140 chars.

      --
      LFS. Have you built your system today?
    20. Re:C# isn't a language... by Anonymous Coward · · Score: 1, Insightful

      Except when you're called at 2am because the smoke test that was running on product release binaries failed with an access violation and no stack dump.

      You better hope that the other programmers using pointers in the 250,000 lines of code used them properly.

      There is no specific need for pointers. They can be abstracted either with shared_ptr or using a more modern language.

    21. Re:C# isn't a language... by smilindog2000 · · Score: 2, Insightful

      I agree. I don't even let our programmers use pointers in C, except for specific cases where the language is limited (returning multiple values, and char * for strings). If you dump pointers to structures and use more abstract coding, just accessing properties of objects through object references/handles, everything gets better.

      In fact, you can also get waaay faster.

      --
      Beer is proof that God loves us, and wants us to be happy.
    22. Re:C# isn't a language... by smellotron · · Score: 0

      The main problem in C++ and C# is that just looking at a statement you can never be sure what it does without poking around a lot of places (in Java a statement always says exactly what it does). A simple statement like "x.y = a[b]" can involve at least 6 different method calls. In Java is always means assign array element to a field.

      In theory, you are correct. C++ allows developers to shoot themselves in the foot in so many "interesting" ways. In practice, if you don't know what a statement does just by looking at it, you locate the original developer and give them a solid WHACK on the head for writing obtuse interfaces.

    23. Re:C# isn't a language... by JebusIsLord · · Score: 2, Informative

      Well, if you're afraid of object orientation, there isn't much we can do for you, nor are you the target audience, but you really should try to modern-up your skillset if you code for a living. Once I "got it" i found I didn't want to go back to procedural coding at all.

      Secondly, while there are times when points might be nice, the tradeoff (basically, you lose all the safety that a VM gives you) is unacceptable. In C#, you can do method pointers using delegates or reflection (another scary OO concept), and use pinned memory and marshalling for reading data into structs, without sacrificing safety. That covers 95% of what you'd want to do with pointers (The other 5% would be arrays of pointers, simply because an array of delegates would just be too slow in many such situations).

      --
      Jeremy
    24. Re:C# isn't a language... by Anonymous Coward · · Score: 0

      If you use a $ as an S in Microsoft, its flamebait. You've ventured outside the realm of reasonable debate. The fact that the original poster also calls it "goo" also indicates his preference to start a conversation not based on objective, or even subjective facts. It is in a word: flamebait.

    25. Re:C# isn't a language... by QwkHyenA · · Score: 1

      I would like to pontificate on the fact that the correct spelling is Zimbabwean..

      I don't even know this guy but I like him!

      --
      LFS. Have you built your system today?
    26. Re:C# isn't a language... by Anonymous Coward · · Score: 0

      I couldn't disagree more. Leaving aside your mischaracterisation of LINQ as "embedding SQL directly into the code" all of these features can *hugely* improve the readability of code.

      So can C++. A well written program, where your first guess what a statement does is right, is tons more readable in C++ than the equivalent in C or even in Java. Unfortunately, code so elegant and awesome never happens.

      I couldn't disagree more. Leaving aside your mischaracterisation of LINQ as "embedding SQL directly into the code" all of these features can *hugely* improve the readability of code. ... I now use Java professionally, but I'm constantly missing the features of C#

      Some people like programming in languages that are a complicated mess... like C++ undeniably is. So your personal opinion of what you like is not so much the point.

    27. Re:C# isn't a language... by Foople · · Score: 2, Funny

      -- none of those C# features actually helps you write better programs, and a lot of the so-called improvements in C# just make it a complicated mess.

      I couldn't disagree more. Leaving aside your mischaracterisation of LINQ as "embedding SQL directly into the code" all of these features can *hugely* improve the readability of code.

      ...

      I now use Java professionally, but I'm constantly missing the features of C# which consistently allow me to write readable, reliable code.

      That's why I like perl. All those features make for more readable code.

    28. Re:C# isn't a language... by Lincolnshire+Poacher · · Score: 2, Insightful

      > but you really should try to modern-up your skillset if you code for a living

      Modern? Simula67 introduced an implementation of OO with objects, classes and inheritance in... guess what year?

      OO should only be one paradigm in the programmer's toolkit; applying it to all problems is unwise. Procedural, OO, AO, DO, functional, logic; they're all equally valid across an unbounded problem space.

    29. Re:C# isn't a language... by Dogtanian · · Score: 1

      If you use a $ as an S in Microsoft, its flamebait. You've ventured outside the realm of reasonable debate. The fact that the original poster also calls it "goo" also indicates his preference to start a conversation not based on objective, or even subjective facts. It is in a word: flamebait.

      Except that the person I was replying (and referring) to wasn't the one who did those things; that was the top-level OP.

      --
      "Slashdot - News and Chat Sites Deviant". (Click "homepage" link above for details).
    30. Re:C# isn't a language... by omuls+are+tasty · · Score: 1

      The main problem in C++ and C# is that just looking at a statement you can never be sure what it does without poking around a lot of places (in Java a statement always says exactly what it does). A simple statement like "x.y = a[b]" can involve at least 6 different method calls.

      That stinking operator overloading! I hear that in C++ and C# something like:
      s1 == s2
      could even compare VALUES of two strings s1 s2! Instead of checking whether s1 and s2 two references point to the same object in memory, like every sane language should do.

      And all those other things. I mean, in C++ you also had to deal with templates, those complicated buggers. I mean, dude, you'd even have to write something like vector<int> - instead of plain old simple Object containers that you'd only have to cast into the target type - the way that statically typed language are damn well supposed to be. Oh wait, we decided that the <Integer> thing was better in 1.5? Kahm...

      And I hear that there are some other things where you could even hook into language constructs, such as the for loop, instead of using the simple iterator()/hasNext()/next() idiom. Oh crap, we did that too in 1.5 with Iterable???

      It's not that I hate Java... too much. Yes, it is a good, robust platform with a myriad of tools, well suited for big project and enterprises. Yes, no-one can dispute that C++ had a number of completely unnecessary features (private inheritance, anyone?) but the amount of straitjacketing that Java imposes on you is completely unnecessary - as they admitted themselves on those two examples above. Only 10 years later.

      Don't ditch C# just because it's from Redmond. They got a number of language things right IMHO (not saying that they haven't got a number of them wrong as well). If anything, having a competitor is good for Java and for all of us at the end.

      Of course, I'd take Python or Ruby over both them C++ clones any given day.

    31. Re:C# isn't a language... by maz2331 · · Score: 1

      C# is like taking C, stripping out the pointers, and mixing in some VB and Java.

      If I want to write easy code without dealing with pointers, I use VB. It's great for those things. Especially when I can use VC++ to create a new ActiveX to extend functionality rather easily. I can even create some pretty whiz-bang stuff that integrates nicely into Access and makes VBA rock.

      If I want super fast code to crunch things like graphics, then straight old C is my tool of choice.

      If I want clean syntax, plus the ability to use pointers, then my choice is a good Object Pascal or Delphi. ANSISTRINGs and dynamically resizable arrays are manna from the code gods when time is short and speed counts.

      For web stuff, PHP is king.

      C# to me is basically putting up with the cryptic PITA of C while giving up the benefits, and it lacks the cross-platform advantages of Java.

      So what is the damn thing GOOD for?

    32. Re:C# isn't a language... by dedazo · · Score: 1

      Aawww, troll. I guess I'm not being a good little Slashbot here.

      --
      Web2.0: I love when people Flickr my cuil and digg my boingboing until my google is reddit and I start to yahoo
    33. Re:C# isn't a language... by JebusIsLord · · Score: 1

      Alright, but given the overhead of OO it wasn't exactly mainstream until C++ came out (and even then, a lot of C++ is procedural). Also, virtualized address space and the lack of true pointers IS definitely modern (circa 1990s, anyhow). The OP's impression that the lack of pointers = toy language is an inaccurate and outdated notion.

      --
      Jeremy
    34. Re:C# isn't a language... by Anonymous Coward · · Score: 0

      I don't think I'm going out too far on a limb when I call bullshit on your entire thing. Perhaps you've used VB before, and perhaps you've used C++ once or twice, but citing PHP and VBA pretty much means you have some backwoods corporate experience doing jack fuckall with most of the rest of the programming toolset you mention. Graphics crunching? Ever heard of an API, how bout a video card? DirectX? "STraight C" indeed, you haven't done that at all, you've just heard talk of it on some newsgroup somewhere and decided that it makes sense. I've used C, C++, Java, Php, VB (old school) and VB.net (not very much) but now I use C# for everything because it's great. It's spoiled me so much with the managed world, and it reminds me nicely of all the things I liked about C++ and Java while taking away the pain of memory management. Pointers? Are you guys serious? You don't need pointers for their own sake, they serve a purpose, and in C#, that purpose is served by other features most of the time, and if you really must have them write unsafe blocks. Do we work for computers or do they work for us? I forget.

    35. Re:C# isn't a language... by QwkHyenA · · Score: 1

      > but you really should try to modern-up your skillset if you code for a living

      Modern? Simula67 introduced an implementation of OO with objects, classes and inheritance in... guess what year?

      OO should only be one paradigm in the programmer's toolkit; applying it to all problems is unwise. Procedural, OO, AO, DO, functional, logic; they're all equally valid across an unbounded problem space.

      Exactly good sir. You don't need to use C++ to implement OO in C. I can easily do OO in regular C thru the use of structs & unions. Not all functions need to utilize get/set member functions and whatnot.

      --
      LFS. Have you built your system today?
    36. Re:C# isn't a language... by hjrnunes · · Score: 1
      Man, I'm probably missing something but, the first link brings little if nothing new to Java. While the second has a couple nice details but nothing more than that... I'm just saying I can't really see where C# is more readable than Java... It's just like, a different accent (in terms of readability, of course).

      But hey, languages are there to be used so, C# on man!

      I'm getting into lighter flavors anyway, I figure that for most stuff I don't need the bulkiness of Java.. Python does the trick neatly.

    37. Re:C# isn't a language... by Westley · · Score: 1

      From C# 2:
      o There's nothing directly like iterator blocks in Java. If you want to implement Iterable/Iterator, you're on your own. Furthermore, there's no safe way of using non-memory resources in an iterator.

      o Java generics are very poor compared with those in .NET.

      o Anonymous methods are much leaner and more flexible than anonymous inner classes. That's why there's so much discussion about how to bring closures to Java 7 :)

      o Nullable value types don't exist in Java (we're not talking autoboxing here). Of course, Java doesn't have user-defined value types in the first place...

      o Partial types don't exist in Java at all

      C# 3 introduces a whole raft of new features. The links were only very brief introductions to the new features. C# 3 *definitely* allows more readability than Java. I know both languages pretty well, and now that I'm back to writing Java commercially, I really miss the expressiveness of C# 3.

  2. Head first, see sharp by Anonymous Coward · · Score: 5, Funny

    Ouch, my eyeball!

    1. Re:Head first, see sharp by Anonymous Coward · · Score: 0

      Sure, C#'s all fun and games, until somebody loses an eye!

      And what's the sequel to "Head First C#?" "Picking Safety Glass Out of My Scalp for Two Frigging Years C#?"

    2. Re:Head first, see sharp by Anonymous Coward · · Score: 0

      Hey, I know Greg Hanson! I worked with him at LPL and Wireless Knowledge. Greg if you are out there - drop Scott a line!

    3. Re:Head first, see sharp by flargleblarg · · Score: 2, Funny

      > Ouch, my eyeball!

      Do not look into C# with remaining eye.

  3. C# is fine, by pitchpipe · · Score: 5, Funny

    and C and C++ are all good languages, but I like C@!&$. It's the $h!7.

    --
    Look where all this talking got us, baby.
    1. Re:C# is fine, by CastrTroy · · Score: 5, Funny

      Personally, I prefer C!@|!$. You should try it. Check you spam box for places to get it.

      --

      Anthropic principle: We see the universe the way it is because if it were different we would not be here to see it.
    2. Re:C# is fine, by Anonymous Coward · · Score: 3, Funny

      I like Cb better.

    3. Re:C# is fine, by Critical+Facilities · · Score: 2, Funny

      True, Cb is good, but D minor is the best, as we all know it is the saddest of all keys.

    4. Re:C# is fine, by iapetus · · Score: 2, Funny

      No, that would be Sneaky Pete's Key.

      Poor Sneaky Pete. <sniff>

      --
      ++ Say to Elrond "Hello.".
      Elrond says "No.". Elrond gives you some lunch.
    5. Re:C# is fine, by neminem · · Score: 1

      KoLer!

      No, the saddest key is definitely Richard's. And by "saddest", I mean "most annoying".

  4. Head First seems too limited by CRCulver · · Score: 4, Informative

    Granted, in this case I don't know the language C#, but in general I never really understood the Head First series, unless you really like printed introductions to languages. It would just make more sense to use free Internet resources to take your first steps in C#, and then get O'Reilly's e.g. C# 3.0 in a Nutshell as a good desk reference. Tech books are expensive, so it just doesn't make sense to invest in a primer that, after you finish with it, is a paperweight.

    1. Re:Head First seems too limited by azadder · · Score: 2, Interesting

      I never really understood the Head First series

      I definitely agree. My first encounter with this series was while looking for a nice C# primer at a local B&N's. I browsed through some of the Head First series and found it difficult to read/follow. I am sure these types of books are for someone, but they definitely did not give me as straightforward approach as I would have wanted.

    2. Re:Head First seems too limited by kestasjk · · Score: 1

      If you don't know C# you might not know that C# in a nutshell is also rather limiting. on C# is much more .NET oriented, and much longer and more thorough for only slightly more money.

      --
      // MD_Update(&m,buf,j);
    3. Re:Head First seems too limited by kestasjk · · Score: 2, Interesting

      Apress' take on C# is much more .NET oriented, and much longer and more thorough for only slightly more money..

      How did I not notice that?

      --
      // MD_Update(&m,buf,j);
    4. Re:Head First seems too limited by jonaskoelker · · Score: 3, Insightful

      it just doesn't make sense to invest in a primer that, after you finish with it, is a paperweight.

      Except for K&RC2, which you can read for pure entertainment :)

    5. Re:Head First seems too limited by MiniMike · · Score: 1

      How did I not notice that?

      HTML in a nutshell?

    6. Re:Head First seems too limited by Tablizer · · Score: 2

      It would just make more sense to use free Internet resources to take your first steps in C#, and then get O'Reilly's e.g. C# 3.0 in a Nutshell as a good desk reference. Tech books are expensive, so it just doesn't make sense to invest in a primer that, after you finish with it, is a paperweight.

      For raw learning, I still find paper easier on the eyes. Plus, its easier to put notes in the margins and read it while waiting for a doctor appt. or the like. E-books and web-pages are better for references, though.
                   

    7. Re:Head First seems too limited by thetoadwarrior · · Score: 2, Insightful

      Because the head first books ease you into the language and are literally for beginners. Imo, there is a difference between learning OO programming with no experience and moving from from OO language to another and people with no experience need more hand holding usually.

      One argument people have against the Head first series is how many pictures and other supposedly pointless material is in the books but it's all about repetition and makes it a bit more fun to read which is what most newbies will want rather than something that feels a bit more dry and is like reading a tech manual. So even if it doesn't have as much info, if it keeps you hooked, then it gives you a good start.

    8. Re:Head First seems too limited by dmiller1984 · · Score: 2, Insightful

      Granted, in this case I don't know the language C#, but in general I never really understood the Head First series, unless you really like printed introductions to languages. It would just make more sense to use free Internet resources to take your first steps in C#, and then get O'Reilly's e.g. C# 3.0 in a Nutshell as a good desk reference. Tech books are expensive, so it just doesn't make sense to invest in a primer that, after you finish with it, is a paperweight.

      You're reading it from the perspective of someone who already has a good knowledge of programming in general, though. While I haven't read the Head First C# book I do have their Ajax book, and while I do not find it to be a good general reference it is great for my high school students to read. They have far less experience programming than I do and they pick up on these easier from the Head First book than they do from most.

    9. Re:Head First seems too limited by Anonymous Coward · · Score: 1, Interesting

      The problem with using free examples on the web for C# is that it's a bit like PHP. It's used for web scripting, but usually by people with whom best practices are optional. (If they even know what those are.)

      Now, that's not to say that C# is incapable of being used for good rather than evil. I'm just saying that the majority of developers that post examples in C# use bad examples or hack code they threw together because they didn't know there was already a built-in function to do something. Heck, even MSDN has bad examples (and recently, disclaimers to match).

      Consider this a "caveat programmor".

    10. Re:Head First seems too limited by (H)elix1 · · Score: 1

      Granted, in this case I don't know the language C#, but in general I never really understood the Head First series

      A bit of history on the first one - Head First Java, first edition, was a Java certification guide. The second revision took more of an angle of a general training book, but in the context of a text prep book, it was quite good. Same deal with the EJB and JSP/Servlet book - each mapped to one of the Sun certifications. The Java 'certified' programmer test covered a lot of material without getting into the specialty areas like Enterprise Java Beans or JSP. With Java and C# as close as they are to each other - would not surprise me one bit if they followed the same 'learn this (conditional, flow, io, sockets) as they did for the 2nd+ edition Java book.

    11. Re:Head First seems too limited by CrazyTalk · · Score: 1

      I agree. And, i was always turned off by the clip art of the 22 year old hipsters on the covers of that series.

  5. Redundent -- read selectively. by nathan.fulton · · Score: 3, Interesting

    This book happens to be in our club's collection. Someone gave it to us, I think I found it redundant, and times. but then, most language-centered programming books are, to a certain extent. The first person in our group who read it went through and hi-lighted the page numbers with redundant material on them in blue, and hi-lighted the important pages in yellow. We were able to learn the language's syntax and nuances without reading through long-winded explanations about core concepts in OO or reviews of concepts just covered that way. Generally, I've always found the "language bible" books more helpful than these types of books. Does anyone share my sentiment?

    1. Re:Redundent -- read selectively. by kalirion · · Score: 4, Informative

      Did you read the intro? I have a couple Head First books (preps for Sun's EJB and Servlet exams) and I believe in the intro it states that the book uses repetition of important concepts to make them "sink in".

    2. Re:Redundent -- read selectively. by Shados · · Score: 5, Interesting

      I agree, but at the same time, you have to be careful. Different languages have different takes at things someone may think as "obvious". A while ago I went to an interview for a .NET dev job, and the people interviewing me were very obviously all former C++ programmers recycled in C#. One of the questions they asked me was: "How do you do multiple inheritance in C#".

      My answer was the obvious: "There isn't any, you can only inherit from one class". They started arguing with me about how it WAS possible, and actually common, to do multiple inheritance in C#. After a bit of discussion, I realised that they were still thinking in C++ term, where an interface is nothing more than a fully abstract class, so even if you only use "interfaces", you ARE doing multiple inheritance (while in C#, there are -core- differences between a fully abstract class and an interface). They had skipped that part of the book thinking they didn't need it :)

    3. Re:Redundent -- read selectively. by moranar · · Score: 3, Insightful

      They also state "If you are looking for a reference manual, this isn't for you". So criticizing the series for not being good reference manuals is a bit rich.

      That without even touching the fact that, as you mention, they explicitly say they'll be redundant to teach the subjects better.

      --
      "I think it would be a good idea!"
      Gandhi, about Internet Security
    4. Re:Redundent -- read selectively. by hansamurai · · Score: 4, Funny

      I've always found repetition to be a great way to learn and study. Repeating things over and over again often burns it into my mind. If Head First wants to use repetition then more power to them, as I've always found repetition to be a great way to learn and study.

    5. Re:Redundent -- read selectively. by Anonymous Coward · · Score: 0

      Parent should be modded +"a touch" funny for the repetition gag.

    6. Re:Redundent -- read selectively. by hitmark · · Score: 1

      stuff like this is whats keeping me for fully wrapping my head around programming...

      --
      comment first, facts later. http://chem.tufts.edu/AnswersInScience/RelativityofWrong.htm
    7. Re:Redundent -- read selectively. by Foofoobar · · Score: 1

      Repetition is also a great way to brain wash the masses like stating over and over 'Iraq has weapons of mass destruction' or 'support our troops!'. Sometimes if you repeat them long enough, they start to become a comedy routine...

      --
      This is my sig. There are many like it but this one is mine.
    8. Re:Redundent -- read selectively. by top_down · · Score: 1

      I'm not sure what you think they are missing. Seems to me they just have another definition of inheritance then you do.

      In C++ they were using (mostly) abstract classes to do interface inheritance. In C# they are using, depending on the situation, either abstract classes or interfaces to do interface inheritance en when they next programming language du jour comes along they'll no doubt adapt again.

      The fact that there are core differences between classes and interfaces in C# doesn't mean they can't be used to implement essentially the same thing (i.e. interface inheritance).

      --
      Anyone who generalizes about slashdotters is a typical slashdotter.
    9. Re:Redundent -- read selectively. by Anonymous Coward · · Score: 0

      The confusion happens because there is no first-class support for interfaces in C++. Here interface means pure virtual class.

      In cases like this it is best to qualify what type of inheritance you are talking about.

    10. Re:Redundent -- read selectively. by Shados · · Score: 1

      The problem was in the context. If they're asking if there is multiple inheritance in C#, it is because they understand that it is an area where there can be confusion in the concepts of the language. Basically, it is a semantic question. And semantically, while a class, in the OOP and/or UML models, can be both "inherited" and "realized", an interface can only ever be "realized", and cannot be "inherited". Thus, saying that you can have multiple inheritance in C# is wrong.

      Of course, in practice, as you did, you can just consider realization to be a public interface/behavior inheritance, but something like that holds no ground in a question about the semantic details of a language's implementation.

    11. Re:Redundent -- read selectively. by top_down · · Score: 1

      No the confusion arises because in C# the OO concept of interface inheritance can be implemented either with a class or with an interface and therefore people think they always must mean very different things even when they don't.

      --
      Anyone who generalizes about slashdotters is a typical slashdotter.
    12. Re:Redundent -- read selectively. by top_down · · Score: 1

      Interesting, these two lingo's. I have to say I prefer the C++ way since the difference between a realized interface and an inherited class can be purely cosmetic. The tools seem to have taken over the concepts here.

      --
      Anyone who generalizes about slashdotters is a typical slashdotter.
    13. Re:Redundent -- read selectively. by Anonymous Coward · · Score: 0

      They do have very different semantics and effects though. A C# interface is in fact much simpler and does not rely on any virtual indirection.

      To achieve the same benefits in C++ would require clever meta-programming using templates or some involved preprocessing, neither of which are very simple.

    14. Re:Redundent -- read selectively. by mcpkaaos · · Score: 1

      an interface can only ever be "realized", and cannot be "inherited"

      Inheritance is not limited to classes. For example, interfaces in C# may inherit other (multiple) interfaces. In this case, however, you are inheriting a contract (or multiple contracts), not an implementation.

      --
      It goes from God, to Jerry, to me.
    15. Re:Redundent -- read selectively. by Shados · · Score: 1

      Not quite. That "lingo" is the same that is part of the theoritical OOP model, and is also adopted in other more theoritical concepts such as UML representation (I guess that is still a tool, but yeah).

      The difference is there because there is a large difference, both theoritical and in practice, between a fully abstract class and an interface, and it is important to keep that difference at the conceptual level. The "C++ way" exists because C++ is not a full implementation of the OOP model (neither is C# of course, but it is closer).

      One very important time where that "theory affects reality to the point you really have to care" is when you start versionning your interfaces and classes. Long story short, you shouldn't, in general, expose an interface in a public API (well, the interface can be exposed, but I mean, a public method that will be used by a different consumer should not return an interface type, but only an implementation of it. So often, it is simply better to use fully abstract classes, since they are both interface an "implementation", so to speak, and will not suffer from the interface problem, especially if the abstract class realize/implement the interface, in which case you kill 2 birds with one stone).

      The tool didn't take over the concept, since the concept predates the tools by decades in some cases :) (think of it in a similar way you would think about relational algebra vs a database).

    16. Re:Redundent -- read selectively. by johanatan · · Score: 1

      Actually, I think they must have been referring to using containment and exposing inner functionality via wrappers as a way to simulate MI in C#. Pure abstract base classes and interfaces *are* the same thing. I actually wrote a Visual Studio Add-in to automate the process of exposing contained objs' methods (and it is the best of 3 known approaches to simulating MI in a lang like C# or Java).

    17. Re:Redundent -- read selectively. by johanatan · · Score: 1

      There is no difference between a pure abstract class and an interface at the conceptual level. At the implementation-level maybe so, but we're talking about two completely different languages--of course the implementations will differ. Please elaborate a little if you disagree.

  6. Great Series by Flyin+Fungi · · Score: 3, Interesting

    I always loved this series of books. My professor recommended this book to me and it has helped me understand the language much better then any other book. It's interesting, funny, and insightful! A very different take on presenting material then other programing books. As a college student I have a hard time reading through dull school text books. Sometimes I don't even have to open or own a text book in order to get through the class. Although you don't need to buy a book anymore to learn a language with the huge resources the internet has to offer.

    1. Re:Great Series by iacvlvs · · Score: 1

      It's interesting, funny, and insightful!

      You'd think an educational book would be aiming for "informative"...

      --
      GENERATION 25: If you haven't yet, copy this into your sig on any forum and add 1 to the generation. (Social experiment)
  7. Head First makes some great beginner books. by dealmaster00 · · Score: 1, Informative

    A few years ago, when I was relatively new to programming, I read Head First Java and that really helped me understand the Java language and OOP in Java. Even if you aren't a beginner, the Head First books are still pretty decent, but make sure you have patience because most of the explanations/examples are "dumbed down" for the beginner. Also the harder stuff tends to be at the end of the book, so you can hold out for that.

  8. Head First Series = Kick Ass by Anonymous Coward · · Score: 0

    I can vouch for this series, it totally rox. In fact, I don't know why more books don't focus on OOAD basics when teaching a language. If they did, then maybe I would know more "Senior Engineers" who have matured enough to stop focusing on code reuse and start focusing on design reuse.

    Inheritance is so easy to misuse, more people should know that!

    1. Re:Head First Series = Kick Ass by WorldInChaos · · Score: 2

      I have read the OOP book in this series and I learned lots from it. I had done PHP in a very non-OOP way, so seeing this book, visually, and having many examples that I could relate to really helped me learn fast. It was easy to understand and easy to read. It was repetitive, but that was helpful for me. It also showed different methods/scenarios for using the same principle, helpful if you don't understand why/how a certain thing works - as seeing it from different angles can help understanding. The HeadFirst series is easy to read, yet can teach "advanced" concepts with relative ease. It was a great help for me learning OOP, and I will most likely but this C# book. It is sad to hear about all the errata, but the idea/message will get through. I was bummed I wanted to comment, because I also wanted to mod the parent up, oh well...now you all can enjoy my 10 cents.

  9. I am reading this now by Anonymous Coward · · Score: 1, Interesting

    As an experienced programmer looking for a friendly intro to C#, I have enjoyed it, but I would have to concur that O'Reilly's C# in a Nutshell will be my day in day out reference. But, I am glad that O'Reilly is coming out with these user friendly references that make new concepts/languages more entertaining and fun. Head First Design Patterns is another one that some may fine easier to handle than the traditional Gang of Four book.

  10. easy way to fill a book by Bill+Dog · · Score: 4, Insightful

    Yet, for any programmer new to object orientation...

    How many can there be left these days?!? It's too easy to accumulate enough material for a good-sized book by starting from scratch and assuming the reader only knows how to read. Anyone could write a beginner's book on a computer language, without knowing the language too in depth, by just padding it with lots of remedial review material, that 99% of the readers don't need and don't want (to wade thru or pay for).

    --
    Attention zealots and haters: 00100 00100
    1. Re:easy way to fill a book by east+coast · · Score: 4, Insightful

      How many can there be left these days?!?

      I'm sure more roll off the old assembly line everyday. Just because you and your peers are seasoned vets...

      Also, this book came out at a real great time. With MS finally opening up to the hobbyist/novice programmer with their Express edition of their tools there is going to be a lot of n00bs out there.

      Sadly, it seems that too many here can't recall when they were still struggling with the concepts of OOP to see that there is a real audience for this level of writing.

      --
      Dedicated Cthulhu Cultist since 4523 BC.
    2. Re:easy way to fill a book by plasticsquirrel · · Score: 3, Informative

      Yet, for any programmer new to object orientation...

      How many can there be left these days?!? It's too easy to accumulate enough material for a good-sized book by starting from scratch and assuming the reader only knows how to read. Anyone could write a beginner's book on a computer language, without knowing the language too in depth, by just padding it with lots of remedial review material, that 99% of the readers don't need and don't want (to wade thru or pay for).

      From what I have seen, there are many programmers who do not use OO languages. But what is disturbing is the number of programmers who do use OOP to some extent, but don't use it without even understanding its basic concepts.

      Dijkstra used to say that BASIC mutilated programmers' minds. But today, I think that C++ and VB have taken that role.

      --
      Systemd: the PulseAudio of init systems
    3. Re:easy way to fill a book by alan_dershowitz · · Score: 2, Interesting

      I work with people who don't even proceduralize their code. I've got a report with a 500-line SQL statement in it.

    4. Re:easy way to fill a book by CastrTroy · · Score: 1

      Wouldn't the n00bs already be familiar with object oriented techniques since every language they have ever used had OO as a major feature. I would much more expect that seasoned veterans would be more likely to not be familiar with OO concepts, especially if they are experienced in Assembly, C, or PHP (yes I know PHP supports OO, but it's not really necessary to understand). Either way, I would rather have people learn object oriented concepts from a book about OO design, then to learn about it in the context of learning about a specific language.

      --

      Anthropic principle: We see the universe the way it is because if it were different we would not be here to see it.
    5. Re:easy way to fill a book by Colin+Smith · · Score: 2, Insightful

      Yet, for any programmer new to object orientation...

      How many can there be left these days?

      Almost all of them...

       

      --
      Deleted
    6. Re:easy way to fill a book by east+coast · · Score: 2

      Wouldn't the n00bs already be familiar with object oriented techniques since every language they have ever used had OO as a major feature.

      What do you mean by "every language they have ever used"? These are n00bs. You know, they guys who want to give something beyond VBA in Access a go? I mean real n00bs, not people who started coding in 1993. It's a bit late in the day to automatically put guys who started by learning Java in the n00b category anymore.

      Either way, I would rather have people learn object oriented concepts from a book about OO design, then to learn about it in the context of learning about a specific language.

      I won't disagree but I won't agree either. Especially for the hobbyist. I can see where different people are going to have luck with different learning techniques and it really doesn't bother me since little of this code will ever get out to the public-at-large and much less (if any) of it will be used in real productive environments.

      There's certainly nothing wrong with learning and writing a little code instead of playing WoW or going on the nightly pr0n hunt.

      --
      Dedicated Cthulhu Cultist since 4523 BC.
    7. Re:easy way to fill a book by east+coast · · Score: 2, Interesting

      Dijkstra used to say that BASIC mutilated programmers' minds. But today, I think that C++ and VB have taken that role.

      I would agree with this but only with a bit of qualification. I think that old BASIC programmers still teaching novice programmers OOPLs have done a great deal of damage by bringing their old design concepts into a very different arena of coding. Once you have more and more of the 20+ year OOP coders out there teaching the masses and give those students time to mature will we know if things are getting better. There's an unavoidable and unfortunate gap between when the basis of coding are set in the novice coders mind and the time when we really get to see how well it has manifested itself in the practice of a matured programmer.

      --
      Dedicated Cthulhu Cultist since 4523 BC.
    8. Re:easy way to fill a book by chromatic · · Score: 1

      Wouldn't the n00bs already be familiar with object oriented techniques since every language they have ever used had OO as a major feature.

      Which OO languages have people who have never programmed before used?

    9. Re:easy way to fill a book by Mongoose+Disciple · · Score: 2, Insightful

      Wouldn't the n00bs already be familiar with object oriented techniques since every language they have ever used had OO as a major feature.

      Well, not necessarily. As a consultant who's done a fair bit of maintenance coding on projects that I didn't do any of the original development or design for, I can tell you that a surprising number of people use a perfectly good object oriented language to write programs that have only one object or method. (Or similarly technically use an OO language to write code that would hurt even people who wouldn't consider themselves to be OO purists.)

    10. Re:easy way to fill a book by expatriot · · Score: 1

      I do some VBA programming, for automating something in Word or Visio, and while the language has many faults, even there you are exposed to objects. In Visio for example, there are properties and methods. No comparison to C++ of course but even so there is exposure to objects even in VBA.

    11. Re:easy way to fill a book by GuldKalle · · Score: 1

      Actually, where do you go after reading a beginners book? There seem to be a lot of them out there, and I've just gotten through one on C++, but I can't do much more than write a cli program.
      Does anyone have a good book for learning (windows) gui programming in c++?

      --
      What?
    12. Re:easy way to fill a book by poopdeville · · Score: 1

      VBA

      --
      After all, I am strangely colored.
    13. Re:easy way to fill a book by Anonymous Coward · · Score: 0

      I'm almost one of those programmers you talk about. I maintain various patch systems and databases at my work, so spend most of my time writing small programs to perform various tasks which don't really need OOP techniques (using python, delphi, MSM) .

      I also manage our back end management programs which are written using OOP, but never having been formally trained, most people would have a good laugh at how I've written them. (though they do work fine!).

      Over the last couple of years I've started to train myself in formal techniques and I have been quite surprised at how much of the basics are mostly common sense.

      Anyway, to get back on topic I've just started to read this book and though I can flick through a lot of it, it has helped me hone my skills. Plus I'm now writing a mean space invaders clone :)

    14. Re:easy way to fill a book by east+coast · · Score: 1

      Absolutely. I certainly mean no offense by mentioning VBA but it is a distance from programming from the ground up. I think knowing even just a bit of VBA is better than going into coding blindly.

      --
      Dedicated Cthulhu Cultist since 4523 BC.
    15. Re:easy way to fill a book by bill_kress · · Score: 3, Informative

      Please don't start with C++. It is terribly hard to actually get any good understanding of OO concepts in C++. I'd recommend Java, C# if you must.

      I'm not saying to make your career in that language or anything, but to figure out OO--get a language that gets out of your way and lets you see what you are doing. It should have almost no "Syntax" to worry about in itself.

      C++ is the opposite. And I've yet to see actual OO C++ code.

      Also, GUI programming in C++ (even if you ignore OO) is horrific. It's error prone and completely unnecessary. If you are really really stuck on being as close to the Windows GUI as possible, use C#, otherwise maybe Java.

      Sorry, but C++ was the last language created with a legacy where creating the compiler was so hard that you had to adapt the language towards compiler creation/optimization. Many of the features in C++ are simply there so that compilers are easy to write (or are there for legacy to be compatible with compilers made for that reason). A modern compiler/runtime is able to do all the stuff C++ could, and more--and in many cases faster.

      On the other hand, if you really want to understand computers and how a programming language works--if you want at the nuts and bolts--go to C, forgo C++ altogether.

    16. Re:easy way to fill a book by DrgnDancer · · Score: 1

      For C++ GUI programming you have to learn the libraries that your OS uses. You have essentially two choices: If you want to learn to do "graphics" grab a book on DirectX or OpenGL. If you just want to learn how to stick a basic GUI onto your CLI programs (text boxes, simple 2-d images, etc) get a book on Visual Studios (Win), X-Code (Mac), or one of the Linux IDEs to learn how to use their various interface builders. You can do a surprising amount in what basically works out to a "WYSWYG" interface design tool. You ain't gonna design Quake 4 in something like this, but you can make clickly widgets and text boxes and all the sorts of things you're likely to need for say, a database front end, or a calculator app. I learned to do a graphics front end for a basic data-entry, compute, display data type program in a day or two.

      --
      I don't need a million points of light, just two points of multi-mode fiber and a 10 Gig-E router.
    17. Re:easy way to fill a book by GuldKalle · · Score: 1

      Thanks for your suggestion. However, the reason for my choice is that I need C++ later (study-related). Plus, I actually like C++ compared to Java (the parts of them I've seen, anyway).
      For now, I'll continue (if I can) to work in C++, but I'll take your recommendation under consideration.

      --
      What?
    18. Re:easy way to fill a book by baash05 · · Score: 1

      amen!. I'm a c++ asked to learn c# for an up coming project. Sometimes having a paper book is easier then reading a pdf, so I searched for a book. There doesn't seem to be anything out there for people making that leap. I picked up a deital and deital, monster of a book. Figured if I had to get the whole picture it might as well be the complete thing. At least they didn't let me down on their coverage of c++

    19. Re:easy way to fill a book by Bill+Dog · · Score: 1

      Learning C++ with just cout and cin is the best way to start -- it allows one to focus purely on understanding the language and its standard library. And if you continue with C++, you'll create numerous quickie CLI programs to try out language features (or your understanding of them!) in isolation that you're contemplating using in a project.

      For GUI's in C++, you should probably look at Qt. This book, for example looks up-to-date and it and its previous edition is pretty well-reviewed on Amazon. I don't favor Qt (uses a bunch of macros for things to get around poor advanced language support in early compilers), but it's Windows and UNIX, and MS' GUI focus these days is on C#/.NET, so I can't in good conscience recommend the ancient API's that I know and learned long ago (Win32 and MFC).

      --
      Attention zealots and haters: 00100 00100
    20. Re:easy way to fill a book by Bill+Dog · · Score: 1

      There's an "Accelerated C# 2008" book.

      Speaking of book padding, the Deitel boys crank out edition after edition and monstrous-sized (and priced) tomes of "<language> How To Program". I already know "how to program". What a great racket they have, repeating all those hundreds of pages of programming and OO basics in each book and edition, and probably mostly the same examples, just ports between the three similar languages (C++, Java, and C#). They are the masters at filling books.

      --
      Attention zealots and haters: 00100 00100
    21. Re:easy way to fill a book by Anonymous Coward · · Score: 0

      Give me Top-Down Structured Programming or give me death!

    22. Re:easy way to fill a book by Anonymous Coward · · Score: 0

      Creating a C++ compiler has to be one of the most daunting tasks in this industry. It was definitively not designed "to make compilers easy to write". Template instantiation rules are really hard to implement properly. "A modern compiler/runtime is able to do all the stuff C++ could, and more--and in many cases faster"... you really believe that? C++, as nasty as it is, provides plenty of space to work-around compiler deficiencies (that part comes from C mostly). C++ also provides some tools that are really nice to use in certain cases. Operator overloading can help you create some really compact and readable code with algebraic types not directly supported by the compiler, generating efficient code.

      I agree with the point of C++ not being the best to understand object orientation. If you want some good language for that... look for a dynamic binding language. I'd say Smalltalk is still the one to look at from a "conceptual" point of view. Certainly NOT Java, nor C#.

    23. Re:easy way to fill a book by DrgnDancer · · Score: 1

      The Deitels write textbooks, not language manuals (not that you arene't right about the cranking out book with big copy paste jobs, but that's not the point). They aren't writing books for people who already know how to program, but need to learn $language, they're writing books for an intro CS course teaching basic programming. For what they're intended to do, they're not bad. My last uni used their C++ as a primer and most people seemed to like it. As a grad student I didn't take any intro courses but I bought a copy for reference and it seemed decent enough.

      --
      I don't need a million points of light, just two points of multi-mode fiber and a 10 Gig-E router.
    24. Re:easy way to fill a book by johanatan · · Score: 1

      Very true, and I've found this to be true in my experience. It's the experienced C veterans who always say "but we can do the same thing in C". They just don't get it. Of course you can do the same thing in C, if you really want to manage v-tables manually and so on. But, you could also do the same things in assembly. The point is that it is more time-efficient to leverage language features instead of re-implement them.

    25. Re:easy way to fill a book by johanatan · · Score: 1

      OOP is not the magic bullet. Personally, I think functional programming makes even tighter code. Using them together is ideal.

    26. Re:easy way to fill a book by bill_kress · · Score: 1

      C was created to make compiler writing easy. Items like Pointers are completely unnecessary if your compiler optimizes correctly, but if you can't write a good optimizing compiler, then pointers give you pretty good performance.

      Header files are there because C compilers couldn't be bothered to scan multiple files to resolve a single file. At the time, it was the only thing that made sense. You might not have the entire codebase on your system, and back when I wrote in C it would have been miserable to scan multiple source files to compile a single C file, but headers allowed you to play a lot of tricks that would let you compile under any conditions.

      Memory management is hard. A solution like Malloc is easy, but extremely poor. Malloc can fragment your memory and, without help, cannot recombine the fragments.

      C++ kept a lot of these traits from C for no reason. The primary difference between C++ and C#/Java could be viewed as: C#/Java threw out the garbage and started over with the concept of "Let the compiler do the work".

      >"...and in many cases faster"... you really believe that?

      Yes. C++ cannot do runtime performance enhancements--if a given method can be determined to be a function (always returns the same value for the same input), C++ cannot store that value and short-circuit the entire routine on subsequent calls.

      C++ memory management is inefficient when applied to OO problems. To develop good OO, every time you create an object it needs its own memory allocated (not put on the stack). This leads to millions of tiny calls to malloc, and the same number of calls to free. Read up on Java's allocation, particularly the concept of "Eden"--virtually impossible to fragment and most calls to "free" don't happen (Eden constantly bulk-frees small, short-lived memory allocations at virtually no cost).

      > Operator overloading can help you create some really compact and readable code with algebraic types not directly supported by the compiler, generating efficient code.

      Compact code is not at all relevant (do you name your variables and methods as short as physically possible? f(a)? That's compact!). DRY code is. Readability and predictability are very important, to know exactly what happens when you see A+B when you see it is also important, but saving a few keystrokes? Not at all.

      Readability of the operator overloading is HIGHLY dependent on the situation, in most conditions it makes code less readable. is list+="hello" equivalent to list.add("hello") or list.append("hello")? Or did the author of "list" actually mean something completely different by overloading +? Perhaps it means "Send value to port". The desire of authors to make a "Cool looking" api can be terribly dangerous if you give them a lot of cute tricks--most developers have a REALLY HARD time looking at their API from the other side.

      Also, operator overloading is not for "generating efficient code"--in fact, it doesn't do a thing except hide the syntax of a method call--and does so in a pretty frightening way. For instance, A + B can be a completely different operation from B + A. This is not obvious from looking at the code that says "a + b".

      Finally, I really feel that the most critical part could be that as long as you have to deal with memory allocation/freeing, it's virtually impossible to learn to think in OO. One of the critical concepts in OO is that each object is independant--no object would define the lifecycle of another--that would be horrid. And yet in C++ without implementing reference counting or some other uglyness, it's absolutely required.

      After having used everything from C to C++ to Java and a few dozen others over the past 20 years, I'm pretty happy with the syntax of Java, it gets out of your way and is pretty minimal--less tricks to trip you up, the GC is efficient and for most applications it's 1/2 the speed of C++, if C++ was coded "OO", allocating, passsing around and freeing millions of objects in a few seconds, Java would probably b

  11. If you don't know OOP by now... by Anonymous Coward · · Score: 0

    ...then chances are that was a deliberate decision. Good choice. OOP is the straitjacket that restrains new programmers from doing anything right.

    Before you mark me troll, keep in mind that Linus Torvalds agrees with me. See here: http://thread.gmane.org/gmane.comp.version-control.git/57643/focus=57918

    1. Re:If you don't know OOP by now... by EastCoastSurfer · · Score: 4, Insightful

      In that post Linus seems to rail more against C++ and not OOP in general. Good design is good design regardless of a language. You can do OO like design in C or even ASM if you follow some rules.

      OO is not a panacea, and just because some is OO doesn't make it a better design than non-OO. Each problem is unique.

    2. Re:If you don't know OOP by now... by Anonymous Coward · · Score: 0

      Appeal to "authority".

      Linus Torvalds is a talentless hack. Just because he created something that's popular, that doesn't mean he actually knows what the hell he's doing.

    3. Re:If you don't know OOP by now... by alan_dershowitz · · Score: 1

      Torvalds was trashing C++ not OOP (though he has trashed OOP before too.) I'm an OOP programmer and I agree with everything he says. C++ is a shit language, but that's not an indictment of OO. C++'s OO is horrible.

    4. Re:If you don't know OOP by now... by Anonymous Coward · · Score: 0

      I believe that you agree with linus and not the other way around.

    5. Re:If you don't know OOP by now... by Anonymous Coward · · Score: 0

      Believe what you want. I taught him everything he knows.

      --Andy Tanenbaum

  12. Review by Anonymous Coward · · Score: 0

    Why are books reviewed here like a year later than they where published?

    1. Re:Review by east+coast · · Score: 1

      Slow readers? It's just a guess.

      --
      Dedicated Cthulhu Cultist since 4523 BC.
    2. Re:Review by Westley · · Score: 1

      Well, for a start that's clearly not true in this case - HFC# came out in November 2007. 8 months isn't a year.

      However, if you want a review of a more recent book, Jim Holmes has submitted one for my own C# book (C# in Depth) which came out just a few months ago. It's in Firehose right now. Whether it makes it to the front page is a different matter, of course.

    3. Re:Review by lena_10326 · · Score: 1

      Slow readers? It's just a guess.

      That's how long it took to get through the fluff remedial chapters. ;)



      Re: reviewer

      The authors make a real point of reviewing material explained earlier, which generally is an effective approach for this type of book. But the repetition sometimes becomes excessive â" enough to annoy even the greenest novice

      --
      Camping on quad since 1996.
  13. Doesn't take much intelligence to program in C++ by Anonymous Coward · · Score: 0

    And only negligibly less to program in C#. One wonders why the author believes learning C# would be so difficult for C++ programmers--unless he refers to the additional, unnecessary cognitive load that Micro$oft adds to whatever they excrete.

  14. Challenging? by PPH · · Score: 4, Insightful

    Why must a well designed language be challenging?

    I came at Java with some C plus some experience with a (proprietary) object oriented AI system. Java was trivially easy to pick up.

    --
    Have gnu, will travel.
    1. Re:Challenging? by RightSaidFred99 · · Score: 1

      That begs the question. C# isn't really challenging to pick up. It's on par with Java, though since it's inherently a more modern and full featured language (fact, not opinion) it is somewhat more complex to learn. If it takes you a week to pick up Java, it might take you 1.5 weeks to pick up C#. You'll more than make up that week due to the crazy sweet .NET runtime libraries. Not that Java is any slouch, either - I'm constantly surprised how quickly the Java people are able to move the Java environment along.

    2. Re:Challenging? by Jugalator · · Score: 1

      Why must a well designed language be challenging?

      I don't think it is, I think it's far easier to learn than C++ thanks to all the backwards compatibility cruft being out of the way. I'm not sure that's what the author meant either, but that it can be challenging if you don't understand OOP basics. Like C can be challenging to learn if you don't have a good grasp of function oriented programming.

      --
      Beware: In C++, your friends can see your privates!
    3. Re:Challenging? by NJRoadfan · · Score: 1

      Whats strange is that I found Objective-C harder to pick up then C#. The first OOL I learned was C++, then Java. C# really isn't all that different from Java, thats the way Microsoft designed it. Objective-C threw me off since it doesn't use the typical C++/Java/C# style class structure.

    4. Re:Challenging? by Anonymous Coward · · Score: 1, Insightful

      Why must a well designed language be challenging?

      Because the primary design goal behind C# is to lock you into Microsoft's proprietary .NET platform. Things like APIs, support, etc. are secondary with C#, which leads to problems that manifest as technical challenges, among other things. I'm not kidding, nor am I being sarcastic or flip about it.

    5. Re:Challenging? by Westley · · Score: 2, Insightful

      C# 1 was quite a simple language. C# 2 added significant complexity (and power, don't get me wrong) and C# 3 has done the same again.

      I wouldn't be without the benefits of C# 3, but it does take it away from the "pick it up easily in a week or so" category in my view.

    6. Re:Challenging? by caywen · · Score: 1

      You need to specify to whom the language is challenging in the question. Maybe you meant "Why must a well designed language be challenging to experienced developers" ? or "Why must a well designed language be challenging to new programmers" ? See? Very different questions.

    7. Re:Challenging? by bigstrat2003 · · Score: 1

      I don't think anyone would willingly code in C# without Visual Studio... another lock-in.

      Sure, in the same sense that no one would willingly code in Java without (insert IDE of choice here). IDEs are really useful tools, and Visual Studio happens to be a really nice IDE. I could code in C# using Notepad, and wouldn't really have a problem with it if that's all that was available. Not like the libraries are horribly difficult to use or something. Since I have Visual Studio available, I choose to use that.

      --
      "16MB (fuck off, MiB fascists)" - The Mighty Buzzard
    8. Re:Challenging? by LDoggg_ · · Score: 1

      You missed his point.

      I can name 3 good IDEs off the top of my head for java. Eclipse, NetBeans, and IntellJ. Two of which are open source.

      With C# you get Visual Studio and the vendor lock in that goes with that.

      I could code in C# using Notepad, and wouldn't really have a problem with it if that's all that was available.

      Ugh. If you're gonna be on windows and have to use just a text editor and command line tools for coding, at least use something like notepad++ for syntax hilighting on your csharp files. There's even a portable version if you don't have admin rights to do an install.

      --

      "If they have both, tell them we use Linux. And if they have that, tell them the computers are down." -Dave Chapelle
    9. Re:Challenging? by bigstrat2003 · · Score: 1

      I can name 3 good IDEs off the top of my head for java. Eclipse, NetBeans, and IntellJ. Two of which are open source.

      What's stopping others from developing good C# IDEs, though?

      Ugh. If you're gonna be on windows and have to use just a text editor and command line tools for coding, at least use something like notepad++ for syntax hilighting on your csharp files. There's even a portable version if you don't have admin rights to do an install.

      Obviously there are far better tools than Notepad out there, even if you insist on coding with a text editor + command-line tools. I'm just saying that, if I was required to for some stupid reason, I could live with coding C# in Notepad.

      --
      "16MB (fuck off, MiB fascists)" - The Mighty Buzzard
    10. Re:Challenging? by LDoggg_ · · Score: 1

      What's stopping others from developing good C# IDEs, though?

      I imagine it's just the lack of desire to compete with Microsoft.
      Technically and probably legally there isn't anything stopping some company from writing another IDE. Developers not toolmakers are the ones that get locked in by choosing C# at this point.

      If you go with Java or Python or Rails or PHP or C++ you have a broad choice of vendors for operating systems, platform implementations, and IDEs.

      --

      "If they have both, tell them we use Linux. And if they have that, tell them the computers are down." -Dave Chapelle
    11. Re:Challenging? by naoursla · · Score: 1

      C# was trivia to pick up with a C/C++/Java/Lisp background.

    12. Re:Challenging? by clgoh · · Score: 1

      There is also SharpDevelop. It's free and open-source.

      http://icsharpcode.net/OpenSource/SD/

    13. Re:Challenging? by Anonymous Coward · · Score: 0

      You only have to type "c# ide" and press the "I'm Feel Lucky" button in google to prove your point wrong.

    14. Re:Challenging? by LDoggg_ · · Score: 1

      Why? Sharpdevelop is still locking you into windows for an operating system.

      I don't know that I'd call Monodevelop a good IDE. It's a fork of an early version of Sharpdevelop, not a port.

      By contrast, everything that I can do in Eclipse I for Windows I can do in Eclipse for Linux. The different ports have the same features and are released on the same day.

      --

      "If they have both, tell them we use Linux. And if they have that, tell them the computers are down." -Dave Chapelle
    15. Re:Challenging? by Eric+Pierce · · Score: 1

      > I came at Java with some C plus ...

      C+?

    16. Re:Challenging? by Anonymous Coward · · Score: 0

      Hey, that's still a passing grade. Quit busting his nuts.

      Some of us did take our heads out of our books long enough to spend time getting laid in college, you know.

    17. Re:Challenging? by Octorian · · Score: 1

      ...and only runs on Windows... So why bother when you have VS.Net for a reasonable price, and VS.Net Express for free?

      On Linux, we have MonoDevelop, which was an early fork of SharpDevelop, and IMHO, a complete joke of an attempt at an IDE.

      At least with Java you have several first-class IDEs to choose from.

      This one of the reasons why, when asked, I'll say the following:
      C# is a better language than Java
      Java is a far more versatile platform than .NET

      (and yes, I regularly use both.)

    18. Re:Challenging? by kantos · · Score: 1

      I agree whole heartily I program exclusively in C# for my job, and my one complaint, which I also hold with Java; is that both, while very powerful, have poorly documented, or well documented and poorly searchable standard libraries. C# is all over the board because MSDN is alternatively the most useful thing ever and the worlds 2nd worst documentation (The worst is none); Java on the other hand is just one big pile of Mediocre documentation, not great not but not as cursingly annoying as the random undocumented articles in MSDN can be.

      --
      Any and all content posted above may be ignored, considered irrelevant, or otherwise dismissed.
    19. Re:Challenging? by HeroreV · · Score: 1

      C# is gaining features much faster than Java, and there are no signs of slowing down. If Microsoft keeps piling on more stuff this way, C# is quickly going to become greatly overburdened. Everybody will be struggling to read each others' code because everybody will be using different subsets of the enormous C# super language.

      Unless C# eventually breaks backwards compatibility, which seems very unlikely, I don't think it's going to last for too long. It'll just become too big to be practical.

    20. Re:Challenging? by Westley · · Score: 1

      C# is gaining features much faster than Java, and there are no signs of slowing down.

      Agreed on the first part, but not the second. The C# team have acknowledged that they certainly can't keep adding features at the rate of the last few years. C# 3->4 is likely to be a much smaller change than 1->2 or 2->3.

      Of course, aside from language there's the matter of libraries/technologies - MS has released vast amounts of technology in the past few years, and it's really too much to keep up with completely. I think we'll see more and more specialization. That's not necessarily a bad thing, and some of the technologies themselves are great - but it is a concern.

    21. Re:Challenging? by DrgnDancer · · Score: 1

      I'm learning Obj-C right now. The class syntax is certainly different, but I kind of like it. Makes a lot of sense in its own way.

      --
      I don't need a million points of light, just two points of multi-mode fiber and a 10 Gig-E router.
  15. I like this series as a whole by SirLurksAlot · · Score: 1

    but this particular book doesn't do anyone any favors unless they are an absolute beginner. I picked it up when I started my current position (.NET shop, lots of C# and *shudder* classic ASP using VBScript) mainly because their books on Design Patterns and Servlets and JSPs were decent. I quickly discovered that if you know just about any other C-style variant that C# is a snap to pick up. This book does a great job of hand-holding and providing lots of examples of classic OO concepts, but I would never use it as a desk reference. Their style works very well for subjects which take some thought to wrap your head around (such as design patterns), but there is entirely too much noise to signal for learning a language for my taste. Personally I'd rather have quick access to the language reference and the pertinent APIs, but I suppose if someone was just getting started this book might be appropriate.

    --
    God, schmod. I want my monkey man!
    1. Re:I like this series as a whole by Tablizer · · Score: 1

      This book does a great job of hand-holding and providing lots of examples of classic OO concepts

      At least one of their Head-First books spouts misleading info related to OOP. It is a coffee-shop example and tries to build a hierarchical class tree of the different coffee "types". There are at least 2 problems with this.

      The first is that customers generally prefer a mix-and-match choice rather than be forced to group by hierarchies. Trees are not very flexible in a buffet-like environment or under constant change. (Sub-typing in general is a poor business modeling technique in my experience. It may work fairly well for display objects such as GUI widgets, but doesn't for biz. Set-based thinking is better for biz IMO, but OO doesn't support sets very well unless you reinvent a relational-like engine.)

      Second, a good commerce system would allow user-defined categories (at "admin" level) rather than hard-wire them into code classes so that only a programmer can add and change products. Hard-wiring may be good job security for the programmer, but its poor industry practice. I didn't see any such disclaimer.
           

  16. How come nobody uses anonymous delegates? by Saint+Stephen · · Score: 2, Informative

    Anonymous delegates came out in C# 2.0 (I think), and now we have lambda expressions. Umpteen ways to do delegates, and hardly anybody I know uses them and gets confused as heck when they see code I write that uses them. It's because F10 through the debugger "looks wierd" when you use them and people aren't used to seeing functions inside functions :-)

    There's lots of stuff in C# that people never use.

    1. Re:How come nobody uses anonymous delegates? by eddy · · Score: 1
      >people aren't used to seeing functions inside functions :-)

      I guess Pascal is truly dead then.

      --
      Belief is the currency of delusion.
    2. Re:How come nobody uses anonymous delegates? by aztracker1 · · Score: 1

      For me, the hardest things about getting used to the anonymous delegates/lamdas was a matter of syntax.. I use anonymous functions in Javascript, and have for years... the C# syntax, especially in the case of lambdas just seemed a bit odd to me.

      I think that what really sells C# is Visual Studio... I mean with each incarnation of .Net and VS, I get spoiled relatively quickly with new functionality. I never did like 2003, and often used batch scripts, and a plain text editor, as ASP.Net websites in VS 2003 irritated me.. 2005 was a lot better, 2008 better still, and with ASP.Net MVC on the horizon I'm sold. I tend to keep a pretty open mind, and do look to other languages, and platforms, what keeps me coming back though is MSs development environment.

      That's just me though... I always found Java more cumbersome and most other languages limited by their respective IDEs of choice. Knowing how to do it in a plain text editor is fine for learning, or getting started, but I am much more productive in an IDE.

      --
      Michael J. Ryan - tracker1.info
    3. Re:How come nobody uses anonymous delegates? by benhattman · · Score: 1

      Really? I feel exactly the opposite. Pick up the latest version of NetBeans. It provides better code refactoring, better wizards, and a much larger selection of plugins than anything .NET. If anything, the .NET IDE is generally trailing NetBeans or Eclipse by over 2 years for each given feature.

      The one thing about .NET though, is it is generally more stable than the free IDEs.

    4. Re:How come nobody uses anonymous delegates? by aztracker1 · · Score: 1

      It just seems to take a lot of time just getting a project started in Eclipse (haven't looked at NetBeans)... trying to configure a struts project in eclipse to do debugging with tomcat is insane... VS, you point at a directory, and hit F5... To me, it seems like the edge cases are covered better in eclipse, but the majority of the time, VS does what I need without jumping through hoops...

      --
      Michael J. Ryan - tracker1.info
    5. Re:How come nobody uses anonymous delegates? by Anonymous Coward · · Score: 0

      For application development I'd say I use 90% of C# (not 2.0) features because they are no-brainers.. specifically introduced to ease app development.

      For systems development, you'll probably end up trying to bypass many of the C# features anyway. Writing so-called 'unsafe' code in C# is likewise difficult to do.

    6. Re:How come nobody uses anonymous delegates? by Shados · · Score: 1

      Good .NET developers will use delegates (not just anonymous ones) all over the place, as it is a core part of the framework, and is one of the best way to implement a large amount of the base design patterns (like Strategy and Observer) in .NET.

      The thing is, there's a grand total of 7 good .NET developers in the world. If that.

    7. Re:How come nobody uses anonymous delegates? by kumanopuusan · · Score: 1

      Nobody around here uses them either, but for me it's the least painful way of using the language. If I use generic containers and map (List.ConvertAll) or fold (I had to write a short implementation myself, not that it's difficult. Is there a standard version?), at least I don't have to write any loops.
      Still, the syntax doesn't feel natural to me (whining, I know) and trying to write purely functional code would be more trouble than it's worth. I thought about implementing a functional IO system for about a second before I went back to what I'm being paid to work on. :-(

      --
      Use of the words "good", "bad" or "evil" is almost invariably the result of oversimplification.
    8. Re:How come nobody uses anonymous delegates? by johanatan · · Score: 1

      I totally agree with you there. But, you can still get into quite spaghetti looking code with them. The back-end jumps to the front-end and back and forth and so on. The whole IsInvokeRequired/BeginInvoke fiasco contributes to that a little too (that should've been taken care of automatically by the framework).

    9. Re:How come nobody uses anonymous delegates? by johanatan · · Score: 1

      It sounds like you are working with a group of flat verbose types. I used to do C# with some folk like that. They had such rules as 'no reflection' and 'no anonymous delegates', but I managed to come in at a time when the rules were relaxed a bit. I took more advantage of it than they had anticipated I'm afraid. (But, the reflection by itself reduced 600 lines to about 50).

  17. Yeah, head first. by Anonymous Coward · · Score: 5, Funny

    Getting head first is the only way I'll program in C#!

  18. C++ != OOP???? by Anonymous Coward · · Score: 2, Insightful

    "For computer programmers who do not have a solid understanding of object-oriented programming (OOP), learning the C# programming language can be rather challenging, even if they have experience with C or C++..."

    If you are an experienced C++ developer who doesn't know enough about OOP to get by in C#, then I'd say you need more help than any mere book is going to provide.

  19. C++ without solid understanding of OOP? by fph+il+quozientatore · · Score: 5, Insightful

    For computer programmers who do not have a solid understanding of object-oriented programming (OOP), learning the C# programming language can be rather challenging, even if they have experience with C or C++

    Well if you have "experience with C++" but no "solid understanding of OOP", there might already be a problem with your programming skills.

    --
    My first program:

    Hell Segmentation fault

    1. Re:C++ without solid understanding of OOP? by sinserve · · Score: 1

      "Blub is good enough for him, because he thinks in Blub" -- Paul Graham.

      "Actually I made up the term "object-oriented", and I can tell you I did not have C++ in mind." -- Alan Kay.

    2. Re:C++ without solid understanding of OOP? by jadrian · · Score: 1

      What's the problem? C++ is far from being a pure object oriented language. If someone who knows C makes migrates to C++ to use some nice features he doesn't have in the first it should be perfectly fine.

    3. Re:C++ without solid understanding of OOP? by kbielefe · · Score: 1

      I disagree. C++ is perfectly capable of being used in a non-object-oriented manner, as are Java and C#. In fact, many people think they are doing OOP just because they use C++, and many people think a project can't be object-oriented if it is written in C. They are both often wrong.

      I think I may be the only programmer in the world who first learned OOP from the perl camel book. The way Larry Wall explained it just clicked with me in a way nothing else had. He basically said here are all these concepts you've already been using and find handy, but if you add this little bless function there are some extremely useful things you can do.

      Before that, I considered OOP to be unnecessary complexity of purely academic interest, and always skipped over those chapters. Interestingly enough, it didn't hinder me much, as I fit right in with the majority of programmers today who understand OOP in theory but not in practice.

      --
      This space intentionally left blank.
    4. Re:C++ without solid understanding of OOP? by Anonymous Coward · · Score: 0

      In fact C++ gets a lot more attractive if you look at its meta programming parts. The OOP stuff is quite disgusting if you compare it to languages that were actually designed for OOP.

    5. Re:C++ without solid understanding of OOP? by Anonymous Coward · · Score: 0

      Well if you have "experience with C++" but no "solid understanding of OOP", there might already be a problem with your programming skills.

      Ha! That's 50% of the C++ engineers I know. 'Still using inheritance all over the place like they're in the retarded-developer-stone-age. I'm thankful for any book that focuses a little more on *actual* OOAD.

    6. Re:C++ without solid understanding of OOP? by andi75 · · Score: 1

      Learning OOP from the Camel book? You're not the only one. However, I still recommend you pick up either Bruce Eckel's Thinking in C++ or his Thinking in Java, and the C++ FAQs.

    7. Re:C++ without solid understanding of OOP? by GWBasic · · Score: 1

      Well if you have "experience with C++" but no "solid understanding of OOP", there might already be a problem with your programming skills.

      There are a lot of people who need to write quick-and-dirty programs, but aren't expert programmers. In many cases, they use C++ because it was the language used in their "Intoduction to Programming" college course.

  20. Re:Doesn't take much intelligence to program in C+ by Anonymous Coward · · Score: 1, Insightful

    It's because C++ breaks programmers minds so badly in such a way that they feel like they have to overcomplicate everything using stupid template tricks and stupid pointer tricks.

    C++ programmers who move to C# often fail to comprehend how overcomplicated they tend to make things.

  21. Another recipe book by Animats · · Score: 3, Interesting

    These 700+ page books on programming languages have too much bloat. Usually because they're full of recipes, plus a rehash of introductory programming material.

    A really well written 50 page book on C# would be more useful. Especially if it came with a little summary card with the syntax. Code examples should be on an associated web site.

    Of course, it's a Microsoft product, so it has "strategic complexity", not minimalism.

    1. Re:Another recipe book by Lord+of+Hyphens · · Score: 1

      You're thinking of the Pocket Guides--a useful little O'Reilly series that work well as an in-hand reference.

      They're useful enough that I tend to look at them first when wishing to pick up new syntax.

      --
      "I've spent my whole life figuring out crazy ways to do things. It'll work." -- Montgomery Scott, "Relics"
    2. Re:Another recipe book by aztektum · · Score: 1

      For clarity, because I was confused after reading your comment: C# is a Microsoft product. This book is buy O'Reilly

      --
      :: aztek ::
      No sig for you!!
    3. Re:Another recipe book by Anonymous Coward · · Score: 0

      Something like this is ideal:
      www.programmersheaven.com/ebooks/csharp_ebook.pdf

    4. Re:Another recipe book by Westley · · Score: 1

      Oh dear:

      "Reference types, like objects and arrays, are passed by reference." (P67)

      Any book propagating that myth instead of explaining reality (the references are passed by value, which is a different thing) gets little respect from me, I'm afraid. There's a *bit* of explanation on P75, but not enough - and when talking about "ref" it explicitly talks about using it for value types, as if it can't be used for reference types :(

      (Yes, I went looking for that specifically. I've found that checking how a book describes parameter passing is quite a good first step for judging its accuracy/quality.)

      Still, nice to have a free ebook available, I'll admit.

    5. Re:Another recipe book by Televiper2000 · · Score: 1

      I find most programming books are simply too abstract when they explain the higher concepts. They talk about how Shape() can be commanded to draw a Circle, Square, or Triangle, but they don't really tell you have you are going to tell Shape() to do that. But, they will drone on and on about how wonderful it is that you can make Shape any of the 3. I would love to see a book just break it down to a practical level, show me what it looks like, tell me what it's called, tell me what to look out for, and point me to further references. I find that with not having a formal education in programming, the most difficult thing is knowing what to look up.

      --
      New! Device Legs: These legs will help your poor OEM installed product escape any hamfistedness it may encounter. Ava
  22. C# Precisely by zensonic · · Score: 0

    Instead of teaching a subject by a massive 778 pages of text, you should go for the consise description of C# as described in Peter Sestoft and Henrik Hansens book:

    http://www.amazon.com/C-Precisely-Peter-Sestoft/dp/0262693178

    With 182 pages it is quickly read, yet you can also easily iterate over the text again and again as deeper and deeper understanding of C# is needed. A real gem on any developers bookshelf!

    --
    Thomas S. Iversen
    1. Re:C# Precisely by Westley · · Score: 1

      Unfortunately it's somewhat out of date. While it does cover C# 2, it was published a year before C# 2.0 (and .NET 2.0) were released - which means it won't be accurate when it comes to things like boxing nullable types.

      It also (for obvious reasons) doesn't cover C# 3 at all. But yes, it does look like an interesting book...

    2. Re:C# Precisely by zensonic · · Score: 1

      Given that Peter Sestoft was Beta tester on C# 2.0 you can take it for granted that the book covers C# 2.0 as it was at the time of release. If you find anything that is inaccurate in the book I am sure the author would appriciate the feedback :-)

      --
      Thomas S. Iversen
    3. Re:C# Precisely by Westley · · Score: 1

      Given that Peter Sestoft was Beta tester on C# 2.0 you can take it for granted that the book covers C# 2.0 as it was at the time of release.

      No it doesn't. The behaviour for boxing changed after the book was published. It was changed in the the August 2005 CTP, I believe.

      C# 2.0 was finally released as part of .NET 2.0 in November 2005, over a year after the book was published - which means it's more likely to be about 15 months since the final copy was written.

      If you find anything that is inaccurate in the book I am sure the author would appriciate the feedback :-)

      I suspect the authors aren't that bothered at this point, given that the book is coming up to being 4 years old.

      Mind you, judging by the table of contents, there's very little about nullable types - the chapter looks like it's only two pages long. That's not going to be enough to cover lifted operators and conversions, boxing etc.

      Jon

  23. Alternate resource by Frostalicious · · Score: 5, Funny

    Head first was pretty good, but I still prefer my old standby - "Balls Deep Into C#"

    1. Re:Alternate resource by lantastik · · Score: 1

      You move fast, I prefer the knuckle deep approach when just starting out.

  24. Bah. What can C# do that Java can't by caywen · · Score: 1

    I mean, I can write a C# compiler in Java, can I not? Oh wait, I can write a Java compiler in C#. Holy crap, I can write anything in assembler. I just found the best language.

  25. Are you kidding me? by WED+Fan · · Score: 0, Flamebait

    Granted, in this case I don't know the language C#, but in general I never really understood the Head First series...

    OMG, or, OMFG, Are you actually commenting on the book, or the review, or the publisher and not slamming C#? I am outraged. OUTRAGED! O U T R A G E D!

    Sir, this is /.! Kindly start slamming C#, .NET, MS, Bill Gates, Bill and/or Melinda Gates, The Bill and Meliinda Gates Foundation, Ballmer, monkeys, chairs. But, sir, do not post on the book that was reviewed in the above article.

    --
    Politics is the art of looking for trouble, finding it everywhere, diagnosing it incorrectly and applying the wrong fix.
  26. WTF by Anonymous Coward · · Score: 0

    Seriously: trying to rot your brain? Cb is the most godawful language ever. It's made by Microsoft! Get a clue! There are only two OO languages. Smalltalk and Objective-C. Objective-C is dazzling. Cb is just more Microshite shite. Settle for 2nd best and YOU will be 2nd best. At best.

  27. Found this via a story last week by prestomation · · Score: 1

    Last week we had that story about Textbook Torrents. This was one of the ones I found there!

  28. Advantages of knowing C# by Anonymous Coward · · Score: 0

    None. The cool kids program in Java, Ruby, not C# C, C++, not C#, Scala, Groovy, not C#....

    1. Re:Advantages of knowing C# by Is0m0rph · · Score: 1

      Wrong, no one cool actually programs in Java.

  29. I'm a /.er reader and ... by Evildonald · · Score: 1

    i think c# and M$ products are rubbish.. blah blah blah... Get a new line guys.

  30. These were C++ programmers... by Unoriginal_Nickname · · Score: 1

    ...and I guess someone who uses a wood chisel to open a paint can is a handyman. The differences between C++ polymorphism and C# interfaces are extreme and I find it baffling that someone who could claim even a passing familiarity with both languages could genuinely confuse the two.

  31. Please explain exactly what is wrong with C# by Conspiracy_Of_Doves · · Score: 4, Insightful

    Can someone please explain what is wrong with C#? Something other than the fact it was created by Microsoft or simply that it is 'rubbish'.

    What features of the language do you have a problem with? Ok, so there's no multiple inheritance. What else?

    I've been doing ASP.NET via C# for a living for about 18 months now, and I've found it to be a perfectly servicable language. What's the problem with it?

    I hate Microsoft's business ethics just as much as the next /.er. I'm still going to judge their products based on their own merits.

    1. Re:Please explain exactly what is wrong with C# by Anonymous Coward · · Score: 0


      I've been doing ASP.NET via C# for a living for about 18 months now, and I've found it to be a perfectly servicable language. What's the problem with it?

      The same problem that was with VB. Single vendor lock-in. Microsoft can pull the whole platform on a whim and your SOL. At least with C++/C/Java/PHP/Python etc. your free to choose to pick from multiple suppliers.

      Good Luck getting your applications running on those sub-notebooks every one is buying.

      Enjoy,

    2. Re:Please explain exactly what is wrong with C# by Conspiracy_Of_Doves · · Score: 1

      You know what ASP.NET is, right?

    3. Re:Please explain exactly what is wrong with C# by benhattman · · Score: 1

      Ok, so there's no multiple inheritance.

      First off, that's a feature and not a bug. C# has two opposing sets of problems, and one MS related problem.

      The MS problem is that it's made to run on Windows, and despite the availability of Mono, you always have to fear for portability (if that's desirable to you).

      The other problems are that v1 is not much more than Java without most of the copious quantities of 3rd party libraries. So at that point, there were few good reasons to pick C# over Java.

      With v2, that changed. A number of new language features were added, and some of them are pretty nice. However, there are now a lot of keywords to keep track of and it makes for a more complex language. It still lacks the library support of Java though.

      That said, I use C# sometimes, and there is nothing inherently evil about it. Neither is it the last great language we'll ever see. It's just an incremental upgrade to Java.

    4. Re:Please explain exactly what is wrong with C# by Anonymous Coward · · Score: 0

      You know what ASP.NET is, right?
      Yep, It doesn't work well on all those memory constrained Linux sub-notebooks that lack IE. Get off your high horse and grow up. Be a real programmer and look beyond the platform.

    5. Re:Please explain exactly what is wrong with C# by Conspiracy_Of_Doves · · Score: 1

      ASP.NET is a backend web development language

      Unless you are using your notebook as a server, it will never even see ASP.NET code.

    6. Re:Please explain exactly what is wrong with C# by Conspiracy_Of_Doves · · Score: 1

      Unless you're talking about the tiny bit of javascript that it sends to the browser.

    7. Re:Please explain exactly what is wrong with C# by XMyth · · Score: 1

      Do the web browsers that run on these sub-notebooks not support javascript? Last time I checked, the javascript generated by ASP.NET ran fine on all of the browsers that matter at all (IE, Firefox, Safari, Opera and the iPhone's brwoser)

    8. Re:Please explain exactly what is wrong with C# by Conspiracy_Of_Doves · · Score: 1

      I was referring to the CPU time it took to run the Javascript. He said that he was referring to low-end laptops.

      I was trying to be snarky, but it didn't come off very well

    9. Re:Please explain exactly what is wrong with C# by GWBasic · · Score: 1

      Can someone please explain what is wrong with C#? Something other than the fact it was created by Microsoft or simply that it is 'rubbish'.

      I've been working with C# since 1.0 back in 2002. My biggest beef with the language is that Mono's development is much slower then I hoped for. C# on Mac or Linux just isn't "there" yet like Java is.

      On the other hand, people who call C# a clone of Java can't seem to appreciate the tangible improvements that the language offered in V1. "foreach" is just easier to use then Java's iterators. Language / VM support for properties makes debugging much easier.

  32. Nothing really by Toreo+asesino · · Score: 3, Informative

    It's very windows orientated, but that's about all I find wrong with it. Not a problem if you're never leaving Windows land - I find it an excellent language. If you are going outside of Windows, pick a more suitable tool for the job or use mono.

    --
    throw new NoSignatureException();
    1. Re:Nothing really by Westley · · Score: 1

      It's very windows orientated

      In what way? Bear in mind that the question was about the language rather than the .NET framework. Certainly some parts of the framework are Windows-biased - but the language itself isn't.

      but that's about all I find wrong with it.

      Oh there are things wrong with C#, undoubtedly. Or at least things I'd change. For starters:

      • Making methods sealed by default is a good start. Classes should be sealed by default too though.
      • More support for immutability would be very welcome.
      • C# enums are just named numbers. Java has a much more OO way of working with enums, although there are rough edges there which could be improved too.
      • switch/case could be significantly improved.
      • The way extension methods are discovered by the compiler in C# 3 is really bad. A separate directive (e.g. "using static") which works with classes rather than whole namespaces would improve matters a lot.

      There's more, but that's a start. Having said all this, it's still my favourite language at the moment. Any language you can't see flaws in is probably a language you don't know well enough ;)

    2. Re:Nothing really by Conspiracy_Of_Doves · · Score: 1

      I use 2.0, so the extension method thing doesn't effect me (or at least doesn't yet).

      I rarely, if ever, use enums, and I've never had a problem with immutable types

      I do understand what you mean with the switch/case thing. Who the hell decided that requiring a break for each case was a good idea? What's wrong with designing some cases to fall through into the next case?

    3. Re:Nothing really by Westley · · Score: 1

      I use 2.0, so the extension method thing doesn't effect me (or at least doesn't yet).

      Fair enough.

      I rarely, if ever, use enums

      Perhaps that's because they're so weak in C#? Being able to specify behaviour (and state - though usually immutable) makes them so much more appealing in Java.

      and I've never had a problem with immutable types

      The problem is that the compiler doesn't help you with them. It doesn't help you to write them (and prove you've done it correctly); it doesn't help you to implement simple equality/hashing except for anonymous types; there's no way in .NET of declaratively marking a type as immutable to make it clear at a glance to both developers and tools. Oh, and C# 3's object initializers aren't really designed to work with immutable types :(

      I do understand what you mean with the switch/case thing. Who the hell decided that requiring a break for each case was a good idea? What's wrong with designing some cases to fall through into the next case?

      Ironically, that one piece is what they got right IMO. If you really want fall through, just use "goto" to do it explicitly. However, I'd have preferred a mandatory block for each case (aside from multiple cases for the same block, if you see what I mean) and no need for an explicit break. Introducing a new block would also help with variable scoping. However, there are other things I would like to see improved, like pattern matching (see Scala, Groovy, F# etc).

      Jon

    4. Re:Nothing really by Conspiracy_Of_Doves · · Score: 1

      If you're going to require a break for each case, why require breaks at all? Why not just automatically escape the switch statement when the next case starts?

    5. Re:Nothing really by Westley · · Score: 1

      Hence my comments of "and no need for an explicit break".

      (Not that you always have to have a break, of course - you just have to make sure that the end of the case isn't reachable.)

      Jon

  33. I'm with Westley... by encoderer · · Score: 1

    But what strikes me as ignorant in your post is the OTHER HALF of your analogy.

    Following your logic, you're saying:

    "[Compared to C] none of those C++ features actually helps you write better programs, and a lot of the so-called improvements in C++ just make it a complicated mess."

    I'm not a huge C++ fan. I'd rather have my teeth drilled than take apart a C++ template.

    But to suggest that C++ was not substantive is, IMO, ignorant.

    I think in both cases -- C++ and C# -- you'd benefit from looking at them as standalone languages and analyzing them from that POV.

    1. Re:I'm with Westley... by Anonymous Coward · · Score: 0

      "[Compared to C] none of those C++ features actually helps you write better programs, and a lot of the so-called improvements in C++ just make it a complicated mess."

      Have you read the C++ FQA? I don't think anybody can seriously argue that C++ is not a complicated mess, or that C++ throws quality under the bus with any of thousands of gotcha's.

      All I am really saying is thet C# is already well on its way to being the next C++... a 'managed complicated mess' you might say.

    2. Re:I'm with Westley... by AndrewNeo · · Score: 1

      But isn't managed better than unmanaged? *buh dun bsch*

  34. Butt-First C# by littlewink · · Score: 1

    Favored by BG, since it allows him to pick your pocket while getting the shaft.

  35. Problem at the root by SuperKendall · · Score: 1

    My problem with C# is not in the language itself. It's in the fact that untold manhours have been utterly wasted in cloning Java.

    Yes C# has some nice things Java does not have. And if Microsoft has worked with the Java community to add them, imagine what amazing things we could do with the language by now, the very advanced tools that would have arisen with a unifies choice of an essentially VM based language.

    But because Microsoft suffers eternally from NIH, we all must suffer an industry a shadow of what it could be - from both the C# and Java side.

    So basically I think using and promoting C# is like coughing on a sick man, just to see how long you can keep him in bed.

    Nowadays I really can't understand why anyone uses ASP.NET for web development with some really interesting languages and frameworks like Rails and Pylons and umpteen interesting CMS systems all based on a variety of languages.

    For Windows programming the choice is pretty clear since that's the way Microsoft is going.

    --
    "There is more worth loving than we have strength to love." - Brian Jay Stanley
    1. Re:Problem at the root by kantos · · Score: 1

      MS DID try it was called J# but Sun Obligingly ignored it completely, not that I think that was a real loss. MS has since abandoned J#, and chosen to focus on C#, which is beginning to suffer from what I term 'The Perl Problem,' others call it a feature. But I still think C#, can, and emphasis on the can, because I've seen some pretty horrible C# before that was essentially C minus pointers, Produce more readable code than C++ or Java, it is not the one true language, but it is a step in that direction, maybe one day it will occur but this is not it.

      --
      Any and all content posted above may be ignored, considered irrelevant, or otherwise dismissed.
    2. Re:Problem at the root by NuclearDog · · Score: 1

      Just in the time saved in waiting for all of those Java programs we could have been writing to compile and run, it was probably worth the thousands of man hours designing and implementing .NET.

      If nothing else I always choose to use a .NET language where possible (eg, not needing the cross-platform component of Java) simply because I enjoy the massive speedup I experience.

      ND

      --
      This statement is forty-five characters long.
    3. Re:Problem at the root by SuperKendall · · Score: 1

      Frankly, that's bullshit - you obviously have never used a modern VM on a server.

      --
      "There is more worth loving than we have strength to love." - Brian Jay Stanley
    4. Re:Problem at the root by NuclearDog · · Score: 1

      Yes, but I don't do server-side development in .NET/Java, I do client side application development, and what Java runtime do most people use? I'm gonna go ahead and venture a guess that it's the Sun runtime.

      If you try and tell me that the Sun runtime _isn't_ slower than the .NET runtime, then I'm gonna need you to provide some pretty serious proof. The MINUTES I've spent waiting on a reasonable machine for a the Sun JVM to compile and start a tiny program is just fucking ridiculous.

      So sure, there may be some decent server-side VMs, but as far as desktop applications go, Java is pretty much just a big turd.

      --
      This statement is forty-five characters long.
  36. Less different than you think by SuperKendall · · Score: 1

    In Java x.y = a[b] could mean a few different things as well, if you throw in things like aspects, and many of the other things you mention have Java equivalents. Java extensions tend however to be more through frameworks than language extension which I think is a good thing if you do not want to end up like C++.

    --
    "There is more worth loving than we have strength to love." - Brian Jay Stanley
  37. Ads on slashdot by Anonymous Coward · · Score: 0

    I hate these type of posts on Slashdot. They are just ads and really no different than spam.

  38. Ha ha ha ha by codefungus · · Score: 1

    Yeah for you dumb MS programmer fuckers who don't know what Object Oriented Programming is, don't get stressed, it's just "OOP". You know, OOP!!!

    retards

    --
    -- A cat is no trade for integrity!
  39. That's just C# by SuperKendall · · Score: 1

    MS DID try it was called J#

    That was not improving on Java, that was the first, even less veiled attempt to basically copy Java and add Microsoft specific stuff to it (like Win32 api's).

    I don't personally think code readability is the be-all and end all of utilitiy, the ease of extension and quality of frameworks are far more important I think.

     

    --
    "There is more worth loving than we have strength to love." - Brian Jay Stanley
    1. Re:That's just C# by Mr2001 · · Score: 1

      Er, maybe you're thinking of J++.

      J# is a .NET compiler for Java, with some extensions to handle .NET features like delegates. It used to be included with Visual Studio, but as of VS 2008 I think it's gone. I never found J# very useful anyway, since it was based on an old version of Java and never updated.

      As for whether Microsoft should've pressured Sun to improve Java instead of developing C#... Sun never seemed very open to that, did they? Even now, they're reluctant to change the VM: look at how they implemented generics, for example. Some of the ways that C# improves over Java (e.g. delegates and value types) depend on having a more featureful VM.

      --
      Visual IRC: Fast. Powerful. Free.
    2. Re:That's just C# by SuperKendall · · Score: 1

      You're right, I was thinking of J+. Sorry about that.

      As you noted, J# was just a weak variant of Java and the only purpose it served was trying to convert Java programmers to C# - the samer purpose all other language support has in C#, because the reality is you get tired of the cogntive dissonance of using C# frameworks through the lens of a different language and just end up using C#. I felt so sorry for the guy whole built Eifell#, not knowing he was creating a bridge by which all Eifell developers would leave the land he so loved...

      That's why I don't think much of multi-language support in C# or Java, because I firmly believe a language needs frameworks that live within the philosophy of the language.

      As for changing Java - Sun, but really Java, was VERY VERY open. From the start there was a huge Java community effort way outside Sun called JCP, the Java community process. IBM and other large companies helped implement a lot of changes they wanted to see, and from the start Microsoft was invited in as a main member but did not want to play.

      The JCP is just like ISO for other languages, and even individuals could submit proposals for changes and lobby for them.

      --
      "There is more worth loving than we have strength to love." - Brian Jay Stanley
    3. Re:That's just C# by Mr2001 · · Score: 1

      As for changing Java - Sun, but really Java, was VERY VERY open. From the start there was a huge Java community effort way outside Sun called JCP, the Java community process.

      Has this process actually led to any VM changes, or is it limited to superficial language changes (which wouldn't be enough to implement major C# features)?

      --
      Visual IRC: Fast. Powerful. Free.
    4. Re:That's just C# by SuperKendall · · Score: 1

      Yes, the process controls all aspect of Java - the VM, as well as language. There is of course freedom to write a VM how you like to some degree, but you have to pass standards tests to be certified a "real" Java VM and so that means compliance to bytecode standards and framework standards. That too has been true ever since Java 1.1 I think, possibly even earlier as the JCP was around almost from the start.

      You can peruse the history of previous changes and current proposals, at the JCP website. Look at the list of all JSR's there to get a sense of the breadth of the thing.

      As I said in reality JCP does for Java what ISO does for other things. Only personally I feel like the JCP is WAY better than ISO as far as speed, and approachability - you as an individual can easily join and comment on proposals, a far cry from locked down ISO committees. It's also a big reason why Java has been able to grow so fast, yet so intelligently - because it really is the community using the thing that takes proposals into account, and makes them better through a closer to hands on experience with how the language is used.

      --
      "There is more worth loving than we have strength to love." - Brian Jay Stanley
    5. Re:That's just C# by johanatan · · Score: 1

      I think you're missing some things about the CLR's support for other languages. Look at the DLR for instance--C# is and never will be a dynamic language, but Python, Ruby, et al are supported by the DLR. And, even though C# now has support for some functional programming with anonymous methods and LINQ, it is not a purely functional language (like say Haskell, LISP, of F#).

    6. Re:That's just C# by johanatan · · Score: 1

      Oops. I meant '... is not and never will be ...'.

    7. Re:That's just C# by SuperKendall · · Score: 1

      I know it can support all sorts of languages, including newer functional things.

      What I am saying, is that while all that is fine in theory in reality if you use that support within a C# environment you tend to make use of the C# libraries, since there is a lot of functionality there. And so gradually you just come to say, screw it - I'll just use C# since I'm making so many C# calls anyway. Or at the very least, the frameworks you call into do not "think" like the language you are using.

      I have seen cases like Gem for Java, where you run a ruby on rails instance in a VM instead of a native Ruby client - this actually gives added speed since VM's are well optimized these days. Something like that makes some sense to me, since you are just using the VM as a way to optimize the language. But developing alongside the frameworks for the VM's "native" language, I think is a terrible idea.

      --
      "There is more worth loving than we have strength to love." - Brian Jay Stanley
    8. Re:That's just C# by johanatan · · Score: 1

      Umm... there's no such thing as 'C#' libraries. In .NET, it's the .NET framework that is the library and it is equally invocable from any language. You might be thinking of P/Invoke, but that is for invocing the underlying Win32 API (which is essentially a C API).

      If you were to use the DLR and write Python for the .NET framework, then you would still do everything the Python way and it would be compiled into CIL. The CIL is fully Turing-complete, so it can support any language on top of it that is also Turing-complete. Of course, the efficiency of the resulting code depends on how good the compiler (or DLR) is at compiling one paradigm into another.

      SEE:
      http://en.wikipedia.org/wiki/Common_Intermediate_Language
      and
      http://en.wikipedia.org/wiki/Dynamic_Language_Runtime

    9. Re:That's just C# by SuperKendall · · Score: 1

      Although my terminology was a bit old school, it's the frameworks I was thinking of. I know you can do everything the Python way, but part of the point is that you can all into the .Net frameworks as well.

      That's the draw and eventual snare.

      --
      "There is more worth loving than we have strength to love." - Brian Jay Stanley
    10. Re:That's just C# by johanatan · · Score: 1

      Yea, but I guess my point is to prefer the Python way to the .NET way when one exists. For instance, prefer

      list = [a, b, c, d]

      over

      list = new System.Collections.ArrayList();
      list.Add(a);
      list.Add(b);
      ...


      and, in fact, I would venture that the DLR probably implements the Python list in terms of the .NET ArrayList anyway, but that is abstracted from you.

      This is the same concern you would have if writing C++ on top of UNIX or Windows--you should prefer the pure language and the STL over system-specific APIs. (Except that .NET framework calls are not exactly system-specific as there can exist an implementation of CLR for any platform you wish to target. So, in that way, the .NET framework is both cross-language and cross-platform).

      [And, another side-note-- each language has its own way of calling into the framework which is syntactically appropriate. For example:

      System::Collections::ArrayList (C++)

      VB of course has its own funky way too which I won't both with looking up right now as you probably get the point.] :-)

  40. I miss local statics. But apart from that it's ok by baash05 · · Score: 1

    My only issue is the lack of local static variables. If I'm searching a database for a record I like to check if I already have that record in scope. Ie. Find(int id){static int lastID = 0; if(id == lastID).... I've heard that the reason for this omission is because of threading and it's impact. Blaaa, if you're doing threading you should know better. Other then that. There's nothing wrong with the lang. Garbage collection isn't the devil I once thought it to be. Not if you look closely. The interpreted part of the lang will always bother me but on the whole for desk programming it's as good a lang as many and better them most.

  41. Deitel and deitel by baash05 · · Score: 1

    Ok. The first c++ I ever got was deital and deital. Almost 10 years later and I still find it a fun read. I still see things in it I missed every other time. (perhaps I'm slow ). Their coverage of c# is huge. I mean 1300 pages is just too much. I'd have loved to see something more concise. That said I still bought the book. Seemed to me that if their c++ was great then their c# could be just as good.

  42. OOP in VB.NET by cavebison · · Score: 1

    Having come from a CB86 / Commodore BASIC / GFA BASIC / MS BASIC / GW-BASIC / QuickBASIC / VBDOS / VB background, I felt really sorry for all these C people who had to learn a whole new language again. All I had to learn was what an O did and how to orient it.

  43. Complete novice programmer here by Caboosian · · Score: 0

    When I say complete novice, I mean a few weeks ago I couldn't read the most basic of code. I struggled and struggled to grasp some easy concepts (largely botched by the online tutorials I was trying to learn with). Then I purchased this book with the aid of my brother, who is a fairly experienced programmer, and finally I can write some fairly simple programs. No, this book isn't a reference book, and that will turn off a lot of vets - but it's meant for people like me. I can't emphasize how fantastic this book is - it's interesting, not a mind-numbingly dull read, and it's even made me laugh a few times.

    I plan on using this book as a launch pad - hopefully, by the time I finish it, I will have a strong grasp on the fundamentals of C#. From that point I hope to contribute (if my skills are solid enough) to some OSS projects, and likely purchase a more in-depth, experienced-oriented book.

    After struggling for weeks with crappy online tutorials, finding a novice oriented book was a dream come true.

    1. Re:Complete novice programmer here by krunk7 · · Score: 1

      If your interest lies in OSS, you may consider investigating a language that is less platform specific.

      I find the "Sam's XX in 24 hours" books pretty handy for beginners as well.

    2. Re:Complete novice programmer here by Caboosian · · Score: 0

      I decided on C# because there is at least one significant OSS project in that language (mono) (gnome-do) that I know of, and because I had been told it was a relatively easy language to learn, especially for a novice.

      Do you have any recommendations? Those would be very welcome - the future's always good to think of.

  44. Re:SECOND! by antek9 · · Score: 1

    Wouldn't that be the first one after the first, technically speaking? Speaking of which, as Head First is actually a series of books very similar in style, it would be nice to have someone elaborate on how much the authors re-use explanations, clip arts and examples their fellow authors already employed in Head First Java or the OO book.

    Has anyone ever studied more than one of those books? However, I really like the approach, and I couldn't disagree more with the negative tone about the stated redundancy, because that's there on purpose. As those books are not meant as a reference but as a means of getting those language concepts into even the slightly ignorant minds (or the easily confused, or the easily distracted, your pick), repetition in slightly different wording is _great_.

    --
    A World in a Grain of Sand / Heaven in a Wild Flower,
    Infinity in the Palm of your Hand / And Eternity in an Hour.
  45. Re:I miss local statics. But apart from that it's by dkf · · Score: 1

    My only issue is the lack of local static variables. [...] I've heard that the reason for this omission is because of threading and it's impact. Blaaa, if you're doing threading you should know better.

    Decades of evidence points to programmers not knowing better. No matter how much they should, they don't. You have to hit them with a pretty big stick to stop them from doing the lazy broken thing, and taking away local statics is just one more example of this. (Personally, I'd be tempted to much further and take away most state that's not thread-local, but that's not how C#, or Java or C++, works.)

    --
    "Little does he know, but there is no 'I' in 'Idiot'!"
  46. This is a silly place.. by Evil+Kerek · · Score: 2, Insightful

    This is a silly place to post a review about a C# book. Most of the readers here are way too narrow minded to post any reasonable discussion about the book (or anything involving M$).

    The posts here pretty much prove my point. It's actualy kind of sad - it's obvious some of these people are fairly bright, yet they can't seem to see past their 'elitism' BS - which is anything but.

    The review itself should probably be marked 'troll'.

    I don't particularly like microsoft - but yep, I do code for a living in C# after having done so in Delphi (way back in delphi 1). And sorry guys, but it's pretty damn cool - the database access stuff needs work but in general, it's a very nice language to work with (and the IDE rocks). And yeah, well, as long as windows land is 90% of the world, that's where I'll be coding. Call me back when linux manages to get some desktop penetration worth talking about.
    EK

  47. Re:I miss local statics. But apart from that it's by Anonymous Coward · · Score: 0

    I'd be more tempted to just take away their keyboard. I'm not a pro at threading and don't claim to be, it can be quite complex at times. That said I do understand data blocking. It's not really a hard concept. "Two people can not ride the same bike at the same time"... Tada!
    I think putting protections in like these addresses one issue that affects a small part of the population and creates other issues.
    Also the threading argument doesn't hold water. I can have class wide statics. This means that I could still create the same error.

    Languages should not limit the programmer to protect them from themselves. It should allow us to shoot our foot off, if we so choose. They should be extensable. I think the loss of the local static was a mistake. One I have to work around (when needed) by exposing a method variable to the rest of the class. (not good)

  48. Head First Books -- Idiotic by jrbirdman · · Score: 1

    If you're a n00b...Fine. If you're someone who codes for a living...the books are idiotic and really not that funny. I'm interested in learning, not being entertained. I find myself about every third page wanting to scream "JUST TELL ME WHAT THE F!#K I NEED TO KNOW!". But...then again...that's just my opinion.

  49. Re:You are a troll. by dedazo · · Score: 1

    Keep it up, trolltard. I guess you're down to this because the "game" wasn't as dreadfully easy as you calculated, eh?

    You must have the Slashdot record of most ruined accounts, outside of the GNAA team. Impressive achievement.

    And I'm including these as well, because I know that's you.

    --
    Web2.0: I love when people Flickr my cuil and digg my boingboing until my google is reddit and I start to yahoo