tag:blogger.com,1999:blog-6104420435021904082.post2444504055691459559..comments2024-03-13T12:21:27.016-05:00Comments on The Programmer's Paradox: The Power of ExpressionPaul W. Homerhttp://www.blogger.com/profile/02349253120538728302noreply@blogger.comBlogger8125tag:blogger.com,1999:blog-6104420435021904082.post-37600648670001695302008-03-05T09:31:00.000-06:002008-03-05T09:31:00.000-06:00Hi Ryan,Thanks for your comments, I'm glad my writ...Hi Ryan,<BR/><BR/>Thanks for your comments, I'm glad my writing has inspired you. You are right about the costs of making Java appeal to the masses, most things need to be watered-down before they become popular.<BR/><BR/>We're coming to another cross-roads. The software industry has been here before, back in early nineties. There were lots of specialized GUI languages such as Gupta Windows, Ingres 4GL and Power Builder. It is the calm that proceeds the storm. <BR/><BR/>No doubt, it will erupt again with a whole new collection of languages and tools trying to attract popularity. In the past it came down to Objective C and C++ fighting for attention.<BR/><BR/>One thing I'd like to see us admit this time is that medium and heavy weight programming tasks are very different from each other, so they can have different tools. One-size-fits-all is probably why we keep returning to the same problems.<BR/><BR/><BR/>Paul.Paul W. Homerhttps://www.blogger.com/profile/02349253120538728302noreply@blogger.comtag:blogger.com,1999:blog-6104420435021904082.post-35708654282640984832008-03-04T17:12:00.000-06:002008-03-04T17:12:00.000-06:00Paul, I just stumbled upon your blog today and hav...Paul, I just stumbled upon your blog today and have spent the last hour or so reading your last 3 entries (Testing Perspectives, Fundamental Coding Issues, and The Power of Expression). I must say your writing is enjoyable to read, and has sparked many thoughts of my own.<BR/><BR/>I think in the last couple of years, with the emergence of Ruby on Rails, we have seen quite a backlash in the Java world. When people saw how "easy" it was to make a Rails app, it made J2EE look silly (artificial complexity?). That's how, in my opinion, it all started, but now it has moved beyond Ruby and languages like Python, Haskell, Erlang, etc. have started to emerge in discussions that typically reserved themselves to mainstream languages like C/C++, C#, and Java. I know I have personally taken a interest in Haskell, not because I think it is "the solution" but because I think it is a step in the right direction, or as you may put it I think it has less of a degree of suckiness. <BR/><BR/>I think to a large extent the ever growing Java community is the cornerstone of its awkwardness. Look at how the Java community solves problems...it throws fifteen dozen solutions at it and hopes to God one sticks. You find yourself reading article after article about what solution is better and why, e.g. Spring /Tomcat/ActiveMQ versus traditional J2EE . By the time you're done reading everything (if you have the discipline to do research in the first place) you are so worn-out that you'll often times just go with the first solution that works against your arbitrary test-problem. Only to find out four months later that your arbitrary test problem didn't encompass the scope of the actual problem and now instead you think you need to use Vendor B's solution. Just look at the size and "quality" of Apache Commons, that's enough to scare you away from Java right there. If that isn't enough, tack on the fact that the language itself is growing new features almost as rapidly as new 3rd party libraries are being built! Just wrapping you head around the syntax of Java Generics is enough for a release in it's own right. Now they see all the fuss about the ease of Ruby/Python/Erlang/F#/etc. and they figure the solution is to just start throwing in more language functionality. For the love of God please stop! I taught myself to program on VB 3.0 as a teen, and then learned formally on C++. I was delighted when I first discovered Java (1.4), and remember how much more "elegant" it felt over C++. Today, Java more or less makes me depressed, not the language as much as the community. It's full of people who "know what they're talking about" and has it's head so far up design pattern's ass that Java has turned into a Factory for shitty design.<BR/><BR/>It's easy for me to throw stones, and I say all this realizing there are also some VERY VERY smart people involved in the Java community. It just seems that Java is trying to appeal to the masses more than it is trying to be a good language, and maybe that's because there are so many "corporate hands" inside Java. Maybe that's why languages like Haskell and Ruby are more appealing to me lately, because they (for the most part) do not have the problems that a large user base brings (that point could be argued for Ruby). Maybe that is what ultimately "dooms" all languages? Are there any languages that have not suffered complexity creep as it's user base grew? I'm not familiar enough to say for sure, but I would think C fits in this category?<BR/><BR/>For a language to be considered great does it need to appeal to the masses? I guess my metaphysical question is: Is a language great just by it's existence, or must it be validated by a majority vote?<BR/><BR/>If it's the latter I feel a catch 22 exists, because we will never all agree on a particular language being elegant. Some people love allocating their own memory because they are a 1337 hAcKeR that knows their stuff, while others don't ever want to deal with a pointer again in their life. Can there be a language that can account for all these differences? Or should there always be a divide? <BR/><BR/>At least this complexity creates a lot of demand though...nothing like job security.Unknownhttps://www.blogger.com/profile/04011935136575178435noreply@blogger.comtag:blogger.com,1999:blog-6104420435021904082.post-35736206304721833512008-02-27T14:01:00.000-06:002008-02-27T14:01:00.000-06:00Hi Neal, Thanks for commenting. I think the limita...Hi Neal, <BR/><BR/>Thanks for commenting. I think the limitations of a language certainly have an effect on 'how' you express something, but if 'what' you are trying to express is erratic, inconsistent, messy, overlapping, non-primitive, etc. the language is not your primary problem. <BR/><BR/>You can create a nice, consistent set of library interface calls for even the most horrible of languages. Sure, a better language would allow the implementation to be 'cooler', but any Turing complete language will do. In a real sense, I think the elegance of an interface (and its abstraction) is mostly independent of its expression. <BR/><BR/>Of course if you are going completely against the grain -- using 'for' loops in APL for instance -- the code is ugly because you are violating the spirit of the language, but that shouldn't stop you from creating a clean and balanced library at some level, even if it is funny underneath.<BR/><BR/><BR/>Paul.Paul W. Homerhttps://www.blogger.com/profile/02349253120538728302noreply@blogger.comtag:blogger.com,1999:blog-6104420435021904082.post-20984249431848053212008-02-27T12:39:00.000-06:002008-02-27T12:39:00.000-06:00"I'll dispense a little advice: Hey guys, the prob..."I'll dispense a little advice: Hey guys, the problem isn't that the language is missing stuff. The problem is that the libraries are damned awkward."<BR/><BR/>In many cases the awkwardness of the libraries is a result of trying to work around limitations of the language.Neal Gafterhttps://www.blogger.com/profile/08579466817032124881noreply@blogger.comtag:blogger.com,1999:blog-6104420435021904082.post-73380780934108919102008-02-15T12:51:00.000-06:002008-02-15T12:51:00.000-06:00Hi Andreas,There are probably lots of ways to semi...Hi Andreas,<BR/><BR/>There are probably lots of ways to semi-automate upgrading from one static representation to another, although there will always be some manual (intellectual) component. <BR/><BR/>I was really thinking about how I'd like to see more advanced versions of tools like cpan or yum directly integrated in the operating system so that 'programs' are installed consistently. Computers can manage all their own pieces and dependencies with far more precision than people can, but only if we find and build in the appropriate abstractions to make this happen.<BR/><BR/><BR/>Paul.Paul W. Homerhttps://www.blogger.com/profile/02349253120538728302noreply@blogger.comtag:blogger.com,1999:blog-6104420435021904082.post-90503149903985826002008-02-15T03:45:00.000-06:002008-02-15T03:45:00.000-06:00"Handling upgrades and old versions is yet another...<I>"Handling upgrades and old versions is yet another one of our great unsolved problems, that we love to ignore."</I><BR/><BR/>Unsolved only in the sense that it does not happen as if by magic. Dealing with more than one representation of the real data is just a lot of work.<BR/><BR/>Perhaps refactoring programs should automatically also refactor the data? Running into a serious scope problem here...and thinking of the talk referenced <A HREF="http://alarmingdevelopment.org/?p=85" REL="nofollow">here</A> (changing the GoF book does not automatically change every place that pattern is used).Andreas Kreyhttps://www.blogger.com/profile/18011171943440483489noreply@blogger.comtag:blogger.com,1999:blog-6104420435021904082.post-5395365501670601912008-02-12T09:28:00.000-06:002008-02-12T09:28:00.000-06:00Hi Sergey,Thanks for the comments. I've always lik...Hi Sergey,<BR/><BR/>Thanks for the comments. I've always like the idea of inheritance as a way to not duplicate code, but it is a horrible idea to use it for backward compatibility. <BR/><BR/>Handling upgrades and old versions is yet another one of our great unsolved problems, that we love to ignore. <BR/><BR/><BR/>Paul.Paul W. Homerhttps://www.blogger.com/profile/02349253120538728302noreply@blogger.comtag:blogger.com,1999:blog-6104420435021904082.post-80051902252824881272008-02-11T18:26:00.000-06:002008-02-11T18:26:00.000-06:00"The underlying libraries in Java are just damned ...<I>"The underlying libraries in Java are just damned awkward, and that translated into the coding practices being dammed awkward."</I> <BR/><BR/>Paul, <B>can't agree more!</B><BR/>The Java classes have been created by hundreds people, might be working under the same Sun, but apparently very different as for cultural approaches for development process. It's like a huge blog written by many people; with different habits, views, styles. And the worst thing about it, - they've produced different kinds of bugs!<BR/><BR/>However, I think the main problem here is the underlying <B>object orientation</B>:<BR/>The inheritance extends, - dramatically multiplies(!) - all the awkward complexity, for all generations of previous code! And we must always carry with us all that over-bloated stuff. <BR/>Even for the simplest programming tasks!<BR/><BR/>It's the price for the fast software development in Java!Sergеy Beloyhttps://www.blogger.com/profile/14859701714703647403noreply@blogger.com