Determinando se a linguagem / estrutura / tecnologia é 'À prova de futuro'

10

Sou desenvolvedor PHP e comecei recentemente a trabalhar com o CodeIgniter. Parece que sempre que eu procuro algo relacionado ao CodeIgniter, as postagens do blog e o que não são geralmente de '09 ou '10, então me fez pensar: o CodeIgniter ainda é relevante e será no futuro? Existe outra estrutura que está ocorrendo?

O mesmo vale para outros idiomas e estruturas também. Em que ponto você abandona a aprendizagem de certos idiomas ou estruturas? Existe alguma maneira fácil de encontrar aqueles que estão surgindo e que vale a pena buscar?

Kyle
fonte
15
Deixe-me consultar minha bola de cristal ...
FrustratedWithFormsDesigner
11
@MotiveKyle Uma pesquisa rápida me trouxe isso ... tiobe.com/index.php/content/paperinfo/tpci/index.html não tenho certeza se isso é útil, mas é interessante, no entanto.
ominus
3
@MotiveKyle Acho que a questão subjacente (e sofro disso) é "O que escolhi para aprender vale o tempo / esforço que estou prestes a colocar nela?". Com tantas opções, pode ser impressionante descobrir a melhor forma de investir tempo / energia para obter o maior retorno em nossa linha de trabalho escolhida.
ominus
11
Era o que eu tinha em mente. Pena que eles não têm estruturas listadas!
22412 Kyle
3
COBOL é uma das tecnologias mais preparadas para o futuro que existe. É improvável que a base instalada da COBOL desapareça. Você pode pensar no que isso significa.
user16764

Respostas:

17

Não é uma ciência exata, portanto, não espere prever as tendências futuras no cenário tecnológico por mais de cinco anos com certeza.

Mas eu procuraria pelo seguinte:

  • Base instalada - uma base instalada maior significa que muitas empresas continuarão investindo na tecnologia e em sua manutenção, o que significa que os desenvolvedores serão necessários para trabalhar com a tecnologia. Ciclo positivo segue. Por exemplo, Java, como o COBOL antes, não desaparece por muito tempo.
  • Suporte amplo à indústria - existem vários grandes players do setor apoiando a tecnologia? Apenas um patrocinador comprometido é um sinal de aviso - ele pode ser descartado ou deixado de lado a qualquer momento com uma única mudança de estratégia.
  • Código aberto - os principais produtos de código aberto provaram ser extremamente boas apostas de longo prazo (veja Linux, Apache, Red Hat, JBoss, Eclipse, por exemplo ...). Os produtos proprietários, por outro lado, estão um pouco à vontade de um único fornecedor, onde você corre o risco de descontinuar / aumentar os preços / tentar forçar a migração para a "próxima grande novidade".
  • Qualidade - os produtos de alta qualidade simplesmente duram mais porque as pessoas desejam usá-los em vez de mudar para outra coisa. Por outro lado, produtos de baixa qualidade serão abandonados assim que surgir algo melhor.
  • Inovação - a tecnologia está na vanguarda da inovação? Nesse caso, é provável que obtenha adoção e suporte entre as empresas e usuários mais inovadores. Isso acabará por se tornar mainstream (eu diria que novos idiomas como Scala e Clojure, por exemplo, estão nessa categoria)
  • Comunidade - existe uma comunidade positiva, de mente aberta, pragmática, comprometida e prestativa em torno da tecnologia? Essas são as pessoas que garantirão o futuro .....
