"Un alto nivel de autodisciplina". Jeffrey Richter sobre cómo codificar, escribir libros y crear sus propias empresas


Hoy en nuestro estudio virtual, uno de los donantes más famosos es Jeffrey Richter .

Actualmente es arquitecto de software asociado en Microsoft con Distributed Cloud Apps & Storage. En otras palabras, una persona que sabe todo sobre Azure Storage.

FAQ

Demasiado texto ¿De qué se trata todo esto?
Para hacerlo más divertido de leer, para este artículo se nos ocurrió un diseño más interesante. Habrá cabezas parlantes a la izquierda y texto a la derecha. Si lamentablemente pasa a la parte de interés, en la tabla de contenido hay enlaces de anclaje. Elenco:


Eugene phillennium Trifonov ( cuestiones no técnicas )
  • Consejos de desarrollo de la empresa
  • Combinando diferentes tipos de actividades
  • Qué leer, qué estudiar, cómo escribir


Oleg olegchir Chirukhin ( problemas técnicos )
  • ¿Por qué Richter está aprendiendo JS, Golang y Python?
  • ¿Debo seguir escribiendo en C ++?
  • La evolución y el futuro del desarrollo en la plataforma de Windows, .NET y en general
  • ¿JavaScript tomará el control del mundo?
  • Un poco sobre los beneficios de los proveedores de la nube
  • Qué es mejor tener: un jet privado o un helicóptero privado
  • Como hacer todo



¿Por qué este artículo cayó en el centro de JavaScript?
Solo para aquellos que estén interesados ​​en la opinión del arquitecto Azure sobre JS y su posición en el holivar sobre la seguridad de tipos. Este holivar fluye de entrevistas en entrevistas , y él no ve el final.


¿Por qué este artículo cayó en el centro de C ++?
Richter originalmente escribió libros sobre C ++. Solo para aquellos que estén interesados ​​en la opinión del arquitecto Azure sobre el futuro y la aplicabilidad de C ++


Jeff se hizo famoso a principios de los 90 cuando escribió un libro sobre cómo programar Windows 3.1. Su libro "Aplicaciones de programación para Microsoft Windows" se convirtió en un clásico, más tarde lanzado como "Windows a través de C / C ++" y ha resistido varias ediciones.

Con el advenimiento de .NET, escribió "CLR a través de C #", que también resultó ser un clásico, también varias ediciones. En ese momento, él era uno de los fundadores de Wintellect y, formalmente no formaba parte de Microsoft, era más libre de evaluar. Lo que ganó una reputación como un importante experto independiente en Windows. Este es un hombre legendario del nivel de Charles Petzold y Don Box.





Sobre la vida: ingeniero, escritor, emprendedor


Tenemos muchas preguntas diferentes para usted, y comenzaré con algunas menos relacionadas con la parte técnica. ¿Entendí correctamente que estás trabajando simultáneamente en Microsoft y Wintellect?




He sido propietario de Wintellect durante dieciocho años y hasta la última semana. Hace tres años, me uní al equipo de Azure en Microsoft, y desde entonces no he trabajado en Wintellect. No tuve ninguna conexión significativa con Wintellect.




Te tengo Pero aún así, me gustaría hacerle algunas preguntas sobre su experiencia como creador de Wintellect. Muchos programadores se reúnen en nuestras conferencias que conocen bien el proceso de desarrollo de software, y algunos de ellos probablemente piensen en crear su propia compañía, pero no están familiarizados con el lado empresarial del asunto. También tiene conocimiento en ambas áreas, por lo que sería interesante escuchar sus consejos a las personas que planean establecer su empresa.




Definitivamente no gastará todo su tiempo en el desarrollo, y aprenderá mucho sobre otras áreas: negocios, administración del dinero, economía, finanzas, contratación y despido. Deberá tomar constantemente muchas decisiones e interactuar mucho con las personas: con clientes, socios. Deberá encontrar opciones que se adapten a todas las partes. A pesar de todo esto, en Wintellect pude dedicar suficiente tiempo al desarrollo, porque empleamos a personas que se dedicaban principalmente a los negocios. Sin embargo, también tuve que participar en el aspecto empresarial del asunto, y lo hice con gusto, ya que fue una experiencia nueva e interesante. El hecho de que no necesitaba pensar en bits y bytes durante todo el día me convirtió, en mi opinión, en una persona más integral. No me arrepiento de nada.




