notícias

tio bob, o mestre de programação mundial: a "crise de 35 anos" é uma ilusão, e nós, "velhos programadores", ainda estamos aqui

2024-10-03

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

bob respondea “crise de 35 anos” do programador:

pensara ideia de que a programação é apenas para jovens é na verdade uma ilusão, mas é de fato uma ilusão muito influente. esta ilusão existe porque a procura por programadores disparou como um foguete nos últimos 70 anos.

na verdade, nós, "velhos programadores", ainda estamos lá, mas o número não é tão evidente.

autor | wang qilong

produzido por |novo programador》departamento editorial

imagine se você tivesse escrito código por mais de cinquenta anos em sua vida e ainda estivesse programando até os 71 anos de idade. como você veria a era atual de programação explosiva de ia?

robert c. martin é conhecido como o guru da programação mundialmente famoso. este homem é chamado de ".tio bobo velho (tio bob) é um pioneiro em desenvolvimento ágil e padrões de design. ele está envolvido em trabalhos profissionais de software desde 1970 e está envolvido em trabalhos relacionados há mais de 50 anos. os famosos "cinco princípios sólidos" são os cinco. princípios de design no campo da programação orientada a objetos, vieram de seu trabalho manual. a atitude do tio bob em relação à ia é muito ambígua: do ponto de vista prático, ele reclamou incisivamente que “.a ia de hoje é apenas um programador júnior com apenas metade do cérebro e nunca crescerá realmente.", porque as tarefas que a ia pode realizar são bastante limitadas; mas mesmo tendo mais de 60 anos, ainda tem grandes expectativas para o futuro: "quando criarmos máquinas que possam pensar como humanos em algum momento no futuro, as habilidades de programação se tornarão obsoletas.

como um guru de desenvolvimento de software de renome mundial, a obra-prima do tio bob, "código limpo", certa vez definiu o que é "código limpo" e descreveu uma série de práticas operacionais eficazes.

recentemente, a versão chinesa do último livro do tio bob, "design funcional: princípios, padrões e práticas", foi publicada. muitas pessoas se perguntam por que esse líder da programação orientada a objetos "traiu" o "campo inimigo", e o tio bob ele também exibiu. seu caráter sempre direto e diretamente "refutado": "nos últimos anos, alguns artigos afirmaram que a programação funcional se opõe à programação orientada a objetos e que a programação orientada a objetos está desatualizada. não concordei com essa visão e decidi escrever este livro.

a programação funcional é mais do que apenas “programar com funções”. a programação funcional é a programação sem instruções de atribuição.

depois de tentar programar sem instruções de atribuição, todos os outros recursos da programação funcional se encaixam. se você quiser lidar com funções, você deve usar recursão. todas essas coisas surgem naturalmente no momento em que você decide não atribuir valores. então é disso que se trata a programação funcional.

—— "design funcional", robert c. martin

as observações acima são todas da entrevista com tio bob do "novo programador" da csdn. tivemos uma conversa profunda com esse “fóssil vivo de desenvolvimento ágil” e ouvimos seu relato pessoal sobre como ele, como um dos 17 líderes da indústria de software, co-publicou o “manifesto ágil” há 23 anos (2001).detalhes históricos, e também aprendi as opiniões mais recentes sobre programação de ia com este programador sênior com mais de 50 anos de experiência em desenvolvimento, que atualizou as opiniões anteriores de muitas pessoas sobre o tio bob.impressão histórica. o artigo a seguir começará com as memórias do tio bob de 1970, levando os leitores de volta à "antiga era dos programadores", quando até mesmo a world wide web ainda não havia nascido.

mais de 50 anos de codificação

"novo programador": antes do início da entrevista, você poderia fazer uma breve apresentação?

tio bob:ok, meu nome é bob martin. algumas pessoas me chamam de tio bob. sou programador há muito tempo.mais de cinquenta anos.quando comecei a programar, os computadores eram grandes o suficiente para ocupar uma sala grande e caros, chegando a milhões de dólares.

trabalhei com uma variedade de linguagens de programação, incluindolinguagem assembly, cobol, fortran, pl/i, c, c++, pascal, java, c#espere. ao longo dos anos estive envolvido no desenvolvimento de uma variedade de sistemas, desde sistemas financeiros até sistemas embarcados em tempo real e sistemas de controle de processos. portanto, você pode dizer que tenho uma vasta experiência neste setor.

além disso, sou autor de vários livros, incluindo clean code (código limpo), "o caminho para a arquitetura limpa" (arquitetura limpa), e o livro que estamos discutindo hoje se chama "design funcional》(design funcional)。

"novo programador"além de escrever livros, o que você faz nas horas vagas? a propósito, leio frequentemente o seu twitter e descobri que cerca de 50% dos seus tweets são notícias sociais sobre as eleições nos eua e trump, e os outros 50% são sobre conteúdo técnico, programação e suas opiniões sobre código.

tio bobde fato. em anos não eleitorais, cerca de 90% dos meus tweets são sobre software. mas como este é um ano eleitoral, há mais conteúdos abordando outros temas. quando não estou escrevendo livros ou programando, faço muitas coisas. gosto de andar de bicicleta e viajar bastante. também sou piloto e me divirto muito voando em meu próprio avião. eu tenho uma família enorme comquatro filhos e dez netos., costumo visitá-los sempre que possível, então meu tempo é organizado de forma completa.

