<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/css" href="/stylesheets/rss.css"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>Object Mentor Blog: Ending the Era of Patronizing Language Design</title>
    <link>http://blog.objectmentor.com/articles/2009/07/13/ending-the-era-of-patronizing-language-design</link>
    <language>en-us</language>
    <ttl>40</ttl>
    <description></description>
    <item>
      <title>Ending the Era of Patronizing Language Design</title>
      <description>&lt;p&gt;Earlier this year, I was asked to speak at a Ruby Conference.   I was happy to go, but I also felt a bit out of place.  I haven&#8217;t done much Ruby, but I&#8217;ve admired the language from afar.  I have a number of friends who&#8217;ve left C++ and Java to jump toward Ruby and Python and for the most part, they are happy. They do great work, and they enjoy it.  They are living proof that the nightmare scenarios that people imagine about dynamic languages aren&#8217;t inevitable.  You can program safe, secure, high quality applications in dynamically typed languages. People do it all the time, but that&amp;#8217;s cultural knowledge. If you are in a culture, you hear about all of the things which are normal which appear odd from outside. If you aren&amp;#8217;t, you don&amp;#8217;t.&lt;/p&gt;

&lt;p&gt;This is pretty much the situation I&#8217;ve been in with Ruby, up to a point.  I haven&#8217;t written a large Ruby application.  I&#8217;ve tinkered around with the language and written utilities but as far as total immersion goes &#8212; no, I&#8217;ve never been totally immersed in the language but that hasn&#8217;t kept me from learning noticing interesting things at the edge. One of the striking things that I&#8217;ve noticed is that the attitude of Rubyists toward their language is a bit different.  They seem to have an &lt;i&gt;ethic of responsibility&lt;/i&gt; that I don&#8217;t see in many other language cultures.&lt;/p&gt;

&lt;p&gt;Ethic of responsibility?  What do I mean by that?&lt;/p&gt;

&lt;p&gt;I guess I can explain it this way.  In many language communities, people are very concerned with the &#8220;right way&#8221; to do things.  They learn all of the warts and edges of the language and they anticipate the ways that features could be misused.  Then, they starting writing advice and style guides &#8212; all the literature which tells you how to avoid problems in that language.  The advice goes on and on. Much of it centers around legitimate language defects.  Some languages make you work hard to use them well.  Other bits of advice, though, are really extensions of culture.  If a language gives you mechanisms to enforce design constraints, it doesn&#8217;t feel quite right to not use them.  As an example, consider &lt;code&gt;sealed&lt;/code&gt; and &lt;code&gt;final&lt;/code&gt; in C# and Java.  Both of those constructs do pretty much the same thing and people do go out of their way to advise people on how they should be used to protect abstractions.  It&#8217;s interesting, however, that languages like Ruby, Python, and Groovy don&#8217;t have anything similar, yet people do write solid code in those languages.&lt;/p&gt; 

&lt;p&gt;Let&#8217;s leave aside, for a minute, the debate over static and dynamic typing.  What I think is more important is the issue of tone.  In some languages you get the sense that the language designer is telling you that some things are very dangerous, so dangerous that we should prohibit them and have tools available to prohibit misuse of those features.  As a result, the entire community spends a lot of time on prescriptive advice and workarounds.  And, if the language doesn&#8217;t provide all of the features needed to lock things down in the way people are accustomed to, they become irate.&lt;/p&gt;

&lt;p&gt; 
I just haven&#8217;t noticed this in Ruby culture.&lt;/p&gt;

&lt;p&gt;  
In Ruby, you can do nearly anything imaginable.  You can change any class in the library, weave in aspect-y behavior and do absolutely insane things with meta-programming.  In other words, it&#8217;s all on you.  You are responsible.  If something goes wrong you have only yourself to blame.  You can&amp;#8217;t blame the language designer for not adding a feature because you can do it yourself, and you can&amp;#8217;t blame him for getting in your way because he didn&amp;#8217;t.&lt;/p&gt;

&lt;p&gt;
So, why aren&#8217;t more people crashing and burning?  I think there is a very good reason.  When you can do anything, you have to become more responsible.  You own your fate.  And, that, I think, is a situation which promotes responsibility.&lt;/p&gt;

