<?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>Coding4Food &#187; programação</title>
	<atom:link href="http://coding4food.com/tag/programacao/feed/" rel="self" type="application/rss+xml" />
	<link>http://coding4food.com</link>
	<description>software development and IT stuff</description>
	<lastBuildDate>Tue, 31 Aug 2010 23:47:46 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>CruiseControl com SVN – Parte 02</title>
		<link>http://coding4food.com/2010/03/17/cruisecontrol-com-svn-%e2%80%93-parte-02/</link>
		<comments>http://coding4food.com/2010/03/17/cruisecontrol-com-svn-%e2%80%93-parte-02/#comments</comments>
		<pubDate>Wed, 17 Mar 2010 03:15:51 +0000</pubDate>
		<dc:creator>Eduardo Kruger</dc:creator>
				<category><![CDATA[metodologia]]></category>
		<category><![CDATA[programação]]></category>
		<category><![CDATA[integração contínua]]></category>

		<guid isPermaLink="false">http://coding4food.com/?p=537</guid>
		<description><![CDATA[Então alguém na sua empresa tem um projeto em Flex, e quer configurá-lo no CruiseControl ?!
Sei..  nós também já passamos por isso.
A primeira coisa a ser feita é colocar a lib do flex-tasks no classpath do ant, para podermos executar as tasks flex no build do nosso projeto. A forma mais fácil de fazer isso [...]]]></description>
			<content:encoded><![CDATA[<p>Então <a href="http://joaoaugusto.com.br/blog/" target="_blank">alguém</a> na sua empresa tem um projeto em <a href="http://www.adobe.com/br/products/flex/" target="_blank">Flex</a>, e quer configurá-lo no <a href="http://cruisecontrol.sourceforge.net/" target="_blank">CruiseControl</a> ?!<br />
Sei..  <a href="http://www.informant.com.br" target="_blank">nós</a> também já passamos por isso.</p>
<p>A primeira coisa a ser feita é colocar a lib do <em>flex-tasks</em> no classpath do <em>ant</em>, para podermos executar as tasks flex no build do nosso projeto. A forma mais fácil de fazer isso é copiando a lib <em>{FLEX_HOME}/ant/lib/flexTasks.jar</em> para diretório de libs da instalação do ant <em>{ANT_HOME}/lib</em>.<br />
Então, para você poder utilizar as tasks flex, basta incluir as linhas abaixo no seu arquivo de build:</p>
<pre class="brush: xml;">
&lt;taskdef resource=&quot;flexTasks.tasks&quot; classpath=&quot;${ant.home}/lib/flexTasks.jar&quot; /&gt;
&lt;property name=&quot;FLEX_HOME&quot; value=&quot;${flex.home}&quot; /&gt;
</pre>
<p>Feito isso você já pode compilar os seus componentes, módulos e quase toda <em>parafernália</em> de um projeto flex tradicional. Para compilar os seus módulos flex, você pode utilizar o <em>&lt;mxmlc&gt;</em>,  indicando o seu <em>.mxml</em> de entrada e o <em>.swf</em> de saída. No meu caso ficou mais ou menos assim:</p>
<pre class="brush: xml;">
&lt;!-- compila o modulo flex modules/WhiteboardEditModule.mxml  --&gt;
 &lt;target name=&quot;compile-flex-whiteboard-module&quot; depends=&quot;compile-java&quot;&gt;
 &lt;echo message=&quot;${ant.project.name}: Compilando WhiteboardEditModule.mxml ...&quot;/&gt;
 &lt;mxmlc  file=&quot;${project.path}/wedoWeb/flex_src/modules/WhiteboardEditModule.mxml&quot;
 output=&quot;${project.path}/wedoWeb/output/modules/WhiteboardEditModule.swf&quot;
 keep-generated-actionscript=&quot;false&quot;
 incremental=&quot;true&quot;
 debug=&quot;true&quot;
 allow-source-path-overlap=&quot;true&quot;
 show-actionscript-warnings=&quot;false&quot;
 show-binding-warnings=&quot;false&quot;
 services=&quot;${project.path}/wedoWeb/WebContent/WEB-INF/flex/services-config.xml&quot;&gt;

 &lt;target-player&gt;10.0.0&lt;/target-player&gt;
 &lt;actionscript-file-encoding&gt;&quot;UTF-8&quot;&lt;/actionscript-file-encoding&gt;
 &lt;load-config filename=&quot;${flex.home}/frameworks/flex-config.xml&quot;/&gt;

 &lt;library-path dir=&quot;${flex.home}/frameworks/libs&quot; append=&quot;true&quot;&gt;
 &lt;include name=&quot;*.swc&quot; /&gt;
 &lt;/library-path&gt;
 &lt;library-path dir=&quot;${project.name}/flex_libs&quot; append=&quot;true&quot;&gt;
 &lt;include name=&quot;*.swc&quot; /&gt;
 &lt;/library-path&gt;

 &lt;locale&gt;pt_BR&lt;/locale&gt;
 &lt;locale&gt;en_US&lt;/locale&gt;
 &lt;locale&gt;es_ES&lt;/locale&gt;
 &lt;source-path path-element=&quot;${project.path}/wedoWeb/flex_src&quot; /&gt;
 &lt;source-path path-element=&quot;${project.path}/Whiteboard/src&quot;/&gt;
 &lt;source-path path-element=&quot;${project.path}/wedoWeb/locale/{locale}&quot;/&gt;

 &lt;include-resource-bundles&gt;nous&lt;/include-resource-bundles&gt;
 &lt;include-resource-bundles&gt;SharedResources&lt;/include-resource-bundles&gt;
 &lt;include-resource-bundles&gt;formatters&lt;/include-resource-bundles&gt;
 &lt;/mxmlc&gt;
 &lt;/target&gt;
</pre>
<p>É importante indicar o arquivo <em>services-config.xml</em>, ele define algumas diretrizes de compilação do projeto, também relacionadas a utilização da aplicação sobre <a href="http://en.wikipedia.org/wiki/HTTP_Secure" target="_blank"><em>https</em></a>. ( <em>é isso né <a href="http://joaoaugusto.com.br/blog/" target="_blank">John</a>, vc não vai me fazer passar por mentiroso aqui ?!</em>)</p>
<pre class="brush: xml;">
services=&quot;${project.path}/wedoWeb/WebContent/WEB-INF/flex/services-config.xml&quot;&gt;
</pre>
<p>Além de indicar o arquivo de configuração do flex, é importante configurar a versão do <a href="http://get.adobe.com/flashplayer/" target="_blank"><em>flashplayer</em></a> sendo utilizada e o <em>file encoding</em> dos actions scripts. Se você não configurar essas opções&#8230; bem, nesse caso coisas estranhas vão acontecer.</p>
<pre class="brush: xml;">
&lt;target-player&gt;10.0.0&lt;/target-player&gt;
 &lt;actionscript-file-encoding&gt;&quot;UTF-8&quot;&lt;/actionscript-file-encoding&gt;
 &lt;load-config filename=&quot;${flex.home}/frameworks/flex-config.xml&quot;/&gt;
</pre>
<p>Por incrível que pareça, a parametrização de intercionalização do projeto, foi mais fácil do que eu esperava. No nosso caso, o sistema está disponível em 3 idiomas.  Bastaram mais umas linhas, e tudo certo.</p>
<pre class="brush: xml;">
&lt;locale&gt;pt_BR&lt;/locale&gt;
 &lt;locale&gt;en_US&lt;/locale&gt;
 &lt;locale&gt;es_ES&lt;/locale&gt;
 &lt;source-path path-element=&quot;${project.path}/wedoWeb/flex_src&quot; /&gt;
 &lt;source-path path-element=&quot;${project.path}/Whiteboard/src&quot;/&gt;
 &lt;source-path path-element=&quot;${project.path}/wedoWeb/locale/{locale}&quot;/&gt;

&lt;include-resource-bundles&gt;nous&lt;/include-resource-bundles&gt;
 &lt;include-resource-bundles&gt;SharedResources&lt;/include-resource-bundles&gt;
 &lt;include-resource-bundles&gt;formatters&lt;/include-resource-bundles&gt;
</pre>
<p>Para compilar os demais módulos flex do seu projeto, a história se repte, é só mandar um <em>&lt;mxmlc&gt;</em> da mesma forma como fizemos aí em cima.</p>
<p>Depois disso,  ainda é preciso gerar o arquivo <em>html principal da aplicação</em>, sim.. aquele objeto que traz consigo o <em>.swf</em> dentro dele: o <em>html-wrapper</em>. O elemento <em>&lt;html-wrapper&gt;</em> gera pra você o <em>index.html e AC_OETags.js</em>, que serão necessários no deploy da aplicação. Além disso ele pode gerar <a href="http://livedocs.adobe.com/flex/3/html/help.html?content=anttasks_1.html" target="_blank">o resto da parafernália</a> (<em>adoro a pronúncia dessa palavra: pa-ra-fer-ná-li-a</em> &#8230;), como os arquivos <em>historyFrame.html, history.css e history.js</em></p>
<pre class="brush: xml;">
&lt;!-- Gera html-wrapper  --&gt;
 &lt;target name=&quot;wrapper-flex-html&quot; depends=&quot;compile-flex-wedoWeb-module&quot;&gt;
 &lt;echo message=&quot;${ant.project.name}: Gerando html-wrapper ...&quot;/&gt;
 &lt;html-wrapper
 title=&quot;&quot;
 file=&quot;wedoWeb.html&quot;
 height=&quot;&quot;
 width=&quot;&quot;
 bgcolor=&quot;&quot;
 application=&quot;&quot;
 swf=&quot;&quot;
 version-major=&quot;&quot;
 version-minor=&quot;&quot;
 version-revision=&quot;&quot;
 history=&quot;true&quot;
 template=&quot;express-installation&quot;
 output=&quot;${project.name}/output&quot;/&gt;

 &lt;html-wrapper
 title=&quot;&quot;
 file=&quot;wedoTest.html&quot;
 height=&quot;&quot;
 width=&quot;&quot;
 bgcolor=&quot;&quot;
 application=&quot;&quot;
 swf=&quot;&quot;
 version-major=&quot;&quot;
 version-minor=&quot;&quot;
 version-revision=&quot;&quot;
 history=&quot;true&quot;
 template=&quot;express-installation&quot;
 output=&quot;${project.name}/output&quot;/&gt;

 &lt;/target&gt;
</pre>
<p>O problema é que no nosso caso, já temos um <em>index.template.html, </em>que é utilizado na geração do <em>html</em> principal da aplicação. Por isso eu utilizei o <em>&lt;html-wrapper&gt;</em> apenas para geração da <em>parafernália</em> (novamente&#8230;) de arquivos <em>AC_OETags.js, </em><em>historyFrame.html, history.css, history.js</em> e o <em>index.html </em>padrão. Depois bastaram alguns <em>ctrl-c, ctrl-v</em> para os passar os parãmetros do template para o meu recém criado <em>wedoWeb.html</em>.</p>
<pre class="brush: xml;">
&lt;target name=&quot;copy-html-template&quot; depends=&quot;wrapper-flex-html&quot;&gt;
 &lt;echo message=&quot;${ant.project.name}: Gerando wedoWeb.html ...&quot;/&gt;
 &lt;delete file=&quot;wedoWeb/output/wedoWeb.html&quot;/&gt;
 &lt;copy file=&quot;${project.name}/html-template/index.template.html&quot;    tofile=&quot;${project.name}/output/wedoWeb.html&quot; /&gt;
 &lt;replace file=&quot;${project.name}/output/wedoWeb.html&quot; token=&quot;$${title}&quot; value=&quot;&quot;/&gt;
 &lt;replace file=&quot;${project.name}/output/wedoWeb.html&quot; token=&quot;$${swf}&quot; value=&quot;wedoWeb&quot;/&gt;
 &lt;replace file=&quot;${project.name}/output/wedoWeb.html&quot; token=&quot;$${width}&quot; value=&quot;100%&quot;/&gt;
 &lt;replace file=&quot;${project.name}/output/wedoWeb.html&quot; token=&quot;$${height}&quot; value=&quot;100%&quot;/&gt;
 &lt;replace file=&quot;${project.name}/output/wedoWeb.html&quot; token=&quot;$${bgcolor}&quot; value=&quot;#869ca7&quot;/&gt;
 &lt;replace file=&quot;${project.name}/output/wedoWeb.html&quot; token=&quot;$${application}&quot; value=&quot;wedoWeb&quot;/&gt;
 &lt;replace file=&quot;${project.name}/output/wedoWeb.html&quot; token=&quot;$${version_major}&quot; value=&quot;10&quot;/&gt;
 &lt;replace file=&quot;${project.name}/output/wedoWeb.html&quot; token=&quot;$${version_minor}&quot; value=&quot;0&quot;/&gt;
 &lt;replace file=&quot;${project.name}/output/wedoWeb.html&quot; token=&quot;$${version_revision}&quot; value=&quot;0&quot;/&gt;
</pre>
<p>Claro, antes disso ainda precisei manipular alguns arquivos&#8230; uns pra lá outros pra cá&#8230;  pra poder gerar o .war do jeito que eu queria. Mas isso também vai depender muito da estrutura do seu projeto.</p>
<p>Bem, acho que é isso. Depois é compilar todos os componentes e módulos flex, juntar tudo com o seu código fonte java,  empacotar o .war e <em>&#8220;voilà&#8221;, </em>temos o um projeto flex compilável.</p>
<p>Logo após as primeiras tentivas e alguns <a href="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/OutOfMemoryError.html" target="_blank"><em>java.lang.OutOfMemoryError: Java heap space</em></a> , precisei configurar a quantidade de memória para utlização do ANT. No script de inicialização, <em>ant.bat</em>, adicionei a linha abaixo e o problema foi resolvido.</p>
<pre class="brush: xml;">
   ANT_OPTS=-Xms512m -Xmx1024m -XX:PermSize=256m -XX:MaxPermSize=256m
</pre>
<p>Mas depois foi só correr pro abraço&#8230;</p>
<p>De qualquer forma, eu conheço de flex o quanto jogo de futebol, então se quiserem uma referência mais segura em desenvolvimento flex, é melhor darem uma olhada no <a href="http://joaoaugusto.com.br/blog/" target="_blank">blog do John</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://coding4food.com/2010/03/17/cruisecontrol-com-svn-%e2%80%93-parte-02/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Analistas de Sistemas. Quem ainda acredita neles ?</title>
		<link>http://coding4food.com/2008/10/28/analistas-de-sistemas-quem-ainda-acredita-neles/</link>
		<comments>http://coding4food.com/2008/10/28/analistas-de-sistemas-quem-ainda-acredita-neles/#comments</comments>
		<pubDate>Tue, 28 Oct 2008 15:37:26 +0000</pubDate>
		<dc:creator>Eduardo Kruger</dc:creator>
				<category><![CDATA[metodologia]]></category>
		<category><![CDATA[analistas]]></category>
		<category><![CDATA[programação]]></category>

		<guid isPermaLink="false">http://coding4food.com/?p=241</guid>
		<description><![CDATA[Alguns dias atrás, me vi numa discussão com alguns colegas, sobre funções, atividades e cargos dentro de uma empresa. Apensar desse assunto ainda ser bem confuso em TI, a maioria soube descrever suas atividades diárias como programadores. Porém, essa descrição não foi obtida tão facilmente quando nos perguntamos: Afinal de contas, o que um &#8220;Analista [...]]]></description>
			<content:encoded><![CDATA[<p>Alguns dias atrás, me vi numa discussão com alguns colegas, sobre funções, atividades e cargos dentro de uma empresa. Apensar desse assunto ainda ser bem confuso em TI, a maioria soube descrever suas atividades diárias como programadores. Porém, essa descrição não foi obtida tão facilmente quando nos perguntamos: Afinal de contas, o que um &#8220;Analista de Sistemas&#8221; faz ?</p>
<p>Alguns me falaram que o analista de sistemas é um profissional com mais experiência, com perfil investigativo, que deve fazer a análise dos requisitos e modelar uma solução. Outros disseram que analista de sistema não devem &#8220;perder&#8221;  tempo com detalhes sobre linguagem ou tecnologia, porque &#8220;análise&#8221; de sistemas deve ser feita em alto nível, a.k.a UML. Escutei também alguns comentários clássicos: analista de sistemas necessariamente não precisa saber programar, precisa apenas conhecer UML e algum editor de texto. <em>( &#8220;analistas de sitemas não precisam saber programar&#8230;&#8221;. Com certeza essa merece estar nas próximas <a href="http://coding4food.com/2008/09/28/as-falacias-da-programacao/" target="_blank">falácias da programação</a>, parte ll &#8230; hehe )</em></p>
<p>Sobre esse assunto, tenho que dizer que concordo com <a href="http://www.yepthatsme.com/" target="_blank">Barry Hawkins</a>: a <a href="http://coding4food.com/2008/08/03/fabricas-de-software/" target="_blank">super divisão de trabalho</a><a href="http://coding4food.com/2008/08/03/fabricas-de-software/" target="_blank"> no desenvolvimento de software, </a>foi umas das piores experiências da indústria de software nos últimos anos.</p>
<blockquote><p><strong>One of the most widespread tragedies in the practice of software development has been the tendency of corporate culture to over-compartmentalize the activities of software development. </strong>In the upper echelon of the artificial hierarchy of task separation sits the software architect. Sequestered away from the disturbing din of real life within the company, these persons are liberated from the mundane, in order that they may orchestrate plans that set in motion the work of many, unfettered by such things as domain knowledge and implementation constraints.<br />
Know this; the only people who belong in white towers are the captured princesses of fairy tales, and even then it was not of their volition. <strong>Partitioning the activity of design away from implementation destroys the call-and-response cycle between design and implementation.</strong> The relevance of your work is directly related to how engaged you are in the domain.<br />
- <a href="http://www.yepthatsme.com/" target="_blank">Barry Hawkins</a>.</p></blockquote>
<p>Estou convencido, que a separação das atividades de design e programação deveria ser qualificada como um anti-pattern do desenvolvimento de software. O <a href="http://en.wikipedia.org/wiki/Waterfall_model" target="_blank">waterfall</a> já vem mostrando por anos, que essa abordagem é um erro.</p>
<p>Porque é necessário criar um cargo especial para atividades, que deveriam ser de responsabilidade do programador ?! Análise, design, programação e arquitetura são atividades e não cargos. Nós, como programadores, precisamos vestir &#8220;chapéus&#8221; diferentes dentro de um projeto.</p>
<p>Quando questionamos requisitos, buscamos informações de nossos usuários, organizamos e priorizamos tarefas, estamos vestindo nosso chapéu de analista e gerente de projetos. Quando estamos codificando, nos preocupando com manutenabilidade, performance e com a correta aplicação de patterns, estamos vestindo nosso chapéu de programador e projetista. Ao escolhermos por um framework, por uma API, estamos com certeza tomando decisões de arquitetura.<br />
Não quero dizer aqui, que todo programador dever ser um  <a href="http://en.wikipedia.org/wiki/MacGyver" target="_blank">Macgyver</a> em TI. Mas tenho certeza, que se você é programador, é bem provável que você precise colocar à prova diariamente suas habilidades como programador, analista, arquiteto ou gerente.</p>
<p>A maioria dos programadores <a href="http://blog.fragmental.com.br/2008/01/15/quando-eu-crescer-quero-ser-analista-de-sistemas/" target="_blank">passam anos querendo se tornar analista de sistemas</a>, e quando conseguem, descobrem que como programadores, já desempenhavam atividades de análise a muito tempo. Além do mais, achar que um monte de diagramas UML podem modelar um sistema inteiro sem programar uma linha de código, não é algo muito inteligente. Analistas, arquitetos, projetistas, seja lá como for o nome que deram para ele, mas esse cara precisa saber programar - <em> <a href="http://97-things.near-time.net/wiki/show/if-you-design-it-you-should-be-able-to-code-it" target="_blank">If you design it, you should be able to code it </a>- <a href="http://comitservices.com/wp/" target="_blank">Mike Brown</a>:</em></p>
<blockquote><p>When designing the architecture for your project, you need to have a feel for what amount of effort is necessary to implement the various elements of your design. <strong>The easiest way to have the knowledge of the effort that a specific design element will take is to have developed it before.</strong></p>
<p>Don’t use a pattern in your design that you haven’t personally implemented before. Don’t rely on a framework that you haven’t coded against before. Don’t use a server that you haven’t configured before. If your architecture depends on design elements that you haven’t personally used, there are a number of negative side effects. <a href="http://comitservices.com/wp/" target="_blank">Mike Brown</a></p></blockquote>
<p>Muitas empresas de TI estão procurando &#8220;achatar&#8221; hierarquias, procurando manter profissionais mais qualificados, com conhecimentos multidisciplinares e que possam atuar em diversos papéis diferentes. Que possam programar, tomar decisões de arquitetura ou conversar com usuários se for necessário. Por mais que muita gente ainda pense o contrário: <strong>Profissionais competentes e equipes motivadas são fundamentais em qualquer empresa.</strong></p>
<p><strong></strong>E mesmo que os &#8220;Analistas de Sistemas&#8221; ainda existam para enfeitar alguns crachás corporativos ou anúncios de RH, eu já deixei de acreditar neles já faz algum tempo &#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://coding4food.com/2008/10/28/analistas-de-sistemas-quem-ainda-acredita-neles/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>As falácias da programação</title>
		<link>http://coding4food.com/2008/09/28/as-falacias-da-programacao/</link>
		<comments>http://coding4food.com/2008/09/28/as-falacias-da-programacao/#comments</comments>
		<pubDate>Mon, 29 Sep 2008 00:49:16 +0000</pubDate>
		<dc:creator>Eduardo Kruger</dc:creator>
				<category><![CDATA[programação]]></category>
		<category><![CDATA[falácias]]></category>
		<category><![CDATA[metodologia]]></category>

		<guid isPermaLink="false">http://coding4food.com/?p=180</guid>
		<description><![CDATA[Ouvir outras opniões, principalmente àquelas totalmente contrárias as suas é muito importante, seja para que você reforçe seus ideais ou simplesmente para que você reveja seus conceitos. Geralmente, quando tenho &#8220;absoluta certeza&#8221; de algo, procuro por uma segunda opnião, um outro ponto de vista. Isso porque, em TI, ter certeza absoluta sobre alguma coisa, me [...]]]></description>
			<content:encoded><![CDATA[<p>Ouvir outras opniões, principalmente àquelas totalmente contrárias as suas é muito importante, seja para que você reforçe seus ideais ou simplesmente para que você reveja seus conceitos. Geralmente, quando tenho &#8220;absoluta certeza&#8221; de algo, procuro por uma segunda opnião, um outro <a href="http://pt.wikipedia.org/wiki/Perspectiva_(cognitiva)" target="_blank">ponto de vista</a>. Isso porque, em TI, ter certeza absoluta sobre alguma coisa, me assusta.</p>
<p>Mas sinceramente, algumas coisas não tenho mais paciência pra escutar. Não sei se estou ficando velho. Não sei se estou ficando muito rabujento. Talvez sejam ambas as coisas. Quando se está a algum tempo &#8220;fazendo programas&#8221;, você acaba apreedendo muita coisa boa, mas principalmente, acaba identificando tudo aquilo que NÃO SE DEVE FAZER em desenvolvimento de software.<br />
Vou descrever abaixo algumas frases clássicas que provavelmente você já ouviu em alguma reunião, tech-talk ou de algum gerente &#8220;espertão&#8221;.</p>
<ol>
<li><strong>Programador não é pago pra pensar, é pago pra programar. </strong>Essa já perdeu a graça. Sério. Se seu gerente ainda acha que programação é simplesmente um processo mecânico e repetitivo, diga a ele para contratar <a href="http://en.wikipedia.org/wiki/Infinite_monkey_theorem" target="_blank">um milhão de macacos para fazer o trabalho</a>. Bem mais barato.<br />
Por favor, não importa qual o nome que as empresas dão a ele: desenvolvedor, programador, analista-programador, mas esse cara deve ser capaz de identificar requisitos e implementar soluções. E muito mais que isso, deve ter noções de arquitetura de software, deve conhecer as tecnologias e ferramentas que utiliza, se preocupar com requisitos não-funcionais, escalabilidade, etc. <span class="postbody">Não é necessário ser um &#8220;super-homem&#8221; auto-didata, mas precisa ter flexibilidade suficiente para participar de reuniões com o cliente e ter conhecimento técnico para implementar uma solução. E de qualquer forma, em desenvolvimento de software, <a href="http://en.wikipedia.org/wiki/Code_monkey" target="_blank">code monkeys </a>nunca foram uma opção.</p>
<p></span></li>
<li><strong>Programador deve apenas codificar o que está especificado.</strong><br />
Se a empresa que você trabalha tem um &#8220;analista&#8221; que pensa no que precisa ser feito, escreve um monte de diagramas numa linguagem de modelagem (a.k.a UML) e depois passa para um &#8220;programador&#8221; que apenas codifica em linguagem executável o que foi especificado, acho que seria interessante seu gerente dar uma olhada <a href="http://www.cs.umd.edu/class/spring2003/cmsc838p/Process/waterfall.pdf" target="_blank">nisso aqui</a>. E se esta abordagem fosse realmente eficiente/eficaz, os relatorios do <a href="http://www.standishgroup.com/" target="_blank">Standish Group</a> não estariam <a href="http://www.projectsmart.co.uk/docs/chaos-report.pdf" target="_blank">desse jeito</a>.<br />
Programador não baixa a cabeça e sai codificando. Programador deve saber o &#8220;porque&#8221; está implementando algo. Deve saber o contexto do problema e saber quais as necessidades dos stakeholders. Programador avalia soluções. Sugere melhorias. Critica requisitos de negócio. Ao contrário do que pregam muitas consultorias por aí, BONS PROGRAMADORES SEMPRE SERÃO FUNDAMENTAIS.<br />
<span></p>
<p></span></li>
<li><strong>Mas é apenas uma &#8220;alteraçãozínha&#8221; !!!</strong><br />
Pelo amor de Deus, não existe uma &#8220;alteraçãozinha&#8221; em TI. Por melhor que seja o design de suas classes. Por mais bem escrito que sejam seus componentes. Por mais simples que seja o seu ambiente de desenvolvimento, uma &#8220;alteraçãozinha&#8221; sempre irá envolver esforços de programação, testes e build para produção. Quanto a isso, independente das metodologia, frameworks ou ferramentas empregadas, não se pode fazer mágica.<br />
Se você trabalha num ambiente um pouco mais ágil (a.k.a SCRUM), é bem provável que você irá conseguir responder mais rapidamente a mudanças de requisitos, e o tratamento de alterações de código fonte serão mais tranquilas. Mas se você trabalha numa empresa que possui milhares de fases de desenvolvimento, artefatos, papelada e burocracia, a alteração de um &#8220;label&#8221; em produção pode se tornar uma tarefa sofrível.<br />
<span></p>
<p></span></li>
<li><strong>Está pronto, só falta testar !!!</strong><br />
Essa é clássica. Se você tem algum trecho de código que não foi coberto por testes&#8230; bem&#8230; você tem apenas código fonte.<em> </em></p>
<p><em>- Pronto, terminei !!!<br />
- Que bom !!! Posso ver como ficou ?!<br />
- Não.. não&#8230;não testei isso ainda..!!!</em><em><br />
- Humm ?!</em><br />
<em><br />
</em>Qualquer framework, componente ou serviço que se preze, deve ser no mínimo, verificável. E isso não aprendi na faculdade. Foi a tia Perivalda que me ensinou, a muito tempo atrás, nas aulas práticas de ciências: <em>se um experimento não pode ser verificável, então é apenas um modelo teórico.</em><br />
Qualquer alteração num sistema, deve ser acompanhado por no mínimo, um caso de testes. É fundamental que este mesmo sistema, tenha um conjunto de testes unitários e teste integrados que me permitam dizer se algo está errado.<br />
A muito tempo deixei de acreditar naqueles que dizem que os testes são outra &#8220;fase&#8221; do processo e que programador não se envolve com testes, apenas codifica. <a href="http://blog.fragmental.com.br/2007/10/31/programadores-profissionais-escrevem-testes-ponto-final/" target="_blank">Programadores escrevem testes, e ponto final</a>. <a href="http://en.wikipedia.org/wiki/Test-driven_development" target="_blank">TDD</a>, por exemplo, é uma ótima abordagem que permite o desenvolvimento de sistemas &#8220;testáveis&#8221; e vericáveis.</p>
<p>Por ora, essas são algumas das pérolas da programação que me vêm à memória. E mesmo que esse post tenha ficado com cara de &#8220;desabafo&#8221;, é bem possível que ainda escreva uma continuação para ele&#8230;</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://coding4food.com/2008/09/28/as-falacias-da-programacao/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>
