Os erros mais comuns do programador

60 Comentários

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.

erros_programador

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.

1

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.

business

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.

2

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.

01

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.

5

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.

6

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:

Comentários

60

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *

  1. Avatar de joaquim sousa
    joaquim sousa

    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.

    1. Avatar de lmx
      lmx

      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…

      1. Avatar de Luís Soares

        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…

  2. Avatar de joaquim sousa
    joaquim sousa

    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.

    1. Avatar de joaquim sousa
      joaquim sousa

      Quando eu falo em algoritmia falo dos pseudocódigos…

      1. Avatar de ze.ccjs
        ze.ccjs

        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.

    2. Avatar de Luís Soares

      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.

      1. Avatar de Carlos
        Carlos

        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.

        1. Avatar de lmx
          lmx

          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 🙂

          1. Avatar de Mr.Antunes
            Mr.Antunes

            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…

          2. Avatar de Luís Soares

            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.

        2. Avatar de Sigsegv
          Sigsegv

          Os franceses já fazem isso desde os anos 80. Programação em logo. Sei do que falo apanhei isso em 85 na primeira classe.

  3. Avatar de int3
    int3

    Eu tenho alguns maus hábitos :/
    Tenho que melhorar.

    1. Avatar de lmx
      lmx

      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 🙂

      1. Avatar de int3
        int3

        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)

        1. Avatar de Carlos
          Carlos

          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.

  4. Avatar de Steve
    Steve

    muito bom artigo. Parabéns

  5. Avatar de tomesoares
    tomesoares

    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

  6. Avatar de Mark
    Mark

    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.

    1. Avatar de Luís Soares

      tenho pena de não ter usado esta frase 🙂
      “Para muitos desenhos é para designers”

  7. Avatar de Rui C
    Rui C

    Eu tenho um gravíssimo … é não saber programar. :/

  8. Avatar de KWu
    KWu

    Eu passei com distinção em todas as práticas descritas.

    Ou sou muito bom ou muito aldrabão…

  9. Avatar de JJ

    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.

  10. Avatar de Courela
    Courela

    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.

  11. Avatar de Jorge
    Jorge

    Nao vi ai o PEBKAC em lado nenhum….

    1. Avatar de Luís Soares

      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.

  12. Avatar de Jorge
    Jorge

    Só e só :))))

  13. Avatar de Alexandre
    Alexandre

    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 🙂

    1. Avatar de Luís Soares

      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.

  14. Avatar de MM
    MM

    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.

    1. Avatar de Luís Soares

      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.

      1. Avatar de MM
        MM

        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í).

      2. Avatar de MM
        MM

        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 🙂

      3. Avatar de João Dias
        João Dias

        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.

        1. Avatar de Luís Soares

          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.

  15. Avatar de Roberto Brandini
    Roberto Brandini

    Muito bom o seu post, concordo com todos os pontos.

  16. Avatar de Eskiso

    “Isso? Isso é num instante…”
    5 horas depois: “Pá..isto tá complicado”

  17. Avatar de Pedro
    Pedro

    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.

    1. Avatar de Tiago
      Tiago

      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

      1. Avatar de Luís Soares

        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

        1. Avatar de Tiago
          Tiago

          Se calhar é mais por aí

  18. Avatar de Bond
    Bond

    Muito bom. É destes artigos que fazem o verdadeiro Pplware. É pena serem cada vez menos…

    1. Avatar de Marisa Pinto
  19. Avatar de Miguel Marnoto

    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ã.

    1. Avatar de Luís Soares

      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.

  20. Avatar de F. Rios
    F. Rios

    Muito Bom, ri-me bastante, então aquela expressão das marteladas, é “de génio”, pura realidade. =)

  21. Avatar de Kitamura
    Kitamura

    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 =).

  22. Avatar de Ana Rito

    O artigo está muito bom! Gostei muito de ler.

  23. Avatar de Gonçalo
    Gonçalo

    O pior erro do programador é aceitar, em muitos casos, trabalhar por pouco dinheiro 🙂

  24. Avatar de Ricardo Moura
    Ricardo Moura

    “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!

    1. Avatar de Luís Soares

      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.

    2. Avatar de bin
      bin

      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.

  25. Avatar de José Simões
    José Simões

    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.

  26. Avatar de Miguel Pinto
    Miguel Pinto

    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.

  27. Avatar de Joao Maria Sesifredo Pimentel
    Joao Maria Sesifredo Pimentel

    Muito interessante, gostei bastante .

  28. Avatar de Redin
    Redin

    A @Codacy dá uma ajuda.

  29. Avatar de Hugo
    Hugo

    Excelente artigo.

    Muito interessante mesmo e aplicável em qualquer altura.

  30. Avatar de José
    José

    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.