<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	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/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Reflective Surface</title>
	<atom:link href="http://log.reflectivesurface.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://log.reflectivesurface.com</link>
	<description>Still powered by a contradiction in terms</description>
	<lastBuildDate>Wed, 12 Aug 2009 18:52:27 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Use dynamic languages</title>
		<link>http://log.reflectivesurface.com/2009/08/12/use-dynamic-languages/</link>
		<comments>http://log.reflectivesurface.com/2009/08/12/use-dynamic-languages/#comments</comments>
		<pubDate>Wed, 12 Aug 2009 18:52:05 +0000</pubDate>
		<dc:creator>Ronaldo</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://log.reflectivesurface.com/?p=571</guid>
		<description><![CDATA[Ladies and gentlemen of the class of 2009:

Use dynamic languages.

If I could offer you only one tip for your future programming careers, dynamic languages would be it. The long term benefits on dynamic languages have been proved by thousands upon thousands of programmers, whereas the rest of my advice has no basis more reliable than [...]]]></description>
			<content:encoded><![CDATA[<p>Ladies and gentlemen of the class of 2009:</p>

<p>Use dynamic languages.</p>

<p>If I could offer you only one tip for your future programming careers, dynamic languages would be it. The long term benefits on dynamic languages have been proved by thousands upon thousands of programmers, whereas the rest of my advice has no basis more reliable than my own admittedly limited experience. </p>

<p>I will dispense this advice now.</p>

<p>Enjoy the power and expressiveness of homoiconic languages. Or forget they exist. You will never really understand the power and expressiveness of homoiconic languages until you have spent forty years straight debugging some heisenbug. But trust me, twenty years from now, you&#8217;ll look back at all the code you have written and wish you had used a homoiconic language. You non-homoiconic code is elegant, but not that elegant.</p>

<p>Don&#8217;t worry about the LOC of your code. Or worry, but know that measuring lines of code is as effective as trying to count parenthesis in Lisp. The real troubles in your programming career will come from metrics that never crossed your mind, like the number of type declarations in your classes, the kind that will make your curse the compiler for its pretense safe type system at 4am in some caffeine-driven code marathon.</p>

<p>Write one line of code everyday that scares other programmers.</p>

<p>Comment your code.</p>

<p>Be careful with other people&#8217;s code. Don&#8217;t put with people who are not careful to keep your shared code as easily maintainable as when you wrote it.</p>

<p>Don&#8217;t use TODO, HACK or FIXME comments in your code.</p>

<p>Don&#8217;t waste time on programming languages wars. Sometimes your favorite language is ahead on the TIOBE index, sometimes it&#8217;s not. The race for delivering the code is long, in the end, only your line count.</p>

<p>Remember the forks and patches your code receives. Forget the innuendo about its quality.  If you succeed in doing this, tell me how.</p>

<p>Throw away obsolete documentation. Keep old beautiful code.</p>

<p>Fork.</p>

<p>Don&#8217;t feel guilt if you still haven&#8217;t learned Assembly. The best programmers I know only bothered to learn it when they really needed it. Some of the most incredible programmers I know make a point of not learning it.</p>

<p>Drink coffee moderately. Be kind to your hands. You&#8217;ll miss them when RSI comes knocking.</p>

<p>Maybe you&#8217;ll write a compiler, maybe you won&#8217;t. Maybe will write a Linux kernel driver, maybe you won&#8217;t. Maybe you&#8217;ll write artificial intelligence systems in ML, maybe you won&#8217;t. Whatever you do, remember any of those accomplishments is as relevant as discussing whether Emacs is better than Vi.</p>

<p>Enjoy your test suites. Use them in whatever way you won&#8217;t. Don&#8217;t be afraid of what people say about TDD or of what people think of BDD. Sanity when developing is the greatest tool you&#8217;ll ever have.</p>

<p>Celebrate every successful build even if you are alone in the datacenter and nobody can share your happiness.</p>

<p>Write a Makefile at least once, even if you have never to bother with writing one again.</p>

<p>Don&#8217;t read Microsoft&#8217;s technological magazines, they will only make you despair of seeing beautiful code.</p>

<p>Get to know the big names in computing. You will miss knowing what Alan Turing and Donald Knuth did some day. Be kind to your fellow programmers. In the future, they will be the ones who will help you find the proper libraries when you need.</p>

<p>Understand that languages come and go, but that there are a few you should always keep yourself proficient in. Work hard to understand the features of each language you come across because, the older you get in your career, the more you will need to understand the purpose of certain features and techniques.</p>

<p>Write a couple programs in C, but dump the languages before it makes you believe manual control of memory is good. Write a couple programs in Haskell, but dump the languages before you come to believe that cryptic error messages are tolerable. And remember to learn a new language now and then.</p>

<p>Accept certain inalienable truths: market languages like Java and C# suck, dynamic typing is better than static typing, and your programming career will end someday. When when it does, you will fantasize that when you were a hot shot programmer, market languages were not that bad, that static typing was safer, and that your career would never end.</p>

<p>Respect those whose careers have ended because they contributed for you to be in the place you are now.</p>

<p>Don&#8217;t expect anyone to teach you to be a better programmer. Maybe you will have a mentor. Maybe you have access to better manuals. But you never know when either one might run out.</p>

<p>Collect a reusable code library but don&#8217;t add too much to it or you will find, just when you need it, that most of the code there is too terrible to use.</p>

<p>Be careful whose algorithms you use, but be patient with those who created them. Algorithms are like pets. Everybody thinks theirs are trustable, clean and fast but the truth is always different from that and they rarely are worthy the bytecode they generate.</p>

<p>But trust be on the dynamic languages.</p>

<hr />

<p>Best enjoyed while listening to <a href="http://www.youtube.com/watch?v=xfq_A8nXMsQ">&#8220;Wear Sunscreen&#8221;</a>, of which, I hope you notice, this text is an obvious parody.</p>
]]></content:encoded>
			<wfw:commentRss>http://log.reflectivesurface.com/2009/08/12/use-dynamic-languages/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>I&#8217;d rather have a whale</title>
		<link>http://log.reflectivesurface.com/2009/04/08/id-rather-have-a-whale/</link>
		<comments>http://log.reflectivesurface.com/2009/04/08/id-rather-have-a-whale/#comments</comments>
		<pubDate>Wed, 08 Apr 2009 14:19:14 +0000</pubDate>
		<dc:creator>Ronaldo</dc:creator>
				<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://log.reflectivesurface.com/?p=568</guid>
		<description><![CDATA[The whole Twitter brouhaha impressed me particularly in one key aspect: how people who have no experience whatsoever in big system think they can give valid opinions about them (regardless of language or framework or platform used).

I won&#8217;t offend readers saying I do have extensive experience in the matter; also, I won&#8217;t say I have [...]]]></description>
			<content:encoded><![CDATA[<p>The whole <a href="http://www.google.com/search?q=twitter%20rails%20scala">Twitter</a> brouhaha impressed me particularly in one key aspect: how people who have no experience whatsoever in big system think they can give valid opinions about them (regardless of language or framework or platform used).</p>

<p>I won&#8217;t offend readers saying I do have extensive experience in the matter; also, I won&#8217;t say I have any knowledge beyond what a good software engineer should have. My current experience with the matter is centered around closely following the development of an application that recently surpassed 60 millions monthly page views, and which is also growing constantly each month.</p>

<p>This particular application is entirely written in Ruby on Rails and considering how much effort is needed to maintain, evolve and operate it, I have nothing but sympathy for the Twitter team. Keeping an application the size of Twitter online, with all the distributed complexity it implies, is laudable.</p>

<p>It&#8217;s even more impressive how people assume the Twitter code is shitty. Even if it was&#8211;and even assuming it is&#8211;criticizing it for that is still bullshit. Even for an application riddled with technical debt, the balance between that debt and the value delivered for the user&#8211;which is something even the Twitter detractors have to agree on&#8211;is a fundamental and sound business decision.</p>

<p>Martin Fowler talks eloquently about that balance in <a href="http://www.martinfowler.com/bliki/TechnicalDebt.html">one of his recent articles</a>:</p>

<blockquote>
  <p>The metaphor also explains why it may be sensible to do the quick and dirty approach. Just as a business incurs some debt to take advantage of a market opportunity developers may incur technical debt to hit an important deadline. The all too common problem is that development organizations let their debt get out of control and spend most of their future development effort paying crippling interest payments.</p>
</blockquote>

<p>From my point of view, the fact that Twitter has experimented with other technologies, has benchmarked the application and has sought better solutions is a clear indicator that they are trying to fix their debts. Asking for more than that is a shallow display of arrogance and ignorance regarding how business is done and how real code is produced.</p>

<p>To freely and publicly admit to problems, trying to create a coherent discourse is something I respect. <a href="http://blog.obiefernandez.com/content/2009/04/my-reasoned-response-about-scala-at-twitter.html">Saying things like</a> &#8220;As far as I&#8217;m concerned, Twitter is a case-study in how Ruby on Rails does scale, even in their hands&#8221;, on the other hand, eliminates any possibility of a rational dialogue. The Rails community should be ashamed of its luminaries by now.</p>

<p>Programmers do not operate on ideal worlds. Until the people criticizing Twitter are able to show that they&#8217;ve done their homework dealing with the questions Twitter is facing, I&#8217;ll rather have the whale. Only proper for humans, after all.</p>
]]></content:encoded>
			<wfw:commentRss>http://log.reflectivesurface.com/2009/04/08/id-rather-have-a-whale/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The last D in TDD is for Design</title>
		<link>http://log.reflectivesurface.com/2009/02/03/the-last-d-in-tdd-is-for-design/</link>
		<comments>http://log.reflectivesurface.com/2009/02/03/the-last-d-in-tdd-is-for-design/#comments</comments>
		<pubDate>Wed, 04 Feb 2009 02:22:23 +0000</pubDate>
		<dc:creator>Ronaldo</dc:creator>
				<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://log.reflectivesurface.com/2009/02/03/the-last-d-in-tdd-is-for-design/</guid>
		<description><![CDATA[In my last post, I wrote about my opinion on how tests are meant to express the relationship between specific parts of the code and not to repeat knowledge of interfaces and contracts. In my experience, the most valuable tests are those who exercise those interfaces and contracts indirectly, through the particular architecture implicit in [...]]]></description>
			<content:encoded><![CDATA[<p>In <a href="http://log.reflectivesurface.com/2009/02/01/tests-pragmatism-or-ideology/">my last post</a>, I wrote about my opinion on how tests are meant to express the relationship between specific parts of the code and not to repeat knowledge of interfaces and contracts. In my experience, the most valuable tests are those who exercise those interfaces and contracts indirectly, through the particular architecture implicit in their design.</p>

<p>The growth of agile tests is a recent phenomenon, which is offering now a good opportunity to talk about good practices, philosophy and methodologies of development in the context of Agile testing. In special, the Rails community is doing an exceptional work in bringing tests to the forefront of the Agile discussion in the Web development community.</p>

<p>However, the success of testing lends itself to a lot of misunderstanding among novice developers and also among those developers not so used to TDD and BDD. More so, the also recent multiplication of testing frameworks has resulted in a lot of bad code as frameworks try to compete with each other offering new features that, in some cases, are actively detrimental to the health of the test suites. </p>

<p>In some ways, that is the same discussion about what is the real difference between TDD and BDD, but I think the particulars of the subject deserve a little more emphasis. To sum up the argument, that point is that <strong>you should never use tests as a replacement for good architectural practices</strong>.</p>

<p>That may sound simple and obvious, but is easy to find examples where testing frameworks not only fail to abide by that principle but actively encourage bad behavior. Taking <a href="http://thoughtbot.com/projects/shoulda/">Shoulda</a>, for example, it&#8217;s very common to see code like that in projects using it:</p>

<pre><code>class UserTest < ActiveRecord::TestCase
  should_belong_to :account
  should_have_many :posts
  should_have_named_scope('recent(5)').finding(:limit => 5)  
  should_have_index :age
end</code></pre>

<p>This kind of code doesn&#8217;t prove anything about the architecture of the class. The code above:</p>

<ol>
<li><p>It&#8217;s redundant, because the three first clauses can and will be tests in their use on other parts of the code, viz., the controllers;</p></li>
<li><p>It&#8217;s brittle, because it&#8217;s too tied to the class implementation details;</p></li>
<li><p>It&#8217;s little more than sanity testing to see if the developer remembered to properly declare some model stuff;</p></li>
<li><p>It&#8217;s exposing orthogonal implemental issues, like the fact that the application is using a database-based persistence engine in the case of the index matcher.</p></li>
</ol>

<p>Overall, the tests above are almost completely useless. There may be some justification for the name scope test but it&#8217;s still redundant.</p>

<p>Yet worse, that are some examples like the <a href="http://github.com/carlosbrando/remarkable/">Remarkable</a> matcher named <a href="http://github.com/carlosbrando/remarkable/commit/6dc34f6042271a4f66b86d0b387652592abe0e7d">should<em>have</em>before<em>save</em>callback</a>, which is actually detrimental. A test that exposes so much of the inner functionally of a business object has absolutely no justification to exists in the first place. It&#8217;s a complete deviation from what TDD represents. </p>

<p>Tests, once again, are about interoperability between parts of the code. <strong>They are part of a architectural discourse that tries to remain focused not in implementation details but on the growth of the code base</strong>. The goal, as always, is to write the smaller body of tests&#8211;axioms, if you will&#8211;that will give a proper indication about the validity of a given body of code. Simplicity, in other words, which, as I believe, should be an explicit goal of good architectures.</p>
]]></content:encoded>
			<wfw:commentRss>http://log.reflectivesurface.com/2009/02/03/the-last-d-in-tdd-is-for-design/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tests: Pragmatism or ideology?</title>
		<link>http://log.reflectivesurface.com/2009/02/01/tests-pragmatism-or-ideology/</link>
		<comments>http://log.reflectivesurface.com/2009/02/01/tests-pragmatism-or-ideology/#comments</comments>
		<pubDate>Sun, 01 Feb 2009 03:47:00 +0000</pubDate>
		<dc:creator>Ronaldo</dc:creator>
				<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://log.reflectivesurface.com/2009/02/01/tests-pragmatism-or-ideology/</guid>
		<description><![CDATA[I like most of what Joel Spolsky and Jeff Atwood write, but the last conversation between the two of them in their regular postcast show a blatant lack of knowlege about what tests and TDD really are.

At the core of their arguments is the idea that high code coverage through tests&#8211;Jeff Atwood mentions the 95%-plus [...]]]></description>
			<content:encoded><![CDATA[<p>I like most of what <a href="http://www.joelonsoftware.com/">Joel Spolsky</a> and <a href="http://www.codinghorror.com/blog/">Jeff Atwood</a> write, but the <a href="http://www.joelonsoftware.com/items/2009/01/31.html">last conversation</a> between the two of them in their regular <a href="http://blog.stackoverflow.com/2009/01/podcast-38/"><span class="foreign-word" lang="en">postcast</span></a> show a blatant lack of knowlege about what tests and TDD really are.</p>

<p>At the core of their arguments is the idea that high code coverage through tests&#8211;Jeff Atwood mentions the 95%-plus range&#8211;makes the maintenance of the tests themselves time consuming, considering the proportion of the tests that need to be changed when the code changes. A secondary argument is that tests are more suited for legacy code, except for the kind of new code that has natural rigidity, as, for example, the specification for a compiler.</p>

<p>The solution for the second argument is simple: all code is legacy. Simple as that. Code the becomes production code is instantly made legacy and the argument that there is some difference between &#8220;older&#8221; and &#8220;newer&#8221; code is dubious in the best of the cases.</p>

<p>Reading the transcription of their dialog is possible to identify a confused notion of what tests really are&#8211;especially when both talk about the relationship between testing and architecture, something that in the agile context is commonly referred as TDD or BDD.</p>

<p>That confusion&#8211;that tests are meant to cover method or class interfaces&#8211;is extremely common even among practitioners of agile testing methods, be it among those who propose tests as design tools, as it&#8217;s the case of TDD and BDD adopters or be it among those who simple use tests as post-coding tools to verify code behavior in an automated way.</p>

<p>I can sympathize with the argument that 100% code coverage is usually unnecessary. In face, 100% code coverage <em>never</em> means that your code&#8211;and by extension your architecture&#8211;is without flaws.</p>

<p>First, because 100% of <em>real</em> code coverage is really impossible to achieve for any meaningful body of code. Dependencies make that a given. Second, because no matter how much tests you have, cyclomatic complexity will always get you in the most inappropriate times. No matter how much white- or black-box testing you&#8217;re doing, complete coverage is always directly exponential to your code. </p>

<p>There is also another factor represented by a causal variation in the 80/20 rule: the most benefits you will ever achieve from testing are always in the most complex parts of your code, but the real gain comes from the tiny deviations that blindside you on a lazy Tuesday. In this case, the more coverage you have, the easier it will be to introduce new tests.</p>

<p>And that&#8217;s the real reason why Spolsky and Attwood argument fails: tests are not about interfaces, or APIs or contracts. They&#8217;re rather about the relationship between the different pieces of your code. In that distinction is the root of one of the biggest debates raging in the agile test community: what&#8217;s the real difference between TDD and BDD.</p>

<p>My answer is centered around a small reinterpretation of what TDD is. Instead of seeing it as Test-Driven Development, I see it as Test-Driven <em>Design</em>.</p>

<p>If you&#8217;re using tests as a way to guide your design, that means you&#8217;re worried more about knowing how the pieces fit together than about how they work, as mentioned above.</p>

<p>Joel says:</p>

<blockquote>
  <p>But the real problem with unit tests as I&#8217;ve discovered is that the type of changes that you tend to make as code evolves tend to break a constant percentage of your unit tests. Sometimes you will make a change to your code that, somehow, breaks 10% of your unit tests. </p>
</blockquote>

<p>Of course you can make changes that will break 10% of your tests, but in my experience that will only happen if your tests are brittle and if your design is already compromised. In that case, you can throw away the tests because they&#8217;re not helping anyone.</p>

<p>A couple of weeks ago, I made a substantial change in a system I wrote. I had to change a middleware protocol engine from DRb (distributed Ruby) to JSON over HTTP. This particular code is 100% covered.</p>

<p>Because of the protocol change, a considerable part of the code was touched in some way. But only three or four new tests had to be written to deal with representation changes&#8211;something that will also be of use in future protocol additions&#8211;and none of the existing tests was modified. Code was moved around, changed to new classes, but, all in all, the tests remained the same.</p>

<p>The explanation for what happened in simples: while there are a few tests dealing with specific interfaces, most of them are concerned about the relationship between the parts of the application: about how data leaves this part of the application in that format and is reinterpreted in a different format suitable for another part, how a given AST is reorganized to suit the language generator in a differente part of the application, and so it goes.</p>

<p>Jeff continues to say:</p>

<blockquote>
  <p>Yeah, it&#8217;s a balancing act. And I don&#8217;t want to come out and say I&#8217;m against [unit] testing, because I&#8217;m really not. Anything that improves quality is good. But there&#8217;s multiple axes you&#8217;re working on here; quality is just one axis. And I find, sadly, to be completely honest with everybody listening, quality really doesn&#8217;t matter that much, in the big scheme of things&#8230;</p>
</blockquote>

<p>This is something that made me to rethink the entire context of the discussion. I&#8217;m really surprised that somebody that considers  <a href="http://www.codinghorror.com/blog/archives/000020.html">Peopleware and The Mythical-Man Month</a> basic references for programmers would say something like that. Both books have entire discussions about quality being the focus of robust code that can be delivered in less time and that can add more value to business and users. Saying that quality is just one axis is the same as saying that good is enough, even if you have to throw it away later and start all over again because you couldn&#8217;t bother to design your architecture in a better way.</p>

<p>To sum up, TDD or testing is not an end in itself. But the argument that using tests is an ideologic waste of time fails when one considers how it can help to insure architectural decisions.</p>

<p>Joel is very known for his pragmatic approach to bug fixing. Tests are a very programatic way to ensure that a given set of conditions won&#8217;t trigger the same flaw in your applications. That&#8217;s that business value&#8211;in hours saved&#8211;that Joel and Jeff are talking about.</p>

<p>At the end of the day, pragmatism is what really counts. And tests, when done right, are some of the most pragmatic tools a programmer has in his arsenal.</p>
]]></content:encoded>
			<wfw:commentRss>http://log.reflectivesurface.com/2009/02/01/tests-pragmatism-or-ideology/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>A conversation with Randal L. Schwartz</title>
		<link>http://log.reflectivesurface.com/2008/05/02/a-conversation-with-randal-l-schwartz/</link>
		<comments>http://log.reflectivesurface.com/2008/05/02/a-conversation-with-randal-l-schwartz/#comments</comments>
		<pubDate>Fri, 02 May 2008 15:04:50 +0000</pubDate>
		<dc:creator>Ronaldo</dc:creator>
				<category><![CDATA[Seaside]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://log.reflectivesurface.com/2008/05/02/a-conversation-with-randal-l-schwartz/</guid>
		<description><![CDATA[During FISL, I had the opportunity to watch Randal L. Schwartz talk about Seaside. Schwartz is very well known in many open source communities&#8211;especially in the Perl one&#8211;and now is evangelizing Smalltalk and Seaside. I asked him if we could talk a bit about the subject, given my previous interest in the field, and he [...]]]></description>
			<content:encoded><![CDATA[<p>During FISL, I had the opportunity to watch <a href="http://fisl.softwarelivre.org/9.0/papers/pub/programacao/43">Randal L. Schwartz talk about Seaside</a>. <a href="http://www.stonehenge.com/merlyn/">Schwartz</a> is very well known in many <a href="http://twit.tv/FLOSS">open source communities</a>&#8211;especially in the Perl one&#8211;and now is evangelizing Smalltalk and Seaside. I asked him if we could talk a bit about the subject, given my <a href="http://log.reflectivesurface.com/index.php?s=seaside">previous interest in the field</a>, and he graciously agreed to an interview. </p>

<p>Without further ado, here&#8217;s what we talked about:</p>

<dl>

<dt>Tell us a bit about you: what&#8217;s your background, how did you started programming, what are you doing today?</dt>

<dd>
<p>I taught myself programming when I was 9.  By the time I was 15, I was
teaching programming from the front of the room to my classmates, and writing
contract code on the weekends for real money.</p>
<p>I worked for three different companies for a total of eight years, before
starting Stonehenge in 1985.  Stonehenge has grown over the years: we&#8217;ve
can count 17 of the Fortune 100 Companies as our clients.</p>
<p>I spend a lot of my time lecturing and writing these days, but I also still
design, create, and review code as well.  I answer questions for free for
about an hour or two each day on the dozens of mailing lists and blogs and web
communities I frequent.</p>
</dd>

<dt>You are extremely famous in the Perl community, but now you are
strongly advocating Smalltalk/Seaside. What did change? When did you
start using Smalltalk?</dt>

<dd><p>I started using Smalltalk before Perl was even invented, back in 1982.  I&#8217;ve
already written that story up at <a href="http://methodsandmessages.vox.com/library/post/transcript-show-hello-world-cr.html">my blog</a>.</p></dd>

<dt>What are Smalltalk advantages over other traditional languages like  Perl,
Ruby or Python, for example?</dt>

<dd>
<p>Smalltalk has a very simple syntax: I can teach the entire syntax in about 20
minutes, and include it as part of my talk introducing people to Seaside.
The major Smalltalk implementations (except GNU Smalltalk) also
have a mature IDE, allowing easy exploration of code relationships, and to
learn the libraries as needed by looking at both the implementation and the
uses.</p>
<p>And that&#8217;s a bonus as well: we have two commercial smalltalks (Cincom and
GemStone/S) as well as two open smalltalks (Squeak and GNU Smalltalk) all
supporting Seaside. This allows a nervous manager who might be hesitant at
selecting a strictly &#8220;volunteer-based&#8221; language to also have two commercial
vendors to pick up support.  Options are good!</p>
</dd>

<dt>Do you believe Smalltalk will finally reach mainstream status?</dt>

<dd>
<p>Well, it *had* mainstream status in the mid 90s, just before Java entered, at
least with large Wall Street firms and other institutions who wanted rapid GUI
development to stay ahead.</p>
<p>But yes, I believe Smalltalk is positioned today to reenter as a major
player.  For details, see my <a href="http://methodsandmessages.vox.com/library/post/the-year-of-smalltalk.html">&#8220;Year of Smalltalk&#8221; post</a>.</p>
</dd>

<dt>Also, your talk was entitled, &#8220;Seaside: Your Next Web Framework&#8221;.
What is really interesting about Seaside?</dt>

<dd>
<p>I like how Seaside can abstract both control flow (along one axis) and
representation (along the other axis) with relative ease.  Seaside seems to
put the right related things near each other.  I also like the &#8220;debug the
broken webhit within the webhit&#8221;: when something blows up, I can explore in
the standard debugger, fix what&#8217;s broken, patch up any mess, and then continue
within the same web hit, as if nothing broke.</p>
<p>Also, the traditional Rails persistence is provided with Active Record, which
requires objects to go through an object-relational mapper to drive SQL
queries.  Seaside can do the same thing (via GLORP), but a better solution is
to avoid the mapping entirely, using things like the open source Magma
solution, or the commercial GemStone/S Virtual Machine.  When you can get rid
of the ORM layer, you get a lot of speed back, and a much easier programming
environment.</p>
</dd>

<dt>What do you see in Seaside&#8217;s future, and how does it compare to the
future of the other frameworks?</dt>

<dd><p>The Seaside team is currently refactoring and repackaging Seaside so that
portability will be easier to manage and so that you can pull in just
the parts that you need.  I also see a lot of bolt-ons being created, like
the Pier CMS and adaptors for various APIs such as Google Graphs.</p></dd>

<dt>Do you think the market is ready for Seaside?</dt>

<dd><p>Yes.  Ruby on Rails reopened the discussions about what to do in a post-Java
world, by going back to the late-binding languages like Perl and Python and
Smalltalk.  And Seaside is a mature framework, being even older than Rails,
but just not as well known.  I&#8217;m hoping to change that.</p></dd>

<dt>Have you deployed anything using Seaside? If so, what were the
challenges?</dt>

<dd><p>I&#8217;m working on a few projects now, but nothing is public yet.  The initial
challenge was the relative lack of documentation, so I spent the better part
of two days going through every posting to the Seaside mailing list.  I feel
much better informed now, but my eyes were pretty bleary.  I hope to repackage
the knowledge I gained into postings to my blog as well as helping to answer
questions on the IRC channel and mailing list.</p></dd>

<dt>You are now part of the Squeak Foundation Board. What are your
plans for the Foundation?</dt>

<dd><p>My primary concerns are licensing issues, release management, and proper
publicity.  All of these issues are being addressed, but of course, we&#8217;re all
volunteers and always looking for more qualified volunteers to help.</p></dd>

<dt>Are there any Squeak Foundation plans for Seaside?</dt>

<dd><p>Nothing formal that I&#8217;m aware of.  However, Squeak is the primary development
platform for Seaside, so we&#8217;re sure that Squeak will remain an essential
component.</p></dd>

<dt>What are the most promising developments in the Smalltalk/Seaside
world currently?<dt>

<dd><p>Well, what got me involved is GLASS, the GemStone/Linux/Apache/Seaside/Squeak
solution to get people up and running with Seaside quickly.  This also
entailed the GemStone management creating a zero-cost commercial license for a
fully functional (but limited) version of GemStone/S.  With this free version
of GemStone/S, you can build a business, and when your business exceeds the
capabilities, there are strategies about migrating to larger licenses that are
reasonable.  It&#8217;s a great solution for getting a rock-solid
commercially-supported Smalltalk VM with persistence and clustering into your
plans.</p></dd>

<dt>What about next year&#8217;s FISL. How did you manage to get three entire
days for Smalltalk?</dt>

<dd><p>As I said, &#8220;it all started over a couple of Caipirinhas&#8230;&#8221;</p></dd>

<dt>What are your plans for those three days? Do you plan to bring
other Smalltalkers?</dt>

<dd><p>I will be working with the FISL organizers and the various vendors and groups
of the Smalltalk community to produce a full mini-conference.  I hope to have
both beginning and advanced Smalltalk training, as well as various Seaside
tutorials.  I expect this conference will attract a significant number of
Smalltalk developers to FISL for the first time, as well as expose Smalltalk
to the remainder of FISL, so it&#8217;s a win for everybody.</p></dd>

</dl>

<p>Many thanks, Mr. Schwartz, for the interview.</p>
]]></content:encoded>
			<wfw:commentRss>http://log.reflectivesurface.com/2008/05/02/a-conversation-with-randal-l-schwartz/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Arc</title>
		<link>http://log.reflectivesurface.com/2008/03/03/arc/</link>
		<comments>http://log.reflectivesurface.com/2008/03/03/arc/#comments</comments>
		<pubDate>Mon, 03 Mar 2008 11:28:20 +0000</pubDate>
		<dc:creator>Ronaldo</dc:creator>
				<category><![CDATA[Funny / Weird]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://log.reflectivesurface.com/2008/03/03/arc/</guid>
		<description><![CDATA[Arc&#8217;s Out:


  Arc is still a work in progress. We&#8217;ve done little more than take a snapshot of the code and put it online.


I&#8217;ve working on this for a long, long time and realized I&#8217;ll never get it done properly so I&#8217;ll release it anyway.


  Why release it now? Because, as I suddenly [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://paulgraham.com/arc0.html">Arc&#8217;s Out</a>:</p>

<blockquote>
  <p>Arc is still a work in progress. We&#8217;ve done little more than take a snapshot of the code and put it online.</p>
</blockquote>

<p>I&#8217;ve working on this for a long, long time and realized I&#8217;ll never get it done properly so I&#8217;ll release it anyway.</p>

<blockquote>
  <p>Why release it now? Because, as I suddenly realized a couple months ago, it&#8217;s good enough.</p>
</blockquote>

<p>It&#8217;s shit but I&#8217;m famous enough that people will be talking about it for a long time. People will think it&#8217;s good even if it&#8217;s really just a bunch of macros on top of Scheme.</p>

<blockquote>
  <p>I worry about releasing it, because I don&#8217;t want there to be forces pushing the language to stop changing.</p>
</blockquote>

<p>I&#8217;m not going to change it, but if you idiot enought to want to use it, remember that there&#8217;s not documention. In other words, don&#8217;t call me if you can understand a single line of the code.</p>

<blockquote>
  <p>Which is why, incidentally, Arc only supports Ascii. MzScheme, which the current version of Arc compiles to, has some more advanced plan for dealing with characters. (&#8230;) But the kind of people who would be offended by that wouldn&#8217;t like Arc anyway.</p>
</blockquote>

<p>I don&#8217;t understand and don&#8217;t care for any <a href="http://jacobian.org/writing/2008/jan/30/arc/">other character</a> set other than my precious ASCII. I learned it forty years ago and I&#8217;m not giving it up now. No way. Ah, that why Yahoo! completely rewrote the application I sold them. Bunch of losers.</p>

<blockquote>
  <p>Why? Because Arc is tuned for exploratory programming, and the W3C-approved way of doing things represents the opposite spirit.</p>
</blockquote>

<p>Also, I don&#8217;t understand anything about new and modern standards and technologies like XHTML and CSS. And I&#8217;m not waste my precious VC time learning them. And I don&#8217;t care about you people who dare to make the Web less complicated. Did I mention why Yahoo! had to rewrite the program they bought from me?</p>

<blockquote>
  <p>Tables are the lists of html. The W3C doesn&#8217;t like you to use tables to do more than display tabular data because then it&#8217;s unclear what a table cell means.</p>
</blockquote>

<p>I told you. I don&#8217;t understand anything about HTML.</p>

<blockquote>
  <p>So experience suggests we should embrace dirtiness. Or at least some forms of it; in other ways, the best quick-and-dirty programs are usually quite clean.</p>
</blockquote>

<p>Look! A dumpster! Let&#8217;s have some fun!</p>

<blockquote>
  <p>Arc tries to be a language that&#8217;s dirty in the right ways. It tries not to forbid things, for example. (&#8230;) For now, best to say it&#8217;s a quick and dirty language for writing quick and dirty programs.</p>
</blockquote>

<p>I lost so much time with this shit that the world should share my pain. Basic, watch yourself. It&#8217;s Arc time! Agora é a vez do Arc.</p>
]]></content:encoded>
			<wfw:commentRss>http://log.reflectivesurface.com/2008/03/03/arc/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Pragmatic Programmer</title>
		<link>http://log.reflectivesurface.com/2008/03/02/the-pragmatic-programmer/</link>
		<comments>http://log.reflectivesurface.com/2008/03/02/the-pragmatic-programmer/#comments</comments>
		<pubDate>Sun, 02 Mar 2008 15:54:19 +0000</pubDate>
		<dc:creator>Ronaldo</dc:creator>
				<category><![CDATA[Reading]]></category>

		<guid isPermaLink="false">http://log.reflectivesurface.com/2008/03/02/the-pragmatic-programmer/</guid>
		<description><![CDATA[This is another book about software as a craft but written in a style that&#8217;s much more interesting and accessible. Dave Thomas and Andy Hunt have a lot of experience in the field and it shows.

Most of the advice given is pretty obvious but every programmer should remind himself now and them of what&#8217;s important [...]]]></description>
			<content:encoded><![CDATA[<p>This is another book about software as a craft but written in a style that&#8217;s much more interesting and accessible. Dave Thomas and Andy Hunt have a lot of experience in the field and it shows.</p>

<p>Most of the advice given is pretty obvious but every programmer should remind himself now and them of what&#8217;s important to his programming career. This book does exactly that.</p>

<p>Most of the advice provided in the book is in those areas where programmers have more trouble&#8211;like communication and dealing with managers. That&#8217;s very necessary, considering how much more integrated progamming has become today, and more so in Agile contexts where outside interaction is paramount. But there is also a lot of practical advice about the best way to prototype, how to handle the problem domain in terms of languages choice and lots of similar subjects.</p>

<p>Also, reading this book reminds me again of how bad <a href="http://log.reflectivesurface.com/2008/02/07/software-craftsmanship/">Software Craftsmanship</a> was. McBreen really sounds like he read this book, had a couple of nice insights and decided to write an entire book on what should have been an article or an essay.</p>

<p>Of course, two of the most interesting parts of the books are the challenges and exercises. The challenges are questions about the text just read, leading the reader to expand his comprehension and think about the way what has been just learned applies to his work. The exercises, on the other hand, are more about practicing the knowledge in code. Both are good tools to make sure the knowledge acquired in fixed into the reader&#8217;s memory.</p>

<p>Of course, the book is not without flaws although many of them may be attributed to the time in which it was written. For example, there is a tendency in the text to present Java and its related technologies as leading the way to the future. But those are small problems in a otherwise great book.</p>

<p>The ending was a little slow, as well, in face of everything that was already said but I would encourage readers to stick with the book. Even in the slow chapters there a lot of food for thought.</p>

<p>All in all, this is a practical and current book that will benefit every programmer reading it. Even programmers with a lot of experience will learn something or at least be reminded of things they should be doing and may not be doing right now. I strongly recommend it.</p>
]]></content:encoded>
			<wfw:commentRss>http://log.reflectivesurface.com/2008/03/02/the-pragmatic-programmer/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>The Seaside Bookshelf</title>
		<link>http://log.reflectivesurface.com/2008/02/14/the-seaside-bookshelf/</link>
		<comments>http://log.reflectivesurface.com/2008/02/14/the-seaside-bookshelf/#comments</comments>
		<pubDate>Thu, 14 Feb 2008 18:28:36 +0000</pubDate>
		<dc:creator>Ronaldo</dc:creator>
				<category><![CDATA[Seaside]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://log.reflectivesurface.com/2008/02/14/the-seaside-bookshelf/</guid>
		<description><![CDATA[To those curious about the way Seaside applications are structured or just looking for a simple example to see how they differ from the other more usual Web frameworks, I&#8217;m making available the code of a simple experiment of mine: a small system to keep information about the books I&#8217;m reading, have read or intend [...]]]></description>
			<content:encoded><![CDATA[<p>To those curious about the way <a href="http://seaside.st">Seaside</a> applications are structured or just looking for a simple example to see how they differ from the other more usual Web frameworks, I&#8217;m making available the code of a simple experiment of mine: <a href="http://books.reflectivesurface.com/">a small system to keep information</a> about the books I&#8217;m reading, have read or intend to read. </p>

<p>For the remote possibility somebody asks about this, the system is inspired and modeled after <a href="http://www.nodecaf.org/">Caffo</a>&#8217;s <a href="http://books.nodecaf.org/">bookshelf</a>. Of course, his system is prettier&#8211;and faster too, at the moment.</p>

<p>Some caveats about the code:</p>

<ul>
<li>It&#8217;s running on a very old and underpowered server.</li>
<li>This is an alpha version so don&#8217;t expect subtleties in the code. I&#8217;m still learning Seaside, and migrating from 2.6 to 2.8 proved an interesting exercise. </li>
<li>The application depends on an instance of [GOODS]. The connection data for the instance can be configured in the application settings.</li>
<li>The login is a beautiful example of how things <strong>should not</strong> be done. I started with a normal login system, got lazy in the process, and adapted it to allow just one user to log. The user can be configured in the application settings as well.</li>
<li>I&#8217;m not using any deployment optimizations. Everything is in memory, and thumbnails are generated on the fly.</li>
<li>The code is Squeak-specific.</li>
</ul>

<p>That said, the system shows how a Seaside application runs, and how Magritte can be used to model data. It&#8217;s enough to show how Seaside is different from any other of the usual Web frameworks in use today.</p>

<p>The code can be found below:</p>

<ul>
<li><a href="http://static.reflectivesurface.com/binaries/2008/02/13/Bookshelf-rmf.19.mcz">Base code</a></li>
<li><a href="http://static.reflectivesurface.com/binaries/2008/02/13/MagritteFixes-rmf.5.mcz">Magritte adaptations</a> (personal taste)</li>
</ul>

<p>While the code will run in any Squeak 3.9 image, I recommend Damien Cassou&#8217;s <a href="http://damien.cassou.free.fr/">Squeak-Web image</a>. With his latest image, it&#8217;s just a matter of loading GOODS and the code to begin development. GOODS configuration, of course, is left as an exercise to the reader.</p>
]]></content:encoded>
			<wfw:commentRss>http://log.reflectivesurface.com/2008/02/14/the-seaside-bookshelf/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Obama ahead</title>
		<link>http://log.reflectivesurface.com/2008/02/13/obama-ahead/</link>
		<comments>http://log.reflectivesurface.com/2008/02/13/obama-ahead/#comments</comments>
		<pubDate>Wed, 13 Feb 2008 13:34:26 +0000</pubDate>
		<dc:creator>Ronaldo</dc:creator>
				<category><![CDATA[Society]]></category>

		<guid isPermaLink="false">http://log.reflectivesurface.com/2008/02/13/obama-ahead/</guid>
		<description><![CDATA[I&#8217;m impressed with the extent of Obama victories in the past weeks. Not only he is surpassing the margins predicted, but those numbers are predicated on people who analysts were sure would vote for Hillary&#8211;like the Latino population in Virginia, for example. 

I confess I&#8217;m still trying to decide whether people are voting for Obama [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m impressed with <a href="http://edition.cnn.com/2008/POLITICS/02/12/potomac.primaries/index.html">the extent of Obama victories</a> in the past weeks. Not only he is surpassing the margins predicted, but those numbers are predicated on people who analysts were sure would vote for Hillary&#8211;like the Latino population in Virginia, for example. </p>

<p>I confess I&#8217;m still trying to decide whether people are voting for Obama because although black he&#8217;s still a man. I&#8217;m not naïve enough to presume all voters are choosing him because he&#8217;s more qualified, especially considering the Latino population&#8211;at least here in Brazil&#8211;has always been strongly sexist where woman in leadership positions are concerned.</p>

<p>Of course, part of this will be tested when Obama&#8211;as it seems likely now&#8211;goes against the Republican candidate in November. Considering the way the Republican nomination is going, and that many Republicans are actually voting for Obama, the outcome of the election will demonstrate how ready the American people is ready for a president unlike any other in history.</p>

<p>I&#8217;m hoping that Obama wins. Not because Hillary is a woman but because I dislike the way she abides to the old school of politics. America needs a new face and Obama would clearly resonate a lot better with the rest of the world. </p>
]]></content:encoded>
			<wfw:commentRss>http://log.reflectivesurface.com/2008/02/13/obama-ahead/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Software Craftsmanship</title>
		<link>http://log.reflectivesurface.com/2008/02/07/software-craftsmanship/</link>
		<comments>http://log.reflectivesurface.com/2008/02/07/software-craftsmanship/#comments</comments>
		<pubDate>Thu, 07 Feb 2008 16:11:33 +0000</pubDate>
		<dc:creator>Ronaldo</dc:creator>
				<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://log.reflectivesurface.com/2008/02/07/software-craftsmanship1/</guid>
		<description><![CDATA[Recently, somebody recommended me to take a look at Software Craftsmanship, by Pete McBreen, as a good treatment of software engineering versus software craftsmanship as approaches for software development. 

The theme is indeed interesting, but I was surprised to see how badly the book is written. McBreen, granted, does a decent job of presenting the [...]]]></description>
			<content:encoded><![CDATA[<p>Recently, somebody recommended me to take a look at <a href="http://www.mcbreen.ab.ca/SoftwareCraftsmanship/">Software Craftsmanship</a>, by Pete McBreen, as a good treatment of software engineering versus software craftsmanship as approaches for software development. </p>

<p>The theme is indeed interesting, but I was surprised to see how badly the book is written. McBreen, granted, does a decent job of presenting the main arguments for both sides&#8211;which is more than you would expect from a proponent of a specific approach&#8211;but he also repeats those same arguments endlessly. I don&#8217;t know how an editor managed to let something like that happen, but if the incessant repetition were to be eliminated the book would lose at least three quarters of its almost three hundred pages.</p>

<p>McBreen&#8217;s argument is simple: Software engineering is appropriate only for huge projects (those is the 100 developer-years and above). For simple projects, needing faster development and no critical hardware infrastructure, the old concept of craftsmanship is much more interesting: a master craftsman running a team of journeyman and apprentices.</p>

<p>I agree with the arguments and many of the other conclusions presented my McBreen. In fact, to the extent I&#8217;m concerned, that&#8217;s exactly the way I&#8217;ve been running my own small company. The results, so far, have been excellent. </p>

<p>Mane people reading the book, however, will quickly give up after reading two or three entire chapters essentially saying the same thing. They won&#8217;t look kindly also, to statements like the one below:</p>

<blockquote>
  <p>Software craftsmanship is the new imperative because many members of the software development community are stating to chase technology for its own sake, forgetting what is important. </p>
</blockquote>

<p>The fact that the second part of that sentence is painfully obvious and that the relationship between the first and second part is clearly a <span class= "foreign-word" lang="la">non-sequitur</span> doesn&#8217;t seem to bother McBreen, tough.</p>

<p>Nevertheless, much of what McBreen is talking about is valid and necessary, as when he describes how <em>good enough software</em> is not really good to users or the industry. Some of this analysis of the prevalent (and wrong) metaphors&#8211;like car building versus car design&#8211;were interesting enough to motivate me to finish the book.</p>

<p>Ultimately, the book is necessary and part of one of the most important debates taking place today in the industry. I&#8217;m afraid, however, that many readers will abandon the book after a couple chapters after being put off by McBreen&#8217;s redundant style. More&#8217;s the pity because a good editor would made the book the new Peopleware.</p>
]]></content:encoded>
			<wfw:commentRss>http://log.reflectivesurface.com/2008/02/07/software-craftsmanship/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
