O RAD, como ficou conhecido, começou a surgir junto com o Visual Basic. A idéia era permitir o desenvolvimento rápido com um mínimo de código. Tornar possível que o desenvolvedor se concentrasse nas regras de negócio da aplicação que estava desenvolvendo e não em códigos acessórios era o objetivo - mais parecendo uma utopia.

O que antes era lógica e algorítimo se tornou configuração, junção de peças e organização de componentes. A lógica e algorítimo se acomodaram sobre o funcionamento das pecinhas, funcionando como uma cola a fazer toda a junção de componentes para chegar ao resultado final, o sistema.

demorad Toda a evolução pode ser resumida em uma palavra : Abstração. Tanto da roda para o carro, como do Assembly para o Pascal, da interface de texto para a interface gráfica e do Clipper para o Visual Basic/Delphi com RAD a evolução caminhou sempre no sentido da abstração - o individuo ganha a possibilidade de se despreocupar a respeito da forma de funcionamento de elementos mais simples e passa a utilizar estes elementos mais simples para construir elementos mais complexos, tendo a certeza de que os mais simples já funcionam.

Claro que existem momentos em que o individuo precisa voltar a suas origens. Um grande exemplo disso foi a cena de "Naufrago" onde Tom Hanks precisou aprender a acender fogo com os pauzinhos. Nem ele, nem 99.9% da plateia lembravam que para acender fogo com pauzinhos era necessário um fluxo de ar. Fez falta para o Tom Hanks ? Fez alguma falta quando ele ficou perdido em uma ilha deserta depois de um desastre aéreo no meio do oceano. Mas se você não for nenhum paranóico que passou a ir ao dentista sempre antes de pegar um vôo após ver aquele filme, então a abstração de conhecimentos passados não será problema para você.

Existem momentos em que a abstração funciona perfeitamente. Responda rápido : Quantas linhas de assembly você consegue escrever ? Ainda assim consegue programar, certo ? Isso é a abstração.

Mas existem momentos em que a abstração não funciona tão bem. Alguém lembra do Kit 5 ? Foi muito famoso na época do Clipper, mas hoje praticamente não é lembrado. O que deu errado na abstração oferecida pelo Kit 5 ?

screenshootRAD A resposta pode não ser tão óbvia, mas ela está lá : Quando a abstração limita o resultado final e a aplicação  da criatividade para as necessidades de quem está usando a ferramenta, a abstração é rejeitada e as pessoas preferem utilizar a tecnologia base devido a versatilidade que esta fornece.

Portanto, no avanço tecnológico existem tentativas de abstração que funcionam e tentativas de abstração que fracassam, o Kit 5 é um exemplo de uma tentativa de abstração que não foi para a frente, outro exemplo foram os recursos específicos criados pelo Interdev (e porque não dizer FrontPage), recursos tão específicos que ficavam extremamente presos com a ferramenta.

Por outro lado o avanço tecnológico sempre continua. Na continuidade do avanço tecnológico mesmo as abstrações que eram vistas como boas podem passar a ser vistas como algo ruim. Esse fenômeno aconteceu com o Visual Basic, mais ou menos de sua versão 4 até sua versão 6.

Inicialmente excelente para aumentar a produtividade, aos poucos as tecnologias que forneciam o RAD do Visual Basic começaram a ser discriminadas como sendo técnicas pouco profissionais, funcionando como a assinatura de um sistema amador.

Mas por que isso aconteceu ?

Porque neste período entre a versão 4 e versão 6 do visual basic coincide com o período em que se começou a utilizar bancos de dados client/server. Era uma metodologia nova para a época e os desenvolvedores ficavam confusos com relação a sua utilização.

Ok, tudo bem. Mas o que tem uma coisa a ver com outra ?

POHL_Fig2 Para o R.A.D. funcionar adequadamente com o client/server eram necessárias diversas configurações específicas que muitos desenvolvedores não sabiam realizar. Com isso as aplicações feitas por meio de RAD acabavam com uma performance sofrível e inúmeros problemas.

Quando o desenvolvedor resolvia fazer a aplicação "na mão" (aqui um parentesis : "fazer na mão" se tornou um termo classico do meio da abstração tecnológica, significando burlar a abstração atual, mas podendo referir-se  a inúmeros níveis de abstração diferentes. O que hoje é abstrair amanhã será "fazer na mão") acabava como consequencia estudando em detalhes as melhores formas de fazer, ou pelo menos fazendo copy/past de outros sistemas prontos e com isso chegando a um resultado melhor do que o R.A.D.

As técnicas de RAD, porém, se tornavam pobres vítimas do desconhecimento do desenvolvedor. Elas podiam fazer muito melhor, mas eram discriminadas. A grande maioria dos desenvolvedores que dizia que os objetos RAD eram ruins diziam isso por terem ouvido falar ou por alguma experiência não muito técnica com os mesmos.

Não estou de forma alguma inocentando o RAD da época e dizendo que era uma maravilha tecnológica. Não era. Tinha os seus problemas, bugs nos componentes visuais, até muitos bugs nos componentes visuais, porém o RAD não era em definitivo a porcaria que os desenvolvedores faziam parecer, sem nem saber porque o chamavam de porcaria.

Eis então que surge o .NET. Anders Hejlsberg, que já tinha dado uma amostra de seu trabalho com o Delphi, mostrou do que sua criatividade é capaz. Ninguém lembrou de dizer para o sujeito que era impossível, então ele foi lá e fez : Mudou por completo a forma de se fazer RAD, sem porém mudar o seu resultado (os bons resultados, quero dizer)

RadAnimated2 O conceito de RAD mudou completamente. A sigla e seu objetivo final continuaram sendo os mesmos : Uma forma rápida de realizar desenvolvimento de software, desenvolvendo de forma visual. Mas o meio de chegar a esse resultado mudou. No ambiente não gerenciado, para chegar a este resultado eram utilizados componentes "fechados", que faziam tudo por si só dependendo apenas de pequenas configurações. No ambiente do .NET o RAD passou a ser feito com geração de código. Tudo, cada detalhe do que se arrasta para dentro de um formulário gera código fonte acessível para o programador.