&lt;p&gt;For years, in the software industry, we&#8217;ve made the assumption that some language features are just too powerful for the typical developer &#8212; too prone to misuse.  C++ avoided reflection and Java/C# avoided multiple-inheritance. In each case, however, we&#8217;ve discovered that the workarounds that programmers apply when they legitimately need a missing feature are worse than what the omission was meant to solve.  Blocks and closures are good immediate example.  There are tens of thousands of applications in the world today which contain duplication that you can really only remove with the template method design pattern or by creating a tiny class which encapsulates the variation.  If blocks or closures were available, programmers would be more likely to tackle the duplication and arrive at much less cluttered design.&lt;/p&gt;

&lt;p&gt;Meta-programming features are yet another example.  Business applications are rife with situations where you need to know the value, type, and name of a piece of data, yet we use languages in which these sorts of capabilities have to be hand-coded and over and over again. The fact that it took decades for the industry to arrive at something as useful as ActiveRecord in Rails is due primarily to the attitude that some language features are just too powerful for everyone to use.&lt;/p&gt;

&lt;p&gt;
We&#8217;ve paid a price for that attitude.  Fortunately, I think we are getting past it.  The newer breed of languages puts responsibility back on the developer.  But, language designers do persist in this sort of reasoning &#8212; this notion that some things should not be permitted.  If you want to see an example of this style of reasoning see the metaprogramming section in this blog of Bruce Eckel&#8217;s  ( &lt;a href=http://www.artima.com/weblogs/viewpost.jsp?thread=260578&gt;http://www.artima.com/weblogs/viewpost.jsp?thread=260578&lt;/a&gt; ).  I respect Bruce, and I realize he isn&#8217;t speaking as a language designer, but I offer that as a example of that type of reasoning &#8212; reasoning about what should be permitted in a language rather than what puts a bit more control and responsibility in the hands of programmers.  Maybe decorators work in 95% of the cases where you would want to do metaprogramming in an application, but there is a price to that choice, and it isn&#8217;t just the workarounds in 5% of the cases.  The additional price is a decreased sense of responsibility and ownership.  I think that those human dimensions have far more impact on software than many people suspect.&lt;/p&gt;

