iquei pensando nisso após algumas threads. O que se deveria aprender numa facudlade dessa? Acho que apesar de algumas discord6anciasbásicas todos temos um curriculum comum para Ciência da Computação, mas e TI, PDD, Análise de Sistemas ou seja lá como chamam essa semana?
O que essa facudalde deveria incluir? Como deveriam dividir as áreas de conhecimento? Quem estes cursos procuram formar?
Quando eu estava na facudlade eu pensava bastante sobre isso e pensei em um modelo de 4 anos. Nos primeiros dois anos o aluno deveria aprender sobre lógica, matemática e sobre sua ferramenta principal: programas. Nada de aprender Java ou C#, um curso com foco nos dierentes paradigmas e como eles resolvem seus problemas, bem ao estilo SCIP mas pegando bem mais leve, exemplos que não envolvam tanto matemática e mais problemas de modelagem de domónio.
Nos quatro anos seguintes eles teriam uma boa introdução à como empresas funcionam (Capitalismo Moderno 101), tópicos de engenharia de sotware como aquiteturas e padrões e metodologias de desenvolvimento de software. Tudo com muitos exercícios práticos para validar e não deixar enerrujar o conteúdo dos primeiros anos.
Não sou educador acadêmico e não sei se isso é o ideal do ponto de vista de cosnrução do indivíduo mas eu recomendo esta trajetória para alguém que quer aprender desenvolvimento de sotware.
Talvez uma idéia melhor sobre sistemas corporativos e empresas de uma forma geral, sei lá, talvez eu esteja falando besteira, mas acho que às vezes as facu’s se preocupam mto na parte técnica (que não deixa de ser bom) e acabam por não dar uma visão de aplicações robustas no mundo real.
Eu dei a sorte de conseguir um estágio em uma empresa de automação comercial quando ainda estava no início do curso e isso me ajudou mto ao longo dele. Mas quando me formei, percebi que mtos dos meus colegas tiveram dificuldades de entrar no mercado até por falta de conhecimento específico em certos tipos de aplicação.
Talvez estes tópicos sobre determinados domínios pudessem sem aplicados em disciplinas opcionais. Assim, um aluno que se interesse mais pelo mercado, aprenderia os padrões de arquitetura mais comuns em aplicações empresariais, design patterns (talvez essa devesse ser uma disciplina básica. aliás, duas disciplinas.) como funciona uma empresa. Outros alunos, que quisessem seguir carreira científica, estudariam mais matemática, se aprofundariam em IA, Grafos e tópicos avançados de OO, por exemplo.
A idéia é dar uma formação básica para todos e uma mais especializada, nos dois últimos anos, para cada um, de acordo com sua área de interesse.
Hum, como esse tipo de formação é “manjada” pelas universidades, creio que o que se deve aprender numa faculdade de TI possa ser focado nos erros mais cometidos por alunos. E sabemos que esses erros são muito mais voltados à organização do conhecimento para produzir produtos do que o estudo de casos práticos.
Só dando um exemplo, aqui no GUJ existe um longo tópico sobre ‘Códigos Toscos’ e praticamente todos os erros que aparecem ali são ocasionados por falta de organização/exposição de conhecimento.
Muitos programadores não possuem formação matemática adequada e trabalham na área. Muita gente não conhece e nem precisa conhecer tudo que é necessário. O que é imprescindível para evitar erros grosseiros como é visto no referido tópico de códigos toscos é saber usar o artifício da lógica, que é um cerne muito mais amplo que o da matemática.
Muitos profissionais que não usam cálculos de forma massiva e complexa (administradores, advogados, por exemplo) não deixam de usar da lógica para tomar decisões. E o que faz um bom profissional é organizar suas idéias para poder fazer a coisa certa. Não é a toa que existem várias matérias de lógica organizadas em cursos de filosofia e o curso de computação é enquadrado num curso de bacharelado, assim como o filósofo também o é.
Até que se poderia arriscar uma ementa para um curso que usa da lógica como ferramenta de trabalho (é isso que fazemos no nosso dia-a-dia, certo?) que reflita nossa realidade, alguma metodologia que descreva o que fazemos: Um aprendizado incremental e iterativo para organizar e estruturar nosso conhecimento no assunto.
Será que dá pra bolar uma metodologia semelhante ao XP aplicada ao ensino, e dar a fatia de tempo necessária para os tópicos que realmente importam?
Nesse caso, eu arriscaria em mudar a divisão desse tempo proposto pelo phillip em intervalos mais curtos e com um ciclo de revisão mais frequente. Tive alguns professores que ensinavam dessa maneira, posso dizer que aprendi porque não esqueci, eles sempre lembravam e linkavam a importancia da teoria para compreendermos porque existe a teoria e a prática, e porque a implementação de um modelo é um barco cheio de remendos se voce não organizar seu design em conjunto com o mesmo.
Proteu, IMHO a questão da lógica deveria ser um ponto que tem que ser abordado muito antes no ensino de um indivíduo. E quando eu falo antes, eu digo Ensino Médio. No entanto, não como matéria de técnico, mas sim como matéria de “núcleo comum”, como matemática, portugues etc. Lógica não é algo necessário apenas para programadores. É uma coisa comum a muitas áreas (quiça TODAS).
Portanto, minha opinião é essa, lógica deveria ser ensinado no ensino médio, como uma matéria a parte.
Com relação aos pontos que você citou que estão sobrando. Eu ainda citaria um que me incomoda bastante:
Alunos que só reclamam da vida e não gostam de estudar ou ler.
Conheço muitas pessoas com esse perfil, e que eles me desculpem, mas se hoje em dia você não tiver disposição para ler um bom livro de 500-600 páginas e em inglês, me desculpe, mas você nunca será bom. É comum ver caras que falam: “Ah, eu sei XXX (coloque qualquer linguagem aqui), porque eu vou precisar aprender outra coisa (uma metodologia qualquer, ex. Scrum, XP, DDD)”. Essa é uma mentalidade muito pequena e esse profissional está se gabaritando para vir um simples robô. (Talvez venha daí a idéia de que software esteja virando commodity, mas isso é assunto para outra discussão).
Philip, me permita dar como exemplo a faculdade que eu estudo. A grade curricular basicamente no primeiro ano (o curso é anual e de Sistemas de Informação) há lógica, algoritmos em C (que auxilia um pouco para evitar aqueles códigos toscos que o Proteu citou), cálculo, e há também matérias de administração, que dão uma boa visão de domínios diferentes, que se o aluno tiver interesse em se aprofundar pode agregar muito pro conhecimento dele.
No segundo ano é introduzido java como linguagem de programação, e aí morre o problema na minha opinião, orientação à objetos é muito mal dado nas faculdades (como foi dado para mim), e o cara sai fazendo código estruturado e funcional com Java, achando que está abafando.
Durante também no segundo ano ainda temos Engenharia de Sw, que é um apanhado geral de várias coisas, temos CMMI, CMM, RUP, XP, Scrum e também no final alguns conceitos como testes. Claro, NENHUM visto profundamente, mas os conceitos apresentados na época realmente condizem com a realidade do assunto.
É também apresentado no segundo ano estruturas de dados, como listas ligadas etc. (tudo em C).
No terceiro ano, engenharia de SW passa o ano inteiro falando de RUP (e acredite se quiser, o professor sabia que RUP não era Waterfall e até DESTACAVA isso quando falava, destacando sempre aquele gráfico clássico (http://dn.codegear.com/article/images/33319/RUP.JPG). Nesse período aprendemos UML (casos de uso, d. de sequencia, d. de classes, d. de estados etc).
Durante o mesmo terceiro ano, linguagem de programação passa para a Web, e utilizam Java para isso. Apresentam primeiro os conceitos básicos de aplicações action-based, servlets, tags e jsps (com muito “Smart UI” que Eric Evans me perdoe). Depois foi apresentado JSF, conceitos básicos de component based. Mas nessa altura os alunos já estavam em sua grande maioria perdidos, porque sentiam falta de orientação à objetos do segundo ano. E acredite, eu via muita coisa “estranha” sendo feita pelos alunos (de vez em quando até mesmo por mim).
No terceiro ano há uma continuação de estrutura de dados, com alguns algoritmos mais legais, como Djikstra para caminhos em grafos etc.
No quarto ano há Inteligencia Artificial, Comp. Grafica e uma matéria que gosto muito que é Empreendedorismo (afinal o curso é sistemas de informação).
Enfim. Minha conclusão é que falta apresentar aos alunos antes das linguagens de programação (java, .net ou seja lá o que for) os conceitos de OO. Pessoas saem da faculdade fazendo código procedural com java por que falharam em aprender OO (seja por culpa da faculdade ou seja por culpa deles mesmos que nao correram atras mesmo com a faculdade falhando em ensina-los).
Com relação a conhecer diversos domínios, acho que as matérias focadas em administração dão um bom entendimento disso, e no caso de Engenharia de SW no terceiro ano, tivemos vários exemplos de modelagens de domínios diferentes (claro que não seguindo DDD ou MDD, mas isso costumo dizer que é apenas questão de correr atrás do conhecimento, pois, com os conceitos básicos de modelagem (corretos) você consegue evoluir tranquilamente para conceitos mais complexos e interessantes).
Acho também que as faculdades estão formando robozinhos digitadores de código, que pouco se interessam por negócios e só se preocupam com código, código e mais código. Código não é tudo na vida, é legal, bom e tudo mais, mas sem um conhecimento de negócios e domínios, você apenas será um mero digitador.
Bom, devem estar faltando alguns acentos e vírgulas devem estar em locais errado, mas IMHO esse é o meu ponto de vista.
Abs.
[Editado] Tinha escrito “commodite” ao invés de “commodity” [/editado]
Seria interessante uma disciplina aonde os alunos tivessem que desenvolver novas features em cima de um sistema legado feito por uma consultoria 3 letras cheia de POG por todo o lado e abuso de singletons e varios comentários “NÃO APAGUE ESSAS LINHAS!”.
devemos separar perfil profissional de conteúdo programático, para quem quiser, o MEC disponibilizou o catalogo nacional de cursos de tecnologia que deve ser o referencial da educação profisional superior, quanto aos cursos de bacharelados, existem as diretrizes curriculares que também delimitam e descrevem com clareza a formação.
Sou contra concentrar a teoria nos primeiros anos porque o curso fica com pouca motivação.
Sou a favor de que todos comecem com noções de hardware e de como a CPU processa cada instrução mas sem fazer como antigamente que se ensinava linguagens de montagem.
Sou a favor de que todos aprendam boas noções de rede. Falo tanto aqueles que pretendem seguir carreira de administrador de redes como os que vão desenvolver sistemas (todos se baseiam em redes)
Sou a favor de que todos aprendam sobre banco de dados, mesmo os que não vão ser DBAs
Sou a favor de que todos aprendam metodologias de desenvolvimento e gerenciamento de projetos, tantos os ágeis como os outros.
Sou a favor de que todos aprendam linguagens como Java e C#, mas também Ruby, Erlang, Scala, Haskell, etc.
Sou a favor de que frameworks como Rails, Spring, etc. não façam parte do curriculum obrigatório mas que sejam ensinados em cadeiras opcionais ou extra curriculares.
Sou a favor de que todos aprendam um mínimo de matemática e que tópicos especiais sejam sejam ensinados em cadeiras opcionais ou extra curriculares. Mas lembro que saber matemática é fundamental em algumas áreas, inclusive para fazer joguinhos.
E quer a faculdade estimule a leitura de bons autores e que tenha uma boa biblioteca disponível aos alunos (mas sem permitir xerox).
É interessante, pois, estou no último ano e existem alunos na minha sala que não sabem normalizar um banco de dados. E olha que não são poucos e a maioria dessas pessoas dizem que trabalham com desenvolvimento de software.
Ahhh, antes que eu me esqueça… essas pessoas trabalham numa empresa de 3/4 letras.
[quote=Luca]
E quer a faculdade estimule a leitura de bons autores e que tenha uma boa biblioteca disponível aos alunos (mas sem permitir xerox). [/quote]
Isso é um problema em faculdades que não são específicas de informática (apesar que nelas também podem ocorrer). Muitas bibliotecas possuem disponíveis apenas títulos de outros cursos ditos mais populares, como direito, letras etc. As vezes, sobra só uma pequena seção no fundo do corredor aonde caem goteiras com os livros de informática.
Isso não é curso, é terrorismo! Provavelmente o aluno desistiria do curso na hora, a faculdade perderia dinheiro e fecharia e não existiriam mais cursos superiores de informática. Que tal? (Talvez até seja bom ).
Mas acho que seria interessante o acompanhamento de perto do professor da dita cuja matéria que envolve desenvolvimento dos alunos e sempre que fossem vistos códigos tenebrosos, ensinarem os alunos a refatorarem-os. Isso sim seria muito mais proveitoso!
É importante ensinar pro alunos que refatorar não é perda de tempo e quebrar o mito de que uma vez que o código funciona ele nunca mais deverá ser alterado.
[quote=pcalcado]iquei pensando nisso após algumas threads. O que se deveria aprender numa facudlade dessa? Acho que apesar de algumas discord6anciasbásicas todos temos um curriculum comum para Ciência da Computação, mas e TI, PDD, Análise de Sistemas ou seja lá como chamam essa semana?
O que essa facudalde deveria incluir? Como deveriam dividir as áreas de conhecimento? Quem estes cursos procuram formar?
Quando eu estava na facudlade eu pensava bastante sobre isso e pensei em um modelo de 4 anos. Nos primeiros dois anos o aluno deveria aprender sobre lógica, matemática e sobre sua ferramenta principal: programas. Nada de aprender Java ou C#, um curso com foco nos dierentes paradigmas e como eles resolvem seus problemas, bem ao estilo SCIP mas pegando bem mais leve, exemplos que não envolvam tanto matemática e mais problemas de modelagem de domónio.
Nos quatro anos seguintes eles teriam uma boa introdução à como empresas funcionam (Capitalismo Moderno 101), tópicos de engenharia de sotware como aquiteturas e padrões e metodologias de desenvolvimento de software. Tudo com muitos exercícios práticos para validar e não deixar enerrujar o conteúdo dos primeiros anos.
Não sou educador acadêmico e não sei se isso é o ideal do ponto de vista de cosnrução do indivíduo mas eu recomendo esta trajetória para alguém que quer aprender desenvolvimento de sotware.[/quote]
Então amigo…
Da uma pesquisada melhor…
Não tinha necessidade de abrir outro tópico… Apenas comentava em algum dos muitos ja criados
Os conceitos dos tópicos são diferentes. No tópico do link é feito apenas uma comparação entre os cursos. O intuito desse, ao menos no que EU entendi, é sugerir melhorias nas grades dos cursos e o que se deve ser aprendido nos mesmos.
Desculpe mas discordo. Neste tópico estamos discutindo o que as faculdades deveriam ensinar seja lá com qual nome o curso tiver.
Mas quero deixar claro que minha opinião neste tópico se refere a quem cursa uma faculdade e não apenas um curso de 3 anos para se formar tecnólogo. Na Argentina o curso de uma faculdade de TI dura 6 anos.
Ninguém aqui está comparando uma coisa com outra, pelo menos não é o intuito. A questão é discutir ma rade para um curso não saber de um “versus” o outro.
[quote=pcalcado][quote=javaman00]
Você mesmo já respondeu…
Sinceramente apenas um complemento de um mesmo assunto. Nada mais!
[/quote]
Ninguém aqui está comparando uma coisa com outra, pelo menos não é o intuito. A questão é discutir ma rade para um curso não saber de um “versus” o outro.[/quote]
Entendi… Inclusive, concordo que a grade dos cursos de hoje é uma verdadeira piada!
No mais… Quem quer entrar no mercado mesmo tem que ficar de olho na melhor grade e fazer um tecnologo.
Além do que já falado no tópico, acho deveria ter nos cursos de tecnologia da informação:
:arrow: Matemática. Aquela que deixa o magrão pirado de tanto número. Aquela que seleciona quem vai ser dar bem na área do que não tem condições de exibir um diploma. Matemática é fundamental para area de TI, quanto mais melhor. Cada vez me convenço mais disso.
:arrow: Administração de empresa
:arrow: Vendas. Muito, afinal, o cara vai querer ganhar um dinheiro depois de formado né!