Quais idiomas (ou classes (como nos paradigmas) das linguagens de programação, mais um idioma recomendado para essa classe) todos os estudantes de ciências da computação devem ser ensinados na faculdade, de acordo com você? Motive suas respostas; por que esse idioma? Que utilidade terá disso? Que conceitos ele ensina (melhor que o idioma X)?
Nota / esclarecimento : Esta pergunta é sobre ciência da computação, com forte foco em engenharia de software, não pura ciência da computação. Ainda é o ensino da ciência da computação e não o ensino da engenharia de software que é o foco.
Respostas:
Vou dar uma lista:
Os estudantes devem ser expostos a todos esses paradigmas, no mínimo. Não é apenas um ou dois.
Suponho que muitas pessoas sugeram que o Python cubra o estilo processual, o estilo OOP e talvez outros, mas eu não tenho experiência pessoal suficiente com o Python para poder recomendá-lo com confiança.
fonte
Pessoalmente, acho um pouco triste que as linguagens funcionais não sejam ensinadas predominantemente como costumavam ser. Penso que, no mínimo, os alunos de ciências sociais devem ser expostos a uma linguagem de todos os principais paradigmas: processual, orientado a objetos, funcional e dinâmico.
fonte
Eu acho que um estudante de CS bem equilibrado deve aprender uma linguagem em cada um dos quatro tipos de linguagem de programação:
Funcional - Lisp / Haskell / PostScript. Não tenho muita experiência com Haskell, mas ouvi outros programadores que se entusiasmam com isso. Compreender as construções da programação funcional e por que elas são úteis em muitas situações ajudará o programador a melhorar a organização de algoritmos em outros idiomas também.
Orientado a objetos - faça a sua escolha. C # / Java / Python / Ruby / yadda yadda yadda. Esse tipo precisa ser ensinado simplesmente porque é isso que as empresas modernas desejam.
Imperativo - C / Fortran / Pascal. Estes são menos comuns atualmente, mas ainda devem ser aprendidos de uma perspectiva prática / histórica. Os métodos que eles empregam ainda têm praticidade, porque em todas as línguas tudo se resume a uma instrução. E linguagens imperativas são muito boas em listar e seguir instruções.
Lógico - ProLog. Nunca encontrei um bom uso prático para nenhuma dessas linguagens, mas encontrei alguns dos conceitos por trás das linguagens lógicas úteis ao tentar descobrir como escrever alguns dos meus métodos em linguagens mais orientadas a objetos. Não consegui me concentrar muito nas linguagens lógicas durante meus anos de faculdade, e acho que um foco mais forte por lá poderia ter me ajudado bastante.
fonte
O idioma nº 1 que todo graduado em CS deve conhecer é aquele que maximiza seu potencial para conseguir um ótimo emprego. Isso mudará com o tempo, mudará com base na definição individual de ótimo trabalho e variará por região geográfica.
Por enquanto, direi que o inglês é o idioma número 1 que todo especialista em CS deve conhecer (isso, é claro, varia de acordo com a região).
fonte
Eu acho que muda com o tempo, mas idealmente - 3 idiomas de 3 perspectivas muito diferentes. Na minha época, era processual, OO e funcional - Pascal, C ++ e LISP. Eu não sou tão tão vendido particularmente nesses três. Mas quando entrevisto, procuro:
Como outro negócio - acho que os programas de CS precisam treinar os alunos em idiomas de destaque no mercado. A qualquer momento, acho que 2-3 idiomas têm um destaque importante para a maioria dos empregos. Eu acho que uma escola deve aos alunos oferecer a oportunidade de aprender 2 em cada 3 desses idiomas com uma profundidade de treinamento disponível em pelo menos um.
fonte
Para um estudante de CS, procure por linguagens de programação que sejam mapeadas de perto para os conceitos de CS que estão sendo discutidos. Eu sugiro:
A lista poderia continuar dessa maneira, mas a idéia fundamental é bem simples: ensine aos alunos a linguagem de programação que melhor se adequa à maneira como você deseja ensinar os conceitos.
fonte
yacc
para ter uma idéia do que está acontecendo nos bastidores, qualquer que seja a linguagem de programação que você esteja usando. ajuda a compreender conceitos básicos como código morto e vários tipos de otimizações que um (bom) compilador poderá fazer por você.
fonte
Lisp (com CLOS para OOP) e Haskell. Esta questão não se restringe aos estudantes. Novas linguagens de programação sofisticadas emprestaram (copiadas, roubadas? ... não, não é ruim) muitos recursos desses dois. Você pode se preparar para o futuro. Atualmente, a programação funcional (estilo) é mais importante e é introduzida em linguagens de programação imperativas como C # (LINQ) ou C ++ (lambda) e muito mais. É uma pena que alguns alunos estejam aprendendo apenas Java.
fonte
Eu acho que a linguagem não é tão importante quanto as pessoas acreditam.
Sim, você precisa saber como programar, etc., mas muitos grandes programadores são autodidatas, aproveitando suas experiências do mundo real que os ajudam no desenvolvimento.
Os alunos poderiam aprender algumas lições sobre como programar no mundo real e não apenas os métodos do livro, isso os tornaria mais "arredondados" e, na minha opção, melhores desenvolvedores / graduados.
Aprendi mais sobre programação e desenvolvimento de software depois que saí da universidade e comecei a trabalhar!
fonte
REALMENTE IMPORTA?
Normalmente, a coceira por trás dessa pergunta é "Que palavras de ordem posso colocar no meu currículo que me proporcionarão os trabalhos mais lucrativos / interessantes / desafiadores / fáceis?". Embora a questão tenha méritos, a maioria dos currículos é examinada pela primeira vez por pessoas de RH que não entendem o que estão procurando. mas é muito superficial, pois depois de passar pelos portões, você precisa entregar a mercadoria.
Não são as linguagens que você conhece que o tornam um programador bom ou ruim, é como você pode usá-lo. Para isso, existem basicamente duas categorias de programadores:
Os que se concentram no aprendizado de um idioma são essenciais. O mais importante é o idioma e como usá-lo. Em extremos, eles tendem a otimizar super cada pequeno pedaço de código e geralmente usam recursos obscuros apenas porque podem.
Depois, há quem queira aprender sobre técnicas e paradigmas. O idioma que eles usam realmente não importa, desde que ele possa expressar sua imagem mental com elegância. Em extremos, eles tenderão a usar UML ou outros sistemas, esperando que outros façam o trabalho pesado de codificá-lo.
Na minha opinião, você precisa de ambos. O número 1 fornecerá habilidades de curto prazo e, quando escolhido com sabedoria, facilitará você através dos portões de RH, mas o número 2 permanecerá com você toda a sua carreira e o definirá como programador.
O nº 2 fornecerá orientação e organizará sua linha de pensamento em direção a uma solução que funcione para o problema em questão, mas sem 1 isso permanece uma idéia, sempre flutuando nos limbos do paraíso dos vapores (ou inferno, dependendo de onde você olha).
O número 1 lhe dará os meios para implementar idéias em sistemas de trabalho reais, mas sem o sistema 2, eles tenderão a monstros disformes e cancerosos.
fonte
Eu acredito que você respondeu parcialmente a sua pergunta.
De real importância é dar aos alunos a oportunidade de entrar em contato com vários paradigmas, os idiomas reais não devem importar.
Obviamente, é importante ensinar principalmente os paradigmas que oferecem a maioria das oportunidades de trabalho (provavelmente OOP neste momento). Portanto, também é melhor ensinar uma linguagem amplamente usada para esse paradigma, pois isso é mais útil do que aprender algo que você provavelmente nunca usará. Portanto, eu também odiava ter que escrever pseudo-código nos meus exames. O pseudocódigo é bom, desde que não tenha uma sintaxe 'fixa'. Você deve ser capaz de transmitir conceitos.
Tão concretamente:
OOP: .NET ou Java
Pelo menos 1 paradigma de programação adicional, para conscientizar o aluno sobre outras abordagens.
Funcional: Lisp?
fonte
Linguagem de montagem e microcódigo. Um estudante de CS deve entender todas as camadas básicas de abstração entre máquinas de estado booleanas e os mais recentes funcionais de alto nível / OOP / etc. paradigma da linguagem de programação.
Básico ou Logo ou Squeak (et.al.), se eles quiserem entender como ensinar às crianças pequenas algum conhecimento em informática.
Fortran, Cobol e Lisp, se eles querem entender a história das linguagens de programação e quais são os problemas reais corrigidos pelas práticas modernas.
fonte
Escolher 3 ou mais idiomas de diferentes paradigmas não é tão difícil, muitas boas respostas foram dadas. Mas se eu tivesse que escolher apenas um idioma, iria para o Scala, porque é funcional e orientado a objetos. Você pode explicar e comparar diferentes abordagens no mesmo idioma.
fonte
Não se esqueça das linguagens orientadas a pilha / concatenativas! Eles podem ser verdadeiros dobradores de mente. Eles enfatizam a complexidade da construção usando primitivas pequenas e fáceis de entender. Você pode usá-los para escrever código sem ponto (ou tácito) que parece tão limpo.
A linguagem clássica é a quarta , mas o meu objetivo atualmente é o fator . Também vale a pena conferir o Joy and Cat . Não perca o wiki da linguagem concatenativa . É mais divertido do que uma sacola cheia de martelos!
fonte
Algo funcional, Haskell ou Lisp, seria minha primeira escolha, mas talvez Erlang. Linguagens funcionais realmente ensinam como criar abstrações de uma maneira muito poderosa.
fonte
Apesar de sua falta de integração, acho que D, especificamente a versão 2, fornece algumas lições interessantes que não podem ser facilmente aprendidas em outros lugares. Ele faz uma tentativa mais séria do que qualquer outra linguagem em que eu possa obter uma programação imperativa / procedural, orientada a objetos e funcional para se comportar bem uns com os outros e permitir a programação em um nível muito baixo (indicadores, gerenciamento manual de memória, inline). linguagem assembly) e um nível muito alto (programação genérica e generativa) na mesma linguagem.
Isso é valioso porque, em vez de ver paradigmas isolados, como se existissem em universos diferentes, você vê a floresta através das árvores. Você vê os pontos fortes e fracos de cada paradigma em um nível mais refinado, enquanto os mistura em seus programas. Você vê como os principais aspectos dos paradigmas podem ser implementados nas bibliotecas em termos de código de nível inferior. O módulo de biblioteca padrão std.algorithm implementa importantes primitivas de programação funcional, mas é um código D simples e direto, sem mágica. Da mesma forma, std.rangeimplementa uma avaliação lenta, mas novamente é um código D bastante simples. Você entende os custos envolvidos nas primitivas de cada paradigma, porque os recursos próximos ao metal de D tornam o que realmente está acontecendo sob o capô relativamente transparente. Você pode até escrever algo de baixo nível que se parece com C e, em seguida, criar uma interface bonita e de alto nível, no mesmo idioma, sem que camadas de cola mágica atrapalhem.
fonte
Pseudo-código.
As pessoas no campo devem ser capazes de explicar suas idéias de maneira coerente e estruturada, sem jargões específicos de estrutura ou sintaxe. Eu não deveria ter que saber a diferença entre seus colchetes e chaves para entender seu algoritmo. Eu não precisava saber o que
??
significa ou quaisgrep
são as opções.Escreva em linguagem simples, mas estruture e formate-o como código. Qualquer um pode implementá-lo no idioma que desejar.
edit: Esta resposta é parcialmente motivada pela incapacidade de alguns programadores de escrever pseudocódigo.
Os benefícios do pseudocódigo é que as partes interessadas que não fazem parte da programação podem entendê-lo. Não estou sugerindo que você queira BAs e usuários revisando seu código, no entanto, isso pode ajudar quando um não programador entender o algoritmo necessário. O Psuedocode remove a necessidade de explicar
for (int i = 0; i < j; i++)
e o que é essencialmente o jargão padrão.fonte
C.
Obviamente, deve-se conhecer mais de um idioma, e não apenas um antigo idioma processual. Mas se eu tivesse que ir a uma ilha deserta com apenas um compilador, iria com meu bom e velho gcc. Você pode entender a programação de alto nível se souber sobre programação de baixo nível. Eu acho que não é verdade o contrário.
fonte
Algumas das linguagens de programação aplicadas para adquirir habilidades gerais de resolução de problemas e conceitos de programação são Logo e Karel, elas devem ser ensinadas antes de C / C ++ / Java / Lisp / PERL / Assembly / qualquer paradigma de programação.
Os alunos recebem uma introdução muito prática à programação.
fonte
Qualquer coisa com objetos. Apenas certifique-se de que eles aprendam bem.
Eu contrataria um ótimo programador java para c # a qualquer momento, mas teria muitas dúvidas em contratar alguém que nunca escreveu código real
fonte