logo
Contato | Sobre...        
rebarba rebarba

Managed e Unmanaged: verdades, mentiras e opiniões

Por Rodrigo Strauss

Era uma vez

Idos do ano de 2001. Eu já estava acompanhando o movimento do mercado “microsoftiano” a algum tempo, e a novidade do último PDC era o NGWS (New Generation Windows Services). Logo depois, comparecendo às palestras da Microsoft brasileira, recebi os CDs com o beta 1 no NGWS, que agora se chamava .NET (apesar do nome NGWS ainda aparecer em vários lugares da documentação).

Achei bem interessante e comecei a brincar bastante com o C#, junto com um amigo meu. Inclusive, para toda novidade que eu descobria no WinForms ele tinha uma resposta padrão: “isso é igualzinho ao Delphi”. Só depois que eu fui saber que isso tinha um motivo para acontecer: Anders Hejlsberg, arquiteto do Delphi, do J++ e do C#. Como eu não entendia muita coisa de Delphi, isso não me dizia nada, e eu continuei estudando .NET.

Até que um belo dia, meu amigo disse que arrumou um emprego para trabalhar com C#, desenvolvendo software para o mercado financeiro. Apesar da felicidade de ver meu amigo empregado, me pareceu muito estranho uma empresa desenvolver software em tecnologia beta 1. Pelo jeito o pessoal de marketing da Microsoft estava se esforçando bastante... E lá foi ele para desenvolver o módulo gráfico do software, todo em GDI+, com aquela velocidade e com aquele consumo de memória que só o framework beta 1 conseguia proporcionar. Nós, acostumados com C++, Visual Basic e Delphi, não conseguíamos nos conformar que um programa que desenhava simples gráficos de barra pudesse consumir 100 MBs de RAM em algumas situações.

Nessa época eu tinha minha própria empresa (lembra o boom da Internet?), mas como não íamos bem das pernas, meu sócio financeiro resolveu encerrar as atividades. Não tinha jeito, eu tinha que arrumar um emprego como programador. Detalhe que naquela época eu não conhecia a APINFO, nem sei se já existia. Foi aí que eu pedi pra esse meu amigo encaminhar meu curriculum na empresa onde ele trabalhava. E deu certo, fui contratado para desenvolver usando C# beta 1

Continuando

O .NET trouxe consigo uma avalanche de marketing da Microsoft em tamanho comparável somente com o lançamento do Windows 95 (lembra?). A festa foi gigantesca e a Microsoft dizia que daquele tempo em diante tudo seria .NET. Os servidores Microsoft (SQL, Exchange, etc) seriam .NET, a próxima versão do Windows para servidores seria o Windows.NET Server, as ferramentas de desenvolvimento seria todas .NET. Mas o que realmente era o .NET? Nem mesmo os funcionários da Microsoft sabiam direito. Vários relatos de funcionários da Microsoft que diziam não entender essa história de .NET foram publicados na Web.

A confusão gerada foi tão grande, que a própria Microsoft acabou recuando mais tarde. Não existiu o SQL.NET, não foi lançado o Exchange.NET e o Windows.NET Server teve seu nome mudado, de última hora, para Windows 2003 Server.

E a conclusão foi...

