Estou no meio de me matricular na escola para obter um diploma de CS. A escola que estou estudando oferece, na verdade, Java e C ++ para os cursos introdutórios de desenvolvimento de software (programação orientada a objetos, padrões de design, esse tipo de coisa). A escolha do aluno é qual faixa seguir, mas só há tempo para seguir uma.
Sabendo o que você sabe agora, se tivesse a opção, estabeleceria sua base de currículo de CS em Java ou C ++?
Atualmente, meu debate atual é assim:
Um bom amigo (que tem um doutorado em IA) está promovendo Java como a melhor escolha, independentemente do que eu faça, apenas para abrir mais oportunidades de emprego mais tarde, embora possa ser tendencioso, pois todo o seu trabalho foi em Java (ele Amo isso). Eu moro na área de Boston, MA, EUA e vejo uma quantidade igual de trabalho em Java e C.
Por outro lado, embora ainda não tenha decidido totalmente o que quero fazer com o diploma quando terminar, minha preferência seria desenvolver para o Mac, o que estou fazendo agora, embora em uma capacidade limitada. Para esse fim, já estou tendo uma exposição limitada ao C ++, mas não tenho nenhum com Java e, olhando para meus projetos no meu dia de trabalho, não vejo necessidade de usá-lo tão cedo, "medido em breve" por pelo menos dois anos.
Provavelmente, devo observar que sou um adulto voltando à escola depois de 20 anos (atualmente não tenho nenhum diploma), por isso estou procurando maximizar a oportunidade e o tempo gasto da melhor maneira possível. Estou meio inclinado a C ++, mas ainda sou ambivalente e alguns conselhos objetivos e externos ajudariam aqui.
Ou eu poderia estar pensando muito sobre isso.
ATUALIZAÇÃO: Acontece que a seleção de idioma não foi tão clara como eu supunha. Enquanto alguns dos principais cursos se concentram em Java, alguns dos outros cursos principais trabalham principalmente em C e Java, mas também em alguns outros. De fato, meu restante do semestre será no Objective-C depois de passar um tempo em Java e Javascript. O último semestre foi em C, Javascript e PHP, além de alguns outros, conforme as tarefas exigidas. Como as coisas estavam praticamente divididas no meio, e ainda estou recebendo respostas para isso, agora estou tentando trabalhar meu currículo para atender a todos os requisitos do curso, mas para absorver o maior número de idiomas possível. . Até agora, minhas notas não sofreram ao tentar fazer isso.
Respostas:
Eu pessoalmente utilizaria o C ++, pois ele fornece informações sobre como partes do Java funcionam sob o capô (ponteiros, por exemplo). Mudar para Java a partir do C ++ é bastante trivial, enquanto mudar o sentido inverso é sem dúvida mais difícil.
A coisa realmente difícil sobre o ecossistema Java é o grande número de estruturas, bibliotecas etc. - é improvável que cubram tudo isso na Universidade.
No final do dia não vai importar que tanto o idioma que você escolher, contanto que você aprender os princípios.
Meu JUG vai me matar por endossar C ++ ;-)
fonte
Eu tenho que discordar da maioria das pessoas que defendem o Java aqui. Aprender C ++, mesmo que você não tenha estudado a arquitetura de computadores e microprocessadores, oferece muitas informações valiosas sobre o modo como os programas de computador funcionam e operam.
Nota bene, NÃO estou defendendo que você não deva aprender Java (melhor ainda, C #) porque esses são langs modernos e rápidos de desenvolvimento de aplicativos e enormes estruturas foram construídas em torno deles, dando a você acesso a muitas funcionalidades "gratuitas", como acesso a arquivos abstratos e similares, no entanto, um verdadeiro engenheiro de software deve conhecer pelo menos algum C ++, C ou pelo menos assembler, porque é isso que o separa dos tipos de script-kiddie.
Uma vez que você esteja razoavelmente proficiente em C ++, confiante em gerenciamento de memória e STL, escolher Java / C # deve ser fácil.
fonte
Escolas e estudiosos que defendem o Java como a primeira opção devem ter suas cabeças examinadas (ou simplesmente conseguir um emprego de verdade por aí). Estou dizendo isso como uma pessoa que fez desenvolvimento de aplicativos e sistemas em Java nos últimos 12 anos. Java é uma linguagem atroz para o ensino.
O motivo é o seguinte: exceto os talentosos, a maioria dos estudantes pode (e provavelmente nunca) entenderá a orientação a objetos sem entender a programação modular. E eles não conseguem entender a programação modular sem antes entender a programação estruturada em uma linguagem processual. Claro e simples. Um testemunho disso (entre outras coisas) é que, apesar de conhecermos OO há 3-4 décadas, as pessoas ainda escrevem hiper-espaguete na prática.
Além disso, uma pessoa que depende apenas de uma linguagem baseada em gc (seja Java ou .NET) nunca pode realmente se aproximar do hardware. A menos que sua ambição seja criar páginas da web dinâmicas, adivinhem? Você precisa se sentir confortável em se aproximar do idioma.
Você estuda em uma escola de ciências da computação para se tornar um cientista da computação e programador completo (espero que com algumas horas de crédito praticando programação prática em muitas linguagens de programação). Se você tudo que você conhece é Java (ou .NET ou C ou Seja qual for o Python), você é um "programador Java" (não um programador que possa trabalhar em Java, mas um "programador Java"). E isso faz tanto sentido quanto dizer que você é um "carpinteiro de martelo" ou "mecânico de chave de fenda Phillip", não é?
Uma boa escola irá expô-lo ao C (ou alguma outra linguagem processual como Pascal ou Ada), depois ao C ++ e a um assembly, permitindo que você aprenda Java por conta própria ao prosseguir com os cursos de projeto no seu primeiro ano. Além disso, ele deve fornecer exposição a linguagens funcionais para que você entenda o conceito de passar blocos computacionais como argumentos, cálculos livres de efeitos colaterais, transparência de localização e similares (que têm aplicações práticas reais, mesmo na Web).
Você precisa saber o que é um segfault. Você precisa saber o que paginação, memória virtual e toda essa porcaria significam. Você precisa saber como decompor problemas em módulos (sejam eles processuais e baseados em OO). Você precisa saber como os sistemas OO são realmente implementados sob o capô (para que você saiba o custo.) Você precisa saber onde a abstração do OO quebra (e ocorre porque o mundo e os problemas complexos não são necessariamente orientados a objetos).
Você precisa conhecer todas essas coisas para se tornar um cientista da computação completo capaz de trabalhar na empresa ou em um nível muito baixo, implementando coisas no nível do sistema, tanto para o setor comercial quanto para o setor público, tanto em grande como em pequena escala escala.
Os acadêmicos que têm pressionado o Java como a única linguagem a governá-los todos são completamente ignorantes quanto ao que a indústria realmente precisa. Sem noção. Imperdoável sem noção. É o que acontece quando eles trabalham em torres de marfim olhando para o setor à distância.
Eles transformaram os departamentos de Ciência da Computação em caras escolas profissionais de quatro anos, produzindo pôneis com truques de linguagem de programação. E isso poderia ser perdoado se eles pudessem ao menos ensinar aos alunos habilidades básicas de negócios / empresa / organização (ou seja, abandonar a fachada do CS e adotar um currículo MIS). Mas eles nem fazem isso, o que eu acho que é um grande desserviço para a indústria, a economia e, finalmente, os estudantes.
Eu sugiro que você leia a peça de Joel Spolsky em "Java Schools".
http://www.joelonsoftware.com/articles/ThePerilsofJavaSchools.html
Em resumo, se eles não ensinam uma linguagem de programação procedural (seja uma industrial como C ou Ada ou boa o suficiente para ensinar como Pascal), e eles fornecem se C ++ (se você tiver sorte) ou Java / C # (se você tiver azar), eu procuraria outra escola. Puro e simples, de um cara que usa Java para viver no mundo real há um bom tempo.
fonte
Eu acho que depende muito da sua personalidade. Pelo menos da minha perspectiva, Java e C ++ têm orientações radicalmente diferentes que atraem tipos de pessoas substancialmente diferentes.
Quando você se dedica a isso, o Java é na verdade uma grande biblioteca de classes, com uma linguagem suficiente para instanciar objetos e chamar métodos dessa biblioteca. "Aprender Java" consiste, em grande parte, em memorizar (ou pelo menos tomar conhecimento) do que está na biblioteca e como está organizado, para que você possa encontrar o que deseja quando quiser.
O C ++ enfatiza muito menos o fornecimento de código pré-escrito. Embora inclua uma biblioteca (STL 1 ), essa biblioteca é menos sobre o código incluído do que sobre um estilo e conjunto de princípios. É perfeitamente possível escrever um código que seja clara e facilmente reconhecível como código "STL", mesmo que ele use pouco ou nenhum código pré-escrito.
Há também uma diferença bastante substancial na maneira como os idiomas são usados. Java enfatizou fortemente a manutenção da linguagem simples. Isso facilita a construção de ferramentas que manipulam o código Java de várias maneiras (por exemplo, para refatoração). Isso também significa que você tende a precisar de ferramentas que o façam, porque a refatoração geralmente envolve alterações bastante substanciais em grandes quantidades de código.
C ++ é uma linguagem muito mais complexa, o que significa (entre outras coisas) que a construção de ferramentas para manipular o código-fonte C ++ é tremendamente mais difícil do que para Java. O equilíbrio é que é muito menos necessário - uma tarefa de refatoração que pode envolver centenas de alterações em dezenas de arquivos em Java pode ser realizada alterando (por exemplo) um único parâmetro de modelo em C ++.
Java coloca muito mais ênfase em ser fácil de aprender. O C ++ enfatiza muito mais a facilidade de uso - mas (infelizmente) somente se você realmente sabe o que está fazendo.
Não vou advogar por um ou outro. Minha opinião sobre os idiomas é muito menos relevante do que você ter uma idéia do que esperar de cada um e dar uma olhada honesta em si mesmo para descobrir qual é o melhor para você.
1 Sim, eu sei que isso não é realmente preciso, mas estou tentando impedir que isso se transforme em um livro ...
fonte
Não acredito que as pessoas estão defendendo C ++ como primeira língua! Você passará a maior parte do tempo escrevendo caldeiras e tentando contornar as limitações e os anzóis do idioma do que realmente aprendendo a programar.
Java é uma linguagem muito mais simples e não atrapalha o seu aprendizado.
Se você precisar aprender C ++, aprenda os conceitos com Java e, em seguida, vá para C ++, ou melhor ainda, OBJ-C, se desejar escrever um software para Mac. Java e OBJ-C não são muito diferentes.
Para sua informação, passei 10 anos como desenvolvedor comercial de C ++.
fonte
Eu recomendaria C ++. Tive algumas aulas em Java e outras em C ++ na faculdade, e as habilidades específicas de idiomas que aprendi com C ++ me ajudaram mais ao aprender outras linguagens posteriormente. Além disso, embora eu veja muito mais vagas de trabalho Java do que C ++, a maioria está procurando uma pilha Java completa, como:
E é provável que um currículo baseado em Java não o prepare muito melhor do que um currículo baseado em C ++ faria contra uma lista como essa.
fonte
É difícil porque Java é inegavelmente mais fácil de aprender. Você estará fazendo mais cedo com Java.
C ++ é uma linguagem muito mais difícil de se trabalhar. Ponteiros e gerenciamento de memória são conceitualmente e praticamente difíceis de trabalhar. O C ++ não oferece redes de segurança.
A longo prazo, seria útil entender todas as coisas que o C ++ ensina. Além disso, a transição de C ++ para Java é muito mais fácil do que a outra direção.
Mas eu me pergunto se, ao iniciar e durante muitos projetos de graduação, a sobrecarga extra e a depuração que você precisa fazer para conseguir que algo funcione em C ++ tornaria seus projetos mais difíceis, seus prazos mais difíceis de cumprir e sua vida muito mais frustrante. . Para conseguir o mesmo em C ++ e Java, eu diria que, em quase todos os casos, você faria o trabalho mais rapidamente em Java e enfrentaria menos problemas irritantes. Isso pode ser realmente importante quando você está no final de um semestre e tem cinco cursos que precisam do projeto de final de curso no mesmo dia.
O outro lado disso é que, se esses testes não fizerem com que você jogue a toalha completamente, eles o tornarão um programador melhor se você tiver dominado o C ++. E se sua carreira for em C # ou Java ou python e você nunca precisar tocar em outro indicador de sua vida, apreciará muito mais ...
fonte
C ++ é o mais flexível e oferece uma compreensão mais profunda. Inquestionavelmente, você obterá mais do C ++ do que do Java. C ++ também é mais difícil, porque é mais complexo.
Dito isto, os trabalhos em C ++ não são tão comuns quanto os trabalhos em Java.
Java e seu descendente, C #, são as soluções padrão para o espaço de codificação de empresas de grande porte. Eu recomendo fortemente que você aprenda um dos dois no seu segundo ano e fique muito confortável com ele quando terminar o curso. Isso permitirá que você obtenha trabalhos muito mais fáceis. Isso não significa que eu acho que esses empregos tenham um interesse intelectual significativo, em média. Eu passei recentemente por trabalhos de software craigslist nas Montanhas Rochosas e a maioria dos trabalhos eram em C # / Java e relacionados ao que é chamado de software " CRUD "; OMI é muito chato.
fonte
Tendo ensinado C ++ e Java no nível da faculdade, eu recomendaria fortemente Java .
O Java auxilia no processo de aprendizado e incentiva o bom comportamento da programação. As bibliotecas integradas para Java são úteis e facilmente disponíveis em todas as instalações. Ser capaz de criar um aplicativo GUI em uma frase, usando as bibliotecas internas disponíveis em todas as instalações Java e que correspondam a todos os tutoriais que os alunos encontram em uma pesquisa no Google, é crucial para ajudar os alunos a ir além do idioma e começar a entender os conceitos de programação .
Os IDEs para Java fornecem suporte para alunos iniciantes e continuantes. Trazer ferramentas poderosas de refatoração para a conversa mais cedo (ao discutir OOP, por exemplo) ajudará os alunos a aprender a escrever código de manutenção.
Embora o C ++ seja uma linguagem útil para se conhecer, os conceitos adicionais aprendidos no C ++ não valem realmente o esforço extra da linguagem como um todo. Há um grande conjunto extra de "truques" que devem ser ensinados e que podem ser introduzidos posteriormente (problemas de gerenciamento de memória e estouros de buffer para citar alguns). Exigir que os alunos os entendam antes de passar para conceitos como complexidade e herança algorítmica diminui a velocidade, da mesma maneira que exigir que o motorista entenda a pressão dos pneus antes de dirigir desacelerará o Ed do motorista. Claro, você precisa saber disso. Mas você só precisa conhecê-lo como algo que você errará algum dia, não como um componente de um conceito maior.
fonte
Penso que a pergunta mais importante é se você quer ser um bom programador ou se concentrar em ciência da computação. Se CS é seu objetivo e você deseja estar em uma rota PHD, talvez Java seja o caminho a seguir. Java fornece as classes de coleções Java, que possuem muitas estruturas de dados e algoritmos pré-fabricados. A vantagem disso é dupla: primeiro, é possível brincar com as estruturas e algoritmos de dados para ver o que eles fazem antes de se preocupar com a forma como foram construídos. Segundo, isso oferece aos professores mais oportunidade de ensinar princípios de CS que usam estruturas de dados sem ter que se preocupar com o âmago da questão. Mais tarde, eles podem voltar e pedir aos alunos que criem as estruturas do zero.
C ++, por outro lado, é uma linguagem de nível inferior. Obriga você a considerar indicadores e coleta de lixo. A curva de aprendizado é um pouco mais íngreme, mas no final, quando você se encontra programando com estruturas externas, sentirá menos como se estivesse apenas confiando na magia oculta. Além disso, muitas empresas maiores ainda estão usando C ++. É mais difícil ir de Java para C ++ do que C ++ para Java.
fonte