4 pontos por GN⁺ 2025-10-25 | 1 comentários | Compartilhar no WhatsApp
  • Este texto propõe disciplinas de ciência da computação realistas e satíricas que desenvolvedores de software deveriam cursar, embora elas não existam de fato
  • Cada disciplina expõe de forma crítica problemas da cultura moderna de desenvolvimento e modos de pensar enviesados
  • Por exemplo, aborda a fé cega no paradigma orientado a objetos, o descaso com a UX de ferramentas de linha de comando e os equívocos sobre desempenho em linguagens lentas
  • Também inclui matérias sobre obsessões psicológicas e hábitos improdutivos dos desenvolvedores
  • No geral, apresenta de forma bem-humorada as limitações do ensino de ciência da computação e a necessidade de autocrítica na cultura de desenvolvimento

CSCI 2100: Esquecendo a programação orientada a objetos

  • Esta disciplina ensina o conceito de variáveis e funções que não pertencem a uma hierarquia de objetos
    • Afasta-se do pensamento centrado em orientação a objetos para explorar a flexibilidade e a simplicidade da programação funcional
    • Apresenta “função (function)” como um conceito mais geral e reutilizável do que “método (method)”
  • O pré-requisito é qualquer disciplina que tenha usado o termo “abstract base class”
  • O objetivo é desmontar a dependência excessiva do paradigma orientado a objetos e reformular a forma essencial de pensar sobre programação

CSCI 3300: Estudos de software clássico

  • Uma disciplina de análise e discussão de produtos de software historicamente importantes
    • Entre os exemplos abordados estão VisiCalc, AppleWorks, Robot Odyssey, Zork e MacPaint
  • O foco está em interface do usuário (UI) e no impacto das limitações de hardware sobre a criatividade
  • Ao revisitar inovações nascidas sob restrições do passado, a disciplina relança luz sobre os princípios fundamentais do design de software moderno

CSCI 4020: Escrevendo código rápido em linguagens lentas

  • Trata de como escrever código de alto desempenho mesmo em linguagens interpretadas (como Python)
    • Explora estratégias para realizar análise de desempenho (performance analysis) em alto nível e alcançar eficiência no nível de C++
  • Busca ao mesmo tempo reduzir a fragilidade do código e preservar o prazer de desenvolver
  • A disciplina quebra o senso comum de que “linguagens lentas são lentas” e mostra as possibilidades de otimização no design da linguagem e no ambiente de execução

CSCI 2170: Experiência do usuário (UX) para ferramentas de linha de comando

  • Disciplina introdutória sobre princípios de design da experiência do usuário para programas baseados em linha de comando
    • Tem como temas centrais a relevância, legibilidade e concisão da saída
  • Usa o comando ls do UNIX como estudo de caso para analisar o excesso de opções e os problemas de interfaces complexas
  • Enfatiza que ferramentas de linha de comando também precisam de design centrado no usuário, assim como interfaces gráficas

PSYC 4410: A psicologia das obsessões do programador

  • Explora obsessões improdutivas e padrões de pensamento compulsivos em que desenvolvedores de software costumam cair
    • Ex.: formatação de código, taxonomia, sistemas de tipos, fragmentação excessiva de arquivos etc.
  • Analisa psicologicamente a reação crítica automática (knee-jerk criticism) que surge ao entrar em contato com sistemas desconhecidos
  • É uma disciplina para compreender vieses cognitivos e tendências perfeccionistas dos desenvolvedores e buscar equilíbrio entre colaboração e criatividade

Contexto geral

  • Esta lista não é um plano de ensino real, mas sim uma crítica satírica ao ensino de ciência da computação e à cultura de desenvolvimento
  • Cada disciplina revela pontos cegos do pensamento centrado na tecnologia e incentiva os desenvolvedores à flexibilidade de pensamento e à autorreflexão
  • Embora seja um post de 2015, traz questionamentos que continuam válidos até hoje

