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 existe dúvidas 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 requisitos de nenhum sistema. 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 SOFTWARE 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 a falta de uma mínima base de conhecimento sobre o assunto. Ou seja, poderíamos afirmar inversamente que se uma pessoa tem conhecimentos de básicos sobre assuntos relacionados com a ENGENHARIA DE SOFTWARE, concerteza 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 necessárias sobre tópicos da engenharia de software que diretamente ou indiretamente estão relacionado com 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ídas – 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 o seguinte – Antes de entrar na programação em java, o candidato tem que saber o mínimo básico e entender a filosofia do conceito antes de entrar na “programação pesada”.
Boa pesquisa e estudos para todos