A conclusão foi de que o .NET não passa de um ambiente gerenciado para execução e desenvolvimento de aplicações. Não cria nada de novo, não revoluciona coisa alguma. Algo que o Java fazia a tempos (tanto que o nome código do C# era JavaKiller), só que feito pelos programadores e arquitetos que só os bilhões da Microsoft conseguem pagar. Uma máquina virtual e uma biblioteca de classe, era isso.

Faz parte do projeto .NET melhorar a vida dos usuários e tornar os computadores mais seguros, mas ninguém viu isso até agora. Quando existirem aplicativos .NET disponíveis (hoje só existem bricadeiras e leitores de RSS), será muito mais confiável usar programas baixados na Internet, já que ele não teria permissão para alterar arquivos ou mesmo enviar informações para Internet. Os mecanismo de Browser Helper Objects (BHOs) do Internet Explorer não poderia ser usado para fazer spywares, caso os BHOs fossem desenvolvidos em .NET e rodassem em um AppDomain separado e com restrições de segurança.

Os primeiros passos nesse sentido já estão sendo dados pela Microsoft. O SQL Server 2005 (antes chamado de Yukon) trará a runtime do .NET embutida, o que possibilitará, entre outras coisas, escrever stored procedures em C# e VB.NET. No Windows Longhorn (próxima versão do Windows, esperada para 2006), a API principal será totalmente baseada em .NET. Assim, mais e mais aplicativos serão desenvolvidos em managed code, e os usuários começarão a ser beneficiados das vantagens do .NET.

Apesar do .NET não criar nada de novo, ele conta com aquele toque Microsoft. Entenda isso como uma ótima documentação, suporte e extensibilidade. Essa é a grande jogada, e é o que a Microsoft faz com todo produto que compra e com toda a tecnologia que ela adota. Foi assim com o .NET (um Java melhorado) e também com o Virtual PC (que não foi lançado até que ele fosse automatizável e extensível via COM).

Velho é tudo que funciona

Com a criação do .NET, os aplicativos para plataforma Windows começaram a ser classificados com managed (gerenciados, aplicativos .NET) e unmanaged (todos os outros). Os maria-vai-com-as-outras começaram a chamar os aplicativos que não eram .NET de “old unmanaged code”. Eles só não pararam para pensar em uma coisa: o Windows é feito em “old unmanaged code”, o Office também, assim como o próprio framework. Mais uma vitória do pessoal de marketing da Microsoft.

Se você trabalha como desenvolvedor a bastante tempo, você já deve ter visto vários aplicativos serem refeitos em novas ferramentas, pelo simples fato de que as novas ferramentas são novas, e as velhas ferramentas são velhas. Isso acontece a toda hora, as pessoas costumam classificar de velho tudo que funciona. Fui consultor em um banco, onde eles estavam portando um software inteiro feito em VB6 para VB.NET. Só que, como a Microsoft não respeita mesmo os programadores VB, o VB7 é praticamente incompatível com o VB6. O software foi refeito, e acredito que a nova versão não deve funcionar direito até hoje. Nem preciso dizer que tinha dedo da Microsoft brasileira nessa história...

Se uma empresa tem um aplicativo feito em Clipper, que funciona, talvez não seja necessário portá-lo para Windows. Mas como existe a mudança de paradigma entre a interface gráfica do DOS e a do Windows, portar um aplicativo desenvolvido em Clipper para alguma ferramenta Windows faz sentido. Isso realmente traz uma vantagem para o usuário, já que interação do usuário com o sistema pode melhorar bastante: interface mais fácil e mais intuitiva, fontes True Type, facilidade de impressão, suporte a rede, etc.

Agora qual a vantagem, para o usuário, em se portar um sistema desenvolvido em VB6 para a plataforma .NET? Praticamente nenhuma. O programa terá a mesma interface gráfica, com os mesmos recursos. Em algumas situações, o programa ficará pior, já que softwares desenvolvidos para plataforma .NET geralmente ficam mais lentos do que o feito em VB6.

Para os maníacos que teimam em contestar essa afirmação que .NET é mais lento, façam um teste: olhe o assembly que o JIT gera e compare com o que o compilador do Visual C++ gera na configuração DEBUG. Muito parecido, não é? Agora compile o programa Visual C++ em configuração RELEASE e compare novamente. Entendeu agora porque .NET é mais lento? Ah, você não sabe fazer isso? Então você afirma que o managed code é tão rápido quanto o unmanaged baseado em que? Estude mais antes de fazer uma afirmação. Por mais que existam alguns testes que provem o contrário, eles não podem ser levados ao pé da letra. É claro que se você testar em coisas simples, como ficar calculando Fibonacci em loop, a diferença será pequena. Agora pegue a especificação de um aplicativo e desenvolva-o C++ e em C#. Depois compare a performance dos dois. Esse sim é um teste válido. Talvez eu escreva uma série de artigos desenvolvendo algo desse tipo.

O .NET traz muitas vantagens, mas para o desenvolvedor. Você escreve menos código para fazer mais coisas, não precisa ficar se preocupando com gerenciamento de memória (no VB6 também não precisava), tem dezenas de wizards e designers para fazer suas telinhas. Tem uma biblioteca de classes muito bem arquitetada e bem implementada. Mas no final das contas, é só mais uma camada de abstração sobre a Win32 API, a infra-estrutura continua a mesma. No final das contas, o Windows.Forms e a GDI+ nada mais fazem do repassar as chamadas para a USER32.DLL e a GDI32.DLL.

E considerando que você estará refazendo o sistema, você não economizou tempo nenhum...

Coisas que funcionam

Eu acredito bastante na plataforma .NET. Gosto da arquitetura e acredito que um dia um programa .NET pode ser mais rápido do que um programa C++. Sim, porque conforme o JIT for evoluindo e a velocidade dos processadores for crescendo, o JIT poderá efetuar mais otimizações no código, e essas otimizações serão feitas baseadas no computador e no sistema operacional onde o programa será executado. Coisa que a compilação estática do Visual Basic 6 ou mesmo do Visual C++ nunca vai conseguir.

(Apesar de que o Profile Guided Optimization do Visual C++ 2005 (ainda em beta) é um recurso maravilhoso. Tanto que conseguiu aumentar a performance do SQL Server em aproximadamente 30%. Se você programa em Visual C++, não deixe de ler sobre isso)

.NET é o futuro do Windows, mas eu não acho que ainda seja o presente. O presente ainda é o que está no mercado e funciona: Win32 e COM. Apesar dessas tecnologias terem desvantagens quanto ao .NET, 99,9999999% das aplicações são desenvolvidas assim. Inclusive vários aplicativos que estão sendo desenvolvidos agora, ainda são baseados em COM e Win32. Note que, nessa análise eu considero aplicativos comerciais que, provavelemente, serão baixados pela Internet por vários clientes ou usuários. No caso de uma aplicativo tipo cadastro-de-alguma-coisa encomendado por um cliente, é realmente mais fácil desenvolver usando ADO.NET e obrigá-lo a instalar o .NET Framework em todas as estações.

Apesar de não ser o meu foco (pelo menos por enquanto), não podemos esquecer do Linux. A maioria dos programas em Linux são desenvolvidos em C/C++ e isso não mudará tão cedo. Apesar da Ximian/Novell ter acabado de lançar a versão final do projeto Mono (runtime .NET para Linux), não acredito que os programadores Linux irão entrar nessa onda da forma que o Miguel de Icaza está pensando (ou mostrando que pensa).

Terminando

Eu prefiro viver o presente, mas sempre de olho no futuro. E assim será.


  
 
 
Comentários
/dev/null | em 13/07/2004 | #
Eu soh acho q vc nao deve comparar .NET (framework) com Java. Sao coisas bem distintas
Rodrigo Strauss | website | em 13/07/2004 | #
Não acho que são tão distintos assim. Ambos são ambientes gerenciados para execução de aplicativos, com uma biblioteca de classes. A implementação é diferente, mas o conceito é o mesmo.
/dev/null | em 27/07/2004 | #
Nao uma coisa é linguagem, outra um framework...
Rodrigo Strauss | website | em 28/07/2004 | #
Sim, claro... Mas quando eu falo "Java", quero dizer a plataforma Java, e não somente a linguagem Java.
Fabio Galuppo | website | em 18/10/2004 | #
Particularmente não acho que Linux tenha futuro, mas esta é apenas minha opinião...

Acredito que .NET é presente, mas não alcançou o pico (por enquanto). Acredito também que C++/CLI e STL.NET é um grande diferencial.

C++ nativo e gerenciado sempre serão os melhores.

E o futuro será dos Web Services ;)
Selma Pugliesi | e-mail | em 19/07/2005 | #
Olá Fábio...bem...te achei no site da Microsoft e navegando...vim parar aqui! Trabalho em uma empresa de TI e estamos cadastrando parceiros desenvolvedores (acima 4 estrelas) para grandes projetos em território nacional. Se vc tiver interesse, envie seu CV, anexando seu "transcript" ou contate-me no hotmail. ok?
selmaplu@hotmail.com
Obrigada e um abraço.

