20 julho 2008

Profissão: analista de sistemas

Quando me perguntam por aí qual a minha profissão, ou quando preciso responder isso em algum formulário “genérico”, costumo responder: Analista de Sistemas. É uma resposta também “genérica”, rápida, que não exige maiores explicações e satisfaz a maioria das perguntas - normalmente feitas apenas por obrigação.


Embora seja um termo meio “genérico” demais - e até obsoleto sob certos pontos de vista - ainda o utilizamos em muitos contextos, como no debate sobre a regulamentação da profissão. Não pretendo aqui entrar no mérito dessa discussão, mas refletir sobre o significado do termo em si, questão um pouco mais fundamental, cuja reflexão pode alimentar e influenciar opniões sobre o assunto.

Afinal, o que faz um analista de sistemas? Ora, se interpretarmos ao pé da letra, deve ser alguém que estuda sistemas e o divide (corta, quebra) em outros menores, mais simples, para que se possa compreendê-los mais facilmente. Não é difícil encaixar nessa definição alguns papeis e funções que costumamos ver em projetos de software tradicionais.

O “analista de requisitos” esclarece os detalhes de um dado domínio, através de modelos, diagramas e descrições. Seu “sistema” são os processos do cliente. O arquiteto analisa o problema em módulos, componentes, camadas, e outros recortes. Seu “sistema” é um programa, (ou vários) visto como um todo. O programador divide cada funcionalidade e operação em funções, procedimentos, estruturas de dados e instruções.

A visão tradicional de um analista de sistemas passa, de um modo ou de outro, por um desses aspectos. Ou por todos ao mesmo tempo, considerando-os especializações, ou rumos a se seguir dentro da profissão. Enxerga “o sistema”, portanto, como toda essa “coisa” que automatiza (informatiza) os processos do cliente.

Em metodologias ágeis costumamos identificar um número menor de papéis, ou especializações, criado uma visão mais holística de equipe, que ressalta valores como interdisciplinaridade, auto-organização, habilidades sociais, lideranças, etc.

Mas, se por um lado tem-se menos tipos de “analistas”, por outro enxergamos mais “sistemas” a serem analisados, compreendidos e geridos. Ou pelo menos um sistema mais completo, que vai além dos saberes técnicos que são ensinados nas faculdades de tecnologia - cursos focados em teorias e técnicas matemáticas, exatas, objetivas.




Essas metodologias reconhecem outros sistemas extremamente relevantes aos processos de desenvolvimento. Aspectos humanos e organizacionais, jogos de intenções e interesses, forças políticas, estruturas sociais e questões motivacionais. Um emaranhado de fatores que compõem o ambiente e a cultura da empresa, e que fazem parte do inconsciente coletivo da equipe. Questões importantíssimas e determinantes para o sucesso de qualquer projeto.

Um arquiteto pode estar mais preocupado com seu ego do que com o bom andamento do projeto, ao propor uma solução complexa demais; um gestor pode estar mais interessado em seguir uma tendência de pensamento com que sua gestão já se comprometeu; um programador pode não tirar uma dúvida importante de projeto com o cliente pela estrutura de comunicação que se criou; ou pode não sinalizar sobre um problema que identificou no design por causa de sua baixa auto-estima junto à equipe.

O desenvolvimento de software é acima de tudo uma atividade criativa, de aprendizado coletivo e de auto-conhecimento para todos: clientes, usuários, programadores. Ao mesmo tempo que a equipe está aprendendo os detalhes tecnológicos envolvidos na solução, usuários estão aprendendo a ver de forma mais clara seus processos de trabalho. A equipe como um todo (incluindo cliente e usuário) está aprendendo a se comunicar e a colaborar para desenvolver uma visão única e coesa do “sistema”, aprimorando seu processo de trabalho a cada dia (melhoria contínua).

Sob esse novo ponto de vista, a expressão “analista de sistemas” ganha uma conotação integral, levando em conta um sistema mais âmplo, que precisa ser não apenas analisado, mas percebido, compreendido, refletido e gerido.

02 julho 2008

Programação em par

Essa talvez seja a prática mais demorada de se aprender em XP. Não que seja extensa ou complicada. Nada disso.


A questão é que, para se compreender a prática de verdade, é preciso primeiro acreditar nela.

O pensamento mais imediato, claro, é sempre imaginar que se gasta o dobro para realizar a mesma tarefa. Esse pensamento não está certo. Porque a programação é uma tarefa criativa e não respeita à lei "quanto mais gente, mais trabalho se realiza". Nesse caso, a qualidade do código produzido interfere muito na produtividade dos próximos passos. Então vale muito mais a pena "gastar" o dobro da atenção sobre cada parte dele.

