Seguindo a série sobre meu dilema pessoal, eis minha resposta em uma lista de discussão sobre uma thread aleatória sobre isso no início desse ano.

Escreveram isso: "Ou seja, podemos ver que o termo analista é usado apenas para separar o
profissional de nível superior do cara de nível técnico (2° grau)"

Respondi isso:

Considero que não tem diferença alguma entre uma pessoa apenas com 2º grau e uma que cursou uma faculdade, se a pessoa que tiver apenas 2º grau estudou o mesmo conteúdo que é ensinado na faculdade. Conheço várias pessoas que se enquadram nesse contexto mas por pressão mercadológica que espera que eles tenham um diploma estampado na sala as fizeram ir cursar uma faculdade.

Conheco mestres que o diploma vale tanto que um papel higiênico usado!

Antes de tudo eu sou programador
http://www.milfont.org/blog/archives/114

A maioria daqueles que querem ser  analistas e gerentes de projeto que conheci não estavam atras simplesmente de dinheiro, mas porque não são programadores. http://www.milfont.org/blog/archives/121

Diploma não garante conhecimento, tem muitos que possuem diploma e não conseguem distinguir o básico.
http://www.milfont.org/blog/archives/111

Como vivemos em um país que usa a carta del lavoro  de Mussoline, temos que nos sujeitar à informalidade http://www.milfont.org/blog/archives/105

Essas pessoas adoram uma guilda e gostam mesmo é de viver do suor dos outros
http://www.milfont.org/blog/archives/101

Para mim o que vale antes de tudo é  a experiência do sujeito
http://www.milfont.org/blog/archives/97

Existem ainda aqueles que falam e fazem bastante ruído, se jactam de certificados e diplomas e na hora do vamos ver O.o
http://www.milfont.org/blog/archives/124

Para aliviar o stress do cotidiano temos que mandar essa gente toda se fu@#$
http://www.milfont.org/blog/archives/104

Todo início de semestre tenho a mesma dúvida: "voltar ou não para a faculdade por mais este semestre", parece até coisa do A.A. que tem aquela frase legal (só por hoje não beberei, ou algo assim) .

Entrei na faculdade de Ciências da Computação em 1999.1, larguei no final de 2002 e voltei no início de 2006. Parei novamente nesse primeiro semestre de 2007 e cá estou com a mesma dúvida para esse semestre.

Não, eu não sei quantas cadeiras faltam, deixei de contar faz tempo já, mas sei que ainda faltam alguns semestres… acho que 3 semestres… acho.

Desmotivação

O que sempre me desmotivou a cursar uma faculdade é a displicência que existe hoje em relação ao nível de avaliação dos candidatos por toda a vida acadêmica, qualquer pessoa que consiga escrever seu próprio nome e sabe as 4 operações matemáticas básicas consegue obter um nível superior. Qual a diferença significativa que um curso superior me acrescenta? Aliás qual a necessidade de se fazer um curso superior e não um técnico?

O mercado banalizou os cursos superiores, essa exigência comum a qualquer cargo e a qualquer necessidade de mão-de-obra recurso humano descaracterizou a real necessidade de se possuir um nível superior. Quando digo mercado eu não me refiro apenas aos colégios privados, mas aos públicos também.

As escolas privadas no Brazil não precisaram buscar o aperfeiçoamento das públicas, essas caíram aos níveis baixos daquelas. Hoje estudar em uma universidade pública não garante que você está balizado com um bom ensino, se um professor PhD é capaz de fazer isso, imagina os alunos.

Já contei aqui nesse blog que tem gente na minha faculdade se formando sem saber para que serve um banco de dados, para você que não é da área, imagina que é a mesma coisa de um médico está se formando sem saber onde ficam os pulmões ou para que serve um coração. Imagina um formando em Letras sem saber o que é uma oração subordinada… é essa pessoa que não sabe para que serve um banco de dados, voce não precisa nem ser da área, isso choca qualquer pessoa familiarizada com internet por exemplo.

