Pessoal

Em números…

Eu acho engraçado, minha amiga Andréia acabou de me enviar um link agora que fiquei boqueaberto.

É assustador saber que tem gente que perde tempo metendo o aço ao invés de progredir como pessoa e tentar resolver seus próprios problemas.

O título do assunto era “Código feio ou Bonito?”. Lógico que tem sua parcela de louvor no assunto, e que muita gente adora, adora e como adora esse assunto.

Fatos em números é que em cada 10 desenvolvedores existentes no Brasil 9 ou até arrisco 10, lê-em os posts deste simples blog que tem como o título do site “Ajudar aos outros dá ao sucesso o verdadeiro significado”.

Porém falar de coisas técnicas até é aturável, porém o que eu tento passar para meus leitores não é a melhor forma programável possível ou o “The Best of the Best” dos códigos escrios para realizar tal aplicações.

Simples e fácil, faço exemplos, escrevo para maioria, como um bom governante deve ser, devo atender as massas e não as minorias, para qualquer e bom leigo tenha, a capacidade de definir o que ele deve ou não usar em seu ciclo de desenvolvimento.

Novamente, tem agressões nesses posts, e agressões pessoais, pelo menos ao meu entender.

Então amigos(as), meu conselho é leiam os posts ou códigos que lhe agradem, sejam eles bem feitos ou não. Não consigo de maneira nenhuma agradá-lo ou agradá-la, tento o máximo mais infelizmente é impossível.

Boas práticas são aquilas que são adaptáveis no dia-a-dia dependendo-as de suas próprias nescessidades. Não considere minha palavra como a última cartada, eu sou humano como você é, eu erro, eu choro, eu como, faço tudo que uma pessoal normal faz. Se você viu meu código um ótimo ponto de partida, tente diferenciar, tente alterar e adaptar da melhor maneira possível que a minha.

Obrigado ao pessoal da DClick por trocar assuntos importantes como esse, e olha que eles são ótimos no que faz, porém tem alguns como sempre que acham que sou um “Papa”, e que tudo que eu digo é Santo e divino. Novamente, meu parágrafo acima afirma, sou igual à você.

Muitíssimo obrigado.

