Sou um jovem programador que deseja trabalhar em campo algum dia como programador. Eu sei Java, VB.NET e C #. Quero aprender um novo idioma (como programador, sei que é valioso estender o que sei - aprender idiomas que fazem você pensar de maneira diferente). Dei uma olhada on-line para ver quais idiomas eram comuns. Todo mundo conhece C e C ++ (mesmo aqueles trouxas que sabem muito pouco sobre computadores em geral), então pensei, talvez eu devesse pressionar C.
C e C ++ são bons, mas são antigos. Coisas como Haskell e Forth (etc. etc. etc.) são antigas e perderam sua popularidade. Estou com medo de aprender C (ou mesmo C ++) pelo mesmo motivo. O Java também é bastante antigo e lento, porque é executado pela JVM e não é compilado no código nativo.
Sou desenvolvedor de Windows há um bom tempo. Recentemente, comecei a usar Java - mas apenas porque era mais versátil e passível de expansão para outros lugares. O problema é que não se parece com uma linguagem muito utilizável por estes motivos:
- O objetivo mais usado é para aplicativos da web e aplicativos de celular (especificamente Android)
- Quanto aos produtos reais criados com ele, as únicas coisas que vêm à mente são o Netbeans, Eclipse (viva para criar e IDE com o idioma para o IDE - é como criar uma página da Web para escrever HTML / CSS / Javascript) e Minecraft o que é divertido, mas lento e bipolar no que diz respeito às especificações do computador. Apoio, suporte.
- Fora isso, é usado para servidores, mas heck - eu não quero apenas criar / configurar servidores .
As linguagens .NET são boas, no entanto:
- As pessoas riem se eu mencionar VB.NET ou C # em uma conversa séria.
- Não é multiplataforma, a menos que você use o MONO (que ainda está em desenvolvimento e tem algumas melhorias a serem feitas).
- Falta material de baixo nível porque, como Java com a JVM, é executado / gerenciado pelo CLR.
Meu primeiro pensamento foi aprender algo como C e depois usá-lo como trampolim para C ++ (apenas para garantir que eu tivesse uma forte compreensão / base), mas, como eu disse anteriormente, está ficando cada vez mais velho a cada minuto.
O que eu olhei
Fantom parece legal. É como um bom intermediário entre meus dois idiomas favoritos e até me permite publicar entre os dois de forma intercambiável, mas, ao contrário do que eu quero, ele compila para o CLR ou JVM (dependendo do que você o publica) em vez de ser uma compilação completa .
D também parece bom. Parece que uma língua muito útil e demultiplefontes parece realmente ser melhor do que C / C ++. Eu daria certo, mas ainda não tenho certeza do seu sucesso, porque, obviamente, não é muito popular no momento.
Existem outros que pareciam bem legais, focados em outras coisas, como o Opa no desenvolvimento da Web e o Go by GOOGLE.
Minha pergunta
Vale a pena aprender essas línguas "experimentais"? Li outras perguntas que dizem que, se você não está aprendendo constantemente idiomas e aberto a todos os idiomas, não está na mentalidade certa para programação. Entendo isso e ainda posso não estar entendendo direito, mas, na verdade, se um idioma não se tornar popular, devo gastar meu tempo aprendendo outra coisa? Não quero aprender linguagens de programação antigas (ou que em breve serão antigas). Sei que muitas pessoas vêem isso como algo importante *, mas algum de vocês realmente consideraria (supondo que já não soubesse) o FORTRAN? Meu objetivo é permanecer atualizado para garantir que eu seja bem-sucedido no futuro.
aviso Legal
Sim, eu sou um jovem programador, então provavelmente fiz muitas declarações ingênuas na minha pergunta. Sinta-se à vontade para me corrigir em QUALQUER COISA! Tenho que começar a aprender em algum lugar, para ter certeza de que muito do meu conhecimento é superficial o suficiente para causar declarações ou falhas incorretas no meu pensamento. Por favor, deixe algum sentimento que você tenha nos comentários.
Os resultados...
Estou verdadeiramente impressionado com as respostas surpreendentes, a maioria delas tão bem apontando meus mal-entendidos e equívocos. Eu aprendi bastante com isso e estou animado para utilizar tudo o que aprendi! Provavelmente vou começar a aprender Haskell a seguir (o idioma não tão antigo, embora com mais de 20 anos - hahaha ) e depois começarei a examinar algumas outras opções ao meu redor.
obrigado
fonte
Respostas:
A coisa com o aprendizado de idiomas drasticamente diferentes não é sobre o aprendizado de idiomas, é sobre a exposição a diferentes abordagens de problemas. Ferramentas para a caixa de ferramentas, por assim dizer.
Uma coisa a notar é que Haskell não é particularmente velho e é realmente um candidato muito bom para alguém familiarizado apenas com os idiomas comuns. Mesmo uma linguagem muito antiga como o Lisp é muito útil para aprender devido à sua influência nas coisas.
Além disso, Java e .Net não são interpretados e espero que você esteja fazendo algumas suposições incorretas com base nessa identificação incorreta.
fonte
Fique em forma: pratique regularmente
A prática leva à perfeição.
Quanto mais código você escreve e lê , mais se aproxima da iluminação / domínio como programador / desenvolvedor / engenheiro de software / guru / ninja / artesão / hacker / palavra-chave de escolha. Não apenas codificando e lendo mais, mas também tentando nossas novas maneiras de escrever código, mais esperançosamente você permanece.
Leitura recomendada:
Aprendendo sobre novos paradigmas e recursos de idioma
Talvez você não consiga traduzir o que você usa no novo Super-Language-X para o seu Enterprise-Language-Y, mas talvez seja capaz de reconhecer quando poderia ter sido um bom ajuste. Talvez você saiba quando integrar uma tecnologia ou pilha diferente em seu projeto para atender a um propósito específico. Ou talvez você saiba como usar os recursos do idioma Y para emular o recurso interessante do idioma X e refatorar seu código para se beneficiar dele (e potencialmente esclarecer outros colegas de trabalho ao longo do caminho).
Por exemplo, você pode ter descoberto princípios interessantes de FP e deseja adaptá-los ao Java, o que não é discutível por design .
Leitura recomendada:
Seja um Jack of All Trades ... Mestre de Alguns?
Você não sabe qual idioma se tornará principal quando estiver nesse estágio "experimental"; portanto, não se preocupe muito em apostar em um deles. As chances são de que outras pessoas façam a mesma aposta e ficarão intrigadas quando as virem aparecer no seu currículo. Adicione uma ferramenta ao seu cinto. No nosso caso, não há muito problema com o quanto isso pesa no final.
Claro, você não pode se tornar um mestre de todos os negócios. Mas você pode ser um mestre de um, e muito bom no resto. Você está aprendendo um ofício, e o nosso é multifacetado. Realizar exercícios regulares, participar de workshops, pegar um livro, escrever um novo projeto para animais de estimação e outras coisas semelhantes são a nossa maneira de acompanhar o ritmo cada vez maior de mudanças em nosso campo.
Leitura recomendada:
Permaneça Adaptável
Se você não aprender a se adaptar, é difícil fazê-lo quando precisar. Ao aprender constantemente coisas novas, você fica cada vez melhor escolhendo coisas novas (desde que não se limite a desafios muito semelhantes).
É como a música "Stay Young" do Oasis diz: Mantenha-se jovem e invencível .
Se você pode se adaptar, você pode sobreviver.
Leitura recomendada:
Mantenha-se visível: entenda o radar da agência de recrutamento
Eles usam palavras-chave e tecnologias como caixas de seleção. Nós os usamos como potes de mel para recrutadores irracionais.
Funciona nos dois sentidos. Contanto que você realmente saiba suas coisas, então ter muitas coisas em seu currículo é bom. Ele mostra sua adaptabilidade e amplitude de conhecimento. Além disso, se você realmente domina alguns deles e é decente em alguns outros, permite modular versões diferentes do seu currículo para diferentes posições e trabalhos.
Outros tópicos úteis da SE
fonte
Para estender a resposta de Telastyn, trata-se de exposição a diferentes paradigmas de programação . Por exemplo, não se trata realmente de aprender programação lógica, mas para:
http://skilldrick.co.uk/2011/02/why-you-should-learn-brainfuck-or-learn-you-a-brainfuck-for-great-good/
http://norvig.com/21-days.html (Peter Norvig)
fonte
Bem, esta é uma pilha gigante de falácia. As pessoas que conhecem C têm mais dificuldade em aprender C ++, porque praticamente tudo o que pensam saber sobre como usar a linguagem é uma pilha gigante de erros. Não há praticamente nenhum C idiomático que seja remotamente bom em C ++. É melhor você simplesmente aprender C ++ do zero. Pessoas como eu, que voluntariamente dedicam seu tempo para ajudar outras pessoas a aprender C ++, gastam uma proporção enorme tentando ensinar as pessoas a abandonar seus hábitos de C.
Quanto à popularidade, bem, o C ++ está passando por um ressurgimento recentemente. As pessoas notaram que, na verdade, o desempenho faz matéria, muito, e você não pode fugir com o funcionamento de cada componente como um conseguiu um, e Modern C ++ (especialmente com C ++ 11) é absolutamente nada como o lixo C eles pensaram que era , e realmente não é tão ruim assim. Não está realmente ficando mais velho. Está ficando mais novo. O novo padrão é uma grande atualização - e não há idiomas de substituição adequados, atuais ou em andamento, para muitas das áreas em que o C ++ é usado agora. Isso não é menos importante, porque não há linguagens com interoperabilidade decente em C ++ (até mesmo em C ++), dificultando a migração para longe das bases de código C ++ existentes.
Receba novas pessoas. AFAIK, VB.NET realmente não existe por nenhum motivo, exceto para ajudar a migrar para longe do VB6 e não é realmente uma meta digna, por si só, mas o C # é uma linguagem real. É como o Java, exceto que eles adicionaram recursos reais de linguagem e algumas boas bibliotecas. O C # é uma linguagem muito popular e bem suportada, com ferramentas muito boas no VS, que não é tão ruim assim e é uma coisa sólida, se não excepcional, a ser aprendida.
MONO é bastante estável. Além disso, 90% dos consumidores de desktop (ou 80%?) Executam o Windows agora. Se você desenvolver um aplicativo de desktop, é uma questão aberta se os usuários que não são do Windows valem o tempo de suporte, mesmo se você usar uma linguagem multiplataforma.
Por fim, você pode aprender muito com uma linguagem como C ++ ou Haskell, que se concentra na forte tecnologia de compilador, e não em um tempo de execução maciço.
Só não escolha PHP. A única coisa que você pode aprender com isso é como não criar um idioma.
fonte
Alguns comentários sobre o que você disse ...
1) Todo programador deve aprender C, mesmo que seja antigo. É uma ótima linguagem para se aproximar da máquina. Dos conselhos de Joel aos estudantes de CS ....
2) Os idiomas podem ser bons para aprender mentalidades, mesmo que não sejam comumente usados. Aprenda o Scheme (ou LISP) para entender a programação funcional, mesmo que não esteja na moda. De outro post neste fórum .
Agora, apesar de atacar sua premissa original, acho que você deve ser elogiado por sua curiosidade. Muitas pessoas se tornam obsoletas devido à falta de curiosidade. Aproveitar o seu desenvolvimento pessoal é um grande sinal de que você se desenvolverá bem. As pessoas que aprendem mais são as que desejam perguntar como as coisas funcionam.
fonte
QUALQUER idioma que você aprender vai mudar nos próximos 5 anos. Não se trata de aprender um idioma que você acha que pode demorar um pouco, mas sim de aprender a aprender. Quanto maior a exposição ao aprendizado do idioma, e o processo de aprendizado desse idioma o ajudará tremendamente a longo prazo!
A última empresa em que trabalhei usou sua própria linguagem interna. Era semelhante ao visual basic, mas não era o mesmo. Só pelo fato de conhecer outros idiomas, pude entender o idioma deles muito mais rapidamente do que os outros funcionários.
Eu aprendi japonês depois de aprender C ++, BASIC, Pascal e posso dizer que aprender uma língua de computador e uma língua estrangeira tem as mesmas habilidades. Essas habilidades podem ser perdidas ou afiadas. Se você possui a unidade, continue e aprenda novos idiomas!
(por exemplo, quanto ao aprendizado de FORTRAN ou assembly, acho que é valioso pelo menos um semestre dos idiomas mais antigos. Isso faz você pensar em coisas que você não reconhece nos idiomas mais novos, coisas como sinalizadores, alocação de memória e outras coisas. .)
fonte
É melhor você aprender o maior número possível de linguagens "antigas", se quiser ser um programador. Comece com Lisp, conheça Forth, preste muita atenção à evolução de todas as linguagens Wirth, evolução de Fortran, ascensão e queda de Prolog, entre furtivamente no ecossistema Ada secreto, pegue sua arma secreta aprendendo Occam. Perseguir o "mainstream" é a coisa mais estúpida que um aspirante a programador poderia fazer.
fonte
Eu concordo com você na parte da exposição das coisas. Embora eu conheça Java, C, C ++, Javascript, Python, Ruby e um pouco de .NET (principalmente porque odeio qualquer coisa M $ <- opinião pessoal), devo dizer que adoro programar em D.
D tem um conjunto de recursos muito bom (a maioria deles é implementada em C ++ / Java (linguagens que possuem abstrações de classe) etc.), mas a única coisa que eu mais amo são os genéricos e delegados (facilita a implementação de retornos de chamada). Além disso, você tem uma sintaxe muito mais simples de lidar em comparação com o C ++. D tem um coletor de lixo realmente eficiente, embora você possa optar por lidar com a memória (especialmente ao fazer interface com os módulos C / C ++). Embora D não tenha muitos módulos contribuídos pelo usuário, isso não deve ser uma barreira para entrada. Você pode interagir facilmente com as bibliotecas C / C ++ existentes (que são bastante flexíveis), tornando-o redundante por necessidade de módulos.
D tem sua própria biblioteca padrão (Phobos), que serve a necessidade de todos os problemas de programação comuns. Há também uma biblioteca alternativa ( Tango-D2 ) que você pode usar com o Phobos ou por si só. Se você é um desenvolvedor web e precisa escrever um servidor baseado em eventos, o Tango possui uma boa abstração de Seletor (tango.io.Selector apenas para select (), poll (), epoll ()). Eu achei que ele tinha um desempenho ainda melhor que o libev.
fonte
Os idiomas são desenvolvidos para resolver problemas em algum tipo de domínio (pelo menos no início). Se você não enfrentou problemas com os quais suas ferramentas não podem resolver de uma maneira que você se sinta confortável, estará martelando uma prancha de madeira esperando se tornar um carpinteiro. Tente entender o tipo de problemas que os idiomas estão tentando resolver. A única diferença entre uma linguagem "experimental" e uma nova linguagem / cara legal é o dinheiro que a apoia, por exemplo, Go from google e Dart. Se eles foram desenvolvidos no meu quintal, provavelmente morrerão em algum fórum e é isso. Eles só sobrevivem se são bons em explicar os problemas que estão tentando resolver. Ou o contrário, como Perl e C ++, que são bons em absorver maneiras de resolver problemas para continuarem vivos. E eu sugiro aprender Lua, é ' Como uma linguagem criada para incorporar dentro de programas, é muito rápida e leve, que oferece ferramentas para solucionar grandes ou pequenos problemas que algumas linguagens como Java não conseguem resolver de maneira direta. Tomando o exemplo do japonês, se você apenas aprender a sintaxe, a gramática e os alfabetos, ignorando a cultura, nunca entenderá por que é tão complicado e, eventualmente, esquecerá tudo. Não está resolvendo nada para você.
fonte
Aprender vários idiomas diferentes fornecerá uma visão mais ampla da programação. Ênfase em "diferente" - por exemplo, aprender C # e Java não lhe ensinará muito mais do que aprender apenas um deles. Mas aprender C # ou Java e uma linguagem funcional (por exemplo) serão.
Dito isto, como um jovem programador, acho que você obteria muito mais valor ao conhecer um idioma de maneira realmente sólida, antes de começar a olhar para diferentes tipos de idioma. Não está totalmente claro em sua pergunta quão bem você conhece Java, VB.NET e C #. Você tem certeza de que, se você atacou um projeto usando um dos idiomas acima, seu gargalo seria o projeto em si, não seu conhecimento do idioma? Se você passasse mais tempo se perguntando "como faço isso no idioma ?" do que você pensaria no problema real, provavelmente precisará de mais foco em um dos idiomas atuais.
E, pessoalmente, acho que você deve adotar uma abordagem pragmática para decidir qual é. Java é usado para aplicativos Android? Ótimo, se você está interessado em criar aplicativos para Android. Irrelevante se não estiver. C # não é uma boa opção para desenvolvimento que não seja o Windows? Más notícias se você estiver interessado em desenvolver para Linux. Irrelevante se você não é. E assim por diante.
E as linguagens "experimentais" que você mencionou? Pragmaticamente, eles serão pouco adequados quando se trata de trabalhar com outras pessoas - você provavelmente encontrará milhares de pessoas que conhecem C # ou Java para todos que conhecem a Fantom. Para projetos pessoais, isso não é necessariamente um problema. Se seu objetivo é aumentar sua empregabilidade, é.
fonte
Você poderia dizer que aprender a programar em um idioma como Postscript ou APL é sem dúvida um desperdício de tempo, principalmente porque as chances de você usar esse conhecimento se aproximam de zero. Mas da mesma maneira, você poderia argumentar que Ruby e Python são uma perda de tempo, se você nunca pretende usá-los para nada.
Mas poucas pessoas diriam que aprender Lisp é um desperdício, mesmo que você tenha a probabilidade de escrever Lisp como Postscript; mas aprender Lisp ensina você a pensar de maneira diferente sobre o seu problema (espero), e é por isso que a maioria dos programadores lhe diz que vale a pena.
Ainda assim, nunca evito aprender um novo idioma, já que o investimento necessário em tempo é de apenas uma ou quatro horas. E usos para uma linguagem como Lua aparecem nos lugares mais incomuns , e você nunca os reconheceria se não tivesse passado algumas horas analisando os exemplos.
Quando vir um novo idioma, leia um pouco sobre o que é útil. Se é um nicho que os seus idiomas favoritos não cobrem muito bem, reserve um dia para aprender o básico. Certamente é um tempo melhor gasto do que assistir a temporada 17 de The Bachelor, ou então você pode perder tempo. Dessa forma, se você tiver um uso para ele, ele poderá aparecer e você saberá onde descobrir mais.
Eu pessoalmente recomendo procurar no Go. Eu usei para escrever programas de página única com desempenho melhor do que o que levaria três dias e 13 bibliotecas de terceiros em C ou C ++, e nem seria possível em Python, C #, Ruby etc. por pessoas que realmente sabem realmente suas coisas.
fonte
Escolha aqueles com tipos diferentes. Agrupe-os por recursos e escolha um em cada grupo. Se você quiser fazer isso profissionalmente, escolha uma que seja usada (então C ++ sobre D para linguagem compilada estaticamente tipada com metaprogramação de modelos).
Pobre D, é uma linguagem boa, mas não possui o aplicativo matador que o C ++ possuía: compatibilidade com versões anteriores quase completa com a linguagem nº 1 da época (C para o caso de C ++). É bom, mas esse pequeno fato importante provavelmente relegará D a mostrar status nos livros de história.
fonte
C pode ser antigo, mas ainda é muito poderoso e interessante, aprender C ajudará muito em seu futuro de "programação".
O Java não é lento, quem lhe disse que não sabe do que está falando, o Java aprenderá muito sobre OOP
Por que você não começa com Python e depois escolhe C ou outra coisa,
fonte