"Um alto nível de autodisciplina." Jeffrey Richter sobre como codificar, escrever livros e criar suas próprias empresas


Hoje em nosso estúdio virtual, um dos doadores mais famosos é Jeffrey Richter .

Atualmente, ele é arquiteto de software parceiro da Microsoft com aplicativos e armazenamento em nuvem distribuída. Em outras palavras, uma pessoa que sabe tudo sobre o Armazenamento do Azure.

Perguntas frequentes

Muito texto. Sobre o que é tudo isso?
Para tornar a leitura mais divertida, para este artigo, apresentamos um layout mais interessante. Haverá cabeças falantes à esquerda e texto à direita. Se você estiver virando tristemente para a parte de interesse, no índice existem links de âncora. Elenco:


Eugene phillennium Trifonov ( questões não técnicas )
  • Dicas de desenvolvimento da empresa
  • Combinando diferentes tipos de atividades
  • O que ler, o que estudar, como escrever


Oleg olegchir Chirukhin ( questões técnicas )
  • Por que Richter está aprendendo JS, Golang e Python
  • Devo continuar escrevendo em C ++
  • A evolução e o futuro do desenvolvimento na plataforma Windows, .NET e em geral
  • JavaScript vai dominar o mundo, é necessário segurança de tipo
  • Um pouco sobre os benefícios dos provedores de nuvem
  • O que é melhor ter - um jato particular ou um helicóptero particular
  • Como fazer tudo



Por que este artigo se enquadra no hub JavaScript?
Somente para aqueles que estão interessados ​​na opinião do arquiteto do Azure sobre JS e sua posição no holivar sobre segurança de tipo. Este holivar flui de entrevistas em entrevistas , e ele não vê o fim.


Por que este artigo caiu no hub C ++?
Richter escreveu originalmente livros sobre C ++. Somente para aqueles que estão interessados ​​na opinião do arquiteto do Azure sobre o futuro e a aplicabilidade do C ++


Jeff se tornou famoso no início dos anos 90, quando escreveu um livro sobre como programar o Windows 3.1. Seu livro “Programming Applications for Microsoft Windows” se tornou um clássico, mais tarde lançado como “Windows via C / C ++” e resistiu a várias edições.

Com o advento do .NET, ele escreveu "CLR via C #" - também se tornou um clássico, além de várias edições. Naquela época, ele era um dos fundadores da Wintellect e, formalmente não fazia parte da Microsoft, era mais livre para avaliar. O que ganhou uma reputação como um grande especialista independente no Windows. Este é um homem lendário do nível de Charles Petzold e Don Box.





Sobre a vida: engenheiro, escritor, empresário


Temos muitas perguntas diferentes para você e começarei com algumas menos relacionadas à parte técnica. Entendi corretamente que você está trabalhando simultaneamente na Microsoft e Wintellect?




Sou dono da Wintellect há dezoito anos e até a última semana. Há três anos, ingressei na equipe do Azure na Microsoft e, desde então, não trabalho na Wintellect. Eu não tinha nenhuma conexão significativa com o Wintellect.




Te peguei. Ainda assim, gostaria de fazer algumas perguntas sobre sua experiência como criador do Wintellect. Muitos programadores se reúnem em nossas conferências que estão bem familiarizados com o processo de desenvolvimento de software, e alguns deles provavelmente estão pensando em criar sua própria empresa, mas não estão familiarizados com o lado empreendedor da questão. Você também tem conhecimento em ambas as áreas; portanto, seria interessante ouvir seus conselhos para as pessoas que planejam estabelecer sua empresa.




Definitivamente, você não gastará todo o seu tempo no desenvolvimento e aprenderá muito sobre outras áreas: negócios, gerenciamento de dinheiro, economia, finanças, contratação e demissão. Você precisará constantemente tomar muitas decisões e interagir muito com as pessoas: com clientes, parceiros. Você precisará encontrar opções adequadas a todas as partes. Apesar de tudo isso, na Wintellect eu pude dedicar tempo suficiente ao desenvolvimento, porque contratamos pessoas que estavam envolvidas principalmente em negócios. No entanto, eu também tive que participar do lado empreendedor da questão e o fiz com prazer, pois foi uma experiência nova e interessante. O fato de eu não precisar pensar em bits e bytes o tempo todo me fez, na minha opinião, uma pessoa mais integral. Não sinto muito por nada.




