Por que parece haver muito medo em escolher o idioma "errado" para aprender? [fechadas]

28

Talvez seja só eu, mas como estudante atual de CS, já deparei com muitas perguntas neste site e em outros lugares sobre não apenas "Qual idioma devo usar para x?" mas também "Alguém ainda usa o idioma Y?" Minha primeira aula de CS foi ministrada em Scheme, que, se não me engano, não é amplamente usada (pelo menos em comparação com linguagens como Java, PHP, Python, etc.). Muitos de meus colegas de classe se recusaram a ter que aprender um idioma que nunca precisariam usar novamente, mas não entendo de onde vem tanto desse medo de aprender idiomas menos populares. Não, eu não posso usar o Scheme em qualquer trabalho que conseguir, mas certamente não me arrependo de ter aprendido a usá-lo (embora de maneira muito iniciante, não muito profunda naquele semestre). Estou participando de uma aula de mecanismos de pesquisa neste semestre, o que é feito em Perl e novamente vejo colegas reclamando da escolha do idioma. Eu posso entender ter um idioma favorito e não gostar de outros, mas por que alguns se preocupam em aprender isso em primeiro lugar? Você pode realmente aprender o idioma "errado"? Aprender algo como Scheme ou Haskell não é bom exercício mental, senão nada, e útil pelo menos à exposição a diferentes maneiras de resolver problemas?


fonte
Curiosamente, meus dois primeiros anos de educação em CS envolveram apenas C # e Java, e adivinhem o que acabei usando no meu primeiro estágio de cooperação? Palavra de quatro letras, começa com "P".
Anon.
6
@Shewbox, você está certo, eles estão errados, você terá a vantagem do aprendizado cruzado, eles não. Fim da história.
Ocodo 14/02
7
Eles estão fazendo SEO (otimização de mecanismo de busca) com os gerentes de contratação.
Rwong
1
@rwong: e infelizmente alguns de nós tivemos que aprender da maneira mais difícil para não colocar "Eu usei o XXX uma vez e nunca mais o tocarei", porque alguns recuiters enviam spam nas correspondências de palavras-chave.
1
@JB: 99% das pessoas fazem os outros parecerem estar se beijando.
Michael K

Respostas:

27

O objetivo de um curso de CS não é ensinar C # e Java; você pode aprender sozinho. É para te ensinar sobre programação e computação. A linguagem é apenas um detalhe. Ao longo de uma carreira em programação, você usará muitas linguagens. Hoje pode ser Java ou C #, mas daqui a 10 ou 15 anos pode ser Erlang ou algo que ainda nem foi inventado. Aprender estilos de programação diferentes e maneiras diferentes de atacar um problema é muito mais importante do que aprender qualquer idioma.

Zachary K
fonte
Exatamente - meu diploma é anterior a C ++ e muito menos a Java ou C #. Embora tenhamos aprendido principalmente em Pascal, recebemos problemas em várias línguas desde o início e, em nosso segundo ano, tivemos um curso que correspondia à "língua do mês", a simula (usada para fazer simulações) continua sendo minha memória mais querida - embora não há nenhuma chance de eu agora escrever qualquer código Simula - principalmente por causa do OOP ensinou-me (embora eu não soubesse disso na época)
Murph
17

Porque a sua primeira língua moldará o seu modo de pensar, até você aprender o contrário.

Se você é analfabeto computacionalmente (programador iniciante) e o primeiro idioma que aprende é muito "básico", talvez não conheça conceitos de ordem superior como orientação a objetos, despacho múltiplo, herança, funções de primeira classe, metaprogramação etc.

A primeira língua que você aprende geralmente está ligada à sua primeira incursão no pensamento computacional. Se alguém lhe disser, Jimmy, o mundo antes de você consistir nos símbolos A, B e C, todo o seu pensamento será em termos de A, B e C. Até que um dia, um nerd chocado zomba de você por não conhecer X , Y e Z conceitos. Não há como você saber disso sabendo apenas o ABC.

As pessoas mais preocupadas com a primeira língua de alguém provavelmente são programadores esclarecidos que lutaram na escuridão. Ah, agora eu sei o que é uma função de primeira classe. Cara, eu gostaria de saber sobre injeção de herança e dependência há dois anos!