O pior de isso tudo é que esse tipo de pessoa vai ser gerente, como não tem capacidade de ser programador, vai dar prejuízo nas empresas e quem leva a má fama é a miserável da Engenharia de softwares ou a Tecnologia da Informação ou [cole aqui o seu rótulo Enterprisey para informática].

Faculdade custa tempo (que eu poderia usar para estudar) e dinheiro (que não tenho sobrando para desperdiçar em algo que não fará diferença alguma), você tem que assistir aquelas aulas enfadonhas sobre tecnologias que ninguém usa mais (impressionante como a universidade não consegue acompanhar o mercado) e aulas de professores doutores ou mestres que nunca participaram de um projeto real na vida.

Tenho até um causo da faculdade, um certo professor(a) em meio a uma aula respondeu a um aluno que Orientação a Objetos é a mesma coisa do Modelo ER, mudava só algumas "besteiras", mas o conceito era o mesmo. Essa situação é tão surreal que se eu não tivesse presenciado eu acharia que era exagero de quem conta. É a mesma coisa de dizer que Liberalismo é a mesma coisa de Comunismo, talvez em um país que considera partidos sociais-democratas de neoliberais seja mesmo, mas na realidade fora da caverna não é. Eu tivesse poder, cancelaria todos os títulos de um professor desses, sorte de vocês eu não ser poderoso, guilhotina seria pouco.

Vou tentar trocar a mensalidade por cursos ministrados, pobre é fogo e ainda mais latino americano sem dinheiro no banco, sem amigos importantes e vindo do interior, vira até música do Belchior. Existe algo mais fim de carreira que música do Belchior?

Sou questionado constantemente na Cé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ão criar um post mais direcionado aos novatos para compartilhar essas informações.

Como trabalho exclusivamente com JAVA no meu emprego e tenho seguido minha carreira nessa plataforma, meu ambiente se baseia no Eclipse, a melhor IDE java do mercado.

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.

IDE

Como mencionado, eu uso como base o Eclipse. Essa IDE tem centenas de plugins bons mas também tem bastante porcarias, já experimentei vários, fiquei com o seguinte ambiente:

Java 6. Sempre instalo a última versão, já conheço as novidades e faço "rêlouordis" para ficar antenado, essa de ficar com java 1.4 instalado não é interessante, afinal a plataforma sempre mantém compatibilidade com as versões passadas de forma extremamente estável (diferente de outro ambiente ali que as coisas da versão 2 não rodam as da versão 1, vai entender o que eles entendem por compatibilidade).

Eclipse como IDE base.

MyEclipse como suíte de plugins para desenvolvimento web e JEE, é o único que não é open source no meu ambiente de trabalho, mas vale cada centavo. O preço é escandalosamente barato para uma ferramenta tão boa.

Aptana, JSEclipse como plugins para html, css e javscript, sendo o último exclusivamente para javascript. o MyEclipse tem editores para esses artefatos, mas não são tão bons quanto o Aptana, eu ainda prefiro o JsEclipse da Adobe no caso do javascript, mas é questão meramente pessoal, em termos de features eles são praticamente a mesma coisa. Ultimamente testei o Spket apenas por curiosidade, por ele já trazer uma integração com o Ext, mas ele não tem diferencial comparado ao Aptana ou mesmo ao JSEclipse.

Container JEE

Tomcat 6 como container web JEE. Por questões de política do meu trabalho tenho que usar o Oracle AS10g como servidor de aplicações, preferiria o JBoss por inúmeros fatores (indiferente de questões filosóficas), mas uso o tomcat para testar todas as aplicações. Obviamente temos que nos policiar quanto às últimas novidades porque a Oracle sempre está alguns passos atrás (medidos em versões) dos outros servidores. Não temos nenhuma aplicação (pelo menos sob minha orientação) que use EJB, como não temos nenhum sistema distribuído e dificilmente teríamos (pelo contexto do nosso trabalho), nunca tivemos tal necessidade.