Você encontrou alguma dificuldade inesperada? Ou, pelo contrário, alguma coisa foi mais fácil do que você esperava?




Nosso caminho era inequivocamente muito desigual: às vezes os negócios corriam bem, novos clientes chegavam. Em outros períodos, tudo foi um pouco diferente. Quando fizemos uma assinatura de vídeo do WintellectNOW , lançá-la e obter lucratividade acabou sendo muito mais difícil do que pensávamos. No final, acabou e agora é bastante bem-sucedido, mas levou cerca de um ano a mais do que esperávamos. Além disso, surpresas acontecem aos funcionários: algumas são maravilhosas, outras trazem danos à empresa, e essas coisas são esclarecidas apenas mais tarde - são invisíveis no trabalho diário. No geral, nossas expectativas foram muitas vezes enganadas, tanto nas boas quanto nas ruins.




Parece-me que muitos desenvolvedores não querem criar sua própria empresa, temendo que, gastando tempo com os negócios, eles não sejam mais guiados pelas tecnologias mais recentes. Foi difícil para você manter-se atualizado com o lado técnico das coisas?




Esta é uma boa pergunta. Na minha opinião, a solução é especialização. Quando a Wintellect foi fundada, tinha três parceiros técnicos. Cada um de nós estava envolvido em um determinado campo. Nenhum de nós poderia ser um especialista em todas essas áreas. Minha área era de programação de sistemas - sistemas operacionais, linguagens, tempos de execução, multithreading e similares. Essa organização de negócios economiza recursos. Se um idioma tem uma nova versão lançada uma vez por ano, é fácil acompanhar isso e nas áreas que são importantes para mim - isso nunca me causou dificuldades.




Você faz muitas coisas relacionadas ao lado empreendedor das coisas: faça apresentações, escreva livros. Você tem a sensação de que essas várias formas de atividade interferem entre si ou vice-versa? Por exemplo, escrever um livro com apresentações futuras ajuda?




Definitivamente ajuda. De todas as aulas, escrever livros absorve mais tempo e nervos, forçando a atenção à linguagem, gramática, material de organização e encontrando as demonstrações certas. Isso é muito difícil, e escrever cada livro geralmente leva muitos meses. Mas quando esse trabalho é concluído, fazer slides já é muito mais fácil, pois já existem demonstrações e você só precisa apertar o material. Além disso, um entendimento da estrutura interna de vários sistemas permite-me dar o conselho certo e escolher a tecnologia certa para resolver problemas ao trabalhar como consultor ou na Microsoft na equipe de Armazenamento do Azure. Em geral, todas essas atividades se ajudam bastante.




Sua experiência de escrita mudou a maneira como você lê livros? Você presta mais atenção aos livros por causa disso?




Penso que mudei, e parece-me que também presto mais atenção às apresentações de outros oradores. Observo se o orador tem a habilidade de apresentar o material, quão familiar ele está com o material, se repete o que os outros disseram ou se realmente compreende profundamente o problema. Também presto atenção às mesmas coisas nos livros: o livro está bem escrito, existe um profundo entendimento técnico da questão, há recomendações diretas dadas lá ou é a estrutura interna do sistema descrito. Nos meus livros, tento descrever o funcionamento do sistema, observar os lados positivo e negativo, mostrar como adiar possíveis problemas, descrever os requisitos de desempenho. Parece-me que meus livros são considerados relativamente bem-sucedidos devido ao fato de eu fornecer muito contexto para cada tecnologia, e não apenas indicar: faça, faça diferente. Eu continuo estudando novas tecnologias, então leio literatura técnica, assisto a vídeos do YouTube e de outras fontes, assisto a relatórios. Não basta apenas descobrir que alguma tecnologia funciona dessa maneira e dessa maneira, preciso me aprofundar nela, para entender em que casos é bom e em que não, quais truques são.




Como você acompanha livros e relatórios de outros autores, pode recomendar o trabalho ou o vídeo de outra pessoa?