Seu primeiro idioma não é tão importante quanto sua atitude em relação aos idiomas subsequentes. Se você pode ver bem à sua frente saber que existe um mundo além do BASIC / C / Perl / PHP / etc, estará muito à frente do jogo. É por isso que muitas pessoas são fanáticas por linguagens funcionais, pois muitas linguagens ativamente desenvolvidas estão convergindo para elas.

Mark Canlas
fonte
1
Todos nós precisamos começar com esses conceitos básicos. Quando alguém aprende um novo conceito (use os padrões de design como exemplo), eles tendem a usá-lo em qualquer lugar por um tempo. Se eu não tivesse passado os primeiros 5 anos programado na estrutura do programa de aprendizado básico e em como pensar como programador, quando chegasse ao OO, estaria tão ocupado aprendendo a parte processual que não poderia ter me concentrado na Parte OO. Dito isto, +1 em 'Seu primeiro idioma não é tão importante quanto sua atitude em relação aos idiomas subsequentes' e conceitos .
Michael K
Pensei em acrescentar isso. Não estava dizendo que os idiomas básicos não têm o seu lugar. De fato, eles fazem (nos estágios iniciais de aprendizado). Eu apenas não mencionei isso.
Mark Canlas
Oh Michael, sua edição é muito mais elegante, hahahaha.
Mark Canlas
Se os colegas de classe do OP estão preocupados, o esquema é o idioma errado para aprender, provavelmente eles não são tão esclarecidos. :)
David Moles
Algumas linguagens têm sintaxe complexa enquanto são realmente simples (derivadas C), outras possuem sintaxe simples enquanto são realmente complexas (Groovy). Com isso, quero dizer - em C / C ++ ou Objective-C - as coisas são bastante declarativas e procedimentais em qualquer escopo de código ativo, enquanto algo como o Groovy tem muitas coisas "ocultas" que são "ocultas" pelo açúcar de sintaxe. Minha sugestão para iniciantes é geralmente acompanhar as difíceis linguagens de sintaxe que refletem mais de perto como um computador realmente funciona - porque esse conhecimento simplifica o uso de outros idiomas.
dcgregorya
11

Quando estava na faculdade, conheci muitas pessoas que decidiram se formar em economia, não porque era algo pelo qual elas estavam particularmente interessadas ou apaixonadas, mas porque pensavam que isso lhes daria um bom emprego.

Eu me formei em Estudos do Leste Asiático porque as aulas que tive como efeito colateral do meu interesse inicial em literatura me atraíam. Fui para a Alemanha porque queria fazer um programa de intercâmbio, onde passava a maior parte do tempo em programas de japologia e sinologia. Estudei o que mais me interessava. Decidi não usar a faculdade para estudar coisas relacionadas ao computador, pois já havia hackeado uma boa quantia durante a minha infância, mas passei um tempo programando e entendendo a Internet e, eventualmente, talvez de maneira improvável. , Consegui um bom trabalho que conseguiu combinar todos esses interesses.

A diferença está entre o Carreirista e alguém que aprende pelo bem da aprendizagem. O Carreirista está preocupado que eles tenham estudado A Coisa Errada, e que se arrependerão porque não será a Coisa Certa Me Conseguir um Emprego. A pessoa que aprende em prol da aprendizagem percebe que tem 4 anos para gastar tempo explorando todos os tipos de campos com pressões relativamente gerenciáveis; o carreirista pensa que o trabalho da escola é ensinar-lhes algo. O aluno descobre as coisas quando atinge um território desconhecido e tem uma chance maior de encontrar o emprego certo para eles. O Careerist acaba sendo um contador de segunda categoria em uma empresa de terceiro nível, paga as contas e se ressente do chefe.

Sim, esses são arquétipos e todos precisam equilibrar o pragmatismo com suas paixões, mas essa é a diferença essencial. É verdade que alguém com a estética do programador também pode fazer a pergunta, mas mais no contexto de "qual será o uso menos desperdício do meu tempo". Mas meu palpite é que é o impulso carreirista que faz essa pergunta, porque o Carreirista tem muito mais medo de cometer um erro do que o Aprendiz, e o Aprendiz geralmente faz um programador melhor porque o Aprendiz não teme erros. O aprendiz, como o programador, abraça o fracasso na busca de habilidades.