Com o novo RAD, por que fazer tudo na mão ? Na pior das hipóteses utilizavamos o RAD e depois alterávamos o código para ficar da forma como desejávamos, ainda assim ganhando em produtividade. Quantos, porém, realmente criaram o hábito de personalizar o código gerado por um simples windows forms, por exemplo ?

Desta forma a radical mudança no significado do RAD durante surgimento do .NET gerou uma maior confiança por parte dos desenvolvedores, mas nem por isso fez com que os desenvolvedores tivessem que usar o recurso de personalizar o desenvolvimento "manualmente", especialmente porque a Microsoft teve a oportunidade de, criando uma ferramenta nova, corrigir erros de configuração e performance das antigas ferramentas - afinal, tudo começou novamente do zero.

Falamos muito de windows forms até agora, mas e o ambiente web, como se encaixa em tudo isso ?

No principio, era o substantivo. HTML, Javascript, CSS, ASP e nos tempos mais atuais até um pouco de XML. Todos esses substantivos eram necessários para o desenvolvimento de uma aplicação web. O desenvolvedor precisava dominar todos os detalhes destas tecnologias, saber como integrar essas tecnologias e entender como utiliza-las para manipular os protocolos da web e chegar ao resultado desejado.

Várias tentativas foram feitas para se chegar a um nível de abstração ideal. Primeiramente FrontPage e Interdev começaram a fazer uma abstração de forma equivalente a abstração existente no ambiente windows. Porém com toda a complexidade do ambiente web, não agradou. O desenvolvedor ainda estava tentando entender as tecnologias do desenvolvimento web e já lhe era oferecido um nível de abstração mais alto para estudar, mas preso a estas ferramentas. Pouco versátil, o desenvolvedor dispensou.

Então surgiu o DreamWeaver Ultradev. Ao invés de tentar componentes amplos, o DreamWeaver investiu na montagem de código através de wizards, deixando o código a disposição do desenvolvedor (semelhança com .NET alguns anos antes, não ?). Foi um grande sucesso entre os desenvolvedores.

10309-aspnet_logo A etapa seguinte foi o surgimento do ASP.NET. O ASP.NET foi uma grande evolução no desenvolvimento web, pois conseguiu dar um enorme salto no nível de abstração do desenvolvimento, aproximando o desenvolvimento web do desenvolvimento windows e sem sofrer rejeição do público por causa disso.

A abstração no ASP.NET divide-se em duas partes que utilizam metodologias distintas : Primeiramente o ASP.NET em si, que se apresenta ao programador como uma nova forma de programar baseada em tags e código e abstraindo muito, muito mesmo do trabalho anterior com técnicas semelhantes a do Frontpage e Interdev.

Mas se o Frontpage e o Interdev deram errado, por que o ASP.NET funcionou ?

Simples : Porque conseguiu fazer uma abstração mais versátil, mais flexivel e aberta a criatividade do desenvolvedor. Enquanto os dois anteriores se baseavam em uma coleção enorme de bibliotecas de código difíceis de organizar, o ASP.NET trazia uma escrita simples de tags que apenas se transformavam em código client em momento da compilação, longe dos olhos do programador. Todo o trabalho do programador poderia ser feito com as tags em alto nível mesmo desenvolvendo no notepad se desejasse.

Mas o ASP.NET trouxe também um 2o nível de abstração : Wizards no Visual Studio para a geração das tags ASP.NET. Wizards e recursos configuráveis de forma altamente flexivel e mantendo o padrão de deixar o código fonte visivel ao programador - só que desta vez um código fonte ASP.NET seguindo a abstração anterior.

A produtividade do desenvolvimento web com o uso do ASP.NET foi as alturas e se tornou um marco na evolução tecnológica para a web. Porém conforme a evolução dava saltos cada vez maiores (em 2005 o salto do framework 1.1 para o framework 2.0 foi muito considerável) se tornava cada vez mais complexo o aprendizado da tecnologia.

wizard2 Para aqueles que acompanharam a evolução desde o inicio, a tecnologia é um verdadeiro livro aberto. Porém, para quem entra no estudo da tecnologia nos dias de hoje, ver o que o ASP.NET 2.0 é capaz de fazer parecer pura magia e exige um grande esforço para analisar toda a arquitetura do ambiente e compreender como aquilo que inicialmente parece mágica na verdade se encaixa perfeitamente com os conceitos técnicos da web.

Iniciar o trabalho com ASP.NET nas versões atuais, porém, tem um efeito muito diferente de quem acompanhou a sua evolução desde o principio. Iniciando nas versões atuais, o desenvolvedor fica dividido entre dois ambientes : as linguagens base da web e o ASP.NET. É claro que o ASP.NET é muito mais produtivo, mas essa divisão e a dificuldade em compreender os "efeitos de magia" do ASP.NET acabam por gerar efeitos semelhantes ao que outros processos de abstração geraram no passado : Rejeição.

Por isso hoje é muito comum vermos algumas pessoas dizendo "prefiro produzir o HTML na mão", "Não gosto da geração automática de HTML", "fica muito lixo no resultado gerado pela renderização", só que na grande maioria das vezes essas pessoas não tem um profundo conhecimento do ASP.NET para poderem se justificar, se tornando um efeito muito semelhante ao que aconteceu com o R.A.D. entre as versões 4 e 6 do VB.

Não quero dizer com isso que o ASP.NET não tem problemas, que o ASP.NET não possa melhorar em muitas coisas. É claro que pode ! A tecnologia sempre pode melhorar ! Mas comparando-se os problemas que o RAD no ASP.NET (e porque não no framework como um todo ?) tem hoje com os problemas que o RAD do VB 6 possuia, passamos por um processo de evolução inigualável.

Quer um exemplo ? Veja o webcast de criação de uma camada de acesso a dados para web, onde uso o RAD ao extremo demonstrando que ele não apenas é eficiente mas também não gera perdas para a capacidade de manutenção da aplicação.

Assim sendo, quando vejo jovens advogando que preferem fazer "tudo manualmente" ao invés de usar as tecnologias para abstração que temos hoje, isso muito me decepciona. Desde a roda até o carro o caminho do avanço tecnológico sempre foi direcionado a abstração.

