Os erros mais comuns do programador
Por Luís Soares para o Pplware
É importante analisar os projetos de software que correm mal. Nem sempre são resultado dos prazos impossíveis ou de maus gestores. Geralmente é um somatório de factores que entra numa espiral causa-efeito. Tentarei agora identificar alguns erros comuns dos programadores (também aqui me incluo). Tais erros não são exclusivos do programador júnior. De facto, alguns são cometidos mais frequentemente pelo programador sénior.
Por outro lado, não se pretende aqui falar em más práticas de programação mas sim de soft skills e de gestão pessoal.
Os papéis do Programador
A palavra ‘programador’, neste artigo, é usada para representar ‘developer’ (já que ‘desenvolvedor’ não é muito usado em Portugal). Vejo um developer não só como um técnico, mas como um engenheiro de software:
- Opera em várias stacks do software: interface, lógica de negócio, bases de dados, ...
- Pode ter diferentes responsabilidades: sys. admin., tester, designer de interfaces, etc.
- Passa pelas várias fases do projeto: pré-estudo, desenho da solução, implementação, etc.
É também um gestor, pois:
- Nem sempre um chefe está presente.
- O chefe não deve realizar microgestão (gestão de subtarefas).
- Há metodologias em que nem existe o chefe (ex: Scrum) e todos o são.
Um programador também é um cientista: coloca, testa e descarta hipóteses, optando por algo com base em factos. Demonstra ceticismo perante afirmações infundadas.
Por fim, é um consultor: usa a sua experiência para aconselhar, reconhecendo padrões e propondo soluções. É um ser social que deve respeitar o cliente e o ambiente do projeto em causa. Sem essa componente, é o chamado code monkey.
Comecei por falar em culpa; na verdade, a culpa não é de quem erra, mas sim de quem não tem humildade para reconhecer os erros e nem os tenta corrigir. Um bom programador reconhece os seus defeitos e limitações em vez de os desconhecer ou ignorar; deve ser humilde para realizar esta introspeção, não achando que sabe tudo e assim melhorando no dia-a-dia.
Estimativas idealistas
«Faço isso em 2h»
Por vezes, os programadores falham nas estimativas por uma questão de orgulho: prometem que são capazes de entregar algo em pouco tempo quando, na realidade, isso aconteceria apenas em condições perfeitas e ideais (o que é muito raro; há sempre problemas). Estimar algo é difícil por natureza (o Scrum, com as suas estimativas relativas em vez de absolutas, pode aligeirar isso) e reconhecê-lo é o primeiro passo para minorar o problema.
É certo que os programadores são muitas vezes pressionados a prometer prazos impossíveis. No entanto, quando no fim esses prazos não são cumpridos, foi o gestor que ficou a perder (com o projeto prejudicado e a equipa cansada e desmotivada). Se o resultado final seria semelhante, mais valia ter sido realista. Será preferível viver na feliz ilusão ou no realismo sólido dos prazos? É preferível criar falsas expectativas? O programador deve tentar, progressivamente, incutir estas ideias nos seus superiores.
Alienação do negócio
«Não tenho nada a ver com isso»
Alguns programadores ficam de tal forma empedernidos no código que perdem a ligação ao negócio. Seja porque estão a fazer algo muito complexo, porque estão a gostar muito ou porque simplesmente não querem saber. Muitas vezes não lhes é explicado o negócio em que está inserido, mas outras, ele também não procura saber mais. Contudo, o programador, acima de tudo, é um engenheiro de software, pelo que é geralmente contratado para resolver problemas do negócio, e não para simplesmente programar.
Fazem-me alguma confusão ofertas de emprego do estilo “especialista em JavaScript”, quando o que uma empresa devia procurar era um especialista em frontend muito bom em JavaScript (talvez haja exceções a esta afirmação). A empresa poderia ter mais a ganhar com alguém com uma noção mais abrangente de como as peças se encaixam.
Delegação da culpa
«A culpa é do utilizador»
Programar, por mais gratificante que seja (e por mim falo), é apenas uma ferramenta ao serviço do projeto/produto e, por conseguinte, da empresa/cliente. Em última análise, programa-se para o utilizador (nem sempre assim é, mas regra geral, e especialmente em sistemas de informação), pelo que as nossas ações devem envisioná-lo direta ou indiretamente.
Culpar o utilizador (“ele que atualize o browser”, “não são muito inteligentes”, “ele é que não viu o botão”, ...), além de nada fazer para resolver o problema, desculpabiliza os verdadeiros culpados que não conhecem o seu público-alvo. Por outro lado, descaracteriza a profissão, pois os utilizadores são a razão da existência dos sistemas de informação e dos consultores informáticos.
“Não fui eu que fiz isso”
Por outro lado, há casos em que o programador, por não ter sido ele a fazer e/ou não ser da sua área, se descarta e/ou oferece resistência a mexer em algo. Admite ignorância sobre um assunto para fugir à realização de uma tarefa. Passado algum tempo, adquire a chamada “visão em túnel” do negócio.
O que o programador deve perceber é que,“no fim do dia”, todos são de todas as áreas e todos são da empresa. Todos devem lutar pelo bem do projeto, pelo que não devem haver “lugares marcados”. O bem de um é o bem de todos e há que evitar que as agendas pessoais interfiram no sucesso dos projetos. Descartar de imediato a culpa ou responsabilidade não acrescenta valor. Geralmente, não se procura um culpado mas sim uma solução.
Medo do refactoring
Por motivos de pressão superior e/ou medo de estragar alguma coisa, há muitos programadores que optam por “mexer o mínimo possível”. Quando é preciso uma alteração, acabam por (na gíria do software) “dar marteladas” ou fazer “copy/paste” de código, entre outras péssimas práticas. O código transforma-se então em “código-esparguete”, que já ninguém consegue manter. O programador deixa assim morrer o seu perfecionismo e o projeto perde a sua melhoria contínua.
Como em tudo na vida, deve haver um balanço. Não defendo que se deva estar sempre a mudar tudo, mas o bom código muda. Muda porque os requisitos mudam, as dependências (ex: S.O., browser) mudam, porque aparecem (ou se aprendem) novas técnicas, porque algo trará mais valor ao utilizador, etc.
Portanto é melhor aceitar a mudança que negá-la. É certo que há produtos com um término bem definido, mas mesmo esses entram em fase de manutenção e têm novas funcionalidades de tempo a tempo.
Para evitar criar o medo da mudança, deve-se reduzir o risco associado à mesma:
- O bom código fala por si: é simples, estruturado e elegante o suficiente para estar preparado ser modificado.
- Comentar o código todo é utópico; por isso, deve-se comentar pelo menos as operações destrutivas, as importantes e as diretamente ligadas ao negócio.
- Devem existir testes que permitam verificar que tudo continua bem após uma mudança (para tal, é bom conhecer o TDD).
- Deve-se considerar a preparação de ambientes de teste e de staging.
- Deve ser fácil voltar atrás caso algo negativo aconteça (inclui reverter código facilmente assim como realizar deploys rápidos).
- Todos os programadores devem tentar conhecer todo o código; para tal, o pair programming e o code reviewing podem ajudar.
- Todos os programadores devem conhecer muito bem a arquitetura do projeto (e do sistema onde ele se insere) antes de alterar código; isso pode mudar tudo. Para isso, bastam simples diagramas e páginas em wikis internas.
Recomendo também que conheça o Teste de Joel.
Deslumbramento pela tecnologia
«Vamos converter tudo para Swift»
É comum o programador sofrer de “entusiasmo pela tecnologia”. Como consequência, acaba por caprichar ou até forçar o uso de determinadas tecnologias, nem que isso implique mudar todo um projeto. Não tem mal ser um entusiasta. De facto, até pode ser importante. Não se deve é deixar de se fazer uma análise imparcial às várias tecnologias, antes de se optar por uma. Eis alguns falsos argumentos para a escolha de uma tecnologia:
- «Já usei isto em muitos projetos»
- «Ele já tem muita experiência; vamos usar»
- «Estou mesmo curioso em experimentar»
- «Sinto que é o ideal»
- «Li num blogue que é espetacular» ou «É o que o Google usa»
- «Toda a gente usa isto agora!» ou «É o que está a dar»
Não há soluções universais e a oferta tecnológica está em constante mudança, pelo que é provável que seja sempre necessário pôr as coisas em causa.
O bom programador, mesmo que entusiasta, sabe refrear os ânimos quando conhece uma tecnologia ou sai o "último grito" de uma framework. Sabe que o negócio está à frente da tecnologia e que quanto menos tecnologias um projeto tem, melhor. O mau programador enche um projeto com dezenas de bibliotecas e frameworks que o tornam “sensível” (em que não se pode mexer), com inúmeras dependências e potenciais pontos de falha.
Desvalorização de “desenhos”
«Desenhar no PC é muito melhor»
É fácil cair no erro de se achar que já se resolveu tudo na cabeça. Isto aplica-se tanto a um algoritmo, a uma interface, ou até a uma arquitetura de software.
Quem não se lembra do liceu, em que um simples desenho ajudava a resolver e acompanhava a solução de problemas de matemática, física e química? Poder visualizar algo complexo em imagens é determinante, na solução e no caminho para lá chegar.
Com “desenhos” refiro-me a simples protótipos de baixo nível (wireframes), fluxogramas e outros esquemas e esboços. Não me refiro a usar ferramentas do tipo Visio ou Photoshop, mas sim papel (ou quadro) e caneta/lápis. Passo aos exemplos, para melhor expressar esta ideia:
- Fluxogramas para expressar algoritmos, interações e outros fluxos.
- Protótipo de baixo nível não funcional (mockups ou throwaway prototypes) para representar interfaces gráficas (GUI).
- Diagramas de classes (e de outros tipos) para representar conceitos arquiteturais.
Este tipo de desenhos tem as seguintes vantagens:
Cativam a reflexão sobre o problema, colocando-o numa linguagem (tal como falar sobre um problema a alguém). Isto permite desde cedo abandonar ideias sem futuro e reforçar outras interessantes. Ter um modelo mental coeso da solução permite ser muito mais objetivo na hora de a pôr em prática.
Promovem a comunicação: é muito mais fácil apresentar uma ideia a alguém se ela for gráfica. Por outro lado, é mais fácil que 2 ou mais pessoas construam um modelo mental semelhante da solução, em vez de cada um ter o seu.
Como consequência, poupam-se custos denecessários. Um desenho que custou 20 minutos a fazer pode poupar muito mais tempo ao programador e à empresa, evitando muito refactoring desnecessário. Mesmo após esse refactoring, o código pode nem ficar com a qualidade que teria caso se tivesse uma ideia bem definida do problema desde cedo.
Desvalorização do pair programming
A técnica do pair programming é valiosa e devia ser mais aplicada. Implica que dois programadores estejam no mesmo computador. É desvalorizada exatamente por isso: porquê ter duas pessoas no mesmo local quando podiam estar ambas a programar sozinhas?
A questão é que um programador não é uma máquina; comete erros, distrai-se e não tem produtividade e motivação lineares. Ter alguém ao lado permite:
- Maior foco
- Menos erros
- Melhor conhecimento do código
- Maior partilha de conhecimento
Não é objetivo deste artigo explicar esta técnica pelo que recomendo que leia mais sobre o tema.
Zona de conforto
«Ele disse para fazer assim...»
Este talvez seja o tópico mais sensível, na medida em que pode afetar zonas de conforto e não é trivial colocar um superior em causa. Quando um programador recebe uma tarefa, não deve simplesmente executá-la. Deve fazer algumas perguntas básicas primeiro: “faz sentido?”, “será que é mesmo isto que o utilizador quer?”, “deve ser exatamente assim?”. Só depois de a tarefa passar neste teste inicial é que se deve avançar. Isto é ainda mais premente quando dizem não só o que fazer, mas como fazer. O programador deve, fazendo uso de argumentos lógicos, debater se essa é a melhor forma de resolver o problema.
Por outro lado, o bom programador sugere melhores formas de atuar e questiona as metodologias e tecnologias em uso.
O programador não é um computador
«Não te preocupes, eu trato disso»
Como lidamos com máquinas tão frequentemente, sucede o fenómeno de acharmos que também somos uma, especialmente em termos de memória. De certeza que já passou pela situação de dizer para si “não me posso esquecer disto”. É então que reserva um espaço de memória para o efeito. As tarefas e o stress da sua memorização vão acumulando e algumas vão sendo esquecidas.
Mesmo que haja um sistema de tracking (ex: JIRA), há tarefas muito pequenas que nem “merecem” lá entrar (microgestão). Por exemplo. pequenos detalhes que alguém sugere, coisas que nos lembramos “do nada” mas que não podemos implementar no momento ou subtarefas de uma tarefa.
Para isto, ter simples listagens (to do lists, checklists, etc.) pode ser muito produtivo. Um caderno, post its, ou um EcoBook sempre à mão é quase sempre suficiente. Contudo, se preferir uma versão eletrónica, pode usar o Google Keep ou o Trello (ou um utilitário semelhante). Ambos suportam listagens, sendo ágeis e colaborativos.
Há também um efeito psicológico benéfico: a vontade de completar uma listagem está sempre patente (provavelmente está ligada ao colecionismo). Sentimos motivação ao ver essa lista (principalmente se estiver sempre presente) encurtar à medida que a vamos completando.
Em suma, o que não fazer:
- Promover a cultura do medo da melhoria.
- Ser muito otimista nas estimativas: é melhor para o programador e gestor que o primeiro seja realista.
- Trabalhar em função da tecnologia: os sistemas de informação devem atender e servir as necessidades de negócio e utilizadores e não o contrário: as pessoas e as empresas não deveriam ter que se adaptar aos sistemas de informação.
- Não ter iniciativa para conhecer o negócio, o cliente e os utilizadores (e, pior ainda, culpar estes últimos).
- Desvalorizar técnicas aparentemente rudimentares (de papel e caneta) como a prototipagem em papel, o desenho de fluxos ou simples “to do lists”.
- Aceitar tarefas, tecnologias e metodologias sem nunca as questionar.
_____
Outros artigos do Luís Soares:
Este artigo tem mais de um ano
Muito bom tópico, arrisco-me a dizer que este foi sem dúvida o melhor artigo dos últimos tempos aqui no pplware. Muito bem.
Quando a pessoa pensa que faz um código em x tempo isso nunca é realista há sempre muitos factores em jogo. Pseudocódigos acho que é sempre um bom começo para assentar ideias, de um certo modo que é “o pontapé de saída” para o que queremos fazer.
mas isso do desenhar a app, ou que seja, leva tempo…ás vezes mais tempo que fazer o código…e os gestores tendem a se defender a eles…é uma treta…
No entanto se “saltares a gatilhar” sem conseguires ter uma visão do que queres…podes ficar meio enrascado(ou enrascado na totalidade) , se o projecto for grande…
obrigado!
sim.. após os fluxogramas pode-se saltar para o pseudocódigo. Ou então usá-lo como alternativa.
O que não defendo é quando o pessoal se lança logo a bater código que nem leões, sem qualquer desenho prévio do conceito via uma dessas técnicas. É uma ilusão pensar que se está a ganhar tempo ao fazê-lo…
Programação é uma arte que deve ser cultivada logo desde muito cedo, talvez por volta do 2ºano de escolaridade. Porque de certa forma obriga a sistematizar o pensamento, a estruturar as bases para a resolução de problemas complexos que sem essa organização sairiam um fiasco.
Por isso é que eu acho que cá em Portugal devia-se incutir nas crianças e nos jovens o gosto pela programação alicerçando sempre como é obvio em aspectos práticos e motivantes adequados à sua idade. Porque de outro modo estaríamos a criar não um gosto mas sim um pesadelo que no final do dia leva a muitas pessoas detestarem a programação. É por isso que nas nossas Universidades se vê parvalhões de alguns professores que não têm sentido de pedagogia nenhuma que ao invés de cativarem os seus alunos para a programação só os afastam. E porquê?
Porque limitam-se a descarregar a matéria ao invés de paralelamente darem enfoque à algoritmia.
Sim para mim a questão da algoritmia é o grande problema da programação, não são as regrinhas lá do C ou do Java.
Quando eu falo em algoritmia falo dos pseudocódigos…
Concordou em tudo menos numa coisa: criança não! No 8° ano ou por aí, tudo bem. Antes, as criança têm de usufruir disso mesmo: serem criança! Abraço.
Olá Joaquim.
Grandes verdades. Acho que nos EUA já estão a ter essa mentalidade, de considerar a programação uma competência que todos deviam ter desde cedo. E há cada vez mais recursos na web que tentam “democratizar” a programação. Tal como a ciência no geral, a programação não pode nem deve ser de uma elite.
Agora não me lembro o nome do país, mas sei que era um nórdico, que vai começar a dar noções programação nos primeiros anos de escolaridade. E muito útil nem só para quem um dia seguir a área, mas também para desenvolver o pensamento logico desde muito cedo.
Os nórdicos são “uns leões nisso”…
Os míudos na escola ja desenham e mexem em microcontroladores…estão envolvidos num acompanhamento brutal desde cedo na ciencia…é impressionante..
Os putos participam em torneios de ciencia..é impressionante…
Cá em Portugal…o ATL é mesmo, piscina, futebol, basket…e farturas 🙂
Depois admiram-se que os Nórdicos sejam extremamente evoluidos…
Eles também teem um tempo da treta, e isso ajuda por um lado ao desenvolvimento intelectual…mas nós abusamos no desporto, e afins 🙂
Eu acho que devia ser mesmo desde de bebés, em vez de música púnhamos-los a ouvirem código máquina, assim quando chegassem aos 10 anos já sabiam programar em binário…
O que foi da raça humana até agora pois pelos vistos nunca tivemos boas metodologias de resolução de problemas.
Se abrissem os olhos…
tem de haver um balanço… há coisas nas escolas que podiam muito bem ser substituídas. desporto não é uma delas pois mantém a mente sã..
os miúdos aprendem apenas a descorar para passar, em vez de se estimular a criatividade e o raciocínio.
Os franceses já fazem isso desde os anos 80. Programação em logo. Sei do que falo apanhei isso em 85 na primeira classe.
Eu tenho alguns maus hábitos :/
Tenho que melhorar.
não há ninguém perfeito,
Como nos gerimos como um todo e a maior parte deve ser seguida… as coisas que pensamos serem boas podem ser consideradas más.. 😉
lá está temos todos maus habitos, mas aquilo que hoje é um mau habito, amanhã também pode ser uma mais valia. lol 🙂
pois pode. 😀
Eu não consigo estimar o tempo que demoro a desenvolver uma certa aplicação porque há sempre algo que mete-me a martelar em algo durante uma noite e acaba por ser algo simples.
E eu culpo sempre o utilizador. x)
Eu tenho o mesmo problema, as vezes uma coisa tao simples faz me perder até dias, coisa que eu não tinha previsto e que me faz sair logo fora dos planos. As vezes é tao simples que ate tenho “vergonha” de dizer ao cliente e invento outro problema.
muito bom artigo. Parabéns
A base de qualquer pessoa ou equipe de trabalho, parte sempre da “humildade intelectual” individual.
O conteúdo deste post não se aplica só a programadores mas de forma longitudinal a todos aqueles que trabalham em equipa.
+1
+10
Eu sempre tentei utilizar estas e outras metodologias de forma a melhorar o projecto, ou seja fazer mais e melhor com muito menos esforço.
O maior problema é tentar convencer os pseudo-gestores que “perder” 1 ou 2 horas a planear e analisar o projecto vai acelerar todo o processo. Para muitos desenhos é para designers e mesmo assim só pode a versão ficar a cores.
Por muito triste que seja o “Developer” que utilize todas estas más praticas vai ser muito mais respeitado pelo chefe pois consegue mostrar qualquer coisinha em menos de nada.
tenho pena de não ter usado esta frase 🙂
“Para muitos desenhos é para designers”
Eu tenho um gravíssimo … é não saber programar. :/
Eu passei com distinção em todas as práticas descritas.
Ou sou muito bom ou muito aldrabão…
Concordo com alguns pontos/explicações e discordo com outros.
Qualquer das formas, existem coisas que também tenho de melhorar…
Mas como o artigo destaca, todos os programadores uma vez ou outra, falham em algum aspecto mencionado no artigo. E quem diz programador, diz outra área informática, porque alguns dos pontos também se aplicam.
A minha principal “batalha” tem sido mesmo com os prazos. É sempre tudo para ontem e depois esperam que o software tenha qualidade. Muitas vezes o developer nem tem voto na matéria, os prazos são definidos pelos gestores, ou pior, pelo cliente.
Nao vi ai o PEBKAC em lado nenhum….
o que defendo é que não existem PEBKACs (mesmo que existam, é uma questão de me reger por esse princípio).
se o utilizador não consegue fazer, das duas uma:
ou não faz parte do público-alvo, ou a equipa não resolveu bem o problema.
Só e só :))))
O artigo está muito bom, parabéns. No entanto acho que alguns tópicos são um pouco utópicos.
A constante refactorização do código é problemática porque o seu valor não é reconhecido pela organização. O projecto está sempre atrasado e é difícil explicar a um gestor a razão de re-inventar a roda.
O plano de projecto deve passar pelo programador, mas geralmente o GP é que decide tudo. É errado, mas o programador raramente tem o poder da decisão. Pode aconselhar, mas como é tudo para ontem pouca ou nenhuma diferença faz.
A questão da delegação da culpa também é tricky. Se foi um colega meu que fez determinado módulo da aplicação e esse módulo tem um bug é com ele que vou falar. Não o faço para me descartar do problema mas porque acho que é cortesia profissional. Foi ele que fez o módulo, foi ele que desenhou a sua lógica, considero que seria um pouco desrespeituoso corrigir o problema sem lhe dirigir uma palavra. Se ele já não estiver alocado ao projecto ou se a tarefa me for alocada então aí sim vou ver o que se passa.
Revejo-me nalgum dos defeitos: falta de pair programming, deslumbramento por angular e alienação do negócio 🙂
Olá Alexandre,
Obrigado 🙂
Quanto ao ponto da refatorização, não se deve fazer por fazer. Eu referia-me mais aos momentos em que algo tem de ser feito. Por exemplo, quando há um funcionalidade nova. Claro que não há regra sem exceção. O que quero dizer é que se deve refatorizar se há valor acrescentado, mas sempre fundamentado.
“A questão da delegação da culpa também é tricky.”
Talvez eu me tenha explicado mal. Não disse que a pessoa tenha de resolver. É apenas uma questão de atitude: em vez de ter uma atitude “não é comigo”, mais vale ter uma atitude “será resolvido” e depois sim, fala-se com a pessoa. O importante é desencadear a resolução do problema.
Um programador não tem de ser designer, nem deve, tal como um designer não tem que ser programador.
Cada um tem de saber o seu lado, um programador fazer mockups não me parece boa prática – fazer um esboço para ajudar o designer tudo bem, mas ser 2 e 1 acho que só é perda de tempo porque está a dispersar-se em duas frentes distintas.
se for um programador de um driver de software ou exclusivamente de backend, concordo. Agora, se estamos a falar de frontend, só pode ser positivo que o programador saiba um pouco de UX. afinal de contas, é para os utilizadores que ele trabalha. Não disse que tenha de ser especialista: daí só ter falado em mockups rápidos em papel e não em ferramentas profissionais de prototipagem.
Fazer apenas uma coisa e recusar-se a saber de outras que lhe estão diretamente ligadas dá origem ao pensamento “linha de montagem” que vigora em muitas organizações.
Por outro lado, UX não é trabalho do designer gráfico. É trabalho do designer de interação, que pode ou não ser ele. São coisas diferentes.
Sim, concordo. Daí ter dito que fazer um programador saber mockups rápidos ajuda até que a linguagem entre o designer e o programador seja mais facilmente entendida por ambos.
Sim, um programador de frontend trabalha para o utilizador directamente, para geralmente quem tem a obrigação de saber como é que os UX se devem construir em termos de passar a mensagem e de serem funcionais (de ser claro, dos botões existirem ou estarem no local certo, etc.,), faz parte do estudo do designer.
Mas pronto, também há os erros básicos dos designers quando constroem um mockup, p.ex., meter o design à frente da funcionalidade é um erro comum (e é o que mais se vê por aí).
De qualquer maneira, este assunto de relações entre designer, programador, ambiente de interacção, funcionalidades, UX e UI correctos e funcionais ou não, já é coisa para um artigo diferente 🙂
E aí entro eu, que sou UX Designer de profissão 🙂
A User Experience não é competência apenas do designer (friso o apenas), é de todos num projecto. A preocupação com a experiência tem que estar em todos os vectores de uma organização. É isso que dá a qualidade final que toda a gente inveja, mas nem toda a gente consegue.
Porque é por isso que é tão difícil implementar UX Design nas organizações. Porque nem toda a gente – dos gestores aos programadores e designers inclusos – se quer preocupar com o resultado final. Ou descuram a importância, ou tentam mostrar que estão preocupados com isso, mas as práticas não mudam.
O valor do design numa organização que desenvolve software é algo que é cada vez mais importante. Às vezes as melhores soluções podem vir das mentes menos ligadas a um projecto, é importante meter todos no mesmo barco.
Quanto à parte de desenvolvimento, eu tanto desenvolvo o UI de uma app, como ajudo na sua implementação. Essa ideia de que ou é preto ou é branco, não é de todo correcta. Não se pode ser designer e não conhecer um produto ou ajudar na sua implementação.
Claro que não vou fazer o trabalho de um programador quando este está em frente ao Xcode ou ao Android Studio, mas é importante acompanhar a nível visual e de performance como o projecto está a ser desenvolvido.
Olá João,
Concordo a 100% com a tua resposta. Sendo programador e “UX designer em part-time” luto diariamente com essas questões, especialmente:
– o cargo de alguém não ser preto no branco
– o UX não ser uma funcinalidade ou algo que se possa adiconar depois; tem de estar omnipresente
– o valor do perfecionismo.
Muito bom o seu post, concordo com todos os pontos.
“Isso? Isso é num instante…”
5 horas depois: “Pá..isto tá complicado”
Discordo no Pair programming.
Existem tantos estudos a dizer que é eficiente como tantos outros a dizer que é uma perca de tempo.
Sim ganhas mais segurança e certezas no código, mas tirando em questões de aprendizagem não faz muito sentido.
Pagar a 2 pessoas para fazer o trabalho de 1? Não diria que é muito lucrativo.
Num mundo perfeito talvez fosse engraçado.
Mas com boas práticas, testes, testes, mais testes e algum code review consegues atingir os mesmos resultados.
Tenho poucos anos de programação mas pair programming é algo que nunca gostei..
Estamos os dois sentados e só um faz, o outro ou se encosta ou fala demasiado.. Acho que retrai o desenvolvimento da pessoa que não está a programar
Há que usá-lo com moderação; saber quando e como usá-lo.
Não defendo que se deva usar *sempre*, mas há situações em que rende. Exemplos:
– Novo produto
– Nova funcionalidade
– Ramp up de alguém
– Ramp down de alguém
Se calhar é mais por aí
Muito bom. É destes artigos que fazem o verdadeiro Pplware. É pena serem cada vez menos…
Há mais para chegar 🙂
Excelente conteúdo, é sempre benéfico reconhecer ou relembrar alguns dos factores que complicam o que por si só já é complicado.
Gostaria de contribuir com dois erros que muitos programadores cometem (eu inclusive) e que não estão directamente ligados ao conteúdo do artigo mas que, na minha opinião, têm bastante importância para o assunto.
Que são: o trabalhar pela noite dentro e a falta de exercício.
Trabalhar pela noite dentro pode parecer mais produtivo, porque há menos distracções e não há hora definida para acabar o dia de trabalho, mas o cérebro não funciona da mesma maneira, o cansaço aumenta e gera fadiga mental.
Fazer exercício é óbvio e do conhecimento geral “corpo são mente sã”. Mas em muitos casos este factor é sempre deixado para amanhã.
Obrigado Miguel.
Concordo 100%! Poderia ter posto isso na secção “O programador não é um computador” 🙂 São duas coisas essenciais, que as pessoas desvalorizam.
Muito Bom, ri-me bastante, então aquela expressão das marteladas, é “de génio”, pura realidade. =)
Excelente artigo, continuem assim. Ultimamente o PPLWare parece mais um site de notícias sobre smartphones que outra coisa, mas é bom saber que ainda fazem artigos assim =).
O artigo está muito bom! Gostei muito de ler.
O pior erro do programador é aceitar, em muitos casos, trabalhar por pouco dinheiro 🙂
“Pode ter diferentes responsabilidades: sys. admin., tester, designer de interfaces, etc.”
Fez-me lembrar uma empresa que perdeu o foco naquilo que sabia fazer bem, para se meter no mundo do software, lembrou-se que podia “fazer umas coisas” e até tentar vendê-las. Criou um departamento com duas pessoas, uma para gerir todo o projecto (waterfall) e outra para programar. O Jira foi substituído pelo Google Docs (a parte equivalente do Excel), o Eclipse pelo Notepad++, o SVN pelo Google Drive e o TDT por.. nada, não havia testes.
Concluindo, Em empresas a sério, trabalha-se a sério (até existem technical writers, para escreverem a documentação do software, e esta hein?)
Conclusão 2, Amigos se estão a ver no filme descrito anteriormente, provavelmente trabalham num vão de escada, talvez esteja na hora de alcançar novos horizontes e deixar o mercado dar conta dos tais vãos de escada.
Beijinhos e Abraços!
Olá Ricardo,
Obrigado pelo comentário. Respeito a sua opinião. Eis o que me leva a crer:
0. Não deve ter lido a palavra “pode”
1. É anti-agile
2. Não deve considerar que há diferentes metodologias para diferentes ambientes. Não há uma super metodologia infalível.
3. Talvez até ache que jira = gestão e gestão só com jira
4. Considera que uma pessoa só pode fazer uma coisa, como numa linha de montagem. Ver filme Modern Times
5. Só vê uma forma de fazer as coisas – by the book. Um consultor tem de se saber adaptar.
6. Encaixa as pessoas em caixinhas é só podem fazer/saber o que diz no título dessa caixinha.
https://yourlogicalfallacyis.com/strawman
Ricardo, alguns de nós querem ser engenheiros e não apenas gurus de uma linguagem ou framework. E mais digo que as empresas a sério são os engenheiros que as fazem.
Só uma sugestão
Digitalizem e guardem esses desenhos juntamente o código.
Mais: espero que os teóricos da gestão de projectos (pessoas em relação às quais eu tenho alguma desconfiança 😉 ) comecem a pensar como gerir essa parte.
Isto é, avançar na direcção de metodologias em que os programas de gestão de versões de código também incluam documentos diversos, como os contratos com os clientes, comunicações entre os diversos intervenientes, os tais desenhos, etc.
Tenho feito isso colocando sempre a data (e a hora!) em todos os papeis e mantendo isso arquivado em separadores, primeiro em gavetas, depois dentro de caixas plásticas herméticas que arrumo em prateleiras. Até já mantive mimi-cassetes audio analógicas nesses arquivos com a gravação de reuniões. Fiz isso porque tenho muito má memória e para me proteger, mas penso que reuniões que são gravadas em audio são muito mais produtivas (combine-se um sinal quando alguém quiser parar a gravação, mas que seja óbvio que o off-record não tem valor).
Mas a gestão disso tudo em analógico é pouco prática, trabalhosa e ocupa espaço.
Claro que se teria de definir um certo número de formatos e codificações livres de problemas com patentes (ascii-7-bits, unicode-utf-8-boom, png, jpg, mp3, odf ?) mas o pontos é que esse documentos deveriam ser geridos, juntamente com as versões do software, através de software adequado. e incluídos nos backups.
Já é comum manter arquivos dos emails, mas não deforma integrada nos projectos. Também aí se poderia avançar, se bem que seja menos prioritário.
Excelente artigo! Os vários tópicos descritos são o dia a dia dos programadores :). O importante é ter a humildade de reconhecer os erros e perceber o contexto onde estamos inseridos de forma a contribuirmos de forma positiva para o projecto. Sempre em busca da solução e não de quem originou o problema, visto que muitas vezes vêm de vários factores.
Muito interessante, gostei bastante .
A @Codacy dá uma ajuda.
Excelente artigo.
Muito interessante mesmo e aplicável em qualquer altura.
Excelente artigo, embora há certas afirmações que não concorde. Por exemplo, o programador deve conhecer todo o código – de momento trabalho numa solução que tem 500 e tal projectos e é impossível haver alguém que o conheça de ponta a ponta. Um grande problema, que pelo menos vi nas empresas portuguesas por onde passei, é que a maioria dos gestores de projecto só chegou a esse lugar por não saber/querer programar, e muitos fazem o papel de comercial. Não estão a par das tecnologias e metodologias. Ouvem falar de uma metodologia que está na moda e querem aplicá-la sem mais nem menos (quando na minha opinião as metodologias devem-se adaptar ao projecto e não ao contrário). A pressão sobre os programadores para cumprir prazos surreais também é sempre enorme. Qualquer tipo de documentação é sempre uma perda de tempo. Não existem equipas de teste. O cliente não faz testes de aceitação. Entre muitos outros problemas.