¿Encontró dificultades inesperadas? O, por el contrario, ¿hubo algo más fácil de lo que esperaba?




Nuestro camino era inequívocamente muy desigual: a veces el negocio iba bien, llegaban nuevos clientes. En otros períodos, todo era algo diferente. Cuando realizamos una suscripción de video a WintellectNOW , lanzarla y lograr rentabilidad resultó ser mucho más difícil de lo que pensábamos. Al final, resultó, y ahora tiene bastante éxito, pero tardó aproximadamente un año más de lo que esperábamos. Además, a los empleados les suceden sorpresas: algunos son maravillosos, otros traen daño a la empresa, y estas cosas a menudo se aclaran solo más tarde: son invisibles en el trabajo diario. En general, nuestras expectativas a menudo fueron engañadas tanto en lo bueno como en lo malo.




Me parece que muchos desarrolladores no quieren crear su propia empresa, temiendo que, al pasar tiempo en el negocio, ya no se guíen por las últimas tecnologías. ¿Le resultó difícil mantenerse al día con el aspecto técnico de las cosas?




Esta es una buena pregunta En mi opinión, la solución es la especialización. Cuando se fundó Wintellect, tenía tres socios técnicos. Cada uno de nosotros estaba involucrado en cierto campo. Ninguno de nosotros podría ser un experto en todas estas áreas. Mi área era la programación de sistemas: sistemas operativos, idiomas, tiempos de ejecución, subprocesos múltiples y similares. Esta organización de asuntos ahorra recursos. Si un idioma tiene una nueva versión lanzada una vez al año, hacer un seguimiento de esto es fácil, y en aquellas áreas que son importantes para mí, nunca me causó ninguna dificultad.




Haces muchas cosas relacionadas con el lado empresarial de las cosas: hacer presentaciones, escribir libros. ¿Tiene la sensación de que estas diversas formas de actividad interfieren entre sí, o viceversa? Por ejemplo, ¿es útil escribir un libro con presentaciones futuras?




Definitivamente ayuda. De todas las clases, escribir libros absorbe la mayor parte del tiempo y los nervios, forzando la atención al lenguaje, la gramática, el material de organización y la búsqueda de las demostraciones correctas. Esto es muy difícil, y escribir cada libro generalmente lleva muchos meses. Pero cuando se realiza este trabajo, hacer diapositivas ya es mucho más fácil, ya que ya hay demostraciones, y solo necesita exprimir el material. Además, la comprensión de la estructura interna de varios sistemas me permite dar el consejo correcto y elegir la tecnología adecuada para resolver problemas cuando trabajo como consultor o en Microsoft en el equipo de Azure Storage. En general, todas estas actividades se ayudan mucho entre sí.




¿Tu experiencia de escritura ha cambiado tu forma de leer libros? ¿Prestas más atención a los libros debido a esto?




Creo que he cambiado, y me parece que también presto más atención a las presentaciones de otros oradores. Miro si el hablante tiene la habilidad de presentar el material, qué tan familiarizado está con el material, si repite lo que otros han dicho o si comprende realmente el problema. También presto atención a las mismas cosas en los libros: el libro está bien escrito, hay una comprensión técnica profunda del tema, se dan recomendaciones directas allí o se describe la estructura interna del sistema. En mis libros trato de describir el funcionamiento del sistema, observar los lados positivo y negativo, mostrar cómo posponer posibles problemas, describir los requisitos de rendimiento. Me parece que mis libros se consideran relativamente exitosos debido al hecho de que doy mucho contexto para cada tecnología, y no solo indico: hazlo, hazlo de manera diferente. Sigo estudiando nuevas tecnologías, así que leo literatura técnica, veo videos de YouTube y de otras fuentes, asisto a informes. No es suficiente para mí descubrir que parte de la tecnología funciona de esta manera y de esa manera, necesito profundizar en ella, comprender en qué casos es buena y en qué no, qué trucos tiene.