"novo programador": por favor, leve-nos de volta ao ponto inicial de sua carreira de programador e conte-nos a história de quando você começou a trabalhar como programador em 1970. você tinha 18 anos na época e as primeiras linguagens que aprendeu foram assembly e cobol. você pode falar sobre sua experiência quando começou?

tio bob: bem, naquela época não havia muitos cursos universitários. eu não tinha interesse na escola na época. naquela época, a guerra do vietnã estava em alta e havia muitos tumultos e agitação no campus. e,aprendi muito sobre programação de computadores, e aprendi cobol e fortran, e até várias linguagens assembly de computadores. então, eu não acho que haja necessidade de ir para a faculdade

quanto ao início da minha carreira de programação, tudo começou quando minha mãe me comprou um pequeno computador de plástico quando eu tinha 12 anos. esse brinquedo tem três chinelos e seis portas and, e é necessário girar uma pequena alavanca para operá-lo. alguns elásticos e alavancas internas movimentam as peças, permitindo fazer cálculos simples, como contar de 0 a 7, ou. contando de 7 a 7. a contagem retorna a 0. além disso, você também pode programá-lo para adicionar dois bits para gerar um bit de soma e um bit de transporte. eu até escrevi muitos programas interessantes nele - o processo de programação é adicionar um pequeno tubo inserido na trava, esses tubos bloqueiam. a haste entre na ranhura, alterando assim a condição do gatilho.

então, passei algumas semanas aprendendo como fazer aquele computador de brinquedo funcionar e, através desse processo, me tornei um programador.sou programador desde então

esse foi meu ponto de partida, e então meu pai comprou muitos livros sobre computadores e linguagens de programação para me dar o máximo de informações que pudesse. então, aos 16 anos, consegui um trabalho de programação, escrevendo programas para o honeywell 200. o trabalho durou duas ou três semanas, quandoainda é apenas um garoto, fiz isso durante as férias de verão e foi muito divertido.

cerca de dois anos depois, quando eu tinha 18 anos, consegui um emprego em tempo integral escrevendo linguagem assembly e cobol para o ibm 360. logo depois, comecei a programar muitos microcomputadores em linguagem assembly. na época em que esses computadores foram produzidos pela varian corporation, muitas empresas construíam microcomputadores naquela época, mas poucas tiveram sucesso, e foi a digital equipment corporation (dec) que dominou o campo. tornei-me então muito hábil na programação do pdp 8 e do pdp 11, dispositivos produzidos no início da década de 1970.

"novo programador": a década de 1970 foi uma época realmente interessante. a world wide web ainda não havia sido inventada e a usenet tinha acabado de ser inventada.aparecer. você é um dos primeiros usuários da usenet no mundo e também descobri que o apelido “tio bob” foi originalmente dado a você por um colega da empresa. mais tarde, você usou esse apelido por engano como assinatura na usenet e, eventualmente, o nome mudou com sucesso de apelido para seu nome real. você pode compartilhar a história?

tio bob: eu trabalhava em uma startup chamada clear communication, que foi o início da minha carreiraquarta parada, em algum momento entre 1987 e 1989. lá, um colega de trabalho deu um apelido a todos, o meu era “tio bob”. no começo foi um pouco chato porque ele sempre andava por aí me chamando por esse apelido: “tio bob, e isso?” “tio bob, e aquilo?”.

saí daquela empresa e me tornei consultor, e ninguém mais me chamava de “tio bob”. acontece que eu meio que perdi o título, então cometi o erro de adicioná-lo à minha assinatura de e-mail.

eu era muito ativo na usenet na época, postando frequentemente artigos em grupos de notícias como comp.object e comp.lang.c++, e as pessoas começaram a notar “tio bob” em minha assinatura. certa vez, eu estava em uma conferência sobre c++, provavelmente por volta de 1990, e alguém apontou para mim do outro lado do corredor e disse: "olha, esse é o tio bob!" assinatura. - mas então percebi que "uncle bob" seria realmente uma boa marca, então mantive-a.

"novo programador": a usenet pode ser considerada a primeira mídia social da qual você participa. como muitos desenvolvedores lendários, você gosta de participar de diferentes comunidades ou fóruns. certa vez, vi você postando no hash note: "eu sou robert martin. você pode me fazer perguntas naquele momento, muitos desenvolvedores fizeram perguntas e participaram ativamente." a conversa. agora, essa comunicação parece estar ocorrendo principalmente no twitter.

tio bob:certo,twitteragora minha principal mídia social. também uso o facebook, mas principalmente para manter contato com familiares e amigos.

"novo programador": você inicialmente se sentiu atraído por c e c++, mas também mencionou que experimentou linguagens como snobol, focal, alcom e basic por interesse. que outras linguagens de programação você acha que podem ser chamadas de "interessantes"? principalmente entre as novas linguagens de programação que surgiram nos últimos anos, quais você acha interessantes?

tio bob: a linguagem que acho mais interessante no momento éclojure, um idioma que investi muito tempo aprendendo. isso me surpreendeu porque clojure é na verdadelispum dialeto de lisp que nunca pensei que aprenderia.

durante os primeiros trinta anos da minha carreira, nunca pensei em aprender lisp porque achava que era uma linguagem terrível – porque, é claro, eu não a entendia de jeito nenhum. até que um dia li um livro chamado “a estrutura e interpretação de programas de computador”. a linguagem usada no livro era lisp, o que me atraiu imediatamente. de repente, tornei-me um grande fã do lisp. eu quero encontrar ummaneiras de usar lisp em sua vida diária, então conheci clojure.