JasonTrue
fonte
9

Sim, aprender linguagens funcionais como Scheme e Haskell é uma boa introdução à programação funcional. Tanto quanto seus colegas reclamando do Perl, embora o Perl não seja tão popular como era antes, certamente ainda é uma linguagem amplamente usada nos negócios.

Entendo seus colegas de classe que desejam aprender linguagens práticas usadas no mundo real, mas acho que eles perdem o ponto de que, uma vez que você é um programador experiente e exposto a vários paradigmas de programação, aprender novos idiomas é principalmente uma questão de aprender. a nova sintaxe. Assim, desde que você tenha exposição aos conceitos, poderá "se especializar" em qualquer idioma que seu empregador preferir, sem muita dificuldade.

Zeke
fonte
5

Talvez porque as pessoas tenham sido influenciadas por declarações como a peça clássica de trollagem de Edsger Dijkstra: "É praticamente impossível ensinar boa programação a estudantes que tiveram uma exposição prévia ao BASIC: como programadores em potencial, eles são mentalmente mutilados além da esperança de regeneração". ( link )

Isso leva ao medo de sofrer danos cerebrais permanentes se você aprender o idioma "errado". Seu exemplo do Perl não é surpreendente, já que o Perl é uma daquelas linguagens que frequentemente invoca críticas como essa de seus detratores.

Carson63000
fonte
5

Seu primeiro idioma deve se concentrar em conceitos, não em sintaxe ou expressões idiomáticas. Usando isso como uma diretriz:

  • Perl significa muita pesquisa de variáveis ​​especiais e sintaxe arcana
  • PHP significa mistura de conceitos por causa de seu crescimento orgânico
  • Java significa um pouco de confusão, pois nem tudo é realmente um objeto
  • Assembly / C / C ++ significa uma tonelada de coisas de baixo nível, o que é ótimo se você deseja desenvolver sistemas embarcados, mas diminui os conceitos de nível superior
  • O SQL é útil para ver como a linguagem natural pode (e não pode) ser mapeada para estruturas de código e dados
  • O Visual Basic for Applications concentra-se em itens descartáveis ​​para fins especiais e, como tal, facilita demais ignorar conceitos importantes, como manipulação de erros e refatoração
  • O LISP parece uma sintaxe simples, mas também possui muitas expressões abreviadas que são francamente sem sentido, sem o conhecimento detalhado de seus nomes completos
  • Haskell geralmente se parece muito com a matemática, mas pode rapidamente degenerar em sopa de sintaxe
  • Python ... Na verdade, Python é a única linguagem que não consigo encontrar objeções sérias para iniciantes. Talvez simplesmente porque seja o último idioma que aprendi e o próximo idioma me ensinará o erro dos meus caminhos.
l0b0
fonte
Notei que você não escreveu nada sobre C # ou VB.Net.
HK1 14/02
4

Pergunte a seus colegas de classe como eles sabem que um idioma está "errado" se eles não o usaram. Você só pode descobrir o que gosta usando uma grande variedade de idiomas.

Muitos de meus colegas de classe se recusaram a ter que aprender um idioma que nunca precisariam usar novamente, mas não entendo de onde vem esse medo de aprender idiomas menos populares.

Sem conhecê-los, não posso dizer com certeza por que eles se sentiriam assim. Talvez eles sejam preguiçosos. Talvez eles tenham usado o idioma antes e não tenham gostado. Talvez eles tenham medo de tentar outro idioma. Quem sabe. O que eu sei é que, como estudante de CS, pesquisador e tendo trabalhado na indústria, conhecer uma variedade de idiomas, bem, é um grande patrimônio e você nunca sabe o que vai usar ou não. Exemplo: Quando eu estava aprendendo C, meu professor nos apresentou os scripts de shell e utilitários de linha de comando como grepe awk. Meus amigos não se preocuparam em aprender isso com um nível de competência. Agora eu os uso no trabalho todos os dias.