1 comentários

 
GN⁺ 2025-10-25
Opiniões do Hacker News
  • CSCI 3300: Estudos Clássicos de Software
    O que Alan Kay vem enfatizando há décadas é que continuamos reinventando conceitos que já estavam estabelecidos no fim dos anos 70
    Concordo com a frustração dele de que, assim como artistas estudam história da arte, programadores também deveriam estudar a história da ciência da computação

    • Quando eu estudava na RIT, havia uma disciplina optativa chamada "History of Computing". Ela cobria desde o ábaco até mainframes e redes, e as notas de aula ainda estão disponíveis
    • A história da arte ou da filosofia cobre milhares de anos, mas a história da computação tem apenas uma geração ou duas ou três gerações
      Acho forçado comparar computação, que depende de desempenho físico de hardware, com arte
      Achar que a forma de resolver problemas em 1970 se aplica intacta em 2025 é ignorar a realidade
    • Já vi no GitHub alguém perguntar "em que isso difere do Ansible?" e a resposta ser "nunca ouvi falar de Ansible"
      É interessante essa repetição de redescobertas em que cada geração acha que foi a primeira a descobrir algo
    • Trabalhando com fundadores, é comum ver conceitos já existentes sendo embalados como se fossem invenções novas
      Aprender os problemas e soluções do passado nunca é perda de tempo
    • Na faculdade, tive um trabalho de "ensaio sobre a história dos sistemas operacionais", e escolhi o OS X (Snow Leopard)
      Nesse processo, passei a entender profundamente a evolução do Unix e do software comercial, e concordei totalmente com Alan Kay
  • CSCI 3240: Ignorando o Hype
    Uma disciplina para aprender a ignorar modas de plataformas ou bibliotecas recentes
    Em seguida, CSCI 3120: Desenvolvimento Guiado por Novidade trata do oposto: como acompanhar as tendências e manter o interesse
    As duas disciplinas não podem ser cursadas ao mesmo tempo
    Outras matérias poderiam incluir técnicas de reunião (PSYC 4870) e tolerância ao atrito organizacional (PSYC 5630),
    cobrindo comunicação e motivação realistas no ambiente de trabalho

  • CSCI 4810: O Laboratório da Recusa
    Uma disciplina de laboratório em que pedidos antiéticos de produto e pressão de prazo são simulados, e você só passa se conseguir recusá-los com base em padrões profissionais

    • CSCI 4812: O Laboratório da Carreira trata da realidade de lidar com o trabalho que sobra depois que colegas aceitam exigências antiéticas e vão embora
    • Na prática, muitos cursos de graduação já incluem aulas relacionadas à ética
    • Mas as universidades acabam priorizando a empregabilidade dos formandos
  • Sugestão de disciplina de depuração
    Seria ótimo haver uma matéria para aprender a encontrar a causa raiz de bugs e usar várias ferramentas

    • Como em um laboratório de química, seria interessante dar ao aluno uma base de código legada cheia de bugs e encerrar a disciplina quando todos os testes passassem
    • Também seria preciso aprender a ler código de outras pessoas e a não derrubar sem critério a estrutura existente (Chesterton’s fence)
    • Até muitos engenheiros seniores ainda depuram com print
      Precisamos de tempo para falar sobre o salvador da depuração interativa
  • CSCI 0001: Programação funcional e teoria dos tipos
    A terminologia obscura e as fórmulas da academia vêm atrapalhando a popularização da programação funcional
    Chegou a hora de aprender diretamente por que um monad é um monoid na categoria dos endofunctors

    • Funções puras funcionam de forma muito natural até dentro de uma context window
  • CSCI 4020: Escrevendo Código Rápido em Linguagens Lentas
    Uma disciplina que ensina complexidade algorítmica com linguagens lentas (VB, Ruby etc.) e mostra que um O(N) em Ruby pode vencer um O(N²) em C++

    • Em um livro que li quando era jovem, comparavam bubble sort em FORTRAN com quicksort em BASIC,
      e lembro de ter ficado surpreso com o fato de o BASIC ter mostrado um resultado inesperadamente rápido
    • Já fiz exercícios convertendo loops em Python para operações vetorizadas em numpy e operações em tensorflow, medindo a diferença de velocidade
      Deu para sentir na prática por que Python é útil em IA
    • Seria realmente ótimo se engenheiros que usam Python todos os dias passassem a entender por que o código é lento
    • Muitas vezes, o uso do hardware faz mais diferença do que a complexidade algorítmica
      Código vetorizado em memória linear é muito mais rápido do que dados espalhados no heap
    • Livro de referência: Visual Basic Algorithms Ready-to-Run
  • Coletânea da série anterior
    A série “Computer science courses that don't exist, but should” continua em
    edição de 2015 (247 comments),
    edição de 2017,
    edição de 2018

  • Isso me faz lembrar de uma disciplina de Arqueologia de Software que fiz na faculdade
    Era uma aula em que reimplementávamos exercícios de compiladores dos anos 1970,
    e embora na época eu tenha achado inútil, mais tarde isso ajudou muito na minha compreensão de projeto de sistemas

    • Na prática, trabalho de investigação digital é muito importante em bases de código grandes
      É essencial saber rastrear bugs antigos, wikis, histórico de versões e histórico das equipes
  • Hoje, muitos programas de ciência da computação praticamente se transformaram em escolas profissionalizantes de programação
    Os alunos sabem usar frameworks, mas não entendem a filosofia de projeto das linguagens nem a evolução dos sistemas
    Não devemos esquecer que computação não é apenas implementação, mas também uma disciplina de pensamentos e ideias

    • Mas algumas grandes universidades estaduais ainda mantêm praticamente a mesma estrutura de disciplinas centrais de 25 anos atrás
      Por causa dos critérios de credenciamento, é difícil se afastar muito do currículo
  • CSCI 3210: Codificação e processamento modernos de texto
    Uma aula para aprender Unicode e UTF-8 e abandonar a noção de que “1 caractere = 1 byte”
    Ela cobriria não só codificação, mas também busca, ordenação, renderização de fontes e tratamento de emoji
    É algo básico, mas poucas pessoas realmente entendem direito