(Seu blog está muito bom! Apesar de não entender lhufas desse assunto!)

Att.

Selma
Fabio Galuppo | em 20/07/2005 | #
Olá Selma, fico feliz por vc ter parado por aqui. O melhor blog brasileiro da atualidade, de total autoria do Rodrigo Strauss!

Qto a sua requisição, eu não sei como eu poderia ajudá-la. Afinal eu não ser um "desenvolvedor estelar" (pois não possuo nenhuma estrela - do programa).

Além disso o programa Desenvolvedor 5 Estrelas não é uma referência, pois não é reconhecido pela Microsoft Corporation como forma de avaliação (ao contrário das provas MCP) é mais uma iniciativa de marketing da Microsoft Brasil (e se não me engano Latam) do que uma profunda avaliação da capacidade técnica de um profissional.

Sou MCSD .NET, MCSD VS 6, MCAD e MCP - referências mundialmente reconhecidas. Me sentiria ofendido se no meio de um processo de seleção, o avaliador requisitasse quantas estrelas eu teria do programa "desenvolvedor 5 estrelas" (com certeza eu abortaria o processo naquele momento).

Respeitando todos aqueles que gastaram seu tempo com o programa, mas acredito que o programa desenvolvedor 5 estrelas é um ótimo para seleção para candidatos ao programa da Hebe Camargo ou da Adriane Galisteu.

