<?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: Different programming worlds</title>
	<atom:link href="http://blog.krecan.net/2009/04/11/different-programming-worlds/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.krecan.net/2009/04/11/different-programming-worlds/</link>
	<description>Short remarks from Java world</description>
	<lastBuildDate>Sat, 04 Feb 2012 09:44:38 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
	<item>
		<title>By: Martin</title>
		<link>http://blog.krecan.net/2009/04/11/different-programming-worlds/comment-page-1/#comment-935</link>
		<dc:creator>Martin</dc:creator>
		<pubDate>Tue, 21 Apr 2009 11:26:33 +0000</pubDate>
		<guid isPermaLink="false">http://blog.krecan.net/?p=353#comment-935</guid>
		<description>I agree with Svata. BTW to be quick is not an excuse, sometimes you have to be slow in the beginning to be much much faster at the end. I think that everything is in separation. The more you can do it the more happy you are later. You can bend this rule for sake of speed, but don&#039;t complain later ;) Of course choosing the right balance between an effort and later income from it is always challange ;) I haven&#039;t read the book yet but may be it&#039;s more about principles (as such are always hard to follow 100% in real life) But it&#039;s good to know them. (Not all my bash scripts are thread safe :))</description>
		<content:encoded><![CDATA[<p>I agree with Svata. BTW to be quick is not an excuse, sometimes you have to be slow in the beginning to be much much faster at the end. I think that everything is in separation. The more you can do it the more happy you are later. You can bend this rule for sake of speed, but don't complain later <img src='http://blog.krecan.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  Of course choosing the right balance between an effort and later income from it is always challange <img src='http://blog.krecan.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  I haven't read the book yet but may be it's more about principles (as such are always hard to follow 100% in real life) But it's good to know them. (Not all my bash scripts are thread safe <img src='http://blog.krecan.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> )</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Svata Dedic</title>
		<link>http://blog.krecan.net/2009/04/11/different-programming-worlds/comment-page-1/#comment-931</link>
		<dc:creator>Svata Dedic</dc:creator>
		<pubDate>Thu, 16 Apr 2009 18:21:00 +0000</pubDate>
		<guid isPermaLink="false">http://blog.krecan.net/?p=353#comment-931</guid>
		<description>The approach that an &#039;ordinary developer&#039; does not need to write a good API or maintain compatibility is a very common and repeated mistake. 

It&#039;s OK for a one-man-show project, or for a project developed by a compact team, where all members meet in a kitchen every day. In such small teams, synchronization between developers is almost instant, as all people share the same common knowledge about all code/product features.

As the development team starts to grow, team splits up into several ones - they may be all developer teams, some of them may be on-site customer support teams. It&#039;s even worse if business partners start to integrate with the product - another teams crawl in. 

Another axis are bugfix releases developed in parallel with the mainline or some customized forks; with continuously changing core, such parallel development is very hard, and it is yet harder to integrate the parallel branches back into the main product line to exploit the synergies.

Here starts the need for maintaining API, changelogs for releases, migration guides, compatibility, etc. Developers in these teams primarily communicate within the team - and sync between all parties becomes more and more inappropriate and time consuming. The more the individual team&#039;s schedule, task flow, or management is separated, the more the bulletproof API interfaces are needed.

So a short summary: If you are alone on a project, or a very small and compact team, don&#039;t bother with APIs. If you are suffering high fluctuation, or your team is larger, separated into groups, different product lines, etc, DO invest into building a solid API-level interfaces. The costs will repay back soon.</description>
		<content:encoded><![CDATA[<p>The approach that an 'ordinary developer' does not need to write a good API or maintain compatibility is a very common and repeated mistake. </p>
<p>It's OK for a one-man-show project, or for a project developed by a compact team, where all members meet in a kitchen every day. In such small teams, synchronization between developers is almost instant, as all people share the same common knowledge about all code/product features.</p>
<p>As the development team starts to grow, team splits up into several ones - they may be all developer teams, some of them may be on-site customer support teams. It's even worse if business partners start to integrate with the product - another teams crawl in. </p>
<p>Another axis are bugfix releases developed in parallel with the mainline or some customized forks; with continuously changing core, such parallel development is very hard, and it is yet harder to integrate the parallel branches back into the main product line to exploit the synergies.</p>
<p>Here starts the need for maintaining API, changelogs for releases, migration guides, compatibility, etc. Developers in these teams primarily communicate within the team - and sync between all parties becomes more and more inappropriate and time consuming. The more the individual team's schedule, task flow, or management is separated, the more the bulletproof API interfaces are needed.</p>
<p>So a short summary: If you are alone on a project, or a very small and compact team, don't bother with APIs. If you are suffering high fluctuation, or your team is larger, separated into groups, different product lines, etc, DO invest into building a solid API-level interfaces. The costs will repay back soon.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Honza Novotný</title>
		<link>http://blog.krecan.net/2009/04/11/different-programming-worlds/comment-page-1/#comment-929</link>
		<dc:creator>Honza Novotný</dc:creator>
		<pubDate>Wed, 15 Apr 2009 18:42:08 +0000</pubDate>
		<guid isPermaLink="false">http://blog.krecan.net/?p=353#comment-929</guid>
		<description>Yes, in that case - I have experience only with inhouse APIs, but even then I have run at the problem of backward compatibility. And 10 dependent people have enough power to make me think about it. But of course this is nothing comparing with APIs open to wide public.

Regarding the InfoQ post I must say that reusable libraries and modules in our area is crucial. Coding everything from scratch got us into the position where we just started to be less competitive to our rivals. Even when making highly customized software according to customer requirements reusing things that could be reused is very important for keeping costs at the level customer is willing to pay.

That&#039;s my experience.</description>
		<content:encoded><![CDATA[<p>Yes, in that case - I have experience only with inhouse APIs, but even then I have run at the problem of backward compatibility. And 10 dependent people have enough power to make me think about it. But of course this is nothing comparing with APIs open to wide public.</p>
<p>Regarding the InfoQ post I must say that reusable libraries and modules in our area is crucial. Coding everything from scratch got us into the position where we just started to be less competitive to our rivals. Even when making highly customized software according to customer requirements reusing things that could be reused is very important for keeping costs at the level customer is willing to pay.</p>
<p>That's my experience.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Lukáš Křečan</title>
		<link>http://blog.krecan.net/2009/04/11/different-programming-worlds/comment-page-1/#comment-928</link>
		<dc:creator>Lukáš Křečan</dc:creator>
		<pubDate>Wed, 15 Apr 2009 16:34:40 +0000</pubDate>
		<guid isPermaLink="false">http://blog.krecan.net/?p=353#comment-928</guid>
		<description>Sure, I totally agree with you. The important thing to notice is that rules for writing public APIs and inhouse APIs are different. When you are coding internal API, you just write a code you need. Well, sometimes you try to make it more general and reusable, you try to create a generic library. 

But even in this case you can simply check how your colleagues  are using the API and do your changes accordingly. That&#039;s the main difference between inhouse APi and public API. In public API you have no idea how it is used so you have to be much more defensive.

Interesting point of view on this subject has been &lt;a href=&quot;http://www.infoq.com/news/2009/04/agile-code-reuse&quot; rel=&quot;nofollow&quot;&gt;published recently&lt;/a&gt;.</description>
		<content:encoded><![CDATA[<p>Sure, I totally agree with you. The important thing to notice is that rules for writing public APIs and inhouse APIs are different. When you are coding internal API, you just write a code you need. Well, sometimes you try to make it more general and reusable, you try to create a generic library. </p>
<p>But even in this case you can simply check how your colleagues  are using the API and do your changes accordingly. That's the main difference between inhouse APi and public API. In public API you have no idea how it is used so you have to be much more defensive.</p>
<p>Interesting point of view on this subject has been <a href="http://www.infoq.com/news/2009/04/agile-code-reuse" rel="nofollow">published recently</a>.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Honza Novotný</title>
		<link>http://blog.krecan.net/2009/04/11/different-programming-worlds/comment-page-1/#comment-927</link>
		<dc:creator>Honza Novotný</dc:creator>
		<pubDate>Wed, 15 Apr 2009 03:44:15 +0000</pubDate>
		<guid isPermaLink="false">http://blog.krecan.net/?p=353#comment-927</guid>
		<description>I think this part is important:

&quot;I’d like to be flexible, I want to be able to fix my mistakes as fast as possible, I’d like to change my design quite often, I do not want to maintain backward compatibility. I do not have to.&quot;

Every programmer wants that. Me too - it means that you have complete freedom while extending or updating your existing code. And everyone wants to be free. I guess Jarda Tulach too.

But there you go. Sometimes there comes time, when other programmers start suffering from your freedom. They start to complain that you force them to adapt and repair their code again and again. And that&#039;s a signal, that you are no more doing PI but an API.

It reminds me Czech saying: the freedom of one ends there, where the freedom of another starts. And API is just representation of such border between freedoms.

This situation can happen to anybody - even you. Never say never.

So enjoy your freedom, it will last till somebody starts to beat you in the head. :)</description>
		<content:encoded><![CDATA[<p>I think this part is important:</p>
<p>"I’d like to be flexible, I want to be able to fix my mistakes as fast as possible, I’d like to change my design quite often, I do not want to maintain backward compatibility. I do not have to."</p>
<p>Every programmer wants that. Me too - it means that you have complete freedom while extending or updating your existing code. And everyone wants to be free. I guess Jarda Tulach too.</p>
<p>But there you go. Sometimes there comes time, when other programmers start suffering from your freedom. They start to complain that you force them to adapt and repair their code again and again. And that's a signal, that you are no more doing PI but an API.</p>
<p>It reminds me Czech saying: the freedom of one ends there, where the freedom of another starts. And API is just representation of such border between freedoms.</p>
<p>This situation can happen to anybody - even you. Never say never.</p>
<p>So enjoy your freedom, it will last till somebody starts to beat you in the head. <img src='http://blog.krecan.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Lukáš Křečan</title>
		<link>http://blog.krecan.net/2009/04/11/different-programming-worlds/comment-page-1/#comment-920</link>
		<dc:creator>Lukáš Křečan</dc:creator>
		<pubDate>Sun, 12 Apr 2009 08:57:24 +0000</pubDate>
		<guid isPermaLink="false">http://blog.krecan.net/?p=353#comment-920</guid>
		<description>I&#039;m glad you like the post. Use it as you want.</description>
		<content:encoded><![CDATA[<p>I'm glad you like the post. Use it as you want.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Satai</title>
		<link>http://blog.krecan.net/2009/04/11/different-programming-worlds/comment-page-1/#comment-919</link>
		<dc:creator>Satai</dc:creator>
		<pubDate>Sat, 11 Apr 2009 18:49:34 +0000</pubDate>
		<guid isPermaLink="false">http://blog.krecan.net/?p=353#comment-919</guid>
		<description>This is pretty useful blogpost. Something, almost everybody knows, but lots of us don&#039;t know, that we know it. In other words: a trivial idea with great importance.  
Your metaphor seems to be very handy are we allowed to spread it? ;)</description>
		<content:encoded><![CDATA[<p>This is pretty useful blogpost. Something, almost everybody knows, but lots of us don't know, that we know it. In other words: a trivial idea with great importance.<br />
Your metaphor seems to be very handy are we allowed to spread it? <img src='http://blog.krecan.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
</channel>
</rss>