equivalente a clojureum dialeto lisp que pode ser executado na jvm (java virtual machine), foi perfeito para mim, então comecei a aprender a codificar clojure e me diverti fazendo isso, foi um ótimo passatempo para mim.

além disso, existem outras linguagens interessantes, comoadiante, uma linguagem de pilha baseada em expressões postfix que é diferente de qualquer linguagem que já usei e muito interessante.prólogotambém é uma linguagem muito interessante. você não precisa dizer diretamente à máquina o que está correto, mas deixar a máquina obter o resultado correto ao resolvê-lo. no geral, são linguagens muito interessantes que todos deveriam conferir porque são únicas.depois de aprender uma linguagem muito diferente, toda a sua visão sobre o código muda

quando as máquinas pensarem como humanos, as habilidades de programação se tornarão obsoletas

"novo programador": entendo alguns de seus comentários anteriores sobre o código de ia. na sua opinião, grandes modelos de linguagem às vezes são bons e às vezes estúpidos. embora a explicação do código da ia ​​tenha ajudado um pouco, você ainda afirmou que não deveria ser cegamente confiável.

tio bob: sim, programadoré fácil depender excessivamente de ferramentas como o copilot e aceitar acriticamente o código que elas geram quando você o vê, e isso é perigoso. você precisa ser crítico e, embora parte desse código esteja correto, na maioria das vezes você precisa ter muito cuidado com o código gerado por ia. então minha sugestão é,tenha cuidado, use-o como uma ferramenta e lembre-se sempre de que as ferramentas podem prejudicá-lo se usadas incorretamente.

"novo programador": então, para programadores que estão apenas começando a aprender, como devem usar a ia para crescer? ouvi duas opiniões completamente diferentes em entrevistas. uma é que os programadores novatos deveriam abraçar totalmente a ia; a outra é que a ia destruirá os programadores juniores porque essas pessoas não têm a capacidade de julgar a qualidade do código de ia.

tio bob: assim como os pilotos juniores não deveriam usar o piloto automático.aprenda primeiro a pilotar um avião e depois use o piloto automático quando não precisar prestar atenção aos detalhes. o mesmo se aplica à ia.os programadores juniores não devem confiar na ia no início porque ainda não sabem como avaliar a qualidade do código de saída. muitas vezes, esse código não é apenas ruim, mas também errado e nem funciona.

o que realmente me preocupa é quando programadores juniores recebem uma tarefa e optam por usar ia para implementá-la. depois que a ia fornecer o código, esses novatos sempre pensarão: “bem, foi fornecido pela ia, deve estar tudo bem”, e então perderão o emprego. então minha sugestão é,você deve até diminuir o uso de ia durante os primeiros anos de sua carreira

"novo programador": hoje em dia, cada vez mais códigos gerados por ia são usados ​​em diferentes projetos. como você equilibra a qualidade do código e a eficiência de geração?

tio bob: minha maneira de equilibrar éuse ia para gerar código primeiro e depois limpá-lo. não vou deixar isso colocar código ruim no projeto. portanto, se o código gerado pela ia funcionar e passar nos meus testes, voltarei e refatorarei, limparei e melhorarei sem hesitação. como alterar a nomenclatura, extrair algumas funções, ajustar a estrutura e assim por diante.

porque não espero que a ia gere um ótimo código. então, vou limpá-lo e transformá-lo em meu próprio código. desta forma, é o meu projeto e o código que escrevi.

"novo programador": cerca de cinco anos atrás, alguém perguntou a você "quais tendências na engenharia de software são superestimadas?"daqui a cinco anos, há alguma outra tendência que esteja sobrevalorizada?

tio boba tendência superestimada agora é, obviamente, a ia generativa, sem dúvida. é novo e qualquer coisa nova é superestimada. daqui a cinco anos, todos olharão para trás e dirão: “provavelmente superestimamos isso”.

"novo programador": seu velho conhecido kent beck disse algo quando a onda de ia estava aumentando. ele disse que usou o chatgpt com relutância e descobriu que 90% de suas habilidades agora eram inúteis, enquanto o valor dos 10% restantes havia aumentado mil vezes. quão útil pode ser a ia generativa?

tio bob: para ser honesto, não acho que a ia seja particularmente útil. nos casos mais simples, pode ser útil. por exemplo, quando eu estava fazendo um trabalho de codificação muito básico, a ia me dava algum código, eu dava uma olhada e achava que estava tudo bem, então continuava trabalhando nele. então, a ia muitas vezes continuará a funcionar de acordo com o contexto, até que, quando as coisas ficarem interessantes, a ia se torne cada vez menos confiável——quanto mais complexo algo é, menos útil é

a ia pode lidar com pequenas coisas, mas não se eu quiser refatorar e melhorar o design. além disso, a ia não pode ajudar muito quando se trata de escrever testes.

"novo programador": você já disse que levará muito tempo até que as escolas de codificação se tornem obsoletas. haverá um momento específico que identifique esse momento? existe um fim para a tecnologia?

tio bob: esta é uma pergunta interessante, mas eu pensaria nela do ponto de vista da ficção científica.quando criarmos máquinas que possam pensar como humanos em algum momento no futuro, as habilidades de programação se tornarão obsoletas. mas sejamos honestos, é aí que todas as habilidades se tornam obsoletas.portanto, não tenho certeza se isso é algo pelo qual ansiar. se isso vai acontecer, acho que será num futuro muito, muito distante. você sabe, o cérebro humano é muito mais complexo do que toda a internet.