O ASP.NET tem problemas com design gráfico ? Eu diria que o Visual Studio até a versão 2005 teve problemas com design gráfico. Mas por que chutar o balde e querer fazer tudo na mão apenas por causa do design gráfico ? Não seria preferível corrigir os problemas existentes para mantermos o alto nível de abstração e produtividade, ao invés de chutar o balde e regridirmos em termos de produtividade ? Que tal assistir a um vídeo sobre como o Visual Studio 2008 lida com design e ver se realmente continua sendo preferível jogar fora toda a abstração obtida e regridir tanto ?

Uma outra clara distorção (campo de distorção da realidade ?) quando desenvolvedores dizem que preferem fazer tudo "na mão" ocorre com a criação de aplicações distribuidas. Eu posso dizer que fiz e ensinei a fazer aplicações distribuidas "na mão". Utilizávamos DCOM em alguns casos e transmissão de XML em outros, montando o XML com o DOM (Document Object Model de XML da Microsoft) e transmitindo com XMLHTTP. E olha que ainda dá para dizer que isso era muito luxo, pois pouco tempo antes tinha que ser concatenação de strings e abertura "manual" de conexões HTTP.

w3c Tá. E dai ? Dai que surgiu o W3C e criou : SOAP, WSDL, WS-SECURITY, WS-TRANSACTIONS, WS-ADDRESSING, isso só para citar alguns dos WS* . Imagine-se tendo que seguir todos esses padrões da forma como faziamos, montando o XML "manualmente". Viável ?

Absurdo. Confesso que eu próprio, no inicio de toda essa padronização, fiquei me perguntando o quanto seria realmente vantajoso seguir os padrões se o volume de trabalho que teríamos para isso seria simplesmente triplicado.

A padronização que o W3C criou nos ensinou uma grande lição : A padronização não tem como objetivo apenas a interoperabilidade, mas também a abstração. A partir do momento em que algo é padrão, então não precisa mais ser feito por uma pessoa, pode ser feito por uma máquina.

Foi exatamente isso que aconteceu com os padrões W3C : A partir da criação dos padrões, seu uso passou a ser automatizado. Passamos do Soap Toolkit para os webServices do .NET e agora o WCF, o conceito de criação de proxys para acesso a serviços se intensificou e tais elementos passaram a ser gerados dinamicamente. Que atire o primeiro webService com suporte a ws-security, ws-transactions e com WSDL aquele que disser que prefere fazer tudo "manualmente".

O ASP.NET pode melhorar mais ? Claro que pode, assim como toda tecnologia. Mas quanto mais os desenvolvedores investirem em sugestões e formas de melhorar a tecnologia, ao invés de chutar o balde diretamente, mais e mais a tecnologia evoluirá. Chutar o balde, querer ter o controle de tudo e fazer tudo manualmente é um retrocesso, ir contra a todo o avanço tecnológico que temos desde a roda. Aqueles que assim fazem podem até estar temporariamente corretos (o que particularmente não acredito), mas cedo ou tarde a abstração, presente na evolução desde a roda, irá atropela-los.

Neste momento temos um novo dilema no mercado de desenvolvimento web : Devemos seguir adiante com o modelo de desenvolvimento que temos ou devemos mudar o caminho para a metodologia alternativa que está sendo proposta, o ASP.NET MVC ? Para entrar mais tecnicamente neste assunto escrevi os artigo Analisando o ASP.NET MVC Framework, Criando uma Cesta de Compras com o ASP.NET MVC Framework e Analisando uma Aplicação ASP.NET MVC. Só espero que não tenha acendido o pavio de um barril de pólvora.

Notícias relacionadas

phil_SS's picture

Sinceramente, acho que RADs fazem "programadores" burros.
Esses "programadores" se tornam mão-de-obra barata para empresas...

Não estou desmerecendo o trabalho de programadores de Visual Basic ou Delphi, mas não acho que isso seja realmente programação.

cafuin's picture

Ambientes RAD não transforma ninguém em um programador ruim.

Na verdade é um ambiente onde um programador ruim se sente confortável.

Mas são úteis. Principalmente para fazer interface gráfica. Fazer isso na mão é MUITO chato.

phil_SS's picture

Verdade.

Me expressei um pouco mal. Me me referia aos que aprendem des do início a "programar" utilizando RADs.. sou totalmente contra isso.

Mas que criar interfaces gráficas na mão é chato, isso é hein!

DDLima's picture

//Pelo que eu entendi, ele não disse que transforma programadores, //mas sim forma "programadores burros", desses que não //programariam de outra forma.
oops

Daniel.

Carlos Cardoso's picture

Ambientes RAD não transforma ninguém em um programador ruim.

Na verdade é um ambiente onde um programador ruim se sente confortável.

 

Excelente.

cafuin's picture

Menos pelo erro de concordância, comentaram antes de poder corrigir Sad

Sobre o assunto em si...

Programei muito em Delphi, hoje trabalho com gente que desenvolve em Java. Então ouço muito que o "Delphi criava idiotas" ou o contrário "Java cria gênios da programação". Ahan...

Oceanos (não verificado(a))

Da mesma forma que linguagens de alto nível tornam os "programadores em assembly" burros... Da mesma forma que o assembly torna os "conhecedores de circuitos e lógica digital" burros...

Qual é a medida que deve ser usada?

Deixe os programadores visuais em paz. É a ferramenta de trabalho deles. Ser dependente de uma ferramenta é ruim para um profissional? Nem sempre (só quando ele não tem capacidade de se readaptar). Se ele trabalha com ela e ganha dinheiro com ela, qual o problema? É ele, oras. Não sei porque ficar com isso de "programadores em RAD tem pau pequeno"...

Bobeira isso de querer ficar comparando.

_______________

http://www.clubecetico.org

Dennes's picture

Oi !

Apenas completando :

Não é só a questão de não comparar, mas a questão de aceitar e ir em direção a evolução tecnológica.

Dependente de ferramenta... hoje dependemos de um fogão, prato, talheres e panelas para conseguir almoçar. Portanto nosso dia-a-dia tem uma total dependência de ferramentas.