Atenciosamente,

Fabio Galuppo
Rodrigo Strauss | website | em 20/07/2005 | #
Esse programa ridículo de estrelas só serve para eles conseguirem mais leitores para MSDN Brasil, já que, pelo conteúdo, ninguém vai ler aquilo mesmo...

Tem muita gente (inclusive eu), que fica ofendida quando alguém que contrata para uma empresa de TI passa um e-mail do Hotmail. Parece mais uma daquelas consultorias pilantras de RH... Selma, se você não é das pilantras, da próxima vez diga qual a sua empresa e passe um e-mail dela. "Grandes projetos em território nacional" também soa rídículo, seja mais específica.

Cuidado com o que você fala Fabio. É bem capaz que alguém coloque um comentário perguntando onde é o formulário de inscrição do programa da Hebe... :-)
Alfred Gary Myers Jr. | website | em 20/07/2005 | #
A Hebe é uma boa candidata por ter cinco estrelas, mas a Adriane só tem três logo estaria de fora.

É verdade!

Confira os transcripts em:
http://www.sbt.com.br/hebe/fale/
http://www.sbt.com.br/charme/
David Polverari | e-mail | em 06/08/2005 | #
Rodrigo, como programador, gosto de saber que ainda existem programadores que estudam e pesquisam antes de achar que entendem do assunto. Além disso, apesar de ser um árduo defensor do Linux, não odeio o Windows. Só não gosto do jeito que a MS sempre quer (e consegue) mudar a visão das pessoas sobre tudo (mas isso é outra história). Sobre o "managed code", acho que ele tem seu nicho (principalmente em computação distribuída, dispositivos móveis e "write once, run anywhere"), mas que nem todas as aplicações devem ser feitas dessa maneira (o exemplo que eu considero mais importante são os jogos, já que se eu compro uma máquina potente pra jogar, eu quero que os jogos aproveitem ao máximo essa capacidade). A MS diz que os programas "managed" serão mais seguros, por não usar pointers e outras coisas; mas isso é uma coisa repugnante para um bom programador: meus programas em C sempre se utilizaram de pointeiros e não tinham bugs fatais. Sempre eram testados e conceitualmente verificados, para não fazerem nenhuma besteira (além disso, o C permite certas coisas com ponteiros que parecem arte...). Tomara que essa onda de "managed code" não pegue pra tudo... Pra mim é como carro automático: é bom algumas vezes, mas sempre tira o tesão de dirigir. Um abraço.
antonio | em 27/03/2006 | #
[editado]
antonio | em 27/03/2006 | #
[editado]
Plinio Guimarães | website | em 08/08/2006 | #
Por acaso o banco que vc mencionou começa com "U"?
Estou tb como consultor nesse "U" e vejo as desgraças que ocorrem por aqui. O maketing do banco e os diretores de TI querem melhorar os processos e criar coisas novas mas a própria TI limita-se a dizer que vc não tem acesso a ferramentas e tecnologias novas (Java, C++, Delphi, .Net, etc). Proibem tudo que não for VB6 mas querem que a gente faça sistemas mirabolantes que realizem diveras atividades distintas, desde uma simples telinha com um botão para leitura de um arquivo e população de uma tabela access até processos complicados tais como servidores de email etc mas sem dar o acesso às tecnologias que permitem fazer isto muito mais fácilmente. Até o tal do access está limitado ao 97! Peguei um problema uma certa vez que era de descobrir porque o "cliente sybase" não funcionava no WinXP. Não deram acesso a documentação nem ao suporte da Sybase e tive que descobrir, depois de muitos contatos externos, que o "mardito" cliente sybase só passou a dar suporte para o WinXp (pelo OLEDB) a partir da versão 12.5 e aqui, por infelicidade, eles só têm a 12.0. Depois de muita briga "acharam" o 12.5 e o cliente finalmente funcionou no XP mas, pela lei de Murphi, a porcaria do programa VB (sem fontes) tinha sido compilado com as chamadas a stored procedures sem o comando "exec" no início (usaram o objeto errado). Sei que isso não tem muito a haver com a pauta acima, mas é só pra elucidar como ainda existem empresas (grandes) que limitam tudo a coisas antigas mas querem que tiremos "vinho de pedra". Por outro lado tinha uma outra consultoria - uma tal de accentu...- que fez um projeto de mudar tudo aqui no banco com novos recursos etc - usando é claro .Net - e, pra variar, sem saber direito o que era pra fazer, como funcionam as coisas e, pior, com pessoas com pouco conhecimento técnico e experiência em desenvolvimento de sistemas, quanto mais em .Net. Adivinha o que aconteceu... furo atrás de furo. O mais engraçado é que eles tinham acesso à tecnologias novas (.Net)
O pessoal da TI - fornecedor de hardware e software - sequer sabe que ambiente de hardware é preciso pra colocar um ambiente de desenvolvimento .Net (ex: acham que num micro com 256MB pode-se colocar: WinXP, Ambiente .Net, SQL-Server (MSDE), Java, Office, etc e que a máquina vai funcionar tudo 100%). Cansei. Vim da área de automação comercial e, pelo menos, lá os técnicos sabiam que é necessário um equipamento decente pra rodar certos programas. Fazíamos verdadeiras maravilhas mesmo com poucos recursos mas com grande acesso a tecnologias diversas (cada uma pra uma determinada finalidade em que mais se destaca) e eu conseguia entregar sistemas complexos em 30 ou 40 dias já testados e prontos pro cliente... Aqui, nem consigo (ou não posso) fazer um programa decente pois as ferramentas estã "enferrujadas" demais.
Rodrigo Strauss | website | em 08/08/2006 | #
Não, o banco que eu citei é o Itaú BBA.
./techberto | website | em 27/09/2006 | #
Mr.Strauss,

