Professor: 1) Faz sentido atualmente dominar os diagramas UML?
AkitaOnRails: “Dominar” talvez não (no sentido de saber cada detalhezinho de cada diagrama). Mas saber que existem, ter uma noção geral de cada um, e saber os mais úteis como Casos de Uso, Diagrama de Sequência, Diagrama de Estado, Diagrama de Classes, acho adequado e útil. E nunca como uma forma de desenhar TODO o software, mas algumas partes que talvez fiquem mais claras se diagramar primeiro.
Acrescendo aqui no post que muitos que não aprenderam a programar profissionalmente achem que "todo e qualquer" tipo de diagramação e planejamento seja desnecessário, e ainda acreditam (sem saber) que o tal mundo "corporativo" é todo dirigido por montanhas de diagramas e planos. E isso não é verdade. Claro que existem exceções mas no caso comum um programador precisa conseguir comunicar uma idéia mais do que somente por código, especialmente ao tentar explicar uma arquitetura complexa para uma equipe antes de começar a codificar. Não significa fazer diagramas pra 100% das classes, 100% dos estados, 100% das sequências, etc, mas sim diagramar o que for o mais crítico, o mais difícil de entender, e deixar o resto que vai emergir naturalmente durante a programação.
Professor: 2) Quais Design Patterns e conceitos de agile considera fundamentais para serem ministrados na academia? Ou isso também não é considerado importante?
AkitaOnRails: Design Patterns são importantes sim, mas como referência. Elas existem, são possíveis soluções mas devem ser avaliadas caso a caso. Já técnicas Agile só se preocupe com Extreme Programming. Todas as técnicas de XP são importantes. Scrum, Kanban, pode ser introduzido mas são desnecessárias. Sobre patterns:
- A Língua Portuguesa-Brasileira Pode Nos Confundir: Standard vs Pattern
- GoF Design Patterns - Sobreviveu ao teste do tempo?
- Design Patterns representam defeitos nas Linguagens
Acrescentando aqui no post: o importante é ensinar que não é necessário inventar tudo do zero o tempo todo (que seria um esforço redundante, dado que alguém já fez isso antes). Ao mesmo tempo é importante explicar que o que sabemos hoje não é perfeito, é apenas o que parece que funciona melhor e se alguém achar que tem um resultado que supera o que conhecemos, por favor nos mostre. Está muito em moda ficar falando em "Inversão de Controle" e pouca gente sabe o que isso realmente significa, apenas que isso parece melhorar a "modularização" - também sem saber porque modularizar é um benefício algumas vezes, ou nem tanto em outras.
E falando de Agile, recomendo ler estes meus posts:
Professor: 3) Será que a disciplina de Análise e Projeto OO faz sentido ainda hoje? O que seria interessante de ser abordado na mesma?
AkitaOnRails: Claro que sim, mas hoje em dia tem que ressaltar que OO (orientação a objetos) não é a única e nem necessariamente a “melhor”. Aliás OO só é interessante na academia se for pelos olhos de linguagens que de verdade exploram OO (Smalltalk, Ruby), programação orientada a classes é Java e C#, programação funcional (Lisp, Scheme), programação orientada a protótipos (parte de Javascript, IO), programação com aspectos de concorrência e atores (Go, Scala, Elixir/Erlang).
Acrescentando ao post, devo dizer que esse é o tipo de tema que não tem uma resposta "certa", qualquer tentativa de medir forças de uma lado ou de outro sempre vai virar meramente flamewar ou um medíocre bikeshedding. A realidade é que as fábricas de software vão continuar usando linguagens que tem bom suporte ferramental comercial como IBM Websphere, Microsoft Visual Studio.NET, etc. Tech startups, ou empresas menores e mais orientadas a tecnologias "best of breed" vão preferir soluções open source que, por muitas vezes, pode parecer até uma "colcha de retalhos". Agências e pequenas produtoras vão continuar usando o que oferecer o menor tempo possível de entrega, mesmo que seja sujo (pois campanhas publicitárias duram muito pouco), "quick and dirty", derivados de Wordpress e assim por diante.
Professor: 4) Definitivamente, ainda vale a pena ensinar Java na academia? Acha que Ruby e Rails ou mesmo Python e Django são mais adequados?
AkitaOnRails: Sim, vale a pena, mas não como a única solução pra tudo. Nem como um bom exemplo de linguagem OO. Apenas como linguagem comercialmente mais viável. Ruby e Python podem ser explorados no sentido de linguagens com tipagem dinâmica (e explicar a diferença de estática e dinâmica). Mas na academia, principalmente em Ciência da Computação eu sempre fui a favor de ensinar linguagens mortas (Smalltalk, Lisp, Eiffel) para justamente o aluno não cair na tentação de ficar somente com a linguagem que aprendeu na faculdade. Bacharelado deveria primar pela fundação e não pelo aspecto de “usar comercialmente”, que é foco de escola técnica e tecnólogo.
Acrescentando ao post, acredito que a Academia, principalmente nas cadeiras de Ciência da Computação, devem enfatizar a ciência. Se voltar 100% ao mercado é criar uma geração que vai se tornar obsoleta muito rápido e, pior, que não vai saber se atualizar sozinha. Num cenário hipotético, se 100% das universidades se voltassem 100% ao que o "mercado" precisa, em 10 anos teríamos toda nossa área de computação completamente sucateada. As universidades precisam elevar a "Ciência" da Ciência da Computação.
Aproveito para deixar posts que escrevi sobre os assuntos de faculdade e carreira:
- Devo fazer faculdade?
- Carreira em Programação - Codificar não é Programar
- Carta para um Jovem Programador Considerando uma Startup
Professor: Desculpe-me pelo longo email, mas infelizmente não houve oportunidade de conversarmos no evento...
AkitaOnRails: De forma nenhuma, se o assunto é relevante, vale a pena discutí-lo. E incentivo todos que forem em eventos que eu estiver, que me chamem se quiserem discutir formas que podemos ajudar a melhorar o ensino. Esse assunto nunca vai ser irrelevante.