Java é freqüentemente encontrado na academia. Qual é a razão por trás disso?
realmundo não é um benefício para os estudantes ou as empresas que desejam contratá-los.
Java é freqüentemente encontrado na academia. Qual é a razão por trás disso?
realmundo não é um benefício para os estudantes ou as empresas que desejam contratá-los.
Respostas:
A poucas universidades têm alguém que está suficientemente bem conhecido que muitos (se não a maioria) decisões giram em torno dessa pessoa gosta, não gosta, opiniões, gostos, etc. Assim por exemplo, Texas A & M tem Bjarne Stroustrup na equipe; provavelmente não surpreende ninguém que seu currículo tenda a enfatizar C ++.
A maioria das universidades é um pouco diferente. Primeiro, as decisões geralmente são tomadas muito mais em benefício dos professores do que os alunos. O maior critério único em muitos casos é "qual idioma exige o mínimo de esforço de nossa parte?" A maioria deles também é cuidadosa em sua preguiça - eles querem não apenas o idioma com o menor número de conceitos avançados para aprender, mas também um que seja (por exemplo) o mais lento em inovar, atualizar ou adotar algo novo.
Segundo, a maioria das decisões é tomada pelo comitê. Isso significa que a decisão final raramente é (se é que existe) o que alguém realmente queria - é exatamente o que menos membros do comitê (especialmente aqueles com maior influência) consideram particularmente desagradável. É como escolher um sabor de sorvete. Um realmente gosta de morango, mas outro é alérgico a morangos. Outro realmente adora chocolate, mas alguém não suporta. Ainda outro pensa que o raisin de rum é ótimo, mas os outros dois temem que mencionar "rum" seja interpretado como incentivo ao abuso de álcool - então eles acabam com baunilha, mesmo que não seja o que alguém realmente queria.
Finalmente, apesar de geralmente contrariar a maioria do que os dois critérios anteriores produziriam isoladamente, eles geralmente precisam (ou pelo menos querem) ser vistos como sensíveis às necessidades da indústria.
Java é a interseção desses três:
Observe que não estou realmente dizendo (por exemplo) que não há mais nada a saber sobre Java do que a noção mais básica sobre o que é OOP - apenas que isso é tudo o que é necessário para fazer o que passa por um trabalho aceitável de ensiná-lo.
Estudei Ciência da Computação no início dos anos 90, pouco antes do Java ser lançado. A abordagem seguida por nossos professores foi a seguinte.
Primeiro ano: curso introdutório sobre programação e algoritmos em Pascal. Por que Pascal? Porque é uma linguagem limpa, projetada para ensinar os conceitos de programação sem recursos para hackers. É claro que os alunos sabiam que o idioma mais popular da época era C e que havia um novo idioma com crescente popularidade: C ++. Então, estávamos lendo e discutindo sobre esses idiomas o tempo todo e realizando pequenos projetos usando-os por conta própria. Então a idéia era: na aula, fazemos a teoria séria (Pascal), enquanto em casa aprendemos a hackear (C). :-)
Durante o segundo ano, tivemos um curso de sistema operacional no qual nos pediram para fazer os exercícios em C e montagem. O professor não nos deu um curso completo de C (apenas algumas lições) porque (1) já tínhamos um curso de programação durante o primeiro ano e (2) ele disse que todo cientista da computação que conhece os conceitos de programação deve poder ler um livro e aprender uma nova linguagem de programação. O curso foi bem tranquilo e todos achamos normal que C e montagem fossem tópicos práticos que você aprende sozinho ou discute no corredor com outros alunos, mas que não valia a pena fazer um curso.
Durante o terceiro ano, fizemos um curso sobre linguagens de programação, no qual estudamos os diferentes paradigmas das linguagens de programação (imperativas, funcionais, lógicas, orientadas a objetos), aprendemos conceitos gerais e técnicas de implementação e revisamos as principais linguagens de programação (Pascal, C, Modula2, Simula, Lisp, C ++, Prolog). O que nosso professor nos disse no início do curso foi: você não deve avaliar esse curso pensando em quantas linguagens de programação conhece no final do curso, mas em todos os conceitos gerais que aprendeu, como eles são relacionados entre si, para que servem, como são usados em quais idiomas. Em seguida, aprender um idioma específico é apenas uma questão de ler um livro, examinar o código existente, tentar usá-lo em um projeto específico e assim por diante.
Achei essa abordagem muito apropriada e eficaz. Não creio que a universidade deva ter como objetivo preparar bons programadores, mas fornecer um bom conhecimento que permita entender as linguagens de programação e programação. Tornar-se um bom programador virá apenas como um efeito colateral disso. Agora, estou pensando em me candidatar a um emprego em que Ada é necessário e não tenho medo dele, mesmo que nunca tenha feito uma programação séria no Ada antes.
Voltando à questão do ensino de Java. Eu acho que o Java é frequentemente usado para ensinar, porque é suficientemente neutro e permite explicar os princípios de programação usando uma linguagem que também é próxima do mundo da indústria.
Pessoalmente, eu ainda usaria Pascal ou uma linguagem semelhante para um primeiro curso, porque isso me permitiria distinguir entre estruturas de controle e estruturas de dados, que em Java / linguagens orientadas a objetos estão fortemente integradas. Então, na minha opinião, Pascal permitiria uma introdução mais gradual aos conceitos básicos de programação.
Além disso, um cientista da computação (e um bom programador) deve saber sobre mecanismos básicos / estruturas de tempo de execução, como pilha, pilha, passagem de parâmetros, alocação de memória, ponteiros ou como implementar tipos de dados abstratos sem usar os recursos internos do idioma (listas, conjuntos e assim por diante). Java tira muito disso dos programadores (isso é bom, é claro), mas um iniciante deve aprender sobre essas coisas. Talvez depois de um primeiro curso de programação em Java, também se deva fazer um curso mais geral sobre conceitos de linguagens de programação.
Esta é apenas a minha experiência e opiniões.
Eu estava na escola quando o Java saiu. E minha universidade quase mudou da noite para o dia. As pessoas estavam loucas em Java na academia. Eu era júnior quando ele saiu, e quando eu estava no último ano, quase toda a academia estava se movendo rapidamente para mudar seu currículo. Não apenas na minha universidade, mas em toda parte. Foi realmente tão rápido. Nosso segundo curso de introdução foi o Pascal, que rapidamente se converteu em Java em menos de um ano. Por que eles se converteram tão rápido? Duas grandes razões.
Um acadêmico quer ensinar teoria e algoritmos. As linguagens que facilitam o aprendizado dos algoritmos que não precisam de muita experiência para operar são as melhores: esquema, Python, Java, Smalltalk etc. Quanto mais a linguagem fica no caminho, mais distraído você fica ao aprender os algoritmos reais. Na época, as linguagens de script eram cidadãos de segunda classe desaprovados pelos empregadores como baratos, rápidos e sujos. Os acadêmicos os consideravam mais exemplares, mas o que os empregadores querem também influencia os acadêmicos.
Isso nos leva ao próximo motivo. Os empregadores desejam certa experiência no idioma e na época que era C / C ++. Porém, o C / C ++ requer muita experiência para aprender e possui muitos casos de canto e se e ou ou mas que são perturbadores. Aprendemos cursos em C / C ++, mas não nos níveis mais baixos. Na época, os empregadores estavam bravos com os programas de CS porque os estudantes não eram gurus em C / C ++.
O Java estava varrendo o setor quase tão rápido quanto a academia. Então, finalmente, a academia estava conseguindo o que queria. Linguagem de alto nível que era mais fácil de aprender e que os empregadores queriam. Foi tudo muito perfeito. Eu tive um amigo retornando à academia talvez três anos depois que eu saí, e ele disse que você poderia encontrar um livro sobre Java em todas as disciplinas de CS. Foi assim que o Java assumiu a academia.
Pessoalmente, acho que Java não diminuiu o CS. Acho que isso tem sido uma coisa boa, porque os alunos podem estudar CS, participar de código aberto e encontrar trabalho mesmo enquanto estudam. Eu ainda acredito que você deveria estudar muitas linguagens como estudante de CS, e isso não deveria ser apenas Java. Mas, se todos usassem python, Joel também odiaria em python.
Existem algumas razões para isso, incluindo:
Observe que existem várias escolas que ensinam C # pelos mesmos motivos. Existem muitas outras razões, algumas delas mais específicas para cada escola. Em essência, Java tornou-se o "BASIC" orientado a objetos do passado.
*sintaxe, mas seria muito difícil de usar sem um entendimento básico dos ponteiros.
Eu gosto do post de Joel Spolsky intitulado The Perils Of Java Schools . Eu acho que Berin Loristch está correto quanto a simplificar o cirrculo e também ser aplicável ao mundo real.
Ouvi o seguinte dizer muitas vezes: "um diploma em Ciência da Computação não é um diploma para aprender programação, é para aprender a teoria". A linguagem não precisa necessariamente importar (embora não atrapalhe) enquanto a teoria estiver sendo aprendida. Java é uma linguagem relativamente fácil de entender e que permite gastar mais tempo aprendendo a teoria por trás de tudo. Esta é uma das razões pelas quais o MIT usa o Scheme (então eu ouvi).
Muitas das respostas dadas acima são boas, mas deixam algo de fora.
Java é uma linguagem multiplataforma. Um aluno pode usar seu Mac, outro PC e outra conta Unix de aluno. O mesmo código fará a mesma coisa. Pense em como é mais fácil tanto para o professor quanto para o departamento de TI da escola.
Essa foi a real importância do Java quando foi lançado. A piada era "Código uma vez, depure em todos os lugares", mas realmente tira o hardware e os sistemas operacionais da equação.
Ouvi professores dizerem que usam java para ensinar porque:
Pessoalmente, fico feliz por ter cursado CS em Berkeley quando eles usaram o Scheme para ensinar. Embora eu não tenha percebido o quão elegante era uma linguagem até alguns anos depois.
Um pouco de fundo
Tomei a única aula de Java oferecida em nossa escola. Isso foi do final dos anos 90 ao início de 2000. O Java estava crescendo, mas quase não decolou. Vindo de muito desenvolvimento em C, fiquei um pouco frustrado com todo o código padrão necessário para colocar o Java em funcionamento. Não consegui me concentrar na minha tarefa. Eu não poderia simplesmente abrir um arquivo com "abrir". Eu tive que definir a classe e depois as importações, etc, etc.
Como eu era engenheiro de computação, fiz primeiro a programação de montagem e depois C e, em seguida, C ++, Scheme e aquele curso de Java. Era principalmente um programa escolar orientado para C. A classe de algoritmos foi ministrada usando C.
Quando entrei na indústria, o Java era claramente o ator dominante. Talvez tenha sido o único participante durante a conversão de sistemas COBOL de back-end para aplicativos de negócios da web Java. O Java fez grandes progressos no mundo dos negócios durante os primeiros 2000 dias.
Ao mesmo tempo, eu não conhecia todas as estruturas Java, mas sabia como codificar e adaptar-me ao ambiente Java. Se eu fizesse cursos de treinamento sobre bons padrões de codificação Java, provavelmente poderia ter começado com melhor estilo Java ou conhecimento do ecossistema Java.
Em retrospecto, acho que não importa.
Para responder à sua pergunta: Por que estudamos Java na universidade?
Java deve ser ensinado, mas não usado em todos os cursos:
Você deve aprender Java em algum momento da faculdade, se estiver aprendendo ciência da computação. É popular no mundo dos negócios. Você deve aprender Java e talvez C #. Eu ABSOLUTAMENTE não ensinaria Java como um curso de programação introdutório. E Java certamente não deve ser a linguagem principal usada em todos os cursos.
Sobre críticas a Java:
Java recebe muitas críticas e sempre recebeu. Eu tenho lido revistas Java que mencionam Java com um ponto de interrogação: "O Java está pronto para a empresa?". A plataforma Java ainda é uma plataforma amplamente usada. Mas, para a maioria das tarefas gerais de programação, o Java funciona bem. E não há grandes problemas com o uso de Java. Não vai prejudicar o seu conjunto de habilidades. Pode ser, se você apenas confiar nas bibliotecas Java sem aprender o que está acontecendo por baixo. Mas o Java não causa nenhum tipo de dano cerebral (alguns desenvolvedores realmente acreditam que isso é verdade).
Além disso, por que os desenvolvedores não atacam C ou C ++? Ou pelo menos C ++. Os paradigmas de programação imperativos são muito semelhantes. E eu nunca consideraria escrever um webapp em C ++, mas talvez eu devesse usar Java.
Aqui está como eu configuraria um currículo:
Os idiomas que listei no meu currículo são bastante comuns. Muitas escolas estão ensinando vários idiomas sem problemas. Na indústria, você usará muitas linguagens de programação diferentes. Você usará idiomas que você nem ouviu falar.
O tópico Java nas escolas não é um problema, a menos que eles desejem protegê-lo completamente do Java ou que eles ensinem apenas o Java. Nos dois casos, as escolas são injustificadas.
(Desculpe Ruby Lang)
Desculpe, apenas uma resposta longa e chata:
(1) Você quis dizer:
"Por que estudamos Java na universidade, como primeira linguagem de programação?"
(2) Ou você quer dizer:
"Por que estudamos Java na universidade, mesmo se aprendemos outras linguagens de programação antes do Java?"
Parece que você realmente quer dizer as duas perguntas.
No caso de (1):
Eu não acho que Java (ou .NET C # e Visual Basic) deva ser ensinado como as primeiras linguagens de programação. Pascal estruturado e modular deve ser o primeiro, mesmo que pareça antigo e obsoleto.
Muitas pessoas pensam que devemos ensinar às pessoas programação orientada a objetos ou programação funcional imediatamente, apenas por causa de seu "hype" ou "tendência".
Aprendo Pascal estruturado como uma versão pequena de "Programação Orientada a Objetos", não como algo semelhante. Eu vejo um programa estruturado como um único objeto pequeno.
Depois disso, sugiro continuar Linguagens Funcionais e Object Pascal.
E depois, C, C ++, C #, VB.Net, Java.
Os principais motivos pelos quais eu não gosto de Java ou C #, como primeira linguagem de programação, são o fato de eles terem conceitos de "ponteiros", "ponteiros para objetos" e "objetos" em si ("referências").
Acredito que os alunos devem ter em mente as diferenças e semelhanças entre esses conceitos. A comparação de objetos Strings em Java é um bom exemplo dessa estranheza:
String A = "Mars";
String A = "Venus";
// pointer comparison or object comparison ???
if (A == B)
{
DoSomething();
}
No caso de (2):
Eu acho que Java ou C # deve ensinar na escola, porque eles têm vários recursos atualizados e, ao mesmo tempo, têm uso no mundo real.
Você deve aprender Java em algum momento da faculdade, se estiver aprendendo ciência da computação. É popular no mundo dos negócios. Você deve aprender Java e talvez C #. Eu ABSOLUTAMENTE não ensinaria Java como um curso de programação introdutório. E Java certamente não deve ser a linguagem principal usada em todos os cursos.
Não posso discordar mais. Java era uma linguagem na minha faculdade que você precisava fazer para entrar no programa de CS&E da minha escola. Java é extremamente fácil de ensinar. Porque você pode se limitar a certos conceitos que "não programadores" podem aprender.
Também não sei dizer se você ensinaria ou não ABSOLUTAMENTE Java como um curso de programação introdutório. Você basicamente disse que não iria ensiná-lo absolutamente ?
A simples razão já foi explicada. Java não tem taxas de licença. Você pode ensiná-lo usando um editor de teste básico. É usado pelas razões erradas, certamente.
Não concordo com uma resposta anterior, que Java não fez com que os alunos a classificassem como "mais burra", realmente mostra quando eles têm problemas com conceitos realmente simples, como matrizes e listas em C ++.
A mudança de C para Java aconteceu na hora errada .
Em algum lugar por volta de 2000. Eu estava na última classe C na minha universidade.
O C ++ tinha muitos recursos para não confundir um iniciante. (E ainda sim. E planeja adicionar alguns.)
O .NET não era maduro o suficiente e era ainda mais caro do que hoje.
O objetivo C era antigo e o uso da Apple estava voando abaixo do radar (não havia iPhone por perto)
Sinto-me compelido a adicionar as respostas aqui, pois não vejo nenhuma dessas respostas realmente cobrindo minha perspectiva.
Eu sou um programador amador. Eu estava bem à frente da curva quando se tratava de 'computadores' e 'programação'. Concluí minha graduação - Bacharelado - em 2007 e mestrado cerca de dois anos depois - 2009. Trabalhei com uma infinidade de idiomas, incluindo Assembly, QuickBASIC, C, C ++, Java, PHP, Perl, Python, Scripts BASH, Javascript, COBOL etc. .
IMHO, o idioma usado para ensinar programação aos alunos é um indicador dos tempos em que vivemos atualmente. Por exemplo, durante os anos 80, Assembléia era o idioma de baixo nível, enquanto C era considerado um idioma de alto nível.
Durante a década de 1990, C ++, Java, Perl e essas linguagens ganharam importância principalmente por um nível muito superior a C e incorporaram princípios de desenvolvimento rápido. Então eles meio que pararam de ensinar Assembléia para os alunos de CS e ensinaram C como uma maneira de expressar algoritmos. Lentamente, isso mudou na última década, em que C é considerado uma linguagem de nível muito baixo para capturar a essência dos algoritmos de maneira eficaz e sem muito conhecimento de "sistemas". Isso é realmente extremamente importante, pois o foco de um currículo de CS deve ser mais "teórico" do que prático e toda vez que alguém quiser escrever um algoritmo, se ele / ela ficar atolado com alocações de memória e aritmética de ponteiros, você não conseguirá qualquer lugar.
Ainda hoje, se você estiver em um programa de mestrado, precisará preencher determinados requisitos de 'Sistemas' (pelo menos nos EUA e isso não deve ser muito diferente para as universidades dos EUA), que precisam que os alunos possam programar aplicativos e sistemas no nível dos sistemas. em certos casos, tão profundos quanto os hackers no nível do kernel, para realmente passar os requisitos. Portanto, embora C não seja o idioma defacto ensinado nas escolas, é relevante se você deseja se especializar em sistemas ou computação de alto desempenho ou nichos.
Eu também gostaria de mencionar outro ponto: o C requer muita disciplina para acertar as coisas, enquanto linguagens como Java estão um pouco relaxadas com essas restrições. Isso facilita a realização de cursos sem a necessidade de os RA / TAs iniciarem o GDB para depurar o programa de um aluno :)
Acho que grande parte disso é o que está sendo usado na indústria.
Meu programa de CS tinha um Conselho Consultivo Industrial, composto por funcionários seniores de empresas locais de tecnologia e aeroespacial, e eles tinham muita contribuição no currículo. As aulas de introdução à CS abandonaram Pascal em favor de C no ano em que comecei (1986), em grande parte por ordem do IAB. Da mesma forma, houve um esforço para ensinar Ada em alguns dos cursos de nível superior, uma vez que as empresas aeroespaciais locais estavam tendo que usá-lo para o trabalho do Departamento de Defesa.
O Java está bastante onipresente agora, especialmente agora que os dispositivos Android estão decolando. É péssimo do ponto de vista didático, mas também C.
Porque eles esperam que menos alunos falhem no curso, o que é uma FALHA em si, IMHO. Talvez uma das razões pelas quais quase ninguém leva mais a sério o diploma universitário, pelo menos aqui.
Java é uma linguagem muito simples e não ensina que o PC possui um paradigma de recursos limitados. Enquanto, ao mesmo tempo, força a linha de pensamento "não há nada que não possa ser resolvido com outra camada de abstração".
Sim, é bom para conceitos de POO e problemas de brinquedos, mas ensina a abordar os problemas do ângulo errado. Use construção pura aqui, estrague o resto.
Mas a academia é conhecida por ser sonhadora com IA, OWL e outras tecnologias de brinquedos. Enquanto eles continuam pesquisando essas coisas, às vezes alguém inventa algo incrível lá também, mas se você quer ser um bom desenvolvedor, precisa aprender isso de forma independente.