Mikera
fonte
3
Então, como você explica o VB6? ;-)
sdg 22/02
4
Magia negra.....?
Mikera
11
-1, já que a maioria dos pontos não é comprovada. Por exemplo, você está falando de código aberto como sendo apostas de longo prazo. Então, MacOS, Windows, Visual Studio e milhares dos produtos mais populares não são apostas de longo prazo? Inovação: o que você quer mostrar aqui? Todos os produtos que usamos foram inovadores antes de se tornar mainstream. Qualidade: defina-o. A maioria das estruturas e bibliotecas populares do PHP são escritas em código espaguete horrível, mas ainda são populares.
Arseni Mourzenko
11
@ MainMa: Como o código aberto está crescendo em popularidade e o Windows está caindo em popularidade, parece que há provas. "milhares dos produtos mais populares não são apostas de longo prazo" Correto. Muitos e muitos produtos não estarão disponíveis em cinco anos. "código espaguete horrível, mas ainda é popular." Você leu a resposta? "[até] que algo melhor aconteça". Nada melhor para PHP? Então. O legado permanece no lugar.
S.Lott
3
O software de código aberto da @MaainMa não garante que o projeto não seja abandonado. Mas isso garante que você terá a possibilidade de mantê-lo se a equipe original não. Se o produto não for desenvolvido por uma empresa enorme e bem-sucedida, você sempre corre o risco de ficar preso a uma estrutura obsoleta / não extensível quando é de código fechado.
Simon Bergot
14

Não há como saber se algo será uma prova futura em que eu prefiro focar. A tecnologia me ajuda a resolver o problema que tenho hoje. Você abandonaria o aprendizado de um determinado idioma ou estrutura quando ele não funcionar mais para solucionar seus problemas.

Envolva-se na comunidade que representa o que você está fazendo e você pode ter uma boa noção do que está indo e vindo, mas mesmo assim eu preferiria gastar meu tempo com a melhor ferramenta para o trabalho, não quente ou com o que eu acho que será quente. daqui a um ou dois anos.

Ominus
fonte
7
Como o futuro é tão difícil de prever, é difícil entender o que "prova de futuro" pode até significar. "'Acho que existe um mercado mundial para cerca de cinco computadores' - observação atribuída a Thomas J. Watson (presidente do Conselho de Máquinas Comerciais Internacionais), 1943".
S.Lott 22/02/12
7

Não há como determinar definitivamente se algo está à prova do futuro. O mais próximo que você pode chegar é determinar o nível de atividade em torno de uma linguagem ou estrutura específica - se houver muita atividade de desenvolvedor, é geralmente um bom sinal de que a linguagem / estrutura está tendendo a popularidade e será viável por um tempo . O inverso indica que há menos entusiasmo e que o suporte (via fóruns de desenvolvedores) pode ser mais difícil de encontrar.

Desde que sua linguagem / estrutura de escolha resolva o problema que você está tentando resolver, você não precisa se preocupar com a proteção do futuro, a menos que esteja claramente trabalhando com uma tecnologia em extinção. A tecnologia continua mudando - uma coisa que você pode fazer é acompanhar as tendências do setor. O aprendizado de novas linguagens / estruturas de programação, conforme observado neste tópico , pode ajudá-lo a acompanhar as tendências e oferece a oportunidade de avaliar continuamente novas ferramentas.

JW8
fonte
5

A "resistência à prova do futuro" é tanto sobre força de vontade e teimosia quanto sobre preocupações mais pragmáticas.

Um exemplo extremo é esse . Os Filtros Sparkle AINDA FUNCIONAM um computador IBM 402 do final dos anos 40 como seu sistema de contabilidade. Esta é uma máquina que é programada usando plugues elétricos em vez de "arquivos".

Pessoalmente, tive experiência com uma empresa que ainda mantém máquinas baseadas em MS-DOS em instrumentos especializados projetados para operar por décadas. Eu até cancelei um PDP operacional em 1997.

Eu diria que se sua empresa receber uma visita do museu de história da computação, como a Sparkle Filters fez, isso seria um sinal de que você (ou seus ancestrais) conseguiu "proteger o sistema" com sucesso!

Angelo
fonte
A palavra deveria ser 'futuro comprovada', provavelmente :)
9000
5

Posso responder se uma tecnologia específica é à prova do futuro - a resposta é quase certamente não, pois você não colocou uma escala de tempo nisso.

