• rss

Assine nosso feed

Bons programadores são preguiçosos e burros

(6)

Category : WTF, dicas

Escrito em 2005 por Philipp Lenssen, um texto mostrava a importância de bons programadores terem condutas que muitos poderiam considerar ‘defeitos’. Dias atrás, tive o prazer de reencontrar esse mesmo texto, e percebi que muita coisa continua atual. O que se segue é uma tradução / adaptação do texto original, com alguns comentários pessoais sobre o assunto. Reflitam. WTF’s não vem apenas dos usuários, mas principalmente dos programadores…

Ao longo dos anos, percebi que, por mais paradoxal que isso possa parecer, bons programadores devem ser preguiçosos e burros.

Preguiçosos, porque apenas programadores preguiçosos irão pensar em escrever o tipo de código que no fim fará o trabalho por eles. Preguiçosos, porque apenas um programador preguiçoso evitará a todo custo escrever trechos repetitivos e monótonos de código – o que evita a redundância, principal inimigo da manutenção no código-fonte. Principalmente, as ferramentas e processos criados por esse comportamento de pura preguiça irão aumentar a velocidade de desenvolvimento.

Isso tudo faz com que o programador preguiçoso um bom programador. Claro, isso é apenas uma parte da verdade: para um programador preguiçoso ser um bom programador, ele (ou ela) também deve ser extremamente ‘não-preguiçoso’ quando se trata de aprender a como permanecer preguiçoso – ou seja, qual software faz sey trabalho mais simples, quais métodos evitam redundância, e como ele pode fazer com que a manutenção do seu código seja a mais simples possível.

Em segundo, (e vou elaborar um pouco mais a partir daqui, porque o conceito é bem menos claro que o primeiro) um bom programador deve ser burro. Por que? Oras, se ele for inteligente, e tiver a consciência de que ele é inteligente, o programador irá:

a) parar de aprender
b) parar de ser crítico com relação ao seu próprio trabalho

O primeiro ponto fará com que seja complicado para ele encontrar novas técnicas para que trabalhar mais rápido. Basicamente, o programador que para de aprender não busca novas soluções, não busca novas alternativas e permanece preso às ferramentas e métodos que ele já conhece. O segundo ponto fará com que ele perca muito tempo debugando o próprio código. Na interminável luta entre um programador e o compilador, é melhor que o programador desista logo e admita que a culpa é sempre dele, e não do compilador, e vá tentar entender o quê ele está fazendo de errado. (nota: OK, há casos em que a culpa É do compilador. Mas são tão raros que dificilmente você vai encontrar várias situações assim no seu dia-a-dia).

Mas há um ponto ainda mais importante sobre porque um programador deve ser burro. Para encontrar sempre a melhor solução para o problema, ele deve ser capaz de manter uma mentalidade fresca e aprender a “pensar fora da caixa”. Tem em mente que o problema nem sempre é o que parece, e a melhor solução nem sempre é o que você imagina, e saber pensar em soluções alternativas e fora do comum.

O contrário disso não seria muito construtivo: conhecer todos os parâmetros e funções, e aceitá-los. Quem garante que os limites que você conhece são reais? Quanto menos você souber, mais radicais serão suas soluções: assim, melhores serão as ferramentes que você criará, e melhores serão os produtos que você desenvolverá com essas ferramentas.

Um bom programador sempre se perguntará “Por que?”, porque ele é burro (ou suspeita de um problema maior).

Um bom programador, quando confrontado com um problema vindo dos usuários, vai adotar a mentalidade de ser burro: ele começará a fazer as perguntas mais simples e infantis possíveis. Isso é porque ele não aceita os parâmetros sugeridos pra ele do que alguém pensa que pode estar causando o problema. Por exemplo, veja uma conversa típica de desenvolvedores web frente a um problema:

“Desde ontem, nosso cliente não consegue ver o logo no site.”
“Ele reiniciou o navegador?”
“Sim.”
“Ele reiniciou o computador?”
“Sim.”
“Limpou o cache?”
“Sim.”
“Ele roda o Internet Explorer 6?”
“Sim.”
“Tem certeza de que ele não consegue ver o logo?”
“Sim.”
“Ele olhou para o site na tela?”
“Como assim?”
“Talvez ele tenha visto o site impresso em papel.”
“Não, ele estava olhando para a tela.”
“Ele não consegue ver outras imagens também, ou só o logo?”
“Como? Bom, vou perguntar pra ele.”

Para fins de argumentação, vamos dizer que o cliente na verdade tenha desligado a exibição de imagens no navegador. Ou o seu filho desligou. Ou um funcionário desligou. Em qualquer caso, a resposta não poderia ser encontrada da “maneira inteligente“. Nenhuma das questões levantadas pelo programador exigiam algum talento em programação. Nenhuma. Mas simplesmente pelo motivo ser tão estúpido, somente a estupidez pode lidar com isso.

Muitas vezes, a suposição de que alguma ação do programador gerou um problema não passa de uma suposição. Sempre que possível, ouça apenas os fatos antes de começar a debugar, e ignore o que as pessoas pensam que seja a razão do problema.

E isso se aplica a VOCÊ. Recentemente, tive um problema aparentemente simples: migrar um sistema de um domínio X para o subdomínio de um domínio Y. Coisa aparentemente simples, se o domínio Y não redirecionasse automaticamente para o domínio Z no Ning, e o subdomínio não estivesse fazendo a mesma coisa. Depois de várias horas batendo cabeça com o DNS e o CPanel, decidi deixar pra lá e fazer algumas atualizações no sistema em questão. Nos primeiros minutos, descubro que o redirecionamento era feito pelo sistema, em um trecho de código que eu havia colocado por questões de segurança. Removido o trecho, tudo funcionou como deveria desde o princípio. Por descuido, cansaço e vários outros motivos, havia perdido tempo e cabelo com um problema que não existia, na verdade….

Pode parecer complicado, ou até mesmo burocrático, mas esse é um processo investigativo simples: quanto mais informações reais você possui, mais fácil é o processo de chegar ao que realmente está causando o problema. Aceitar que o usuário diga apenas “Há um problema no site, e acho que pode ter sido causado pela sua última atualização” só fará com que você perca horas, talvez dias, até perceber que na verdade o problema era mais simples do que parecia.

(Nota: sim, meus caros usuários, nós não tratamos vocês como idiotas ou ignoramos completamente o que você fala do problema por acharmos que somos melhores do que vocês. Nós fazemos perguntas E chegamos à conclusões baseado no que você nos diz que está acontecendo, não no que você acha que pode ser o problema. Na verdade, muitas vezes o que você acha só nos atrapalha. Bons programadores vão ignorar suas sugestões, pelo menos em um primeiro momento…)

Pensem nisso. Sejam burros e preguiçosos. E sejam bons programadores.

Conheça um novo serviço de virtualizações de aplicativos em rede!

(0)

Category : Sistemas, publieditorial

Sua empresa trabalha com virtualizações de aplicativos em rede? Conhece todas as soluções disponíveis no mercado? O software CockpIT da JETRO Platforms é sugerido para empresas que pretendem virtualizar ou centralizar suas aplicações com baixo custo e alta performance. Na verdade o CockpIT excede as funções do Terminal Server onde, utilizando o protocolo RDP  (remote desktop protocol) , aumenta performance, desempenho e gerenciabilidade do Terminal Server. Além disso, a JETRO disponibiliza uma suite de upgrade competitivo para clientes que já utilizem outras soluções que leiam o protocolo ICA. Com isso, você não perde os investimentos já feitos em outras soluções.

Todos sabemos que hoje as empresas estão buscando :

  1. Redução do Custo total de propriedade de Hardware;
  2. Redução de custos de Licenciamento de Software;
  3. Maior gerenciabilidade e segurança na definição dos perfis de usuários
  4. Alternativas para aumentar o ciclo de vida dos PCs ou utilização de Thin Clients
  5. Redução de custos e imediata disponibilização de novas filiais remotas