O sábio Leminski já dizia “haja hoje para tanto ontem”; sei que seu post já está meio "idoso"! :-) Mas eu só o li agora e penso que o cerne dele é atemporal, assim segue meus comentários...

E sem apologia ao Freud "cada qual com seu qual"; gostei do que li sobre esta sua experiência de "Managed & Unmanaged"!:-)

Hoje vejo antigos defensores do Java afirmar que C++ com BOOST e Smart Pointer é o melhor negócio para garantir a portabilidade do que usar Java, e cá entre nós sabemos que isto não é absoluto. Amo C++, curto STL, BOOST, STL e o Loki, mas há situações onde o C# vem bem acalhar, assim como o Java, VB.Net, Python entre outros assim como há casos que a Web se encaixa, outros que o Smart Client é a melhor arquitetura e por aí vai...

Amo um milenar haikai que diz que "para certeiro ser, consultar à todos você deve" e esta é uma verdade que nos revela a cada dia mais aboluta do que nunca.

Att.
[]s++
Guilherme | e-mail | em 27/07/2008 | #
Bom, 4 anos depois do Artigo, acredito que hoje já podemos falar que .NET é o presente.

Comecei trabalhar com .NET a 3 anos atras no final da era Visual Studio 2003.
Algo a dizer?
Nome:


Site:


E-mail:


Escreva o número vinte e seis:


 Não mostre meu e-mail no site, não serve pra nada mesmo...

Comentário





Os comentários devem ser sobre assuntos relativos ao post, eu provavelmente apagarei comentários totalmente offtopic. Se quiser me enviar uma mensagem, use o formulário de contato. E não esqueça: isso é um site pessoal e eu me reservo o direito de apagar qualquer comentário ofensivo ou inapropriado.
rebarba rebarba
  ::::