Banco de dados

Oracle 10g. Diferente do servidor de aplicações, o banco da Oracle na minha concepção é o melhor que existe (alguns dizem que é o IBM DB2, mas eu acho o Oracle). Mas mantenho o brinquedo MySQL instalado para testar as coisas devido a facilidade de instalação e manipulação.

Uso o programa DbVisualizer (que é feito em java) para trabalhar diretamente com os bancos de dados. Ele tem recursos menores se comparado às ferramentas nativas que são disponibilizadas pelas Players dos próprios bancos, mas como acessa todos os bancos que acesso diretamente: SQL Server (legado), MySQL (testes) e Oracle (produção e desenvolvimento), tenho preferência por ele.

Integração Contínua

Não temos um ambiente que enfatize a integração contínua e metodologias ágeis, nossa metodologia tem como base ainda se espelhar no IBM RUP (apesar de não ser o RUP).

Usamos o DotProject (provisoriamente) como gerenciador dos projetos. Não é a melhor ferramenta, aliás é muito fraca de ser considerada uma boa ferramenta, mas por enquanto o custo/benefício dela está falando mais alto, mas já existem movimentos de substituí-la. Esse é um exemplo de que a filosofia não deve falar mais alto que os aspectos técnicos, tínhamos uma base no uso do MSProject, que é muito superior ao DotProject, mas foi relegado em nome do Software Livre pela desculpa dos custos. Esse é um ponto onde o SL sempre perde pontos. Talvês existam softwares livres melhores que o DotProject que poderiam ter sido comparados ao MSProject, mas trocar um software que está funcionando corretamente por questões de custos não é uma boa alternativa, afinal o ROI medido posteriormente desmereça essa troca.

Nosso sistema de controle de versões é o velho e fantástico CVS que já tem suporte nativo excelente no Eclipse, mas vamos mudar para o SVN nesses próximos dias, posteriormente blogarei sobre essa mudança. Existe uma equipe que trabalha com o MSSourceSafe que deverá usar o SVN também, vamos ver o que vai sair dessa mudança, sinceramente eu não tenho opinião final formada sobre isso. Acredito que pode não ser uma boa idéia, já que essa equipe trabalha com DotNet e a integração entre o VisualStudio e o Sourcesafe seja bem melhor (evidente) que com o SVN, vamos ver.

Como eu mencionei, não enfatizamos (infelizmente) os métodos ágeis, mas tento seguir as boas práticas do XP, como não tenho um sistema de geração de builds, tento controlar usando o velho Apache Ant mesmo, tenho um script antigão aqui que coordena o processo inteiro, quem sabe não tenhamos um CruiseControl por aí em breve (que seria um salto extraordinário), quem sabe.

Agora nosso "Calcanhar de Aquiles" é o sistema de Issue Tracking daqui, é uma solução In House H-O-R-R-Í-V-E-L (como ficou gay meigo essa declaração). Já está sendo providenciado outra solução, mas In House também o que é uma pena devido a enorme lista de sistemas excelentes que existem por aí.

Last But Not Least…

O mais importante não é montar um ambiente de desenvolvimento ou simplesmente achar que conseguirá manter o mesmo pelo resto da vida e sim ter consciência de quais são as necessidades e como suplantá-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.

Um dos assuntos corriqueiros que volta e meia surgem em fóruns ou listas de discussões é o surgimento de uma linguagem "x" ou súbito interesse sobre ela por parte da mídia especializada.

Tomem como exemplo o Ruby, desde meados da década de 1990 que a linguagem existe, mas somente com o surgimento do "Ruby on Rails" que a linguagem alçou ao posto de "destaque do ano", isso como algo por volta de 10 anos depois de sua criação. Subitamente os velhos Rubistas se viram lado a lado com centenas de joviais newbies insuflando a gordura normal que toda tecnologia candidata a Hype provoca.

Mas a atenção atraiu hackers que antes estavam apenas com Python, Perl, Lisp ou outra linguagem não "Enterprisey". Assim como também atraiu boa gente de Java e C#.