18 thoughts on “Em números…

  1. Olá Igor,

    Como autor do post eu gostaria que você indicasse os pontos que você considera agressivos. Farei questão de considerar o caso e tomar as atitudes cabíveis.

    Agora, permita-me tentar esclarecer algumas coisas que acredito que o seu post desvirtuou:

    Até onde eu fui capaz de compreender ninguém está dizendo que você precisa fazer sempre o “The Best of The Best” nos seus exemplos. Apenas achamos que é possível melhorar algumas coisas sem muito esforço. Caso você queira, nós podemos debater sobre alguns exemplos, pois acredito que isto seria esclarecedor para toda a comunidade. Caso você queira nós podemos debater também o motivo pelo qual isto é importante.

    Também não estamos discutindo quem você deve agradar ou não, mas sim se alguém como você, (que, como você diz, tem um blog que 10 entre 10 desenvolvedores no Brasil acessa) deveria se preocupar com a qualidade do código que publica. O que você acha?

    Eu também gostaria que você falasse mais sobre como “um bom leigo” é capaz de definir o que ele deve ou não usar no seu ciclo de desenvolvimento? Afinal de contas, ele não é leigo?

    Por fim, eu adoraria que você, apesar de se auto-definir como um bom governante, estivesse aberto ao debate de idéias baseados em argumentos racionais. Pois eu sinto um forte apelo emocional no seu post, algo que lhe coloca como vítima de um grupinho de pessoas que não tem que o que fazer e por isto resolveram lhe incomodar. Ressalvo Igor, não é este o objetivo. E tenho certeza que se você estiver aberto a discutir os assuntos que proponho estará sim ajudando, como você diz que gosta de fazer.

    Eu acredito que os debates (educados) em blogs são bons, pois confrontam idéias e permitem às pessoas tirar suas próprias conclusões. É a dialética em tempos de internet.

    Muito Obrigado!

  2. Rapaz, eu gosto muito da sua contribuição para a comunidade, já me ajudou bastante, mas este “eu arrisco até 10 de 10” foi MUITO ego pra uma pessoa só…

  3. Beck

    Eu estou sempre aberto a críticas e a pontos de vistas diferentes, mais infelizmente mesmo você tentando ser educado em singelas palavras sobre o (não ou sim), em questões relevantes, sobre o assunto são cabíveis.

    Acreditarei em sua intenção na criação do post, porém comentários pejorativos dos quais eu li, não são cabíveis para ninguém.

    Eu só acho como homem que esse tipo de atitude sendo permitida ter que aceitar tais comentários e não modera-los é falta de educação tanto de quem escreve quanto de quem permite que seja publicado.

    Você pode até deferir os comentários agora moderando-os , mais o que eu os já tinha lido sinceridade estou no meu direito de ficar em minha posição atual de ficar calado e deixar, afinal de contas fala quem tem boca.

    Só acho que a comunidade vendo isso, acredito que são reflexos de outras atividades anteriores que muitos acham que “o grupinho” como você mencionou está apto a fazer.

    Eu só acho Beck que o tempo dá as definitivas respostas a essas atitudes que vós aceita em permitir tais atitudes de outros e que a Dclick da qual eu respeito tanto os donos como boa parte dos que trabalham nela, está se queimando por um conto de fadas desses do qual sua principal intenção ao escrever foi das melhores, mais reflete negativamente para a Empresa da qual você trabalha.

    Novamente insisto, quer trocar idéias? sempre estou a disposição ouço tanto leigos quanto os espertos, aprende-se muito das pessoas mais simples quanto as mais espertas.

    Me procura para bater um papo se te achar mais convalescente.

  4. Prezado Igor,

    Eu conheço poucos blogs como o seu em que temos que esperar diversas horas pela aprovação de um comentário. E o Blog da DClick definitivamente não tem esta política. Partimos do princípio de que as pessoas terão o bom senso ao se manifestar e não o contrário. Eu já “censurei” alguns comentários que considerei ofensivos e irrelevantes para a discussão e me coloquei a disposição para tomar providências em outros casos citados por você. Portanto, creio que a minha conduta tem sido coerente e sensata. Porém, será que podemos dizer o mesmo da sua conduta?

    Primeiro você diz que me falta educação. Segundo, você coloca palavras na minha boca ao dizer que eu afirmo que “tais grupinhos” existem – releia o meu comentário e verá que eu não afirmo isto, quem afirma é você. Terceiro, você tenta envolver a empresa em que eu trabalho na discussão. Lamentável! Sobre tudo isto, Igor, cabem às pessoas analisar se você tem razão.

    Sua atitude Igor me parece uma tentativa desesperada de se esconder dos fatos. Afinal de contas, se você, ao invés de se esquivar quisesse realmente debater os exemplos publicamente, eu acredito que 10 em cada 10 desenvolvedores do Brasil que acessam o seu “humilde” blog concordariam comigo que os seus códigos são exemplos ruins, principalmente para os iniciantes.

    Ninhos de “ifs” desnecessários, nomes de variáveis e métodos ambíguos, utilização de features equivocadas, opiniões sem fundamento, etc. Posso dar um exemplo para cada um dos itens acima citados. Você pode contra-argumentar para provar que eu estou errado, ou se esquivar novamente e continuar enganando a si próprio para o resto da sua vida.

    Eu não preciso conversar com você reservadamente, pois eu não tenho nada a temer e nem a esconder da comunidade sobre Flex em Português.

  5. Beck

    Primeiro de tudo, não tou afim de bater boca contigo, longe de mim isso por que isso é coisa desagradável. Se você acha que tem conduta certa, pronto e ponto final.

    Agora sobre comentários eu só autorizo o que eu preciso o blog é meu e eu só aceito o que eu eu bem quiser, afinal na sua casa entra o tudo que quiser? Acho que não!.

    Outro ponto é que de certa forma dessa vez agora teu comentário pareceu-se agressivo e já se tornou ao meu ver pessoal demais, sobre nichos de “if” e “else” eu acredito que teu exemplo de Datagrid Avançado fala por si, só em um override que tu escreveu com mais de 4 “if” para usar mesma cláusula, reconheça que errar é humano e não sou eu quem tacho ninguém de nada, apenas observo e fico calado. Ainda em dúvida olhe o screenshot.

    “Esquivar-se” significa outra coisa em ficar calado, para não falar besteira.

    Sobre a DClick, acho que você não entendeu o que eu escrevi, minha dica é “leia novamente”, se não entendeu, leia outra vez, se continuar sem entender, chame alguém e peça para te ajudar a entender.

    Você não é menino e nem eu, só acho que tais atitudes suas que se diz “respeitador” estão passando dos limites, quem te disse por alguma vez que eu quero falar contigo em particular?

    Para de ser instigador e procura ler o que eu falei “Estou aberto a conversar não quer dizer que estou querendo conversar em particular”, me admira muito você agir dessa maneira, já que nunca levantei um dedo ou uma palavra em sua direção.

    Procura respeitar mais e procura apontar o dedo para teus erros também, isso é feio e de mal caracter.

    Analisa o que tu faz e depois critica o que os outros fazem.

    O que eu só não gosto é que coloque lenha na fogueira.

  6. Só estou tentando deixar claro que suas intenções sobre o post escrito para mim ainda continuam sendo ótimas. Estou fortemente convicto disso.

    Se você acha que o conteúdo desse site é inadequado para sua vida, simplesmente pare de ler. A leitura é um habito totalmente espontâneo e livre, só leia o que lhe agrada e ponto final.

  7. Prezado Igor,

    Reservo-me o direito de ignorar todas as abobrinhas que você disse que não envolvem o lado técnico.

    Eu sou contra ninhos de “ifs” desnecessários, não todo e qualquer ninho de “ifs”. E eu acho que deixei isto bem claro no meu comentário anterior.

    Eu poderia fazer o exemplo da DataGrid aplicando polimorfismo (coisa que eu desconfio que você desconhece) para remover os “ifs” mas não sou um programador OO radical para aplicar tal técnica em todos os casos. O objetivo é sempre diminuir a complexidade e acredito que no meu exemplo a complexidade é limitada e qualquer outra forma de fazer só pioraria o exemplo.

    Agora o seu exemplo este seu exemplo:
    http://www.igorcosta.com/exemplos/codigofonte/index.html

    … embora não use “ifs” (usa “switch case” que é quase a mesma coisa) tem uma complexidade totalmente desnecessária para um exemplo tão simples. Assim que possível eu publicarei um exemplo refatorado que tira proveito do Data Binding para resolver o problema de uma forma muito mais simples. Talvez você possa fazer o mesmo com o meu DataGrid Filter que você criticou demonstrando uma maneira mais interessante de resolver o problema. Além disto, se você aplicar o teste de complexidade de McCabe no meu exemplo você verá que o método sobrescrito que você menciona tem um nível de complexidade 5, o que é perfeitamente aceitável para este fim. Isto sem contar que os “ifs” são legíveis de modo que apenas um leigo total em desenvolvimento de software não os entenderia. Eu não diria que o seu exemplo do link acima possuí o mesmo nível de legibilidade do meu exemplo que você criticou.

    O seu exemplo da agenda também é ruim, pois você usa os states do Flex de uma maneira indiscriminada.
    http://www.igorcosta.com/flex2/aplicativos/agenda/codigofone/index.html

    Trata-se de um exemplo de utilização de features equivocadas que eu mencionei no meu ultimo comentário. A utilização indiscriminada dos states só leva a uma coisa: código ilegível.

    O MXML só existe por questões de legibilidade. É melhor usar um XML para definir uma interface do que uma linguagem de programação como o ActionScript. No entanto, é terrível analisar o MXML de uma interface que contem states. Ou seja, ao fazer assim estamos anulando o que há de melhor o MXML que é a simplicidade e legibilidade.

    Eu havia removido um comentário no blog da DClick sobre o treinamento que você ministra. Mas você não se mostrou digno da minha atitude e por isto eu estou colocando o comentário de volta para que todos tenham acesso a um relato de um dos seus alunos.

    Não precisávamos estar debatendo desta forma, mas o seu ego (http://www.igorcosta.com/blog/?page_id=14) que muitos conhecem está levando a isto.

  8. Igor e Beck,
    Comecei a estudar flex a pouco tempo e descobri que tem muita gente boa nesse meio, mas tb descobri q tem muita gente com o ego inflamado.
    Acho essa discussão entre os dois um pouco infrutífera e infantil… já é a segunda vez que vejo em blogs briguinhas desse tipo acho que isso de maneira nehuma engrandece a comunidade Flex.

  9. Igor e Beck,
    Comecei a estudar flex a pouco tempo e descobri que tem muita gente boa nesse meio, mas tb descobri q tem muita gente com o ego inflamado.
    Acho essa discussão entre os dois um pouco infrutífera e infantil… já é a segunda vez que vejo em blogs briguinhas desse tipo acho que isso de maneira nehuma engrandece a comunidade Flex.

  10. Realmente, acho que todos erram. Como você mostrou Igor, como um cara faz isso:
    if (cbOperator.selectedItem == “>”)
    {
    displayItem = Number(itemLabelField) > Number(tiValue.text);
    }
    if (cbOperator.selectedItem == “=”)
    {
    displayItem = Number(itemLabelField) >= Number(tiValue.text);
    }
    if (cbOperator.selectedItem == “

  11. Prezado Antônio Augusto,

    Se você ler o meu ultimo comentário talvez você compreenda porque eu resolvi (conscientemente) fazer da forma que eu fiz. Estes “ifs” citados, além de não ser o principal, são apenas 5% do exemplo completo. Se eu trabalhar em uma solução mais “avançada” tal como utilizar polimorfismo para eliminar os “ifs” eu estarei adicionando uma complexidade extra que fará com que as pessoas desviem o foco na compreensão do problema para a implementação de um “Filter Renderer”, ao invés de focarem na minha implementação do DataGridFilter em si.
    Ou seja, isto seria algo como aplicar Design Patterns onde não é necessário, entende? O que eu quero, apenas, é que as pessoas compreendam como a criação dos seus próprios “Filter Renderers” conferem ao DataGridFilter uma flexibilidade interessante.

    É claro que eu poderia usar o “switch case” no lugar dos “ifs” e tenho consciência que além da legibilidade haveria “um ganho provavelmente imperceptível” de performance, pois os testes não precisariam serem avaliados para todos os operadores relacionais (semanticamente falando esta é uma das principais diferenças do “switch case” para os “ifs”). Porém eu não acho que o ganho de legibilidade seria tão grande assim (particularmente não gosto do “switch case”) e a questão da performance, considerando as ponderações do Martin Fowler no seu livro sobre Refactoring, pode ser considerada num momento posterior caso um gargalo seja identificado.

    Agora, se no meu post sobre o DataGridFilter eu não fui claro em explicar como criar seus próprios Filter Renderers (que era o meu objetivo principal) ou se a minha implementação do DataGridFilter não é boa eu adoraria, sinceramente, ouvir as críticas.

    Era este o meu objetivo quando eu critiquei algum código do Igor. Talvez ele tenha motivos para fazer do modo que fez, mas infelizmente ele não quis discutir tecnicamente, me atacou pessoalmente sem que eu tenha feito o mesmo até então, e a discussão acabou se desgastando e tomando o rumo que tomou. Lamento, realmente, que isto tenha acontecido. Creio que o Igor deveria ter visto que quem o atacou não fui eu e, num momento de raiva talvez, ele não deveria ter respondido me acusando de mal educado e outras coisas como podem ser vistas nos comentários acima. Observe que não ataquei o Igor como pessoa, apenas o critiquei tecnicamente.

  12. Prezado Roger Dantas,

    Esta discussão provavelmente não seria infrutífera para a comunidade se nos voltássemos para os aspectos técnicos. Mais uma vez reforço que eu não ataquei o Igor pessoalmente, apenas o critiquei tecnicamente. É claro que eu posso estar errado se o Igor se dispuser a explicar seus motivos. Além disto, se você olhar no blog da DClick você verá que, antes mesmo do Igor responder criticando a postura das pessoas, eu já tentava apaziguar os ânimos criticando àqueles que insistiam em atacá-lo pessoalmente.

    Debates assim não são incomuns nas comunidades internacionais. Você pode pesquisar na FlexCoders, por exemplo, verá pessoas criticando o Cairngorm e debatendo as alternativas com o Steven Webster (um dos criadores do Cairngorm). Eu li este debate inteiro e posso garantir que aprendi muito com ele. Acho que se conseguíssemos manter o nível e nos voltássemos para os aspectos técnicos a discussão seria didática para toda a comunidade.

  13. acredito que desde que o debate seja para falar sobre melhores praticas na programação, é validade

    falando sobre isso fiquei com uma dúvida(bem leigo talves) sobre o que o disee sobre “é terrível analisar o MXML de uma interface que contem states”

    o que seria exatamente esses states? e qual seria a alteranativa?

  14. Eu sou um principiante pra discutir com você, mas aprendi que é melhor usar switch case, por questões de performance, e não entendi se o “cbOperator.selectedItem” pode ter mais de um valor, senão eu usaria elseif, acho que não posso selecionar mais de um item em uma combobox. Você foi claro no seu post, assim como o Igor também foi claro em mostrar a integraçao do flex com PHP. E eu estou te criticando tecnicamente também, mas me desculpe.

  15. Olá Antônio,

    Você tem razão quando diz que o “switch case” tem uma performance melhor que o “if”. Estou até pensando em falar mais sobre isto num futuro post, graças as suas considerações (não é porque você é “principiante” que você não tem nada a nos ensinar). Porém, tal performance é irrelevante de modo que podemos desconsiderar isto. Alguns podem até dizer que prefeririam usar o “switch case” por questões de legibilidade, mas isto pode levar a um daqueles debates sem fim.

    Além disto, como mencionei que seria possível, eu publiquei um exemplo que elimina qualquer “if” ou “switch case”.
    http://blog.dclick.com.br/sources/gridFilter2/srcview/index.html

    Acho que também pode ser interessante publicar um post no blog da DClick falando sobre esta técnica que permite eliminar lógica condicional usando o polimorfismo. O que você acha?

    No final das contas a sua discussão comigo está sendo bem interessante e, acredito, útil para a comunidade.

  16. Ah, esqueci de dizer para você olhar o “RelacionalFilterRendererPolymorphic.mxml” pois é neste arquivo que eu apliquei o polimorfismo.

    []’s
    Beck Novaes

Comments are closed.