Coffeehouse Thread

21 posts

Why No Computer Science"y" Books in C#?

Back to Forum: Coffeehouse
  • fvwj

    If you look on amazon, there are tons of books on datastructures and algorithms in C, C++, and Java. But why not in C#?

    People keep telling me that I should just pick up a book in Java and translate the code, because its not that difficult. Yes, I agree, but to a point. There are little things in those Java books, specific to Java, that I don't want to learn, due to lack of time or interest.

    Is there not a market for computer science books in C#?

  • vesuvius

    Computer science is about the science not the language. I think it better for people to learn VB6 or C/C++ then something like C#.

     

    Obviously Microsoft would love it if every college used C#, but I think you should learn Python/Ruby, Java and C/ C++ if you are CS student.

  • exoteric

    C# came after Java. That probably pretty much sums it up. There's also Spec# which should have some academic [and indeed practical] interest beyond Java [and C# as is, for that matter].

  • fvwj

    vesuvius said:

    Computer science is about the science not the language. I think it better for people to learn VB6 or C/C++ then something like C#.

     

    Obviously Microsoft would love it if every college used C#, but I think you should learn Python/Ruby, Java and C/ C++ if you are CS student.

    Well, the real point behind me asking, is why are there no books on "datastructures and algorithms" in C#, but there are tons in Java.

    Like I said, they are similar, but the Java books does so in a Java way, and I would like to keep it strictly to a C# .NET way. I'm studying on my own, so I don't want to spread my resources too thin.

    So I guess, C# or rather .NET, is geared more towards business and not academia? Why? I understand that Computer Science is about the science and not the language, but can we not learn Computer Science using C#?

     

  • W3bbo

    fvwj said:
    vesuvius said:
    *snip*

    Well, the real point behind me asking, is why are there no books on "datastructures and algorithms" in C#, but there are tons in Java.

    Like I said, they are similar, but the Java books does so in a Java way, and I would like to keep it strictly to a C# .NET way. I'm studying on my own, so I don't want to spread my resources too thin.

    So I guess, C# or rather .NET, is geared more towards business and not academia? Why? I understand that Computer Science is about the science and not the language, but can we not learn Computer Science using C#?

     

    Some CS schools in universities cover C# instead of Java, but Java got there first, and why should a school change its entire curriculum (since other modules assume the students know Java) just to be different? Schools already have massive investments in Java, it simply isn't worth it.

     

    I think it's valid to compare Java's pervasiveness in academia with Windows in consumer and business computers, and why the Linux desktop will never uproot it (unless Wine gets there...)

  • soum

    fvwj said:
    vesuvius said:
    *snip*

    Well, the real point behind me asking, is why are there no books on "datastructures and algorithms" in C#, but there are tons in Java.

    Like I said, they are similar, but the Java books does so in a Java way, and I would like to keep it strictly to a C# .NET way. I'm studying on my own, so I don't want to spread my resources too thin.

    So I guess, C# or rather .NET, is geared more towards business and not academia? Why? I understand that Computer Science is about the science and not the language, but can we not learn Computer Science using C#?

     

    There are indeed such books: http://www.flipkart.com/data-structures-algorithms-using-mcmillan/0521734428-fzw3fqkgbb 

    However, C# is a pretty new language, and a lot of schools already had their introductory CS courses well established by then. And they didn't have C# when they were designed, and consequently, the demand for introductory data structures books using C# is low. And anyways, such books focus on the concept of data structures and not necessarily the language used to implement that.

     

    If you want to focus on C#, I would suggest you go for books that do so too, rather than books that focus on the science behind it. Apart from the one I linked, this is also a good book: http://www.flipkart.com/beginning-jack-purdum-introduction-object/8126516836-ou23fgpy5d

     

    [I assumed you are looking for beginner level books; if my assumption is wrong, I apologize]

     

    The deeper you go into CS, the more you will realize that CS is more about the solution to a problem (algorithm and stuff), and not about the language you use is a matter of personal taste and expressibility for a given problem domain.

  • wkempf

    vesuvius said:

    Computer science is about the science not the language. I think it better for people to learn VB6 or C/C++ then something like C#.

     

    Obviously Microsoft would love it if every college used C#, but I think you should learn Python/Ruby, Java and C/ C++ if you are CS student.

    Huh. It's about the science, not the language, but you really should use VB6 or C/C++ rather than C#? Really?  VB6?

     

    First, you contradict yourself, then recommend probably THE worst language for learning about computer science/data structures/algorithms (not that VB isn't good for other things, mind you). C and C++ are fine, but not better than C# for data structures. Then you recommend Java, which is nearly identical to C#. Next up, Python and Ruby, both great languages, but not all that appropos for data structures in comparison to the others mentioned (except VB6). Great for algorithms, though.

     

    IOW, you're all over the place with no logic applied to your recommendations. C# would be a fine language for learning data structures/algorithms as a CS student. I think Pascal is still the most suited language for this, but C# and Java are close seconds. C++ would come in after, as it's a more complex language and you'd spend too much time on language considerations instead of focusing on the subject of data structures and algorithms. The rest probably aren't good recommendations for this, and VB6 is certainly not.

  • wkempf

    fvwj said:
    vesuvius said:
    *snip*

    Well, the real point behind me asking, is why are there no books on "datastructures and algorithms" in C#, but there are tons in Java.

    Like I said, they are similar, but the Java books does so in a Java way, and I would like to keep it strictly to a C# .NET way. I'm studying on my own, so I don't want to spread my resources too thin.

    So I guess, C# or rather .NET, is geared more towards business and not academia? Why? I understand that Computer Science is about the science and not the language, but can we not learn Computer Science using C#?

     

    There are some. http://www.amazon.com/Data-Structures-Algorithms-Using-C/dp/0521670152/ref=sr_1_1?ie=UTF8&s=books&qid=1267294529&sr=8-1

     

    As for why there's not more... I'm not sure we can answer that. Those no technical reason for it, so it's some non-technical reason that we'd only be guessing at.

  • Bass

    The algorithm book I used in CS (the famous one from MIT Press) used pseudocode. I always wondered why they didn't just settle on Python, since it's similar enough and actually executes.

  • vesuvius

    wkempf said:
    vesuvius said:
    *snip*

    Huh. It's about the science, not the language, but you really should use VB6 or C/C++ rather than C#? Really?  VB6?

     

    First, you contradict yourself, then recommend probably THE worst language for learning about computer science/data structures/algorithms (not that VB isn't good for other things, mind you). C and C++ are fine, but not better than C# for data structures. Then you recommend Java, which is nearly identical to C#. Next up, Python and Ruby, both great languages, but not all that appropos for data structures in comparison to the others mentioned (except VB6). Great for algorithms, though.

     

    IOW, you're all over the place with no logic applied to your recommendations. C# would be a fine language for learning data structures/algorithms as a CS student. I think Pascal is still the most suited language for this, but C# and Java are close seconds. C++ would come in after, as it's a more complex language and you'd spend too much time on language considerations instead of focusing on the subject of data structures and algorithms. The rest probably aren't good recommendations for this, and VB6 is certainly not.

    I am going by what the current curriculum is at some of the leading universities in the UK, so there is an element of experience in my statement.

     

    I would like to draw attention to the fact that I have been at no one time been explicit about choosing language x over language y, I have merely presented an array of languages that omit C#.

     

    It is difficult to say why I think C# not appropriate, but I think it is because it is simply too good. It has LinkedLists baked into it for example, and the standard sequence operators (more of the what you want done, not how) like SkipWhile and Take etc. conceal a lot of things a CS student should be able to do given a for loop and some primitives. That's not to say you cannot in C#, but it is like going on a diet in a sweet shop, it's just too tempting to use what is there.

     

    I also think it narrow minded to pigeon-hole VB6 as being useless, as I know some very complex systems, dealing with embedded systems that have been written using the langauge with data at the forefront, and a CS student should be aware of as many languages (IMHO) as possible, warts and all.

     

     

  • Sven Groot

    vesuvius said:
    wkempf said:
    *snip*

    I am going by what the current curriculum is at some of the leading universities in the UK, so there is an element of experience in my statement.

     

    I would like to draw attention to the fact that I have been at no one time been explicit about choosing language x over language y, I have merely presented an array of languages that omit C#.

     

    It is difficult to say why I think C# not appropriate, but I think it is because it is simply too good. It has LinkedLists baked into it for example, and the standard sequence operators (more of the what you want done, not how) like SkipWhile and Take etc. conceal a lot of things a CS student should be able to do given a for loop and some primitives. That's not to say you cannot in C#, but it is like going on a diet in a sweet shop, it's just too tempting to use what is there.

     

    I also think it narrow minded to pigeon-hole VB6 as being useless, as I know some very complex systems, dealing with embedded systems that have been written using the langauge with data at the forefront, and a CS student should be aware of as many languages (IMHO) as possible, warts and all.

     

     

    It has LinkedLists baked into it for example

    So have Java and C++.

  • vesuvius

    Sven Groot said:
    vesuvius said:
    *snip*

    So have Java and C++.

    I have just got a copy of C++ Program Design Including Data Structures (D.S. Malik) off my bookshelf, and the implementaion of queues (with the destroy queue), the linked implementaion, deriving from the linkedQueueType and so on just seems fuller to to me in C++ and if a student understood this, then C# would be easy, things are different the other way around though, so I stick to my notion that a CS student should use unmanaged code when learning about these core building blocks.

  • Sven Groot

    vesuvius said:
    Sven Groot said:
    *snip*

    I have just got a copy of C++ Program Design Including Data Structures (D.S. Malik) off my bookshelf, and the implementaion of queues (with the destroy queue), the linked implementaion, deriving from the linkedQueueType and so on just seems fuller to to me in C++ and if a student understood this, then C# would be easy, things are different the other way around though, so I stick to my notion that a CS student should use unmanaged code when learning about these core building blocks.

    But Java's not unmanaged code, so why did you include that on the list?

  • vesuvius

    Sven Groot said:
    vesuvius said:
    *snip*

    But Java's not unmanaged code, so why did you include that on the list?

    OK, I'll be honest.

     

    I believe a CS student should learn C and C++ for imperative programming, and Python/Ruby as well for dynamic programming. That is the way I see it, with no balanced view, political correctness or anything of the sort.

     

    I don't doubt that Java and C# are more than adequate, as they contain most if not everything good about C++, but you have to be more responsible without a garbage collector, and if you then need to work as a programmer you can go managed or unmanaged. Starting off managed with C# means it is difficult for most to then go unmanaged.

     

    I think the most pertinent question is why the CS student does not use what is there already, be it C++ or Java books. Don Syme says this in a recent video. Instead of saying "where can I find a F# Math library", you should find a C# library (or whatever .NET langauge) and use that instead.

  • Sven Groot

    vesuvius said:
    Sven Groot said:
    *snip*

    OK, I'll be honest.

     

    I believe a CS student should learn C and C++ for imperative programming, and Python/Ruby as well for dynamic programming. That is the way I see it, with no balanced view, political correctness or anything of the sort.

     

    I don't doubt that Java and C# are more than adequate, as they contain most if not everything good about C++, but you have to be more responsible without a garbage collector, and if you then need to work as a programmer you can go managed or unmanaged. Starting off managed with C# means it is difficult for most to then go unmanaged.

     

    I think the most pertinent question is why the CS student does not use what is there already, be it C++ or Java books. Don Syme says this in a recent video. Instead of saying "where can I find a F# Math library", you should find a C# library (or whatever .NET langauge) and use that instead.

    Oh I agree with that. CS students should learn about the unmanaged side of things too. Whether it's sane to start out with C++ though, I don't know. My university was strictly C++ in first year, and way too much time was spent by people trying to figure out C++ the language rather than the problem they were trying to solve. This was even more apparent when I was assistant for that very same first year class a few years later.

     

    However, the main issue I was getting at before is that you said you exclude C# because it's managed, yet you did put Java on the list in an earlier post.

  • exoteric

    vesuvius said:
    Sven Groot said:
    *snip*

    OK, I'll be honest.

     

    I believe a CS student should learn C and C++ for imperative programming, and Python/Ruby as well for dynamic programming. That is the way I see it, with no balanced view, political correctness or anything of the sort.

     

    I don't doubt that Java and C# are more than adequate, as they contain most if not everything good about C++, but you have to be more responsible without a garbage collector, and if you then need to work as a programmer you can go managed or unmanaged. Starting off managed with C# means it is difficult for most to then go unmanaged.

     

    I think the most pertinent question is why the CS student does not use what is there already, be it C++ or Java books. Don Syme says this in a recent video. Instead of saying "where can I find a F# Math library", you should find a C# library (or whatever .NET langauge) and use that instead.

    Apples and oranges. To read code in a programming language you don't much care for is quite different from importing some assemblies written in a different language and just using them, especially as there is mostly no performance reasons for using F# over C# for example - so why care. I couldn't care less whether the .Net BCL assemblies are written in C#, VB or F# so long as my own code is written in C#; it all compiles down to MSIL anyway.

  • Bass

    I think the language itself is largely meaningless. If you look at the top CS schools (eg. MIT), you'll see they spend a week (if anything) "teaching languages". Their first introductory CS course already goes into things like Control Systems, Op-Amp Analog Circuits, Z-Transforms, OOP _and_ Functional Programming, Computational Complexity Theory, Probabilistic Algorithms and Robotics. They wouldn't have time for things like that if they spent an entire hour teaching what an if statement is. 

     

    And yes I think all CS schools should be like this. I hate the dumbing down of CS.

  • ktr

    Sven Groot said:
    vesuvius said:
    *snip*

    Oh I agree with that. CS students should learn about the unmanaged side of things too. Whether it's sane to start out with C++ though, I don't know. My university was strictly C++ in first year, and way too much time was spent by people trying to figure out C++ the language rather than the problem they were trying to solve. This was even more apparent when I was assistant for that very same first year class a few years later.

     

    However, the main issue I was getting at before is that you said you exclude C# because it's managed, yet you did put Java on the list in an earlier post.

    I tend to agree that since C# has introduced several new paradigms (functional, declarative, dynamic, etc...), it has become the best language for the majority of projects out there.

     

    However, with all these new capabilities comes complexity.  For a CS student with no experience with programming languages, C# is generally (IMHO) not a good first language.  The language is so powerful and broad now that it is hard to know where to start if you've never been exposed to programming.

     

    C# has had a flood of innovation (LINQ, lambdas, dynamic programming, extension methods, etc...).  Not to mention all of the additional features that C# 1.0 had over Java (delegates, properties, etc...).  The truth is that to you and me C# is beautiful but to a beginner it is simply daunting.

Comments closed

Comments have been closed since this content was published more than 30 days ago, but if you'd like to continue the conversation, please create a new thread in our Forums, or Contact Us and let us know.