&lt;p&gt;
The fact of the matter is this: it is possible to create a mess in every language.  Language designers can&#8217;t prevent it. All they can do is determine which types of messes are possible and how hard they will be to create.  But, at the moment that they make those decisions, they are far removed from the specifics of an application.  Programmers aren&#8217;t.  They can be responsible. Ultimately, no one else can.&lt;/p&gt;</description>
      <pubDate>Mon, 13 Jul 2009 13:44:00 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:69e0768a-edc0-45fd-ac0c-38c8c7ff9cc5</guid>
      <author>Michael Feathers</author>
      <link>http://blog.objectmentor.com/articles/2009/07/13/ending-the-era-of-patronizing-language-design</link>
      <category>Michaels Musings</category>
    </item>
    <item>
      <title>"Ending the Era of Patronizing Language Design" by latin shoes</title>
      <description>&lt;p&gt;Thanks for sharing the information.It is definitely going to help me some time&lt;/p&gt;</description>
      <pubDate>Tue, 22 Jun 2010 04:49:03 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:7537d639-2b49-4acd-8f09-1fdeafe692fe</guid>
      <link>http://blog.objectmentor.com/articles/2009/07/13/ending-the-era-of-patronizing-language-design#comment-13522</link>
    </item>
    <item>
      <title>"Ending the Era of Patronizing Language Design" by jewellery</title>
      <description>&lt;p&gt;I surfed here through Google! Great job.&lt;/p&gt;</description>
      <pubDate>Tue, 22 Jun 2010 04:46:02 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:3adfa171-75f7-41d5-96b4-80c8c1cba66e</guid>
      <link>http://blog.objectmentor.com/articles/2009/07/13/ending-the-era-of-patronizing-language-design#comment-13490</link>
    </item>
    <item>
      <title>"Ending the Era of Patronizing Language Design" by Sten</title>
      <description>&lt;p&gt;Yes. Yes. Yes. Thank you. I can&amp;#8217;t stand it when people make you use &amp;#8220;final&amp;#8221; ... just in case somebody, somewhere, was going to abuse your non-final class down the lines. Hogwash.&lt;/p&gt;</description>
      <pubDate>Sun, 13 Jun 2010 12:00:59 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:31a6a8bc-81c7-478d-873d-c47d27a68b33</guid>
      <link>http://blog.objectmentor.com/articles/2009/07/13/ending-the-era-of-patronizing-language-design#comment-13018</link>
    </item>
    <item>
      <title>"Ending the Era of Patronizing Language Design" by guy who hates blanket rules</title>
      <description>&lt;p&gt;Well, &lt;strong&gt;I&amp;#8217;ve&lt;/strong&gt; seen prescriptive advice in the Ruby community. And it&amp;#8217;s about something you almost touch on, with closures: methods as a first class object.&lt;/p&gt;


	&lt;p&gt;I asked about Ruby&amp;#8217;s &amp;#8220;method&amp;#8221; method, which detaches a method from its object so you can pass it around, just like a lambda. I got a swift and strong berating from the Ruby community on IRC as to &amp;#8220;how you should use the language the way it was intended&amp;#8221;.&lt;/p&gt;


	&lt;p&gt;So tell me, IRC smugnuts, if it&amp;#8217;s not intended, why is it there?&lt;/p&gt;


	&lt;p&gt;In my experience, the Ruby community has the &lt;strong&gt;worst&lt;/strong&gt; of the holier-than-thou attitude about the right and wrong ways to write code.&lt;/p&gt;</description>
      <pubDate>Sat, 22 May 2010 15:06:19 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:8e06bc63-2a11-489a-9bff-7f4ab5adbf45</guid>
      <link>http://blog.objectmentor.com/articles/2009/07/13/ending-the-era-of-patronizing-language-design#comment-11940</link>
    </item>
    <item>
      <title>"Ending the Era of Patronizing Language Design" by magice</title>
      <description>&lt;p&gt;&lt;strong&gt;sign&lt;/strong&gt;&lt;/p&gt;


	&lt;p&gt;Talking about shamelessness.&lt;/p&gt;


	&lt;p&gt;In this age of &amp;#8220;library is everything,&amp;#8221; talking about personal responsibility is no more than a joke. It&amp;#8217;s like movies and novels depicting a guys going into a forest alone, with a big gun, a car, modern clothes, shooting down everything, and then talking shit about he (almost always he) not needing modernity and other people (yeah right, what&amp;#8217;s on your hand?)&lt;/p&gt;


	&lt;p&gt;Let&amp;#8217;s think about it. If you want personal responsibility, why don&amp;#8217;t you implement your own stuffs? Manage your own memory? Why do you keep on screaming about this language (actually, this implementation of this language) lacks XML parser or some exotic shit that Ruby or Python happens to provide? I have not looked at Ruby that closely, but Python shines as a good example: people essentially don&amp;#8217;t know what to do outside of the provided framework. There&amp;#8217;s only one way to do it, remember? Where does responsibility come from? Heaven?&lt;/p&gt;


	&lt;p&gt;On the other hand, typing, restriction, etc. represent discipline. No, those Rubyists and Pythonians want none. Why? Because &amp;#8220;it&amp;#8217;s all about ME,&amp;#8221; or, &amp;#8220;I WANT IT THIS WAY&amp;#8221;. Yeah right. Like how people talks shit about their &amp;#8220;freedom&amp;#8221; to throw insults at people. Or how teenagers want to be &amp;#8220;unique&amp;#8221; and &amp;#8220;creative&amp;#8221; and dumb as shit.&lt;/p&gt;


	&lt;p&gt;So much on responsibility.&lt;/p&gt;</description>
      <pubDate>Fri, 21 May 2010 18:20:40 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:915c4fd7-4263-4ea4-ba02-cea8d8211390</guid>
      <link>http://blog.objectmentor.com/articles/2009/07/13/ending-the-era-of-patronizing-language-design#comment-11845</link>
    </item>
    <item>
      <title>"Ending the Era of Patronizing Language Design" by par&#231;a TL kont&#246;r</title>
      <description>&lt;p&gt;I like This site! Thank you for your information&lt;/p&gt;</description>
      <pubDate>Fri, 09 Apr 2010 09:35:04 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:25b7a225-a3ea-4c01-b970-83ec91534566</guid>
      <link>http://blog.objectmentor.com/articles/2009/07/13/ending-the-era-of-patronizing-language-design#comment-9573</link>
    </item>
    <item>
      <title>"Ending the Era of Patronizing Language Design" by FLV extractor</title>
      <description>&lt;p&gt;????
