sexta-feira, 11 de maio de 2007

JavaFX - Killer Application?

A poucos dias foi lançado o JavaFX no JavaOne em San Francisco. Uma simples divulgação deixou toda a comunidade fervorosa, justamente pelo que promete ser o JavaFX. Agora, se ele vai ser ai é outra história.
Segundo este desenho da macro-arquitetura do JavaFX podemos ver a sua aplicação:
Será que ela será a Killer Application e solução definitiva? Ou será uma outra vergonha como o MIDP, que para interface é realmente uma vergonha?

Podemos ver seu uso em alguns demos listados na Home do Projeto. Eu achei beeem estrainho a forma como é feito isso (vide o primeiro demo). Pra mim uma maneira mais descente de se fazer, seria usando coisas que já existem hoje, principalmente para as definições de estilo, porque não usar o padrão CSS? Porque não usar algumas coisas como DIV´s? Porque não definir uma folha de estilos e você poder reusar isso? Pra que reinventar a roda? Aprender mais uma nova maneira de se fazer o que já consegue se fazer. Será que vai ser igual a programar em Swing? Cria botão, seta layout, seta posição, etc etc etc... aquela coisa massante e chata.

Uma das coisas que ainda estão no ar são: OpenLazlo e Sun com o projeto Orbit. Será que toda essa plataforma FX será utilizada em cima do lazlo? Seria legal, pois ele tem se mostrado bem portável e bem estável. Se não for usado, pra que manter então projetos paralelos?!
O que passa pela minha cabeça é que, a Sun nem sabe bem ao certo como será, mas lançou toda essa JavaFX para segurar um pouco o mercado e para que o povo não vá investindo tudo o que tem na nova MS SilverLight, Apollo, Flex, etc.

Conversando com o Erko hoje ele me mostrou várias coisas legais sobre essas tecnologias RIAs. Uma das coisas que pareceu bem bacaninha foi o tal do Flex, pois utiliza CSS por exemplo. Quem quiser saber mais sobre este tipo de assunto, aconselho a acompanhar o blog do cara, é bem rico neste conteúdo.

Bom, acho que agora é aguardar e ver que que vai rolar com tudo isso, e torcer para que seja realmente algo bom.

-----------
PS: Queria colocar mais uma opinião aqui, agora que dei uma olhada melhor no javaFX, neste Tutorial.
Eu achei Horrível a forma como codificar. Vejam este tutorial ai, e me digam o que acham... bah, se for assim, eu acho que não vai pegar muito não, tlvz até caberia dizer que já nasce morto... mass.... não sou o dono da verdade e tbm, o conhecimento que tenho sobre o javaFX é bem superficial então fica apenas como uma primeira impressão.
Até.

quinta-feira, 10 de maio de 2007

Como começar e como manter o foco (parte2)

Normalmente pessoas me perguntam como começar, pois se deparam com uma nuvem enorme de siglas que, vamos concordar, não são poucas. Mesmo que você pegue apenas uma tecnologia, ao exemplo de Java.

