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
Olá,
A curva de aprendizagem de java não é tão alta assim acredito eu, dada o mínimo de base. Não concordo no entanto com alista de requisitos descritos para engenharia de software. Muito do que está ali são coisas específicas de framework e padrão de projeto o que não se traduz diretamente em Engenharia de Software.
Por exemplo, não preciso saber XML para saber Engenharia de Software, assim como IOC, SOAP, Web 2.0, WS, AJAX e outros. Estas são tecnolgias específicas que na minha opinião acabam ajudando e afetando a aceitação de Java por empresas.
Deixe-me ilustrar: Uma pessoa dizer que sabe Java inclui no mínimo como construir uma classe, saber compilá-la e executá-la. O grau de conhecimento pode variar dai a um simples HelloWorld para um programa orientado a eventos por exemplo ou mesmo trabalhar com I/O e RPC. Saber como funciona Spring, Hibernate e etctera não é saber Java e sim saber frameworks. Isso acaba afetando um pouco o mercado já que não existe um profissional com conhecimentos gerais a ser procurado e sim um com conhecimentos específicos (ótimo para quem estuda e aprender hehe) o que modela o mercado obrigando não saber Java e sim frameworks.
Muita gente prefere o.Netpor exemplo devido a sua facilidade em integrar diferentes componentes e métodos de constrção de software simplesmente arrastando componentes da pallet para dentro da aplicação e “por mágica” tudo funciona. Java já é limitado nesse quesito por possuir muitos frameworks disponíveis; isso é ótimo em termos de flexibilidade da tecnologia (cada um usa o que acha melhor) mas horrível em termos de padronização de ferramentas (claro que saber tecnologia ganha de saber uma ferramenta em qualquer dia por qualquer padrão fora produtividade inicial).
Leonardo,
Mas para saber frameworks é necessário saber java, não concorda? Ou no minimo framework não será bem utilizado =D
Abraços,
Felipe
Mas para saber frameworks NÃO é necessário saber java !! Por exemplo vc pode saber oque é e como funciona um framework WEB MVC ou ORM. Independente da tecnologia que eles forem implementados sempre terão as mesmas características e funcionalidades…a unica coisa é que eles seram implementados de com tecnologias e linguagem diferentes…ai sim vc tera q saber a determinada tecnologia para usar….mas se saber os conceitos antes…tera uma média de ganho de aprox 60% de aprendizado.
[...] Fernando Franzini É java na galera « Curva de Aprendizado em Java [...]
nas empresas que possuem metodologia, a experiencia dos programadores é tratada pelo gerente de projeto, se a metedologia for baseada no rup. Na minha isso é tratado ainda bem
Realmente! Quando começei a estudar java ficava assutado com o número de termos e diferentes tecnologias que estavam relacionadas, ant, struts, maven, oo, ddd, bdd, tdd, junit… (poderiamos passar o dia inteiro citando outros termos). É uma imensidão de conceitos a serem aprendidos, e creio que esta trilha nunca vai chegar ao fim, daí se dá a constante evolução e melhoria na plataforma. Creio que o grande segredo para começar é não tentar abraçar o mundo, mas dar uma passo de cada vez!
[...] para leituras: Aprendendo Java Curva de Aprendizado Java Tecnologia Baseada em Especificações Explore posts in the same categories: [...]
Cara, vc tá acabando com o entusiasmo de quem quer partir pra java.
Se tiver que dominar tudo, aconselho a todos a estudar csharp.
Na minha opinião, o interessado tem que encarar java como uma linguagem de programação.
Com andamento do aprendizado, ir gradativamente evoluindo, dominio de OO. e etc.
Não devemos esquecer tb que dependendo da aplicabilidade, não se faz necessário dominar tanta coisa. Java é linguagem, mas podemos conquistar um universo muito grande, pois ela, se aplica em todas as áreas.
Dai Raimundo
Então amigo…o post foi apenas uma dica !!! Realmente vc não precisa dominar tudo !! vc pode optar por abordar as areas de interesse. Agora sobre o entusiasmo hehe realmente não fica legal….mais a verdade sempre é melhor que tudo…outra coisa…..eu discordo de TI !! Java não é só uma linguagem….java TEM um linguagem + milhões de coisas a mais…….agora para usar estas outras coisas….tem que saber a linguagem + OOP.
T+
Olha,
Para Java linguagem acho que apenas basta os dois primeiros itens, OPP e Multi-thread.
Para Java plataforma os demais tópicos são importantes, mas quem estiver começando não deve pensar que deve aprender tudo de vez. Muitos de nós o aprendizado foi sob demanda.
Vejo ai também a importância de uma formação em Sistemas de Informação ou correlatos, onde os aulos recebem a base sobre todos esses assuntos, tornando assim muito mais tranquilo o futuro aprofundamento, quando necessário.
É isso ai Achilles !! O camarada que esta iniciando não precisa e não deve abraçar o mundo de uma vez só !!! Cada um invista nos estudos de acordo com seu momento atual…que dai vc vai crescentemente acumulando conhecimento e concretizando as coisas. Mas meu post foi mais uma dica de forma geral !!!
Estou me formando agora em Sistemas de informação, no meu curso fiquei 4 semestres só aprendendo a linguagem JAVA fora os tópicos citados pelo “Fernando”. Tenho muita dificuldade ainda na linguagem, mas pretendo estudar uma coisa da cada vez tb, pois a linguagem é gigante e gasta tempo para aprendê-la. No futuro este profissional em Java será muito gratificado. Que linguagem… gostei muito!
Olá Fernando,
Achei seu post quase nota 10. Concordo com todos os pontos que você abordou, porém, alguns dos 26 podem ser abordados em diferentes escalas gradativamente, afim de não haver uma sobrecarga inicial. E acho essa escala começa pelo foco ao qual o profissional dará. Tirando essa observação, é isso aí mesmo.