O que funcionou em Ciência da Computação: 1999 vs. 2015 (2015)

Linguagens Legadas e Específicas do Domínio

  • Muitos sistemas críticos dependem de tecnologia “antiga” ou de nicho: Erlang (telecom), COBOL (bancos), MATLAB/FORTRAN (científico), MUMPS (saúde).
  • A discussão pergunta o que pode ser aprendido com o motivo de essas linguagens terem sucesso e permanecerem entrincheiradas.
  • Uma visão: a adoção e a evolução de linguagens se assemelham às línguas faladas — impulsionadas por forças sociais e históricas mais do que por mérito técnico.

Sistemas de Tipos Elegantes e TypeScript

  • TypeScript é elogiado por ter “realizado” tipagem forte para a maioria dos programadores da web, especialmente aqueles sem formação formal em CS.
  • Outros argumentam que sistemas de tipos semelhantes ou mais fortes já existiam décadas antes; a principal conquista do TS foi levá-los à maior base de praticantes.
  • Debate sobre o quão “elegante” o TS realmente é em comparação com Java/C#/Checker Framework:
    • Pró: tipos estruturais, uniões, tipos mapeados, inferência rica, bibliotecas poderosas (por exemplo, SQL em nível de tipos).
    • Contra: ele empresta muito de Java/C#, carece de uma especificação formal e pode se comportar de maneiras surpreendentes.

Tipagem Estática em Linguagens Dinâmicas

  • Python e JavaScript estão ganhando tipagem opcional; ferramentas e guias de estilo estão tornando isso quase obrigatório em equipes.
  • Alguns temem que a tipagem obrigatória trai o propósito do Python, prevendo um fork ou uma nova linguagem sem tipos.
  • Outros dizem que “obrigatório” na prática ainda permite saídas de escape (Any, casts), tornando isso menos doloroso do que linguagens totalmente estáticas.
  • Os tipos são valorizados por suporte do editor, integração em bases de código grandes e coordenação de equipe, apesar do atrito adicional.

RISC, CISC e Conjuntos de Instruções

  • Forte thread revisitando o “RISC = Não” do artigo:
    • Muitos agora veem o domínio móvel da ARM e os M-series da Apple como evidência de que RISC é um “Sim” ou ao menos “Talvez”.
    • Contra-argumento: a divisão real é x86 vs. não‑x86; ARM moderno e x86 são ambos fortemente baseados em micro‑operações e borram as linhas entre RISC/CISC.
  • Alguns enfatizam as instruções de largura fixa da ARM, que permitem decodificação muito ampla e eficiente, contribuindo para alto desempenho/W.
  • Outros argumentam que RISC importava originalmente quando os orçamentos de transistores eram apertados; hoje podemos arcar com ISAs complexas e pipelines profundos.
  • RISC‑V é citado como um sucesso principalmente por causa da abertura, e não da “RISC‑idade” em si, embora os menores núcleos RISC‑V nem usem micro‑operações.
  • A discussão mergulha em comparações históricas (R2000 vs 80386), pipeline vs. clock, nós de processo e microcódigo, sem consenso único.

Capacidades e Segurança

  • “Capabilities” é esclarecido como segurança baseada em capacidades (tokens não forjáveis que conferem direitos específicos, por exemplo, descritores de arquivo).
  • Prompts de permissões em apps móveis estão vagamente relacionados, mas implementam em sua maioria permissões semi-estáticas, baseadas em identidade, e não sistemas de capacidades completos.
  • As capacidades são vistas como elegantes, mas raramente usadas como base exclusiva da segurança no mundo real; elas aparecem principalmente dentro de sandboxes e no código de baixo nível do sistema operacional.

Programação Funcional vs. “Estilo Funcional”

  • Muitos veem “FP pura” como um “Não” prático, mas as ideias de FP (lambdas, pattern matching, tipos soma, APIs de ordem superior) como cada vez mais mainstream.
  • Ponto de vista 1: linguagens híbridas (Java/C#/JS com recursos de FP) dão a maior parte dos benefícios da FP enquanto continuam imperativas/OO.
  • Ponto de vista 2: esses híbridos são subótimos; FP de verdade exige mais do que lambdas — por exemplo, orientação a expressões, imutabilidade por padrão, estruturas de dados persistentes e gerenciamento explícito de efeitos.
  • Debate contínuo sobre o que define FP:
    • Alguns dizem que funções de primeira classe são suficientes.
    • Outros insistem em condições mais fortes, como transparência referencial e tratamento estruturado de efeitos (mônadas ou sistemas alternativos de efeitos).
  • Esclarecimento de que “records” por si só não são inerentemente funcionais; eles precedem a POO e existem em muitos paradigmas.
  • Tangente separada sobre o que torna algo “orientado a objetos”, sem acordo; records em Java são vistos por alguns como anti‑OO por minimizarem estado/comportamento ocultos.

Paralelismo, GPUs e Rust

  • A questão de se GPUs/TPUs “contam” como paralelismo para a classificação do artigo.
    • Uma postura: elas implementam o modelo “wizard in a box” — kernels paralelos escritos por especialistas, não programação paralela de propósito geral.
    • Outra: quase todos os apps de GUI/web usam implicitamente paralelismo da GPU, além de map-reduce e SIMD serem onde o paralelismo realmente funciona.
  • Rust é proposto como algo potencialmente capaz de mudar o quadro do paralelismo, com seu sistema de ownership/borrow dando fortes garantias de segurança de threads sobre uma base de segurança de memória.

Redes Neurais e Avaliações em Mudança

  • Alguns sugerem que o status das NNs seria “Sim” em 2024, apontando grandes artigos de deep learning por volta de 2014–2015.
  • Outros enfatizam que redes neurais passaram por várias fases quentes desde a década de 1960; 2015 foi uma retomada construída sobre décadas de trabalho anterior.

Meta: Atualizando “What’s Worked” para 2024

  • Vários comentaristas querem uma tabela atualizada:
    • RISC mudou de “Não” (2015) para pelo menos “Talvez”.
    • Sistemas de tipos sofisticados estão mais proeminentes (Rust, TypeScript avançado), talvez passando de “Não” para “Talvez/Sim”.
    • Ideias funcionais agora são recursos “esperados” em muitas linguagens mainstream.
  • Há cautela geral de que qualquer classificação sim/talvez/não envelhece rapidamente e não deve ser tratada como verdade atemporal.