Qualquer linguagem de programação pode ser facilmente dominada se os fundamentos da programação forem fortes. Um fato ou um mito? [fechadas]


33

É verdade que uma pessoa com bons conhecimentos básicos de programação pode aprender facilmente qualquer linguagem de programação?

Bem, quando digo linguagens de programação, refiro-me às linguagens ágeis e dinâmicas como PHP, Perl, Ruby, etc., mas não às linguagens de programação anteriores de um passado distante.

Eu trabalhei apenas em java, groovy e flex até certo ponto. Então, considerando o fato de eu ser um programador amador, mas um aluno rápido, em uma base aproximada, quanto tempo levaria para conseguir uma posição em qualquer uma dessas línguas?


1
Substitua "Qualquer" por "Mais".

4
O que torna uma linguagem 'ágil'? Eu pensei que o ágil era um processo de desenvolvimento .
Oosterwal

17
Dominado facilmente? Não. Aprendeu facilmente? Sim. O domínio implica um nível de conhecimento que requer anos de uso em qualquer idioma. Aprender a usar qualquer idioma uma vez que seus fundamentos estejam no lugar deve ser um dado.
Joel Etherton

1
Não, é verdade apenas para idiomas semelhantes. Conhecer Java não ajudará você a aprender Haskell, mas sim em C ++ e assim por diante. O conhecimento do PHP não ajudará você a aprender montagem, mas ajudará a aprender Ruby.
iveqy

Respostas:


46

Sim, com reservas.

Há quatro semanas, eu diria que tinha habilidades de nível profissional em C e C ++ e habilidades de nível amador em Java. Meu chefe me pediu para escrever algum software em JavaScript, com o qual eu não tinha experiência, e lá fui eu.

Nas duas semanas seguintes, li muitos trechos de código de amostra, encontrei todas as bibliotecas legais e escrevi meu programa. Está feito e funciona. Então, na semana passada, comprei um livro sobre JavaScript e o li e, garoto, eu não sabia o que estava fazendo. Agora eu entendo por que meus objetos estavam agindo de maneira tão estranha.

Então agora eu digo, eu sei um pouco de JS. Posso ler e trabalhar com ele, mas tenho certeza de que o que estou escrevendo é ineficiente, difícil de ler e não segue as práticas recomendadas.

Em geral, um aluno rápido pode levar uma semana e começar a produzir produtos de baixa qualidade em um novo idioma. Se você conhece Java, pode pegar rapidamente C, C ++, PHP, Python, JavaScript, mas apenas o suficiente para modificar o código ou escrever funções bem definidas. (Perl pode ser mais difícil porque as expressões regulares são complexas.) Para projetar adequadamente um sistema em um novo idioma, você provavelmente desejaria um ano de desenvolvimento profissional sob mentores experientes.


18
Atrevo-me a dizer que leva dois anos. O primeiro ano deve deixá-lo relativamente proficiente, o segundo ano deve deixá-lo relativamente eficiente.
Tim Post

4
Eu tive essa experiência há muitos anos (depois de aprender uma dúzia de idiomas) ... Eu tive que trabalhar na Ada. Para escrever código em Ada, levou alguns dias. Para realmente entrar no espaço de cabeça dos designers de sistemas de linguagem / tempo de execução e escrever um código BOM, isso levou um ano.
quickly_now

1
Para ser sincero, também aprendi Java dessa maneira. Atualmente, estou na marca de 1 ano e diria que "relativamente proficiente" é preciso.
Brad

1
A razão é que seus fundamentos, mesmo fortes, talvez, não são amplos. Se você soubesse de outros idiomas, com fechamentos, compreensão de lista, outras estruturas de dados e regras de escopo anteriores antes do jscript, você pode ter tido menos problemas.
Peter

Eu tive uma experiência semelhante com o VB.net, até ler o código que meu chefe (com vários anos de experiência em VB) havia escrito ... oh, querida. O código tem cheiro de código duplicado e tende a transcender idiomas!
precisa

28

Basicamente, a resposta é sim ... e não ... depende do que você quer dizer com fundamentos e domina facilmente .

