Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. The Lounge
  3. Revenge of Redmond – C# and the .Net Frameworks

Revenge of Redmond – C# and the .Net Frameworks

Scheduled Pinned Locked Moved The Lounge
csharpannouncementdelphidotnetvisual-studio
75 Posts 28 Posters 0 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • K Keith Barrow

    gggustafson wrote:

    Generics, LINQ, and so forth have been added

    IIRC Correctly, generics were always supposed to be part of the language spec, but could not be developed in time for the for 1.0 & 1.1 versions of the framework, following the usual .net pattern of being over-aggressive about what can be achieved per release. This is not a correction. Generics / Template classes were the thing I missed most when I moved from c++ to c# As for LINQ, assuming it is the syntax you object to, you don't have to use it. You can even use the underlying methods (such as Select, Where etc) as methods. So I fail to see why this is a bad thing. Saying that adding features that were not part of the original language is bad, is the same as saying the language should not change.

    gggustafson wrote:

    What I liked the most with the original C# language were the ArrayList

    You are kidding right? Again ArrayList is still there (sadly) so you can still use it. I can't work out why, in effect List<object>, which is pretty much equivalent to ArrayList, is better than List<type> because we then need to spend time type-checking and I'd much rather get compile time errors than run-time ones. What is more interesting are the features that have been added that are I'd say are more controversial that you haven't mentioned. I know people who have stopped .net development because of things like dynamic typing, anonymous types and even implicit typing. I at least understand their position, even if I don't agree with it. We can still churn out v1.0 / v1.1 code using the v4.0 compiler (mod any breaking changes to classes) but it is simply harder. As for the increasing arrogance of the Microsoft employees, I don't know, I don't have to deal with them.

    Sort of a cross between Lawrence of Arabia and Dilbert.[^]
    -Or-
    A Dead ringer for Kate Winslett[^]

    D Offline
    D Offline
    Daniel Grunwald
    wrote on last edited by
    #43

    Keith Barrow wrote:

    IIRC Correctly, generics were always supposed to be part of the language spec, but could not be developed in time

    I don't think this is true. Generics only got included in the .NET 2.0 plans because Microsoft Research wrote the full implementation - the main product team's opinion was "generics is for academics only". http://blogs.msdn.com/b/dsyme/archive/2011/03/15/net-c-generics-history-some-photos-from-feb-1999.aspx[^]

    Don Syme wrote:

    Generics for .NET and C# in their current form almost didn't happen: it was a very close call, and the feature almost didn't make the cut for Whidbey (Visual Studio 2005). Features such as running CLR code on the database were given higher priority.

    1 Reply Last reply
    0
    • R RedCatsRic

      This post could have been reduced to: I am too set in my ways and stubborn to learn a new generation of programming languages and the benefits that they offer. You can enjoy your pointers and manual memory management all you want, but you won't be writing any enterprise level web systems with them. And that's exactly the point, isn't it? Use the tool that works best for the job. If you can't see the benefits of a particular tool, that does not indicate that there aren't any; it only indicates that you are unable to recognize them.

      F Offline
      F Offline
      Fran Porretto
      wrote on last edited by
      #44

      Well, you're right about one thing: I'll never write an enterprise-level web system. That's not my domain: I do real-time systems, usually embedded in a special-purpose ruggedized device. Show me a language + support framework + development environment that beats C++ and VS V6.0 at such tasks and I'll take an interest. Until then, ta-ta.

      Dinosaurs of the computing industry, unite!

      (This message is programming you in ways you cannot detect. Be afraid.)

      1 Reply Last reply
      0
      • P peterchen

        Ever since my birth I've seen a growing ignorance of behalf of people. They assume what they don't need must be irrelevant to the world, if they don't understand something it must be born out of stupidity, and the future was perfectly predictable if you are as smart as them. Sorry. Umm... peace.

        FILETIME to time_t
        | FoldWithUs! | sighist | WhoIncludes - Analyzing C++ include file hierarchy

        J Offline
        J Offline
        jschell
        wrote on last edited by
        #45

        peterchen wrote:

        Ever since my birth I've seen a growing ignorance of behalf of people.

        I doubt that. Much more likely that the only differentiation, if any, is that you are more aware of rate that is fixed.

        peterchen wrote:

        They assume what they don't need must be irrelevant to the world, if they don't understand something it must be born out of stupidity, and the future was perfectly predictable if you are as smart as them.

        Of course a converse truth also exists.... People who assume that everything that is new should be useful to everyone, that is was created after only a great deal of careful consideration and it should be used whenever possible without constraint. And any attempts to constrain, limit or criticize something new is based solely on the ignorance with no possibility of any other reason.

        1 Reply Last reply
        0
        • S Stefan_Lang

          I still don't get why any modern language needs goto at all. goto is a first generation language command. It was already bad for procedural programming, worse for OO, and catastrophic for anything involving multithreading. Not to mention functional programming.

          J Offline
          J Offline
          jschell
          wrote on last edited by
          #46

          Stefan_Lang wrote:

          ...worse for OO, and catastrophic for anything involving multithreading

          How can you construct "catastrophic" code with a goto involving threads for which you cannot do the same thing using some other idiom that involves branching? Certainly both Java and C++ compilers generate most branching idioms that exist in the language specifically by substituting structures that use goto. And both of them seem to handle threading without problems related to that.

          S 1 Reply Last reply
          0
          • C CPallini

            I think the C# nature of 'evolving language' is a design choice, not a flaw. If you like only the C# original features, then why don't use just them?

            Veni, vidi, vici.

            J Offline
            J Offline
            jschell
            wrote on last edited by
            #47

            CPallini wrote:

            If you like only the C# original features, then why don't use just them?

            Based on your assertion you might as well claim that your coworkers can write code using fortran, cobol, assembly as well as C#. After all it is only a matter of personal choice and has no impact otherwise.

            C 1 Reply Last reply
            0
            • P Pete OHanlon

              gggustafson wrote:

              What I liked the most with the original C# language were the ArrayList and garbage collection

              Garbage collection is still there. What makes you think it's disappeared. As for ArrayList - you honestly like your code to perform badly? Do the terms boxing and unboxing mean anything to you? As for the other features - in the most part, they are there to make the job of the day to day developer a lot easier. They aren't in there for the benefit of some ivory towered academics who don't do this for a living, they are for people who have applications to write for customers quickly and easily. I'm sorry, but I find your arguments specious. Now, if you'd picked on the var keyword, I'd have had to agree, or the lack of full templating support.

              *pre-emptive celebratory nipple tassle jiggle* - Sean Ewington

              "Mind bleach! Send me mind bleach!" - Nagy Vilmos

              My blog | My articles | MoXAML PowerToys | Mole 2010 - debugging made easier - my favourite utility

              J Offline
              J Offline
              jschell
              wrote on last edited by
              #48

              Pete O'Hanlon wrote:

              As for the other features - in the most part, they are there to make the job of the day to day developer a lot easier

              Unless you have some real statistics to back that up it is nothing but subjective nonsense. In my experience programmers spend most of their time dealing with design (even at the implementation level) issues, logic/design/architecture bugs, library learning/usage, and other issues of which the vast majority have nothing to do with language semantics. Now maybe you spend every day all year long doing nothing but constructing generic collections and linq expressions but that isn't what most developers do. So it isn't possible for a language construct to have a significant impact.

              P 1 Reply Last reply
              0
              • F Fran Porretto

                I've heard a great deal of praise heaped on C#, but in my encounters with it to this point, I've always come away bruised. In part, that's because it's still changing (and VS .NET with it). In part, it's because I'm a dinosaur who expects the facilities I've come to know and love to remain available and convenient when I "upgrade." But more significant than those reasons or any others is this one: I dislike being "protected from myself."

                I like pointers.
                I prefer permissive type conversions.
                I'm a high expert at picking floating-point numbers apart from their binary representations. (Ever seen old-style IBM floating-point? What about CDC's 60-bit version?)
                If I can't substitute an address for an integer or vice-versa, I'll throw a fit.
                And don't you dare move something I've put in allocated memory! I'll do my own "garbage collection," thanks very much.

                My first language was assembler on a PDP-9. I moved from there to the Data General NOVA 1200, still programming in assembler, and from there to the PDP-11, and then to the Intel 8080, 8085, and Zilog Z80, still programming in assembler. Over those years, various persons attempted to convert me to the glories of FORTRAN, Pascal, Algol, APL, PL/I, LISP, and Forth. I spurned them all: not one of them permitted me to do everything I felt I might need to do in some hypothetical situation. When I was introduced to C, for the first time I felt I could "go machine-independent" without losing the full freedom of the machine.

                Today I program in C++ and microcode for special-purpose devices. I'm uninterested in C#, Ada, or any other language that attempts to restrict what operations I can attempt. I find it puzzling that other software engineers are willing to accept such shackles. But hey, I told you already: I'm a dinosaur.

                I wonder if you'll miss my sort when we're completely extinct...

                (This message is programming you in ways you cannot detect. Be afraid.)

                J Offline
                J Offline
                jschell
                wrote on last edited by
                #49

                Fran Porretto wrote:

                Today I program in C++ and microcode for special-purpose devices. I'm uninterested in C#, Ada, or any other language that attempts to restrict what operations I can attempt. I find it puzzling that other software engineers are willing to accept such shackles. But hey, I told you already: I'm a dinosaur.

                Errr...If I was writing what you were then I suspect I would use C++ as well. But I seriously doubt that I would start with C++ for a generic web server. And the reason for that is because it would be easier to get it up and keep it running by using C# or Java. Just so there is no doubt, without checking the actual years I believe I still have more experience with C/C++ than I do with C#/Java. And of course in terms of the original post, C++ itself is now on its 2 major update (ANSI) which does add new features. Template introduction in version 1 was a significant undertaking and before that there was no standard and there were in fact differences between C++ vendors before that which allowed for variations in the semantics of the language. At that time I remember one vendor telling me that Stroustrup was wrong, so I can't see how some evolution is not a good thing.

                1 Reply Last reply
                0
                • G gggustafson

                  Over the many years that I have been programmer, I have detected a growing arrogance on the part of Microsoft employees. I find this strange because Microsoft depends so much upon its customer base. Yet, whenever some flaw is found in its software, Redmond is quick to argue that the bug is really a feature. This has occurred to me, personally, since Visual Studio 4. This arrogance spiked with the release of the C# programming language and its associated multiple .Net frameworks. Having been a member of the X3J9 Pascal technical committee (circa 1978), I am aware of what makes a “good” programming language. We teach these attributes to serious students of language design. Unfortunately, Redmond either didn’t take the classes or neglected their import. As a result, we have C# in its fourth generation (surprisingly not called "C#-4GL"). Generics, LINQ, and so forth have been added. Unfortunately, they were not part of the original C# language. They are "corrections" to missteps taken by Redmond in its attempt to be all things to all people. And they make my programming job much more difficult. I truly would like to see a new, simple, stripped-down version of C#. What I liked the most with the original C# language were the ArrayList and garbage collection. I believe that all the rest is unnecessary object oriented revenge. Peace.

                  Gus Gustafson

                  Z Offline
                  Z Offline
                  zecanard
                  wrote on last edited by
                  #50

                  I have learned that every time someone complains about a corporation's developers' arrogance, the real complaint is that said developers are not doing exactly what the complainer wants. The developers' philosophy becomes arrogance, and their explanations pompous lectures.

                  1 Reply Last reply
                  0
                  • S Stefan_Lang

                    :sigh: Yes, indeed. You don't always get the time required to get your code clean. I can in fact understand that in such circumstances you may feel forced to stick with goto. That however doesn't justify to make it available as part of a new language. Regarding efficiency I disagree though: you can always store the condition that you would use to trigger a goto in a boolean variale and then just skip over the remaining blocks of code. That takes virtually no time at all. That's what I usually do.

                    K Offline
                    K Offline
                    KP Lee
                    wrote on last edited by
                    #51

                    Personally, if code is long enough that you could start losing track of where the end statement is, its time to create a routine instead of using goto.

                    1 Reply Last reply
                    0
                    • J jschell

                      CPallini wrote:

                      If you like only the C# original features, then why don't use just them?

                      Based on your assertion you might as well claim that your coworkers can write code using fortran, cobol, assembly as well as C#. After all it is only a matter of personal choice and has no impact otherwise.

                      C Offline
                      C Offline
                      CPallini
                      wrote on last edited by
                      #52

                      Nope. For instance, I often use a subset of C++ for 'procedural' programming in small projects. However it is still C++ and won't require different build tools or knowledge.

                      Veni, vidi, vici.

                      J 1 Reply Last reply
                      0
                      • F Fran Porretto

                        I've heard a great deal of praise heaped on C#, but in my encounters with it to this point, I've always come away bruised. In part, that's because it's still changing (and VS .NET with it). In part, it's because I'm a dinosaur who expects the facilities I've come to know and love to remain available and convenient when I "upgrade." But more significant than those reasons or any others is this one: I dislike being "protected from myself."

                        I like pointers.
                        I prefer permissive type conversions.
                        I'm a high expert at picking floating-point numbers apart from their binary representations. (Ever seen old-style IBM floating-point? What about CDC's 60-bit version?)
                        If I can't substitute an address for an integer or vice-versa, I'll throw a fit.
                        And don't you dare move something I've put in allocated memory! I'll do my own "garbage collection," thanks very much.

                        My first language was assembler on a PDP-9. I moved from there to the Data General NOVA 1200, still programming in assembler, and from there to the PDP-11, and then to the Intel 8080, 8085, and Zilog Z80, still programming in assembler. Over those years, various persons attempted to convert me to the glories of FORTRAN, Pascal, Algol, APL, PL/I, LISP, and Forth. I spurned them all: not one of them permitted me to do everything I felt I might need to do in some hypothetical situation. When I was introduced to C, for the first time I felt I could "go machine-independent" without losing the full freedom of the machine.

                        Today I program in C++ and microcode for special-purpose devices. I'm uninterested in C#, Ada, or any other language that attempts to restrict what operations I can attempt. I find it puzzling that other software engineers are willing to accept such shackles. But hey, I told you already: I'm a dinosaur.

                        I wonder if you'll miss my sort when we're completely extinct...

                        (This message is programming you in ways you cannot detect. Be afraid.)

                        C Offline
                        C Offline
                        CPallini
                        wrote on last edited by
                        #53

                        I've balanced the downvote, because:

                        • Your point makes sense.
                        • Univoting a substantiated argument like yours is plain silly.

                        That said, I think C# is not a good language choice for you (and developers similar to you). On the other hand, there is a plethora of developers having different needs (e.g. liking better development speed than code performance) and I suppose C# targets the latter folks.

                        Veni, vidi, vici.

                        1 Reply Last reply
                        0
                        • J jschell

                          Pete O'Hanlon wrote:

                          As for the other features - in the most part, they are there to make the job of the day to day developer a lot easier

                          Unless you have some real statistics to back that up it is nothing but subjective nonsense. In my experience programmers spend most of their time dealing with design (even at the implementation level) issues, logic/design/architecture bugs, library learning/usage, and other issues of which the vast majority have nothing to do with language semantics. Now maybe you spend every day all year long doing nothing but constructing generic collections and linq expressions but that isn't what most developers do. So it isn't possible for a language construct to have a significant impact.

                          P Offline
                          P Offline
                          Pete OHanlon
                          wrote on last edited by
                          #54

                          Balanced the Univote. While I disagree with your arguments, you made them cogently so there's no reason for someone to downvote you.

                          jschell wrote:

                          maybe you spend every day all year long doing nothing but constructing generic collections and linq expressions

                          I wish. I spend most of my time now in project plans, bid and tender documents, as well as the company accounts.

                          *pre-emptive celebratory nipple tassle jiggle* - Sean Ewington

                          "Mind bleach! Send me mind bleach!" - Nagy Vilmos

                          My blog | My articles | MoXAML PowerToys | Mole 2010 - debugging made easier - my favourite utility

                          1 Reply Last reply
                          0
                          • G gggustafson

                            Over the many years that I have been programmer, I have detected a growing arrogance on the part of Microsoft employees. I find this strange because Microsoft depends so much upon its customer base. Yet, whenever some flaw is found in its software, Redmond is quick to argue that the bug is really a feature. This has occurred to me, personally, since Visual Studio 4. This arrogance spiked with the release of the C# programming language and its associated multiple .Net frameworks. Having been a member of the X3J9 Pascal technical committee (circa 1978), I am aware of what makes a “good” programming language. We teach these attributes to serious students of language design. Unfortunately, Redmond either didn’t take the classes or neglected their import. As a result, we have C# in its fourth generation (surprisingly not called "C#-4GL"). Generics, LINQ, and so forth have been added. Unfortunately, they were not part of the original C# language. They are "corrections" to missteps taken by Redmond in its attempt to be all things to all people. And they make my programming job much more difficult. I truly would like to see a new, simple, stripped-down version of C#. What I liked the most with the original C# language were the ArrayList and garbage collection. I believe that all the rest is unnecessary object oriented revenge. Peace.

                            Gus Gustafson

                            E Offline
                            E Offline
                            elun
                            wrote on last edited by
                            #55

                            Hmm and what we gonna do with pure C# program? arent these new ability or component ease are works ?

                            (--eLuN--)

                            1 Reply Last reply
                            0
                            • S Stefan_Lang

                              I've heard that argument over and over again. While I can perfectly understand that notion when I look at certain pieces of code, the fact that the code is so convoluted that goto is considered the best way to get out of it, is a very strong indication that you should refactor that code, not use goto. goto is a short circuit. That's the kind of thing a good programmer strives to avoid. Using it intentionally is reserved for dubious causes such as stealing a car. ;) P.S.: saying it may be 'the best thing to do' implies that there are other options. In my experience, programmers telling me 'that it's the best' judge it to be the best for all the wrong reasons. But anyway, it's at least partially subjective. In 26 years of C++ programming I've yet to see a piece of code that convinces me of using goto, but that's just me. Others may have different preferences.

                              C Offline
                              C Offline
                              Carlosian
                              wrote on last edited by
                              #56

                              Stefan_Lang wrote:

                              goto is a short circuit.

                              I'm honestly curious to know what you think of break and continue. Those are short-circuits too, just in a more limited context. But of course they can't jump to previous code which it seems to me is the most harmful use of goto.

                              S 1 Reply Last reply
                              0
                              • C CPallini

                                Nope. For instance, I often use a subset of C++ for 'procedural' programming in small projects. However it is still C++ and won't require different build tools or knowledge.

                                Veni, vidi, vici.

                                J Offline
                                J Offline
                                jschell
                                wrote on last edited by
                                #57

                                CPallini wrote:

                                However it is still C++ and won't require different build tools or knowledge.

                                I can assure you that a developer who has only used C#/Java experience will in fact "require different...knowledge" to maintain C++. And a developer who has experience in C#/Java/C++ is going to "request different ...knowledge" to maintain fortran/cobol too.

                                1 Reply Last reply
                                0
                                • R RedCatsRic

                                  This post could have been reduced to: I am too set in my ways and stubborn to learn a new generation of programming languages and the benefits that they offer. You can enjoy your pointers and manual memory management all you want, but you won't be writing any enterprise level web systems with them. And that's exactly the point, isn't it? Use the tool that works best for the job. If you can't see the benefits of a particular tool, that does not indicate that there aren't any; it only indicates that you are unable to recognize them.

                                  J Offline
                                  J Offline
                                  jschell
                                  wrote on last edited by
                                  #58

                                  RedCatsRic wrote:

                                  You can enjoy your pointers and manual memory management all you want, but you won't be writing any enterprise level web systems with them.

                                  Err...you do realize that C++ is and can be used for "enterprise" systems and for "web systems" right? As a very real and prominent example of that Apache is written in C++ (and/or C.)

                                  1 Reply Last reply
                                  0
                                  • S Stefan_Lang

                                    :sigh: Yes, indeed. You don't always get the time required to get your code clean. I can in fact understand that in such circumstances you may feel forced to stick with goto. That however doesn't justify to make it available as part of a new language. Regarding efficiency I disagree though: you can always store the condition that you would use to trigger a goto in a boolean variale and then just skip over the remaining blocks of code. That takes virtually no time at all. That's what I usually do.

                                    J Offline
                                    J Offline
                                    jschell
                                    wrote on last edited by
                                    #59

                                    Stefan_Lang wrote:

                                    That takes virtually no time at all

                                    That of course is the detail since if you are already optimizing a piece of code based on a measured (not guessed at) need then a conditional branch is in fact slower than an unconditional one.

                                    S 1 Reply Last reply
                                    0
                                    • S Stefan_Lang

                                      I've heard that argument over and over again. While I can perfectly understand that notion when I look at certain pieces of code, the fact that the code is so convoluted that goto is considered the best way to get out of it, is a very strong indication that you should refactor that code, not use goto. goto is a short circuit. That's the kind of thing a good programmer strives to avoid. Using it intentionally is reserved for dubious causes such as stealing a car. ;) P.S.: saying it may be 'the best thing to do' implies that there are other options. In my experience, programmers telling me 'that it's the best' judge it to be the best for all the wrong reasons. But anyway, it's at least partially subjective. In 26 years of C++ programming I've yet to see a piece of code that convinces me of using goto, but that's just me. Others may have different preferences.

                                      J Offline
                                      J Offline
                                      jschell
                                      wrote on last edited by
                                      #60

                                      Stefan_Lang wrote:

                                      In 26 years of C++ programming I've yet to see a piece of code that convinces me of using goto,

                                      There was an article/column in the C\C++ users Journal in that time period that was implementing printf (or maybe sprintf) which is part of the standard C library and it used goto quite a bit. As I remember it I doubt other constructs would have made the code more readable nor easier to understand. Other constructs might have been the same speed but introducing artificial conditionals would not have met that goal. And back then many applications would have been impacted by a slower implementation of that method.

                                      S 1 Reply Last reply
                                      0
                                      • C Carlosian

                                        Stefan_Lang wrote:

                                        goto is a short circuit.

                                        I'm honestly curious to know what you think of break and continue. Those are short-circuits too, just in a more limited context. But of course they can't jump to previous code which it seems to me is the most harmful use of goto.

                                        S Offline
                                        S Offline
                                        Stefan_Lang
                                        wrote on last edited by
                                        #61

                                        I am grudgingly willing ;) to accept these. Especially the use of break in a switch statement is something I do not know any good way around.

                                        1 Reply Last reply
                                        0
                                        • J jschell

                                          Stefan_Lang wrote:

                                          In 26 years of C++ programming I've yet to see a piece of code that convinces me of using goto,

                                          There was an article/column in the C\C++ users Journal in that time period that was implementing printf (or maybe sprintf) which is part of the standard C library and it used goto quite a bit. As I remember it I doubt other constructs would have made the code more readable nor easier to understand. Other constructs might have been the same speed but introducing artificial conditionals would not have met that goal. And back then many applications would have been impacted by a slower implementation of that method.

                                          S Offline
                                          S Offline
                                          Stefan_Lang
                                          wrote on last edited by
                                          #62

                                          *shrug* There was a time where I would contemplate other peoples programming styles in published media and maybe adapt some of it. But I have long since realized that everyone makes mistakes and just because something is published doesn't mean it's good. That said, I have to point out, again, that my argument was about language designers putting the goto command into a language, not programmers using what language designers gave them.

                                          J 1 Reply Last reply
                                          0
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          • Login

                                          • Don't have an account? Register

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Categories
                                          • Recent
                                          • Tags
                                          • Popular
                                          • World
                                          • Users
                                          • Groups