"novo programador": na verdade, isso me lembra que você também disse que todos deveriam voltar para a casa de asimovtrês leis da robótica, mesmo que isso criasse uma raça de “escravos robóticos”. como você entende a inteligência artificial geral (agi) de uma perspectiva filosófica?

tio bob: sim, embora eu ache que é improvável que isso seja alcançado no curto prazo, já temos tecnologia genética. se alguma vez criarmos máquinas conscientes para a nossa própria sobrevivência, penso que algo como as três leis de asimov será absolutamente necessário.

"novo programador": nesta base, a ia deve sercódigo abertopara evitar que isso aconteça? os humanos precisam de ia aberta ou de ia fechada?

tio bob: diferentes empresas definitivamente querem manter seus próprios segredos, e não acho que haja nada de errado com isso em si.o verdadeiro problema da ia ​​é o consumo de energia.consome muita energia e continuará a aumentar à medida que a tecnologia se torna mais sofisticada. isso torna seu custo bastante alto. portanto, temos que ver até onde a ia pode se desenvolver hoje e ver até que ponto esses grandes modelos de linguagem podem se sair bem. no entanto, consomem muita energia, tal como as centrais nucleares.

o “espírito artesanal” dos programadores

"novo programador": vamos nos afastar da ia ​​e falar sobre tópicos de humano para humano.

certa vez, alguém perguntou “quem é seu mentor na vida?” e sua resposta foi “os livros são meus mentores”. através dos livros, você conheceu figuras notáveis ​​como martin fowler e kent beck, e até trabalhou com esses dois mais tarde. então, como naquele anouma das 17 pessoas que criaram o manifesto ágil, você pode revelar como é seu relacionamento?

tio bob: no passado, muitas vezes tínhamos muitas reuniões relacionadas a software, mas agora há muito menos reuniões desse tipo. participo de vários tipos de conferências, como conferências de linguagem c, conferências de padrões de design e algumas conferências gerais de desenvolvimento de software. através dessas atividades, conheci muitas pessoas.

por exemplo, conheci em uma conferência de padrões de designkent beck, se reuniram em uma das primeiras conferências de extreme programmingmartin fowler. conheci a maioria dessas pessoas pessoalmente. eles foram meus parceiros e meus mentores. aprendi muito com eles. eles também são meus colegas e aprendemos e progredimos juntos. muito do que aprendi veio de livros de programação das décadas de 1960 e 1970, como the art of computer programming, de donald knuth, e os livros daquela época foram fontes de informação muito importantes para mim.

então, quando eu tinha cerca de 30 anos de carreira, comecei a ir a conferências e a conhecer pessoas cara a cara, e foi nesse ambiente que fundamosreunião ágil. a maioria das pessoas que participaram de conferências agile eu conhecia antes, seja por correspondência ou por ter se conhecido em conferências.

"novo programador": muitas vezes podemos ver um ponto de vista, ou seja, "o desenvolvimento ágil é realmente aplicável?"

houve um período no passado em que muitos desenvolvedores buscavam entrega rápida e ignoravam a qualidade do software. isso pode ser um mal-entendido sobre agilidade.

tio bob: este é realmente um mal-entendido sobre ágil. ágil não é ser mais rápido, mas entender onde você está. você faz desenvolvimento ágil para saber exatamente quanto progresso está fazendo, quão rápido está fazendo isso e se está cumprindo seus prazos. em outras palavras, o agile é uma ótima maneira de ajudá-lo a entender os problemas que você enfrenta. isso garante que você não fique surpreso quando os prazos expiram e dá a todos uma ideia clara do progresso, porque podemos não ser tão rápidos quanto pensávamos.

muitas pessoas acreditam erroneamente que o ágil é um método rápido, e algumas pessoas também o comercializam como um método rápido, mas isso é sempre um mal-entendido.agilidade não é uma forma de torná-lo mais rápido, é uma forma de informar o quão rápido você é.portanto, agile não é obsoleto; não é uma tecnologia obsoleta. se você deseja saber o progresso real e a data de conclusão do seu projeto, o agile é uma ótima maneira de fazer isso.

"novo programador": um de seus tweets me impressionou profundamente, ou seja, “agility foi originalmente fundada pordesenvolvedoriniciado, masgestor de projetointervir nos estágios iniciais do movimento ágil destruiu o relacionamento colaborativo original. “você pode me contar a história?

tio bob: na verdade, o movimento ágil foi originalmente iniciado por um grupo deprogramadoriniciado. dezessete participantes se reuniram no snowbird resort para criar o manifesto ágil. somos todos programadores, ou pelo menos temos uma sólida formação técnica. esse movimento não começou na perspectiva de gerenciamento de projetos, mas um dos fundadores, ken schwaber, decidiu iniciar um curso chamado certificaçãomestre scrum(scrum master)". este curso foi desenvolvido para treinar pessoas que desejam se tornar scrum masters e ensiná-los como auxiliar a equipe no usométodo scrum——este é um modelo de desenvolvimento ágil.

os gestores de projetos demonstraram grande interesse e inscreveram-se em tais cursos. como a maioria dos participantes eram gerentes de projetos e não programadores, isso resultou no projeto originalo movimento iniciado pelos desenvolvedores gradualmente se transformou em um movimento liderado pelos gerentes de projetos.os programadores ficaram insatisfeitos porque sentiram que estavam a ser excluídos desta iniciativa.