...........&lt;/p&gt;</description>
      <pubDate>Thu, 08 Apr 2010 01:34:40 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:6449542a-d0d1-4ad6-b5d0-dbb52416f43a</guid>
      <link>http://blog.objectmentor.com/articles/2009/07/13/ending-the-era-of-patronizing-language-design#comment-9361</link>
    </item>
    <item>
      <title>"Ending the Era of Patronizing Language Design" by loz</title>
      <description>&lt;p&gt;?????&lt;/p&gt;</description>
      <pubDate>Sat, 10 Oct 2009 09:32:50 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:9e8fc9b7-3684-4ae7-9f4c-c8c6cf783ea2</guid>
      <link>http://blog.objectmentor.com/articles/2009/07/13/ending-the-era-of-patronizing-language-design#comment-4634</link>
    </item>
    <item>
      <title>"Ending the Era of Patronizing Language Design" by PT</title>
      <description>&lt;p&gt;1. Yes I agree&amp;#8230; what nonsense, nonsense I say!!!&lt;/p&gt;


	&lt;p&gt;2. The mistakes made by BRILLIANT people in designing languages such as C++ were not mistakes at the time, just reflective of a point in time&lt;/p&gt;


	&lt;p&gt;3. Shooting yourself in the foot is a good way to teach yourself not to!&lt;/p&gt;


	&lt;p&gt;4. Programs evolve, someone else&amp;#8217;s mess is another&amp;#8217;s masterpiece (e.g: the Linux kernel!)&lt;/p&gt;


	&lt;p&gt;5. Having more power at your fingertips means either you will crash and burn or learn to use it!&lt;/p&gt;


	&lt;p&gt;6. Though after having said all of this, you wouldn&amp;#8217;t rock climb on a cliff without a harness, not as a novice anyway!!  first you need to understand the risks, then proceed accordingly.&lt;/p&gt;


	&lt;p&gt;To Conclude: You have a point (but there is also merit in providing safety nets, as others have also mentioned!)&lt;/p&gt;</description>
      <pubDate>Mon, 05 Oct 2009 01:55:34 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:a709a917-43f7-4d57-abf6-335e18ab1e1f</guid>
      <link>http://blog.objectmentor.com/articles/2009/07/13/ending-the-era-of-patronizing-language-design#comment-4344</link>
    </item>
    <item>
      <title>"Ending the Era of Patronizing Language Design" by PFar</title>
      <description>&lt;p&gt;@Michael. Brilliant blog post by the way. Well done.&lt;/p&gt;</description>
      <pubDate>Tue, 15 Sep 2009 15:39:24 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:5e3a523d-1ccc-4999-ab33-ec50e3942eee</guid>
      <link>http://blog.objectmentor.com/articles/2009/07/13/ending-the-era-of-patronizing-language-design#comment-4083</link>
    </item>
    <item>
      <title>"Ending the Era of Patronizing Language Design" by PFar</title>
      <description>&lt;p&gt;@&amp;#8221;Roxy and Elsewhere&amp;#8221;&lt;/p&gt;


	&lt;p&gt;You stated that you don&amp;#8217;t like the author&amp;#8217;s statement on ActiveRecord. But you did not state * why * you don&amp;#8217;t like his statement.&lt;/p&gt;


	&lt;p&gt;Please enlighten the rest of us on why you take exception to his characterization.&lt;/p&gt;</description>
      <pubDate>Tue, 15 Sep 2009 15:38:19 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:4f4c4517-b115-46cf-a143-bccadaa7ac2e</guid>
      <link>http://blog.objectmentor.com/articles/2009/07/13/ending-the-era-of-patronizing-language-design#comment-4082</link>
    </item>
    <item>
      <title>"Ending the Era of Patronizing Language Design" by Roxy and Elsewhere</title>
      <description>&lt;p&gt;&amp;#8220;The fact that it took decades for the industry to arrive at something as useful as ActiveRecord in Rails is due primarily to the attitude that some language features are just too powerful for everyone to use.&amp;#8221;&lt;/p&gt;


	&lt;p&gt;Although I could agree with &lt;strong&gt;some&lt;/strong&gt; of the point if the article, in the right contexts, the statement above has so much wrong with it, I just can&amp;#8217;t take the author seriously. Indeed, the irony that such an uninformed statement was made in an article about freedom and being wise enough to wield it is thicker than Oatmeal.&lt;/p&gt;</description>
      <pubDate>Thu, 13 Aug 2009 18:37:46 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:f013e4a2-c41f-4d26-b1f9-9d93a36a75ee</guid>
      <link>http://blog.objectmentor.com/articles/2009/07/13/ending-the-era-of-patronizing-language-design#comment-3950</link>
    </item>
    <item>
      <title>"Ending the Era of Patronizing Language Design" by Samuel A. Falvo II</title>
      <description>&lt;p&gt;Grubert writes, &amp;#8220;I mean, if you&#8217;ve got your types well defined, how many hard-to-debug errors will result because someone passed in an Address parameter object rather then an Account parameter object?&amp;#8221;&lt;/p&gt;


	&lt;p&gt;As a professional software engineer who has worked with all variety of type-safe and dynamically-typed languages, &lt;strong&gt;A* *LOT&lt;/strong&gt;.&lt;/p&gt;


	&lt;p&gt;I&amp;#8217;ve seen this happen all-too-often, and &lt;strong&gt;ESPECIALLY&lt;/strong&gt; by people who, like you, feel they don&amp;#8217;t need type-safety in their languages.&lt;/p&gt;


	&lt;p&gt;Indeed, those who prefer type safety in their languages are the LEAST likely to make such mistakes.&lt;/p&gt;


	&lt;p&gt;Grubert continues, &amp;#8220;And how stupid would that programmer need to be to make such an error?&amp;#8221;&lt;/p&gt;


	&lt;p&gt;Not stupid at all.  Many of them have degrees one could only dream of acquiring&amp;#8212;physics, electrical engineering, discrete or analytic maths, etc. in addition to their comp-sci or comp-eng degrees.&lt;/p&gt;


	&lt;p&gt;But, more importantly, these people often have been in the field for decades.  Like me.&lt;/p&gt;


	&lt;p&gt;So don&amp;#8217;t even go there.&lt;/p&gt;</description>
      <pubDate>Tue, 11 Aug 2009 23:08:27 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:9fe71bf2-9628-4d30-a5e3-ef583e90f5d5</guid>
      <link>http://blog.objectmentor.com/articles/2009/07/13/ending-the-era-of-patronizing-language-design#comment-3921</link>
    </item>
    <item>
      <title>"Ending the Era of Patronizing Language Design" by artsrc</title>
      <description>&lt;p&gt;I am convinced.&lt;/p&gt;


	&lt;p&gt;Who can doubt that goto use and misuse were common when Djikstra wrote, and is rare today.  Culture has changed.  So Djikstra can be right (then), and be wrong (now).  Cost of the goto feature has declined.&lt;/p&gt;


	&lt;p&gt;For a collection of projects there is a return:&lt;/p&gt;


	&lt;p&gt;Return = Value &amp;#8211; Effort&lt;/p&gt;


	&lt;p&gt;A goto language feature has a positive or negative effect on return for a collection of projects &amp;#8211; programs and teams.   The sign of the effect on return for a feature usually depends on the collection of projects.&lt;/p&gt;


	&lt;p&gt;One characterization of a powerful feature is one with high costs in misuse and high benefits with use.&lt;/p&gt;


	&lt;p&gt;The combination of education to effect culture, and power in features, is an approach which is recognized to have higher return now, than in the past.&lt;/p&gt;</description>
      <pubDate>Mon, 27 Jul 2009 23:04:13 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:40b56da8-3599-4c8b-9a94-949e134524b4</guid>
      <link>http://blog.objectmentor.com/articles/2009/07/13/ending-the-era-of-patronizing-language-design#comment-3807</link>
    </item>
    <item>
      <title>"Ending the Era of Patronizing Language Design" by http://tradeskillsllc.blogspot.com</title>
      <description>&lt;p&gt;What are the critical thinking ethics learning tools to teach kids how to avoid organized crime through the course of their lives?&lt;/p&gt;


	&lt;p&gt;The wheel of Buddhist terms poster modular wall mural game. Doctoral dissertation for philosophy, title: The Interpenetration of Buddhist Practice and Classroom Teaching. Technocracy Ethics USA censorship Chinese military intelligence genius clones&lt;/p&gt;</description>
      <pubDate>Thu, 23 Jul 2009 09:45:29 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:5dbc864b-c5f1-435f-a6e9-78e6debe8b14</guid>
      <link>http://blog.objectmentor.com/articles/2009/07/13/ending-the-era-of-patronizing-language-design#comment-3789</link>
    </item>
    <item>
      <title>"Ending the Era of Patronizing Language Design" by Grubert</title>
      <description>&lt;p&gt;Static type languages feel safer to the corporate IT managers.