Entre os principais clientes que utilizam a solução JETRO-COCKPIT, podemos citar a MICROSIGA/TOTVS, que  passou a utilizar o software Cockpit para prover serviços através do conceito ASPApplication Service Provider (modelo flutuante – onde mensalmente é reportado o número de usuários que utilizam a solução).

Você utiliza soluções de virtualização em sua rede ou empresa? Quer conhecer uma solução com melhor custo/benefício? Responda ao nosso formulário para que a JETRO entre  em contato e possa lhe oferecer a melhor solução para sua empresa!

Responda ao formulário da JETRO para conhecer novas opções de virtualização para sua empresa

artigo-patrocinado

É um pouco parecido, sim…

(4)

Category : Sistemas, WTF

Calliejane começou a trabalhar em uma multinacional, como analista de sistemas, há algum tempo atrás. Toda feliz, achando que tinha tirado a sorte grande, Calliejane só pensava nas vantagens: empresa grande, novos desafios, etc. Não demorou muito para os WTFs aparecerem e a emoção virar um grande sentimento de roubada: Toda a empresa era controlada por Excel e Access. Tudo. Previsão de estoque, custeio, cotações e por aí vai. Lembrnado, Calliejane trabalhava em uma m-u-l-t-i-n-a-c-i-o-n-a-l!

O que mais impressionava era que a multinacional fabricava produtos de ponta, bem caros e com multas de milhares de dólares em caso de atrasos. E, por falta de um TI eficiente, toda a estrutura do local era mantido pelo Excel e Access, alçados a verdadeiros “ERPs” pelos usuários. Tudo o que passava pela cabeça de Calliejane vendo aquele cenário infernal era “porquê que as coisas aqui na TI são tão amadoras?!?!?”.

O tempo foi passando e aos poucos a grande dúvida que assombrava o dia-a-dia dela foi sendo respondida, à medida que ela ouvia pérolas e mais pérolas da gerente, responsável por toda a TI da filial da empresa. Uma vez, enquanto levantava requisitos para a primeira tentativa em desenvolver um sistema “não-access-não-excel” na empresa, Calliejane estava tentando obter informações com o pessoal da TI da sede nacional da empresa, que ficava no Rio de Janeiro, sobre a possibilidade de desenvolver uma interface com o sistema de custos. O sistema era um módulo do ERP da Oracle, o PAC (Periodic Average Costing) – custeio de produtos. E, em uma tarde inspirada, a gerente de TI ergue uma revista Veja e pergunta: “o PAC que você está tentando acessar no Oracle é este mesmo PAC daqui da revista que o Lula tanto fala?

Pode parar por aí!

(5)

Category : Sistemas, WTF

Anos atrás, quando o sistema que usávamos na empresa ainda era feito em Clipper (desenvolvimento interno), havia uma pequena via crucis quando era necessário reindexar as tabelas: O usuário X reclamava que o sistema estava com problemas, eu verificava que seria necessário fazer a reindaxação, enviava para toda a rede um aviso de que seria necessário sair do sistema, ficava mais cinco minutos mandando a mesma mensagem, ligava para alguns usuários teimosos, e quando finalmente conseguia que todos saíssem, algum usuário sem-noção tentava entrar no sistema NO MEIO da reindexação, detonando TODO o banco de dados.

Quando finalmente foi liberado o orçamento para que um desenvolvedor mexesse no sistema, a primeira alteração (que eu ‘convenientemente’ considerei como crítica) foi criar uma maneira de impedir que usuários usassem o sistema ou até mesmo tentassem acessá-lo, quando fosse necessário reiniciar. O desenvolvedor surgiu com uma idéia simples: sempre que fosse necessário reindexar o banco de dados, era só criar um arquivo ‘para.txt‘ (que ‘pararia’ o sistema, sacaram? hã? hã?) que o sistema automagicamente expulsaria os usuários quando eles tentassem acessar alguma nova tela, e os impediria de entrar.