Recentemente, estudei o Go e o Python em conexão com o meu trabalho na Microsoft; para esse fim, li os logs da equipe do Go e as especificações dessa linguagem. Sempre fiquei surpreso que os desenvolvedores não leem a especificação do idioma em que escrevem, porque define completamente como o idioma deve funcionar. Em vez disso, as pessoas leem livros. Eu recomendo sempre ler a especificação. Caso contrário, costumo assistir a vídeos de discursos em conferências sobre várias tecnologias. É difícil aconselhar qualquer coisa aqui - alguns oradores são melhores, outros piores.




Você não precisa ligar para alguém que é definitivamente melhor do que todos os outros - apenas diga quem você gostou.




Gosto dos palestrantes que entram nos detalhes da pergunta. Estou sempre interessado em relatórios sobre gerenciamento de memória. Por causa do gerenciamento de memória, geralmente há muitos problemas de desempenho, o que é muito importante para mim. Qualquer relatório sobre o trabalho do coletor de lixo no idioma em que escrevo será interessante para mim: por exemplo, se ele usa compressão ou não e assim por diante. É especialmente bom quando o relatório fala sobre itens cujas informações são inacessíveis - o trabalho do coletor de lixo geralmente não é descrito, nem mesmo na especificação. Existem padrões que tornam a coleta de lixo mais eficiente. Tudo isso me interessa.





Tecnologia e equipamento


Vamos conversar um pouco com minhas perguntas técnicas chatas. Jeffrey, você é da Microsoft. Por que você precisa do Go e do Python se há um maravilhoso C #?




Na Microsoft, trabalho em uma equipe dedicada ao SDK e ferramentas para o Armazenamento do Azure. Estamos desenvolvendo um SDK para armazenamento do Azure em vários idiomas diferentes - Go, .NET, Python, Java, NodeJS, PHP, Ruby, C, C ++. Estamos reestruturando nossos SDKs e a primeira implementação foi realizada no Go. Essa foi uma mudança crítica e não tínhamos certeza de como nossos clientes reagiriam a ela. Naquela época, não tínhamos um SDK do Go, portanto o primeiro SDK foi escrito no Go para que nossos clientes não quebrassem nada. Mas, depois de receber um feedback positivo, mudamos para Java, porque tínhamos clientes importantes que precisavam da biblioteca assíncrona do Java. Nesse sentido, comecei a estudar RxJava e, em geral, trabalhar mais com Java. Naturalmente, minha experiência com C # me ajudou muito aqui. Atualmente, estamos no negócio do NodeJS, então estou estudando o TypeScript. Além disso, começamos a portar o novo SDK para o .NET - havia menos para mim aqui porque eu já o conhecia. O próximo da fila é o Python, então eu também o estudo. Esse é o trabalho de nossa equipe - escrevemos o SDK para todos esses idiomas, portanto, minha atividade não se limita a um idioma.




Ok, entendi. Você pode encontrar uma grande quantidade de seus livros na Amazon. O livro mais antigo que encontrei lá, “Windows via C / C ++”, data de 2007. Mas você se tornou famoso como autor de livros nos anos 90. Como assim?




De fato, tenho um livro publicado ainda mais cedo, mas é bastante antigo, não tenho certeza se está na Amazon. Foi escrito para o Windows 3.0, ou seja, é por volta de 1990 ou 1991. Mas muito poucas pessoas o compraram e poucas sabem disso.




Como o Windows 3.0.




Sim, isso foi há muito tempo.




Então você mudou para C # e começou a escrever livros sobre isso, certo? Na sua opinião, qual é o futuro do C ++? Existe mesmo? Deveríamos continuar a puxar a bagagem do C ++, ou é melhor mudar para Rust, Go ou algo assim?




Acho que nunca teremos apenas um idioma que derrote todos os outros. A força das linguagens de programação é que cada uma delas executa um tipo específico de trabalho particularmente bem. Todo mês, verifico os índices de popularidade de várias linguagens, e hoje C e C ++ permanecem muito difundidos. Como nossa equipe do Azure na Microsoft tem muitos clientes que usam C e C ++, não vamos deixar esses idiomas. Além disso, graças à IOT, houve um aumento recente no interesse por esses idiomas. Estamos falando de pequenos dispositivos, como um termostato que controla a temperatura no seu apartamento. Eles têm pouca memória e processadores fracos e, além do assembler, C e C ++ são mais adequados para eles. Então, acho que esses idiomas continuarão sendo usados ​​por muito tempo. Desde que começamos a falar sobre o Rust - tenho alguma experiência com ele e, na minha opinião, ele tem muitas idéias muito interessantes. Pode ser algum tipo de C / C ++ seguro. Na minha opinião, é muito promissor. No entanto, ele me pareceu imaturo. Nossa equipe ainda não lidou com isso, mas continuamos monitorando e, no futuro, a situação pode mudar.