[]'s

Dennes

---------------------
CidadaoCarioca
BufaloInfo

Dennes's picture

Oi !

Esse conceito, de RAD fazer programador burro, é muito relativo.

No artigo chamei a atenção para o fato de que determinadas soluções de RAD funcionam e outras não. Apesar de não ter resposta para isso, com certeza o sucesso ou falha está ligado a versatilidade da solução.

Se a solucão é versátil, não exige do programador conhecimentos além da solução RAD, consequentemente não temos um processo de emburrecimento, mas sim de evolução. Quantos de nós conseguem polir uma pedra ou fazer foto com pauzinhos ? Seria isso emburrecimento ?

É como o motorista que hoje não precisa saber desmontar um motor e nem por isso é um motorista burro.

A única diferença é que o processo evolutivo na área de informática ocorre muito, muito mais rápido.

Para aqueles que não concordam, sugiro debater o desafio que coloquei a vocês no 3o parágrafo de baixo para cima.

[]'s

Dennes
---------------------
CidadaoCarioca
BufaloInfo

phil_SS's picture

Olá!

Sim, é totalmente relativo. Oque eu quis dizer é que não é nada legal ensinar uma pessoal a programar usando RADs, mesmo que seja mais fácil! Acho que a parte "chata" de algorítimos e lógica de programação não são bem aplicadas utilizando estas ferramentas(quero dizer os conceitos). Acho que todo mundo deveria aprender utilizando um editor de texto simples, um compilador(ou interpretador) e linha de comando. É chato(na verdade não =D ), mas, para mim, funciona!

Bom, era isso ai.

Dennes's picture

Oi, Phil !

Concordo em parte, no que tange ao assunto de algorítimos.

Em parte porque um professor criativo poderia inventar uma forma de ensinar este tema usando RAD.

Mas existem muitos tópicos bem além dos algorítimos, quando se ultrapassa esses assuntos básicos, não usar o RAD pode ser desperdício de tempo.

[]'s

Dennes

---------------------
CidadaoCarioca
BufaloInfo

xzerorj's picture

Pois é, foi pensando assim que a maioria da minha turma de faculdade até hoje não é capaz de criar uma solução. Sabem muito bem desenhar telas, ajustar propriedades, mas pensar na lógica do negócio é muito complicado pra eles.

Questionamentos como "onde eu preciso utilizar uma variável?", "quando devo armazenar isto numa variável global ou local?" e "pra que diabos serve uma constante?" são frequentes em qualquer trabalho que realizamos.

Aprender HTML primeiro no Micro$oft Visual NotePad XP evita ficar adimirando uma tela do IE e se perguntar porque raios a tela anda toda pra direita quando eu clico, se no meu debugger não me avisa nenhum erro acontecendo?

Tô quase careca de tanto ver isso acontecer.

Dennes's picture

Oi !

Eis ai um exemplo do fracasso de ensino com RAD e suas consequencias.

Não significa que não exista uma solução para este problema, mesmo que ainda não tenha sido encontrada.

[]'s

Dennes

---------------------
CidadaoCarioca
BufaloInfo

xzerorj's picture

Dennes disse:

Eis ai um exemplo do fracasso de ensino com RAD e suas consequencias.

Não significa que não exista uma solução para este problema, mesmo que ainda não tenha sido encontrada.


Não posso concordar 100% com você pelo seguinte: RAD's não criticam seu próprio código gerado. Eles assumem que o que foi escrito pelo RAD / Wizard é 100% a prova de falhas e por isso o código fica sem crítica e impede o aprendizado, com ou sem pedagogia e didática.
Ninguém que está ensinando vai ficar mostrando os erros da ferramenta porque senão vai ouvir do aluno: "-Se ela é tão ruim assim, porque estamos aprendendo a utilizá-la?" e com certeza vai ficar sem uma resposta sensata!

Dennes's picture

Oi !

Bem, primeiramente eu suponho o ensino de RAD com uma ferramenta boa. Nesse caso, em termos educacionais, pode significar simplesmente uma ferramente em que o professor acredite.

Depois, o ensino com RAD não seria abrir  código auto-gerado para explica-lo. Isso seria o ensino dos conceitos mais básicos, não o ensino com RAD.

O ensino de algorítimo com RAD seria usar a ferramenta da forma como seria usada comercialmente, mas criar situações de negócio que obriguem o aluno a criar algorítimos sobre o RAD da ferramenta, situações próximas da realidade.

[]'s

Dennes

---------------------
CidadaoCarioca
BufaloInfo

xzerorj's picture

Dennes disse:

Bem, primeiramente eu suponho o ensino de RAD com uma ferramenta boa. Nesse caso, em termos educacionais, pode significar simplesmente uma ferramente em que o professor acredite

Bem eu estava me referindo ao Visual Studio 2005, por quê? Ele não é uma boa ferramenta RAD para você não?

Dennes disse:

Depois, o ensino com RAD não seria abrir código auto-gerado para explica-lo. Isso seria o ensino dos conceitos mais básicos, não o ensino com RAD.

Tem razão... pra que ver o que o RAD está fazendo por baixo dos panos??!!! É bem melhor clicar em vários botões, abas e links, digitar meia dúzia de palavras e no final de tudo submeter o programa ao Suporte Microsoft para eles dizerem que o programa está correto mas não funciona porque eu tenho que aplicar um patch-sei-lá-qual-versão para funcionar corretamente.

Dennes, os RAD's e Wizard's da vida tornam um leigo em um bosta de profissional. Aqui na minha empresa por exemplo, tem um funcionário que há mais de 15 anos trabalha com windows, sempre soube criar um DNS, um DHCP, etc... Mas no dia que fui falar para ele documentar os registros dos DNS ele me olhou como se eu fosse um alienígena, porque não tinha essa opção no wizard do windows... Ferramentas são boas pra uso, não pra ensino. "Para ensino, gafanhoto-san, você deve carregar as pedras antes de poder quebrá-las"

Denes disse:

O ensino de algorítimo com RAD seria usar a ferramenta da forma como seria usada comercialmente, mas criar situações de negócio que obriguem o aluno a criar algorítimos sobre o RAD da ferramenta, situações próximas da realidade.