para resolver este problema, um grupo de nós começoumovimento de artesanato de software(software craftsmanship) e lançou o manifesto craftsmanship em uma tentativa de reconectar gerentes de projeto e desenvolvedores. no entanto, isso não alcançou resultados significativos.

por fim, separamos um “movimento agile oficial” centrado no gerenciamento de projetos e um movimento agile real liderado por desenvolvedores. este último continua empenhado em trabalhar de forma concisa e ordenada e em esclarecer a sua posição e direção de desenvolvimento.

"novo programador": então, qual é o significado da função do scrum master? de que forma esse papel é importante? como cultivamos um excelente scrum master?

tio bob: o scrum master foi originalmente concebido para ser um membro da equipe responsável por lembrar aos outros membros os compromissos assumidos ao usar métodos scrum ou agile. as responsabilidades incluem verificações semanais do progresso da equipe, como a confirmação de que o código de teste foi escrito conforme planejado e que métodos de estimativa predeterminados foram seguidos. essa função é alternada dentro da equipe, geralmente entre diferentes membros. em equipes maduras, após várias semanas de prática, não há necessidade de um scrum master dedicado para supervisionar porque os membros da equipe já são capazes de executar conscientemente o processo estabelecido.porém, com o envolvimento do gestor de projetos, esta função evoluiu gradualmente para uma função de gestão de projetos, o que está longe da intenção original do scrum master.como resultado, o papel do scrum master hoje mudou significativamente.

"novo programador": você acabou de mencionar a história do artesanato de software, o que me lembrou que sua assinatura no twitter também diz "artesanato" (artesanato), essa é uma palavra muito antiga, hoje deveria ser traduzida como "espírito artesão”。

como esta palavra deve ser entendida? na atual indústria em rápido crescimento, não há realmente tempo para focar na qualidade? à medida que a ia avança, a entrega de software parece estar cada vez mais rápida. acho que a ia vai ajudar, certo?

tio bob: esses grandes modelos de linguagem são ferramentas realmente interessantes e acho que serão úteis para os programadores. mas eles não substituirão os programadores e não farão toda a codificação. eles não são bons em escrever códigos, mas podem apresentar algumas sugestões interessantes. então eu achoeles serão úteis, mas não o suficiente para que não precisemos mais de programadores.

quanto ao artesanato, é uma atitude, uma atitude perante o trabalho. a melhor maneira de explicar isso é: quando você chega em casa depois de um longo dia de trabalho e se olha no espelho, pode dizer para si mesmo: “fiz um ótimo trabalho hoje e estou orgulhoso do meu trabalho”.a maneira como um artesão se comporta.os artesãos estão satisfeitos com a qualidade do seu trabalho. eles são diligentes e disciplinados para produzir um trabalho de alta qualidade.

claro, podemos discutir muitas tecnologias e métodos, como desenvolvimento orientado a testes (tdd), design simples, princípios solid, etc. mas a ideia fundamental é que no final de cada dia você possa dizer para si mesmo: “fiz um ótimo trabalho hoje”. infelizmente, muitos programadores vão para casa, se olham no espelho e sentem que precisam tomar banho. porque eles sentem que tiveram um dia ruim. eles escreveram um monte de códigos ruins apenas para cumprir um prazo e precisam eliminar esses sentimentos ruins. artesanato é isso: voltar para casa sabendo que fez um bom trabalho e sentir orgulho do seu trabalho.

"novo programador": seu livro "o caminho para o código limpo" (código limpo) também reflete o princípio do artesanato. o chamado "tao" do código limpo concentra-se mais na implementação da lógica de negócios do que na programação do sistema? ou não há diferença entre os dois?

tio bobcódigo limpo é um conjunto de conceitos e técnicas que ajudam você a trabalhar como um artesão para que possa voltar para casa orgulhoso de seu trabalho.não importa se você está implementando lógica de negócios ou programando sistemas. é apenas um conjunto de técnicas e conceitos que ajudam você a fazer bem o seu trabalho e a se sentir satisfeito.

"novo programador": eu descobri antes disso, seja na comunidade de desenvolvedores na china ou nos estados unidos, muitas pessoas pensam que código limpo significa muitoresumo. então, como evitamos escrever código excessivamente projetado e abstrato?

tio bob: sim, este é um fenômeno muito estranho, porque meu livro em si não recomenda abstração excessiva, nem defende muita abstração. o que o livro sugere é,use abstrações com moderação e de forma adequada, mas o design excessivo não é recomendado. aparentemente, existem alguns programadores que acreditam que qualquer forma deindiretosão todos ruins, eles acham que a única maneira de escrever um bom código é tentardireto. não concordo com essa visão, acho que uma quantidade moderada de indireção e abstração pode ser útil, mas é preciso ter muito cuidado porque a abstração tem um custo. portanto, use a abstração quando ela ajudar a resolver um problema, mas esteja ciente do seu custo e use-a com moderação.

"novo programador": presumivelmente, esta é a razão pela qual você disse há algum tempo que lançaria uma nova versão do "code cleanliness". posso entender isso como uma limpeza da fonte? mas já que você decidiu redesenhar e reescrever completamente o livro, por que não dar um novo nome a ele?

tio bob: o título do livro foi decidido pela editora. queria principalmente reiterar o conceito central de “código limpo”, mas usei expressões diferentes e elaborei o tema sob diferentes ângulos.