Para responder a essa pergunta, você precisará adicionar mais detalhes aos requisitos. Por exemplo:

  • Em que escala de tempo estamos falando - 1 ano, 3 anos, 5 anos ou mais?
  • Qual seria o custo de escolher algo que não estará disponível daqui a 5 anos?
  • Que benefícios você obterá ao escolher uma opção menos "segura" e os benefícios superam os riscos?

A escolha de um idioma / estrutura / tecnologia é realmente uma parte do gerenciamento de riscos no projeto. Como em todos os riscos, você precisará considerar vários fatores (estou tentando manter isso resumido) e, em seguida, tomar medidas para reduzi-lo a um nível apropriado à situação em questão.

Como na maioria das coisas na vida, a atividade que envolve o menor risco pode não ser a melhor opção.

Em resumo, com quanta incerteza você está preparado para viver em comparação com os benefícios que poderá obter ao longo do tempo de vida útil esperado do projeto.

Quanto mais tempo você quiser olhar para o futuro, menos certeza haverá. Se você está feliz em se preocupar apenas com os próximos 2 anos, por exemplo, sua escolha será muito mais fácil de fazer (e deixará muito mais opções em aberto) do que escolher algo que precisa estar por perto nos próximos 10 anos.

Sam Elstob
fonte
3

Existem tantos fatores que eu diria que é impossível. Entre as coisas que podem dar errado estão:

  • Moda. As pessoas perdem o interesse e voltam a atenção para uma nova plataforma mais bonita. O Perl tinha quase o monopólio de aplicativos da Web por volta de 2000. Isso é pouco mencionado agora.
  • Participação de mercado de fornecedores. por volta de 2000, você teria que o C ++ / Sun Solaris fosse bom até o ano de 3000.
  • Travessuras corporativas. Há alguns anos, eu teria escolhido o Java como a plataforma à prova de futuro. Com o ORACLE protegido por direitos autorais da API, etc., acho que haverá uma mudança para outra estrutura de linguagem, eu gostaria de saber qual.
  • Fim da estrada. Estou pensando em coisas como o Visual Basic que, depois de uma longa e honrosa história, não podem mais ser ampliadas para acomodar as idéias mais recentes sobre desenvolvimento de software.
  • O perdedor vence. O PHP (que eu gosto) nunca venceu nenhum concurso de beleza entre os desenvolvedores, mas surgiu como o rei indiscutível da web. Quando escrevi php pela primeira vez em 2004, nunca o teria apoiado como a linga franca do desenvolvimento web.
  • Os patinhos feios. O Javascript, sem alterar uma única parte da sintaxe ou adicionar uma única API, passou repentinamente de uma linguagem de script hokey que o banner irritante e animado adiciona à peça central da WEB 2.0.

No final, isso não importa muito. O CodeIgniter funciona para você e oferece o que você deseja. Nada do que você fará deixará de funcionar porque as postagens do blog são antigas ou a taxa de lançamento diminuiu. Portanto, meu conselho seria usar o que funciona agora e lidar com o futuro quando ele vier.

James Anderson
fonte
2

Uma estrutura PHP, Symfony, explicou isso perfeitamente em seu site .

10 critérios para escolher a estrutura correta

Você está progredindo e isso é uma coisa boa! Você já sabe que vai usar uma estrutura para desenvolver seu site ou aplicativo. Mas qual deles? Aqui está uma lista de verificação que você pode usar para evitar erros:

1. Popularidade e tamanho da comunidade

Quanto mais conhecida e reconhecida for a estrutura, mais ela estará "viva", evoluindo e completa: novas idéias, número e qualidade de plug-ins, etc.

2. Filosofia

Essa é a própria essência da estrutura: é um critério fundamental para garantir que ela atenda às suas necessidades. Uma ferramenta desenvolvida por profissionais para suas próprias necessidades obviamente atenderá às demandas de outros profissionais.

3.Sustentabilidade

