fev 2008 19

“Perfeição não é quando você não tem mais o que acrescentar a uma obra, e sim quando não há mais nada a retirar dela.”
- Antoine de Saint Exupery

O autor do Pequeno Príncipe cunhou essa frase que acredito que reflete o espírito da boa engenharia. Uma obra está terminada quando você não tem mais nada a retirar dela para que ela cumpra sua função. Tem-se assim simplicidade que funciona.

Eu não quero começar uma “guerra entre linguagens”. Sei que cada um domina suas linguagens prediletas e que todas elas tem suas vantagens. E antes que me critiquem: sou fã do Flash (como espectador), apesar de não ser designer e não conseguir produzir mais que brincadeiras nessa tecnologia.

Vou direto ao ponto, cá entre nós : por que a Adobe foi enfiar uma linguagem tão pesada dentro do Flash CS3?

O Macromedia Flash começou como uma alternativa mais leve ao Shockwave. Quem trabalhou com Shockwave nos anos ’90 lembra que tinha que criar os “filmes” no Director e depois passar por um programa chamado “Afterburner”(ou algo assim) para depois produzir o filme Shockwave. Dava pane direto, tinha que salvar o trabalho o tempo todo. Enfim, tudo era assim no Windows nos anos 90…

E aí chegou o Flash! Que alivio….o Flash resolveu 99% das necessidades de todo mundo no que dizia respeito a interatividade nas páginas. Nasceram sites como JoeCartoon.com que rapidamente divulgaram o poder do Flash como plataforma de publicação multimídia. E o sucesso imediato do Flash tinha uma motivo: uma interface e uma mini-linguagem que todo mundo poderia dominar.

Então vieram os Flash 3, 4, 5, MX e assim por diante até chegarmos no Flash CS3. E, junto com as melhorias na interface e na otimização dos recursos multimídia dos PC’s modernos, veio o peso, a lentidão e o excesso de funções. Já ouviu essa história antes?

