Pergunta

Tanto quanto eu sei (não muito admito), os paradigmas de programação actualmente populares são Orientada a Objetos (Java, C #, Ruby) vs funcional (F #). Como alguém que é mais familiarizado com o primeiro paradigma, eu tenho várias perguntas:

  • Pode um programador simplesmente ficar com um paradigma de todo o seu / sua vida? Ou em outras palavras, pode todos os problemas de ser reduzida para as unhas por um martelo?
  • Se não, qual ferramenta é adequada para o tipo de tarefa? Por exemplo:. Web-based vs desktop, criação de interfaces bonitas e sensíveis, capazes de triturar os dados rapidamente, etc
  • As pessoas têm sempre necessário para aprender um novo paradigma? Para os meus dois últimos trabalhos, meus locais de trabalho necessário Java e C #. Existem locais de trabalho que especificamente usar linguagens não-OO?

Obviamente, não há "melhor" línguas, mas eu estou querendo saber se vale a pena o investimento de tempo e energia para aprender um novo paradigma. Agradecemos antecipadamente!

Foi útil?

Solução

"Ou em outras palavras, pode todos os problemas de ser reduzida para as unhas por um martelo?" Sim. Período. Qualquer linguagem de programação que são susceptíveis de correr para será tão completa quanto todos os outros. Na verdade, há uma definição formal de "integridade" para uma linguagem de programação.

"As pessoas têm sempre necessário para aprender um novo paradigma?" Sempre.

Na verdade, há um truque para seguir os altos e baixos das "mudanças de paradigma". Ao longo dos últimos 30 anos da minha carreira, eu vi que a programação tem crescido a partir de um modelo imperativo relativamente simplista / processual a uma série de modelos muito mais ricas que incluem um melhor equilíbrio entre processo e de dados.

Eu notei o seguinte ...

A parte da força motriz é a comunidade de inteligência artificial. Muitos desses "novos modelos" começou como esquemas de representação do conhecimento AI. Eles tem tração lá, então eles escorria em mais aplicações tradicionais.

O modelo de Entidade Relacionamento foi originalmente para a representação do conhecimento, nem transações comerciais. O modelo de objeto, da mesma forma, foi para a representação do conhecimento. Então a gente simulação encontrou. Agora o resto de nós tê-lo.

Aqui está a minha conclusão.

Software é Representação do Conhecimento.

Sua escolha de paradigma ou modelo ou abordagem ou estilo é baseado na resposta para a seguinte pergunta:

"Como posso melhor representa esse problema?"

Se o problema tem objetos e relacionamentos, OO. Se o problema tem algoritmos e transformações, mapas, filtros e reduz, funcional. Se o problema é dinâmico, mudando e flexível, dinâmico. Se o problema é estático e vai escalar rapidamente, Static.

Outras dicas

vale a pena aprender paradigmas alternativos (OO, funcional, processual, dinâmica, etc), porque ele vai ajudá-lo a pensar sobre problemas de maneiras diferentes.

Por exemplo, pense sobre a diferença na resolução de um passagem de árvore de uma forma linear (a primeira maneira que eu sempre fiz isso) versus usando recursão. Ou a combinação do Google de Map e Reduce para ajudá-los índice da internet.

Novas formas de pensar aplicada a problemas antigos podem ajudar a quebrar algumas das questões mais difíceis.

O paradigma é independente de um idioma. Você pode desenvolver em grande estilo OO em C (dar uma olhada em GTK). Quando eu programar em Java, eu uso principalmente estilo funcional.

vale a pena saber como muitos paradigmas quanto possível. Alguns problemas são trivial para resolver em um paradigma, e exigem delicado artesanato em outro.

Como um exemplo (trivial), comparar implementações quicksort em Java e Ocaml, ou melhor ainda, Haskell, nessa página: http://www.rosettacode.org/rosettacode/w/index.php?title=Quicksort

(Isso não significa funcional é melhor. Há problemas melhor resolvidos com OO).

Pode todos os problemas de ser reduzida para as unhas por um martelo?

Err sim. Você pode resolver problemas com apenas um martelo. Sua apenas serrar a porta pela metade leva muito mais tempo com ele.

As pessoas têm sempre necessário para aprender um novo paradigma? Para os meus dois últimos trabalhos, meus locais de trabalho necessário Java e C #. Existem locais de trabalho que especificamente usar linguagens não-OO?

Os desenvolvedores têm que fazer isso a cada 15-20 anos ou mais.

Há definitivamente uma indústria inteira de pequenas empresas com sistemas baseados Acesso escritos com VBA processual. (E eu acho que já trabalhou para a maioria deles). desenvolvedores ASP clássicos estão tendo que aprender ASP.NET. desenvolvedores Perl estão aprendendo Python. Batch desenvolvimento orientado deu lugar ao desenvolvimento orientado evento.

Eu acho que você vai encontrar respostas por todo o tabuleiro. Quanto mais eu trabalho, mais eu acho que é "útil" para conhecer alguns dos outros. como C # / VB / SQL Server Developer Acho que é mais útil para mim para aprender um pouco sobre F # e algumas das outras línguas lá fora, é só pegar uma exposição ampla, para realmente descobrir o que ferramenta é o direito ...

O material dinâmica assusta o crap fora de mim, mas Ruby on Rails é de longe o melhor sistema de desenvolvimento que eu vi para o material web. Eu não me sinto confortável com a usá-lo para um realmente grande, projeto de manutenção pesada embora porque é muito fácil de alterar o significado de código compilado acabado existente,,. Também muito fácil para o estilo de codificação de uma pessoa para torná-lo em um novo idioma.

Dinâmico / scripting também é bom saber para administradores de sistema e qualquer um que executa um sistema Linux. Escrevendo um script rápido em bash ou Ruby bate o inferno fora de tentar implementar a mesma funcionalidade em Java ou C ++.

OO torna muito mais fácil de compreender grandes quantidades de código. Se você tem uma grande equipe ou várias equipes grandes e necessidade de dar uma visão geral rapidamente, OO torna muito mais fácil de descrever e para isolar um determinado pedaço de funcionalidade. Devo dizer OO código correcto!

Eu entendo funcional é bom para a programação multi-thread uma vez que tudo tende a ser imutável.

O desenvolvimento do projeto e arquitetura de habilidades com OOP em mente é o conjunto de habilidades mais desejável para uma carreira agnóstico grande linguagem.

O benifit quando você código na Opa é tanto para os outros membros da equipe lá fora e para a organização como um todo. Como o código será compreensível para todos e se os desenvolvedores sair do trabalho, necessidade does not empresa se preocupar muito. No outro caso, se você seguir o estilo funcional será realmente difícil para os outros a entender o que você tem feito.

Como a maioria já foi dito, geralmente você pode usar qualquer linguagem para resolver qualquer problema e, geralmente, você pode escrever no estilo de um paradigma em outro.

Se você tomar o tempo para aprender a usar os diferentes paradigmas de como eles estão destinados, em seguida, você aprende coisas diferentes sobre a representação do conhecimento e resolução de problemas que podem ser úteis em qualquer paradigma que você está usando no futuro.

Embora haja algum alinhamento entre paradigmas e domínios geralmente é melhor para escolher um idioma com base nas especificidades do ambiente suas necessidades de software para operar em.

  • Será que ela precisa para rodar em múltiplas plataformas de desktop?
  • Se é uma aplicação desktop que é preciso para ter um look and feel nativo?
  • É rápida iteração de projetos importantes
  • Como é que ele seja mantido?
  • O que sistemas de 3rd party que ele precisa para operar com?
  • existentes programador conhecimentos / competências / preferências.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top