Brigas desnecessárias já 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ém). Ultimamente acompanhamos discussões entre Java vs Ruby.

A bala de prata

Sempre que uma tecnologia tem maior "Market Share", ela será alvo das críticas principais, assim foi com o Delphi e VB quando o Java pretendia ser a líder de mercado, lembro que todas as críticas eram destinados a essas duas plataformas, o pessoal de Perl e Java eram até aliados na guerra contra VB nessas horas.

Mas linguagens são criadas e pensadas para resolverem problemas especificos ou voltadas a trabalhar em um contexto especifico, seja ele necessitário ou mercadológico.

Dificilmente voce conseguirá desenvolver toda e qualquer aplicação em apenas uma linguagem ou plataforma, mas isso não quer dizer que uma aplicação fica melhor com Java ou com C#, porque ambas praticamente são do mesmo contexto, não é essa diferença que enfatizo, e sim se o contexto favorece a determinada linguagem.

Eu fui infelizmente um defensor dos monoglotas, até o início de 2005 eu praticava apenas Java e via com maus olhos toda e qualquer linguagem pelo simples preconceito, na verdade era mais  uma discriminaçã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ão sou psicó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ávamos ainda no auge do Struts-like.

Admirável mundo novo

Com o surgimento do Ajax e consequentemente a popularização do Javascript como linguagem OO, me especializei a fundo na ECMA-262 como tinha feito com o Java mas nunca com outra linguagem. 

Esse novo mundo que conheci me trouxe mais dúvidas do que certezas. Assim como voce só aprende inglês se submergir na cultura de Shakespeare, voce só aprende uma linguagem de programação se penetrar no contexto ao qual ela foi pensada para sua concepção.

Como entender Closures quem vinha de Java?

A tendência natural era achar que era a mesma coisa de "Inner Classes". Quando voce realmente entra no contexto, as nuances antes não percebidas quase magicamente saltam aos olhos.

Como falei em um post anterior, se voce que faz um curso regular em uma Faculdade de Ciência da Computação e aprende a construir uma linguagem, aprender várias linguagens é algo singelo.

Como soluciona isso?

No estudo do Javascript como linguagem orientada a objetos (e não mais uma auxiliar para formatação de data e validação de inputs HTML), me deparei com contexto inéditos para mim, e problemas antes sequer diagnosticados.

Isso me provocou a natural curiosidade nerd de conhecer outras linguagens, pelo menos teoricamente.

Conceitos como Closure, Currying, Continuation, Design By Contract, Actor model, Lazy evaluation, Tail recursion, Quine e tantos outros (só para citar algumas features de algumas  boas linguagens) voce não conhecerá na faculdade, e imagino que nem na pós e nos mestrados da vida. Devo admitir que nem haveria espaço para tanto, a faculdade (como sempre enfatizei) é apenas um local para socialização, algo como: "entre um networking e um fórum".

Solucionar um problema não é conhecer sua resposta e sim as perguntas necessárias, conhecer antes de tudo a pergunta certa. Eu posso criar uma aplicação qualquer em java, isso vai me custar uma quantidade "y" de recursos, com a plataforma/linguagem "z" eu construiria em "y/2" dos recursos.

Quantas linguagens voce está disposto a aprender?

Conhecer outras linguagens é conhecer outras culturas, é abrir mais uma janela para o conhecimento.

"Infomação não é conhecimento, conhecimento não é sabedoria…" [Frank Zappa]

Concordo com o Zappa, a sabedoria está mais ligada à capacidade de responder a um determinado questionamento do que simplesmente a ter mais informações. Mas uma informação é crucial para determinar o rumo de uma investigação, quando voce está planejando a resolução de determinado problema, quanto mais subsídios puderem embasar sua avaliação, melhor.

