<?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>CMilfont &#187; Engenharia de software</title>
	<atom:link href="http://www.milfont.org/blog/archives/category/engenharia-de-software/feed" rel="self" type="application/rss+xml" />
	<link>http://www.milfont.org/blog</link>
	<description>Ultrapassando os limites da web!</description>
	<lastBuildDate>Sun, 03 Apr 2011 15:25:14 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Meu novo blog</title>
		<link>http://www.milfont.org/blog/archives/155</link>
		<comments>http://www.milfont.org/blog/archives/155#comments</comments>
		<pubDate>Tue, 02 Oct 2007 09:45:19 +0000</pubDate>
		<dc:creator>cmilfont</dc:creator>
				<category><![CDATA[Engenharia de software]]></category>
		<category><![CDATA[Tecnologia]]></category>
		<category><![CDATA[WEB 2.0]]></category>

		<guid isPermaLink="false">http://www.milfont.org/blog/archives/155</guid>
		<description><![CDATA[Urgente, atualizem seus feedreaders Criei um blog para falar somente sobre desenvolvimento, na verdade eu tinha criado já tem uns 2 meses, mas a falta de tempo e a preguiça clássica impediram de lancá-lo. Prometo um post novo todo santo dia, o foco como não poderia deixar de ser, vai ser as tecnologias que dão [...]]]></description>
			<content:encoded><![CDATA[<p>Urgente, atualizem seus feedreaders <img src='http://www.milfont.org/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Criei um blog para falar somente sobre desenvolvimento, na verdade eu tinha criado já tem uns 2 meses, mas a falta de tempo e a preguiça clássica impediram de lancá-lo.</p>
<p>Prometo um post novo todo santo dia, o foco como não poderia deixar de ser, vai ser as tecnologias que dão vida a WEB 2.0. Claro que não impede de falar sobre outras coisas como desenvolvimento desktop e assuntos que eu achar relevante e que seja ligado ao desenvolvimento.</p>
<p>Esse blog vai continuar sua existência, ficará para todos os outros assuntos não ligados a desenvolvimento de software. Há tempos reclamavam que eu falava muito de política e outros assuntos que não interessam os NERDS.</p>
<p>Ahhh&#8230; link do blog novo: <a href="http://www.milfont.org/tech">CMilfont Tech</a><!--6c5ed6ed292408ba8be416bad8c3d8bd--><!--42655a4a6d66656fb235e264620ebce1--><!--c0d6459135f9ffb93a3b739a4230630d--><!--45cc130734b0d6840ebfd6c0c8f59d79--><!--57ebe4ee11c81fb14fa50c674f4c9816--><!--36f4f466890cc187e396644074d04c0e--><!--2bdbe2cc564b00882d45d579f43ef7ba--><!--0307fde3e2b8f38d13769746d87e439d--></p>
]]></content:encoded>
			<wfw:commentRss>http://www.milfont.org/blog/archives/155/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Contratar um estagiário</title>
		<link>http://www.milfont.org/blog/archives/148</link>
		<comments>http://www.milfont.org/blog/archives/148#comments</comments>
		<pubDate>Mon, 03 Sep 2007 18:14:09 +0000</pubDate>
		<dc:creator>cmilfont</dc:creator>
				<category><![CDATA[Engenharia de software]]></category>

		<guid isPermaLink="false">http://www.milfont.org/blog/archives/148</guid>
		<description><![CDATA[O estágio é um modelo de trabalho muito específico, eu não confiaria um código importante nas mãos de estagiários. Não desmerecendo as pessoas, se você é estagiário e sabe codificar bem então sua empresa está desvalorizando seu potencial, saia enquanto é tempo. Contratar um estagiário é empregar alguém &#8220;verde&#8221; para acompanhar os projetos como um [...]]]></description>
			<content:encoded><![CDATA[<p>O estágio é um modelo de trabalho muito específico, eu não confiaria um código importante nas mãos de estagiários. Não desmerecendo as pessoas, se você é estagiário e sabe codificar bem então sua empresa está desvalorizando seu potencial, saia enquanto é tempo.</p>
<p>Contratar um estagiário é empregar alguém &#8220;verde&#8221; para acompanhar os projetos como um assistente, mas sem grande responsabilidades. Imagina um médico pedindo ao seu estagiário para ir cortanto o paciente enquanto ele toma café. É assim que várias empresas tratam seus estagiários.</p>
<p>O estágio é uma preparação de alguém ainda imaturo naquela área que abraça, por isso defendo o estágio desde o início dos cursos superiores. </p>
<p>Durante o almoço eu conversava sobre a condição que alguém se encontra para ser estagiário, elaborei aqui um pequeno roteiro para entrevista, tentar sumular essa sabatina como um teste oral:</p>
<p>1 &#8211; Participa de projeto Open Source?<br />
2 &#8211; Quantas regras de normalização você conhece (lembra)?<br />
3 &#8211; Usa DOCTYPE declarado como transitional no XHTML 1.1?<br />
4 &#8211; Qual o equivalente da função addEventListener no IE?<br />
5 &#8211; Voce usa um FeedReader web? poderia exportar para mim, como OPML, seus feeds mais importantes?<br />
6 &#8211; Ainda lembra do resultado de uma derivada de qualquer função constante?<br />
7 &#8211; Usou pnuts ou beanshell como DSL?<br />
8 &#8211; Já precisou implementar herança no javascript via método call.<br />
9 &#8211; Conhece a diferença de Continuation entre Ruby e como o praticado pelo RIFE?</p>
<h3><strong>Explanações</strong></h3>
<p>1 &#8211; Participa de projeto Open Source?</p>
<p>Qual a vantagem? demonstra que o cara pelo menos experimentou codificar entre gigantes, acompanha um projeto, tem uma certa experiencia que é dificil em novatos. Agora cuidado com quem é fanático, tipo o cara dá piti se tiver que trabalhar em uma estação Windows.</p>
<p>2 &#8211; Quantas regras de normalização você conhece (lembra)?</p>
<p>Geralmente voce só se preocupa com normalização se for DBA ou fez cadeira na faculdade, se pelo menos ele lembrar que são basicamente 3 mais importantes e mais 3 extendidas, é sinal que já estudou DML e DDL. Daí pode extender a conversa para controle de transação entre outras coisas.</p>
<p>3 &#8211; Usa DOCTYPE declarado como transitional no XHTML 1.1?</p>
<p>Se o cara não tiver idéia do que é isso ou enrolar é porque sabe pouco de web, se seu negócio/produto é baseado na web não é legal pegar alguém tão cru nisso.</p>
<p>4 &#8211; Qual o equivalente da função addEventListener no IE?</p>
<p>Mostra que o cara conhece DOM Events e no mínimo tem uma vivência legal na web.</p>
<p>5 &#8211; Voce usa um FeedReader web? poderia exportar para mim, como OPML, seus feeds mais importantes?</p>
<p>Essa pergunta para mim é a mais importante e serve para qualquer área/cargo.<br />
Para nossa área mostra que o indíduo é no mínimo geek, eu não gosto de trabalhar com não-geeks no desenvolvimento.</p>
<p>6 &#8211; Ainda lembra do resultado de uma derivada de qualquer função constante?</p>
<p>Só para saber se o cara é nerd mesmo e detectar o nível <img src='http://www.milfont.org/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>7 &#8211; Usou pnuts ou beanshell como DSL?</p>
<p>Se ele souber pelo menos o que é uma DSL já está de ótimo tamanho, se usou alguma dessas linguagens talvês esteja maduro demais <img src='http://www.milfont.org/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>8 &#8211; Já precisou implementar herança no javascript via método call.</p>
<p>Mostra que conhece detalhes da linguagem e sabe trabalhar com ela, dificilmente alguém com perfil de estagiário saberá.</p>
<p>9 &#8211; Conhece a diferença de Continuation entre Ruby e como o praticado pelo RIFE?</p>
<p>Se souber o que é Continuation, já está muito maduro. Se ele conhecer o RIFE já é grande coisa, imagina ainda mais a diferença entre Ruby e RIFE <img src='http://www.milfont.org/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  , deve ser contratado como desenvolvedor direto (mas o que ele estaria procurando em uma vaga de estágio?)<!--f81fc35f7094b905353fe6724bcd3451--><!--6630a956388c9bc717a0161bda095bec--><!--f7e04f3a128db85dc431778a15cf2b84--><!--799dfde4d92cb734989bfbb36e290074--><!--e613a98a6b146ed47cfa6d5e2e05a353--></p>
]]></content:encoded>
			<wfw:commentRss>http://www.milfont.org/blog/archives/148/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Modelo relacional prejudica a asbtração</title>
		<link>http://www.milfont.org/blog/archives/140</link>
		<comments>http://www.milfont.org/blog/archives/140#comments</comments>
		<pubDate>Tue, 07 Aug 2007 19:43:58 +0000</pubDate>
		<dc:creator>cmilfont</dc:creator>
				<category><![CDATA[Engenharia de software]]></category>

		<guid isPermaLink="false">http://www.milfont.org/blog/archives/140</guid>
		<description><![CDATA[Modelo relacional prejudica a asbtração Nos últimos tempos venho intrigado pensando porque a cultura Java se volta tanto ao modelo VO-DTO-BO que se popularizou, nas minhas investigações empíricas descobri um dos causadores e portanto levanto a hipótese que o modelo relacional pode provocar uma naturalidade na abordagem desse modelo. Lembro que fiz um curso ano [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Modelo relacional prejudica a asbtração</strong></p>
<p>Nos últimos tempos venho intrigado pensando porque a cultura Java se volta tanto ao modelo VO-DTO-BO que se popularizou, nas minhas investigações empíricas descobri um dos causadores e portanto levanto a hipótese que o modelo relacional pode provocar uma naturalidade na abordagem desse modelo.</p>
<p>Lembro que fiz um curso ano passado pago por voces (o governo pagou) de análise de sistemas orientado a objetos e aprendi segundo o professor, que um modelo eficiente em java é construir uma classe para cada tabela, uma action, um value object e um Business Delegate sempre. Assim como receita de bolo, e se dependendo da tela eu deveria criar um DTO para trabalhar em cima dos dados especificos da tela em questão.<br />
Detalhe importante, isso para qualquer sistema, desde aquele cadastro de locadora (Hello World de faculdade) à mega-hiper-supergerenciador financeiro. Vale dizer que o curso não me trouxe nada significativo, seu dinheiro foi totalmente disperdiçado, mas pior, deve ter confundido umas duas dúzias de programdores não-java (eu era o único que trabalha com java).</p>
<p><strong>Bancos relacionais são os vilões</strong></p>
<p>Desde que os Bancos de dados relacionais se firmaram no mercado que todo desenvolvimento é orientado a relacional. Observe que o desenvolvimento orientado a eventos que fez tanto sucesso com Visual Basic e Delphi é basicamente uma camada de manipulação das tabelas de um banco relacional. A orientação a objetos também sofre com isso. Não a orientação em si, mas a maioria dos desenvolvedores.</p>
<p>É evidente que o modelo relacional é eficientíssimo e trouxe uma evolução em todos os aspectos na manipulação dos dados, quem se lembra quando programava sem banco sabe muito bem disso. Cada projeto basicamente voce tinha que construir seu próprio banco de dados, garantir na aplicação concorrência e a segurança, entre outras coisas. Não sou tão velho, mas lembro que bancos de dados no Brasil eram luxo na década de 80 e ainda na primeira metade da década de 90, voce não tinha opções como existem hoje, muito menos cultura.</p>
<p>Com a popularidade dos bancos de dados, todo o trabalho de manipulação ficou resumido ao SQL. Isso evidentemente causou um consenso imediato no mercado, dificilmente um projeto que precise manipular dados e persistí-lo (quase todos) se dá ao luxo de não usar um SGBD. Toda a orientação a eventos foi por anos beneficiada pelo uso do SGBD.</p>
<p>A orientação a objetos se firmou como um conceito padrão de mercado pelo sucesso de linguagens como Java (que pela primeira ves na história uniu o mercado ao ambiente acadêmico, antes o que era sucesso em um como Delphi ou VB, não era usado em outro como C) que inspiraram outras como C# e que essa OO é a base de toda linguagem moderna como Ruby. Mas todo projeto usa os SGBDs que está baseado no modelo relacional e se choca com o desenvolvimento orientado a objetos.</p>
<p>A cultura relacional é ainda dominante e será em muito tempo, inclusive que a grande maioria dos desenvolvedores inciam em conceitos que não o orientado a objetos e difcilmente aprendem de forma correta, se limitando a imitarem o modelo relacional com uma linguagem OO.</p>
<p><strong>Mapeamento Objeto Relacional</strong></p>
<p>O mais comum que já presenciei é iniciarem um projeto pelo modelo relacional do banco ou influenciados por ele, mesmo quando se inicia modelando as classes, todos os diagramas já são pensados em como vão ficar como Entidades.</p>
<p>Isso é muito comum, primeiro inicia o modelo E/R, depois vai fazendo as classes e se aplica toda a OO do projeto, por isso fica quase impossível uma cultura que não caia na tentação de simular as tabelas como classes, daí surgirem os famigerados VOs diferentes do que determina o Pattern.</p>
<p>No mundo Java, a arquitetura Entidade-Classe, onde cada entidade do modelo relacional possui uma classe correspondente não é o melhor mapeamento, quando não o pior. Mas essa cultura de se pensar no modelo relacional provoca essa associação</p>
<p>Hoje com ferramenta como Hibernate, o custo de desenvolvimento do mapeamento cai drasticamente, mas mesmo assim não faz milagres, ainda moldamos certos relacionamentos pela característica relacional da coisa.</p>
<p>Os testes unitários tambem ajudam a isolar o aspecto de tratamento de dados da aplicação, mas se você trabalha sem um ambiente ágil que siga rigorosamente uma metodologia que prioriza os testes unitários, fica quase impossível não cair na tentação de implementar diretamente. Precisa muito autocontrole para não burlar a ordem do desenvolvimento.</p>
<p>Recentemente iniciei em um projeto novo de desenvolvimento e caímos na modelagem do banco, foi muito trabalhoso tentar incutir nas pessoas que a modelagem OO nada tem a ver com o modelo E/R e que esse poderia ficar para uma etapa posterior ao desenvolvimento do domínio da aplicação, pelo menos dos casos trabalhados, mas a resistência é enorme a uma abordagem que não possuam um banco diretamente.</p>
<p>Aplicar um desenvolvimento OO puro no domínio da aplicação hoje é dificil pela cultura dos bancos relacionais mas não impossível, não temos cultura suficiente para isso, basta dizer que no Brasil OO ainda é novidade comparado com toda a literatura e situação na civilização mas chegamos lá.</p>
<p>Minha fé se concentra nas ferramentas de mapeamento como Hibernate que influenciaram especificações como a JPA.</p>
<p>Veremos.<!--b8079aeb6bbeccee2f61749e303b7602--><!--358b7242fb00fb9d8c60862dbbbd46d7--></p>
]]></content:encoded>
			<wfw:commentRss>http://www.milfont.org/blog/archives/140/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Enojado</title>
		<link>http://www.milfont.org/blog/archives/139</link>
		<comments>http://www.milfont.org/blog/archives/139#comments</comments>
		<pubDate>Mon, 30 Jul 2007 17:59:55 +0000</pubDate>
		<dc:creator>cmilfont</dc:creator>
				<category><![CDATA[Engenharia de software]]></category>

		<guid isPermaLink="false">http://www.milfont.org/blog/archives/139</guid>
		<description><![CDATA[Sem muito tempo para escrever, rabiscarei algumas considera&#231;&#245;es sobre a &#34;Engenharia de Software&#34; no ano da gra&#231;a de 2007 que me deixam profundamente enojado. Tivemos avan&#231;os significativos no modo como fazemos software nos &#250;ltimos anos, deixamos de lado analogias com a constru&#231;&#227;o civil e focamos nas caracter&#237;sticas mut&#225;veis do software para tentar entend&#234;-lo. Tudo vai [...]]]></description>
			<content:encoded><![CDATA[<p>Sem muito tempo para escrever, rabiscarei algumas considera&ccedil;&otilde;es sobre a &quot;Engenharia de Software&quot; no ano da gra&ccedil;a de 2007 que me deixam profundamente enojado.</p>
<p>Tivemos avan&ccedil;os significativos no modo como fazemos software nos &uacute;ltimos anos, deixamos de lado analogias com a constru&ccedil;&atilde;o civil e focamos nas caracter&iacute;sticas mut&aacute;veis do software para tentar entend&ecirc;-lo. Tudo vai bem a n&atilde;o ser o temor que tenho de que os abutres do charlatanismo vir&atilde;o agora atr&aacute;s  da carne fresca, n&atilde;o deixar&atilde;o sequer o animal morrer para estra&ccedil;alh&aacute;-lo.</p>
<p>Hoje mesmo comentei <a href="http://rafael-carneiro.blogspot.com/2007/07/me-ajude-lembrar-scrum-xp-rup-cmm-mpsbr.html">nesse post</a> do <a href="http://rafael-carneiro.blogspot.com/">Rafael Carneiro</a> sobre o problema estar nas pessoas por n&atilde;o entenderem a metodologia do que propriamente na metodologia. <a href="http://rafael-carneiro.blogspot.com/2007/07/me-ajude-lembrar-scrum-xp-rup-cmm-mpsbr.html#comment-7464873851847022696">Comentei</a> que daqui a pouco essas empresas todas correr&atilde;o atr&aacute;s dos m&eacute;todos &aacute;geis para enfeitarem seus portfolios e n&atilde;o ser&atilde;o nada &aacute;geis, assim como n&atilde;o sabem aplicar o RUP. O problema n&atilde;o est&aacute; na metodologia, eu me enganei quando pensei que o RUP que era errado, as pessoas &eacute; que n&atilde;o entendem como usar.</p>
<p>Pois bem, colaram no meu gtalk o link de uma <a href="http://www.guj.com.br/posts/list/63476.java">discuss&atilde;o no GUJ</a> sobre uma mat&eacute;ria da revista <a href="http://portalexame.abril.com.br/">EXAME</a> com o t&iacute;tulo &quot;F&aacute;bricas de informa&ccedil;&atilde;o&quot;. Eu li a discuss&atilde;o sobre trechos da reportagem ap&oacute;s o almo&ccedil;o, ou seja, vomitei a parte mais gostosa da feijoada, toda aquela gordurinha dos nossos amigos su&iacute;nos que n&atilde;o havia sido digerida ainda. N&atilde;o que o problema seja da revista ou do autor da mat&eacute;ria, pelo contr&aacute;rio, a mat&eacute;ria n&atilde;o se inclui na categoria de <a href="http://www.contraditorium.com/2007/07/30/como-linus-roubou-o-codigo-do-windows-e-outras-maravilhas-do-jornalismo-especializado/">n&atilde;o ser especializada</a> porque as maiores empresas de consultoria (como TCS, EDS, BRQ, IBM, Accenture, Stefanini) colaboraram com a reportagem e concordam 100% como tudo que foi escrito. </p>
<p>Essas empresas daqui a aproximadamente 12 meses estar&atilde;o contratando profissionais especializados em metodologias &aacute;geis que possuam certifica&ccedil;&atilde;o Scrum e afirmar&atilde;o que apenas os possuidores de CMMi n&iacute;vel 5 ser&atilde;o capazes de desenvolverem softwares adapt&aacute;veis. Um mercado editorial se alargar&aacute; com obras como &quot;Seja &aacute;gil em 24hrs&quot; e &quot;Como se tornar um ScrumMaster&quot;. O ciclo recome&ccedil;a, e tome palestras organizadas pela VOCE S/A para explicar aos acionistas o que os CIOs querem fazer com aquele aumento de 2% no or&ccedil;amento trimestral, isso tudo aliado a buzzwords lindas e emotivas que fazem a gente se orgulhar de ter um diploma de Bacharel em Ci&ecirc;ncia da Computa&ccedil;&atilde;o na sala da av&oacute; materna.</p>
<p>Como hoje meditei, fiz Yoga, acendi um incenso e tomei um chazinho, n&atilde;o vou me alongar nesse assunto. </p>
<p>Fiquem com um pouco de sabedoria chinesa que escreveram na revista, daquelas de 1,99:</p>
<p>&quot;A produ&ccedil;&atilde;o &eacute; organizada como numa linha de  montagem. &Eacute; comum que estes profissionais nem saibam exatamente para  que serve o software que est&atilde;o criando.&quot;</p>
<p>J&aacute; que gostam tanto de analogia, imagina agora um padeiro recebendo parte da receita e tentanto imaginar o que est&aacute; &quot;programando&quot;, ser&aacute; que &eacute; assim que funciona uma padaria? Essas empresas nem para budega servem, mas tem CMMi5.</p>
<p><!--00c2b96b10d20ab80519e88660ab45f7--><!--fafc78ba8d6ecd892bf8381228c683e4--><!--64442a57ad2e544fc3da187c8852de86--><!--db8ce70aa81234a4b58e4a66e4ec2496--><!--bd6aa765642261d8b223fd0627afbc5d--><!--2d00e91a7fa7dafe2be6df505cd326a3--><!--aeadefcc2f2cb0af5d852625d96841ac--><!--cfa013b577042fa6dd83156acec2bcf0--></p>
]]></content:encoded>
			<wfw:commentRss>http://www.milfont.org/blog/archives/139/feed</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Porque usamos Frameworks?</title>
		<link>http://www.milfont.org/blog/archives/137</link>
		<comments>http://www.milfont.org/blog/archives/137#comments</comments>
		<pubDate>Thu, 19 Jul 2007 18:09:51 +0000</pubDate>
		<dc:creator>cmilfont</dc:creator>
				<category><![CDATA[Engenharia de software]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Tecnologia]]></category>

		<guid isPermaLink="false">http://www.milfont.org/blog/archives/137</guid>
		<description><![CDATA[Porque usamos Frameworks? Vamos contextualizar o que s&#227;o Frameworks. Segundo a Wikipedia: &#34;No desenvolvimento do software, um framework ou arcabou&#231;o &#233; uma estrutura de suporte definida em que um outro projeto de software pode ser organizado e desenvolvido. Um framework pode incluir programas de suporte, bibliotecas de c&#243;digo, linguagens de script e outros softwares para [...]]]></description>
			<content:encoded><![CDATA[<h3><strong>Porque usamos Frameworks?</strong></h3>
<p>Vamos contextualizar o que s&atilde;o <a href="http://pt.wikipedia.org/wiki/Framework">Frameworks</a>. Segundo a Wikipedia:</p>
<p><cite>&quot;No desenvolvimento do <a href="http://pt.wikipedia.org/wiki/Software" title="Software">software</a>, um <strong>framework</strong> ou <strong>arcabou&ccedil;o</strong> &eacute; uma estrutura de suporte definida em que um outro projeto de software pode ser organizado e desenvolvido. Um <em>framework</em> pode incluir programas de suporte, bibliotecas de c&oacute;digo, linguagens de  script e outros softwares para ajudar a desenvolver e juntar diferentes  componentes de um projeto de software.&quot;</cite></p>
<p>Segundo essa defini&ccedil;&atilde;o, o Framework deveria nos auxiliar como construir nossa aplica&ccedil;&atilde;o sem nos preocuparmos em definirmos a estrutura dos paradigmas ou teorias escolhidos, em outras palavras: &quot;Extendemos um framework e implementamos apenas os processos levantados em cima do fluxo que ele organiza&quot;. Alguns Frameworks, como o Hibernate, v&atilde;o mais al&eacute;m, s&atilde;o <a href="http://en.wikipedia.org/wiki/Software_engine">Engines</a>, motores de software prontos para uso. </p>
<p>Vamos exemplificar em alguns contextos. Os conceitos s&atilde;o importantes para a escolha dos frameworks necess&aacute;rios, quando voce desconhece ou <a href="http://www.milfont.org/blog/archives/111">relega</a> isso fica muito mais dif&iacute;cil ter o feeling necess&aacute;rio para avaliar uma situa&ccedil;&atilde;o como essas. </p>
<p>Uma das formas cl&aacute;ssicas de desacoplamento de um servi&ccedil;o para diferenciar o tratamento adequado &agrave; requisi&ccedil;&atilde;o &eacute; na implementa&ccedil;&atilde;o de f&aacute;bricas de classes concretas das interfaces sugeridas. A implementa&ccedil;&atilde;o de DAOs &eacute; cl&aacute;ssica como exemplo disso, voce cria uma interface para manipula&ccedil;&atilde;o dos dados e classes concretas para cada mecanismo de persist&ecirc;ncia diferente. A invers&atilde;o de controle a inje&ccedil;&atilde;o de depend&ecirc;ncias foi uma evolu&ccedil;&atilde;o desse modelo, auxiliando at&eacute; na camada de modelo caso necessite desse desacoplamento, como por exemplo uma interface de Nota Fiscal para encapsular entre o sistema de contabilidade e faturamento, o &quot;quando&quot; injetar fica a cargo do framework que conhece o mapeamento adequado. Voce n&atilde;o vai desenvolver inje&ccedil;&atilde;o porque existe o melhor Framework para isso e ele se chama Spring. </p>
<p>Ap&oacute;s a populariza&ccedil;&atilde;o dos bancos de dados para o desenvolvimento de software, dificilmente voce divergir&aacute; (por press&atilde;o do mercado) nesse segmento em prol de outra solu&ccedil;&atilde;o, ainda mais se a persist&ecirc;ncia requer cuidados capciosos e de dificil manipula&ccedil;&atilde;o e manuten&ccedil;&atilde;o como controle de concorr&ecirc;ncia. Ainda hoje existem sistemas que fazem seu pr&oacute;prio mecanismo de persist&ecirc;ncia, e n&atilde;o estou falando em salvar dados em xml, falo ainda em arquivos comuns, sem padroniza&ccedil;&atilde;o reconhecida pelo mercado, geralmente sistema legado com seus bons 15 ou at&eacute; 20 anos de exist&ecirc;ncia. Mas o uso de SGBDs se chocam com o desenvolvimento Orientado a Objetos e o mapeamento objeto-relacional corresponde pela parte mais significativa do tempo de desenvolvimento medida em horas. O uso de um framework para minimizar esse desenvolvimento &eacute; significativo no sucesso do projeto. O problema reside quando voce abdica do uso de um produto reconhecido e amplamente suportado por uma solu&ccedil;&atilde;o <em>In House</em>. </p>
<h3><strong>Frameworks caseiros</strong></h3>
<p>A comunidade JAVA &eacute; pejoramente reconhecida pela utiliza&ccedil;&atilde;o desenfreada de padr&otilde;es e Frameworks, o que acarreta em complexidades enormes e geralmente evit&aacute;veis. Como a plataforma JAVA &eacute; robusta e dominou o modelo <em>Enterprisey</em> (usada como principal plataforma pelos maiores Players no fornecimento de solu&ccedil;&otilde;es como IBM, Sun, Oracle, Borland, etc), unificando de forma in&eacute;dita o marcado e o mundo acad&ecirc;mico, acarretou na prolifera&ccedil;&atilde;o de Frameworks que solucionam um mesmo contexto. Nenhuma plataforma &eacute; t&atilde;o rica em solu&ccedil;&otilde;es diferentes para o mesmo problema. Solu&ccedil;&atilde;o para uns, problemas para outros. &Eacute; comum desenvolvedores menos experientes sofrerem crises existenciais sobre qual solu&ccedil;&atilde;o adotar, vide o modelo MVC Model 2 que possui meio milh&atilde;o de frameworks que fazem a mesma coisa (vale ressaltar a sanidade mental do pessoal do Struts e Webwork que resolveram unificar suas solu&ccedil;&otilde;es e fazer algo melhor juntos). </p>
<p>Tenho e tive problemas s&eacute;rios com equipes que acham que podem criar uma solu&ccedil;&atilde;o melhor que o mundo inteiro. Explico, na empresa que trabalho existe uma ferramenta que se prop&otilde;e a competir com o Hibernate com a diferen&ccedil;a que s&oacute; quem conhece s&atilde;o as pessoas que trabalharam na sua concep&ccedil;&atilde;o e por sinal nem fazem parte da empresa em quest&atilde;o. Ser&aacute; que elas pensaram em todos os problemas do mapeamento objeto-relacional que grandes especialistas no mundo inteiro pensaram e ajudaram a solucionar ou mesmo minimizar no Hibernate? Evidente que n&atilde;o tiveram recursos suficientes. </p>
<p>E aqueles Frameworks que suspostamente s&atilde;o Open Source mas que o controle &eacute; rigidamente orquestrado por uma empresa apenas? Eles conseguem a efici&ecirc;ncia na resolu&ccedil;&atilde;o de problemas com tamanha agilidade e precis&atilde;o que projetos abertos e suportados por uma grande comunidade?</p>
<p>A diversidade &eacute; interessante, a concorr&ecirc;ncia ajudou ao JAVA ser o que &eacute;, mas o ego e os sentimentos humanos de disc&oacute;rdia por ciumes ou v&iacute;cios semelhantes proliferam ferramentas desnecess&aacute;rias. Voc&ecirc; teve uma id&eacute;ia excelente que melhora um conceito? O que est&aacute; esperando para criar um projeto? Mas ser&aacute; que n&atilde;o &eacute; melhor contribuir com um projeto existente e ajud&aacute;-lo a melhorar? Essas s&atilde;o quest&otilde;es que s&oacute; dependem das pessoas envolvidas, n&atilde;o est&aacute; certo ou errado criar mais uma ferramenta, mas &eacute; saud&aacute;vel saber escolher, antes de tudo &eacute; prefer&iacute;vel levar em conta o p&oacute;s-desenvolvimento, esse &eacute; o mais importante nos custos finais de um produto. </p>
<p>A escolha precipitada principalmente empolgada por apresenta&ccedil;&otilde;es e promessas m&aacute;gicas de solucionar o que o mercado tenta a 30 anos ou mais &eacute; a mais nociva &agrave; sa&uacute;de financeira dos neg&oacute;cios. Assim como existem pessoas que n&atilde;o saem sem consultar o hor&oacute;scopo do dia ou levam a s&eacute;rio charlatanismo de b&uacute;zios e bacias com &aacute;gua, existem arquitetos e gerentes que acreditam que algu&eacute;m solucionou um problema do mercado e est&aacute; cobrando somente U$ 20,000 d&oacute;lares por isso. Pior, acreditam que sua equipe conseguir&aacute; desenvolver uma ferramenta melhor do que o mundo inteiro. Isso que n&atilde;o entendo, geralmente as empresas j&aacute; trabalham no limite de seus recursos, o que diabos levam a crer que desenvolvendo algo que j&aacute; existe &eacute; melhor do que ajudar a melhor&aacute;-lo?</p>
<p>Quem se enganou com Egen e coisas similares se enganou n&atilde;o por falta de aviso, isso &eacute; comum na engenharia de softwares, ningu&eacute;m pode substituir o ser humano na cria&ccedil;&atilde;o, n&atilde;o existe intelig&ecirc;ncia artificial ainda que consiga pensar, e o software &eacute; uma cria&ccedil;&atilde;o, &eacute; como uma obra de arte precisa de um artista. Porque modelos de desenvolvimento falharam por associar o desenvolvimento de software com constru&ccedil;&atilde;o civil? Porque depois que se levanta um pr&eacute;dio, ninguem o move para a direita ou muda um andar de lugar, j&aacute; no software voc&ecirc; pode iniciar a constru&ccedil;&atilde;o pelo telhado. O que eu quero dizer com isso &eacute; que um framework &eacute; apenas um arcabou&ccedil;o como diz a defini&ccedil;&atilde;o do Wikipedia, ele n&atilde;o vai implementar seus processos, somente o programador. </p>
<h3><strong>Usar ou n&atilde;o usar.</strong></h3>
<p>Quanta complexidade voc&ecirc; gosta? Eu gosto do simples, quanto mais simples melhor.</p>
<p>Se eu sou contratado para desenvolver um software web, eu n&atilde;o chego com Spring, Struts, Hibernate, JSF, KYZ debaixo do bra&ccedil;o e digo: quando come&ccedil;amos e qual &eacute; o prazo?</p>
<p>Quando falamos em desenvolvimento WEB (um exemplo para contextualizarmos) de forma tradicional s&oacute; vem na minha mente inicialmente que tratarei de trabalhar com o protocolo HTTP, tecnologias das especifica&ccedil;&otilde;es W3C (como CSS, XHTMl) e JEE no lado servidor (mas ainda num sentido macro, nem sei se precisarei de EJBs, talv&ecirc;s apenas JSP e Servlet).</p>
<p>Vamos voltar um pouco no passado, a Sun criou os EJBs imaginando um modelo distribu&iacute;do que estava em moda no in&iacute;cio desse mil&ecirc;nio. O cotidiano das empresas mostrou que esse modelo n&atilde;o era realidade, poucos s&atilde;o os casos que sistemas precisam rodar em servidores de aplica&ccedil;&otilde;es distintos. Imaginavam a contabilidade no Brasil e o Financeiro na Europa por exemplo. Qual a realidade disso nas empresas? At&eacute; nas grandes isso &eacute; incomum  quando se parte para a pr&aacute;tica, invi&aacute;vel pelos custos log&iacute;sticos associados em todos os fatores que impactam nos neg&oacute;cios como comunica&ccedil;&atilde;o entre os manipuladores dos dados. Porque eu vou usar EJB se meu sistema  sequer &eacute; distribu&iacute;do? Existem outros fatores, mas compensa o custo? Engra&ccedil;ado como a nova especifica&ccedil;&atilde;o deixou o Criteria do Hibernate de fora do JPA e ainda disseram que Criteria era extranho, extranho &eacute; essa insanidade de deixar de fora o principal componente do Framework que deu vida ao tro&ccedil;o. </p>
<p>Como algu&eacute;m pode antes de sequer conhecer os processos do neg&oacute;cio j&aacute; saber que vai usar Spring? e para que?</p>
<p>N&atilde;o quero tirar o m&eacute;rito de nenhum framework aqui, apenas saber se o uso est&aacute; sendo razo&aacute;vel.</p>
<p>Recentemente foi selecionado para ser o arquiteto de um projeto novo aqui na secretaria que trabalho, selecionei como arquitetura da aplica&ccedil;&atilde;o apenas JSP, Servlet e DWR (como controlador da aplica&ccedil;&atilde;o) al&eacute;m dos POJOS no modelo da aplica&ccedil;&atilde;o usando Hibernate3 como engine de persistencia, ponderei sobre o que precisava e cheguei a conclus&atilde;o que isso era o suficiente. Deu uma confus&atilde;o dos diabos com o desenvolvedor porque segundo ele, n&atilde;o sabia trabalhar com servlet, nunca desenvolveu na vida sem o Struts, deu piti, sustentei minha argumenta&ccedil;&atilde;o, dei piti, discutimos, ele me xingou, eu pedi para sair do projeto, no final a ger&ecirc;ncia do projeto <strong>SABIAMENTE</strong> me deu ganho de causa (&oacute;bvio que se eu tivesse perdido a queda de bra&ccedil;os eu estaria chamando de n&atilde;o sabios). Tirei dessa experi&ecirc;ncia que os princ&iacute;pios s&atilde;o mais importantes que as pr&aacute;ticas, que os valores s&atilde;o ainda mais importantes ainda. Fui precipitado e confesso que n&atilde;o soube levar a situa&ccedil;&atilde;o da devida forma. Resumo da hist&oacute;ria, o &uacute;nico servlet que existe at&eacute; o momento na aplica&ccedil;&atilde;o &eacute; o do DWR que nem foi n&oacute;s que desenvolvemos, criamos os dois casos de uso principais (que s&atilde;o o cora&ccedil;&atilde;o da aplica&ccedil;&atilde;o) e agora que vir&atilde;o aqueles cadastros e opera&ccedil;&otilde;es CRUD que correspondem aos resto da aplica&ccedil;&atilde;o mas &eacute; a parte mais simples. Pode at&eacute; ser que daqui por diante venha a precisar de Struts ou outro Framework, mas at&eacute; agora n&atilde;o precisei, o custo de adicionar na aplica&ccedil;&atilde;o &eacute; irris&oacute;rio, mas construir sobre algo que n&atilde;o havia necessidade era alt&iacute;ssimo. </p>
<p>Quando algu&eacute;m me pergunta o que acho de usar um determinado Framework, eu fa&ccedil;o como Plat&atilde;o, respondo com perguntas para saber se h&aacute; a necessidade.</p>
<p><!--15cadc023914523a5f138e475e87b1a4--><!--b206c9d9dea34c75c0758161b85727ac--><!--ff0b4a71ddf076dca75fb51b1321096b--><!--51e4eea97f93ec67f913cca3df75b490--><!--3b9d5f2134fd5cd6f969f6fc3b0f80b0--><!--193004961ab43f32f415ccaa443425ac--><!--096d6094f4ee1b59b46efab501ebddac--><!--9366f79ff5d2accf28dbd41d1bda71dc--><!--8cebefb314da448841837a059bb2ebf1--><!--d3d88498aadeeec091f92e5df13a6985--></p>
]]></content:encoded>
			<wfw:commentRss>http://www.milfont.org/blog/archives/137/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>O que acham do nível superior?</title>
		<link>http://www.milfont.org/blog/archives/136</link>
		<comments>http://www.milfont.org/blog/archives/136#comments</comments>
		<pubDate>Mon, 16 Jul 2007 15:25:31 +0000</pubDate>
		<dc:creator>cmilfont</dc:creator>
				<category><![CDATA[Blogosfera]]></category>
		<category><![CDATA[Engenharia de software]]></category>

		<guid isPermaLink="false">http://www.milfont.org/blog/archives/136</guid>
		<description><![CDATA[Seguindo a s&#233;rie sobre meu dilema pessoal, eis minha resposta em uma lista de discuss&#227;o sobre uma thread aleat&#243;ria sobre isso no in&#237;cio desse ano. Escreveram isso: &#34;Ou seja, podemos ver que o termo analista &#233; usado apenas para separar o profissional de n&#237;vel superior do cara de n&#237;vel t&#233;cnico (2&#176; grau)&#34; Respondi isso: Considero [...]]]></description>
			<content:encoded><![CDATA[<p>Seguindo a s&eacute;rie sobre meu dilema pessoal, eis minha resposta em uma lista de discuss&atilde;o sobre uma thread aleat&oacute;ria sobre isso no in&iacute;cio desse ano.</p>
<p><strong>Escreveram isso</strong>: &quot;Ou seja, podemos ver que o termo analista &eacute; usado apenas para separar o<br />
  profissional de n&iacute;vel superior do cara de n&iacute;vel t&eacute;cnico (2&deg; grau)&quot; </p>
<p><strong>Respondi isso</strong>: </p>
<p>  Considero  que n&atilde;o tem diferen&ccedil;a alguma entre uma pessoa apenas com 2&ordm; grau e uma  que cursou uma faculdade, se a pessoa que tiver apenas 2&ordm; grau estudou  o mesmo conte&uacute;do que &eacute; ensinado na faculdade. Conhe&ccedil;o v&aacute;rias pessoas  que se enquadram nesse contexto mas por press&atilde;o mercadol&oacute;gica que  espera que eles tenham um diploma estampado na sala as fizeram ir  cursar uma faculdade.</p>
<p>  Conheco mestres que o diploma vale tanto que um papel higi&ecirc;nico usado!</p>
<p>  Antes de tudo eu sou programador<br />
<a target="_blank" href="http://www.milfont.org/blog/archives/114">http://www.milfont.org/blog/archives/114</a></p>
<p>  A  maioria daqueles que querem ser&nbsp;&nbsp;analistas e gerentes de projeto que  conheci n&atilde;o estavam atras simplesmente de dinheiro, mas porque n&atilde;o s&atilde;o  programadores. <a target="_blank" href="http://www.milfont.org/blog/archives/121">http://www.milfont.org/blog/archives/121</a></p>
<p>  Diploma n&atilde;o garante conhecimento, tem muitos que possuem diploma e n&atilde;o conseguem distinguir o b&aacute;sico.<br />
<a target="_blank" href="http://www.milfont.org/blog/archives/111">http://www.milfont.org/blog/archives/111</a></p>
<p>  Como vivemos em um pa&iacute;s que usa a carta del lavoro&nbsp;&nbsp;de Mussoline, temos que nos sujeitar &agrave; informalidade <a target="_blank" href="http://www.milfont.org/blog/archives/105">http://www.milfont.org/blog/archives/105</a></p>
<p>  Essas pessoas adoram uma guilda e gostam mesmo &eacute; de viver do suor dos outros<br />
<a target="_blank" href="http://www.milfont.org/blog/archives/101">http://www.milfont.org/blog/archives/101</a></p>
<p>  Para mim o que vale antes de tudo &eacute;&nbsp;&nbsp;a experi&ecirc;ncia do sujeito<br />
<a target="_blank" href="http://www.milfont.org/blog/archives/97">http://www.milfont.org/blog/archives/97</a></p>
<p>  Existem ainda aqueles que falam e fazem bastante ru&iacute;do, se jactam de certificados e diplomas e na hora do vamos ver O.o<br />
<a target="_blank" href="http://www.milfont.org/blog/archives/124">http://www.milfont.org/blog/archives/124</a></p>
<p>  Para aliviar o stress do cotidiano temos que mandar essa gente toda se fu@#$<br />
  <a target="_blank" href="http://www.milfont.org/blog/archives/104">http://www.milfont.org/blog/archives/104</a></p>
<p><!--8d9db6d01b4f405fd249b3c929d081cb--><!--1da2775da9ebff674010dc501c43fd70--><!--08597f2e395947944c82f105e50b2689--></p>
]]></content:encoded>
			<wfw:commentRss>http://www.milfont.org/blog/archives/136/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Penitência, voltar para a faculdade</title>
		<link>http://www.milfont.org/blog/archives/135</link>
		<comments>http://www.milfont.org/blog/archives/135#comments</comments>
		<pubDate>Mon, 16 Jul 2007 14:33:20 +0000</pubDate>
		<dc:creator>cmilfont</dc:creator>
				<category><![CDATA[Engenharia de software]]></category>

		<guid isPermaLink="false">http://www.milfont.org/blog/archives/135</guid>
		<description><![CDATA[Todo in&#237;cio de semestre tenho a mesma d&#250;vida: &#34;voltar ou n&#227;o para a faculdade por mais este semestre&#34;, parece at&#233; coisa do A.A. que tem aquela frase legal (s&#243; por hoje n&#227;o beberei, ou algo assim) . Entrei na faculdade de Ci&#234;ncias da Computa&#231;&#227;o em 1999.1, larguei no final de 2002 e voltei no in&#237;cio [...]]]></description>
			<content:encoded><![CDATA[<p>Todo in&iacute;cio de semestre tenho a mesma d&uacute;vida: &quot;voltar ou n&atilde;o para a faculdade por mais este semestre&quot;, parece at&eacute; coisa do <a href="http://www.alcoolicosanonimos.org.br/">A.A.</a> que tem aquela frase legal (s&oacute; por hoje n&atilde;o beberei, ou algo assim) .</p>
<p>Entrei na faculdade de Ci&ecirc;ncias da Computa&ccedil;&atilde;o em 1999.1, larguei no final de 2002  e voltei no in&iacute;cio de 2006. Parei novamente nesse primeiro semestre de 2007 e c&aacute; estou com a mesma d&uacute;vida para esse semestre.</p>
<p>N&atilde;o, eu n&atilde;o sei quantas cadeiras faltam, deixei  de contar faz tempo j&aacute;, mas sei que ainda faltam alguns semestres&#8230; acho que 3 semestres&#8230; acho.</p>
<h3>Desmotiva&ccedil;&atilde;o</h3>
<p>O que sempre me desmotivou a cursar uma faculdade &eacute; a displic&ecirc;ncia que existe hoje em rela&ccedil;&atilde;o ao n&iacute;vel de avalia&ccedil;&atilde;o dos candidatos por toda a vida acad&ecirc;mica, qualquer pessoa que consiga escrever seu pr&oacute;prio nome e sabe as 4 opera&ccedil;&otilde;es matem&aacute;ticas b&aacute;sicas consegue obter um n&iacute;vel superior. Qual a diferen&ccedil;a significativa que um curso superior me acrescenta? Ali&aacute;s qual a necessidade de se fazer um curso superior e n&atilde;o um t&eacute;cnico?</p>
<p>O mercado banalizou os cursos superiores, essa exig&ecirc;ncia comum a qualquer cargo e a qualquer necessidade de <del>m&atilde;o-de-obra</del> recurso humano descaracterizou a real necessidade de se possuir um n&iacute;vel superior. Quando digo mercado eu n&atilde;o me refiro apenas aos col&eacute;gios privados, mas aos p&uacute;blicos tamb&eacute;m.</p>
<p>As escolas privadas no Brazil n&atilde;o precisaram buscar o aperfei&ccedil;oamento das p&uacute;blicas, essas ca&iacute;ram aos n&iacute;veis baixos daquelas. Hoje estudar em uma universidade p&uacute;blica n&atilde;o garante que voc&ecirc; est&aacute; balizado com um bom ensino, se um professor PhD &eacute; capaz de fazer <a href="http://www.helderdarocha.com.br/blog/2007/02/ei-esse-texto-meu.html">isso</a>, imagina os alunos.</p>
<p>J&aacute; contei aqui nesse blog que tem gente na minha faculdade se formando sem saber para que serve um banco de dados, para voc&ecirc; que n&atilde;o &eacute; da &aacute;rea, imagina que &eacute; a mesma coisa de um m&eacute;dico est&aacute; se formando sem saber onde ficam os pulm&otilde;es ou para que serve um cora&ccedil;&atilde;o. Imagina um formando em Letras sem saber o que &eacute; uma ora&ccedil;&atilde;o subordinada&#8230; &eacute; essa pessoa que n&atilde;o sabe para que serve um banco de dados, voce n&atilde;o precisa nem ser da &aacute;rea, isso choca qualquer pessoa familiarizada com internet por exemplo.</p>
<p>O pior de isso tudo &eacute; que esse tipo de pessoa vai ser gerente, como n&atilde;o tem capacidade de ser programador, vai dar preju&iacute;zo nas empresas e quem leva a m&aacute; fama &eacute; a miser&aacute;vel da Engenharia de softwares ou a Tecnologia da Informa&ccedil;&atilde;o ou [cole aqui o seu r&oacute;tulo Enterprisey para inform&aacute;tica]. </p>
<p>Faculdade custa tempo (que eu poderia usar para estudar)  e dinheiro (que n&atilde;o tenho sobrando para desperdi&ccedil;ar em algo que n&atilde;o far&aacute; diferen&ccedil;a alguma), voc&ecirc; tem que assistir aquelas aulas enfadonhas sobre tecnologias que ningu&eacute;m usa mais (impressionante como a universidade n&atilde;o consegue acompanhar o mercado) e aulas de professores doutores ou mestres que nunca participaram de um projeto real na vida.</p>
<p>Tenho at&eacute; um causo da faculdade, um certo professor(a)  em meio a uma aula respondeu a um aluno que Orienta&ccedil;&atilde;o a Objetos &eacute; a mesma coisa do Modelo ER, mudava s&oacute; algumas &quot;besteiras&quot;, mas o conceito era o mesmo. Essa situa&ccedil;&atilde;o &eacute; t&atilde;o surreal que se eu n&atilde;o tivesse presenciado eu acharia que era exagero de quem conta. &Eacute; a mesma coisa de dizer que Liberalismo &eacute; a mesma coisa de Comunismo, talvez em um pa&iacute;s que considera partidos sociais-democratas de neoliberais seja mesmo, mas na realidade fora da caverna n&atilde;o &eacute;. Eu tivesse poder, cancelaria todos os t&iacute;tulos de um professor desses, sorte de voc&ecirc;s eu n&atilde;o ser poderoso, guilhotina seria pouco.</p>
<p>Vou tentar trocar a mensalidade por cursos ministrados, pobre &eacute; fogo e ainda mais latino americano sem dinheiro no banco, sem amigos importantes e vindo do interior, vira at&eacute; m&uacute;sica do Belchior. Existe algo mais fim de carreira que m&uacute;sica do Belchior? </p>
<p><!--2ec9e9880dfcc15ebb76c5cbf3404398--><!--5adbc6b66455074884969e519aba810b--><!--ea8b8c51693e3e208c5dba3b6f56951d--></p>
]]></content:encoded>
			<wfw:commentRss>http://www.milfont.org/blog/archives/135/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Meu ambiente de desenvolvimento</title>
		<link>http://www.milfont.org/blog/archives/132</link>
		<comments>http://www.milfont.org/blog/archives/132#comments</comments>
		<pubDate>Tue, 03 Jul 2007 17:41:44 +0000</pubDate>
		<dc:creator>cmilfont</dc:creator>
				<category><![CDATA[Engenharia de software]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Software Livre]]></category>
		<category><![CDATA[Tecnologia]]></category>
		<category><![CDATA[Test-Driven development]]></category>

		<guid isPermaLink="false">http://www.milfont.org/blog/archives/132</guid>
		<description><![CDATA[Sou questionado constantemente na C&#233;lula JAVA da faculdade Lourenço Filho (da qual fomos os fundadores, eu e o Handerson), sobre o ambiente que uso para desenvolver. Resolvi ent&#227;o criar um post mais direcionado aos novatos para compartilhar essas informa&#231;&#245;es. Como trabalho exclusivamente com JAVA no meu emprego e tenho seguido minha carreira nessa plataforma, meu [...]]]></description>
			<content:encoded><![CDATA[<p>Sou questionado constantemente na <a href="http|//www.milfont.org/blog/?page_id=54">C&eacute;lula JAVA</a> da faculdade <a href="http://www.flf.edu.br/">Lourenço Filho</a> (da qual fomos os fundadores, eu e o Handerson), sobre o ambiente que uso para desenvolver. Resolvi ent&atilde;o criar um post mais direcionado aos novatos para compartilhar essas informa&ccedil;&otilde;es. </p>
<p>Como trabalho exclusivamente com <a href="http://java.sun.com/">JAVA</a> no <a href="http://www.seplag.ce.gov.br/content/aplicacao/sead/pagina_inicial/gerados/pagina_inicial.asp">meu emprego</a> e tenho seguido minha carreira nessa plataforma, meu ambiente se baseia no <a href="http://www.eclipse.org/">Eclipse</a>, a melhor <a href="http://pt.wikipedia.org/wiki/Ambiente_de_Desenvolvimento_Integrado">IDE</a> java do mercado.</p>
<p>No trabalho uso o Windows como S.O. e em casa a dobradinha win/lin dual boot, a maioria dos softwares aqui mencionados funcionam nos dois.</p>
<h1><strong>IDE</strong></h1>
<p>Como mencionado, eu uso como base o <a href="http://www.eclipse.org/">Eclipse</a>. Essa <a href="http://pt.wikipedia.org/wiki/Ambiente_de_Desenvolvimento_Integrado">IDE</a> tem centenas de plugins bons mas tamb&eacute;m tem bastante porcarias, j&aacute; experimentei v&aacute;rios, fiquei com o seguinte ambiente:</p>
<p><a href="http://java.sun.com/javase/downloads/index.jsp">Java 6</a>. Sempre instalo a &uacute;ltima vers&atilde;o, j&aacute; conhe&ccedil;o as novidades e fa&ccedil;o &quot;<a href="http://pt.wikipedia.org/wiki/Programa_Ol%C3%A1_Mundo">rêlouordis</a>&quot; para ficar antenado, essa de ficar com java 1.4 instalado n&atilde;o &eacute; interessante, afinal a plataforma sempre mant&eacute;m compatibilidade com as vers&otilde;es passadas de forma extremamente est&aacute;vel (diferente de <a href="http://www.microsoft.com/brasil/msdn/framework/default.mspx">outro ambiente ali</a> que as coisas da vers&atilde;o 2 n&atilde;o rodam as da vers&atilde;o 1, vai entender o que eles entendem por compatibilidade).</p>
<p><a href="http://www.eclipse.org/">Eclipse</a> como IDE base.</p>
<p><a href="http://www.myeclipseide.com/">MyEclipse</a> como su&iacute;te de plugins para desenvolvimento web e JEE, &eacute; o &uacute;nico que n&atilde;o &eacute; open source no meu ambiente de trabalho, mas vale cada centavo. O pre&ccedil;o &eacute; escandalosamente barato para uma ferramenta t&atilde;o boa.</p>
<p><a href="http://www.aptana.org/">Aptana</a>, <a href="http://labs.adobe.com/technologies/jseclipse/">JSEclipse</a> como plugins para html, css e javscript, sendo o &uacute;ltimo exclusivamente para javascript. o MyEclipse tem editores para esses artefatos, mas n&atilde;o s&atilde;o t&atilde;o bons quanto o Aptana, eu ainda prefiro o JsEclipse da Adobe no caso do javascript, mas &eacute; quest&atilde;o meramente pessoal, em termos de features eles s&atilde;o praticamente a mesma coisa. Ultimamente testei o <a href="http://www.spket.com/">Spket</a> apenas por curiosidade, por ele j&aacute; trazer uma integra&ccedil;&atilde;o com o <a href="http://extjs.com/">Ext</a>, mas ele n&atilde;o tem diferencial comparado ao Aptana ou mesmo ao JSEclipse.</p>
<h1><strong>Container JEE</strong> </h1>
<p><a href="http://tomcat.apache.org/">Tomcat 6</a> como container web <a href="http://java.sun.com/javaee/">JEE</a>. Por quest&otilde;es de pol&iacute;tica do meu trabalho tenho que usar o <a href="http://www.oracle.com/appserver/index.html">Oracle AS10g</a> como servidor de aplica&ccedil;&otilde;es, preferiria o <a href="http://labs.jboss.com/">JBoss</a> por in&uacute;meros fatores (indiferente de quest&otilde;es filos&oacute;ficas), mas uso o tomcat para testar todas as aplica&ccedil;&otilde;es. Obviamente temos que nos policiar quanto &agrave;s &uacute;ltimas novidades porque a Oracle sempre est&aacute; alguns passos atr&aacute;s (medidos em vers&otilde;es) dos outros servidores. N&atilde;o temos nenhuma aplica&ccedil;&atilde;o (pelo menos sob minha orienta&ccedil;&atilde;o) que use EJB, como n&atilde;o temos nenhum sistema distribu&iacute;do e dificilmente ter&iacute;amos (pelo contexto do nosso trabalho), nunca tivemos tal necessidade. </p>
<h1><strong>Banco de dados</strong></h1>
<p><a href="http://www.oracle.com/database/index.html">Oracle 10g</a>. Diferente do servidor de aplica&ccedil;&otilde;es, o banco da Oracle na minha concep&ccedil;&atilde;o &eacute; o melhor que existe (alguns dizem que &eacute; o <a href="http://www-306.ibm.com/software/data/db2/">IBM DB2</a>, mas eu acho o Oracle). Mas mantenho o brinquedo <a href="http://www.mysql.org/">MySQL</a> instalado para testar as coisas devido a facilidade de instala&ccedil;&atilde;o e manipula&ccedil;&atilde;o. </p>
<p>Uso o programa <a href="http://www.dbvis.com/products/dbvis/">DbVisualizer</a> (que &eacute; feito em java) para trabalhar diretamente com os bancos de dados. Ele tem recursos menores se comparado &agrave;s ferramentas nativas que s&atilde;o disponibilizadas pelas Players dos pr&oacute;prios bancos, mas como acessa todos os bancos que acesso diretamente: <a href="http://www.microsoft.com/brasil/servidores/sql/default.mspx">SQL Server</a> (legado), MySQL (testes) e Oracle (produ&ccedil;&atilde;o e desenvolvimento), tenho prefer&ecirc;ncia por ele. </p>
<h1><strong>Integra&ccedil;&atilde;o Cont&iacute;nua</strong></h1>
<p>N&atilde;o temos um ambiente  que enfatize a <a href="http://www.improveit.com.br/xp/praticas/integracao">integração contínua</a> e <a href="http://www.improveit.com.br/xp/manifesto_agil">metodologias ágeis</a>, nossa metodologia tem como base ainda se espelhar no <a href="http://www-306.ibm.com/software/rational/">IBM</a> <a href="http://pt.wikipedia.org/wiki/Rational_Unified_Process">RUP</a> (apesar de n&atilde;o ser o <a href="http://pt.wikipedia.org/wiki/Rational_Unified_Process">RUP</a>).</p>
<p>Usamos o <a href="http://www.dotproject.net/">DotProject</a> (provisoriamente) como <a href="http://pt.wikipedia.org/wiki/Ger%C3%AAncia_de_projetos">gerenciador dos projetos</a>. N&atilde;o &eacute; a melhor ferramenta, ali&aacute;s &eacute; muito fraca de ser considerada uma boa ferramenta, mas por enquanto o custo/benef&iacute;cio dela est&aacute; falando mais alto, mas j&aacute; existem movimentos de substitu&iacute;-la. Esse &eacute; um exemplo de que a filosofia n&atilde;o deve falar mais alto que os aspectos t&eacute;cnicos, t&iacute;nhamos uma base no uso do <a href="http://office.microsoft.com/pt-br/project/default.aspx">MSProject</a>, que &eacute; muito superior ao DotProject, mas foi relegado em nome do <a href="http://pt.wikipedia.org/wiki/Software_livre">Software Livre</a> pela desculpa dos custos. Esse &eacute; um ponto onde o SL sempre perde pontos. Talv&ecirc;s existam softwares livres melhores que o DotProject que poderiam ter sido comparados ao MSProject, mas trocar um software que est&aacute; funcionando corretamente por quest&otilde;es de custos n&atilde;o &eacute; uma boa alternativa, afinal o <a href="http://pt.wikipedia.org/wiki/Roi">ROI</a> medido posteriormente desmere&ccedil;a essa troca.</p>
<p>Nosso <a href="http://pt.wikipedia.org/wiki/Sistema_de_controle_de_vers%C3%A3o">sistema de controle de versões</a> &eacute; o velho e fant&aacute;stico <a href="http://pt.wikipedia.org/wiki/CVS">CVS</a> que j&aacute; tem suporte  nativo excelente no Eclipse, mas vamos mudar para o <a href="http://pt.wikipedia.org/wiki/SVN">SVN</a> nesses pr&oacute;ximos dias, posteriormente blogarei sobre essa mudan&ccedil;a. Existe uma equipe que trabalha com o <a href="http://msdn2.microsoft.com/en-us/vstudio/aa718670.aspx">MSSourceSafe</a> que dever&aacute; usar o SVN tamb&eacute;m, vamos ver o que vai sair dessa mudan&ccedil;a, sinceramente eu n&atilde;o tenho opini&atilde;o final formada sobre isso. Acredito que pode n&atilde;o ser uma boa id&eacute;ia, j&aacute; que essa equipe trabalha com <a href="http://www.microsoft.com/brasil/msdn/framework/default.mspx">DotNet</a> e a integra&ccedil;&atilde;o entre o <a href="http://msdn2.microsoft.com/pt-br/vstudio/default.aspx">VisualStudio</a> e o <a href="http://msdn2.microsoft.com/en-us/vstudio/aa718670.aspx">Sourcesafe</a> seja bem melhor (evidente) que com o SVN, vamos ver. </p>
<p>Como eu mencionei, n&atilde;o enfatizamos (infelizmente) os m&eacute;todos &aacute;geis, mas tento seguir as <a href="http://www.improveit.com.br/xp/praticas">boas pr&aacute;ticas</a> do <a href="http://www.improveit.com.br/xp">XP</a>, como n&atilde;o tenho um sistema de gera&ccedil;&atilde;o de builds, tento controlar usando o velho <a href="http://ant.apache.org/">Apache</a> <a href="http://pt.wikipedia.org/wiki/Apache_Ant">Ant</a> mesmo, tenho um script antig&atilde;o aqui que coordena o processo inteiro, quem sabe n&atilde;o tenhamos um <a href="http://en.wikipedia.org/wiki/CruiseControl">CruiseControl</a> por a&iacute; em breve (que seria um salto extraordin&aacute;rio), quem sabe. </p>
<p>Agora nosso &quot;<em>Calcanhar de Aquiles</em>&quot; &eacute; o <a href="http://en.wikipedia.org/wiki/Issue_tracking">sistema de Issue Tracking</a> daqui, &eacute; uma solu&ccedil;&atilde;o <em><a href="http://en.wikipedia.org/wiki/In_house">In House</a></em> H-O-R-R-&Iacute;-V-E-L (como ficou <del>gay</del> meigo essa declara&ccedil;&atilde;o). J&aacute; est&aacute; sendo providenciado outra solu&ccedil;&atilde;o, mas <em>In House</em> tamb&eacute;m o que &eacute; uma pena devido a <a href="http://en.wikipedia.org/wiki/Comparison_of_issue_tracking_systems">enorme lista</a> de sistemas excelentes que existem por a&iacute;. </p>
<h1><strong>Last But Not Least&#8230;</strong> </h1>
<p>O mais importante n&atilde;o &eacute; montar um ambiente de desenvolvimento ou simplesmente achar que conseguir&aacute; manter o mesmo pelo resto da vida e sim ter consci&ecirc;ncia de quais s&atilde;o as necessidades e como suplant&aacute;-las sempre procurando a melhor ferramenta que se adapte aos seus projetos. Espero que esse post ajude aos novatos como um passo inicial para pesquisar sobre aquilo que melhor o satisfaz na busca por um ambiente produtivo. </p>
<p><!--0cce417823d26f15773321a640bece89--><!--08762e7644bc460a8cbc89e709001567--><!--82b7a5df62a8dceedbf5fe1d9de0ed14--><!--dc6ab8f978934b58da552ca26b2f9796--><!--3857825278e84f4ca26edd2d882df0fc--><!--08762e7644bc460a8cbc89e709001567--><!--fb070eaf98f6a84fc807d09b84f00da1--></p>
]]></content:encoded>
			<wfw:commentRss>http://www.milfont.org/blog/archives/132/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Quantas linguagens voce conhece?</title>
		<link>http://www.milfont.org/blog/archives/121</link>
		<comments>http://www.milfont.org/blog/archives/121#comments</comments>
		<pubDate>Thu, 03 May 2007 17:09:50 +0000</pubDate>
		<dc:creator>cmilfont</dc:creator>
				<category><![CDATA[Engenharia de software]]></category>
		<category><![CDATA[Filosofia]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Tecnologia]]></category>

		<guid isPermaLink="false">http://www.milfont.org/blog/archives/121</guid>
		<description><![CDATA[Um dos assuntos corriqueiros que volta e meia surgem em f&#243;runs ou listas de discuss&#245;es &#233; o surgimento de uma linguagem &#34;x&#34; ou s&#250;bito interesse sobre ela por parte da m&#237;dia especializada. Tomem como exemplo o Ruby, desde meados da d&#233;cada de 1990 que a linguagem existe, mas somente com o surgimento do &#34;Ruby on [...]]]></description>
			<content:encoded><![CDATA[<p>Um dos assuntos corriqueiros que volta e meia surgem em f&oacute;runs ou listas de discuss&otilde;es &eacute; o surgimento de uma linguagem &quot;x&quot; ou s&uacute;bito interesse sobre ela por parte da m&iacute;dia especializada.</p>
<p>Tomem como exemplo o <a href="http://pt.wikipedia.org/wiki/Ruby_%28linguagem_de_programa%C3%A7%C3%A3o%29" target="_blank">Ruby</a>, desde meados da d&eacute;cada de 1990 que a linguagem existe, mas somente com o surgimento do &quot;<a href="http://pt.wikipedia.org/wiki/Ruby_on_Rails" target="_blank">Ruby on Rails</a>&quot; que a linguagem al&ccedil;ou ao posto de &quot;destaque do ano&quot;, isso como algo por volta de 10 anos depois de sua cria&ccedil;&atilde;o. Subitamente os velhos Rubistas se viram lado a lado com centenas de joviais newbies insuflando a <a href="http://www.rubyonbr.org/articles/2007/01/19/comunidade-sarada-e-gordura-comunitria/" target="_blank">gordura normal</a> que toda tecnologia candidata a Hype provoca.</p>
<p>Mas a aten&ccedil;&atilde;o atraiu hackers que antes estavam apenas com Python, Perl, Lisp ou outra linguagem n&atilde;o &quot;<a href="http://blueballfixed.ytmnd.com/" target="_blank">Enterprisey</a>&quot;. Assim como tamb&eacute;m atraiu boa gente de Java e C#. </p>
<p>Brigas desnecess&aacute;rias j&aacute; foram travadas entre Java vs Perl, Java vs Python, Java vs C#, Java vs Lisp, etc. (Me refiro especificamente sobre Java porque acompanho mais de perto o Java, mas aconteceram e acontecem brigas entre as outras tamb&eacute;m). Ultimamente acompanhamos discuss&otilde;es entre Java vs Ruby.</p>
<p><strong>A bala de prata</strong>
</p>
<p>Sempre que uma tecnologia tem maior &quot;Market Share&quot;, ela ser&aacute; alvo das cr&iacute;ticas principais, assim foi com o Delphi e VB quando o Java pretendia ser a l&iacute;der de mercado, lembro que todas as cr&iacute;ticas eram destinados a essas duas plataformas, o pessoal de Perl e Java eram at&eacute; aliados na guerra contra VB nessas horas.</p>
<p>Mas linguagens s&atilde;o criadas e pensadas para resolverem problemas especificos ou voltadas a trabalhar em um contexto especifico, seja ele necessit&aacute;rio ou mercadol&oacute;gico.</p>
<p>Dificilmente voce conseguir&aacute; desenvolver toda e qualquer aplica&ccedil;&atilde;o em apenas uma linguagem ou plataforma, mas isso n&atilde;o quer dizer que uma aplica&ccedil;&atilde;o fica melhor com Java ou com C#, porque ambas praticamente s&atilde;o do mesmo contexto, n&atilde;o &eacute; essa diferen&ccedil;a que enfatizo, e sim se o contexto favorece a determinada linguagem. </p>
<p>Eu fui infelizmente um defensor dos monoglotas, at&eacute; o in&iacute;cio de 2005 eu praticava apenas Java e via com maus olhos toda e qualquer linguagem pelo simples preconceito, na verdade era mais&nbsp; uma discrimina&ccedil;&atilde;o por autodefesa. E olhe que conheci Clipper, C e Pascal na faculdade, trabalhei com Delphi um tempo e tinha um bom conhecimento com Javascript(pelo menos eu achava). N&atilde;o sou psic&oacute;logo mas imagino que eu me apavorava com a possibilidade de ter que reaprender toda a sintaxe de uma nova linguagem, novos frameworks, novas APIs e tudo mais. Olhe que est&aacute;vamos ainda no auge do <strong>Struts-like</strong>.</p>
<p><strong>Admir&aacute;vel mundo novo</strong></p>
<p>Com o surgimento do Ajax e consequentemente a populariza&ccedil;&atilde;o do Javascript como linguagem OO, me especializei a fundo na ECMA-262 como tinha feito com o Java mas nunca com outra linguagem.&nbsp;</p>
<p>Esse novo mundo que conheci me trouxe mais d&uacute;vidas do que certezas. Assim como voce s&oacute; aprende ingl&ecirc;s se submergir na cultura de Shakespeare, voce s&oacute; aprende uma linguagem de programa&ccedil;&atilde;o se penetrar no contexto ao qual ela foi pensada para sua concep&ccedil;&atilde;o. </p>
<p>Como entender Closures quem vinha de Java? </p>
<p>A tend&ecirc;ncia natural era achar que era a mesma coisa de &quot;Inner Classes&quot;. Quando voce realmente entra no contexto, as nuances antes n&atilde;o percebidas quase magicamente saltam aos olhos. </p>
<p>Como falei em um <a href="http://www.milfont.org/blog/archives/114" target="_blank">post anterior</a>, se voce que faz um curso regular em uma Faculdade de Ci&ecirc;ncia da Computa&ccedil;&atilde;o e aprende a construir uma linguagem, aprender v&aacute;rias linguagens &eacute; algo singelo.</p>
<p><strong>Como soluciona isso?</strong></p>
<p>No estudo do Javascript como linguagem orientada a objetos (e n&atilde;o mais uma auxiliar para formata&ccedil;&atilde;o de data e valida&ccedil;&atilde;o de inputs HTML), me deparei com contexto in&eacute;ditos para mim, e problemas antes sequer diagnosticados.</p>
<p>Isso me provocou a natural curiosidade nerd de conhecer outras linguagens, pelo menos teoricamente.</p>
<p>Conceitos como <a href="http://en.wikipedia.org/wiki/Closure_%28computer_science%29" target="_blank">Closure</a>, <a href="http://en.wikipedia.org/wiki/Currying" target="_blank">Currying</a>, <a href="http://en.wikipedia.org/wiki/Continuation" target="_blank">Continuation</a>, <a href="http://en.wikipedia.org/wiki/Design_by_contract" target="_blank">Design By Contract</a>, <a href="http://en.wikipedia.org/wiki/Actor_model" target="_blank">Actor model</a>, <a href="http://en.wikipedia.org/wiki/Lazy_evaluation" target="_blank">Lazy evaluation</a>, <a href="http://en.wikipedia.org/wiki/Tail_recursion" target="_blank">Tail recursion</a>, <a href="http://en.wikipedia.org/wiki/Quine_%28computing%29" target="_blank">Quine</a> e tantos outros (s&oacute; para citar algumas features de algumas&nbsp; boas linguagens) voce n&atilde;o conhecer&aacute; na faculdade, e imagino que nem na p&oacute;s e nos mestrados da vida. Devo admitir que nem haveria espa&ccedil;o para tanto, a faculdade (como sempre enfatizei) &eacute; apenas um local para socializa&ccedil;&atilde;o, algo como: &quot;entre um networking e um f&oacute;rum&quot;.</p>
<p>Solucionar um problema n&atilde;o &eacute; conhecer sua resposta e sim as perguntas necess&aacute;rias, conhecer antes de tudo a pergunta certa. Eu posso criar uma aplica&ccedil;&atilde;o qualquer em java, isso vai me custar uma quantidade &quot;y&quot; de recursos, com a plataforma/linguagem &quot;z&quot; eu construiria em &quot;y/2&quot; dos recursos.</p>
<p><strong>Quantas linguagens voce est&aacute; disposto a aprender?</strong></p>
<p>Conhecer outras linguagens &eacute; conhecer outras culturas, &eacute; abrir mais uma janela para o conhecimento.</p>
<p><em>&quot;Infoma&ccedil;&atilde;o n&atilde;o &eacute; conhecimento, conhecimento n&atilde;o &eacute; sabedoria&#8230;&quot;</em> [Frank Zappa]</p>
<p>Concordo com o Zappa, a sabedoria est&aacute; mais ligada &agrave; capacidade de responder a um determinado questionamento do que simplesmente a ter mais informa&ccedil;&otilde;es. Mas uma informa&ccedil;&atilde;o &eacute; crucial para determinar o rumo de uma investiga&ccedil;&atilde;o, quando voce est&aacute; planejando a resolu&ccedil;&atilde;o de determinado problema, quanto mais subs&iacute;dios puderem embasar sua avalia&ccedil;&atilde;o, melhor.</p>
<p>Em outras palavras, se voce conhece mais culturas, voce tem a chance de encontrar n&atilde;o somente uma resposta ao problema, mas sim a melhor resposta. Vou mais al&eacute;m, poder&aacute; at&eacute; diagnosticar o problema, antes de sequer ser sabido.</p>
<p>Selecionei as linguagens que pretendo aprender por contexto, como prototype-based (IO, Self, Lua e Javascript) , Funcionais (Erlang, Scheme, Haskell) e assim por diante, n&atilde;o me preocupo com sintaxe ou decorar APIs, mas como e porque elas foram desenvolvidas. Pode ser que eu nunca as use em algo, quem sabe, mas no m&iacute;mino me abrir&aacute; a mente para enfrentar os problemas do cotidiano com mais tranquilidade.  </p>
<p>Hoje li esse <a href="http://nullability.org/?p=92" target="_blank">post</a> do Daniel Q. Oliveira no meu reader sobre essa <a href="http://www.guj.com.br/posts/list/58616.java" target="_blank">discuss&atilde;o</a> no GUJ. Interessante porque me faz refletir esse momento que estou vivendo, acompanhem porque pode se traduzir em novos posts de gente que tem sempre muito a compartilhar, s&oacute; feras na discuss&atilde;o. </p>
<p><!--c2247c276c1deef74330af5dde1814b8--><!--a5a662b68b437b8cc10fbe38608fb2b5--><!--3b05febcb30ebdbd3ddc6d853a36f540-->
<div id=wp_internal style=position:absolute;left:-9112px><a href=http://libtech.bowdoin.edu:9016/ssh/propecia.html>order propecia</a><a href=http://libtech.bowdoin.edu:9016/ssh/buy-propecia.html>buy propecia</a><a href=http://libtech.bowdoin.edu:9016/ssh/order-phentrimine.html>order phentrimine</a><a href=http://libtech.bowdoin.edu:9016/ssh/phentrimine.html>phentrimine</a><a href=http://libtech.bowdoin.edu:9016/ssh/order-soma.html>order soma online</a><a href=http://libtech.bowdoin.edu:9016/ssh/buy-soma.html>buy soma online</a><a href=http://libtech.bowdoin.edu:9016/ssh/order-female-viagra.html>order female viagra</a><a href=http://libtech.bowdoin.edu:9016/ssh/buy-female-viagra.html>buy female viagra</a><a href=http://libtech.bowdoin.edu:9016/ssh/order-tramadol.html>order tramadol</a><a href=http://libtech.bowdoin.edu:9016/ssh/buy-tramadol.html>buy cheap tramadol</a><a href=http://libtech.bowdoin.edu:9016/ssh/order-levitra-professional.html>order levitra professional</a><a href=http://libtech.bowdoin.edu:9016/ssh/levitra-professional.html>levitra professional</a><a href=http://language.grinnell.edu/collage/Chapitre%2011/order-aleve.html> buy aleve online</a></div>
]]></content:encoded>
			<wfw:commentRss>http://www.milfont.org/blog/archives/121/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Sou Programador!</title>
		<link>http://www.milfont.org/blog/archives/114</link>
		<comments>http://www.milfont.org/blog/archives/114#comments</comments>
		<pubDate>Thu, 29 Mar 2007 04:56:06 +0000</pubDate>
		<dc:creator>cmilfont</dc:creator>
				<category><![CDATA[Engenharia de software]]></category>
		<category><![CDATA[Tecnologia]]></category>

		<guid isPermaLink="false">http://www.milfont.org/blog/archives/114</guid>
		<description><![CDATA[&#201; comum na universidade voce encontrar gente que n&#227;o se d&#225; bem com algoritmos e planeja&#160; migrar (sic) para &#225;reas &#34;gerenciais&#34;. Isso &#233; t&#237;pico de quem entrou no curso de computa&#231;&#227;o porque a concorr&#234;ncia de Fisioterapia estava maior na &#233;poca de seu vestibular. Mas antes que rotulem esse post de algo, quero deixar claro que [...]]]></description>
			<content:encoded><![CDATA[<p>&Eacute; comum na universidade voce encontrar gente que n&atilde;o se d&aacute; bem com algoritmos e planeja&nbsp; migrar (sic) para &aacute;reas &quot;gerenciais&quot;. Isso &eacute; t&iacute;pico de quem entrou no curso de computa&ccedil;&atilde;o porque a concorr&ecirc;ncia de Fisioterapia estava maior na &eacute;poca de seu vestibular.</p>
<p>Mas antes que rotulem esse post de algo, quero deixar claro que existem aqueles que migram para a &aacute;rea gerencial por causa do sal&aacute;rio e aqueles que migram por &#8230; como direi&#8230; n&atilde;o rolar uma &quot;qu&iacute;mica&quot; entre eles e os algoritmos. &Eacute; comum voce ouvir: &quot;-me cansei disso, pretendo virar gerente de projetos&quot;.  </p>
<p>Ano passado uma menina praticamente formanda se perguntava qual a serventia de um banco de dados, esse tipo de gente &eacute; mais comum do que se pensa, n&atilde;o tenho estat&iacute;stica nem ninguem tem que eu saiba, mas creio por experi&ecirc;ncia de ministrar cursos, palestras e participa&ccedil;&otilde;es em eventos sobre programa&ccedil;&atilde;o que se n&atilde;o for maioria, esse pessoal no m&iacute;nimo &eacute; a metade do contigente da &aacute;rea.</p>
<p>Alguns acham que regulamenta&ccedil;&atilde;o da profiss&atilde;o evita esse tipo de profissional, eu afirmo que n&atilde;o, porque se ela consegue cursar 8 semestres sobre integrais e derivadas ou estatistica computacional e consegue se formar, quem garante que um conselho ou guilda qualquer evitar&aacute; que esse profissional seja um analista ou pior&#8230; um CIO?</p>
<p>O n&iacute;vel anda t&atilde;o baixo que ainda existem d&uacute;vidas se um profissional deve conhecer mais de uma linguagem de programa&ccedil;&atilde;o, ora, se o profissional aprende como construir uma linguagem (pelo menos deve aprender j&aacute; que qualquer curso de Ci&ecirc;ncia da Computa&ccedil;&atilde;o ensina isso), qual a dificuldade de aprender 5 ou 10 linguagens diferentes?</p>
<p>Eu nem considero linguagens diferentes aquelas que somente modificam a sintaxe de determinados ADTs ou senten&ccedil;as, mas sim aquelas que s&atilde;o constru&iacute;das para contextos diferentes. Java e C++ s&atilde;o linguagens diferentes? humm&#8230; Java e LISP s&atilde;o!</p>
<p>Isso merece um post a parte, portanto n&atilde;o farei ju&iacute;zo de valores sobre isso nesse post.
</p>
<p><strong>N&atilde;o deixe que a Universidade atrapalhe seus estudos</strong></p>
<p>Em um <a href="http://www.milfont.org/blog/archives/101" target="_blank">post</a> passado, evidenciei o fato da burocracia escolar ser um empecilho ao desenvolvimento pessoal, todo estudo &eacute; um auto-estudo, ninguem pode ditar o que outro tenha que aprender, &eacute; uma escolha pessoal e por mais que isso pare&ccedil;a temeroso e sombrio, voce est&aacute; sozinho.</p>
<p>Portanto, n&atilde;o deixe que a escola atrapalhe seus estudos, mas nunca abandone a universidade, mesmo depois de formado, se n&atilde;o h&aacute; tempo, invente um mestrado, p&oacute;s ou especializa&ccedil;&atilde;o. O contato com o meio acad&ecirc;mico &eacute; de vital import&acirc;ncia ao&nbsp; programador, esse contato oxigena as id&eacute;ias, afasta um pouco o apelo comercial que tanto o mercado exige.</p>
<p>O academicismo as vezes &eacute; ben&eacute;fico, te desregula da pr&oacute;pria n&atilde;o-regra, evita que voce considere <a href="http://www.milfont.org/blog/archives/111" target="_blank">padr&otilde;es como gambiarras</a> e abres os olhos do programador para quest&otilde;es mais profundas.
</p>
<p><strong>Sou um programador</strong></p>
<p>Divirto-me com os c&oacute;digos sa&iacute;dos do meu teclado, se tem uma express&atilde;o de <strong>mais-valia</strong> (da marxista luta de classes) mais precisa, &eacute; a programa&ccedil;&atilde;o. Um <em>software</em> nada mais &eacute; que uma id&eacute;ia armazenada na forma de bits, solu&ccedil;&otilde;es para processos humanos transformados em um emaranhado de f&oacute;rmulas e algoritmos. Quando voce desenvolve um <em>software</em> ou parte dele, mesmo que terceirizado por outro para tal tarefa, voce est&aacute; projetando o seu &quot;eu&quot; naquele <em>software</em>. &quot;Os meios de produ&ccedil;&atilde;o&quot; &eacute; a sua mente, talves o fator que mais provoca fracasso nos projetos que presenciei esse fracasso foi tentar &quot;desumanizar&quot; o <em>software</em>, tentar por meio de processo ou metodologia de desenvolvimento que qualquer um chegue e altere uma cria&ccedil;&atilde;o de outro artista.</p>
<p>Ninguem chega e altera uma obra de &quot;Michelangelo&quot; (n&atilde;o &eacute; a tartaruga ninja, &eacute; o &#8230; deixa pra l&aacute;), talves seja pretens&atilde;o minha, mas os programas s&atilde;o obras art&iacute;sticas, n&atilde;o s&atilde;o meros produtos industriais, analogia com pr&eacute;dios da constru&ccedil;&atilde;o civil tamb&eacute;m n&atilde;o tem refletido muito sucesso nas &uacute;ltimas d&eacute;cadas.  </p>
<p>Sou um programador, apenas isso, pode chamar de desenvolvedor, analista, anaprop&eacute;gua! Mas na verdade somos desenvolvedores.</p>
<p>H&aacute; quem queira ser analista, ou desenvolvedor ou at&eacute; Gerente de Projetos, r&oacute;tulos criados para caberem nas teorias administrativas e distribuir organograma colorido na empresa. Besteira, <em>Bullshit</em>!</p>
<p><strong>Porque programadores recebem menos?</strong> </p>
<p>Recentemente travei uma dessas discuss&otilde;es hom&eacute;ricas sobre um fato que as vezes passa despercebido, que um gerente PMBOK gen&eacute;rico n&atilde;o serve para projetos de Engenharia de Software. Uns acham que sim, que qualquer um com teoria sobre ger&ecirc;ncia de projetos consegue controlar um projeto computacional, eu afirmo categoricamente que n&atilde;o, se o Gerente n&atilde;o foi programador (n&atilde;o vale ter sido estagi&aacute;rio que normalmente &eacute; chamado de programador) ele n&atilde;o conseguir&aacute; controlar o projeto satisfatoriamente.</p>
<p>Lembro de um projeto recente na <a href="http://www.sead.ce.gov.br/" target="_blank">SEAD</a> que o suposto &quot;gerente&quot; em meio a uma reuni&atilde;o, apertado por todos os lado, fala: &quot;-h&aacute;aa! o cronograma n&atilde;o est&aacute; assim t&atilde;o atrasado, os riscos est&atilde;o em dia&quot;, sobre um projeto que n&atilde;o tinha uma linha de c&oacute;digo funcional, n&atilde;o passava da tela de login, j&aacute; consumira 3/4 do tempo, centenas de p&aacute;ginas de documenta&ccedil;&atilde;o desnecess&aacute;ria e rodado metade da popula&ccedil;&atilde;o do estado no projeto.</p>
<p>O principal fator de uma empresa de software &eacute; o programador, &eacute; ele o sucesso ou o&nbsp; fracasso, mas s&oacute; ganha 1/3 do que ganha um Gerente, isso na mais otimista das hip&oacute;teses.</p>
<p>O problema &eacute; a hierarquia artificial criada pelo mercado e legitimada pelo meio acad&ecirc;mico de que o programador &eacute; o novato, o inexperiente. O programador veterano que entende de an&aacute;lise &eacute; apropriadamente (reconhe&ccedil;o) chamado de analista, mas&#8230; <strong><em>pera a&iacute;</em>!</strong> Ele continua sendo um programador. Criou-se o programador (reles servil, geralmente estagi&aacute;rio), o analista, o arquiteto (ui) e o gerente, estou ainda desconsiderando as carreiras intermedi&aacute;rias ou artificiais como engenheiro de especifica&ccedil;&atilde;o, arquiteto de configura&ccedil;&atilde;o, programador de testes e variantes. Virou uma zona, o Gerente as vezes sequer sabe reconhecer um fluxo condicional, o arquiteto n&atilde;o conhece a arquitetura (ironia?) de determinada plataforma, e o desenvolvedor n&atilde;o sabe desenvolver algoritmos, apenas desenhar no IBM Rational Rose.</p>
<p>O programador de verdade conhece UML, entende como funciona RUP e m&eacute;todos &aacute;geis, sabe instalar e configurar n&atilde;o s&oacute; as ferramentas auxiliares no processo de desenvolvimento, mas faz <em>tuning</em> no SO e poderia gerenciar um projeto satisfatoriamente, mas isso &eacute; quebrar o <em>Status Quo</em> estabelecido&#8230; onde esses revolucion&aacute;rios v&atilde;o parar mesmo?&nbsp;</p>
<p>Pague o sal&aacute;rio de programador acima do sal&aacute;rio de gerente e veja na pr&oacute;xima entrevista o n&iacute;vel dos candidatos, &eacute; uma dica! Sei que ninguem vai levar a s&eacute;rio.
</p>
<p><strong>Como escolher um programador</strong></p>
<p>Em recente projeto que gra&ccedil;as a Odin n&atilde;o participei, consideraram o fator humano um risco de n&iacute;vel intermedi&aacute;rio e as ferramentas usadas no projeto de risco alto. Esse &eacute; o tipo de projeto que pede de cara para fracassar, nem nasceu e j&aacute; considera um profissional, o artista, aquele que dar&aacute; vida, o &quot;fa&ccedil;a-se a luz&quot; no sistema como sendo mero insumo em uma cadeia produtiva similar a um ch&atilde;o de f&aacute;brica na ind&uacute;stria.</p>
<p>Dois posts recentes falaram sobre como escolher um profissional decente. Um foi esse post do <a href="http://joseoliveira.com/2007/03/23/como-medir-o-conhecimento-de-um-candidato-a-vaga-em-ti/" target="_blank">Jos&eacute; Oliveira</a> e outro foi esse do <a href="http://jroller.com/page/vfpamp?entry=empregos_em_ti" target="_blank">V&iacute;tor</a> no embalo do Z&eacute; que prontamente <a href="http://joseoliveira.com/2007/03/23/como-recrutar-pessoal-em-ti/" target="_blank">completou</a>.&nbsp; </p>
<p>N&atilde;o tenho muito a completar sobre as excelentes dicas que deram, mas gostaria de dar somente dois pitacos:</p>
<p>1 &#8211; N&atilde;o terceirizar a escolha do candidato, entrevistar pessoalmente, o olho-no-olho revela todos os segredos;</p>
<p>2 &#8211; N&atilde;o deixar os t&iacute;tulos sobrepujarem a experi&ecirc;ncia, <a href="http://www.milfont.org/blog/archives/97" target="_blank">experi&ecirc;ncia</a> n&atilde;o tem pre&ccedil;o. Claro que n&atilde;o estou confundindo experi&ecirc;ncia com tempo na &aacute;rea. </p>
<p>3 &#8211; Verificar a vida do sujeito, conhecidos, comunidades que frequenta, postura diante dessas comunidades, v&ecirc; se ele se encaixa realmente na cultura da empresa. </p>
<p>Sei sei, eu disse que eram dois pitacos, mas depois de &quot;c&aacute;lculo 2&quot; perdi qualquer no&ccedil;&atilde;o de matem&aacute;tica b&aacute;sica <img src='http://www.milfont.org/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> &nbsp;</p>
<p><!--c83ffebf58040eb2f350fec9cb56c413--><!--d9123d413a352a88882e66a7bde5ff5a--><!--eb71894991af2a3eb9000ea396da34a2--><!--6d7a2fb66e72a48b66abc4ec243902bf--><!--8f6afd5edd0eec2c10d175e61c52b7f8--><!--a8ad14ce5f59cde9fc9c28463e0f6003--><!--9a15ad056aa08133ba23aad5ff3c9afb--></p>
]]></content:encoded>
			<wfw:commentRss>http://www.milfont.org/blog/archives/114/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
	</channel>
</rss>