Estou participando de uma aula de mecanismos de pesquisa neste semestre, que é realizada em Perl, e novamente vejo colegas reclamando da escolha do idioma.

O Perl é muito poderoso e, se você souber usá-lo, pode tornar sua vida muito mais fácil. Também é semelhante ao Python, e o Python é muito usado em um dos principais recrutadores de estudantes de CS: o Google. Seus colegas de classe devem estar comendo isso. FWIW, eu sei perl e python a um nível intermediário (não um iniciante, mas não um especialista).

Eu posso entender ter um idioma favorito e não gostar de outros, mas por que alguns se preocupam em aprender isso em primeiro lugar?

Jovem e vaidoso? Eu também era assim. Mas meu "aborrecimento" estava mais no domínio da matemática. Então, com base nessa experiência, eu apostaria que eles estão preocupados porque não gostam de aprender coisas novas ou porque é difícil aprender novos idiomas para eles. (Mas então, qualquer coisa que valha a pena saber não vai cair no seu colo, eu digo)

Você pode realmente aprender o idioma "errado"? Aprender algo como Scheme ou Haskell não é bom exercício mental, senão nada, e útil pelo menos à exposição a diferentes maneiras de resolver problemas?

Para a primeira frase: Não, mas você definitivamente pode aprender idiomas que preferiria não ter + tosse + Lisp + tosse + =)

Para o resto: Sim! Você deve aprender o maior número possível de idiomas para descobrir o que gosta e expandir seus horizontes. Não é necessário dominar todos eles, mas ter um conhecimento prático é sempre útil. Você nunca sabe quando um idioma que você pensou que seria uma perda de tempo para aprender é útil.

aqua
fonte
1
O que há de errado com Lisp?!?! :)
Michael K
1
+1 para 'aprender o maior número possível de idiomas'. Se você conhece vários idiomas, torna-se trivial escolher um para uma determinada tarefa.
Michael K
1
@ Michael: Além disso, fica mais fácil aprender um novo, já que você já conhece a maioria dos conceitos.
David Thornley
@ Michael: Nada de errado com Lisp =). Eu simplesmente não sou um cara de linguagem de programação funcional. Além disso, tantos parênteses! No entanto, eu vi algumas soluções MUITO elegantes implementadas no Lisp. Muito respeito pelos gurus de Scheme e Lisp.
água
3

Como a contratação de programadores é um processo tão arbitrário e caprichoso, o simples fato é que, se você escolher a tecnologia errada, poderá encontrar o caminho do dodo.

Na primeira página, a qualquer momento, você verá um fervor religioso próximo de crenças como:

  1. Um diploma universitário em ciência da computação é necessário para ser um bom programador.
  2. Um mestrado em ciência da computação torna as pessoas ruins para programadores.
  3. Certificações são absolutamente necessárias para avançar em sua carreira.
  4. As certificações são uma bandeira vermelha indicando um programador ruim.
  5. Um diploma universitário em um campo diferente da ciência da computação tende a resultar nos melhores programadores.
  6. Você não é um bom programador, a menos que também programa à noite e nos fins de semana.
  7. e continua.

A única constante em tudo isso é que 99% das empresas por aí querem que você tenha X anos de experiência com a tecnologia Y ... E como uma pessoa só tem tantos ciclos disponíveis, o que eles gastam nesses ciclos é muito importante.

sujeira vermelha
fonte
2

Eu acho que o medo de escolher o idioma “errado” para aprender se deve principalmente à falta de informações e falta de orientação , como:

  • Falácia da bala de prata . O equívoco de que existe o idioma certo para o trabalho, ambiente ou projeto. E se você escolher o errado, você está brindado.
  • Não entendendo que a programação transcende linguagens . A linguagem é apenas uma ferramenta, como máquina de escrever ou computador para escritor. Não se trata de aprender nuances da ferramenta (sintaxe), mas o que a ferramenta permite (conceitos, abstrações, etc.) você criar.
Maglob
fonte
É por isso que, por exemplo, o Scheme é uma ótima linguagem de ensino. A programação é sobre duas coisas: abstração e reutilização. O esquema tem exatamente dois recursos: abstração de funções e chamada de função (ou seja, reutilização). Caramba, ele nem tem sintaxe!
Jörg W Mittag
2