o livro original foi escrito há 16 ou 17 anos para o público da época. e agora estou escrevendo este livro para os leitores de hoje. isso vai tentarresolva problemas mais comuns hoje. eu usaria uma linguagem diferente e adotaria abordagens diferentes, tornando-as menos diretivas e mais informativas, tentando transmitir o mesmo ponto de maneiras diferentes. a mensagem é a mesma, apenas expressa de forma diferente. acho que esses dois livros acabarão sendo complementares e os leitores deveriam ler os dois.

ai é um programador júnior com apenas meio cérebro

e nunca realmente cresce

"novo programador": vamos falar sobre seu novo livro “design funcional”. em primeiro lugar, por que você quis escrever este livro?

tio boba programação funcional cresceu em importância na última década. embora as pessoas tenham começado a prestar atenção à programação funcional por volta de 2005, na verdade é um conceito mais antigo, existindo como linguagem matemática desde 1936, e uma das primeiras linguagens de programação era funcional.

no início, as linguagens funcionais eram caras de executar, lentas e exigiam grandes quantidades de memória. mas agora, os avanços no poder computacional e nos recursos de memória tornaram o custo da programação funcional quase insignificante. isso traz as vantagens da programação funcional, principalmente quando se trata de programação multithread. a programação funcional permite que você escreva código multithread sem se preocupar com condições de corrida ou atualizações simultâneas. isso ocorre porque a programação funcional não possui instruções de atribuição e não altera o estado das variáveis.

enquanto aprendia clojure, descobri que era uma maneira divertida de codificar e resolver problemas. acho que deveria ser combinado com outras ferramentas como programação orientada a objetos e programação estruturada.no entanto, nos últimos anos, alguns artigos afirmaram que a programação funcional se opõe à programação orientada a objetos e que a programação orientada a objetos está desatualizada. não concordei com essa visão e decidi escrever este livro.

capa do livro "design funcional: princípios, padrões e prática"

este livro discute como a programação funcional, a programação orientada a objetos e a programação estruturada trabalham juntas para construir sistemas melhores. ele começa com conceitos básicos, constrói gradualmente princípios e padrões de design e, finalmente, combina-os em um pequeno aplicativo completo. espero que os leitores entendama programação funcional não existe isoladamente, que funciona com tudo o que aprendemos nos últimos 50 anos.

"novo programador": também coletei muitas perguntas sobre o novo livro da comunidade de desenvolvedores csdn, e a maioria das pessoas está curiosa para saber por que você escolheuclojureem vez de scala para escrever o código do livro? é porque você deseja usar uma linguagem mais funcional que não suporte classes e herança, para provar que seus princípios solid também se aplicam ao design funcional?

tio bob: parte da razãode fato. embora clojure não seja uma linguagem funcional "pura", é muito propício para escrever programas funcionais. no entanto, há outra razão, talvez mais importante, pela qual escolhi clojure, e essa éclojure é muito simples

o que quero transmitir neste livro é a ideia de programação funcional, e não ensinar uma linguagem de programação funcional complexa. principalmente, não quero ensinar um idioma com gramática complexa. a sintaxe do clojure é muito simples e quase não possui sintaxe complexa. aprender clojure é fácil e você pode dominá-lo lendo o código clojure.

portanto, quando mostro o código no livro, não entro em detalhes sobre como o clojure funciona. em vez disso, explico alguns conceitos básicos e deixo o leitor descobrir a maior parte do resto. também recomendo alguns outros documentos para os leitores interessados ​​consultarem. mas no geral, clojure é muito fácil de entender, entãopara aqueles leitores que não conhecem muito sobre clojure ou programação funcional, podem focar mais no conceito de programação funcional sem se preocupar com a linguagem em si.

"novo programador": lembro que uma vez você disse no twitter que se alguém quiser ser mencionado em seu próximo livro, pode enviar um trecho de código que achar mais legal. isso acontece com frequência? quantas pessoas normalmente enviam código? os desenvolvedores chineses também podem enviar?

tio bobsim, eu twittei isso e recebi algumas respostas. algumas pessoas enviam trechos de código por meio de links do github ou diretamente. provavelmente usarei parte desse código em um próximo livro.se os desenvolvedores chineses quiserem enviar um código que considerem muito legal, ficarei feliz em considerá-lo.mas não posso prometer usar o código de todos, porque o tamanho de um livro é limitado e não posso incluir nele o código de todos.

"novo programador": você tem alguma ideia inovadora para livros didáticos digitais e plataformas de aprendizagem online? as pessoas parecem estar menos dispostas a ler livros de papel atualmente. como irão estes novos formatos revolucionar a forma como a programação é ensinada e aprendida? como você planeja ensinar programação para a próxima geração?

tio bob:de fato,estamos agora na era digital, onde a capacidade de atenção diminuiu para menos de 20 minutos. mas se você realmente quer aprender alguma coisa, precisa desacelerar e focar nos estudos. vários dos meus livros recentes vieram comvídeoconteúdo, os leitores podem assistir a demonstrações ao vivo das sessões de programação por meio da url do livro. esta combinação de texto e vídeo é muito eficaz.

além disso, existe uma maneira muito interessante depalestra on-line. por exemplo, após a leitura do material impresso, o livro solicitará que você visite uma url específica para assistir à palestra relevante. acho que esses métodos são muito úteis.