O Flash CS3 é um verdadeiro elefante sentado no sofá. Não dá pra conversar com ele porque sinceramente ninguém vai ter tempo para decorar uma outra versão de Java(é Java, mas fala diferente) que embutiram dentro dele. ActionScript 3 é uma imitação completa do Java, ou imitação da imitação do Java(pensou C# ??).

Para que foram embutir uma linguagem completa, totalmente orientada a objetos e com 2000 bibliotecas dentro do Flash??? Daquí a pouco vão transformar o ActionScript em linguagem autônoma, fora do Flash…já está, inclusive, caminhando para isso. É aí que está o erro. Por que todas as linguagens que nascem pra resolver UM problema acabam se tornando num novo dialeto de algo que já existe há 40 anos? O Java trouxe inovações no início dos anos 1990. Essas linguagens que estão por aí que rodam em bytecode, o C# da Microsoft por exemplo, nada mais são que engenharia reversa do Java e das idéias por trás dessa plataforma. Não me leve a mal, é a mais pura verdade.

O Flash era tão bom porque ele fazia o que tinha que fazer e ponto final. O ActionScript era o que tinha que ser : uma mini-linguagem para dar vida ao filme Flash. E fazía tudo direitinho.

Agora, com esse trambolho que a Adobe criou, estou aquí lendo 200 classes, API’s, delegação de eventos, import pra cá e import pra lá e, enfim, basicamente me sinto como nos velhos dias aprendendo Java 1.0 todo de novo.

Pra que a Adobe foi enfiar uma linguagem tão grande e tão pesada no Flash? Já temos Java e C# se quiséssemos isso. Acho que foi um tiro no pé e sinceramente eu só queria fazer um filme que, quando clicado, me levava a um endereço X. E aquí estou lendo 200 páginas de enrolação da Adobe….

Áh! Bem, se você precisa que um filme Flash te leve a um URL específico quando clicado em qualquer parte, esta é uma solução que encontrei:


import flash.net.URLRequest;
import flash.net.navigateToURL;

function gotoURL(url:String):void {
var rURL:URLRequest = new URLRequest(url);
navigateToURL(rURL, ‘_blank’);
}

function onClick(event:MouseEvent):void {
gotoURL(“http://zefonseca.com”);
}

root.addEventListener(MouseEvent.CLICK, onClick);

Compara com o ActionScript que eu sabia há anos atrás (era algo assim, pode ter erros…):


on (click) {
getURL(“http://zefonseca.com”);
}

23 Comentarios

  1. Mayk Brito disse:

    Cara.. concordo plenamente… eu era um bom desenvolvedor actionScript 2.0 agora pulei pra um desenvolvedor ralé q nao conheçe quase nada. Aih comecei a estudar java e verifiquei q realmente é muito igual. Nao tem problema pq descobri q JAVA é mais interessante .. entao vou estudar java mesmo e se dane o action.. fiquei de cara! rsrsr
    mas ainda dá pra fazer os sites em AS II. ainda bem!

  2. Em grande parte eu concordo, porém…

    O ActionScript vem sim se tornando uma liguagem autonoma, e eu fico muito feliz com isso… pois como você mesmo falou, é muito parecido com JAVA… então no meu ver, quem programa em JAVA teria muuuuita facilidade em programar em ActionSCript, certo !?

    Eu acho que as classes do AS3 estão muito mais “definidas” que o AS2. Acho que o flash/flex/AIR, entre outros… vão levar muita gente a loucura, de tanta coisa que vai vir por ai…

    Bom na minha opinião, o Flash está cada dia melhor, não é porque ele tem coisa nova que eu vou deixar de usa-lo e/ou não querer aprender… A vida é assim mesmo, sempre vão existir coisas novas, novidades…

    Ou você ainda usa o Windows 95 ?

    ;)

  3. Guilherme Sanches disse:

    Concordo! Cara, eu trabalhava razoavelmente bem com AS2… Quando vi AS3, quase desisti de usar o flash… muito ruim… fui tentar usar sem ler nenhum tipo de tutorial, joguei horas no lixo e não aprendi nada… simplesmente desisti de tentar aprender AS3

  4. Leandro Ferreira disse:

    Discordo, ficou MUITO mais fácil pra programar direito. AS2 é muita gambiarra, fica um código cheio de workarounds (Delegate?), que na hora de compilar ele tranforma tudo pra prototype…
    E essas nem são as vantagens. Embora eu concorde que pra códigos pequenos(gotos, etc) as2 funciona melhor, pra projetos um pouco maiores(mesmo hotsites, players…) a criação, entendimento e manutenção são menos trabalhosas.

    e, quanto ao código, você poderia ser bem mais sintético:

    import flash.net.URLRequest;
    import flash.net.navigateToURL;

    function onClick(event:MouseEvent):void {
    navigateToURL( new URLRequest(”http://zefonseca.com”) );
    }
    root.addEventListener(MouseEvent.CLICK, onClick);

  5. jfonseca disse:

    Ola Mayc, há uma linha tênue entre “melhorar” um produto e apenas carregá-lo com toneladas de funções.

    Claro que, tecnicamente, o AS3 é superior aos anteriores. Porém o questionamento que faço é: quando o Flash sair de seu nicho e pular para o turf de linguagens completas e maduras, ele sobreviverá?

    O argumento é: o Flash é simples, rápido, estável e uma excelente plataforma. Estão transformando-no em um Java… Precisamos então de mais um Java no mercado?

    Windows 95? O que é isso? Roda em Linux?!

    Um abraço,
    Zé Melo

  6. jfonseca disse:

    Valeu Leandro, mesmo argumento que enviei aí ao Mayc. A linguagem realmente obriga a produção de um código mais limpo. Mas precisamos mesmo de outro Java? Aliás, falando assim sem muita análise, teria sido bacana se a Adobe tivesse embarcado o Java de uma vez como máquina virtual do Flash…não? Enfim, apenas especulo, agradeço os pontos de vista de outros desenvolvedores.
    Um abraço,
    Zé Melo

  7. Erick Wilder disse:

    “Vou direto ao ponto, cá entre nós : por que a Adobe foi enfiar uma linguagem tão pesada dentro do Flash CS3?”

    Sinceramete, será que alguém te contou que a AVM2 (AS3) é 10 vezes mais rápida que a AVM1 (AS2) e por causa *DISSO* diversos itens são possíveis em alto nível, como programação 3D (hoje existem várias bibliotecas, como papervision, away3d, sandy3d) e outros recursos que virão com o flash player 10 (Inverse Kinematics, Video Transformations..).

    Acredito que a linguagem ainda é simples e se você não estivesse numa caverna durante os últimos 2 anos, a Adobe deixa claro que não tem intenção de criar “outro Java”. A questão é que, como já foi dito ai em cima, o AS2 é sim uma gambiarra que converte tudo em prototype. Sinceramente, depois do AS3, tive mais vontade de trabalhar com flash do que nunca. Acho que esse tipo de atitude é o mesmo tipo daquelas pessoas que tomam um pau no Counter Strike com vários head-shots e ficam falando que o jogo é de marginal e que incita a criminalidade. Ainda bem que voc~e não decide as coisas pela Adobe, senão teria banido o AS3, assim como o CS foi banido aqui do Brasil.

  8. jfonseca disse:

    Olá Erick, tudo depende de onde você quer chegar. O Flash vai mesmo virar plataforma desse porte?

    Se for para programar 3D as pessoas não escolheriam OpenGL ou DirectX? Pra que tanta coisa no Flash? Alguém vai mesmo fazer jogos de 8 GB em Flash usando essa tranqueira toda que você citou aí? Do que adianta uma máquina virtual 10 vezes mais rápida se os maiores aplicativos científicos e jogos não serão feitos em Flash? Ou você está sugerindo que o Flash se tornará uma big plataforma completa para jogos e multimídia da próxima geração? O que tenho visto aí no mercado não sugere nada disso.

    Mas concordo com você, ainda bem que eu não tomo as decisões na Adobe, senão a máquina virtual do Flash ia ser Perl!

    Um abraço, e volte sempre. Câmbio e desligo, direto da caverna.

  9. José Lima disse:

    Concordo com zé. Para quem é designer o código em AS2 era mais intuitivo e o script Assist era muito melhor. Gostava de Lembrar que o Flash foi inicialmente criado para ajudar na criação de animações e não com o objectivo de ser uma nova linguagem de programação. Por isso vou ficar ainda algum tempo pelo Macromedia Flash 8.

    Um abraço de Portugal

    http://www.linuxartsblogspot.com

  10. desculpe, mas quem tem uma opinião dessa nao tem A MÍNIMA NOÇÃO de programação… fico muito aliviado que a adobe finalmente lançou uma linguagem forte

    pq o as2 era tosco daquele jeito? simples… pra que irião investir tanto numa tecnologia que não sabiam se ia dar certo?

    depois que viram que realmente as2 vingou e pegou força, fizeram a coisa certa… agora trabalhamos orientado a objetos, a eventos, temos controle total da situação

    ou vc gostava de criar 1 movieclip para cada swf carregado? nao é muito mais facil carregar, guardar na memoria e usar quando quiser?

  11. José Lima disse:

    Oh pá. Eu felizmente que não sou barra em programação AS mas em compensação faço sites em Flash que são espectaculares, melhores que muitos q são barras em programação. A vida é bela…

  12. Leandro Ferreira disse:

    Pequena correção, vendramini: o flash 8 foi uma solução rápida entre o 7 e o 9, eles já tinham planos de refazer a AVM.

    Acho que essa discussão está bem desenvolvida já, principalmente depois do post do Collin Moock(http://www.insideria.com/2008/07/the-charges-against-actionscri.html) e a consequente discussão no Flashcoders(http://chattyfig.figleaf.com/mailman/listinfo/flashcoders).

    Zé: não é por ser linguagem forte e eficiente que estamos insinuando que irá virar uma plataforma de desenvolvimento de softwares de grande complexidade pra desktop(embora o AIR esteja aí tornando isso cada dia mais possível). O que estamos dizendo é que está mais fácil (pra developers, deixo isso claro) pra criar e manter o código.

    E afinal, o seu argumento é “precisamos de outro Java”? Porque se for, eu nem vou me dar ao trabalho de continuar lendo isso. Ao invés de proporcionar uma discussão saudável na comunidade de desenvolvedores (se é que você é um), você tá é querendo chamar atenção.

  13. é zé, infelizmente seu post foi demasiado precipitado… sem conhecimento do que está acontecendo no “mundo flash”… vc devia usar o as2 para fazer pequenas coisas na programação… acho que nunca chegou a realmente estruturar uma aplicação e, querendo fazer as coisas direito, esbarrava em limitações do as2

    agora nao temos mais esse problema com as3 (ou pelo menos melhorou 90%, pois nada é perfeito)

    vide papervision, away3d, alternativa3d, sandy, engines de física(ape, fisix, box2d) e engines que mesclam 3d e fisica(wow) só sao possiveis graças ao as3, pela extrema velocidade que a linguagem alcançou (e vai melhorar)

    com o as3 vamos finalmente separar programadores de aventureiros… quer fazer a coisa acontecer agora, vai ter que estudar e realmente ser um programador

  14. jfonseca disse:

    André Vendramini

    O que, exatamente, eu perdí nesses anos todos que eu não acompanhei o “mundo Flash”?

    Dentro dos argumentos apresentados acima eu te falo com toda sinceridade que não enxerguei o “tchan” da questão. Continuo achando que 3D em Flash e tudo isso ou faz do Flash uma plataforma maior que o navegador, ou então realmente ele está virando um elefante numa sala pequena.

    Vocês fazem críticas muito acaloradas, mas eu respeito isso. Gosto de idéias divergentes, porque sempre surge a oportunidade de aprender algo novo.

    Leandro Ferreira

    Talvez você também possa me mostrar algo técnicamente procedente para justificar essa crítica forte aí?

    Eu sinceramente acho que ninguém vai tentar programar 3D e renderizar 80 milhões de triangulos por segundo em Flash. Quer dizer, alguém pode até tentar, mas eu não vejo isso como um filão que vai virar moda. Pode gerar uns sites fantásticos, que eu provavelmente vou adorar, como eu disse sou fã do Flash. A crítica à linguagem AS3 é apenas minha opinião, lembre-se disso. Estamos aqui trocando opiniões.

    Eu tenho meu passado programando várias linguagens e gosto sempre de ouvir pessoas de outras praias. Eu jamais desqualifico qualquer pessoa por sua tecnologia escolhida. No fundo, no fundo, todo computador é muito parecido, as linguagens são apenas a forma de traduzirmos conceitos abstratos complexos para comandos quase sempre sequenciais(quando não paralelizados) e dos mais simples possíveis.

    Vocês disseram que eu não sei o que falo e que me precipitei. Talvez tenham algum argumento computacionalmente novo que me leve a mudar de idéia. Sem querer parecer pedante ou arrogante(apesar de algumas críticas aí serem, digamos, um pouco arrogantes) achei esses argumentos meio triviais.

    Linguagens prototipadas e baseadas em classes são muito semelhantes, não muda lá essas coisas. São “estruturas de dados espertas”, basta acostumar-se a produzir código de um jeito, ou de outro. Fazer lambança se faz em qualquer linguagem, eu acho que não é ActionScript 2 ou 3 que vai separar programadores de aventureiros.

    Mas não me desqualifiquem simplesmente porque critiquei o AS3. Para terem uma idéia, após os argumentos acima, eu continuo achando que a nova linguagem é uma turbina de Boeing instalada num Fusca. Ou ele decola ou vai direto pro muro.

    Eu gostaria MESMO(sem ironia) de compreender, aí de vocês que entendem, se o Flash vai MESMO virar uma linguagem corporativa que justifique essa nova linguagem ou se minha crítica procede.

    Att.
    Zé Melo

  15. Olá jfonseca,

    cara me desculpe mesmo, nao quero ser arrogante nem nada, mas é que um post como o seu pode levar pessoas sem conhecimento ao erro, e vc fala com tanta convicção, mas sem conhecimento.

    Todos os programadores que conheço (lê-se programadores que realmente entendem de programação), estão muito contentes com AS3.

    PROGRAMADORES. Não queremos saber se o flash antigamente “controlava com mais facilidade” os filmes, e era simples. Até pq, pra quem programa, sabe que AS3 é MUITO MAIS simples de se fazer as coisas do que AS2.

    E sim, AS3 vai dar uma filtrada nos “aventureiros”… é mais complexo de se aprender, pois requer que a pessoa estude OOP e tenha um nível de abstração maior que AS2.

    Trabalho numa agencia de publicidade e as vezes recebo arquivos dos outros para arrumar e vejo muitas gambiarras em AS2, funções que fazem isso e aquilo que AS3 não é possível, pois vc tem que fazer as coisas mais certinhas.

    Para finalizar, de uma atenção a este site: http://gskinner.com/talks/50reasonsAS3/

    50 razões para se usar AS3

    []´s

    André Vendramini

  16. Welder disse:

    Olá pessoal, sou programador já há muitos anos e então gostaria de deixar aqui minha opinião sobre o assunto.

    A primeira impressão que tive ao trabalhar com o Flash (em idos de 1998) foi de surpresa por ter encontrado uma ferramenta gráfica tão leve, prática e de resultados sensacionais. Cheguei a criar um programinha em as 1, compilando na forma de projetor (.exe), que fez muito sucesso em minha cidade (Uberlândia) e o qual vendi muito bem ganhando algum dinheiro… Uma programação tosca mas de efeito visual ótimo.

    Bem…, depois me envolvi em projetos em VB e praticamente não programei mais nada em Flash…

    o tempo passou e há algumas semanas atrás resolvi mecher um pouco na “nova” linguagem do Flash. Rapazzz, que beleza! AS 3 é super prático e combinado com o ambiente gráfico do Flash, da facilidade gráfica, ficou muito, mas muito bom mesmo… A OOP que eu já vinha estudando a algum tempo usando um pouco de java, e outras linguagens, se tornou pra mim, então o modo perfeito de se programar (devido a todas as vantagens, nem vale a pena repetir, todo mundo sabe!). Dizem que java é isso e aquilo, mas estou achando muito melhor o AS3 por ele estar embutido numa plataforma gráfica incrível, com tudo pronto e à mão, que é o Flash. Não quero nem saber mais de java, uma linguagem muito mais complicada de se trabalhar, quando se pensa em efeitos visuais, do que o Flash CS3.

    E para completar o AS3 permite a criação de programas desktop (via AIR), que é o meu objetivo pessoal principal. Programas que funcionam em linux, OS e Windows sem praticamente nenhuma modificação! Bahh, quer mais o quê!!!

    Esse comentário portanto, na minha humilde opinião, de que o AS3 é cópia do java, que é pesado e difícil, etc… não reflete a realidade. Flash CS3 é uma pu… plataforma de trabalho, quem puder que aproveite, é excelente!

    Só isso… t+

  17. André disse:

    em 2 anos mexendo com AS2 eu aprendi mta coisa com AS2, mas ainda assim usava mta gambiarra pra mta coisa, no AS3, apesar de programar um pouco mais… são códigos SEM gambiarras, que por sinal oq aprendi em 2 anos no AS2, aprendi em 2 meses mexendo no AS3… ficou MTUUUU melhor.

    Quanto ao getURL…

    import flash.net.URLRequest;
    import flash.net.navigateToURL;

    botao.addEventListener(MouseEvent.CLICK,function(){
    navigateToURL(new URLRequest(“http://meusite.com”));
    });

  18. mamp disse:

    Programo mais como hobby e por isso não me preocupo em me aprofundar muito em uma linguagem. Uso mais as coisas básicas, mas sempre gosto de fazer meus programas serem o mais leves e funcionarem o mais perfeito possivel. Sempre me encucou muito no AS2 o fato de eu nunca conseguir usar (aprender a usar) funcoes. Daí fiquei uns 2 anos sem programar e me interessei de novo agora. Peguei um tuto pra fazer e nao sabia que estava escrito em AS3. Pra minha surpresa, foi muito facil de entender como usar as funcoes no flash! Palmas (pelo menos minhas palmas) pro AS3!!

  19. Ramon Fritsch disse:

    Putz.. falar mal de uma melhoria é dar murro em ponta de faca..
    que polêmica tu criou ein? heheheh.. realmente eu também senti um impacto mt grande quando veio o as3.. fiquei pensando “tenho que aprender tudo de novo? sacanagem da adobe”. Mas quando resolvi encarar o as3 de frente, por livre e expontânea pressão do cliente, achei tudo perfeito.

    Não da pra comparar java com flash.. as linguagens tem finalidades diferentes. flash tem a finalidade de somente apresentar no browse soluções interativas de rica experiência para o usuário. Se a adobe quer presentear seus desenvolvedores com uma linguagem sólida e extremamente organizada(dá gosto começar um .as com “package …”), bom pra nós :)

    E realmente o que eu aprendi em 3 anos no as2, eu aprendi em 3 meses no as3… Não quero ver as2 na minha frente, nunca mais.

    Eu arrisco uma otimizada no teu código getURL:

    import flash.net.*;

    botao.addEventListener(MouseEvent.CLICK, function(){
    navigateToURL(new URLRequest(”http://meusite.com”));
    });

    abraço

  20. Dave disse:

    Tipico de quem não sabe nada sobre programação.
    Se não gostou não usa a Adobe ta te obrigando por acaso?
    é seu ganha pão? APRENDAA

    Fala Dave, não sabia que além de musico(?) você também era programador. Agradeço a dica e certamente buscarei aprender mais sobre essa tecnologia avançada, fantástica e intrigante que é o ECMAScript do plugin Flash. Vivendo e aprendendo, sempre.

  21. Eduardo disse:

    Cara… vc disse tudo, o flash é muito ruim… tem uns erros bizarros e uma forma horrível de tratar eventos comuns… não acho que parece java… parece algo pior ainda, tipo C++ e etc. É muito ruim mesmo… e não tem isso que o @Dave falou de “aprende e cala a boca”, só desenvolvedor ruim faz isso, os melhores buscam criar alternativas criativas, pq o seu tempo vale muita grana para ficar perdendo aprendendo lingua de chão. Foi o que o DHH fez com o rails, ou o que o Linus fez com o GIT. Quem manja mesmo ve o horrível e não perde tempo não… faz melhor.

    No meu caso migrei completamente para o Silverlight, depois de ficar 1 ano perdendo meu tempo escrevendo em flash AS3. Lá vc vai encontrar tudo que tem de bom no novo mundo da programação como uma boa suite de testes para fazer TDD, boas ferramentas para seguir Agile e etc. E o melhor de tudo vc pode escrever em uma penca de línguas, javascript, python, ruby, C#, F#, VB.net e etc. Vc pode misturar elas ou escolher a que mais te agrada…

    então é isso brow… para de sofrer nessa lingua da década de 80 e sai dessa, pq flash é língua de frustrado, nela vc tá sempre errado e imaginando “onde foi que eu errei…”

    abraços

  22. hugo disse:

    Silverlight??? quantas aplicações existem nessa linguagem e quantas em flash?
    zé, tú falou bosta por não conhecer nada sobre o assunto, e essa meia duzia q concordou contigo tmb não ideia do que dá pra ser feito pq não conseguiram entender como funciona o as3.
    Sinto muito pela corja que tenta falar coisas como abandona linguagem dos anos 80…as3 é dos anos 2000…tenha dó.

    Quanta categoria. Talvez você queira elucidar qual a parte do “Javascript” do Flash que nós, membros dessa “corja”, não conseguimos entender?

O que você acha?