Novamente você está dizendo que temos que ensinar a usar um produto e não uma tecnologia. O profissional deve aprender a lógica pra poder utilizar qualquer ferramenta, e não aprender a ferramenta e ficar dependente dela eternamente...

Eu por exemplo, quando fiz o curso preparatório para o MCAD, aprendi sobre .NET na linha de comando, com compilar os programas direto na telinha preta. Depois que nós (a turma) entendemos como funciona é que passamos a aprender "A FERRAMENTA", porque a funcionalidade da "TECNOLOGIA" nós já tínhamos aprendido.

Legal você querer fazer merchan da Micro$oft aqui, mas seja coerente com a realidade... Faça posts que nos dêem informação independente, afinal isso aqui não é o MSDN certo?

MaRKauM's picture

Concordo 100%!

O que o Dennes tem que entender é que aprender apenas sobre ferramentas é suicício! Como eu já falei em outro post, temos que conhecer primeiro os métodos, depois as técnicas, só então que podemos conhecer as ferramentas!
Se não for dessa forma, criaremos profissionais medíocres e com pouco conhecimento. É necessário partir dos princípios de algorítmos, ensinar a desenvolver em alguma linguagem de nível mais baixo, nem que seja uma pseudo-linguagem igual ao Portugol.
Somente quando essas bases estiverem sólidas é que podemos seguir em frente. Se todos aprenderem apenas com uma ferramenta, imagina o dia em que a ferramenta mudar, não vão nem conseguir encontrar os registros do DNS.

Antes de fazer uma pergunta idiota, pesquise!

Dennes's picture

Prezado,

Se deseja realmente algum tipo de debate construtivo, releia os comentários. 10 vezes se necessário.

Tenho certeza que ao final conseguirá - enfim - entender o que escrevi e então sim, escrever algo construtivo a respeito.

Dennes

---------------------
CidadaoCarioca
BufaloInfo

garoa's picture

Vou reformular um pouco seu comentário para ver se vc se toca, ok?

Quote:
pra que ver o que o compilador está fazendo por baixo dos panos??!!!...
Dennes, os compiladores e editores visuais da vida tornam um leigo em um bosta de profissional.

Você soa exatamente como alguém saído da prehistória da Informática, acostumado a programar assembly em batch ao lidar com os novos e sensacionais Unix da década de 70 e seus compiladores de linguagens de alto nível (C e Pascal, quero dizer) e editores visuais como vi, ex e ed. "A perda de performance! O consumo de memória! O terror por não saber o que está sendo gerado!!"

Ah, nada como uma boa dose de perspectiva...

Fora isso, concordo que deve-se aprender a dirigir sem direção hidráulica.

garoa's picture

Honestamente, pessoal, vocês não estão sendo sensatos e me sinto na obrigação de ter que me posicionar ao lado do Dennes, não sem certa relutância porque o post é claramente de intenção marqueteira.

O fato é: IDEs RAD são apenas mais outra ferramenta para criação de aplicações comerciais. São, em minha opinião, um compilador de alto nível, que ao invés de gerar assembly, geram código na linguagem de alto nível e incluem fácil acesso ao compilador de baixo nível final. Código gerado por compiladores não são feitos para serem lidos, mas para serem usados. O que muitos estão chamando aí de lixo, eu chamo de horas ganhas.

Não concordo, como disse anteriormente, que todo esse "código-lixo" deva ser criado. Acho que o caminho para frente é sempre a criação de linguagens mais poderosas e expressivas, com maior poder de abstração e menos detalhamento para deixar o compilador feliz e, com isso, precisar de geradores de wrappers. Se tem "código-lixo" demais sendo criado em IDEs modernas para lidar com deficiências de linguagens essencialmente derivadas de C e Pascal, acho melhor correr de volta para o quadro-negro do que continuar adicionando remendos ao pano velho...

Dennes's picture

Oi, Garoa !

Quote:

não sem certa relutância porque o post é claramente de intenção marqueteira.

Mas que mania de acharem meus posts marketeiro ! Smiling

Quote:

Não concordo, como disse anteriormente, que todo esse "código-lixo" deva ser criado. Acho que o caminho para frente é sempre a criação de linguagens mais poderosas e expressivas, com maior poder de abstração e menos detalhamento para deixar o compilador feliz e, com isso, precisar de geradores de wrappers.

Mas a questão é justamente que a evolução do RAD caminha cada vez mais para esse caminho. Em minha opinião, se lidarmos com o RAD como uma evolução e procurarmos as melhores formas de utiliza-lo, chegaremos em resultados como esse mais rapidamente. Mas se negarmos o RAD, tratando-o como uma heresia, estaremos divididos no progresso tecnológico.

E observe que não estou falando de nenhuma tecnologia em especial.

[]'s

Denes

---------------------
CidadaoCarioca
BufaloInfo

davidkwast's picture

Se RAD é o uso de uma maior abstração, para ficar longe de detalhes da arquitetura que o programa vai executar ou está sendo desenvolvido. Concordo com o RAD e sinto que esse tipo de ponto de vista é futuro.

Mas se RAD for geração de código e dependente de IDE. Não acho uma boa idéia.

Opinião sobre linguagens/frameworks:

Acredito que estamos próximos de um break-even entre linguagens estáticas e dinâmicas. Porque temos que saber que tipo de número que o processador trabalha, isso pode mudar num servidor, workstation e dispositivo embarcado?

Porque não deixamos os objetos falarem se podem fazer alguma operação com outro objeto, seu valor booleano, sua capacidade de iterar sobre seus dados e outras coisas que vão muito além de getters e setters?

Ex: Se ambos são números, pelo menos um deles precisa saber se somar ao outro. Se niguém sabe, temos um exception. O mesmo acontece com divisão por zero, ela acontece dentro de método de divisão de um dos objetos envolvidos.

Concluindo, as linguagens e suas ferramentas devem se aproximar ao negócio, modelo ou necessidade do programador. E em toda a minha experiência de vida não vi muita gente se preocupando se o número deve ser float, double, short, long e se muito menos se aquele objeto seqüenciável é um vetor, lista ou árvore binária.