Dado que sigue libros e informes de otros autores, ¿puede recomendarme el trabajo o el video de otra persona?




Recientemente, he estado estudiando Go y Python en relación con mi trabajo en Microsoft, para este propósito leí los registros del equipo de Go y la especificación de este lenguaje. Siempre me sorprendió que los desarrolladores no lean la especificación del idioma en el que escriben, porque establece completamente cómo debería funcionar el lenguaje. En cambio, la gente lee libros. Recomiendo siempre leer la especificación. De lo contrario, suelo ver videos de discursos en conferencias sobre diversas tecnologías. Es difícil aconsejar algo aquí: algunos oradores son mejores, otros peores.




No tiene que llamar a alguien que sea definitivamente mejor que todos los demás, solo diga quién le gustó.




Me gustan los oradores que entran en los detalles de la pregunta. Siempre estoy interesado en informes sobre gestión de memoria. Debido a la administración de la memoria, generalmente hay muchos problemas de rendimiento, lo cual es muy importante para mí. Cualquier informe sobre el trabajo del recolector de basura en el idioma en el que escribo será interesante para mí: por ejemplo, si usa compresión o no y similares. Es especialmente bueno cuando el informe habla de cosas para las que no se puede acceder a la información: el trabajo del recolector de basura generalmente no se describe ni siquiera en la especificación. Hay patrones que hacen que la recolección de basura sea más eficiente. Todo esto me interesa.





Tecnologia y equipamiento


Entremos en una pequeña conversación con mis aburridas preguntas técnicas. Jeffrey, eres de Microsoft. ¿Por qué necesitas Go y Python si hay C # maravilloso?




En Microsoft, trabajo en un equipo dedicado al SDK y herramientas para Azure Storage. Estamos desarrollando un SDK para Azure Storage en muchos idiomas diferentes: Go, .NET, Python, Java, NodeJS, PHP, Ruby, C, C ++. Estamos reestructurando nuestros SDK y la primera implementación se realizó en Go. Este fue un cambio crítico y no estábamos seguros de cómo reaccionarían nuestros clientes. En ese momento, no teníamos un SDK de Go, por lo que el primer SDK se escribió en Go para que nuestros clientes no rompieran nada. Pero después de recibir comentarios positivos, cambiamos a Java, porque teníamos clientes importantes que necesitaban la biblioteca asincrónica de Java. En este sentido, comencé a estudiar RxJava y, en general, a trabajar más con Java. Naturalmente, mi experiencia con C # me ayudó mucho aquí. Actualmente estamos en el negocio de NodeJS, así que actualmente lo estoy estudiando y TypeScript. Además, comenzamos a portar el nuevo SDK a .NET; había menos para mí aquí porque ya lo sé. El siguiente en la línea es Python, así que también lo estudio. Este es el trabajo de nuestro equipo: escribimos el SDK para todos estos idiomas, por lo que mi actividad no se limita a un idioma.




Ok, lo tengo Puedes encontrar una gran cantidad de tus libros en Amazon. El libro más antiguo que encontré allí, "Windows a través de C / C ++", data de 2007. Pero te hiciste famoso como autor de libros en los años 90. ¿Cómo es eso?




De hecho, tengo un libro publicado incluso antes, pero es bastante antiguo, no estoy seguro de si está en Amazon. Fue escrito para Windows 3.0, es decir Se trata de 1990 o 1991. Pero muy pocas personas lo compraron, y pocas personas lo saben.




Como Windows 3.0.




Sí, eso fue hace mucho tiempo.




Luego cambiaste a C # y comenzaste a escribir libros al respecto, ¿verdad? ¿Cuál es, en su opinión, el futuro de C ++? ¿Existe incluso? ¿Deberíamos continuar tirando del equipaje de C ++, o es mejor cambiar a Rust, Go o algo así?