Estamos expostos a mais opiniões.

Comparado a como as coisas podem ter sido feitas no passado, há mais dúvidas sobre como estamos gastando nosso tempo porque estamos expostos a mais opiniões - todo mundo pensa sobre qual deveria ser a primeira linguagem de programação e, como é um assunto tão delicado, qualquer um pode justificar qualquer coisa .

Devido ao nosso estilo de vida veloz, todos têm um medo inato de desperdiçar seu tempo. O medo acentuado de aprender o idioma errado é simplesmente o resultado de as pessoas serem facilmente expostas a uma infinidade de opiniões.

JK
fonte
1

É a aversão geral de aprender algo que tem utilidade questionável. Eu posso ver a picada aqui sendo ainda pior, já que essa é a classe que as pessoas querem e ainda aprendem algo que acham inútil. Sei que, se eu fosse fazer uma colagem, gostaria de aprender algo que possa usar no mundo real.

A única parte em que eu poderia discordar dessas outras pessoas é quando um idioma está em uso intenso e elas simplesmente não querem sair da bolha para aprender. Só então a queixa não faz sentido.

TheLQ
fonte
1

Por que é 'medo'? Eu chamaria isso de animosidade de ter sido alimentado à força por algo que você não deseja ou não considera importante. Nenhum idioma está errado, mas temos tempo limitado para focar nas coisas. Eu tive que fazer minhas aulas de CS com Java e não estava feliz com isso. Não porque eu temia que Java fosse a linguagem errada, mas não era aí que estava o meu foco na carreira.

Agora Java é útil, certo? LOL Todo mundo aprende Java. É nisso que você não deseja competir. Seu currículo estará em uma pilha de 1000, com o título Recém-formado em CS, que conhece Java. Seu esquema de aprendizado sábio sobre empregabilidade provavelmente é melhor, pois esse é o sinal secreto de que você estudou em uma universidade de elite e não em uma faculdade comunitária.

Eu diria também que esse tipo de animosidade é muito mais amplo que o CS em geral, mas é indicativo do ensino superior em geral. Tenho certeza de que o instrutor escolheu Perl porque ele conhece e pode classificá-lo facilmente, e tem medo de aprender novos idiomas que os alunos preferem aprender. Eu acho que é sua própria educação e você deve ser capaz de mapear as tecnologias que considera necessárias para o seu próprio sucesso.

(O PS MIT desistiu do Schema e mudou para o Python)

nate c
fonte
Meio triste por desistir do Scheme, o SICP é algo que todo programador deve ler. Eu costumo promovê-lo a todo momento.
Zachary K
Isso me lembra meus dias na universidade. Alguns anos depois de começar, o departamento de CS mudou de C ++ para Java como a principal linguagem de ensino. Alguns anos depois (quando eu estava tentando ensinar tutoriais sobre estrutura de dados), ficou claro que nenhum dos alunos entendia nada sobre alocação de memória (por exemplo, eles estavam completamente perdidos na pilha versus na pilha). Conseqüentemente, eles não compreenderam operações básicas nas estruturas de dados que tentamos ensiná-las. Pouco tempo depois, o C ++ tornou-se a linguagem preferida novamente.
141111 smithco
Na prática - aprender novas linguagens é fácil depois que você entende de programação. As pessoas recomendam idiomas como C, porque exige que você declare ponteiros, aloque memória e proteja o acesso de gravação aos seus ponteiros ... quando você pensa nesses termos, tudo o resto é fácil porque você já considera todas essas coisas. É mais difícil fazer o inverso - começando com uma linguagem mais abstrata e construindo a experiência para entender todas as coisas subjacentes que estão acontecendo.
dcgregorya
1

O tempo é a mercadoria mais rara de todas, quando você sai para o mundo real - e ninguém quer perder tempo com habilidades que não lhes trarão nenhum benefício real.

Dito isto, acho que não há uma linguagem 'errada' para aprender - mas eu gostaria de ter descoberto Ruby anos atrás, em vez de ter dificuldades em fazer coisas avançadas em PHP ...

sevenseacat
fonte