[]s

Dennes's picture

Oi, David !

Quote:

Se RAD é o uso de uma maior abstração, para ficar longe de detalhes da arquitetura que o programa vai executar ou está sendo desenvolvido. Concordo com o RAD e sinto que esse tipo de ponto de vista é futuro.

Mas se RAD for geração de código e dependente de IDE. Não acho uma boa idéia.

O RAD que se transformou em abstração eu costumo ver como o estágio final de evolução do RAD. Tudo começa na IDE, as vezes até em uma ferramenta a parte, até virar a abstração dentro do ambiente.

Hoje pode não ser uma boa idéia, por parâmetros atuais. Mas a partir do momento em que o RAD seja visto como um processo evolutivo, soluções para os parâmetros atuais serão dadas.

Quote:

Acredito que estamos próximos de um break-even entre linguagens estáticas e dinâmicas. Porque temos que saber que tipo de número que o processador trabalha, isso pode mudar num servidor, workstation e dispositivo embarcado?

Tenho pesquisado pouco sobre o assunto, mas até onde sei quem faz isso é a linguagem funcional, não a linguagem dinâmica.

Quote:

Ex: Se ambos são números, pelo menos um deles precisa saber se somar ao outro. Se niguém sabe, temos um exception. O mesmo acontece com divisão por zero, ela acontece dentro de método de divisão de um dos objetos envolvidos.

Isso não funciona e já foi provado.

Java mantém tipos nativos (ou primitivos ? Corrija o nome, please).

O .NET, por sua vez, apesar de gerar a aparência de OO em tudo internamente tem tratamento diferenciado - tipos tratados por valor e tipos tratados por referência.

Por que ?

Porque a perda de performance de operações OO sobre determinados tipos de dados foi considerada simplesmente inaceitável.

Quote:

Concluindo, as linguagens e suas ferramentas devem se aproximar ao negócio, modelo ou necessidade do programador.

Exatamente. Para que novas soluções sejam criadas, para que problemas existentes no RAD sejam resolvidos, dependemos de uma visão comum do RAD como um processo evolutivo. Incompleto, mas ainda sim um processo evolutivo.

[]'s

Dennes

---------------------
CidadaoCarioca
BufaloInfo

davidkwast's picture

Fala Dennes,

Dennes disse:

Tenho pesquisado pouco sobre o assunto, mas até onde sei quem faz isso é a linguagem funcional, não a linguagem dinâmica.

Então, o que eu quis dizer com dinâmica é a forma de declarar variáveis, parâmetro de funções e seus retornos. Funcional é um paradigma, do mesmo modo que OO também. Existem linguagens funcionais estaticamente ou dinamicamente tipada. Também existe linguagens com mais de um paradigma, como o Python que é Estruturado, Funcional e Orientado a Objetos, além de ser dinamicamente tipado.

Dennes disse:

Quote:

Ex: Se ambos são números, pelo menos um deles precisa saber se somar ao outro. Se ninguém sabe, temos um exception. O mesmo acontece com divisão por zero, ela acontece dentro de método de divisão de um dos objetos envolvidos.

Isso não funciona e já foi provado.

O que não funciona? Como foi provado? Eu descrevi algo já acontece dentro da VM do Python. No Python os objetos podem suportar diversos "protocolos", como iteração, indexação, representação em String, em Int, Float. Enfim, uma outra forma de lidar com objetos. To te devendo aquela comparação em Python e C#.

Dennes disse:

Java mantém tipos nativos (ou primitivos ? Corrija o nome, please).

O .NET, por sua vez, apesar de gerar a aparência de OO em tudo internamente tem tratamento diferenciado - tipos tratados por valor e tipos tratados por referência.

Por que ?

Porque a perda de performance de operações OO sobre determinados tipos de dados foi considerada simplesmente inaceitável.


Python tem algo parecido, tipos mutáveis e imutáveis, que revolve alguma possível confusão com referências. Não vamos viajar nisto agora.

Quanto a perda de performance, não diria que é um grande problema. E quando for, Python possui uma gama de soluções:

- Analisar o gargalo e reescrever as linhas de outra forma, de OO para Funcional por exemplo. Ou transformar seqüencias em iteradores.
- JIT compiler - Psyco
- PyPy - Esse precisa de um artigo próprio
- Analisar o gargalo com testes decentes e escrever as linhas que levam amis tempo em "C"
- Na mão, com Python.h
- Ferramentas que geram código "C" a partir de um código especial em Python
- Gerador de wrapper entre uma lib em C/C++ e Python

Enfim, dúvido que desempenho seja tão fundamental para escolha de ferramenta. Hardware custa muito mais barato que mão-de-obra. Depois posso viajar mais nisso.

[]s

Dennes's picture

Oi, David !

Quote:

O que não funciona? Como foi provado? Eu descrevi algo já acontece dentro da VM do Python. No Python os objetos podem suportar diversos "protocolos", como iteração, indexação, representação em String, em Int, Float. Enfim, uma outra forma de lidar com objetos. To te devendo aquela comparação em Python e C#.

Não conheço Python para comparar. Mas Java fugiu disso com os tipos nativos. .NET fugiu disso com o conceito de value types/reference types.

Ambos assim fizeram porque a degradação de performance seria demasiadamente alta.

Sobre Python, minha primeira pergunta então é se você tem certeza da forma como ele trata os dados internamente. Porque para o programador, .NET trata tudo como objetos, mas internamente diferencia value types de reference types.

Se o Python realmente trata tudo como objetos, como fica a performance ?

Quote:

Quanto a perda de performance, não diria que é um grande problema. E quando for, Python possui uma gama de soluções:

Não é desse nível de performance que estou falando. Estou falando de uma perda de performance (arrisquemos... ) nunca antes experimentada, pois todos os ambientes fugiram dela.
Os processadores normalmente fazer um 2+2 com os pés nas costas, mas se forem 2 objetos, o processamento necessário para fazer um simples 2+2 será muito maior.

Acho muito provável que esses tipos mutáveis e imutáveis do Python possam ter justamente relação com isso, para assim como no .NET e no Java, evitarem a perda de performance.

[]'s

Dennes