No creo que tengamos un solo idioma que pueda vencer a todos los demás. La fortaleza de los lenguajes de programación es que cada uno de ellos realiza un tipo particular de trabajo particularmente bien. Casi todos los meses verifico los índices de popularidad de varios lenguajes, y hoy C y C ++ siguen estando muy extendidos. Dado que nuestro equipo de Azure en Microsoft tiene muchos clientes que usan C y C ++, no vamos a abandonar estos lenguajes. Además, gracias al IOT, ha habido un aumento reciente en el interés en estos idiomas. Estamos hablando de dispositivos pequeños como un termostato que controla la temperatura en su apartamento. Tienen poca memoria y procesadores débiles y, además del ensamblador, C y C ++ son los más adecuados para ellos. Así que creo que estos idiomas se seguirán utilizando durante mucho tiempo. Desde que comenzamos a hablar sobre Rust, tengo algo de experiencia con él y, en mi opinión, tiene muchas ideas muy interesantes. Podría ser algún tipo de C / C ++ seguro. En mi opinión, es muy prometedor. Sin embargo, me parecía bastante inmaduro. Nuestro equipo aún no lo ha tratado, pero seguimos monitoreándolo, y en el futuro la situación puede cambiar.




¿Entiendo correctamente que tiene un SDK para C y C ++?




Sí, tenemos un SDK de C ++ para Azure Storage. Algunos otros equipos también tienen un SDK C / C ++, pero no todos, y aún no han decidido si los crearán en el futuro.




¿Cómo ha evolucionado la industria del desarrollo de Windows? Según tengo entendido, has visto todo en el mundo allí. Lo primero que me recuerdo es a Delphi. Entonces C # ganó popularidad, y hasta ahora no veo ningún signo de una caída en C # /. NET, Java y similares. ¿Son, en su opinión, el último paso en la evolución de la programación imperativa? ¿Cuál es la probabilidad de que algo completamente nuevo aparezca en el próximo año o diez años? Digamos, un lenguaje con soporte para redes neuronales?




Soy un hombre de edad venerable, especialmente en comparación con usted, y he visto mucho en nuestra industria. He estado programando durante unos 45 años. Un cambio significativo a lo largo de los años es que el sistema operativo se ha vuelto menos importante. Me centré principalmente en servicios de software de back-end y herramientas de línea de comandos. Solía ​​trabajar mucho más con la GUI, y mis primeros libros se dedicaron a eso: aplicaciones de GUI con menús, cuadros de lista, cuadros combinados, manejo de eventos del mouse, teclas, etc. En algún momento, dejé de tener suficientes nervios para ello, porque en esta área constantemente te encuentras en debates extremadamente feroces sobre si usar listbox o combobox en algunos casos, si el ancho debe ser de 100 o 1000 píxeles, de qué color debe ser. Estas discusiones me disgustaron, así que al final dejé de hacer esto. En cuanto a los idiomas, creo que todavía tendremos muchas opciones diferentes. Los idiomas mueren durante mucho tiempo, incluso hoy en día puedes conocer personas que escriben en Cobol, Fortran o idiomas extremadamente poco conocidos. Nuevos idiomas aparecerán todo el tiempo: recientemente, Julia ha ganado cierta fama, Clojure ha existido un poco más. Estos nuevos idiomas han atraído una atención considerable durante un tiempo, después de lo cual algunos tienen éxito y otros no. C # ha creado un camino impresionante, tiene 15 años y sigue siendo extremadamente común. En mi opinión, el equipo de .NET de Microsoft le dio nueva vida en muchos aspectos gracias a que crearon .NET Core, que ahora se ejecuta en Linux. Si escribe en C #, sus habilidades son aplicables en una gran cantidad de escenarios diferentes. Creo que el interés en C # no se debilitará por muchos años más.



Minuto de publicidad. Jeff llegará a la conferencia DotNext 2018 en Moscú con una presentación titulada "Creación de aplicaciones receptivas y escalables" , que hablará sobre el uso de E / S asíncronas para construir sistemas altamente escalables (tanto en el servidor como en el cliente). Vuela a Rusia en vivo, por decirlo suavemente, no todos los días: esta es una excelente manera no solo de escuchar el informe, sino también de discutir los problemas actuales cara a cara en el área de discusión.


¿Le gustaría escribir " GNU / Linux Runtime via C #" ahora ?




