| 1.1 A Era do “Generalismo”. | |
| 1.2 Contribuições da Plataforma Microsoft .Net | |
| Em VB.NET | |
| Em C# | |
| 1.3 – O Grande passo do CLR - Common Language Runtime. | |
| 1.4 – Olhando Pela “Janela”. |
Pode parecer estranho, mas o título deste capitulo é este mesmo!!!...Seja “Generalista e Sobreviva!!”
Em muitas palestras de “Gurus” de RH e Coaching, esta palavra é fortemente citada, o Generalismo, ou seja, saiba Tudo, mas não seja Especialista em uma única coisa. Pode realmente parecer muito estranho o que falo neste capítulo, mas esta é a resposta para a pergunta de vários desenvolvedores, e que por muito tempo em minha carreira como desenvolvedor procurei respostas. Perguntas como: A qual linguagem me dedicar? Em que sistema operacional devo ser Expert? Como sobreviver em um mercado altamente competitivo onde as tecnologias mudam “do dia pra noite” e onde meus conhecimentos -ontem tão valorizados e úteis - hoje são obsoletos e não tão valorizados assim?
Certa vez conversando com um companheiro de minha equipe que ganhou um livro de final de ano comentou, que em uma entrevista, ouviu o “guru” de Recursos Humanos e Recolocação Profissional indicar exatamente isso que estamos vivendo na Era do Generalismo. Isso vem muito de encontro com nós, desenvolvedores e profissionais da área de desenvolvimento, principalmente aqueles que se dedicam somente ao mercado de automação comercial (Entenda que quando digo Automação Comercial não desejo me referir apenas a frente de caixa, os PDVs, e sim todo BackOffice incluído neste desenvolvimento”). Isso é tudo o que necessitamos para sobreviver em um mercado onde a tecnologia e a informação muda constantemente, onde seus valores (e não cito os morais e sim os relacionados ao Desenvolvimento) são quebrados a cada lançamento de uma nova plataforma, de uma nova versão de sistema operacional de uma nova metodologia de desenvolvimento de software, de analise, de programação propriamente dita, obriga que você se re-eduque e tenha que novamente adequar-se a um novo método de trabalho, prototipação e desenvolvimento.
Por isso meu interesse que este livro possa ser de grande utilidade para aqueles desenvolvedores que, iguais a mim, não são especialistas em uma tecnologia, mas sim especialistas em um determinado assunto onde necessitam conhecer como aplicar tal tecnologia, como utilizar a linguagem e tirar o máximo de proveito dela em seu negócio, em seu dia a dia, na solução de seus pepinos e abacaxis.
Este tema poderia preencher várias e várias páginas e horas e horas de debates e estou certo que existem muitas pessoas que hoje são Especialistas em determinada tecnologia e estão muito bem profissionalmente, mas o incentivo que gostaria de deixar aqui é: Seja especialista em seu Negocio, e não na ferramenta que você utiliza para concretizar seu negocio, que em nosso caso é Software. Não é sem embasamento que chegamos a esta conclusão, basta olharmos a alguns anos atrás para Bug do milênio e nesta época os desenvolvedores em COBOL, RPG400, AS/4000 foram os mais cotados e mais valorizados do mercado durante o ano de 1998-2000, porque? Porque eram Especialistas em neste assunto, nestas tecnologias. Porém podemos observar que vários bancos, grandes empresas e instituições, após a Virada do Milênio reconsideraram em muito a infra que possuíam e resolveram migrar para tecnologias não tão especialistas assim, mas que de uma forma geral sempre teriam à mão profissionais qualificados para realizar tal tarefa. Sem duvida a plataforma Windows foi escolhida por Grandes Instituições. Qual a mensagem que está por trás deste episódio? Duas:
1) Se você é especialista, esteja preparado para a qualquer momento ver seus conhecimentos desatualizados pela metade juntamente com a valorização monetária deste conhecimento.
2) Se você é generalista terá um grande mercado em suas mãos, o que nada o impede de se destacar por ter um conhecimento mais profundo em determinada tecnologia, isso não é ser especialista, mas sim um “Generalista” Altamente Qualificado e com uma Visão prática e idônea na escolha e aplicação de determinada tecnologia.
O Generalismo ele é fortemente aplicado quando você ocupa e assume um cargo de Gerencia ou Coordenação de uma equipe de desenvolvimento de determinada empresa que presta serviços diferenciados e variados na área de software. O Generalismo ajuda na pratica e aplicação do principal conceito em coordenação e gerenciamento o “Nose In, Hands Out”, “Meta o Nariz, mas não Faça”. Isso é altamente vivido em níveis de coordenação de equipes de desenvolvimento, diga Como, Quando e a Melhor maneira de faze-lo, mas não faça – até porque existe uma equipe ara isso. Para que decisões do tipo Como e Qual caminho a seguir serem tomadas de forma assertiva é necessário que tal coordenador tenha um conhecimento GENÉRICO ou que ele seja um GENERALISTA em sua atividade, porque e como? Simples, vamos dar um exemplo pratico de Generalismo em nossas atividades e para tal vamos considerar os dois postos, o Coordenador e o Programador.
Para que o Coordenador (analista de sistemas, especialista técnico Sênior, etc.) tenha tomar decisões e qual a melhor linguagem, tecnologia, Sistema a ser adotado para a construção de uma solução a um caso apresentado por um cliente, o mesmo terá de conhecer, não profundamente, mas conhecer tecnologias diferenciadas aplicando-a para a solução do problema, talvez não é necessário que tal Analista saiba como efetuar uma operação de hardware mais intrínseca ou no nível de codificação, mas ele necessitar saber e passar tal confiança que determinada tecnologia (Linguagem de programação, sistema operacional ou hardware) é a melhor opção para ser utilizada em tal caso, explicando os porquês e o que tal tecnologia permite, indicando até mesmo exemplo – trechos de código fonte, Estudos de caso – onde provam que determinada tecnologia é a ideal para a solução do problema proposto.
Existe formas de superação nesta área, e a superação acontece quando o Analista consegue até mesmo especificar funções detalhadas de como chegar a tal resultado, para isso não necessariamente necessita ser um especialista em tal tecnologia, caso contrario seu senso interno de desenvolvedor não permitirá aplicar a regra Nose In Hands Out, e sim necessita saber como identificar que não está indo pelo caminho correto e qual caminho é o correto a ser seguido. Não necessariamente necessita ter conhecimento de como efetuar um OR exclusivo ou como fazer e aplicar o Polimorfismo e a Herança múltipla de classe base em determinada linguagem, mas necessita conhecer e saber que o uso da Herança Múltipla de uma Classe Base permitirá que o programador trabalhe com vários Objetos derivados da classe Base sem que a Classe Base tenha sua Copia duplicada ou triplicada em memória de acordo com a quantidade de objetos criados. Resumindo, saiba qual caminho a seguir, mas não especificamente como fazer.
Não estou querendo dizer aqui que o Analista ou o Coordenador tenha de estar por fora de como codificar, não é isso, a idéia que desejo transmitir é que você deve ter uma visão mais genérica de qual solução utilizar, ter na mente e em suas mãos conhecimentos e ferramentas que te permitam escolher e apresentar uma melhor solução. O Fato de ter proficiência na codificação ou não é somente uma questão e tempo, que você levará para se adaptar ao estilo da linguagem e como alcançar os resultados esperados.
Para o desenvolvedor em si, isso também é preocupante, ser Generalista pode significar não conhecer profundamente tudo, mas um pouco de cada coisa, e ser Especialista pode significar estar amarrado a apenas uma tecnologia vendo seu Know How a cada dia na dança das cadeiras quando uma nova linguagem de maior potencial é lançada.
Em ambas as afirmações destacam que o fato do desenvolvedor ser Generalista não significa conhecer de tudo um pouco e sim de quase tudo o bastante e necessário para desempenhar seu papel e alcançar seus objetivos, isso vai de encontro com o que comentamos anteriormente, conhecer seu negocio e não a ferramenta mais que seu negócio, exemplo se Você trabalha na Área de Geo-Processamento porque seria interessante conhecer como desenvolver uma dll de Comunicação para a impressora Fiscal? Em Nada, apenas ampliaria seu conhecimento, mas que com o tempo, pela falta de pratica no dia a dia ficaria no esquecimento onde este tempo poderia ser gasto em como aplicar o Geo-Processamento em outras plataformas seja de sistema operacional sejam de linguagem de programação, por isso para a “Galera que Escova Bits” deixo a seguinte mensagem: Conheçam Bem seu Negocio, pratiquem e dominem “N” Ferramentas para lançar mão das mesmas, fazendo com que seu negócio seja perpetuado e ao obsoleto pelo uso muito especifico e sem crescimento de determinadas tecnologias.
É interessante quando percebemos que a tendência do cenário tecnológico realmente está cada vez mais para o Generalismo, em linguagens de programação, mesmo que não percebamos isso de forma direta ou abertamente declarado, mas se olharmos para apenas 10(dez) anos atrás na evolução que a informática e o desenvolvimento de software teve, percebemos que esta cada vez mais pequena a diferença entra as linguagens de programação, já foi a época que para você realizar determinadas operações de Hardware ou até mesmo operações mais complexas de software era necessário o uso de uma linguagem especifica, pois as linguagens RAD (Rapid Developer Aplication) não suportava algumas operações mais baixo nível, ou um acesso mias restrito ao hardware. Hoje em dia não escutamos frases como “Eu uso determinada linguagem porque ela permite isso ou aquilo outro... pois a linguagem X não permite isso”. Cada vez mais as linguagens visuais estão se potencializando e o diferencial esta na aplicação da linguagem em seu negocio, ou seja, É interessante quando percebemos que a tendência do cenário tecnológico realmente está cada vez mais para o Generalismo, em linguagens de programação, mesmo que não percebamos isso de forma direta ou abertamente declarado, mas se olharmos para apenas 10(dez) anos atrás na evolução que a informática e o desenvolvimento de software teve, percebemos que esta cada vez mais pequena a diferença entra as linguagens de programação, já foi a época que para você realizar determinadas operações de Hardware ou até mesmo operações mais complexas de software era necessário o uso de uma linguagem especifica, pois as linguagens RAD (Rapid Developer Aplication) não suportava algumas operações mais baixo nível, ou um acesso mias restrito ao hardware. Hoje em dia não escutamos frases como “Eu uso determinada linguagem porque ela permite isso ou aquilo outro... pois a linguagem X não permite isso”. Cada vez mais as linguagens visuais estão se potencializando e o diferencial esta na aplicação da linguagem em seu negocio, ou seja, como potencializar o uso da linguagem para seu negocio e para isso você não necessita ser um Especialista, mas sim ter uma visão geral e aberta de com aplicar – daí o diferencial de quem é Generalista.
Neste caminho, a linguagem de programação passou a ser uma escolha balizada em Velocidade, Portabilidade, Potencial oferecido, suporte, perpetuação, escalabilidade, etc.. Mas, o fator “Quantidade de profissionais especialistas no mercado”, não é um fator que decide qual linguagem utilizar, e por incrível que possa parecer, este já foi um dos primeiros fatores a serem considerados quando uma empresa de tecnologia decidia-se por qual tecnologia aplicaria, qual seria utilizada e em qual investiria os recursos tempo e dinheiro para gerar o produto. Hoje não mais pensam assim as empresas que olham para frente de forma arrojada e empreendedora, o fato de estarem utilizando uma tecnologia hoje, não impedem de estarem investindo em outras tecnologias que seguramente - mesmo que não sejam utilizadas – dão base para idéias e métodos de aplicação e desenvolvimento de seus produtos finais.
Todas as empresas estão hoje em busca de crescimento, e claro, resultados financeiros; Costumo dizer nos encontros de Software Houses que a parceria existe para um crescimento mútuo e não apenas unilateral e também para um crescimento financeiro, pois nenhuma empresa – Não Filantrópica – esta no mercado de Automação Comercial, por exemplo, apenas para Defender as Baleias. A Microsoft com a Plataforma .Net está fazendo isso, é lógico que por trás de tudo isso existe o interesse de uma mega empresa como a Microsoft em fidelizar desenvolvedores para seu sistema operacional e suas ferramentas de desenvolvimento, porém é de se tirar o chapéu, como diz o ditado popular, para a iniciativa Generalista da Microsoft em estandardizar ou padronizar de forma genérica o trabalho do desenvolvedor na nova Plataforma .NET, onde através de um FrameWork é possível que você utilize sua experiência em determinada linguagem, aplicando-a para o que você desejar, WEB, Aplicações Desktop, acesso a hardware, Apis etc...
O poder que está sendo colocado nas mãos dos desenvolvedores através da Plataforma .Net é sem duvida um passo grandioso para a concretização do Generalismo onde será valorizada não a sua experiência em VB ou C ou C#, mas sim como você usa estas linguagens em seu negocio e a capacitação que você possui para integrar o VB.Net com o C# para uma Aplicação WEB, ou como você utiliza o VB.NET como VSC++ para maximizando velocidade, portabilidade e a escalabilidade de seu produto, para isso sua especialização não deverá ser em uma linguagem, mas sim você devera possuir uma Generalização em como aplicar as diversas linguagens para seu negócio.
Para explicar melhor o funcionamento do.NET Framework observe o diagrama da figura 1.1, Este diagrama representa bem o que estamos falando de único método de trabalho baseado em sua sintaxe. Claro que todas as linguagens continuarão a ter suas nuances e seus métodos específicos, bem como biblioteca e classes, mas para termos uma idéia do poder de fogo do.NET Framework, os aplicativos que vamos construir tem seus acessos a banco de dados e trabalho com Forms, os mesmos métodos, componentes e propriedades do VB.NET e do C#, ou seja, toda a interface esta "padronizada" para ser aplicada na linguagem em questão.
Figura 1.1
Um clássico exemplo é o uso dos NAMESPACES, que devem ser importados tanto no VB como no C#. Esses namespaces possibilitam acessar a funcionalidades do sistema com a mesma sintaxe, com os mesmos métodos e propriedades, como é o caso de um MessageBox.
No código seguinte temos dois exemplos, que vão verificar se o usuário pressionou o botão OK ou o Cancelar, um em VB.NET e outro em C#, embora a Classe MessageBox permita 12 tipos de sobrecarga. Vamos a uma delas:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click If (System.Windows.Forms.MessageBox.Show("Pressione OK ou Cancelar", "Teste", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) = DialogResult.OK) Then System.Windows.Forms.MessageBox.Show("Usuario Pressionou OK") Else System.Windows.Forms.MessageBox.Show("Usuario Pressionou CANCELAR") End If End Sub |
private void button1_Click(object sender, System.EventArgs e) { int Retorno; if(System.Windows.Forms.MessageBox.Show("Pressione OK ou Cancelar", "Teste", MessageBoxButtons.OKCancel, MessageBoxIcon.Question); if (Retorno==1) System.Windows.Forms.MessageBox.Show("Usuario Pressionou OK"); else System.Windows.Forms.MessageBox.Show("Usuario Pressionou CANCELAR"); } |
Observe o uso o System.Windows. O system é um dos principais namespaces principais que sempre estará presente em seus projetos. A raiz deles é o System do qual derivam os namespaces que necessitamos para operações corriqueiras em nosso software, como é o caso de um MessageBox. Mas a portabilidade e a única prototipação oferecida pelo.NET Framework não são apenas essas rotinas. O ADO.NET também está incluído. O OLEDB para acesso nativo aos bancos de dados também está incluído, ou seja, desde sua linguagem de programação, com seu conhecimento você consegue executar as tarefas necessárias com o menor esforço, conhecendo bem os NameSpaces, é claro.
No código anterior observamos que o System.Windows.Forms.MessageBox não mudou para ambas as linguagens. A sintaxe continuou a mesma, apenas aplicamos os ";" que o c# necessita.
Figura 1.2
Figura 1.3
Na figura 1.2 temos os NameSpaces automáticos importados quando solicitamos um projeto Windows ao VB.net.
O uso desses namespaces nos facilita também na busca de recursos e funções do Sistema Operacional para acesso a Apis, etc. O Intellisense também é uma ótima ajuda para declarar variáveis e encontrar funções, propriedades e métodos necessários.
Estes métodos e formas de declarações, a metodologia em si, é a mesma em todas as linguagens que rodam no FrameWork.NET, desde o ASP.NET até o C#, a metodologia em si é a responsável para que você possa utilizar a plataforma em distintas linguagens.
Tudo isso é possível porque o Common Language Runtime permite e fornece sistemas de tipos comuns para todas as linguagens baseadas no .NET Framework.
O CLR interpreta todas as classes de Messages, ADO, OLEDB existentes, por isso o Vb teve que passar por uma enquadre nesta nova plataforma para herdar toda a potencialidade que o .Net FrameWork possui. Com isso conseguimos ter várias equipes trabalhando no mesmo nível de sistema, com o mesmo entendimento e talvez em um futuro próximo com a mesma qualificação profissional, .NET Framework Professional.
Como funciona a compilação dos programas baseados na plataforma.NET? É bem simples. O CLR é uma espécie de Virtual Machine para as linguagens de programação.
Veja como funciona o ciclo de desenvolvimento até a execução do programa no diagrama da figura 1.4 seguinte.
Conforme podemos observar, o diagrama mostra claramente que o desenvolvimento inicial pode ser em qualquer linguagem baseada no .NET Framework que o resultado final será o "mesmo", ou seja, na fase de execução será abstrato para o Sistema Operacional em que linguagem foi desenvolvida tal executável.
Isso acontece porque a compilação não gera um executável completo com todas as informações binárias necessárias para sua execução. Gera na verdade um IL (Intermediate Language) que em tempo de execução inicial ou do StartUp do programa passa pelo CLR que transforma em código nativo executável. Isso acontece não passo a passo e instrução a instrução, como nas linguagens interpretadas e como era no VB6, mas uma única vez, quando o programa é executado.
Isso permite que o código gerado pelos compiladores seja independente do hardware e interoperável independente da linguagem de programação, além disso, possibilita que o CLR faça adequações e otimizações para o hardware em questão.
Este processo visa garantir também que o programa esteja alocando as devirás áreas de memória, chamadas de objetos, pois antes da execução do programa o CLR efetua essa verificação para transformá-lo em código nativo executável.
Figura 1.4
Esta iniciativa de se aproveitar a experiência em determinadas linguagens como o C (C#.Net) o VB (VB.Net) o Java (J#.Net) o Asp (Asp.Net) e outras linguagens que já estão rodando no FrameWork é sem duvida uma iniciativa que permite que você seja especialista em seu negócio, utilizando a ferramenta necessária para construir seu produto e oferecer uma solução adequada as necessidades de seu cliente. Com isso o domínio excessivo de uma determinada linguagem, antes cultuado e altamente valorizado, passa a ser menos importante, sendo dado um maior valor a como você conhece seu negocio a ponto de utilizar bem a ferramenta que você conhece em prol do crescimento de seu negocio, e sua adaptabilidade em aprender rápido outras tecnologias que podem vir a re-direcionar seu negocio.
Adaptabilidade e Generalismo andam juntas, sem duvida. A capacidade de se adaptar sem ter pudor ou amor a determinada tecnologia, pode parecer cruel, mas é assim que o mercado, que os clientes exigem de você. Isso está envolvido você estar “Up-To-Date” em tecnologias de desenvolvimento de software, isso envolve você estar amarrado com parceiros que tenham crescimento sustentável e, por sua vez, tecnologicamente dinâmicos, que não para, no tempo ou que não estão correndo atrás do mercado mas sim correndo na frente do mercado e antecipando-se as necessidades do mercado.
A Plataforma.NET parecer encontrar este caminho para nós desenvolvedores, no ultimo developer days em São Paulo (2002) foi comentado que até mesmo a Borland esta entrando e preparando o Delphi para rodar no FrameWork!! Isso sem duvida e enxergar longe e ter em mente que existe a necessidade não de estarmos amarrados a uma única tecnologia, mas a necessidade de escolhermos qual tecnologia melhor se encaixa em nosso negócio, que vce melhor produz e utilizá-la em favor de nosso negocio, da necessidade de seu cliente, esta é a diferença, isso é Generalismo Aplicado.
Poucos são os empresários da Área de software que enxergam isso, converso com muitas, muitas empresas de software em minha atividade e vejo muitas delas estarem literalmente amarradas a tecnologias de ponta, excelentes, mas que só dominam e apenas vivem desta tecnologia. Isso impede que olhem pela janela e vejam o quanto de oportunidades outras e novas tecnologias podem acrescentar produtividade e crescimento sustentável a seu negocio. Quando falamos em “Olhar pela Janela” não é ir apenas em uma palestra ou em lançamentos ou Key Notes de empresas que estão divulgando suas ferramentas, digo em estudar, comprar, investir e testar ferramentas de desenvolvimento que podem contribuir para o crescimento de seu negócio, ou seja, use todo o leque de tecnologia existente hoje a seu favor, para o crescimento de seu negócio, já foi o tempo em que amigos meus de curso tinham brigas extensas com argumentos altamente técnicos sobre quem era o melhor o VB ou o Delphi? Ambas são linguagens extremamente interessantes e produtivas, mas cabe a você verificar como aplicar melhor esta tecnologia em seu negocio sem deixar de Olhar Pela Janela.
Neste incentivo de..“Olhar pela Janela”..Convido vocês a tirarem o máximo de proveito deste livro onde procuro explorar o uso das ferramentas.NET na automação comercial, programação em microterminais, uso de tecnologias antigas (Como os MicroTerminais) altamente integradas a tecnologias de ponta com a incrível plataforma.Net.
Talvez, para você leitor, esta pode ser a oportunidade para dar uma olhada pela Janela e estudar um pouco novas tecnologias, integrá-las e utiliza-las em seu negócio, a favor de seu crescimento. Por isso procurei neste livro ser GENERALISTA, vamos falar linguagem C (DOS – Bom e Velho DOS, em C++ veremos um pouco de orientação a objetos, o uso do VB.NET na Automação Comercial com TEF, impressoras Fiscais, Leitores de Código de Barras, etc.. Uso do C# em Aplicações Desktops, etc.. tudo isso nos ajudará a conhecer mais sobre tais ferramentas e como aplicá-las no dia a dia de nosso negócio.
No começo falaremos sobre programação de sistemas em C, para termos uma base mais sólida sobre como as APIs funcionam, as Interrupções de Hardware são geradas e como podemos entender tudo isso aplicando a nossa plataforma RAD de desenvolvimento.
Espero que gostem deste livro, que considero um resgate ao passado - e esta pode ser a oportunidade para muitos desenvolvedores que não vira isso na faculdade mas gostaria de conhecer - e uma viagem ao “futuro imediato”, a plataforma .NET.
Claudenir Andrade é formado pela Academia de Sistemas Informáticos de Madrid, trabalha com automação comercial há Nove Anos anos, foi responsável pela Homologação e aprovação de ECFs Brasileiros em Paises como Equador e Venezuela, gerencia a equipe de desenvolvimento da Daruma Automação, autor do primeiro livro de automação comercial no Brasil – “Automação Comercial com VB.Net e C#”. É MVP da Microsoft, Está criando e definindo o Modelo XML para Automação Comercial, escreve artigos para o site MSDN e pode ser contatado pelo e-mail – (claudenir@daruma.com.br.)