Alteração aplicada, fiz todos os testes, e funcionou perfeitamente. Para evitar problemas, apenas algumas poucas pessoas ficaram sabendo dessa nova função, assim não aconteceria de alguém criar um arquivo de parada só para causar problemas à empresa. Tudo transcorreu bem, até o fechamento do mês: do nada, o sistema começou a expulsar todo mundo durante a geração dos relatórios finais. E, não importava o quanto eu apagasse o para.txt, ele sempre voltava, poucos minutos depois.

Acusações pipocavam de todos os lados. Seria possível que alguém tivesse descoberto sobre esse arquivo? E estaria esse alguém aproveitando para causar danos à empresa? Mas… quem teria contado?

Com os ânimos exaltados, resolvi partir para a única solução: desliguei a rede, e deixei apenas uma máquina ligada ao servidor, para realizar o fechamento do mês. E lá estava o para.txt, surgindo do nada, em toda sua graça. Algumas horas depois de muita investigação, consegui descobrir o problema:

Durante o fechamento, eram impressos vários relatórios, entre eles alguns que eram divididos por cada estado/região do Brasil. O programador original do sistema, por motivos que nunca entenderei, achou que seria interessante criar um arquivo de texto com o conteúdo a ser impresso, enviar para a impressora, e logo depois apagar o arquivo. Como se a falta de noção não bastasse, ele não usou nomes aleatórios ou coisa do tipo para gerar os arquivos: no caso dos estados, era o nome do estado mesmo, sem acentos ou espaços.

Inclusive um arquivo chamado…. para.txt

Sim, a ordem alfabética não vai com a sua cara…

(12)

Category : Suporte, Usuários, WTF

Isso aconteceu há muitos anos, quando a intranet ainda estava sendo implantado na antiga empresa. Em um dado momento, apareceram com a sugestão: “e se colocássemos a lista de ramais na Intranet? Isso economizaria tempo e papel, além de ser uma forma de divulgar a ferramenta”.

Oras, parecia simples: um campo extra, com o número do Ramal, e uma página que listasse todos os usuários, dividindo por departamentos, com possibilidade de filtros e tudo o mais. Não tinha como dar errado.

Dias depois, sistema alterado e testado, coloquei a novidade no ar. E, poucos minutos depois, sou chamado na sala do chefe. “Deve ser para discutir um aumento…”, imaginei. Ledo engano, fui chamado para discutir… minha mania de perseguição com a gerente do comercial (que tinha uma posição muito, mas muito privilegiada dentro da empresa)! Entre acusações de agir como moleque, perseguir as pessoas, e tudo o mais, acabei ouvindo que, na minha ânsia de maltratar as pessoas, acabei deixando a gerente do comercial em último qualquer listagem de ramais, não importando que filtros fossem usados. Ou seja, na concepção da mulher, eu devia odiá-la tanto que escrevi todas as páginas manualmente para que ela SEMPRE aparecesse em último.

Nessa hora, tive um estalo: levantei da cadeira, pedi para que ele acessasse a intranet, e pedi para verificar a ordem em que estava a lista de ramais: Por ordem alfabética. E o nome da gerente começava com ‘R’, e seria sempre o último, pela ordem.

Na hora, levei as mãos aos olhos, pedi ajuda a Deus, e expliquei o ocorrido ao meu chefe: a única forma de evitar isso, seria alterar a ordem da listagem, só que o ramal dela TAMBÉM seria um dos últimos, pela ordem numérica. Resultado? Precisei criar um IF na lógica do sistema, que SEMPRE traria a citada gerente em primeiro na listagem. Não importando que filtro fosse utilizado…

Mais Screens WTF

(3)

Category : Sistemas, WTF, screenshots

Lealcy pensa em fazer um downclock do computador, para conseguir instalar uma simples impressora:

hpinstalldj8
Clique na imagem para ampliar

Juliano ficou feliz de ter poder de escolha. Pena que, como podemos ver, era um poder bem limitado:

netbeansopcoesww7
Clique na imagem para ampliar

E se eu tentar colocar um dropdown no botão?

(0)

Category : Sistemas, WTF, screenshots

Rafael mandou uma imagem de erro muito, mas muito estranha do Delphi:

derro

É de menino que se torce o WTF…

