Back-End

12 mar, 2009

Curva de Aprendizado Java

Publicidade

A curva do aprendizado ainda é o grande vilão sobre o aprendizado e a utilização da tecnologias Java. Muitos empresas acabam selecionando erradamente outras tecnologias devido a este fato, como se aprendizado e produtividade fossem requisitos funcionais da aplicação. Não existem dúvidas de que ter uma equipe capacitada e produtiva são fatores fundamentais para o sucesso do projeto, mas goste ou não, não fazem parte de nenhum tipo de requisito. O sistema final deve ser entregue para o cliente na tecnologia que suporte seus “requisitos funcionais e não- funcionais” estabelecido pelo escopo, independentemente da capacidade ou produtividade de uma equipe de TI. Neste post eu gostaria de apontar um dos fatores de peso que cooperam diretamente para essa grande curva de aprendizado:

A tecnologia Java que foi completamente concebida em cima de conceitos e técnicas da Engenharia de Sofware e atualmente tem evoluído o cooperado para o seu desenvolvimento.

O que acontece na maioria dos casos é que o candidato a aprender Java acaba de deparando com um mundo totalmente novo e complexo, devido à falta de uma base sólida de conhecimento sobre o assunto. Ou seja, poderíamos afirmar inversamente que se uma pessoa tem conhecimentos básicos sobre assuntos relacionados com a ENGENHARIA DE SOFTWARE, com certeza não teria muitas dificuldades para aprender as implementações que as tecnologias Java faz da mesma. Fiz uma pesquisa e coloquei abaixo uma lista de 26 conceitos atuais e necessários sobre tópicos da engenharia de software que diretamente ou indiretamente estão intrínsecos em todas as plataformas de desenvolvimento das tecnologias Java:

1. Conceitos e Programação Orientado a Objetos – OOP

2. Programação Concorrentes – Multithread.

3. Análise e Projeto Orientado a Objetos – OOAD

4. Banco de dados Relacionais – SGDB

5. Banco de dados Orientados e Objetos – SGBDOO

6. Programação Transacional Local e Distribuída – ACID

7. Linguagem de Modelagem Unificada – UML

8. Frameworks (Intrusivo/Não-Instrusivos)

9. Mapeamento Objeto/Relacional – ORM

10. Arquitetura de Software – Estilos Arquiteturais: Camadas Lógicas Distribuídas

11. Padrões de Projeto

12. Desenvolvimento Baseado em Componentes

13. Injeção de Dependência – IOC

14. Programação Orientada a Aspectos – AOP

15. Programação Baseada em POJOS

16. Domain Models

17. Domain Drive Design

18. XML

19. AJAX

20. Web Services – WS

21. Simple Object Access Protocol – SOAP

22. Arquitetura Orientadas as Serviços – SOA

23. Web 2.0

24. Rich Internet Applications – RIA

25. Remote Procedure Call – RPC

26. Representational State Transfer – REST

A dica seria a seguinte: antes de entrar em detalhes específicos da determinada tecnologia em si, o candidato pode identificar os conceitos relacionados no contexto e procurar entendê-los de forma prévia e separada antes de entrar na programação pesada em si. Este caminho tem se mostrado muito interessante e a galera em geral tem conseguido bons resultados com isso. Bom, turma, não é necessário arrancar os cabelos achando que temos que saber tudo… acho que o ideal seria ir aprendendo conforme a necessidade aparece. Gostaria de deixar uma ótima frase do Steven John Metsker do livro PADRÕES DE PROJETO EM JAVA:

O desenvolvedor Java de sucesso é aquele que passa mais tempo lendo do que escrevendo código.

Me coloco à disposição para ajudar qualquer um que precise de dica sobre livros, materiais e links relacionados com os tópicos de engenharia de software descrito. E o post fica aberto para complementos e opiniões. Aquele abraço e até a próxima!