Como minha maior especialidade é Java, vou usá-la como exemplo para este post, voltando-me mais para web, sendo que é isso que está em alta hoje no mercado. Apesar de que para iniciar em programação não exista exatamente um caminho das pedras, vou tentar citar o que eu acho importante saber e em seguida como começar com java.

  1. Orientação a Objetos - Precisa saber muito bem. Não se engane, aprenda mesmo, aplique, leia muito sobre o assunto, aplique, refaça, mude, modele, remodele... Hoje, creio que o pior problema de programadores, é não saber realmente OO, acham que sabem, e criam sistemas que "desmoronam" mais tarde. A hora que vc disser, eu sei OO, to "bão" no negócio, então estude novamente tudo o que havia estudado e mais. Saiba como aplicar OO a sistemas, como desenvolver sistemas OO. Com este conhecimento, você será um bom profissional, note que nem estou falando em Java até agora.
  2. Design Patterns - Aquela coisa que para os iniciantes parece ser o "santo graal", não é nada de mais, são apenas formas de como se fazer as coisas, como modelar teu sistema, para que você consiga manter a qualidade e sobre tudo, eles são alguns padrões de como fazer as coisas, documentados por pessoas que passaram pelo mesmo problema, e descreveram a melhor forma de solucionar um certo problema. Lembre-se, não force o uso de um DP, mas sim, depois que você tiver a maioria deles bem estudados, e bem conceituados em sua cabeça, o seu uso será natural em seus sistemas. Note novamente que Java nem entrou ainda em seus estudos. Queria enfatizar que você irá ler muito até aqui, mas leia com atenção, não desanime porque ainda não está pondo a "mão na massa".
  3. UML - Acho bem interessante o aprendizado de UML e seus diversos diagramas, mesmo que inicialmente você não venha a ser um Analista/Arquiteto de sistemas, mas você irá responder a um, que, deus-queira, monte um diagrama de classes, de seqüencia, ... para que você possa trabalhar "consciente" do que está fazendo. Ainda não entramos em Java.
  4. Conceitos de Web - Se você irá trabalhar com Web, antes de aprender o que quer que seja, Java, .Net, Ruby, ou seja lá o que, aprenda os conceitos de Web. Como funciona, que tipo de protocolo usa, o que é um Request, Response, Session, métodos Post, Get, Head, etc. Ou seja, estude legal estes conceitos, pois muitos dos problemas que os iniciantes tem, são com estes conceitos.
  5. Plataforma Java - Este estudo não precisa necessariamente vir depois de todos os anteriores, normalmente ele vem seguindo em paralelo com eles. Porém ATENÇÃO, NÃO comece a desenvolver antes de ter aprendido os 4 primeiros. Aprenda o que é a plataforma completa, como ela está dividida, e então comece a aprender a linguagem em si, sintaxe, loops, if´s, coisas básicas. Normalmente, um iniciante se perde nesta parte, pois a Plataforma Java é bem abrangente. Um direcionamento profissional seria interessante, um curso, ou mesmo algum material disponível na internet, mas procure algo bom, existe muita coisa ruim pelo mercado. Eu sempre indico o material da Caelum, é o melhor material que eu conheço. Depois de ter aprendido bem a linguagem, existe algumas coisas ainda que são importantes, como:
    1. Collection API
    2. JDBC
    3. Thread e Sincronização
    4. ...
  6. Java WEB - Só então comece a aprender Java para web. Esqueça Frameworks, você não precisa deles agora, ainda não está pronto para eles. Aprenda primeiro, como é a estrutura de uma aplicação Java para Web, como fazer uma JSP, como fazer um Servlet e como fazer uma JSP e um Servlet conversarem, como fazer um Post, um Get e como trabalhar com Session. Depois, aprenda para que serve o tal arquivo web.xml e o que da pra fazer com ele, o que é um Filter, os Listeners possíveis e como aplicá-los. Tente então juntar os conhecimentos adquiridos até agora, OO, DP, UML e os Conceitos de Web com o Java e fazer um sisteminha simples para testes. Após feito e ele funcionando legalzinho, comece o mesmo sistema, de outra maneira, estudando e tentando melhorar alguns aspectos, tentando aplicar outros conhecimentos adquiridos com o primeiro projeto.
É..., não falei que iria ser fácil e que o tempo de estudo seria curto, porém, esta não é necessariamente a curva de aprendizado do Java em si. Mas sim a curva de aprendizado de um bom profissional. Não só na minha opinião, mas em todos os aspectos da vida, se uma coisa não tem uma base forte, o que for construído por cima dela, uma hora ruirá.

Enfim, esta é minha opinião hoje sobre o assunto, não sou o dono da verdade, porém hoje vejo que se tivesse seguido alguns caminhos assim, minha vida teria sido muito mais fácil =). Sei que alguns concordam, outros discordam, e ainda outros tem muitas coisas a acrescentar, mas isso foi o que me veio a cabeça em quanto estava escrevendo este post. Agradeço as opiniões.

quinta-feira, 3 de maio de 2007

Como começar e como manter o foco

Este post foi motivado por este post.

Manter o foco no começo é meio complicado, principalmente para aqueles que são "fuçadores", normalmente o cara sabe lidar com hardware, instalar programas, configurar, alguma coisinha de redes, alguma coisinha de programação e com isso também algumas coisas sobre Banco de Dados, o famoso "micrero". Antes de explanar sobre isso, queria deixar claro que quanto maior seu conhecimento melhor, quanto mais você conhecer melhor, pois ser extremamente especialista não é bom.