(3)

Category : Aulas, WTF

Ah, a faculdade… Alunos que entraram sem saber nada de informática (mas parece que mexer com computador dá dinheiro, né?), professores sem a formação adequada (hmm… digitei como no livro, porque aparece esse erro?) e muitos, mas muitos WTF’s! Foi assim comigo, e pelo jeito o Karlisson está passando pelo mesmo problema…

Numa prova de Java, a professora pediu que os alunos criassem uma classe DVD, com os atributos “estado” e “operacao“. O atributo “operacao” informaria o que o dvd estaria fazendo (play, stop, pause, etc) e o atributo “estado” informaria se o dvd estaria ligado ou desligado.

Ela também pediu que fossem criadas duas constantes LIGADO e DESLIGADO, com os valores true e false, respectivamente. Se o dvd tivesse que ser ligado, deveria haver uma atribuição

this.estado = LIGADO;

e vice-versa. Confirmando o que penso sobre cursos de computação, principalmente aqueles que ensinam apenas a linguagem Java, a professora poderia dar um exemplo menos WTF, simplesmente criando o atributo “ligado” que recebe true ou false, ao invés de criar 2 constantes extras, que apenas guardam valores já definidos no sistema.

Na próxima, vou pedir para instalarem o microsoft.com

(2)

Category : Sistemas, Suporte, WTF

Sub_Zer0 conta uma história que faz pensar na importância de escolher um bom provedor:

Trabalho no desenvolvimento PHP para uma empresa de médio porte, que hospeda os sites de clientes em um servidor terceirizado. Um belo dia, percebi que, para fechar um job (Nota do admin: “Deus, como eu odeio esse termo), eu precisava do Smarty. Só que o servidor não tinha nada configurado.

Como não tinha como não usar o Smarty, abri um chamado no servidor, dizendo que precisava da biblioteca instalada, e dizendo que o mesmo podia ser baixado no endereço http://www.smarty.net/ – e continuei o desenvolvimento na minha própria máquina

Horas depois,  recebo um email dando o chamado como concluído, e a seguinte mensagem do suporte:

Informo que o domínio já foi adicionado em seu painel. Qualquer configuração adicional pode ser efetuada diretamente por ele. Grato.

Sem entender nada, vou até a administração do servidor e descubro que, ao invés de instalar a biblioteca Smarty no servidor, ele configurou o domínio smarty.net no servidor! Do jeito que estava, era só alguém alterar o DNS do domínio, que responderia normalmente!

Depois de alguns minutos atônito, resolvi ligar para o suporte e explicar da forma mais clara possível o que eu realmente queria…

Ah, mas isso é alemão arcaico…..

(2)

Category : Sistemas, WTF, oops!

Lucas Teixeira mandou essa:

Certa vez um ex-colega de trabalho conseguiu um contato com uma empresa da Alemanha para trabalhos de freelancer. Após um tempo trabalhando sozinho ele abriu um escritório que se dedicaria exclusivamente a prestaçãoo de serviços para esta empresa alemã em particular. Para ajudá-lo no time ele contratou mais três programadores (sendo um deles eu) e uma moça que era gerente de projetos.

Em pouco tempo foi possí­vel notar que a tal moça não tinha muitas
habilidades gerenciando projetos de software (na verdade esta habilidade era quase nula) e cometeu diversas gafes durante sua passagem pela empresa (e muitos WTF também).

Bom, para organizar melhor o trabalho utilizávamos a ferramenta XPlanner, onde a suposta gerente de projetos postava bugs e features lá e nós deverí­amos fazer nossa parte como programadores.

Um certo dia um colega de trabalho me chama na mesa dele e fala:
“Cara, foi postado um bug no XPlanner falando para traduzir a tela de Welcome de alemão para inglês.”
Respondi:
“Ok, então pega a tradução com o pessoal da alemanha.”
Não, não é isso” – diz meu colega com um certo sarcasmo no
rosto. Então ele me mostra no monitor dele o que estava escrito na tela de
Welcome:
Lorem ipsum dolor sit amet, consectetuer…