Si quiero. En mi opinión, para los desarrolladores de servicios GNU / Linux, por muchas razones, es más adecuado que Windows, excepto en algunos casos. Creo que C # es un gran lenguaje. Recientemente me familiaricé con Java: por razones de corrección, solo puedo decir que después de eso comencé a apreciar C # mucho más. Realmente me gustan los tipos de valor en C #. Recientemente trabajamos con la asignación de un archivo a la memoria en Java, y no pudimos cerrarlo directamente, tuvimos que esperar la recolección de basura. Algunas soluciones Java me parecen completamente inútiles. En mi opinión, C # y .NET están mucho mejor.




Tres años después, nosotros, los Javists, tendremos tipos de valor.




Sí, lo sé, y tienes algunos genéricos ...




"Algunos" es, en mi opinión, una descripción muy precisa.




Bueno, sí, tus genéricos son un poco raros. Pero Java es un lenguaje increíblemente popular, y la gente lo usa de manera muy productiva. Ciertamente es muy importante. Pero, en mi opinión, en .NET algunos aspectos son mejores. Incluso si agrega tipos de valor, aún necesitamos brindar soporte para versiones anteriores de Java. Por lo tanto, no será posible aprovechar estas nuevas oportunidades durante varios años más. Pero esto es bueno: todos los idiomas se están desarrollando, aparecen nuevas oportunidades en ellos. Java, .NET, C #: todos ellos vivirán durante mucho tiempo, especialmente teniendo en cuenta algunos cambios recientes, como .NET Core. Entonces, en mi opinión, C # para GNU / Linux es una gran combinación para las personas que escriben servicios.




Pero para interactuar con el back-end, necesitas una interfaz de usuario. Una vez que solo teníamos consolas de texto, apareció la interfaz de usuario y esto hizo que el software fuera mucho más funcional. Y hoy hay Electron y otros motores basados ​​en JavaScript, y cualquier estudiante puede escribir una interfaz en ellos. ¿No temes que en el futuro todo esté escrito en JavaScript?




No, no lo creo. En primer lugar, es un problema de rendimiento: en JavaScript, no se puede comparar con C, C ++, Go o incluso C # y Java. Además, no me puedo imaginar escribir un proyecto a gran escala sin la seguridad de tipo en la fase de compilación. Cuando entré en el mundo de los idiomas de tipo seguro, me enamoré de él a primera vista. JavaScript solo no proporciona seguridad de tipo, por lo que no lo usaría en un proyecto grande. Pero TypeScript lo sería, y estamos escribiendo nuestro nuevo SDK en TypeScript. Es un avance significativo en comparación con JavaScript normal. Pero no creo que el mundo entero use solo un idioma para un propósito. Esto simplemente no tiene sentido. Incluso si hablamos de IOT, el entorno para ejecutar JavaScript requiere muchos recursos, y muchos dispositivos simplemente no pueden proporcionarlos.




Bueno, no hay problema con JavaScript. Donde estan ¿Cuáles son los principales problemas para usted personalmente y para la industria en general?




No estoy seguro de si están relacionados con idiomas o sistemas operativos. Los sistemas operativos en este momento, en esencia, se han convertido en artículos domésticos comunes. Se utilizan para enviar mensajes electrónicos y acceder a Internet. Para la mayoría de las personas, realmente no importa si usan Windows, Mac o Linux. Los idiomas que usamos hoy ya son bastante poderosos. La mayoría de los idiomas, de hecho, simplemente mueven datos del punto A al punto B. Usted tiene una colección, la examina, filtra los contenidos; cada idioma puede realizar tales acciones. Luego, necesitamos máquinas para comunicarnos entre nosotros. Aquí el estándar es TCP, HTTP es ampliamente utilizado, pero hay otros protocolos. Todas estas tecnologías funcionan muy bien, sin embargo, el rendimiento se puede mejorar aún más. En mi opinión, las dificultades más graves hoy en día están asociadas con la creación de servicios. , , . , , . , , , , . , , , . , , , . 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»). , , , . , .




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




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




, , , ?




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




. , ?




, .




- «» , ?




Si . , , , . . , . , , , . , , - , . - . . . , , . , — . , , . , . , , . Wintellect, . , - , . , .




- . - ?




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

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


All Articles