Announcement

Collapse
No announcement yet.

Ubuntu's Unity Written In Qt/QML For "Unity Next"

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • #41
    Originally posted by BO$$ View Post
    I don't get why do people have something against OOP? Is it something in the linux culture to hate modern programming practices? If it's not assembly you're not man enough or what?
    OOP has been eliminated from the introductory CS curriculum at Carnegie-Mellon in favor of an introductory course to functional programming. They say that OOP "is eliminated entirely from the introductory curriculum, because it is both anti-modular and anti-parallel by its very nature, and hence unsuitable for a modern CS curriculum". And this is but one of the many criticisms of OOP.

    http://existentialtype.wordpress.com...p-to-freshmen/
    Last edited by Sergio; 03-04-2013, 08:26 PM. Reason: Typo

    Comment


    • #42
      Originally posted by Sergio View Post
      OOP has been eliminated from the introductory CS curriculum at Carnegie-Mellon in favor of an introductory course to functional programming. They say that OOP "is eliminated entirely from the introductory curriculum, because it is both anti-modular and anti-parallel by its very nature, and hence unsuitable for a modern CS curriculum". And this is but one of the many criticisms of OOP.

      http://existentialtype.wordpress.com...p-to-freshmen/
      I can't believe that they were not teaching FP before this. They should have been teaching all three alongside each other.

      Comment


      • #43
        Originally posted by pingufunkybeat View Post
        I can't believe that they were not teaching FP before this. They should have been teaching all three alongside each other.
        Yeah, well... What I find truly 'disturbing' is the whole "...because it is both anti-modular and anti-parallel by its very nature, and hence unsuitable for a modern CS curriculum".
        I'd think maybe the anti-parallel argument extends more generally to imperative programming, but they say that this is not the case; the problem is OOP.

        More information can be found here: http://reports-archive.adm.cs.cmu.ed...-CS-10-140.pdf

        Comment


        • #44
          Originally posted by Sergio View Post
          Yeah, well... What I find truly 'disturbing' is the whole "...because it is both anti-modular and anti-parallel by its very nature, and hence unsuitable for a modern CS curriculum".
          I'd think maybe the anti-parallel argument extends more generally to imperative programming, but they say that this is not the case; the problem is OOP.

          More information can be found here: http://reports-archive.adm.cs.cmu.ed...-CS-10-140.pdf
          well, they aren't so far away fropm truth as it seems at the first look. and i say that as someone quite oop affine.

          how powerfull oop is and allows for simple and elegant constructions, it also allows for more bad designs if not used right than C ever allowed. though, it is something one may get only the chance to see this in larger projects.

          though, there are various attempts in cutting down a lot of that power to put the developer back in line... as far as i have seen with very very bad results. leads to such bad though designs like java, where features where cut off, claimed they are not needed and make things worse and then you start doing ugly things around just to compensate for that.

          though, most common devs won't observe this. they actually indeed profit from this reduced modularity and features because they were never able to handle it. and this closes the circle to the thesis of that announcement

          though the funny thing is: i always tended to code oop style, even before i heared about oop the first time in my life, while coding in C


          edit: just a very small example about how oop can reduce modularity by its nature:
          while using C you have access to every method / module (what ever you define as a module) you can restricte in oop things very easy in such a way, that you totally lose all modularity. you declare fields and methods private or protected etc. thinking of controlling bad usage of your design, and end up often cutting down all roads of an efficient and effective way of modular extention or integration.

          what i mean is, that you have far more to plan into the "future" to not lock down future code development than in most other "styles" and it tends to overcomplicate things.
          Last edited by a user; 03-04-2013, 09:39 PM.

          Comment


          • #45
            Originally posted by Sergio View Post
            OOP has been eliminated from the introductory CS curriculum at Carnegie-Mellon in favor of an introductory course to functional programming. They say that OOP "is eliminated entirely from the introductory curriculum, because it is both anti-modular and anti-parallel by its very nature, and hence unsuitable for a modern CS curriculum". And this is but one of the many criticisms of OOP.

            http://existentialtype.wordpress.com...p-to-freshmen/
            Anti-modular? Surely they must be joking. When you're modeling objects you're breaking your program up into bits that are serving individual functions with intent for designing things so that you can just take the class out and use it elsewhere and use polymorphism to fit it to your own uses and otherwise. I mean modularity is kind of the entire point behind OOP.

            As far as anti-parallel goes I strongly disagree here too because parallelism is more a function of imperative languages themselves as stated by Sergio, and with languages beginning to pick up async keywords and such this issue becomes a whole lot smaller because you're no longer having to play games in that regard. Also I fail to see how OOP makes it harder as opposed to easier, at least compared to other imperative programming styles. Again you're breaking things down into components which is going to make work as split up and as isolated as possible, which makes things easier.

            I will however grant that functional languages do have a bit of an edge in parallelism because everything is const but these aren't reasons.. they're lies.

            Comment


            • #46
              Originally posted by Luke_Wolf View Post
              Anti-modular? Surely they must be joking. When you're modeling objects you're breaking your program up into bits that are serving individual functions with intent for designing things so that you can just take the class out and use it elsewhere and use polymorphism to fit it to your own uses and otherwise. I mean modularity is kind of the entire point behind OOP.

              As far as anti-parallel goes I strongly disagree here too because parallelism is more a function of imperative languages themselves as stated by Sergio, and with languages beginning to pick up async keywords and such this issue becomes a whole lot smaller because you're no longer having to play games in that regard. Also I fail to see how OOP makes it harder as opposed to easier, at least compared to other imperative programming styles. Again you're breaking things down into components which is going to make work as split up and as isolated as possible, which makes things easier.

              I will however grant that functional languages do have a bit of an edge in parallelism because everything is const but these aren't reasons.. they're lies.
              Good post. I found the wording curious myself. OOP may have its pitfalls but to call it anti-modular and anti-parallel in its "essence" is, indeed, a lie.

              Comment


              • #47
                Originally posted by a user View Post
                well, they aren't so far away fropm truth as it seems at the first look. and i say that as someone quite oop affine.
                Actually they are.. very far from the truth..
                Originally posted by a user View Post
                how powerfull oop is and allows for simple and elegant constructions, it also allows for more bad designs if not used right than C ever allowed. though, it is something one may get only the chance to see this in larger projects.
                The ability to shoot yourself in the foot doesn't inherently make things bad, if that was the case we should never have developed vehicular transportation and should all be walking everywhere.

                Originally posted by a user View Post
                though, there are various attempts in cutting down a lot of that power to put the developer back in line... as far as i have seen with very very bad results. leads to such bad though designs like java, where features where cut off, claimed they are not needed and make things worse and then you start doing ugly things around just to compensate for that.
                That would be Java and their asinine concepts of how a language should be designed, nobody else significant not even python really ascribes to that ideology, and particularly not C++ and C#.

                Originally posted by a user View Post
                though, most common devs won't observe this. they actually indeed profit from this reduced modularity and features because they were never able to handle it. and this closes the circle to the thesis of that announcement
                Sure and we all benefit from walking everywhere, but it doesn't do what we need to get done.

                Originally posted by a user View Post
                edit: just a very small example about how oop can reduce modularity by its nature:
                while using C you have access to every method / module (what ever you define as a module) you can restricte in oop things very easy in such a way, that you totally lose all modularity. you declare fields and methods private or protected etc. thinking of controlling bad usage of your design, and end up often cutting down all roads of an efficient and effective way of modular extention or integration.

                what i mean is, that you have far more to plan into the "future" to not lock down future code development than in most other "styles" and it tends to overcomplicate things.
                I don't think you understand what the word Modular means, as having a bunch of little black boxes that interact with each other is the very epitome of being modular
                Last edited by Luke_Wolf; 03-04-2013, 10:37 PM.

                Comment


                • #48
                  in truth the whole issue with OOP can be that in order to do things right you have to make things into modules, which can turn something that would otherwise be relatively simple into something very very complex. This is not to say that there aren't benefits in the long term to doing so but it can increases code complexity and provide more opportunity for bugs because of the increased line count for trying to force it, and it of course costs more development time to bring up. Again I go back to the chatbot example I used earlier, using a non-OOP imperative approach to this makes writing it trivial, and in most cases relatively easy to follow, however... you get extensibility and modularity benefits in the long term from going the OOP route even though it makes designing and writing said bot a pain in the neck. Seriously just think about trying to design a OOP IRC bot and compare that to thinking about designing it in other imperative techniques... It's multiple orders more complex.

                  Also some use cases don't really benefit from it, scripting for instance is naturally antagonistic to OOP due to the sheer simplicity that is required, and even if you did try to make OOP scripts there wouldn't really be much if any benefit to it.

                  Comment


                  • #49
                    Originally posted by Luke_Wolf View Post
                    in truth the whole issue with OOP can be that in order to do things right you have to make things into modules, which can turn something that would otherwise be relatively simple into something very very complex. This is not to say that there aren't benefits in the long term to doing so but it can increases code complexity and provide more opportunity for bugs because of the increased line count for trying to force it, and it of course costs more development time to bring up. Again I go back to the chatbot example I used earlier, using a non-OOP imperative approach to this makes writing it trivial, and in most cases relatively easy to follow, however... you get extensibility and modularity benefits in the long term from going the OOP route even though it makes designing and writing said bot a pain in the neck. Seriously just think about trying to design a OOP IRC bot and compare that to thinking about designing it in other imperative techniques... It's multiple orders more complex.

                    Also some use cases don't really benefit from it, scripting for instance is naturally antagonistic to OOP due to the sheer simplicity that is required, and even if you did try to make OOP scripts there wouldn't really be much if any benefit to it.
                    The way I see it, it is not so much about OOP being 'bad'; instead, the problem is thinking that OOP SHOULD be at the core of programming, that is, to think that OOP is fundamental to programming. I know all this is more an academic exercise than anything else, but nevertheless it is worth discussing; just because the industry does it like it does doesn't necessarily imply it is the natural, or best, way of doing things.
                    For example: Why isn't mathematics central to programming (in practice)? It is like you get all this 'empirical facts' and try to organize them in something called 'software engineering', which by the way it sometimes seems to be everything but ENGINEERING.

                    I'd like to quote mathematician and programmer Alexander Stepanov:

                    "I think that object orientedness is almost as much of a hoax as Artificial Intelligence. I have yet to see an interesting piece of code that comes from these OO people. In a sense, I am unfair to AI: I learned a lot of stuff from the MIT AI Lab crowd, they have done some really fundamental work: Bill Gosper's Hakmem is one of the best things for a programmer to read. AI might not have had a serious foundation, but it produced Gosper and Stallman (Emacs), Moses (Macsyma) and Sussman (Scheme, together with Guy Steele). I find OOP technically unsound. It attempts to decompose the world in terms of interfaces that vary on a single type. To deal with the real problems you need multisorted algebras - families of interfaces that span multiple types. I find OOP philosophically unsound. It claims that everything is an object. Even if it is true it is not very interesting - saying that everything is an object is saying nothing at all. I find OOP methodologically wrong. It starts with classes. It is as if mathematicians would start with axioms. You do not start with axioms - you start with proofs. Only when you have found a bunch of related proofs, can you come up with axioms. You end with axioms. The same thing is true in programming: you have to start with interesting algorithms. Only when you understand them well, can you come up with an interface that will let them work."

                    I'd like to seriously question the foundational character that OOP have been receiving for some time now; personally I'd take any time an "algebra for programming" over OOP, but yet again, it might be practically untainable.

                    What you guys think?

                    Comment


                    • #50
                      Originally posted by Sergio View Post
                      The way I see it, it is not so much about OOP being 'bad'; instead, the problem is thinking that OOP SHOULD be at the core of programming, that is, to think that OOP is fundamental to programming. I know all this is more an academic exercise than anything else, but nevertheless it is worth discussing; just because the industry does it like it does doesn't necessarily imply it is the natural, or best, way of doing things.
                      For example: Why isn't mathematics central to programming (in practice)? It is like you get all this 'empirical facts' and try to organize them in something called 'software engineering', which by the way it sometimes seems to be everything but ENGINEERING.

                      I'd like to quote mathematician and programmer Alexander Stepanov:

                      "I think that object orientedness is almost as much of a hoax as Artificial Intelligence. I have yet to see an interesting piece of code that comes from these OO people. In a sense, I am unfair to AI: I learned a lot of stuff from the MIT AI Lab crowd, they have done some really fundamental work: Bill Gosper's Hakmem is one of the best things for a programmer to read. AI might not have had a serious foundation, but it produced Gosper and Stallman (Emacs), Moses (Macsyma) and Sussman (Scheme, together with Guy Steele). I find OOP technically unsound. It attempts to decompose the world in terms of interfaces that vary on a single type. To deal with the real problems you need multisorted algebras - families of interfaces that span multiple types. I find OOP philosophically unsound. It claims that everything is an object. Even if it is true it is not very interesting - saying that everything is an object is saying nothing at all. I find OOP methodologically wrong. It starts with classes. It is as if mathematicians would start with axioms. You do not start with axioms - you start with proofs. Only when you have found a bunch of related proofs, can you come up with axioms. You end with axioms. The same thing is true in programming: you have to start with interesting algorithms. Only when you understand them well, can you come up with an interface that will let them work."

                      I'd like to seriously question the foundational character that OOP have been receiving for some time now; personally I'd take any time an "algebra for programming" over OOP, but yet again, it might be practically untainable.

                      What you guys think?
                      Well, see I disagree with that assessment because as much as programming has to do with math, programming isn't math. Programming is in truth about language and expressing and executing ideas. This is again not to say that it doesn't sometimes require a serious amount of math, but it in and of itself is not. At it's fundamental level you're giving directives to the computer in order to make it do something. This requires a means of doing so that is easy for people writing code to understand and that is easy for the computer to translate into something it can understand.

                      I would personally argue that OOP is for the most part the natural in terms of how this intermediate language shakes out, because here's the thing let's take an example sentence:
                      Sally went to the store and picked up a bunch of bright red apples
                      fundamentally this breaks down into two noun verb noun s where an object is acting upon another object in short
                      Sally goto store. Sally pickup apples
                      and of course these apple objects have the property of being bright red, even Databases are actually taught in an object oriented fashion... guess what normalization is? It's actually the process of breaking down tables of data into objects. In fact all of our data languages such as XML are object oriented, because you've got say a paragraph object with properties such as font being a certain type and size, as well as color, and data languages really can't not be object oriented.

                      Now implementation wise sometimes it's not the best thing to go with, however from a conceptual standpoint OOP is the "best" approach, because it most closely matches how our non-programming languages such as english are designed.

                      EDIT: Math is actually arguably another language with a different though similar target as programming languages. In short expressing calculations, as opposed to being designed to express ideas to a computer. Which then Math can be used as another language underneath a programming language since little further translation is needed for a computer to understand it
                      Last edited by Luke_Wolf; 03-05-2013, 12:31 AM.

                      Comment

                      Working...
                      X