Não é fácil argumentar sobre isso, nem é esse o meu propósito aqui. Quem já experimentou programação em par "na veia" vê isso com uma clareza impressionante. Mas pra quem está iniciando, acreditar nisso não é tão natural.

Quanto mais se acredita, melhor se pratica. Quanto melhor se pratica, mais se acredita. Mais um ciclo virtuoso que costuma estar presente em XP.

Aqui está um screencast muito interessante pela própria "inovação tecnológica" da idéia. Mais interessante ainda pela forma como consegue expor uma seção de programação em par tão de perto. Quase que se participa dela. Impressionante!

(Sugestão: assista em full-screen)


Cola: Real-Time Shared Editing from Mustafa K. Isik on Vimeo.

A programação em par, quando acontece fluida, assemelha-se muito a uma conversa, ou uma seção de design, onde se discute a modelagem do sistema com papel e lápis. Se a programação for guiada por testes ainda por cima, aí é que a coisa fica bonita!

Alguém se habilita pra gravar algumas seções com foco mais metodológico que tecnológico, usando TDD, BDD, etc.?

24 junho 2008

AgilDF, reunião 2

Na última sexta-feira, dia 20/06/2008, fizemos nossa segunda reunião presencial do grupo AgilDF. A reunião foi ótima! Alguns bons indicativos que posso citar de antemão são a participação, que dobrou desde a última reunião (éramos mais ou menos 15 dessa vez) e o horário de término da reunião, que prolongamos por uma hora sem nem perceber (acabamos às 22:00 ao invés das 21:00 e ainda ficamos conversando lá embaixo mais uns 15 ou 20 minutos).



A reunião aconteceu mais uma vez na SEARCH, na sala de treinamentos deles que é ótima! Conversamos em volta da mesona oval... Muito bom! Valeu Ricardo, valeu SEARCH !!!

Vou descrever em linhas gerais o que conversamos, mas é bem provável que eu esqueça alguma coisa, já que estou me baseando nos rabiscos que fiz durante a conversa. Por favor, complementem nos comentários!

A reunião foi marcada pras 19:00, mas como o pessoal foi chegando aos poucos, a conversa foi começando informalmente e encorpando enquanto o pessoal chegava. Nesse começo, a conversa ficou um pouco em torno de perguntas em torno das experiências que estamos tendo na SEA, acho que porque somos os únicos que estamos divulgando por enquanto. :-)

Entre 19:30 e 20:00 o Giovani achou por bem intervir e organizar um começo mais formal para a reunião. Fizemos uma rodada de apresentações, onde cada um falou seu nome, onde trabalha, qual sua posição na equipe, as experiências que já teve e que interesses tem no encontro e no grupo, em geral.

O levantamento que ficou anotado na minha folha de papel foi:

Banco Central:
  • Giovani;
  • Marcio;
  • Cristiano;
  • Djalma;

Search:
  • Ricardo;

Min. Previdência
  • Cristopher;

MPU
  • Ronald Tetsuo;
  • Ranieri;

Min. Transportes

  • Derlon;

Lumi
  • Waelson

Stephanini @ STF
  • Jusmar

SEA
  • Bruno (eu);
  • Renato Willi;
  • Ana Carolina;
  • Euler;

(Errei algum? Esqueci alguém? Alguém quer um link? deixem comentário...)



Pela minha percepção, tirando nós lá da SEA (que já andamos falando bastante do nossos casos), o pessoal da SEARCH está bem encaminhado, com uma equipe de umas 15 pessoas evoluindo bastante com reuniões de planejamento e testes automáticos; e a equipe do Cristopher que tb estão usando bastante coisa de Scrum.

Além disso, o pessoal do Bacen já teve alguma experiência com XP, estão bastante desanimados com a situação atual (RUP/Praxis/Cascatão) e avistam algumas boas oportunidades para começar um projeto piloto por lá. (Boa sorte, contem comigo (concosco) e vamos acompanhar!);

Lembro tb do caso do MPU, onde já fizeram algumas tentativas (com Scrum né?), mas parece que a bola deu uma baixada. Vamos levantar ela de novo!

Mais algum caso que esqueci?

Depois disso, íamos organizar algum assunto específico pra discutir, mas a conversa se deixou levar pelos ímpetos do pessoal. Deixamos rolar.