Entendo corretamente que você tem um SDK para C e C ++?




Sim, temos um SDK C ++ para armazenamento do Azure. Algumas outras equipes também têm um SDK para C / C ++, mas não todas, e ainda não decidiram se serão criadas no futuro.




Como a indústria de desenvolvimento do Windows evoluiu? Pelo que entendi, você viu tudo no mundo lá. A primeira coisa que me lembro é Delphi. Então, o C # ganhou popularidade e, até agora, não vejo sinais de queda no C # / .NET, Java e similares. Na sua opinião, eles são o último passo na evolução da programação imperativa? Qual é a probabilidade de algo completamente novo aparecer nos próximos dez ou dez anos? Digamos, uma linguagem com suporte para redes neurais?




Eu sou um homem de idade venerável, especialmente em comparação com você, e tenho visto muito em nossa indústria. Venho programando há cerca de 45 anos. Uma mudança significativa ao longo dos anos é que o sistema operacional se tornou menos importante. Eu me concentrei principalmente em serviços de software de back-end e ferramentas de linha de comando. Eu costumava trabalhar muito mais com a GUI, e meus primeiros livros eram dedicados a isso: aplicativos da GUI com menus, caixas de listagem, caixas de combinação, manipulação de eventos de mouse, chaves e assim por diante. Em algum momento, parei de ter nervos suficientes para isso, porque nesta área você constantemente entra em debates extremamente ferozes sobre se deve usar caixa de listagem ou caixa de combinação em alguns casos, se a largura deve ser de 100 ou 1000 pixels, qual deve ser a cor. Fiquei enojado com essas discussões, então no final parei de fazer isso. Quanto aos idiomas, acho que ainda teremos muitas opções diferentes. Os idiomas morrem por muito tempo, ainda hoje você pode conhecer pessoas que escrevem em Cobol, Fortran ou em idiomas extremamente pouco conhecidos. Novos idiomas aparecerão o tempo todo - recentemente, Julia ganhou fama, Clojure existe um pouco mais. Esses novos idiomas atraíram atenção significativa por um tempo, após o que alguns se tornam bem-sucedidos e outros não. O C # criou um caminho impressionante, tem 15 anos e ainda é extremamente comum. Na minha opinião, a equipe .NET da Microsoft, em muitos aspectos, deu uma nova vida a ela, graças ao fato de terem criado o .NET Core, que agora roda em Linux. Se você escreve em C #, suas habilidades são aplicáveis ​​a um grande número de cenários diferentes. Eu acho que o interesse em C # não enfraquecerá por muitos mais anos.



Minuto de publicidade. Jeff chegará à conferência DotNext 2018 em Moscou com uma apresentação intitulada "Criando aplicativos responsivos e escaláveis" , que abordará o uso de E / S assíncronas para criar sistemas altamente escaláveis ​​(tanto no servidor quanto no cliente). Ele voa para a Rússia ao vivo, para dizer o mínimo, não todos os dias - esta é uma ótima maneira não apenas de ouvir o relatório, mas também de discutir os problemas atuais pessoalmente na área de discussão.


Gostaria de escrever " GNU / Linux Runtime via C #" agora ?




Sim eu quero Na minha opinião, para desenvolvedores de serviços GNU / Linux, por muitas razões, é mais adequado que o Windows - exceto em alguns casos. Eu acho que o C # é uma ótima linguagem. Recentemente, eu me familiarizei com Java: por motivos de correção, só posso dizer que depois disso comecei a apreciar muito mais o C #. Eu realmente gosto de tipos de valor em c #. Recentemente, trabalhamos com o mapeamento de um arquivo para a memória em Java e não conseguimos fechá-lo diretamente, tivemos que esperar pela coleta de lixo. Algumas soluções Java parecem completamente inúteis para mim. Na minha opinião, C # e .NET são melhorados.




Três anos depois, nós, os Javistas, teremos tipos de valor.