FACTO

  • Conhecer os fundamentos da programação ajudará independentemente da linguagem. Por fundamentos aqui, quero dizer coisas que não são específicas de um determinado paradigma. Coisas como algoritmos, níveis de abstração, isolamento etc.

  • Conhecer bem os fundamentos de um determinado paradigma (OOP, funcional etc) facilitará o aprendizado de idiomas que suportam o mesmo paradigma. Pode-se dizer que conhecer bem um idioma permitirá que você compreenda rapidamente os idiomas da mesma família.

  • Com todos os idiomas aprendidos na mesma família, o próximo será muito mais fácil, não me surpreenderia se essa curva de aprendizado fosse exponencialmente mais rápida, pois você sabe mais.

MITO

  • Ao mudar para um novo paradigma diferente, conhecer bem uma linguagem do primeiro paradigma não será tão útil quanto aprender uma língua na mesma família. De fato, dependendo da diferença entre eles, você pode muito bem ter que desaprender algumas coisas antes de poder avançar e realmente criar o novo paradigma.

--- última seção editada com base nos comentários ---

Facto...

  • Conhecer um primeiro Paradigma pode ajudá-lo a aprender o próximo ...

mas

Mito

  • Não fique convencido, pois isso pode atrasá-lo ou não ajuda em nada no terceiro paradigma.

tudo de bom, exceto o último. anedoticamente, conhecer uma linguagem de programação procedural como C não ajudou em nada ao tentar aprender uma linguagem lógica como o Prolog e, no meu caso, atrapalhou, por exemplo, "P: como codifico um loop no prólogo?" ==> "A: você não".
Steven A. Lowe

2
A evidência anedótica que ouvi aqui e ali sugere que você pode iniciar um novato em programação no Scheme com bastante facilidade, mas isso é muito mais difícil se ele estiver programando em BASIC ou C # ou algo assim primeiro.
precisa

1
@ Steven & David: Eu não tinha muita certeza sobre esse último. Passei de processual para Object para funcional, mas ainda não tentei a família lógica. Achei mais fácil com o tempo e a experiência, mas não me atrevi a generalizar. Modificarei a resposta com base no seu comentário.
Newtopian)

14

para qualquer idioma semelhante , sim

para idiomas com paradigmas radicalmente diferentes, nem tanto

exemplo: você conhece C ++, deseja aprender Java, pedaço de bolo; você conhece o VB.NET, quer aprender o Prolog ... o bolo inteiro, possivelmente três ou quatro bolos


1
Concordo. Existem alguns idiomas que estão apenas seguindo uma filosofia completamente diferente; portanto, não é trivial mudar, por exemplo, de uma linguagem imperativa como C para uma linguagem de programação lógica como Prolog sem esforço.
sakisk

4

Acredito que a resposta breve seja: "meio que verdadeira, mas difícil de verificar". É muito difícil aprender a API, usos, expressões idiomáticas e paradigmas intimamente associados (OO, funcional etc.) do que a sintaxe real de uma linguagem. Eu acho que a linguagem em si é facilmente conquistada se você tiver um forte conhecimento e experiência em fundamentos de programação e algum conhecimento de compilador, mas difícil de dominar por causa de coisas auxiliares.

Um exemplo claro seria ir de um idioma para outro; C para Java. A sintaxe do código se parece muito com os programas no estilo C, mas você também precisa conhecer as APIs java (genéricas, coleta de lixo etc.) e, muito provavelmente, em nosso atual cenário de TI, algumas estruturas de terceiros (Spring, jUnit , Hibernate e assim por diante) para fazer algo útil para as empresas. Portanto, se você já fez C antes, a sintaxe do idioma não seria o problema, é o resto.

Isso vem de mim, que conhece Java, C #, Javascript, HTML, CSS, Delphi etc. Talvez eu não conheça todos os cantos sobre os frameworks ou bibliotecas que eu uso, mas eu sei o que fazer e posso aprender rapidamente por causa de minha experiência usando diferentes dos anteriores. Para um "aprendiz rápido", é realmente todo o pensamento lateral.


Concordo plenamente com isso. Aprender as melhores práticas / apis / bibliotecas populares / etc leva muito, muito mais tempo do que aprender as sintáticas de uma linguagem de programação, e esse é o verdadeiro desafio, e algo que só pode ser adquirido se você passar algum tempo trabalhando com a linguagem e suas ecossistema.
Jviotti #