Antes de escolher uma estrutura, verifique se ela pode acompanhá-lo durante esse período. Isso simplifica a manutenção e a atualização de seus aplicativos.

4.Suporte

Outro critério que não deve ser esquecido é a facilidade de encontrar respostas para suas perguntas e obter ajuda. Identifique o suporte disponível: do editor. De uma comunidade (listas de discussão, IRC, etc.)? De empresas de serviços (desenvolvimento, suporte, treinamento)?

5.Técnica

Para evitar ficar preso em um labirinto, é sempre preferível escolher uma solução interoperável; aquele que respeita as melhores práticas em termos de desenvolvimento (padrões de design)

6.Segurança

Qualquer aplicativo é potencialmente vulnerável. Para minimizar os riscos, é sempre melhor selecionar uma estrutura capaz de garantir funções de segurança (gerenciamento XSS, por exemplo).

7. Documentação

É uma necessidade absoluta avaliar a natureza, volume e qualidade da literatura existente sobre uma estrutura: uma ferramenta bem documentada é mais fácil de usar e mais atualizável.

8.Licença

As licenças são importantes simplesmente porque podem ter um impacto significativo em seus aplicativos. Por exemplo, um aplicativo desenvolvido usando uma estrutura licenciada pela GPL estará necessariamente sujeito à GPL. Por outro lado, esse não é o caso de uma estrutura licenciada pelo MIT.

9.Disponibilidade de recursos no mercado

Talvez você queira que uma equipe técnica o rodeie durante a fase de desenvolvimento ou a longo prazo, para manutenção e atualizações. Em outras palavras, verifique se as habilidades necessárias para a ferramenta que você está usando estão disponíveis no mercado aberto.

10. Experimente!

Essa é a chave! Não fique satisfeito com a leitura de críticas, comentários e boatos, bons ou ruins, na Internet. Ao testá-lo, você poderá se decidir e garantir que você esteja completamente confortável com a ferramenta.

Hakan Deryal
fonte
1

A chave é paciência. Paciência, paciência, paciência. Não há como prever o futuro. (eu precisei escrever isso?) Mas se você der à nova tecnologia alguns anos e observar como ela foi adotada, você terá uma boa idéia de se ela criará raízes ou não e é adequada para projetos de longo prazo / investimento em tempo .

Então, quando o NextNewThing (tm) aparecer, sinta-se à vontade para entrar na onda ... mas não por nada de importante nos primeiros dois anos.

GrandmasterB
fonte
0

