Quero colocar aqui alguns detalhes da minha experiência com WPF, de modo que você não precise sofrer tanto quanto eu.
Esta série de posts não pretende falar de WPF de forma abrangente, mas servir de guia para as perguntas que você vai ter e não vai achar resposta em outros lugares.
Um pouco de psicologia fashion.
Se você como eu já tem algum tempo na área de informática, já viu inúmeras coisas que prometiam ser uma revolução na área que iriam mudar a sua vida, essa é a única verdade sobre isso; nossa vida muda, em geral para pior. Vou citar alguns exemplos:
- WebClasses da Microsoft. Se você nunca ouviu falar disso, sorte sua; se ouviu e usou não deve ter achado ruim, mas deve ter ficado muito irritado quando percebeu que a coisa simplesmente deixou de existir e você ficou órfão da tecnologia.
- Processadores MMX. Os processadores MMX tinham instruções tão poderosas de processamento de dados que agora os modems poderiam ser substituídos por software. Ao menos nessa eu não caí.
- Visual J#. Já ouviu que esta era uma boa alternativa ao Java? Nessa pouca gente embarcou, pois ficou muito claro que era apenas um instrumento na luta entre a Sun e a Microsoft, quando a Microsoft perdeu o selo Java por criar um dialeto, numa tentativa de tornar os programas Java compatíveis apenas com Windows. Quem embarcou neste barco furado ganhou como agradecimento da Microsoft o descontinuamento do produto [1] e o fato de durante muito tempo não haver versão de runtime do J# para 64-bit real, apenas para Windows on Windows (WoW)[2],[3].
Vamos tentar entender os motivos que levam a todos para essa corrida pela última moda.
Em primeiro lugar. os fabricantes de software não são muito diferentes dos fabricantes de carros. Uma vez que todo mundo tenha comprado seus produtos eles precisam de um jeito de fazer com que eles comprem mais. Se eles contarem apenas com clientes novos não pagarão seu caro processo de desenvolvimento de novos produtos. Mas existe uma diferença básica, os softwares não ficam gastos como os carros, isso cria uma dificuldade a mais.
Outra diferença é que os carros, têm um alto custo de produção e de desenvolvimento, e o software tem um alto custo de desenvolvimento e um custo quase zero de produção (se ele for bem feito). Uma vez feito o software, basta copiar e instalar.
Como fazer, então uma pessoa comprar uma versão nova de um software que ainda funciona? Uma maneira é aparecer com novidades; novas funcionalidades ou maneiras novas de fazer as velhas. Ou se o software for um sistema operacional, lançar softwares com estas novidades que precisem do novo sistema para funcionar.
Outro motivo é que aparecem novas necessidades, ou apenas velhas necessidades que não tinham sido percebidas, ou alguém perceber uma maneira nova e mais prática de fazer algo velho. Estes são os raros momentos em que aparecem novidades realmente úteis. Estas mudanças reais, em geral chegam sem muito alarde.
O motivo seguinte de nossa lista é que as pessoas adoram novidades, ou não haveria jornais. E o pessoal da área de tecnologia, mais ainda, afinal foi isso que fomentou a evolução na área. Estas novidades se espalham de boca em boca quase como fofoca. É fácil perceber isso, se você é desta área, se pergunte quantas vezes trocou de celular este ano, ou se já baixou o Google Chrome para dar uma olhadinha.
Estes motivos e muitos outros são a causa do fato que no mercado de informática não mudar é morrer, temos vários exemplos disso, como a Wordperfect que tinha a imensa maioria do mercado de editores de texto e a Novell que tinha a maioria do mercado de redes e quando eles caíram de suas posições caíram incrivelmente rápido.
Isso coloca enorme pressão sobre os fabricantes para lançar novidades, mas isso realmente não é fácil, assim, na maioria das vezes as novidades são um rearranjo das funções antigas, e como isto precisa ser bem visível em geral esse rearranjo é bem grande, o que só causa confusão e perda de tempo.
Eu chamo essa busca incessante de novas tecnologias, sem real utilidade de "Síndrome do Electra ". Não se trata da Electra de Sófocles nem da Electra de Eurípedes. Os aviões Electra II (a hélice) foram retirados da ponte aérea e foram substituídos por jatos Boeing 737. Com a introdução dos novos jatos dispunha-se de aviões mais modernos, com peças de reposição amplamente disponíveis tornando a manutenção mais barata e confiável e o vôo ficava mais curto.
Em teoria tudo bem, mas devido ao fato do custo operacional dos jatos ser maior eles não podiam decolar com assentos vazios, assim o intervalo entre os vôos foi aumentado e mesmo assim logo após a introdução dos jatos o preço da passagem subiu.
Assim as principais conseqüências imediatas de aviões de tecnologia mais moderna foi o aumento do intervalo entre os vôos cancelando a vantagem do vôo mais curto e o aumento da passagem. A vantagem certamente foi para quem explorava a ponte aérea, mas para o usuário ela não existiu.
Quanto a segurança os Electra II na ponte aérea tinham um registro impecável, sem nenhum grande acidente com vítimas em todos os anos, apesar da má fama do Electra quando do seu lançamento. Os Electra foram vendidos ao Canadá, reformados e a maioria deles continua em ação.
A medida que o tempo passa o seu ceticismo e a sensação de deja vú vai aumentando e você vai se tornando cada vez menos inclinado a investir tempo em qualquer coisa nova, pois já perdeu muito tempo, dinheiro e oportunidades correndo atrás de novidades tolas. Além do mais a medida que você vai se especializando e ficando bom em algo sua inércia aumenta, pois fica menos tentado a investir em algo em que você não é tão bom, em algo em que experiência acumulada vale menos, em algo que não destaca você dos outros pelo simples fato todos estão no mesmo nível de conhecimento por ser um admirável mundo novo para todos. Mas sempre existe uma nova geração ávida de novidades para tomar o seu lugar e não oferecer resistência nenhuma a isso, então você cede sob a ameaça.
Quando se fala de total cost of ownership em geral não é levado em conta o custo dessa corrida pela última moda, mas ela tem um custo e um custo bem alto. Em primeiro lugar todos têm de investir tempo aprendendo a novidades, que muitas vezes não são absolutamente novidades, apenas maneiras diferentes (e não melhores) de fazer as mesmas coisas. Este tempo de aprendizado ou mesmo treinamento, tem um custo. Além disso os ciclos de desenvolvimento ficam cada vez mais curtos e os softwares cada vez mais cheios de bugs e menos documentados.
Devo mudar para a WPF?
Se a decisão é sua você é um dos raros privilegiados. A verdade é mais pragmática: em geral a decisão não é sua, simples assim.
Mas tenha em mente alguns fatores, em primeiro lugar prepare-se para sofrer, faz parte da profissão. Em segundo lugar esteja certo: isso não é uma novidade colateral como Web Classes, é uma mudança central, e a Microsoft não vai voltar atrás nisso.
Se você precisa tomar essa decisão lembre que a imensa maioria das aplicações corporativas não tem a ver com interface com o usuário (a não ser páginas web), a maioria tem a ver com interoperabilidade entre sistemas. Lembre-se também que se você fizer algo para web em WPF (Silverlight), vai estar cada vez mais amarrado a Internet Explorer em Windows, e as aplicações não vão rodar em Windows 98.
Saiba que a mudança para será problemática, todos vão odiar, a produtividade cairá próximo de zero por um longo tempo e se não cair provavelmente isso significa que você não está usando a WPF em toda a sua glória.
Mas a longo prazo você não terá opção se quiser continuar desenvolvendo com produtos Microsoft. Quanto antes começar, quanto antes vai estar à frente de um assunto que todos vão demorar a dominar e vai estar a par de problemas que levarão os outros ao desespero. Mas ser o primeiro tem um preço, que é sofrer sozinho. Ninguém vai poder te ajudar, você não terá a quem recorrer.
Você vai perceber que nem tudo é dor; existem muitas coisas incríveis que você poderá fazer com WPF que nem cogitaria fazer em Forms, especialmente no que se refere a desenho, animação e 3D. E mesmo que não se trate disso existem coisas que você em tese pode fazer mais facilmente, como customizar a aparência da aplicação, usar estilos para controles, etc. Se você achar que pode se livrar dos problemas da WPF usando apenas um subconjunto seguro de características vai ver que ela é como uma sereia, ela vai te atrair com seu lindo canto para o desastre, a menos que você seja Ulisses e esteja amarrado ao mastro isso é inevitável, é impossível ter tantos brinquedos novos e não querer usá-los.
Claro que antes de mudar você tem de saber o que a WPF te oferece, você em geral vai ouvir outras vantagens, mas exageradas, na minha opinião as maiores vantagens são estas:
- Ela tem um modelo de controles bastante atraente. As propriedades Content (falaremos sobre isso) dos controles são objetos e isso permite fazer controles sofisticados muito mais facilmente que o Forms e com muito mais flexibilidade.
- Ela te oferece uma variedade impressionante de capacidades gráficas sem as complicações do DirectX. Maneiras de tratar objetos 3D, animações, etc. Isso pode não parecer útil e a princípio não é, mas é interessante, assim que entendermos onde usar isso coerentemente e sem exageros.
- A WPF lida de maneira muito simples com o acesso a dados. Embora as coisas boas sejam na maioria devidas a Generics e LINQ, o binding se integra a isso tudo muito bem e simplifica algumas coisas (mas não de graça).
- O XAML parece ruim a princípio, mas na verdade ele simplifica bastante o desenho de interfaces, e quando compreender bem a relação entre o C# e o XAML você vai entender que ele é muito bom para outras coisas além de desenhar interfaces.
- Com o XAML parece trivial fazer skins para as suas aplicações, é quase uma conseqüência natural da XAML em que todos pensam quando ouvem falar dela pela primeira vez. Em aplicações corporativas parece quase trivial, mas em aplicações de prateleira isso é desejável.
- Em WPF a Microsoft se aproximou mais dos layout managers que podemos ver em outras linguagens como Java e TCL/TK, a primeira reação que temos é: já não era sem tempo.
Mas no final, sejamos honestos sobre a decisão de adotar WPF. Você não tem como tomar uma decisão racional, só vai ter as informações todas sobre WPF depois de usar. Por mais que estude e aprenda não poderá prever os problemas, e só vai colidir com as conseqüências reais de sua escolha no dia a dia. Assim sendo vai ter de confiar em alguém, em última análise será uma decisão emocional.
Ela vai acabar com o Forms?
Assim como o C# não acabou com o Visual Basic (apesar de muitos de nós termos desejado isso) e assim como muitos ainda usam Windows 2000 saiba que o Forms vai durar muito.
Não sei se o que mais me desespera é o Forms continuar ou a alternativa ser o WPF. O argumento que sempre se ouve é que a Microsoft não vai investir mais em Forms, e que todas as novidades serão canalizadas para o WPF. Mas, mais uma vez, sejamos sinceros, este argumento é de uma inocência infantil. Qual foi a última novidade que você ouviu falar em relação ao Forms? Talvez, quem sabe, um bug recém descoberto.
Assim não entre em pânico (você deveria ter entrado quando descobriu que carreira ia seguir, agora é tarde), tem gente que ainda programa em COBOL e Clipper e vai bem obrigado e mesmo o Forms vai demorar muito para chegar nesse ponto.
Mas se você deseja não ser considerado uma relíquia é bom saber algo novo, eu aconselharia LINQ (para o qual ao contrário da WPF sou somente elogios) ou WF, mas se o seu problema envolve interface com o usuário, vai ter de ser WPF.
Como aprender WPF
Você vai ter alguma dificuldade de achar coisas de bom nível na Internet e muitas vezes vai encontrar referências a coisas que foram feitas há muito tempo e já mudaram.
Vai encontrar muita informação irrelevante discutindo milhares de detalhes gráficos que a WPF permite e que a maioria de nós nunca precisará usar. Quanto aos problemas simples e cotidianos vai ter uma grande dificuldade.
Não existe nenhum site dedicado a WPF em sua totalidade (este site é um bom exemplo), e mesmo nos que dizem que são isso, você irá encontrar apenas exemplos isolados. Você vai receber inúmeras sugestões, mas vai perceber que nenhuma vai atender todas as suas necessidades. A MSDN que no passado era um ótimo lugar para aprender e descobrir coisas, no caso da WPF se mostra um deserto de informação. Por vezes ela se limita apenas a listar a assinatura de um método sem entrar em detalhes sobre o que ele faz, muitas vezes nem vai existir um exemplo em XAML, apenas em C# e VB. O code complete do XAML do Visual Studio vai ser mais útil que a MSDN.
Se você for à seção de informática de uma boa livraria, vai reparar que existe uma enorme disparidade de quantidades de títulos, entre outros temas e WPF. Existem poucos títulos e menos títulos ainda que são bons. A maioria dos livros tem como objetivo ensinar o programador como se ele nunca tivesse visto nada sem levar em conta qualquer experiência anterior que ele tenha tido. Isso é uma enorme perda de tempo para a maioria de nós.
Queremos programar, programar bem e rápido assim seria útil algo que nos ensinasse as diferenças sem perder tempo com coisas que nunca usaremos (é bom que tenham detalhes sobre estas coisas, mas não como parte essencial do processo de aprendizado) e descrevendo tudo sem justificar as motivações .
Existem livros sobre o Blend (ou Expression Studio Blend), e quanto a isso eu tenho uma sugestão, ignore todos, você não vai usar o Blend (depois explicarei porque).
Você vai ouvir falar de basicamente três títulos:
- [Pet2006] A princípio parece um livro interessante. Ele acredita que é indispensável entender como o XAML é transformado em código C# (explicarei sobre isso adiante), com o que eu concordo. O livro é dividido em dois na primeira parte tudo é feito apenas com código C# sem usar XAML, na segunda as coisas são feitas usando XAML. Essa abordagem é contraproducente, queremos aprender e queremos aprender rápido. WPF é para ser usada com XAML e pronto, você terá de aprender como o código é gerado enquanto usa o XAML. Não fosse isso seria um livro muito bom. Não serve como seu livro básico de aprendizado, mas é um livro bom de ter por perto às vezes.
- [Vit2006] Este é um livro apenas sobre XAML. Como referência é bom, mas não acrescenta muito. Para os programadores esta abordagem é, no mínimo, incompleta. Talvez ele parta do princípio que os designers devem aprender XAML para fazer o design, isso seria um grande erro, os designers querem usar uma ferramenta como o Blend e ponto final. Quanto aos programadores ele incorre no erro oposto do [Pet2006], de não falar nada sobre uso de WPF sem XAML o que é essencial para a compreensão. Além do mais está para acontecer essa separação entre código e apresentação que todos dizem. É melhor que a MSDN, mas para referência prefiro algo com busca e esse não é o caso de um livro, a menos que você compre a edição eletrônica que existe para os textos da O'Reilly.
- [Nat2007] Este é o melhor livro. Talvez o único realmente bom que exista. Ele tem a vantagem de ser mais novo, de discutir com honestidade os problemas da WPF e de responder as dúvidas que você vai ter quando ver esta ou aquela característica da WPF.
Próximo post.
No próximo post vamos parar com a choradeira e vemos mostrar como as coisas funcionam. Não vamos fazer como todos e nos deter em trivialidades e princípios básicos de como usar os controles, para isso você tem [Nat2007]. Vamos tocar em alguns detalhes da WPF que serão justamente suas principais dúvidas.
Notas
[1]. A linguagem foi aposentada como descrito em [MS1].
[2]. "Visual J# v2.0 is a 32-bit only release. On 64-bit systems, it will execute in the Windows-On-Windows environment." [MS2].
[3]. Em 29 de maio de 2007 aparece a versão 64-bit do runtime, em [MS3].
Referências
[MS1]: MICROSOFT CORPORATION. Retirement of J# language and Java Language Conversion Assistant from future versions of Visual Studio. In: Visual J# Home. Disponível em: <http://msdn.microsoft.com/en-us/vjsharp/default.aspx>. Acesso em: 28 set. 2008.
[MS2]: MICROSOFT CORPORATION. Additional Information. In: Microsoft Visual J# Version 2.0 Redistributable Package. Disponível em: <http://www.microsoft.com/downloads/details.aspx?familyid=F72C74B3-ED0E-4AF8-AE63-2F0E42501BE1&displaylang=en#AdditionalInfo>. Acesso em: 28 set. 2008.
[MS3]: MICROSOFT CORPORATION. Microsoft Visual J#® 2.0 Redistributable Package – Second Edition (x64). Disponível em: <http://www.microsoft.com/downloads/details.aspx?familyid=42C46554-5313-4348-BF81-9BB133518945&displaylang=en>. Acesso em: 28 set. 2008.
[Nat2007]: NATHAM, Adam. Windows Presentation Foundation Unleashed. Indiana: Sams, 2007.
[Pet2006]: PETZHOLD, Charles. Applications = Code + Markup: A Guide to the Microsoft Windows Pesentation Foundation. Redmond: Microsoft, 2006.
[Vit2006:]: MACVITTIE, Lori A. XAML in a nutshell. Sebastopol, CA: O'Reilly, 2006.
Recent Comments