não acho que os dias dos livros de papel tenham acabado. eles podem ser convertidos em e-books, pdfs ou versões para leitores on-line, mas os livros didáticos não desaparecerão. o texto é um meio com altíssima densidade de informações, mais denso que vídeos ou palestras, e também é mais conveniente para controlar o andamento do aprendizado. portanto, penso que uma combinação de diversos formatos de aprendizagem pode ser mais eficaz, utilizando tanto texto como vídeo.

"novo programador": seu livro é destinado a leitores de todos os níveis de especialização, desde iniciantes até profissionais experientes. isto certamente apresenta diferentes desafios quando se trata de equilibrar profundidade e amplitude de conteúdo.

tio bob: meu livro é realmente voltado para um grupo diversificado de pessoas, tanto programadores novatos quanto profissionais. a chave é agregar valor a ambos os tipos de leitores, sem tornar a digestão muito difícil para um ou simplificar demais para o outro.

ao ensinar e escrever, presumo que meus ouvintes ou leitores sejam tão inteligentes quanto eu e possam compreender meu conteúdo. pode exigir um pouco de esforço da parte deles, mas tenho certeza que eles entenderão. não ajusto o conteúdo com base no meu julgamento da capacidade do leitor. simplesmente entrego minha mensagem diretamente, como se estivesse falando com um colega.

talvez eu tenha mais experiência, talvez tenha passado por mais e cometido mais erros. para que eu possa compartilhar minhas experiências e histórias. mas não vou desacelerar ou simplificar demais.

"novo programador": como você mudou a maneira como ensina programação ao longo dos anos? que novas abordagens e lições você adotou para acompanhar o cenário tecnológico em evolução?

tio bob: nos primeiros dias, eu costumava usartransparênciase exibir o conteúdo do curso por meio de um projetor, geralmente preparando uma grande pilha de filmes para exibir o conteúdo página por página. com o tempo, agora eu usoipadé muito divertido fazer uma apresentação, conectá-la a um projetor e desenhar na tela do ipad com o apple pencil, e tudo será exibido na tela grande em tempo real.

durante a pandemia de covid-19, começamos a dar aulas por meio de ferramentas de treinamento remoto, como o zoom. agora, a maior parte do meu ensino é feito remotamente. ainda uso apresentações de slides e desenhos de tela, e esses métodos ainda funcionam. a única diferença é que no ensino remoto não consigo ver diretamente a reação do público, o que é menos uma experiênciametade da diversão

"novo programador": outra mudança provocada pela epidemia é que muitos programadores estão preocupados em serem substituídos pela ia. eu vi uma declaração antes de que aprender design funcional pode ajudá-los a manter seus empregos, você pode explicar isso?

tio bob: o design funcional e os conceitos dos livros de design funcional são, na verdade, projetados para ajudá-lo a se tornar um programador mais maduro.adicione novas ferramentas à sua “caixa de ferramentas”. a programação funcional é uma boa ferramenta, a programação orientada a objetos é uma boa ferramenta e a programação estruturada também é uma boa ferramenta. o desenvolvimento orientado a testes é uma ótima ferramenta e é melhor tê-la em mãos. os princípios solid também são bons e definitivamente deveriam estar em sua caixa de ferramentas. portanto, o objetivo deste livro é expandir a caixa de ferramentas do desenvolvedor, o que certamente o ajudará a manter seu emprego.mas não acho que você precise se preocupar muito em ser substituído pela ia. é improvável que isso aconteça durante a minha vida, e pode não acontecer durante a sua vida, ou pode nunca acontecer. tenho a sensação de que não veremos máquinas capazes de inteligência de nível humano.

"novo programador": em relação ao design funcional e à programação orientada a objetos, acredito que muitas pessoas devem ter perguntado qual é o melhor. mas o que eu quero perguntar é: você achaem qual deles a ia atual é melhor?por exemplo, a programação funcional é mais adequada para geração de código de ia? não tem estado, uma função pode ser gerada quando usada e cada função também pode ser gerada automaticamente e verificada pela ia. então, se a ia for melhor em design funcional, será que os programadores que só conhecem programação funcional enfrentarão uma crise maior?

tio bobnão importa, porque a ia não pode fazer nadae não é melhor para gerar código funcional do que código estruturado ou orientado a objetos.você pode pensar na ia como umprogramadores juniores com meio cérebro e nunca crescem. ele lhe dará algumas sugestões, a maioria das quais não são muito boas, e algumas delas podem ser aceitáveis, mas precisam ser alteradas, porque o código escrito pela ia é sempre confuso.

ia é o que é e pode ser útil, mas você não deve ajustar a direção de sua carreira para acomodar a ia. ia é uma ferramenta e você pode aprender como usá-la, mas não deve mudar seus planos de carreira apenas por uma determinada ferramenta de ia.

o que fazer se você não souber o que fazer ao se deparar com a programação de ia

então desligue

"novo programador": se uma nova pessoa viesse até você e perguntasse: “qual linguagem devo escolher como minha primeira linguagem de programação? como você normalmente responderia?

tio bob: bem, você pode escolher java. dito isto, c# também é uma linguagem muito boa. clojure também é bom. a linguagem c também está disponível. c++ é um pouco difícil e complexo, mas também é uma opção. a linguagem go também é muito boa, é uma boa linguagem...