A resposta de Mikeras é bastante agradável. Acrescentarei que a prova de futuro é realmente um tipo de segurança ou gerenciamento de riscos. Geralmente, você precisa renunciar a certas conveniências e benefícios de custo / produtividade agora para evitar problemas mais tarde. Faço quase tecnologia à prova de futuro há um bom tempo. Existem certos padrões que podem ajudar. Aqui estão alguns.

  1. Os dados devem ser armazenados em um formato aberto, fácil de extrair ou transformar posteriormente. Os formatos de arquivo ímpares são uma grande técnica de bloqueio e área de interceptação em geral. Além disso, prefira abordagens mais simples, como CSV, ASN.1 ou JSON, em vez de coisas complicadas, como XML ou, digamos, formato Word 97;). A idéia é que seja simples o suficiente para reunir um analisador e o analisador de formato de baixo nível seja reutilizável em seus aplicativos.

  2. Idealmente, os aplicativos devem ter interfaces neutras em termos de fornecedor e tecnologia, além de uma descrição precisa do que fazem. Você deve projetar coisas nas quais possa alterar ou jogar fora a implementação sem interromper nada. Além disso, é fácil mudar para uma nova plataforma se o seu método de chamar procedimentos ou processar dados funcionar entre plataformas. Portanto, as interfaces são a coisa mais importante para se corrigir. Quanto mais simples, rápido e mais aberto for o método de implementação da interface, melhor.

  3. A pilha deve ser totalmente de código aberto e livre para modificar. As licenças GPL, LGPL, BSD, MIT, etc. estão bem nesse ângulo. A idéia é que, se a comunidade começar a morrer, a pilha talvez precise ser movida para o novo [hardware / OS / protocol / etc]. E você precisa do código para fazer isso.

  4. O design da pilha deve ser extremamente modular, com cada peça sendo compreensível por uma pessoa. Isso facilita para um novo grupo buscá-lo e mantê-lo. Tendo até os níveis mais baixos do tempo de execução, as bibliotecas e o compilador são fatorados de maneira adequada, podendo ter um grande retorno se precisar ser portado. Geralmente, apenas uma parte pode ser portada e todo o seu código antigo funcionará.

  5. Seu aplicativo deve ser criado de maneira modular, levando em consideração os detalhes da plataforma para minimizar o retrabalho nessa área. Também ajuda a estruturar as funções em blocos de entrada / processamento / saída. Isso pode ajudar na análise do que será afetado por uma porta (e na análise de correção em geral na metodologia de sala limpa). A abordagem de menor risco em termos de plataforma é usar os recursos de denominador comum mais baixo suportados universalmente com uma interface que permite usá-los, reduzindo ainda mais a portabilidade. (Eu disse que você estaria perdendo alguma coisa ...)

  6. A digitação dinâmica, a inferência de tipo ou outras abordagens de digitação flexíveis ajudam. Uma porta para uma nova plataforma pode alterar as definições dos tipos de base. Idiomas que digitam fortemente internamente significam que você se preocupa menos com esse material.

  7. Mantenha o modelo de concorrência simples. A mensagem orientada a eventos, passando por interfaces claras, é portátil para ... basicamente tudo. Também há corotinas. Você só quer evitar rotas propensas a erros e problemas de portabilidade.

  8. Veja os tempos de execução portáteis do Mozilla e Apache. Eles fatoram muitos problemas específicos da plataforma com determinadas opções de interface e implementação. Eles podem dar dicas sobre o que se preocupar, além de fornecer boas soluções para muitos problemas.

Exemplo perfeito: Tcl. Eu sei, muitas pessoas odeiam e eu raramente a uso. No entanto, o Tcl é uma linguagem extremamente fácil de entender, implementar (12 regras principais) e codificar. É pequeno, rápido o suficiente, integra-se a servidores da Web, incorpora aplicativos nativos, foi portado para várias coisas, possui certos recursos de segurança , e é atualizado regularmente desde os anos 80, quando foi fabricado. Você ou eu poderíamos implementar um tempo de execução TCL inteiro rapidamente para o idioma principal. Se tivéssemos que portar a biblioteca padrão, seria mais fácil do que portar .NET ou Java. E há bastante código útil escrito para isso. E tem sido usado na tecnologia da Web desde a mania dos "agentes móveis" que os applets Java também visavam. Por exemplo, a estrutura da web do OpenACS remonta a 1998 com servidor mais antigo que isso.

Outros exemplos: BASIC, COBOL e LISP (Scheme ou CL). Todos esses idiomas remontam aos anos 50 ou 60. Eles são simples o suficiente para facilitar a compreensão, implementação e tradução mecânica. No entanto, você pode criar coisas úteis com eles. O COBOL ainda suporta a maior parte do processamento de transações do mundo, foi atualizado algumas vezes e é executado no .NET mesmo. Os aplicativos antigos QBasic / QuickBASIC ainda são executados hoje com ferramentas abertas / gratuitas em plataformas modernas, além de possibilidades de transferência para melhores ferramentas como GAMBAS ou RealBASIC. Os codificadores LISP naturalmente tornam seus sistemas modulares e funcionais, facilitando a portabilidade. Há um fluxo constante de implementações para ele ao longo de décadas, abertas e comerciais.

Portanto, interfaces, abertura, simplicidade, modularidade e arquitetura / design / codificação neutra em plataforma. ESTES você obterá a prova de futuro que você precisa. Na maioria das vezes, de qualquer maneira.

Nick P
fonte