Em outras palavras, se voce conhece mais culturas, voce tem a chance de encontrar não somente uma resposta ao problema, mas sim a melhor resposta. Vou mais além, poderá até diagnosticar o problema, antes de sequer ser sabido.

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ã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ímino me abrirá a mente para enfrentar os problemas do cotidiano com mais tranquilidade.

Hoje li esse post do Daniel Q. Oliveira no meu reader sobre essa discussão 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ó feras na discussão.

É comum na universidade voce encontrar gente que não se dá bem com algoritmos e planeja  migrar (sic) para áreas "gerenciais". Isso é típico de quem entrou no curso de computação porque a concorrência de Fisioterapia estava maior na época de seu vestibular.

Mas antes que rotulem esse post de algo, quero deixar claro que existem aqueles que migram para a área gerencial por causa do salário e aqueles que migram por … como direi… não rolar uma "química" entre eles e os algoritmos. É comum voce ouvir: "-me cansei disso, pretendo virar gerente de projetos".

Ano passado uma menina praticamente formanda se perguntava qual a serventia de um banco de dados, esse tipo de gente é mais comum do que se pensa, não tenho estatística nem ninguem tem que eu saiba, mas creio por experiência de ministrar cursos, palestras e participações em eventos sobre programação que se não for maioria, esse pessoal no mínimo é a metade do contigente da área.

Alguns acham que regulamentação da profissão evita esse tipo de profissional, eu afirmo que nã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á que esse profissional seja um analista ou pior… um CIO?

O nível anda tão baixo que ainda existem dúvidas se um profissional deve conhecer mais de uma linguagem de programação, ora, se o profissional aprende como construir uma linguagem (pelo menos deve aprender já que qualquer curso de Ciência da Computação ensina isso), qual a dificuldade de aprender 5 ou 10 linguagens diferentes?

Eu nem considero linguagens diferentes aquelas que somente modificam a sintaxe de determinados ADTs ou sentenças, mas sim aquelas que são construídas para contextos diferentes. Java e C++ são linguagens diferentes? humm… Java e LISP são!

Isso merece um post a parte, portanto não farei juízo de valores sobre isso nesse post.

Não deixe que a Universidade atrapalhe seus estudos

Em um post passado, evidenciei o fato da burocracia escolar ser um empecilho ao desenvolvimento pessoal, todo estudo é um auto-estudo, ninguem pode ditar o que outro tenha que aprender, é uma escolha pessoal e por mais que isso pareça temeroso e sombrio, voce está sozinho.

Portanto, não deixe que a escola atrapalhe seus estudos, mas nunca abandone a universidade, mesmo depois de formado, se não há tempo, invente um mestrado, pós ou especialização. O contato com o meio acadêmico é de vital importância ao  programador, esse contato oxigena as idéias, afasta um pouco o apelo comercial que tanto o mercado exige.

O academicismo as vezes é benéfico, te desregula da própria não-regra, evita que voce considere padrões como gambiarras e abres os olhos do programador para questões mais profundas.

Sou um programador

Divirto-me com os códigos saídos do meu teclado, se tem uma expressão de mais-valia (da marxista luta de classes) mais precisa, é a programação. Um software nada mais é que uma idéia armazenada na forma de bits, soluções para processos humanos transformados em um emaranhado de fórmulas e algoritmos. Quando voce desenvolve um software ou parte dele, mesmo que terceirizado por outro para tal tarefa, voce está projetando o seu "eu" naquele software. "Os meios de produção" é a sua mente, talves o fator que mais provoca fracasso nos projetos que presenciei esse fracasso foi tentar "desumanizar" o software, tentar por meio de processo ou metodologia de desenvolvimento que qualquer um chegue e altere uma criação de outro artista.

Ninguem chega e altera uma obra de "Michelangelo" (não é a tartaruga ninja, é o … deixa pra lá), talves seja pretensão minha, mas os programas são obras artísticas, não são meros produtos industriais, analogia com prédios da construção civil também não tem refletido muito sucesso nas últimas décadas.

