Não há custos de licenciamento para um Java IDE como para o ecossistema da Microsoft. Mais das suas enormes taxas de matrícula para a universidade.
Mjhilton 17/05
16
O que? você pode obter o Microsoft Visual Studio Express gratuitamente.
Quant_dev 17/05
12
Na verdade, na maioria das vezes, você pode obter o Visual Studio gratuitamente se for um estudante, além de todos os outros aplicativos da Microsoft.
Erin
5
porque você quer ganhar dinheiro quando se formar, certo? Passar 4 anos estudando coisas que ninguém usa no realmundo não é um benefício para os estudantes ou as empresas que desejam contratá-los.
5
@JarrodRoberson, apenas algumas empresas usam Java, as universidades devem realmente educá-lo em uma variedade maior de idiomas, para que você esteja melhor preparado para o mundo real. Você não quer ficar preso sendo apenas um programador Java quando existem muitas outras maneiras de pensar e desenvolver.
CaffGeek
Respostas:
73
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:
Todos os conceitos incorporados eram bem conhecidos em 1980. Não há muito a saber além da noção mais básica do que é OOP.
É a escolha insípida, inodora, atóxica, biodegradável e politicamente correta.
Quase a única outra linguagem na história que existe há tanto tempo e (provavelmente) inovou menos é o SQL. Apesar de dificilmente serem o que você chamaria de alvos rápidos, COBOL e Fortran ainda inovaram mais que o Java.
É amplamente utilizado. Quando você se dedica a isso, profs e PHBs têm critérios semelhantes.
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.
muitos comentários foram removidos daqui, pois as opiniões sobre esta resposta estão divididas.
Exibir nome
1
FWIW, eu prefiro baunilha.
Lightness Races com Monica
Eu me inscrevi para upvote sua resposta
user2445942
22
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.
Quando eu estava na uni no 1º ano, fizemos Ada para os cursos de programação (alguma montagem no curso de sistemas de computador). O segundo ano foi um estilo de linguagem bastante semelhante. No terceiro ano, nos disseram exatamente isso: "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". No final do ano, aprendemos autodidata C, C ++, Java e em qual linguagem você fez seu projeto (a minha era Python). Foi a melhor preparação que já tive para o mundo real, como aprender rapidamente e em tempo real
Amy
(+1) As linguagens de programação relacionadas ao Pascal são melhores para serem usadas no ensino de programação, porque seu pai "Niklaus Wirth" as projeta cuidadosamente, para o ensino. ;-)
umlcat 16/11
@umlcat: Obrigado. Sim, acho bom ter C ou C ++ onde você pode violar as regras e invadir. Mas antes de quebrar as regras, você deve saber quais regras você está violando. Para isso, é muito útil ter uma linguagem de programação limpa como o Pascal para aprender como você deve programar em um "mundo ideal". Então, pelo menos, você sabe o que está fazendo ao invadir. :-)
Giorgio
@ Giorgio: Eu acho que os alunos devem aprender Pascal primeiro e depois C / C ++ e depois Java. Não quero dizer apenas um ou outro, mas todos eles em uma ordem específica. Algumas escolas abandonam o ensino um em favor do outro.PD Eu também trabalho em C e Java. Espero que ajude ;-)
umlcat
@umlcat: Eu concordo totalmente. Eu também acrescentaria alguns Lisp, Haskell, Prolog: quanto mais paradigmas de programação se conhecer, melhor.
Giorgio
10
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.
Se sua escola ainda estava usando Pascal em meados dos anos 90, eles estavam atrasados para uma revisão de qualquer maneira. Minhas primeiras aulas de CS foram em Pascal, mas isso foi em 1980! Curiosamente, porém, eram apenas os cursos introdutórios - as classes de nível superior usavam C (para internos do SO), Modula (para o design do compilador), Prolog e alguns cursos de pós-graduação até usavam o Ada. Não entendo por que as escolas ainda não fazem isso.
TMN
1
a maioria ou todos ainda usavam Pascal no final de 1995, alguns tendo se mudado para Modula. A Mine começou a introduzir C ++ em 1995 para idosos, mantendo Pascal para juniores. Eu acho que eles já substituíram o Pascal pelo Java (eles precisam de uma linguagem de baixo nível, pois muito do trabalho envolve interação com o hardware, então o C ++ provavelmente ainda está por aí).
jwenting
Usamos C / C ++ bastante após o curso introdutório de Pascal. Prolog, LISP, Scheme, Smalltalk, Assembly foram usados nas classes de nível médio. À medida que a importância do consumo de tecnologia pelo governo diminuiu nos anos 90, Ada foi gradualmente eliminada, e apenas mencionada no final dos anos 90. Eu acho que os perigos de Java não têm nada a ver com Java, mas com monocultura e aprendizado. Agora sou desenvolvedor do Flex e a Adobe encerrou minha capacidade de ganhar a vida com ele na semana passada. Não estou preocupado porque tenho um longo histórico de não usar apenas 1 idioma. Eu tenho Java, Ruby, Php, Python para voltar.
Chubbsondubs
8
Existem algumas razões para isso, incluindo:
Onipresença no mercado de trabalho - se as universidades querem que seus alunos sejam contratados (e recomendam mais estudantes para a universidade), precisam ensinar idiomas relevantes.
Simplifica o currículo
Mais fácil de classificar e mais fácil de implementar sua lição de casa.
Lixo coletado para que não seja necessário ensinar ponteiros e gerenciamento manual de memória
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.
Existem ótimos livros sobre Java, bem como o OOP semplificado, como o primeiro objeto Java usando o BlueJ. No entanto, em C # não vi esses livros de aprendizagem que o tiram do zero e o aprendem de uma maneira boa. Você concorda comigo?
Goma
Eu vou. Ensinar é uma tarefa muito difícil, e os professores ainda estão aprendendo a melhor forma de ensinar. Você encontrará várias escolas on-line, como o Strayer, para C #, e as escolas modulares e voltadas para Java. Provavelmente porque as escolas on-line atendem aos alunos que já estão trabalhando. Os livros de programação básica podem ser aplicados a qualquer idioma, para que haja materiais disponíveis.
Berin Loritsch
"Lixo coletado, portanto não há necessidade de ensinar ponteiros e gerenciamento manual de memória." se você, como engenheiro de software, não conhece ponteiros e gerenciamento de memória ou não sabe como eles funcionam, você está perdendo algum conhecimento muito importante.
rightfold 15/09/11
Java pode não ter a *sintaxe, mas seria muito difícil de usar sem um entendimento básico dos ponteiros.
dan04
@WTP e é por isso que Java é frequentemente usado em cursos introdutórios (onde anteriormente Pascal ou Modula eram usados) e, posteriormente, C (++) é introduzido.
jwenting
6
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).
@nate c - ya eu não tinha certeza. Ainda assim, o Python também é muito fácil de aprender. Obrigado pelo link!
Jetti
Eu estragaria completamente meus alunos se estivesse dando uma aula. Eu incentivaria a escrever sua própria linguagem de programação e você só poderá usar essa linguagem de programação durante o curso da aula.
Berlinbrown2 17/05
1
@Berlin - Eu acho que é por isso que você não é um professor então :)
Jetti
3
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.
Talvez isso explique por que o Java é escolhido em C, C ++ ou C #, mas Ruby e Python (entre outros) funcionam bem entre plataformas.
Eric Wilson
Bom ponto. Acredito que os departamentos de CS também favoreçam linguagens fortemente tipadas, por várias razões. Além disso, o Java teve uma vantagem nos EUA. O Ruby realmente não chegou aqui até 1999 ou mais tarde, e o Python ficou bem limitado até o lançamento do 2.0.
Matthew Flynn
1
Ouvi professores dizerem que usam java para ensinar porque:
usa o (s) paradigma (s) mais recente (OOP, alguns genéricos)
sintaticamente muito simples, embora bastante detalhado
não há conceitos avançados, como funções de ordem superior, fechamentos, currying ou continuações que possam confundir as pessoas que ainda aprendem conceitos básicos
muitas bibliotecas escritas para isso
os alunos não ficam tão atolados em vazamentos de memória de depuração, pois há um gc
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.
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:
Curso Introdutório: Esquema, Python, Linguagem Assembly, C (todos os três)
Curso de Algoritmos: C, Haskell, Python (todos os três)
Curso de Sistema Operacional / Curso de Rede: C / C ++
Desenvolvimento de GUI: Java Swing, C ++ no Win32
Programação Orientada a Objetos: (isso é complicado, eu não faria um curso OOP). C ++, Java, C #
Empreendimento? Desenvolvimento: Java, C #, Python
Design de Linguagem, Compiladores: Haskell, Scala, C, Assembly, Scheme, Common Lisp, Prolog.
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.
(-1) "Linguagem Assembly" muito complexa para o "Curso Introdutório". Eu não quero dizer "não ensine", quero dizer "nós ensinaremos depois"
umlcat 16/11/11
1
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 ++.
Eu apontaria que ignorância não é o mesmo que ser "burro". As pessoas que "passam" pelo Java podem não conhecer esses "conceitos simples" porque não foram ensinados. Isso não significa que, se eles levassem algum tempo para descobrir, não conseguiriam.
Jetti 17/05
0
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)
Outros problemas de .NET no momento? Sem tempo de execução portátil - não havia mono disponível.
ZJR
Não há neutralidade no editor de texto . (as guerras dos editores de texto são feias, mas reais) E um IDE padrão que faz com que os alunos se entreguem à caldeira .
ZJR
Aliás, eu teria preferido que o mundo seguisse o caminho do Objetivo C , a Apple não seria a única criança nesse estádio e mesmo seu modelo de negócios seria um pouco menos lunático.
ZJR 21/09
0
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.
real
mundo 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.
fonte
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.
fonte
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.
fonte
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.
fonte
*
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).
fonte
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.
fonte
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.
fonte
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)
fonte
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:
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.
fonte
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 ++.
fonte
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)
fonte
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 :)
fonte
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.
fonte
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.
fonte