na verdade, qual você escolhe não é tão importante. programar é programar, não importa com qual linguagem você comece. mais importante ainda, você precisa aprender o próximo idioma. não se limite a um idioma.aprenda um, passe alguns meses até ficar um pouco proficiente, depois aprenda outro e assim por diante, aprendendo um novo idioma a cada ano. pense em aprender um idioma como algo divertido e encontre um idioma que você ainda não aprendeu. você pode nunca usá-lo no trabalho e nunca mais usá-lo, mas crie o hábito de aprender um novo idioma a cada um ou dois anos.não importa por onde você comece, o que importa é que você continue aprendendo.

"novo programador": você recomendaria que programadores juniores participassem de projetos de código aberto? em quais projetos impressionantes de código aberto você esteve envolvido e pode compartilhar a história?

tio bob: meu filho e eu começamos um projeto há 20 anos e ele ainda está em andamento e é um ótimo projeto. embora eu não esteja mais envolvido, muitos outros continuam.

se você é um programador júnior ou jovem e deseja aprender algumas ideias novas, recomendo ingressar em um projeto de código aberto. tente enviar algumas solicitações pull e contribua com o que puder. esta é, em primeiro lugar, uma ótima maneira de ajudar os outros e, em segundo lugar, uma grande oportunidade de aprendizagem. de qualquer forma, você está certo, recomendo fortemente que as pessoas se envolvam em projetos de código aberto, é uma ótima maneira de expandir sua carreira.

"novo programador": você sabe sobre a “crise dos 35”? muitos programadores enfrentam dois caminhos quando atingem uma certa idade: mudar para a gestão ou se aposentar.

tio bob: este é um problema real dada a preferência da indústria tecnológica pelos jovens. na verdade, um desenvolvedor me fez uma pergunta semelhante e lembro-me dela claramente. suas palavras exatas foram: "tio bob, por que você ainda programa aos 70 anos?" ele está certo, tenho 71 anos agora e ainda escrevo código.

esta ideia de que a programação é apenas para jovens é na verdade uma ilusão, mas é de facto uma ilusão muito influente. esta ilusão existe porque a procura por programadores disparou como um foguete nos últimos 70 anos.

pense desta forma: a cada cinco anos, o número de programadores no mundo dobra. isto significa que temos de duplicar o número de programadores a cada cinco anos, o que significa que metade dos programadores do mundo tem menos de cinco anos de experiência e três quartos dos programadores têm menos de dez anos de experiência. por outras palavras, três quartos dos programadores mundiais têm menos de 35 anos. então, quando você olha em volta, tudo que você vê são jovens. você pode perguntar: onde estão todos aqueles programadores antigos?na verdade, ainda estamos todos lá, mas não tão visíveis em número.

isto cria a ilusão de que a programação só é adequada para os jovens, mas na verdade isto é completamente errado. para se tornar um programador verdadeiramente poderoso, é preciso muito tempo para acumular. pode haver alguns programadores seniores que acham ótimo ter dez anos de experiência. isso é realmente bom, mas em mais cinco anos ele pode se tornar um programador melhor.

então, se você realmente gosta de escrever código, acha que esse é o seu favorito e quer continuar fazendo isso, então não desista. você não precisa ser um gerente. se há pessoas que são boas em gestão, deixe-as fazer isso. se você quiser continuar escrevendo código, continue. você não precisa mudar de carreira ou se aposentar mais cedo. isso não significa que seu cérebro não funcionará bem quando você chegar aos 36 anos. na verdade, há tantas pessoas novas entrando nesta indústria agora, e não apenas os jovens, mas pessoas de todas as idades estão aprendendo programação.isso não significa que você não tenha chance.

"novo programador": isso me lembra que muitos programadores agora sentem dúvidas ao enfrentar a ia. mas, na verdade, a dúvida não é novidade, e muitos programadores antigos teriam tido o mesmo problema em épocas anteriores. você já teve sentimentos de dúvida antes?

tio bob: quando comecei a programar, ainda era uma criança e sempre senti que poderia fazer meu nome. nunca tive dúvidas neste momento.

em vez disso, comecei a cometer erros, ser demitido e passar por outros contratempos. a dúvida neste momento é realmente uma coisa boa.uma quantidade moderada de dúvidas é, na verdade, bastante saudável. porque depois de um tempo você aprende a lidar com isso.você pensa: “ok, eu sei como evitar esses erros. sei que não sou perfeito, mas contanto que eu me concentre, tenha cuidado e converse com outras pessoas, serei capaz de resolver esses problemas lentamente, você”. irá superar essas dúvidas. na verdade, passar por um período de dúvida não é necessariamente uma coisa ruim. isso permite que você cresça e se torne mais forte.

"novo programador":finalmente, você pode dar alguns conselhos aos desenvolvedores atuais? especialmente aqueles programadores que se sentem confusos ou que ficam perdidos quando se trata de programação de ia.

tio bobse você não sabe o que fazer quando se depara com a programação de ia, desligue a ia. apenas ignore.passe mais um mês escrevendo código e depois ative a ia. talvez então ele olhe seu código e veja o que você quer fazer, e então poderá dar sugestões melhores.

por exemplo, imagine que você é um novato aprendendo a dirigir. você nunca tocou no volante e deseja usar a direção automática assim que começar. assim que você pressiona o piloto automático, o carro começa a se mover. você pode morrer de medo e pensar: "preciso desligar essa coisa primeiro. deixe-me ter um pouco de experiência, tente o piloto automático novamente." pense: "ah, agora entendo como isso funciona."o mesmo se aplica à ia. pode não ser fácil no início, mas à medida que avança, você se tornará cada vez mais proficiente.