Sim, eu sei, e você tem alguns genéricos ...




"Some" é, na minha opinião, uma descrição muito precisa.




Bem, sim, seus genéricos são um pouco estranhos. Mas o Java é uma linguagem incrivelmente popular e as pessoas a usam de maneira muito produtiva. Ele é certamente muito importante. Mas, na minha opinião, no .NET alguns aspectos são melhores. Mesmo se você adicionar tipos de valor, ainda precisamos fornecer suporte para versões mais antigas do Java. Portanto, não será possível aproveitar essas novas oportunidades por mais alguns anos. Mas isso é bom: todos os idiomas estão se desenvolvendo, novas oportunidades aparecem neles. Java, .NET, C # - todos eles permanecerão por muito tempo, especialmente levando em conta algumas alterações recentes, como o .NET Core. Então, na minha opinião, o C # para GNU / Linux é uma ótima combinação para pessoas que escrevem serviços.




Mas para interagir com o back-end, você precisa de uma interface do usuário. Antes, tínhamos apenas consoles de texto e, em seguida, a interface do usuário era exibida, e isso tornava o software muito mais funcional. E hoje existe o Electron e outros mecanismos baseados em JavaScript, e qualquer aluno pode escrever uma interface neles. Você não tem medo de que, no futuro, tudo seja escrito em JavaScript?




Não, acho que não. Primeiro, é uma questão de desempenho: em JavaScript, ele não pode ser comparado com C, C ++, Go ou mesmo C # e Java. Além disso, não consigo imaginar escrever um projeto em larga escala sem a segurança de tipo na fase de compilação. Quando entrei no mundo das linguagens de tipo seguro, me apaixonei por ele à primeira vista. Somente o JavaScript não fornece segurança de tipo, portanto, eu não o usaria em um projeto grande. Mas seria o TypeScript, e estamos escrevendo nosso novo SDK no TypeScript. É um passo significativo em comparação com o JavaScript comum. Mas não creio que o mundo inteiro jamais use apenas um idioma para um único propósito. Isso simplesmente não faz sentido. Mesmo se estivermos falando sobre IOT, o ambiente para executar JavaScript requer muitos recursos, e muitos dispositivos simplesmente não podem fornecê-los.




Bem, não há problema com o JavaScript. Onde eles estão? Quais são os principais problemas para você pessoalmente e para a indústria como um todo?




Não tenho certeza se eles estão relacionados a idiomas ou sistemas operacionais. No momento, os sistemas operacionais tornaram-se itens domésticos comuns. Eles são usados ​​para enviar mensagens eletrônicas e acessar a Internet. Para a maioria das pessoas, não importa se elas usam Windows, Mac ou Linux. As línguas que usamos hoje já são bastante poderosas. De fato, a maioria dos idiomas simplesmente move os dados do ponto A para o ponto B. Você tem uma coleção, navega e filtra o conteúdo - cada idioma pode executar essas ações. Em seguida, precisamos de máquinas para se comunicar. Aqui o padrão é TCP, o HTTP é amplamente usado, mas existem outros protocolos. Todas essas tecnologias funcionam muito bem, no entanto, o desempenho pode ser melhorado ainda mais. Na minha opinião, as dificuldades mais graves hoje estão associadas à criação de serviços. , , . , , . , , , , . , , , . , , , . Microsoft Azure, , , .




Azure ? ?




. . , , . , , , Azure Storage (, ) CosmosDB, - Amazon — . , . . , , , ? . Azure , . , , . , - , , .




. Wintellect , : «We don't just build software. We build developers.». , ?




Wintellect . , . , , Windows, .NET. , , : , , . . Microsoft , . — , — . . . , , / . , , , , . , , , . : , («you get out what you put in»). , , , . , .




, , . — , , , . ? ? , , , . , . - ? , « »? : , , — .




. , — - , - . - — . . - , . . , , , , . , , . , - , . , . . , , .




, , , ?




, . , : . . . : - . , , , . , . .




. , ?




, .




- «» , ?




Sim . , , , . . , . , , , . , , - , . - . . . , , . , — . , , . , . , , . Wintellect, . , - , . , .




- . - ?




45 , - . , - , . . , . , . , - . , , . — ! , .

Source: https://habr.com/ru/post/pt422251/


All Articles