3

Os fundamentos da ciência da computação que você precisa conhecer incluem não apenas a base matemática (teoria dos conjuntos, lógica, teoria dos grafos, álgebra, teoria da informação, teoria algorítmica da informação etc.), mas também várias linguagens de programação, pelo menos uma de cada grupo - ou seja, um imperativo (possivelmente com OOP, mas esse bit não é obrigatório), um funcional ansioso, um funcional preguiçoso, um lógico, um concatenativo ou baseado em pilha.

Com essa base, você poderá aprender facilmente qualquer novo idioma em pouco tempo. Se alguns bits estiverem faltando, você poderá enfrentar uma resistência severa.

E a melhor maneira de aprender o idioma de dentro para fora é implementar um compilador ou intérprete de brinquedo para um subconjunto significativo (é claro, sem uma biblioteca padrão - essa é a parte mais complicada e chata de qualquer idioma).


2

Acho que o consenso aqui é que ter bons fundamentos ajudará até certo ponto, e não discordo disso. No entanto, um ponto que falta nas outras respostas é a questão de captar os idiomas da língua, e acho que, para dominar uma língua, você deve escrevê-la linguisticamente.

Por exemplo, você pode escrever resmas de C # completamente corretos sem nunca usar a usinginstrução para descartar automaticamente objetos, mas em C # idiomático bem escrito, você verá using {...}muita coisa. Eu não conheço nenhuma linguagem nenhuma - .Net que possua esse construto (embora conheça muito poucas outras e meu Java esteja bastante enferrujado, posso estar errado), portanto, mesmo um especialista vindo de outra linguagem que não possui essa O recurso precisará aprender esse idioma do zero.


Existem expressões similares amplamente usadas no Lisp e no Scheme, portanto, não haverá nada de novo para quem vem desse contexto, e alguém procurará deliberadamente esse recurso em qualquer novo idioma.
SK-lógica

Sim, mas se você é, digamos, Pascal ou ADA, seria um idioma completamente novo que você nem saberia procurar até vê-lo.
21411 Steve

Essa é exatamente a razão pela qual acredito que é preciso conhecer pelo menos um idioma de cada grupo para poder aprender qualquer novo idioma e escolher ferramentas com sabedoria.
em

@ SK-logic: Quando vi coisas como "usar" e "tentar ... finalmente", não tive problemas para entendê-las como o equivalente aproximado do Common Lisp "desenrolar-proteger". No entanto, recursos de idiomas como esse podem não aparecer em uma seleção de idiomas com vários paradigmas.
David Thornley

1

É uma afirmação verdadeira para alguma definição de "razoavelmente bom" e "facilmente".

Quanto melhor você entender os fundamentos, mais fácil será a transição de um idioma para outro. Se você é um programador Java experiente que possui um entendimento sólido de linguagens orientadas a objetos, por exemplo, as diferenças básicas de sintaxe entre Java e C # devem ser relativamente fáceis de dominar em uma semana ou duas. Levará mais tempo para entender como a funcionalidade em todas as bibliotecas associadas é mapeada de uma para a outra, mas você provavelmente terá um controle decente das bibliotecas básicas em um mês ou dois. Então, é uma questão de descobrir os casos em que a abordagem padrão para um problema na linguagem A não se traduz diretamente na abordagem padrão na linguagem B (ou seja, você deseja usar o LINQ em C # em vez de JPA em Java) e se sentir confortável o suficiente no novo idioma que você ' re pensando nele em vez de pensar no idioma antigo e "traduzir". Isso provavelmente levará de três a seis meses, dependendo de quão bem a funcionalidade que você normalmente usa nos mapas. Na marca de seis meses, o programador especialista em Java provavelmente seria um desenvolvedor de C # razoavelmente eficiente e competente. Mas, como em qualquer coisa, você pode passar anos aprendendo todos os detalhes complexos, dominando várias bibliotecas e complementos que não fazem parte do idioma, mas que fazem parte do ecossistema circundante, e geralmente se aprimorando como desenvolvedor nesse idioma. o programador especialista em Java provavelmente seria um desenvolvedor de C # razoavelmente eficiente e competente. Mas, como em qualquer coisa, você pode passar anos aprendendo todos os detalhes complexos, dominando várias bibliotecas e complementos que não fazem parte do idioma, mas que fazem parte do ecossistema circundante, e geralmente se aprimorando como desenvolvedor nesse idioma. o programador especialista em Java provavelmente seria um desenvolvedor de C # razoavelmente eficiente e competente. Mas, como em qualquer coisa, você pode passar anos aprendendo todos os detalhes complexos, dominando várias bibliotecas e complementos que não fazem parte do idioma, mas que fazem parte do ecossistema circundante, e geralmente se aprimorando como desenvolvedor nesse idioma.


