<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: Python/Ruby: script languages, nothing more.</title>
	<atom:link href="http://zwitserloot.com/2006/10/01/pythonruby-script-languages-nothing-more/feed/" rel="self" type="application/rss+xml" />
	<link>http://zwitserloot.com/2006/10/01/pythonruby-script-languages-nothing-more/</link>
	<description></description>
	<lastBuildDate>Tue, 16 Feb 2010 12:31:46 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: Just grin and bear it&#8230; - Hacking away at GWT</title>
		<link>http://zwitserloot.com/2006/10/01/pythonruby-script-languages-nothing-more/comment-page-1/#comment-1723</link>
		<dc:creator>Just grin and bear it&#8230; - Hacking away at GWT</dc:creator>
		<pubDate>Mon, 19 Mar 2007 16:43:38 +0000</pubDate>
		<guid isPermaLink="false">http://www.zwitserloot.com/2006/10/01/pythonruby-script-languages-nothing-more/#comment-1723</guid>
		<description>[...] One of the strengths of GWT is that, due to java&#8217;s explicit static typing (I&#8217;ve talking about this before) GWT can determine, with very fine granularity, which code is actually used, and which code isn&#8217;t. [...]</description>
		<content:encoded><![CDATA[<p>[...] One of the strengths of GWT is that, due to java&#8217;s explicit static typing (I&#8217;ve talking about this before) GWT can determine, with very fine granularity, which code is actually used, and which code isn&#8217;t. [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: rzwitserloot</title>
		<link>http://zwitserloot.com/2006/10/01/pythonruby-script-languages-nothing-more/comment-page-1/#comment-224</link>
		<dc:creator>rzwitserloot</dc:creator>
		<pubDate>Sat, 14 Oct 2006 14:55:30 +0000</pubDate>
		<guid isPermaLink="false">http://www.zwitserloot.com/2006/10/01/pythonruby-script-languages-nothing-more/#comment-224</guid>
		<description>Covering all possible parameter types/values would certainly help, but once you make that a practical proposition, you are forced to dump some of python&#039;s dynamics by the wayside. It also forces you to think about the type in the first place. Once you&#039;re going through that trouble, you might as well just type 5 letters and prepend &#039;String&#039; to your function definition, don&#039;t you think?

Refactoring not breaking anything: If you don&#039;t use introspection (and you hardly ever need to) a refactor script is &lt;i&gt;&lt;b&gt;guaranteed&lt;/b&gt;&lt;/i&gt; not to break anything. For most introspection, eclipse is smart enough to figure out something may be going wrong, and sends you on an inspection tour past all dubious spots where eclipse thinks there might be trouble (reflection-using code that mentions a relevant class or method name in a string, for example). Re-ordering tests is not a refactor, AND, furthermore, if changing the order of the tests changes the operation of your testing suite, the full thing was buggy in the first place. Refactor scripts being so good you don&#039;t have to have a unit test to be sure everything still works is a luxury only available to languages with static typing, not latent typed languages.

As far as picking types when you write goes: You don&#039;t have to. You just write &#039;void&#039; as return type, for example, and then type your code. Once you&#039;ve written the return statement, eclipse shows you an error ( red underline) on the return line, as the return type is by definition not &#039;void&#039;. You then hit quick-fix (CTRL+1) and pick whatever makes the most sense off of the suggestions for changing the return type. At this point you must already have made the decision of what you will be returning as you just wrote a return statement.

However, none of that is very important. The &#039;role&#039; of an object &lt;i&gt;is&lt;/i&gt; its class, or interface, or what not. This is not nearly as obvious in python, but java&#039;s built that way from the ground up. In python you have a class with a &#039;shoot&#039; function and if that&#039;s all you are looking for, that&#039;s enough. In java, you need to square that &#039;role&#039; (anything that has a shoot function) away into a superclass or interface.

The importance of doing it that way becomes much more obvious when I decide to accidentally pass an instance of &#039;gun&#039; ot the function that wants anything with a shoot() function, instead of the slew of &#039;camera&#039; instances I&#039;ve been passing so far. Then you shoot yourself in the foot. Namespacing is nice, python doesn&#039;t have it for method calls. You&#039;re not going to call each python function net.productsite.appname.camera.shoot, are you? That would be ridiculous. In java, effectively, everything does have that name, but it&#039;s mostly invisible, and where it isn&#039;t, eclipse ALWAYS generates it for you (automatic import statement generation).

&quot;the earlier bugs are caught, the cheaper they are to fix.&quot; - amen! You&#039;re exactly right. Which is why I like java so much. Over half the bugs are caught as I write them. You can&#039;t catch em any earlier, and they are indeed stupendously cheap to fix. Usually 3 keystrokes. (CTRL+1, zero, once, or twice a tap on the down button, and enter). Programs do spend a lot of their time in maintainance, yes, which is again an argument to go with static typing. The savings of latent typing occur in a phase that is inconsequential in the &#039;big picture&#039;, yet without static typing you lose the ability for a whole lot of fun and useful abstractions from automated tools and IDEs to help you maintain it later.</description>
		<content:encoded><![CDATA[<p>Covering all possible parameter types/values would certainly help, but once you make that a practical proposition, you are forced to dump some of python&#8217;s dynamics by the wayside. It also forces you to think about the type in the first place. Once you&#8217;re going through that trouble, you might as well just type 5 letters and prepend &#8216;String&#8217; to your function definition, don&#8217;t you think?</p>
<p>Refactoring not breaking anything: If you don&#8217;t use introspection (and you hardly ever need to) a refactor script is <i><b>guaranteed</b></i> not to break anything. For most introspection, eclipse is smart enough to figure out something may be going wrong, and sends you on an inspection tour past all dubious spots where eclipse thinks there might be trouble (reflection-using code that mentions a relevant class or method name in a string, for example). Re-ordering tests is not a refactor, AND, furthermore, if changing the order of the tests changes the operation of your testing suite, the full thing was buggy in the first place. Refactor scripts being so good you don&#8217;t have to have a unit test to be sure everything still works is a luxury only available to languages with static typing, not latent typed languages.</p>
<p>As far as picking types when you write goes: You don&#8217;t have to. You just write &#8216;void&#8217; as return type, for example, and then type your code. Once you&#8217;ve written the return statement, eclipse shows you an error ( red underline) on the return line, as the return type is by definition not &#8216;void&#8217;. You then hit quick-fix (CTRL+1) and pick whatever makes the most sense off of the suggestions for changing the return type. At this point you must already have made the decision of what you will be returning as you just wrote a return statement.</p>
<p>However, none of that is very important. The &#8216;role&#8217; of an object <i>is</i> its class, or interface, or what not. This is not nearly as obvious in python, but java&#8217;s built that way from the ground up. In python you have a class with a &#8217;shoot&#8217; function and if that&#8217;s all you are looking for, that&#8217;s enough. In java, you need to square that &#8216;role&#8217; (anything that has a shoot function) away into a superclass or interface.</p>
<p>The importance of doing it that way becomes much more obvious when I decide to accidentally pass an instance of &#8216;gun&#8217; ot the function that wants anything with a shoot() function, instead of the slew of &#8216;camera&#8217; instances I&#8217;ve been passing so far. Then you shoot yourself in the foot. Namespacing is nice, python doesn&#8217;t have it for method calls. You&#8217;re not going to call each python function net.productsite.appname.camera.shoot, are you? That would be ridiculous. In java, effectively, everything does have that name, but it&#8217;s mostly invisible, and where it isn&#8217;t, eclipse ALWAYS generates it for you (automatic import statement generation).</p>
<p>&#8220;the earlier bugs are caught, the cheaper they are to fix.&#8221; &#8211; amen! You&#8217;re exactly right. Which is why I like java so much. Over half the bugs are caught as I write them. You can&#8217;t catch em any earlier, and they are indeed stupendously cheap to fix. Usually 3 keystrokes. (CTRL+1, zero, once, or twice a tap on the down button, and enter). Programs do spend a lot of their time in maintainance, yes, which is again an argument to go with static typing. The savings of latent typing occur in a phase that is inconsequential in the &#8216;big picture&#8217;, yet without static typing you lose the ability for a whole lot of fun and useful abstractions from automated tools and IDEs to help you maintain it later.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Damien</title>
		<link>http://zwitserloot.com/2006/10/01/pythonruby-script-languages-nothing-more/comment-page-1/#comment-223</link>
		<dc:creator>Damien</dc:creator>
		<pubDate>Sat, 14 Oct 2006 10:55:21 +0000</pubDate>
		<guid isPermaLink="false">http://www.zwitserloot.com/2006/10/01/pythonruby-script-languages-nothing-more/#comment-223</guid>
		<description>&quot;a bug in the tests&quot;
I mean you don&#039;t need complete test coverage. If you include all possible parameter values in your notion of coverage that is equivalent to testing all possible executions of the program, so it&#039;s absurd. Just relax and accept to break the system from time to time or add a test on demand.

&quot;Refactoring shouldn’t break any behaviour, period&quot;
That&#039;s impossible. Perfectly valid refactorings from a static point of view can break apps that use introspection for instance... in JUnit if you move methods around that will probably change the execution order of the tests. In this case it&#039;s OK but it&#039;s still a change in behaviour. So refactoring really depends on which behavior you want to preserve.

&quot;it’s static typing that helps avoid early choices, and dynamic typing that forces you into them&quot;
Sure you can change a type after the fact, but you did have to think about it in the first place, when what&#039;s actually important is the role of the object, not its static type.

&quot;What kind of weird argument is this for in the first place?&quot;
Simply that the distinction between programming and debugging is not clear-cut. Most of the life of an application is in maintenance, and even in the initial development phase, the earlier bugs are caught, the cheaper they are to fix. So in the end I like to see programming as fixing bugs, the first one being &quot;d&#039;oh, my program doesn&#039;t exist&quot; :-)</description>
		<content:encoded><![CDATA[<p>&#8220;a bug in the tests&#8221;<br />
I mean you don&#8217;t need complete test coverage. If you include all possible parameter values in your notion of coverage that is equivalent to testing all possible executions of the program, so it&#8217;s absurd. Just relax and accept to break the system from time to time or add a test on demand.</p>
<p>&#8220;Refactoring shouldn’t break any behaviour, period&#8221;<br />
That&#8217;s impossible. Perfectly valid refactorings from a static point of view can break apps that use introspection for instance&#8230; in JUnit if you move methods around that will probably change the execution order of the tests. In this case it&#8217;s OK but it&#8217;s still a change in behaviour. So refactoring really depends on which behavior you want to preserve.</p>
<p>&#8220;it’s static typing that helps avoid early choices, and dynamic typing that forces you into them&#8221;<br />
Sure you can change a type after the fact, but you did have to think about it in the first place, when what&#8217;s actually important is the role of the object, not its static type.</p>
<p>&#8220;What kind of weird argument is this for in the first place?&#8221;<br />
Simply that the distinction between programming and debugging is not clear-cut. Most of the life of an application is in maintenance, and even in the initial development phase, the earlier bugs are caught, the cheaper they are to fix. So in the end I like to see programming as fixing bugs, the first one being &#8220;d&#8217;oh, my program doesn&#8217;t exist&#8221; <img src='http://zwitserloot.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>By: rzwitserloot</title>
		<link>http://zwitserloot.com/2006/10/01/pythonruby-script-languages-nothing-more/comment-page-1/#comment-220</link>
		<dc:creator>rzwitserloot</dc:creator>
		<pubDate>Fri, 13 Oct 2006 15:11:23 +0000</pubDate>
		<guid isPermaLink="false">http://www.zwitserloot.com/2006/10/01/pythonruby-script-languages-nothing-more/#comment-220</guid>
		<description>&#039;a bug in the tests&#039;? You consider less than 100% code coverage a bug? Get real - you can&#039;t get 100% code coverage for a practical project. It just doesn&#039;t happen, heck, you can prove that you can&#039;t get that far using some creative application of the halting problem.

Refactoring shouldn&#039;t break any behaviour, period. That&#039;s the point and meaning of a refactor job - to restructure code without changing what it does in any way.

Refactoring IS for avoiding the &#039;early choice&#039; dilemma. Why use refactoring only to correct bad design mistakes? Tell you what, I&#039;ll call it a &#039;modification script&#039; instead of a &#039;refactor script&#039;. It&#039;s exactly the same thing, just a differenet name. Would that help?

Your exact example is something you can fix in 5 seconds, with 100% guarantee that everything is semantically unchanged, with an eclipse/netbeans/IDEA refactor script. You can NOT PULL THAT TRICK in python, and while in many cases you don&#039;t need any names, you still need a name for your classes, or your functions, and changing those in python is a major headache job. You&#039;ve got it the wrong way around - it&#039;s static typing that helps avoid early choices, and dynamic typing that forces you into them.

As far as your context menu goes: In small hobby projects that&#039;ll work... somewhat. In large system projects, it won&#039;t. In that contextual menu you&#039;ll get every function in your whole app, because the text editor has no clue what &#039;x&#039; might mean when you do x.(hit auto complete button here), so it gives you everything. In java, you eliminate 99.99% of all possible options just  by typing your identifiers. The options that remain are then guaranteed.

programming and debugging are the same thing, but obviously you don&#039;t do them at the same time. What kind of weird argument is this for in the first place? I mean, you&#039;re mix and matching word definitions here.</description>
		<content:encoded><![CDATA[<p>&#8216;a bug in the tests&#8217;? You consider less than 100% code coverage a bug? Get real &#8211; you can&#8217;t get 100% code coverage for a practical project. It just doesn&#8217;t happen, heck, you can prove that you can&#8217;t get that far using some creative application of the halting problem.</p>
<p>Refactoring shouldn&#8217;t break any behaviour, period. That&#8217;s the point and meaning of a refactor job &#8211; to restructure code without changing what it does in any way.</p>
<p>Refactoring IS for avoiding the &#8216;early choice&#8217; dilemma. Why use refactoring only to correct bad design mistakes? Tell you what, I&#8217;ll call it a &#8216;modification script&#8217; instead of a &#8216;refactor script&#8217;. It&#8217;s exactly the same thing, just a differenet name. Would that help?</p>
<p>Your exact example is something you can fix in 5 seconds, with 100% guarantee that everything is semantically unchanged, with an eclipse/netbeans/IDEA refactor script. You can NOT PULL THAT TRICK in python, and while in many cases you don&#8217;t need any names, you still need a name for your classes, or your functions, and changing those in python is a major headache job. You&#8217;ve got it the wrong way around &#8211; it&#8217;s static typing that helps avoid early choices, and dynamic typing that forces you into them.</p>
<p>As far as your context menu goes: In small hobby projects that&#8217;ll work&#8230; somewhat. In large system projects, it won&#8217;t. In that contextual menu you&#8217;ll get every function in your whole app, because the text editor has no clue what &#8216;x&#8217; might mean when you do x.(hit auto complete button here), so it gives you everything. In java, you eliminate 99.99% of all possible options just  by typing your identifiers. The options that remain are then guaranteed.</p>
<p>programming and debugging are the same thing, but obviously you don&#8217;t do them at the same time. What kind of weird argument is this for in the first place? I mean, you&#8217;re mix and matching word definitions here.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Damien</title>
		<link>http://zwitserloot.com/2006/10/01/pythonruby-script-languages-nothing-more/comment-page-1/#comment-219</link>
		<dc:creator>Damien</dc:creator>
		<pubDate>Fri, 13 Oct 2006 10:15:59 +0000</pubDate>
		<guid isPermaLink="false">http://www.zwitserloot.com/2006/10/01/pythonruby-script-languages-nothing-more/#comment-219</guid>
		<description>&quot;Any rare conditions not covered by your unit tests will automatically break&quot;
Yeah well, bugs happen. In this case it&#039;s a bug in the tests... And by the way, how do you specify which behavior your refactoring shouldn&#039;t break? Should that really be just the language semantics or something more on the domain level?

&quot;Typing does not force early choices - that’s what refactoring is for.&quot;
No. Refactoring is for fixing things when you realise some (often good at the time) choices now appear to be bad because your understanding of the system or the requirements have evolved. By forcing early choices I meant forcing early decisions like choosing the name for an interface to declare a variable when you haven&#039;t written the code that uses that variable yet (ie., you don&#039;t know yet which messages you will send to objects in this variable).

&quot;In latent-typed languages you don’t know where to look&quot;
Yes I do, it&#039;s in the contextual menu :) well of course, if the method happens to have a popular name and different homonyms are in the current namespace, I have some guessing to do.

&quot;I’m guessing Guido is better at python than you are.&quot;
Yes obviously. And Bjarne is way better at C++ than me. I just happen to have different taste for language design.

&quot;typing and debugging are by no means the same thing.&quot;
I meant programming and debugging.</description>
		<content:encoded><![CDATA[<p>&#8220;Any rare conditions not covered by your unit tests will automatically break&#8221;<br />
Yeah well, bugs happen. In this case it&#8217;s a bug in the tests&#8230; And by the way, how do you specify which behavior your refactoring shouldn&#8217;t break? Should that really be just the language semantics or something more on the domain level?</p>
<p>&#8220;Typing does not force early choices &#8211; that’s what refactoring is for.&#8221;<br />
No. Refactoring is for fixing things when you realise some (often good at the time) choices now appear to be bad because your understanding of the system or the requirements have evolved. By forcing early choices I meant forcing early decisions like choosing the name for an interface to declare a variable when you haven&#8217;t written the code that uses that variable yet (ie., you don&#8217;t know yet which messages you will send to objects in this variable).</p>
<p>&#8220;In latent-typed languages you don’t know where to look&#8221;<br />
Yes I do, it&#8217;s in the contextual menu <img src='http://zwitserloot.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  well of course, if the method happens to have a popular name and different homonyms are in the current namespace, I have some guessing to do.</p>
<p>&#8220;I’m guessing Guido is better at python than you are.&#8221;<br />
Yes obviously. And Bjarne is way better at C++ than me. I just happen to have different taste for language design.</p>
<p>&#8220;typing and debugging are by no means the same thing.&#8221;<br />
I meant programming and debugging.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: rzwitserloot</title>
		<link>http://zwitserloot.com/2006/10/01/pythonruby-script-languages-nothing-more/comment-page-1/#comment-217</link>
		<dc:creator>rzwitserloot</dc:creator>
		<pubDate>Thu, 12 Oct 2006 13:27:14 +0000</pubDate>
		<guid isPermaLink="false">http://www.zwitserloot.com/2006/10/01/pythonruby-script-languages-nothing-more/#comment-217</guid>
		<description>Damien: No, &#039;exercise the system enough&#039; doesn&#039;t work - the only workable definition of &#039;enough&#039; is 100%. Any rare conditions not covered by your unit tests will automatically break if any refactoring is done. Refactor scripts only work well when you -know- nothing gets broken by them.

Typing does not force early choices - that&#039;s what refactoring is for. In practice, most changes of types force you to also change callers, but with java, you at least know, for SURE, were to find those callers. In latent-typed languages you don&#039;t know where to look (short of the 100% code coverage plan).

getUsersNames() -&gt; really? Check some real code. You&#039;ll find tons of ambiguous names. You can NOT stuff the entirety of parameters, return type, and potential fault behaviour into one method name, that&#039;s obvious.

checking your own stack works only during runtime. Ctrl+clicking on any identifier in eclipse works as you write the code. The closest that latent typing languages can get is REPL antics, but that isn&#039;t the same thing.

as to redundancy of putting return type in the docs: The official guideline for pydocs disagree with you there. I&#039;m guessing Guido is better at python than you are.

typing and debugging are by no means the same thing. To wit: I needed some rather odd approach to parsing and writing JSON. In 90 minutes I wrote the whole shebang from scratch, whilst distracted (watching a House episode), and non-automated, post-written tests then showed the whole thing was bug free. With latent typing that wouldn&#039;t have happend, as I correct plenty of redlines as I was typing.</description>
		<content:encoded><![CDATA[<p>Damien: No, &#8216;exercise the system enough&#8217; doesn&#8217;t work &#8211; the only workable definition of &#8216;enough&#8217; is 100%. Any rare conditions not covered by your unit tests will automatically break if any refactoring is done. Refactor scripts only work well when you -know- nothing gets broken by them.</p>
<p>Typing does not force early choices &#8211; that&#8217;s what refactoring is for. In practice, most changes of types force you to also change callers, but with java, you at least know, for SURE, were to find those callers. In latent-typed languages you don&#8217;t know where to look (short of the 100% code coverage plan).</p>
<p>getUsersNames() -> really? Check some real code. You&#8217;ll find tons of ambiguous names. You can NOT stuff the entirety of parameters, return type, and potential fault behaviour into one method name, that&#8217;s obvious.</p>
<p>checking your own stack works only during runtime. Ctrl+clicking on any identifier in eclipse works as you write the code. The closest that latent typing languages can get is REPL antics, but that isn&#8217;t the same thing.</p>
<p>as to redundancy of putting return type in the docs: The official guideline for pydocs disagree with you there. I&#8217;m guessing Guido is better at python than you are.</p>
<p>typing and debugging are by no means the same thing. To wit: I needed some rather odd approach to parsing and writing JSON. In 90 minutes I wrote the whole shebang from scratch, whilst distracted (watching a House episode), and non-automated, post-written tests then showed the whole thing was bug free. With latent typing that wouldn&#8217;t have happend, as I correct plenty of redlines as I was typing.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Damien</title>
		<link>http://zwitserloot.com/2006/10/01/pythonruby-script-languages-nothing-more/comment-page-1/#comment-211</link>
		<dc:creator>Damien</dc:creator>
		<pubDate>Wed, 11 Oct 2006 22:12:12 +0000</pubDate>
		<guid isPermaLink="false">http://www.zwitserloot.com/2006/10/01/pythonruby-script-languages-nothing-more/#comment-211</guid>
		<description>&quot;writing full, 100% coverage tests for the whole shebang? Come back when you have.&quot;
Heh, first, I try to test first then code. Second, I don&#039;t need 100% coverage, I just need to exercise the system enough, with a variable definition of enough.

&quot;Typing gives lots of useful hints about implementation.&quot;
Maybe but it also forces too early choices.

&quot;If I see a getUsers() method&quot;
Just the name means that it returns a collection of user objects... it would be named getUsersNames() if it returned strings.

&quot;I can always ctrl+click on ‘User’ and immediatly warp to the User class, check out what’s in there.&quot;
I can always ask for senders of this message and see how the method is used.

&quot;include the ‘return type’ in the docs.&quot;
That would be redundant with the code, and I care more about the role of the object (a subset of it&#039;s protocol maybe).

&quot;outdated, and an officialized notation that allows all IDEs to parse this data and help you along as you type.&quot;
Granted, writing precise completion without static types is more difficult, but it works OK for me.

&quot;As far as your debugger comments: typing is mostly useful while you are writing code, not debugging it.&quot;
Isn&#039;t that the same thing ?</description>
		<content:encoded><![CDATA[<p>&#8220;writing full, 100% coverage tests for the whole shebang? Come back when you have.&#8221;<br />
Heh, first, I try to test first then code. Second, I don&#8217;t need 100% coverage, I just need to exercise the system enough, with a variable definition of enough.</p>
<p>&#8220;Typing gives lots of useful hints about implementation.&#8221;<br />
Maybe but it also forces too early choices.</p>
<p>&#8220;If I see a getUsers() method&#8221;<br />
Just the name means that it returns a collection of user objects&#8230; it would be named getUsersNames() if it returned strings.</p>
<p>&#8220;I can always ctrl+click on ‘User’ and immediatly warp to the User class, check out what’s in there.&#8221;<br />
I can always ask for senders of this message and see how the method is used.</p>
<p>&#8220;include the ‘return type’ in the docs.&#8221;<br />
That would be redundant with the code, and I care more about the role of the object (a subset of it&#8217;s protocol maybe).</p>
<p>&#8220;outdated, and an officialized notation that allows all IDEs to parse this data and help you along as you type.&#8221;<br />
Granted, writing precise completion without static types is more difficult, but it works OK for me.</p>
<p>&#8220;As far as your debugger comments: typing is mostly useful while you are writing code, not debugging it.&#8221;<br />
Isn&#8217;t that the same thing ?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: rzwitserloot</title>
		<link>http://zwitserloot.com/2006/10/01/pythonruby-script-languages-nothing-more/comment-page-1/#comment-208</link>
		<dc:creator>rzwitserloot</dc:creator>
		<pubDate>Sun, 08 Oct 2006 02:18:37 +0000</pubDate>
		<guid isPermaLink="false">http://www.zwitserloot.com/2006/10/01/pythonruby-script-languages-nothing-more/#comment-208</guid>
		<description>I&#039;ve done some googling. I think I found whom you are referring to. However without a further link with specifics I can&#039;t really answer that.</description>
		<content:encoded><![CDATA[<p>I&#8217;ve done some googling. I think I found whom you are referring to. However without a further link with specifics I can&#8217;t really answer that.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: lol</title>
		<link>http://zwitserloot.com/2006/10/01/pythonruby-script-languages-nothing-more/comment-page-1/#comment-207</link>
		<dc:creator>lol</dc:creator>
		<pubDate>Sat, 07 Oct 2006 20:31:35 +0000</pubDate>
		<guid isPermaLink="false">http://www.zwitserloot.com/2006/10/01/pythonruby-script-languages-nothing-more/#comment-207</guid>
		<description>Wow, are you trying to dethrone hani?</description>
		<content:encoded><![CDATA[<p>Wow, are you trying to dethrone hani?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: rzwitserloot</title>
		<link>http://zwitserloot.com/2006/10/01/pythonruby-script-languages-nothing-more/comment-page-1/#comment-198</link>
		<dc:creator>rzwitserloot</dc:creator>
		<pubDate>Wed, 04 Oct 2006 12:53:22 +0000</pubDate>
		<guid isPermaLink="false">http://www.zwitserloot.com/2006/10/01/pythonruby-script-languages-nothing-more/#comment-198</guid>
		<description>&quot;If typing was a substitute for tests a successful compile would confirm your program works correctly. You’re quite simply not making a fair comparison. Proper tests take longer because they are not as simple and mindless as just checking types.&quot;

I never claimed any such thing. I merely claimed that using (100% coverage) unit tests to achieve the same thing as what typing can do is a ridiculous idea.</description>
		<content:encoded><![CDATA[<p>&#8220;If typing was a substitute for tests a successful compile would confirm your program works correctly. You’re quite simply not making a fair comparison. Proper tests take longer because they are not as simple and mindless as just checking types.&#8221;</p>
<p>I never claimed any such thing. I merely claimed that using (100% coverage) unit tests to achieve the same thing as what typing can do is a ridiculous idea.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