---------------------
CidadaoCarioca
BufaloInfo

DDLima's picture

O RLY?

Vai me desculpar Dennes, mas os seus posts têm sido (são?) bem fraquinhos e propagandistas demais.

Daniel.

viniciusfs's picture

Mais uma vez um texto enorme fazendo apenas propaganda.

Fabião's picture

Quote:
Mas por que chutar o balde e querer fazer tudo na mão apenas por causa do design gráfico ?

Se você disser pra mim que está desenvolvendo uma aplicação pra intranet em alguma empresa que está usando o IE e somente o IE, e usará o IE pro resto da eternidade, e tem toda parafernália Microsoft rodando no servidor, eu até diria que a insinuação de se usar esta metodologia vale. Se a empresa é tonta o suficiente pra se contentar com uma solução destas que a vai amarrar pra toda eternidade a tecnologias Microsoft, então, que seja.

Pra sites? Situações na Web aonde você não sabe que browser o cidadão vai usar? NEM A PAU. Não há a MENOR POSSIBILIDADE de se trabalhar com um código gerado COMPLETAMENTE FORA DOS PADRÕES SEMÂNTICOS do jeito que o asp.net gera. Não é esse "ah, é pouca coisa" que você quis insinuar não. É uma ENORMIDADE. Se você um dia resolver passar uma página desenvolvida usando tais técnicas por um validador, vai ter TANTOS problemas que nem vale a pena tentar.

O seu exemplo, pelo que ví no link, é montado em tabelas. Alguém (provavelmente um jovem, como você mesmo diz) um dia vai explicar pra você que este não é nem nunca foi o modo correto de se montar uma página.

A sua posição, de supor que sacrificar os padrões da W3C em prol da produtividade deve ser a desculpa que o Ballmer dava a cada reunião, quando perguntavam "Como vamos prender o povo no IE" ?

A propósito, óbviamente, sua página "bufaloinfo" não renderiza direito no firefox, e tem 355 erros no validador da w3c. É bom sempre lembrar que nem todo mundo usa soluções da Microsoft.

Isso, é claro, pra não citar a propaganda no post.

Dennes's picture

Oi, Fabião!

O post aborda não apenas a montagem de sites web, mas a construção de soluções completas que envolvem lógicas de negócio complexas e vão muito além de um simples site web.

Minha colocação no ponto que você destacou é que o ganho de produtividade é tão grande em outras áreas que não vale a pena descartar tudo apenas por causa de uma possível perda de produtividade no design gráfico. Em momento algum considerei a hipótese de jogar fora funcionalidades finais.

Quote:

Pra sites? Situações na Web aonde você não sabe que browser o cidadão vai usar? NEM A PAU. Não há a MENOR POSSIBILIDADE de se trabalhar com um código gerado COMPLETAMENTE FORA DOS PADRÕES SEMÂNTICOS do jeito que o asp.net gera.

Você está desconsiderando o fato de que o ASP.NET possui o conceito de control adapters, além de uma grande sequencia de eventos que podem ser interceptados no servidor.

Com os control adapters você pode interceptar a geração de HTML de qualquer webControl e trocar a geração do HTML pelo formato que você deseja.

Muito trabalho ? Com certeza. Mas é feito uma vez só e todo o restante do ganho compensa esse trabalho com o objetivo de cuidar do design.

A Microsoft tanto se preocupa com os padrões web que criou control adapters para diversos dos controles mais complexos do ASP.NET para que gerem código de acordo tableless de acordo com o W3C, você pode ver muitos detalhes sobre isso em http://www.asp.net/CssAdapters/

Quote:

A sua posição, de supor que sacrificar os padrões da W3C em prol da produtividade

Essa nunca foi minha posição e isso é apenas uma interpretação errada do que escrevi.

Além de tudo isso leve em consideração que os efeitos dos css control adapters que linkei acima estão sendo incorporados ao framework e que o visual studio 2008 melhorou consideravelmente sua relação com o design gráfico.

[]'s

Dennes

---------------------
CidadaoCarioca
BufaloInfo

Fabião's picture

Quote:
O post aborda não apenas a montagem de sites web, mas a construção de soluções completas que envolvem lógicas de negócio complexas e vão muito além de um simples site web.

Exemplo? Porque eu considero um "simples site web", tanto o meu site, quanto um "msdn.microsoft.com", por exemplo. Ambos estão disponibilizados via browser, e são de acesso público. Como eu disse posteriormente, esta lógica não se aplica a desenvolvimento das tais "lógicas de negócio complexas" cujos detalhes desconheço.

Quote:
Minha colocação no ponto que você destacou é que o ganho de produtividade é tão grande em outras áreas que não vale a pena descartar tudo apenas por causa de uma possível perda de produtividade no design gráfico.

Não se trata de "possível perda no design gráfico". É bem mais do que isso. Perde-se semântica para posterior indexação do conteúdo por sites de busca, por exemplo. Perdem os padrões web. Perdem a compatibilidade segura entre os browsers (o fato de uma página não seguir os padrões pode causar tal efeito). Antes fosse uma "pequena perda no design gráfico". Isso é o de menos, acerta-se.

Quote:
Muito trabalho ? Com certeza. Mas é feito uma vez só e todo o restante do ganho compensa esse trabalho com o objetivo de cuidar do design.

Exemplo? O próprio tratamento de conteúdo de exemplo dos CssAdapters:

E o que deveria ser o resultado se fosse semântico:

Aí, neste caso, o que faço? Programo usando as ferramentas de RAD, introduzo o adapter e trabalho usando o adapter pra ele limpar as monstruosidades que o asp.net faz por default, e ainda trocando as bizarrices que o adapter cria? Dois trabalhos?

Pode ser o projeto que for, simplezinho ou extremamente complexo, esta abordagem não me parece vantajosa. E isso porque eu nem fui encucar com a metodologia de trabalho do negócio: No caso do exemplo do menu, há javascript demais aonde poderia ser feito de outros modos, bem divulgados na web aliás, que evitariam uns 5kb de informação pro usuário baixar. É pouco? É. Agora junta tudo num site de grande porte e veja a banda jogada fora, em prol de um desenvolvimento mais rápido. O asp.net acha que javascript é a melhor coisa do mundo, e sai criando menus, eventos, hovers, tudo usando js. Cai em um browser que não usa JS pra você ver: O cara não navega. E são coisas que poderiam ser solucionadas de outro modo.