Sou um programador, apenas isso, pode chamar de desenvolvedor, analista, anapropégua! Mas na verdade somos desenvolvedores.

Há quem queira ser analista, ou desenvolvedor ou até Gerente de Projetos, rótulos criados para caberem nas teorias administrativas e distribuir organograma colorido na empresa. Besteira, Bullshit!

Porque programadores recebem menos?

Recentemente travei uma dessas discussões homéricas sobre um fato que as vezes passa despercebido, que um gerente PMBOK genérico não serve para projetos de Engenharia de Software. Uns acham que sim, que qualquer um com teoria sobre gerência de projetos consegue controlar um projeto computacional, eu afirmo categoricamente que não, se o Gerente não foi programador (não vale ter sido estagiário que normalmente é chamado de programador) ele não conseguirá controlar o projeto satisfatoriamente.

Lembro de um projeto recente na SEAD que o suposto "gerente" em meio a uma reunião, apertado por todos os lado, fala: "-háaa! o cronograma não está assim tão atrasado, os riscos estão em dia", sobre um projeto que não tinha uma linha de código funcional, não passava da tela de login, já consumira 3/4 do tempo, centenas de páginas de documentação desnecessária e rodado metade da população do estado no projeto.

O principal fator de uma empresa de software é o programador, é ele o sucesso ou o  fracasso, mas só ganha 1/3 do que ganha um Gerente, isso na mais otimista das hipóteses.

O problema é a hierarquia artificial criada pelo mercado e legitimada pelo meio acadêmico de que o programador é o novato, o inexperiente. O programador veterano que entende de análise é apropriadamente (reconheço) chamado de analista, mas… pera aí! Ele continua sendo um programador. Criou-se o programador (reles servil, geralmente estagiário), o analista, o arquiteto (ui) e o gerente, estou ainda desconsiderando as carreiras intermediárias ou artificiais como engenheiro de especificação, arquiteto de configuração, programador de testes e variantes. Virou uma zona, o Gerente as vezes sequer sabe reconhecer um fluxo condicional, o arquiteto não conhece a arquitetura (ironia?) de determinada plataforma, e o desenvolvedor não sabe desenvolver algoritmos, apenas desenhar no IBM Rational Rose.

O programador de verdade conhece UML, entende como funciona RUP e métodos ágeis, sabe instalar e configurar não só as ferramentas auxiliares no processo de desenvolvimento, mas faz tuning no SO e poderia gerenciar um projeto satisfatoriamente, mas isso é quebrar o Status Quo estabelecido… onde esses revolucionários vão parar mesmo? 

Pague o salário de programador acima do salário de gerente e veja na próxima entrevista o nível dos candidatos, é uma dica! Sei que ninguem vai levar a sério.

Como escolher um programador

Em recente projeto que graças a Odin não participei, consideraram o fator humano um risco de nível intermediário e as ferramentas usadas no projeto de risco alto. Esse é o tipo de projeto que pede de cara para fracassar, nem nasceu e já considera um profissional, o artista, aquele que dará vida, o "faça-se a luz" no sistema como sendo mero insumo em uma cadeia produtiva similar a um chão de fábrica na indústria.

Dois posts recentes falaram sobre como escolher um profissional decente. Um foi esse post do José Oliveira e outro foi esse do Vítor no embalo do Zé que prontamente completou

Não tenho muito a completar sobre as excelentes dicas que deram, mas gostaria de dar somente dois pitacos:

1 - Não terceirizar a escolha do candidato, entrevistar pessoalmente, o olho-no-olho revela todos os segredos;

2 - Não deixar os títulos sobrepujarem a experiência, experiência não tem preço. Claro que não estou confundindo experiência com tempo na área.

3 - Verificar a vida do sujeito, conhecidos, comunidades que frequenta, postura diante dessas comunidades, vê se ele se encaixa realmente na cultura da empresa.

Sei sei, eu disse que eram dois pitacos, mas depois de "cálculo 2" perdi qualquer noção de matemática básica :) 

« Previous PageNext Page »