O que devo fazer para ser independente da linguagem?

52

Até agora eu trabalho com asp.net e C #. Também fiz um trabalho decente em Java. Estou planejando minha carreira de tal maneira que um dia seja independente da linguagem. Quais são as coisas que eu preciso aprender?

Primeiro, o OOP paradigmas, enquanto fala sobre o design da classe. Existem outros?

Gopi
fonte
2
Você está tentando: evitar ser rotulado, ter flexibilidade no emprego ou em alguma missão de visão?
JeffO
2
@Jeff Yes! para evitar ser rotulada e não lutar que minha língua é o melhor;)
Gopi
Eu seria mais provável contratar um cara com uma opinião forte que não concorda com a minha. Porque então ele poderia escrever o Java.
Erik Reppen
Se você fez isso, os recrutadores pulariam seu currículo.
gonzobrains

Respostas:

67

Para ser independente do idioma, você precisa ter experiência em todos os estilos e tipos comuns de idiomas.

  • Uma linguagem imperativa (você diz o que deve fazer, passo a passo. Por exemplo - C)
  • Uma linguagem declarativa (você diz a sua meta, ela descobre o que fazer. Por exemplo - SQL / HTML / Prolog)

Além disso:

  • Uma linguagem funcional (as funções são essenciais, evitar o estado e os efeitos colaterais são os objetivos. Por exemplo - Haskell / OCaml / Lisp / F #)
  • Uma linguagem orientada a objetos (arquitetura em que os objetos encapsulam dados relacionados e os métodos que atuam sobre eles). Por exemplo - Java / C #)

Alguns estilos de digitação:

  • Uma linguagem de tipo estaticamente (os tipos de dados são definidos e verificados em tempo de compilação. Por exemplo - C #)
  • Uma linguagem de tipo dinâmico (tipos de dados são verificados em tempo de execução. Por exemplo - Python / Javascript)
    Experiência de digitação forte versus fraca também é útil.

Alguns estilos de tempo de execução diferentes:

Material de nível inferior:

  • Algo razoavelmente baixo nível (por exemplo - C)
  • Algum dialeto de montagem (por exemplo, NASM)

Além disso, eu diria que você precisa de alguma experiência em programação simultânea e algo orientado a eventos . Você provavelmente também deve ter certeza de que sabe algo sobre os vários domínios, como programação na Web (cliente e servidor), desenvolvimento de rich client / desktop, jogos. Você também pode querer aprender sobre programação incorporada ou hardware dedicado (como consoles de jogos), e o desenvolvimento móvel está se tornando um domínio cada vez mais relevante.

Outros também mencionaram que vale a pena ter alguma experiência em abordagens de programação genérica e meta-programação .

Ao aprender esses paradigmas, evite apenas aprender a sintaxe e escrever no seu estilo antigo. Eu já vi muitos desenvolvedores de C # escreverem JavaScript como se fossem estaticamente digitados. Não faça isso, tente aprender os paradigmas da linguagem e os adote.

Se você tiver feito tudo isso, as diferenças entre os idiomas se tornarão amplamente sintáticas, de modo que a troca se tornará um exercício bastante simples de aprender alguma nova sintaxe.

Não se esqueça, porém, de que a programação moderna quase sempre depende de uma estrutura, portanto, familiarizar-se com as estruturas comuns e populares de cada idioma que você aprende também é fundamental. Saber C # é irrelevante sem .net.

Simon P Stevens
fonte
9
Como o HTML é declarativo no sentido dado? "Objetivo -> ação"? Realmente não faz nada.
Felix Dombek
3
Uma ótima linguagem declarativa que só posso recomendar é o Prolog. É diferente de qualquer outra coisa - sem funções (mas relações que funcionam de maneira inversa), sem fluxo de controle explícito (o intérprete resolve tudo para você), apenas uma ótima estrutura de dados (termos, nada mais é necessário.) É incrivelmente rápido o que faz, fazendo milhões de unificações e inferências por segundo - e o tempo necessário para desenvolver algo é tão curto quanto em Python, em comparação com C / C ++.
Felix Dombek
3
@ Felix: HTML, goal = "Quero um rótulo e uma caixa de texto". Ação = Os mecanismos de layout e gráficos descobrem como desenhá-los. Os detalhes são dos navegadores individuais. Você define apenas o que deseja e não como fazê-lo. Veja aqui . Concordo, porém, que não é realmente uma "linguagem" como tal. Prolog é um exemplo melhor, vou atualizar.
Simon P Stevens
11
+1 Para uma boa lista de tipos, as opções de idioma estão um pouco afastadas do paradigma em alguns lugares, mas no geral são excelentes.
Orbling
2
A propósito, você deve adicionar "Domínios / níveis de abstração diferentes": web, web interativa, ferramentas da área de trabalho, jogos da área de trabalho, jogos persistentes não são criados da mesma maneira que as restrições e a distância do hardware é diferente, fazendo a escolha dos idiomas ( ou mesmo existência) mais óbvio para quem quer entender o que é ser agnóstico.
Klaim
4

Eu não acho que você possa se tornar verdadeiramente independente de linguagem. Acho que "penso" no meu idioma atual (no momento, C #).

No entanto, tendo dito isso, acho que você pode separar o design do código tentando pensar em pseudo-código em vez de um idioma específico e anotá-lo nesse formato. Isso pode ajudá-lo a se concentrar nas decisões de design e arquitetura, e não na implementação no seu idioma atual. A desvantagem disso - como Simon ressalta - é que a linguagem e a estrutura que você usa finalmente influenciarão inevitavelmente o design. Assim, à medida que seu design se desenvolve, ele se torna cada vez mais vinculado à linguagem e à estrutura.

ChrisF
fonte
+1 em "Você não pode ser verdadeiramente independente de idioma". Mas não estou de acordo com o seu segundo parágrafo. Eu acho importante projetar para o idioma e o framework que você usará.
Simon P Stevens
@ Simon - você tem um bom argumento sobre o design do framework. Vou atualizar a resposta.
ChrisF
3

Lendo sua pergunta e algumas das respostas, pode-se ter a impressão de que você iguala "agnosticismo da linguagem" a "conhecer todos os paradigmas da Terra".

Não tenho certeza se conhecer todos os paradigmas que existem ou conhecer uma variedade de idiomas, abrangendo vários paradigmas e tipos de idiomas, faz com que você seja "independente da linguagem".

É como dizer que ter praticado todas as religiões se torna religiosamente agnóstico.

Eu acho que uma pessoa independente de linguagem em relação às linguagens de programação deve ser alguém que não sabe programar em nenhum idioma ou que não se importa com qual idioma ele é solicitado a programar.

Dito isto, algumas pessoas dizem que um verdadeiro programador pode programar em qualquer idioma com acesso à documentação desse idioma.

Se é isso que você quer dizer com "independente de idioma", quase todo programador experiente pode programar em qualquer idioma com o qual é obrigado a trabalhar, com acesso à documentação do idioma.

Talvez você queira ser "politeísta da linguagem".

Eu próprio sou competente em vários paradigmas de linguagem, mas prefiro OOP quando aplicável. Então acho que não sou agnóstico.

Você dificilmente encontrará alguém que não prefira um certo paradigma ou idioma, com a liberdade de escolher.

Tulains Córdova
fonte
0

Não são apenas as linguagens, o próprio Java tem tantos modos diferentes que você pode passar anos aprendendo todos eles. Você pode aprender:

  • Recursos J2EE como Messaging and Persistence e os vários servidores
  • kits de ferramentas orientados a jsp e Apache
  • ant, maven e outros sistemas de construção (os próprios idiomas).
  • Todo o mundo Groovy / Grails
  • todas as APIs do apache commons
  • sistemas de teste (Mocking, JUnit)
  • Construtores de GUI como Swing, GWT ...

E uma centena de coisas que estou perdendo - APENAS dentro de java.

Se você passar anos cobrindo a amplitude (aprendendo todos os idiomas), terá problemas para ganhar profundidade para trabalhar de maneira eficaz em qualquer um deles.

Não estou dizendo que aprender um novo idioma SEMPRE é um problema, você deve estar ativamente fazendo isso! Tento escolher meu próximo emprego com base no que posso aprender (o que ainda não fiz), mas não costumo escolher um idioma aleatório e o aprendo mais - a última vez que tentei isso foi com Scala e eu deixou um pouco humilhado ...

Bill K
fonte
Para "todo o mundo Groovy / Grails", você pode adicionar ", todo o mundo Scala / Play! 2, todo o mundo JRuby / Rails e todo o mundo Clojure / Noir".
Vorg van Geir
11
Eu concordo, escrevi isso há um tempo atrás e estava apenas puxando as coisas da minha cabeça - embora eu provavelmente tivesse escolhido um dos frameworks da web e o seguisse.
Bill K