They imagine the type system will force the coders to cooperate, that the compiler will do the managing work for them.&lt;/p&gt;


	&lt;p&gt;But a strong type system doesn&amp;#8217;t really prevent that many bugs, it just feels like it should. Most non-trivial bugs are algorithmic. I used to think a large-developer-count project should always use a static type language, now I&amp;#8217;m not so sure.&lt;/p&gt;


	&lt;p&gt;I mean, if you&amp;#8217;ve got your types well defined, how many hard-to-debug errors will result because someone passed in an Address parameter object rather then an Account parameter object? And how stupid would that programmer need to be to make such an error?&lt;/p&gt;


	&lt;p&gt;I just finished a substantial project in Python, and now I think that OOP and design patterns are not all that essential when you&amp;#8217;ve got first class functions, closures and dynamic typing. I can spot a Java programmer doing Python a mile away, it&amp;#8217;s &lt;strong&gt;all&lt;/strong&gt; classes! :)&lt;/p&gt;</description>
      <pubDate>Wed, 22 Jul 2009 21:10:51 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:25401711-c538-4b09-a17a-2bbc5ec25e76</guid>
      <link>http://blog.objectmentor.com/articles/2009/07/13/ending-the-era-of-patronizing-language-design#comment-3784</link>
    </item>
    <item>
      <title>"Ending the Era of Patronizing Language Design" by PeterC</title>
      <description>&lt;p&gt;C is a language that assumes the programmer is responsible and will &amp;#8220;do the right thing.&amp;#8221; However, widespread use of C (and C++ in a C-like way) is a major source of buffer overflow vulnerabilities. The evidence is that programmers are not really all that &amp;#8220;responsible&amp;#8221; in the sense that oversights and errors are common.&lt;/p&gt;


	&lt;p&gt;I&amp;#8217;ve used the dynamic languages (Python) for certain things and it is possible to rapidly build programs that work with them. However, I wonder if anyone has used a dynamic language for a really large program&amp;#8230; such as 10 million lines of code created by 100 programmers spread of 5 different organizations. I also wonder if anyone has dared using a dynamic language in a safety critical application. Would you feel comfortable flying in a plane with Ruby code controlling the instruments?&lt;/p&gt;


	&lt;p&gt;On the other end of the spectrum is something like SPARK Ada. SPARK is a very limited subset of Ada with many constraints in what is and is not allowed. What do you get for this? You get the ability to statically prove that your code conforms to specified pre and post conditions. Note: &lt;strong&gt;statically&lt;/strong&gt; prove.&lt;/p&gt;</description>
      <pubDate>Fri, 17 Jul 2009 06:45:06 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:ffebb200-ed28-4fa1-9cec-e4ae530d08c6</guid>
      <link>http://blog.objectmentor.com/articles/2009/07/13/ending-the-era-of-patronizing-language-design#comment-3752</link>
    </item>
    <item>
      <title>"Ending the Era of Patronizing Language Design" by Steve Py</title>
      <description>&lt;p&gt;It&amp;#8217;s human nature. If we could all just accept something as being the &amp;#8220;best&amp;#8221; option at a given time and focus our energy on it there would be a lot less time, money, and energy wasted in the world. One software development language, one spoken language, one standard of measurements, etc. etc. etc. (So Socialist of me, but one application development language, one web development language, one database&amp;#8230;)&lt;/p&gt;


	&lt;p&gt;Put the energy into &lt;strong&gt;improving&lt;/strong&gt; the tool, not reinventing the wheel every time the trend points out that there may just be a &amp;#8220;better way&amp;#8221;.&lt;/p&gt;


	&lt;p&gt;Heck, let&amp;#8217;s just start small and agree on one, or at most two screw heads! Phillips vs. Slot vs. Robertson vs. Hex vs. Torque vs&amp;#8230;. ENOUGH! At least get rid of Slot. Just re-brand the damned things as paint can openers and be done with it.&lt;/p&gt;</description>
      <pubDate>Wed, 15 Jul 2009 22:05:23 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:8d8df8c9-a18d-4408-a452-2dba86630769</guid>
      <link>http://blog.objectmentor.com/articles/2009/07/13/ending-the-era-of-patronizing-language-design#comment-3745</link>
    </item>
    <item>
      <title>"Ending the Era of Patronizing Language Design" by Michael Feathers</title>
      <description>&lt;p&gt;Offh: I wasn&amp;#8217;t saying that I don&amp;#8217;t see the need for pointers, but rather that they can be constrained in managed memory environments.  I spend a lot of time in C and I know that you do have to touch the metal at times.  The trick is separating out those cases where you need to to that from the cases where you don&amp;#8217;t.&lt;/p&gt;</description>
      <pubDate>Wed, 15 Jul 2009 17:19:32 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:4784e6c6-a24f-4cb7-bbee-6abfeab252e4</guid>
      <link>http://blog.objectmentor.com/articles/2009/07/13/ending-the-era-of-patronizing-language-design#comment-3744</link>
    </item>
    <item>
      <title>"Ending the Era of Patronizing Language Design" by 0ffh</title>
      <description>&lt;p&gt;Michael: Just so! If you do systems programming, for example (as I do for part of my living): There you often need some way to directly access specific memory locations &amp;#8211; and pointers are the fastest and most convenient way to do this. When I code other stuff, I try to avoid them (unless they&amp;#8217;re just too convenient to resist, hehe).&lt;/p&gt;</description>
      <pubDate>Tue, 14 Jul 2009 20:10:32 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:39e3646d-6509-4da0-9d19-de4eb0f87384</guid>
      <link>http://blog.objectmentor.com/articles/2009/07/13/ending-the-era-of-patronizing-language-design#comment-3737</link>
    </item>
    <item>
      <title>"Ending the Era of Patronizing Language Design" by 0ffh</title>
      <description>&lt;p&gt;yup:
the programmer can fix the language,
but the language cannot fix the programmer =)&lt;/p&gt;</description>
      <pubDate>Tue, 14 Jul 2009 20:02:09 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:2452d213-de92-4f10-8a35-b10e401f9170</guid>
      <link>http://blog.objectmentor.com/articles/2009/07/13/ending-the-era-of-patronizing-language-design#comment-3736</link>
    </item>
    <item>
      <title>"Ending the Era of Patronizing Language Design" by Michael Feathers</title>
      <description>&lt;p&gt;Laurent: I knew someone would bring up that point.  Although, I thought their example would be pointers rather than goto.  Frankly, I think goto is okay to have in a language for the odd cases when you feel you have to use it.  Raw pointers in a managed memory language, on the other hand, are a harder issue.  The question is really whether you can do anything useful with them.&lt;/p&gt;</description>
      <pubDate>Tue, 14 Jul 2009 15:26:29 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:c291a39a-88b3-4b3a-ab34-240042335edd</guid>
      <link>http://blog.objectmentor.com/articles/2009/07/13/ending-the-era-of-patronizing-language-design#comment-3735</link>
    </item>
    <item>
      <title>"Ending the Era of Patronizing Language Design" by Wedge</title>
      <description>&lt;p&gt;Excellent!&lt;/p&gt;


	&lt;p&gt;I think it does come back to different cultures and different priorities and different ideas about responsibility. Some folks are very concerned with childproofing languages. But at best this helps only the lowest tier of developers, almost always at the cost of hamstringing the language for more advanced users, if for no other reason than that the language developers are wasting a lot of time on this rather than other features. Java is very much a blub language through and through, and it shows in the concentration on childproofing over capability or elegance. C# is somewhere in between but leaning heavily away from childproofness and more and more toward elegance, power, conciseness, etc.&lt;/p&gt;


	&lt;p&gt;Java is the Xanax of languages, it&amp;#8217;s got some nifty features that remove a lot of pain from, say, C++ development, but it&amp;#8217;s so hemmed in with childproofing that trying to do anything of value in the language becomes frustrating and cumbersome very quickly.&lt;/p&gt;


	&lt;p&gt;Languages should very much be designed to guide programmers into a &amp;#8220;pit of success&amp;#8221;, but attempting to design a language such that it&amp;#8217;s impossible to write bad code is itself an impossible task. No matter how safe, how clear, how well-designed a language is there will always be a way to misuse it horribly. You can&amp;#8217;t baby programmers as if they were children, and you can&amp;#8217;t make the world a 100% safe place. The world is messy, complicated, and dangerous. And it takes serious tools wielded by experienced, responsible craftspeople in order to build anything of value in such a world.&lt;/p&gt;


	&lt;p&gt;Look at any construction site, there are nail guns, hammers, saws, concrete, generators, compressed flammable gas, high ledges, etc. Imagine if all the tools of a construction worker were childproofed to such a degree that they could not injure themselves or others no matter how hard they tried. Such tools would be useless. Instead, the tools have reasonable safety measures put in place that are just enough so that responsible operators don&amp;#8217;t have to fear for their safety yet not too much so that the tools are completely useless.&lt;/p&gt;</description>
      <pubDate>Tue, 14 Jul 2009 15:14:56 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:c9027e5d-8a9c-4a00-a8f0-e2613c8e349e</guid>
      <link>http://blog.objectmentor.com/articles/2009/07/13/ending-the-era-of-patronizing-language-design#comment-3734</link>
    </item>
    <item>
      <title>"Ending the Era of Patronizing Language Design" by Laurent</title>
      <description>&lt;p&gt;Michael,&lt;/p&gt;


	&lt;p&gt;Reading this, I immediately though of Dijkstra&amp;#8217;s &amp;#8220;&lt;a href="http://www.cs.utexas.edu/users/EWD/ewd02xx/EWD215.PDF" rel="nofollow"&gt;Go To Statement Considered Harmful&lt;/a&gt;&amp;#8221;.&lt;/p&gt;


	&lt;p&gt;Are you saying that you disagree with that?&lt;/p&gt;</description>
      <pubDate>Tue, 14 Jul 2009 14:39:22 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:f33321ec-16c5-499c-971f-8268ae8b59a3</guid>
      <link>http://blog.objectmentor.com/articles/2009/07/13/ending-the-era-of-patronizing-language-design#comment-3733</link>
    </item>
    <item>
      <title>"Ending the Era of Patronizing Language Design" by Hans</title>
      <description>&lt;p&gt;Magice: &amp;#8220;In my opinion, Python out-javas Java in the department of restricting the programmers.&amp;#8221;&lt;/p&gt;


	&lt;p&gt;How, exactly? Python is more restrictive than Lisp, and the community can be pedantic sometimes, but I fail to see how Python-the-language restricts the programmer more than Java.&lt;/p&gt;


	&lt;p&gt;The only thing I can think of is the significant whitespace issue. Other than that, Python doesn&amp;#8217;t have all of the balls-and-chains that Java does. It doesn&amp;#8217;t require the public/private/protected/static/final/etc hodgepodge, there&amp;#8217;s no silly one-class-per-file rule, it has actual introspection, you can add/delete an object&amp;#8217;s attributes at runtime, no checked exceptions, etc. Not to mention that it doesn&amp;#8217;t have the static typing straightjacket. ... So what exactly does Python have that supposedly makes it restrictive, compared to Java?&lt;/p&gt;</description>
      <pubDate>Tue, 14 Jul 2009 13:26:37 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:93c83385-a7a7-4a06-b489-77c6e159f673</guid>
      <link>http://blog.objectmentor.com/articles/2009/07/13/ending-the-era-of-patronizing-language-design#comment-3732</link>
    </item>
  </channel>
</rss>