1

Eu diria que depende completamente do entusiasmo de uma pessoa para aprender o novo idioma. Quando os fundamentos são fortes e se ele consegue entender como o novo idioma interpreta alguma coisa, é muito fácil aprender qualquer idioma.

O melhor exemplo é o meu eu. Eu trabalhei com várias linguagens, apesar de ter feito a maior parte do meu trabalho em C #, mas comecei minha carreira em C e aprendi C ++, Java, VB, PHP, linguagens de script, perl e assim por diante. Em qualquer lugar ao longo deste período, nunca senti que não pudesse aprender esse idioma.


3
E os idiomas que você descreveu são mais ou menos parecidos entre si. Para um desafio, tente aprender Haskell, Scheme, Forth ou Prolog.
precisa

1

Eu nunca achei difícil aprender uma nova linguagem de programação, pelo contrário, era muito divertido na maioria das vezes. No entanto, existem idiomas que eu olhei, mas nunca entendi, porque não conseguia entender a ideia por trás deles, se havia algum. Um exemplo é COBOL, eu nunca entendi o que tinha que acontecer em que DIVISÃO e SEÇÃO e por quê. Outros exemplos são PHP e Groovy. Com o PHP, tentei entender por que alguém precisaria dele em primeiro lugar, já que existe perl. Talvez alguém possa explicar. Com o Groovy, eu também não entendo um pouco dos conceitos por trás dele.


1

Tudo depende.

Eu sei que muitas vezes é a resposta ...

Mas o que os fundamentos significam ?? Muitas pessoas que têm fundamentos para um paradigma (como OO) não os têm para outros paradigmas (como funcional).

Muitas pessoas vindas de OO e conhecem todos os padrões de design, podem não ter pistas de padrões funcionais de design ou coisas como compreensão de lista, currying, recursão de cauda, ​​fechamentos ...

Então SIM: se fundamentos significam fundamentos de todos os paradigmas.

Nesse caso, o problema é que o javascript usa muitos paradigmas, como procedural, OO e funcional, e tem um escopo estranho vindo de java, c ++, ...

Portanto, os fundamentos não ajudam nesse caso, mas pegar mais fundamentos aqui e ainda assim converter para outro idioma pode ficar cada vez mais fácil quanto mais padrões você obtiver em sua caixa de ferramentas.


0

Não esqueça que a arte da programação de computadores é a arte de permanecer EXATAMENTE o que você quer dizer. Portanto, qualquer meio de informar ao computador o que fazer, do Java ao Access, ao Excel e ao Visual Fortran, é uma linguagem de programação.

E algumas línguas são simplesmente ruins. IMHO Excel e Basic são idiomas ruins; Java e C ++ são boas linguagens. Os scripts do FileMaker são uma linguagem terrível. O HTML pode ser excelente se você não for desleixado.

Você pode aprender isso? Se é bom, sim. Se estiver ruim, depende do seu limiar de nojo. Coisas que fazem você querer vomitar são difíceis de aprender.

Não se comprometa a usar o idioma X em um projeto, a menos que você já tenha visto e tocado com o idioma X.


0

A resposta é "Isso é um fato, não um mito!"

Eu sou como você, eu também trabalhei em várias tecnologias viz. java, .net e recentemente trabalhou com iPhone, android e blackberry.

A rede está cheia de recursos, basta passar pelas informações para entender isso, implementar isso e seguir adiante.

De fato, "a tecnologia é feita para desenvolvedores, não os desenvolvedores são feitos para tecnologias; as tecnologias mudam, mas os desenvolvedores não".

:)

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.