Conversamos sobre as restrições que os contratos tradicionais criam, atrelando o pagamento de parcelas a entregas de documentação, assunto puxado pelo Jusmar. A conversa evoluiu para contratos em geral, acordos baseados em PCU, etc. e depois foi pra processos e resistências das estruturas sociais que já existem nas "corporações" por aí (o pessoal do PMI, CMMI, RUP e ouras letrinhas...)

Reservamos os últimos 15 minutos pra conversar sobre o formato das próximas reuniões. Em suma, decidimos que vamos variar o local e o horário. O Ricardo sugeriu de fazermos um encontro aos sábados, em volta de uma churrasqueira (eu gostei da idéia). Vamos sempre fazer uma equete e decidir na lista.

Concordamos com uma periodicidade inicial de aproximadamente um mês, enquanto tivermos assunto e quórum.

Levantamos alguns temas para serem discutidos. Como bons agilistas que somos, vamos priorizá-los na lista e escolher os dois mais interessantes para a próxima reunião. Os temas que anotei foram:

  • Testes automáticos;
  • Contratos;
  • Design evolutivo;
  • (eu que propus esses três primeiros, pra “abrir a porteira”)
  • Testes de aceitação com Selenium (Caso SEA@Aeronáutica. Fiquei de escrever um blog antes)
  • Retrospectivas;
  • Estimativas;
  • Caso Bacen - dificuldades, oportunidades, etc.
Essa é apenas a lista que levantamos lá na hora. Vamos aprimorar ela na lista. Acho que a próxima reunião promete! :-)

Comentários?

18 junho 2008

GIT

Pra quem ainda não sabe, GIT é o sistema de controle de versão que tem se popularizado muito rapidamente (especialmente entre a comunidade Rails) depois que o Linus Torvalds fez essa apresentação no Google:




O video é bem engraçado, vale a pena assistir. O Linus é mesmo um gênio no que diz respeito a sua capacidade de agregar, criar entropia, motivar... Ou no mínimo atiçar a curiosidade :-)

Desde que participei da definição do processo de desenvolvimento da Mirante, tenho me envolvido e me interessado por sistemas de controle de versão e por gerência de configuração em geral. De lá pra cá, passei por SourceSafe, CVS e Subversion.

Sinceramente, depois do SoftwareConfigurationPatterns e no VersionControlWithSubversion - li ambos quase que de cabo a rabo - e de ter usado e ensinado um monte de gente a usar branches, achei que entendia de SCM.

A algumas semanas, desde que comecei a ter contato com o GIT, tenho percebido que a disciplina ainda pode ser bem mais interessante. Não apenas sob o aspecto técnico da coisa, mas também - e principalmente - sob o da colaboratividade e do modelo bazar. (Vide GitHub !!!)

Confesso que, quando comecei a usar o GIT pra ajudar com a tradução do WhysPoignantGuideToRuby fiquei um pouco atrapalhado. A estrura do sistema é um bocado diferente do SVN, então não entendi tudo de primeira.

Lendo o tutorial do Akita, já conseui ter uma idéia melhor e começar a trabalhar. Precisei de mais umas ajudinhas do CarlosBrando e acabei conseguindo me virar.

Agora, vou te contar... Depois de assistir à palestra que o ScottChacon apresentou na última RailsConf, aí sim as coisas ficaram claras!

Além do ótimo conteúdo, o formato da apresentação é uma verdadeira aula de como se utilizar transparências para apresentar um conteúdo técnico. Não foi a toa que, no meio da apresentação, ao concluir a explicação de um único tópico, algumas pessoas da platéia o aplaudiram como se fosse o fim da apresentação (de "brincadeira", claro!), tamanha foi a clareza e capacidade de comunicação dos slides.









Vejam aqui a versão "screencast" que ele fez. (A versão gravada no auditório tem uns cortes brochantes!) Dá pra assistir online, mas vale mais a pena baixar a versão em alta qualidade e assistir com calma. A apresentação toda dura quase uma hora!



Bom proveito!

28 maio 2008

Falando em Agilidade: o discurso certo para o público certo.

Já tem algum tempo que me interesso muito por XP. Minha primeira tentativa de usar a metodologia em um projeto real foi em 2004. De lá pra cá, tentei muitas vezes falar sobre XP nos locais onde trabalhei, tentando influenciar de alguma forma o modo como desenvolvíamos software.