Você até poderá dizer algo do tipo "isso só faz diferença em 'lógicas de negócio complexas', soluções e sitezinhos não fazem mesmo diferença. Mas, não falo sem nenhum conhecimento de causa: Já trabalhei em projetos bem complexos usando webServices, zilhões de requisições ajax em tempo real, e sei bem o que certos atalhos que frameworks e RADS oferecem provocam quando o bicho pega.

E, principalmente, fato que é bom deixar claro: O design nem é a minha principal preocupação, o buraco é bem mais embaixo.

Quote:
A Microsoft tanto se preocupa com os padrões web

Hoje? Sim, se preocupa. Mas, não era assim fazem alguns (poucos) anos atrás não. Aliás, estamos em 2008, e, como você bem disse, os CCA SERÃO incorporados ao framework como default (espero).

Wallacy's picture

Por falar em javascript.

O site da narutoproject é um bom exemplo: É um bom site, porém tem tanto ajax que atrapalha! Demora um tempão para carregar e eu não posso clicar em nenhum link antes de terminar de carregar se não ele diz que o protocolo ajax não está associado a ninguém, etc.

Fora que não consigo acessa-lo via DS.

Dennes's picture

Oi, Wallacy !

Isso é outro problema. Ajax virou um modismo tão grande que hoje estão fazendo verdadeiros absurdos só porque é com Ajax.

[]'s

Dennes

---------------------
CidadaoCarioca
BufaloInfo

Dennes's picture

Oi, Fabião !

Quote:

Exemplo?

Neste exato momento estou fazendo uma análise de uma solução que será bem ampla, regras de negócio bem amplas, utilizará webServices, enfim, existe muito a ser desenvolvido e organizado para garantir a manutenção da aplicação e design gráfico é apenas a menor parte disso.

Quote:

Não se trata de "possível perda no design gráfico".

Quando eu falei de perda no design gráfico, estou falando de perda apenas de produtividade. Pois estou afirmando que, mesmo tendo mais trabalho, você não perde absolutamente nada, se não desejar perder.

Quote:

Perde-se semântica para posterior indexação do conteúdo por sites de busca, por exemplo

Implementei em um projeto que estou fazendo uma solução para inverter todo o código client gerado pelo ASP.NET e ASP.NET Ajax que normalmente fica logo após a tag form, para o final da tag form, exatamente para garantir uma melhor capacidade de indexação do site.

Os CSS Control Adapters, que já linkei antes, fazem os principais objetos serem renderizados como tableless, gerando mais facilidade de indexação.

Objetos personalizados da Infragistics são capazes de identificar quando a página está sendo chamada por um spider e se renderiza de forma diferente para ser totalmente fácil e legível para o spider.

A única perda existente é de produtividade no design gráfico para se chegar a estes resultados, mas o ganho de produtividade no restante da aplicação compensa.

Quote:

Exemplo? O próprio tratamento de conteúdo de exemplo dos CssAdapters:

Você pegou como exemplo o objeto de login, webControl login.

A síntaxe de fieldset é gerada pelo objeto panel no ASP.NET.

Então você tem as seguintes opções :

Cria um template no login (ele tem essa capacidade) e monta o layout com um panel. Usa um arquivo .skin para que a montagem passe a ser válida para todo o site e que você possa inclusive copia-la para outros sites

ou

Altera o control adapter para gerar o panel na renderização do login

ou

Cria uma classe herdada de login e altera o HTML de saida.

Como vê, em nada ficamos impedidos de chegar ao resultado final que você deseja, terá apenas menos produtividade em design, só isso.

Quote:

No caso do exemplo do menu, há javascript demais aonde poderia ser feito de outros modos, bem divulgados na web aliás, que evitariam uns 5kb de informação pro usuário baixar.

Existem inúmeros componentes de menu para ASP.NET, você pode até mesmo criar o seu.

Mas você sabia que o menu é ligado a tecnologia de mapa de site do ASP.NET que por sua vez também é interligada a autorização, escondendo automaticamente itens do menu que o usuário não tem permissão de ver ?

Quote:

Cai em um browser que não usa JS pra você ver: O cara não navega.

Um browser que não usa JS consegue navegar em algo hoje em dia?

Quote:

e sei bem o que certos atalhos que frameworks e RADS oferecem provocam quando o bicho pega.

Se você já trabalhou com isso, então ninguém mais ideal para aceitar meu desafio contido no 3o parágrafo de baixo para cima no artigo, que tal ?

Resumindo o que disse : O que você vê gerado por default pelo ASP.NET é apenas um default, o ASP.NET tem uma estrutura que permite que você personalize tudo e continue trabalhando com sua estrutura.

[]'s

Dennes

---------------------
CidadaoCarioca
BufaloInfo

guto pesset's picture

Como eu falei no outro post... o padrão do meiobit está caindo.
Esse cara(er.. MVP né?) só quer saber de fazer propaganda.

Lamentável.

rod.stuchi's picture

Cara não é bem assim, e pelo contrário o padrão de qualidade do Meiobit só está aumentando!
Tá certo que tem um pouco de "propaganda" Microsoft, mas o que o artigo está enfocando a meu ver, é o papel que Microsoft teve nas ferramentas RADs, é nisso o Dennes está de parabéns.. muito bom o artigo. Só tem muitos *tards da vida que vivem pra meter o pau nas ferramentas da Microsoft.
Mas o Mb está aberto a novos artigos, se vc quiser escrever um de PHP, creio eu que será apreciado...

Fabião's picture

Tá certo que tem um pouco de "propaganda" Microsoft, mas o que o artigo está enfocando a meu ver, é o papel que Microsoft teve nas ferramentas RADs

Não foi isso que eu entendí não.

rod.stuchi's picture

Entenda por Microsoft (Anders Hejlsberg) o homem por trás do Delphi e do .Net, e sim ele teve papel fundamental nessas ferramentas RADs, como o Dennes disse.