Nesta área de TI, temos muitas especialidades que requerem muito estudo para cada. Vamos citar duas, Desenvolvimento e Suporte (servidores, rede, etc). Estas duas áreas, podem ser consideradas "Macro áreas", pois dentro de cada área tem muitas subdivisões. Quando uma pessoa começa a trabalhar (quer deixar de ser micrero para virar um profissional de verdade) fica meio perdido sem saber pra que lado seguir, por isso antes de mais nada você precisa definir exatamente que lado quer seguir.
Digamos que você quer desenvolvimento. Ok, agora precisamos definir qual liguagem você irá adotar como a principal. Particularmente, acho necessário ter uma principal senão você não deixará de ser um micrero =) , porém você precisa aprender mais liguagens com certeza, para não ser uma ferramenta de uma única utilidade. Além de uma linguagem de programação, você precisará ainda interagir com banco de dados (quase que 100% das aplicações precisam). Então você acaba tendo que aprender SQL, um pouco de linguagem para escrever procedures e functions no banco de dados que você for trabalhar. Porém, é aqui que muitos desenvolvedores se perdem, muitos começam a partir para estudos aprofundados do banco de dados. Para isso existe um especialista chamado DBA. Normalmente um DBA, sabe tanto de banco de dados, como de infra-estrutura e um pouquinho de desenvolvimento. Porém não é trabalho de um desenvolvedor saber dessas coisas. (mas lembre-se do que falei antes de começar este texto.) Digamos então que você escolha Java para sua linguagem principal, você já terá muito estudo pela frente, porém, lembre-se de conhecer outras principais no mercado, como a plataforma .Net (C# de preferência), e ao menos alguma outra, uma emergente se possível, como o Ruby nos dias de hoje, ou ainda outra de sua preferência. Contudo evite aprender coisas que estão saindo de uso, principalmente no começo de sua carreira. Caso seja necessário depois, será bem mais fácil para aprender, no começo só irá confundir.
Concluindo, defina uma macro-área, especialize-se na MACRO AREA, assim que você se sentir seguro o suficiente, ou seja, estiver trabalhando com tranquilidade com isso, então parta para avançar em seus estudos. Normalmente leva-se no mínimo uns 3 anos para isso, então tenha paciência e aprenda o máximo que você conseguir, sem perder muito o foco.

Espero com este email ter ajudado um pouco, com minha pouca experiência. Pode ser que eu esteja errado, porém isso hoje me parece o mais correto. Qual sua opinião sobre o assunto?

------
devido ao primeiro post abaixo resolvi editar este post, e adicionar o link a este site:
http://mundo.it/blog/
Para mais artigos sobre esse assunto pesquisem por Carreiras, tem muita coisa legal.
Obrigado Yuri.

quarta-feira, 2 de maio de 2007

Até que ponto a flexibilidade é boa?

Atualmente estou com um projeto que "herdei" assim que entrei na empresa. O projeto tem algumas coisinhas bacaninhas, uma delas é um wizard onde o usuário monta as consultas no banco de dados, fazendo assim com que tenha uma grande flexibilidade a aplicação, porque seu uso basicamente consiste em consultar informações "coletadas".
Esta flexibilidade faz com que cada setor que comece a usar a aplicação, tenha a possibilidade de suprir suas necessidades criando as consultas que satisfazem suas necessidades diárias de informações. Porém, nem tudo são flores na vida de Joseph Klimber.... =)
Atualmente estamos com um sério problema que é a alta carga de processamento e alto "I/O Wait" no servidor. Isto é ocasionado pela fragmentação do banco de dados, mas principalmente por queries mal feitas. Porque? Porque estas queries são geradas por um wizard, e normalmente as queries não retornam menos de 10mil registros, então, juntando estas queries com a fragmentação da base, nos temos um alto I/O.
Como eu sou um cara eficaz (eficiente ou eficaz? essa é pro pessoal da wise), peguei as queries do sistema e tentei dar um trato, "tunnando" o que dava, porém cheguei na parte das queries pesadas do banco de dados, que eram aquelas consultas. Então me deparei com o problema que é o seguinte, como vou "tunnar" uma query que muda a toda hora? E mesmo que consiga estas principais, como ficarão as outras novas assim que o suporte acabar!?
Este foi um exemplo para que eu pudesse chegar ao ponto que queria, que é: Até onde flexibilidade realmente ajuda?
Deixar o usuário fazer o que quizer, ou deixar a aplicação "redondinha"? Por enquanto ainda acho que as duas coisas são inversamente proporcionais.
O que acha você?