No entanto, foi só a partir do ano passado que essas iniciativas começaram a surtir efeito. Hoje já estamos usando grande parte das práticas de XP em 4 projetos na SEA, e considero que pelo menos outros 2 foram muito bem sucedidos especialmente por conta delas.

Apesar dos casos de sucesso que tivemos, ainda acho bem difícil convencer alguns grupos a darem mais atenção a essa inevitável mudança de paradigma por que nossa indústria vem passando.

Recentemente, tive a oportunidade de apresentar algumas palestras sobre XP e Scrum em algumas empresas de Brasília e na UnB. Semana passada, foi a primeira vez que apresentei uma palestra sobre RubyOnRails, dessa vez para estudantes de graduação da Unip, aqui em Brasília.

Dessas experiências, tirei uma conclusão que a partir de agora passará a fazer parte da minha caixa de ferramentas sempre que for chamado para outras apresentações sobre Agilidade: Se for apresentar para gerentes e executivos, fale de Scrum; se for falar para programadores e/ou estudantes, fale de Rails.


Algumas das apresentações mencionadas foram decisivas pra essa conclusão. uma delas foi a palestra que fiz sobre metodologias ágeis na semana de extensão da UnB. Para essa palestra, escrevi um resumo super cuidadoso, relacionando a agilidade com o tema maior do evento - sustentabilidade. Resultado: não apareceu ninguém. Estudantes de graduação simplesmente não têm o menor interesse em assuntos como metodologias de desenvolvimento. Talvez porque ainda não compreendam a importância do assunto.

Outra experiência importante foi a apresentação de Rails na Unip. Como preparei tudo com bastante pressa, acabei pecando no ponto mais básico de todos: o público alvo. Preparei uma apresentação cheia de exemplos de código e explicações técnicas; comparações com Java, etc. Ao começar a apresentação, percebi que estava em uma enrascada. Aproximadamente 90% do público nunca havia programado profissionalmente ainda!

Fui em frente, fiz minha apresentação, e no final, quando havia planejado uma demonstração, acabei preferindo terminar sem fazer a demonstração. Afinal, já havia mostrado tanto código que achei que a demonstração fosse ficar mais chata ainda.

A grande surpresa é que a reação da platéia foi exatamente a contrária. Todos adoraram a idéia da demonstração e ninguém se levantou, como eu havia imaginado. Achei ótimo! O Paulão colocou uma musiquinha ambiente, sentei na mesa com o microfone e programei uns 2 casos de usos simples narrando passo a passo cada linha de código programada. Foi super legal!

Em contrapartida, ao falar para gerentes e executivos, o que sempre percebi foi uma resistência terrível às práticas de XP, especialmente as mais relacionadas com atividades de engenharia: programação em par, testes automáticos, design evolutivo. São práticas que simplesmente não entram na cabeça dessas pessoas.

Mas, ao falar de Scrum ao invés de XP, tudo muda! As práticas de engenharia (mais controversas) não estão na pauta, temos gráficos bonitos e bem apresentados, argumentos pomposos, certificações e tudo mais que essa turma adora!

Portanto, se vc tem uma apresentação de XP a fazer, considere bem seu público. Estudantes e programadores jovens não se interessam por metodologias, mas ficam fascinados ao ver uma demonstração de RoR. Enquanto isso, bombardeie valores e princípios ágeis. Gerentes em geral são tão preconceituosos com XP, que antes mesmo de começar a apresentação, já terá várias críticas para responder. Apresente-lhes Scrum, com seus gráficos bonitos e certificações, que as portas se abrirão como mágica.

27 abril 2008

Simples e bem feito

Acho que é um pouco disso que o DHH está falando nessa apresentação. Simplicidade, qualidade. As grandes idéias de hoje são assim.

Reserve 30 minutos do seu dia para assistir a essa apresentação, em que o pai do RubyOnRails explica - com muita simplicidade - onde está o pulo do gato de idéias como Basecamp e Campfire.

Junte com um pouco mais de tempero, e deixe fervilhar na mente por alguns minutos.

<div><a href="http://www.omnisio.com">Share and annotate your videos</a> with Omnisio!</div>


A propósito, que belo formato de unir video + transparências para publicar uma apresentação, hein...

21 abril 2008

Sucata pros senadores

Estou aderindo a esse protesto:



Tem um monte de porqueira aqui em casa e já está indo pra caixa!

Achei o post pelo blog do Akita, com quem normalmente concordo em gênero e grau.

Aqui tem mais algumas opniões interessantes.

Brincadeira esse nosso legislativo... Dá um pouco (muito) de tristeza viu... :-(