
Camarada ingenieros, ha sido el cuarto año desde que comencé a enseñar en el Instituto Politécnico de Kiev . Durante este tiempo, he acumulado una gran cantidad de ejemplos de código y materiales, alrededor de 90 conferencias . Debo decir que durante todo el período de mi actividad profesional (y esto es 24 años de escribir código casi a diario), nunca he aumentado mi nivel de programación, como en los últimos años, trabajando con estudiantes. Si antes me parecía que escribir brevemente, difícil e imponentemente era el colmo de la habilidad, ahora me di cuenta de que los estudiantes deberían entender mi código después de una explicación mínima, de lo contrario no funcionará. Llegué a la conclusión de que esta capacidad puede y debe extenderse no solo al código de capacitación, sino a todo el código de trabajo. Además, el código de entrenamiento no debería diferir significativamente del código de trabajo, porque enseñamos a los futuros ingenieros cómo hacer sistemas reales, no los de entrenamiento. Y después de numerosas solicitudes, decidí grabar todas las conferencias en forma de screencasts, que inmediatamente después de la conferencia se envían a YouTube. Para este año académico planeo grabar 100 conferencias, de las cuales 23 ya han sido publicadas , materiales para otras 67 conferencias y 10 nuevas conferencias aún están en preparación.
Concepto del curso
Todos ustedes saben que en nuestra industria existen problemas importantes con la educación básica en ingeniería:
- los cursos universitarios a menudo están desactualizados y dejan mucho que desear,
- la terminología generalmente aceptada no está formada (en las disputas a menudo llamamos a las mismas cosas palabras diferentes y cosas diferentes con las mismas palabras), esto nos confunde,
- cualquiera que tenga la idea de que sus calificaciones son suficientes para esto, puede publicar fácilmente artículos y videos en Internet.
- En la programación, la acumulación rápida de experiencia se ve obstaculizada por la salida rápida de personas de la especialidad, e incluso las ideas fundamentales se repiten cíclicamente, pero los que han adquirido experiencia en la ronda anterior probablemente ya no practiquen y no puedan decirles a sus colegas más jóvenes dónde están el rake y los cuellos de botella.
Construir un curso basado en JavaScript es ciertamente una tarea experimental, pero este lenguaje ciertamente no será superfluo para nadie en la TI moderna. Los propios desarrolladores de JavaScript a menudo tienen una capacitación básica de ingeniería deficiente y una falta de conocimiento fundamental en estructuras de datos, algoritmos, abstracciones básicas, patrones, arquitectura, paradigmas y técnicas de programación. La mayor parte del código que se escribe ahora en la industria simplemente se desecha poco después de la creación, luego se reescribe y se desecha nuevamente. En general, rara vez se requiere calidad y conocimiento, excepto en entrevistas. Es mejor hacer un código de baja calidad y mantenerlo, o tirar el código y vender más tiempo para volver a escribirlo. Además, nuestra industria está completamente divorciada de la ciencia, existen importantes ventajas para los especialistas en marketing, porque ya no programamos en lenguajes de programación y no en abstracciones, sino que programamos en marcos y bibliotecas, en los que nos metimos en un hermoso envoltorio. Montamos todo desde cubos, a menudo sin ningún conocimiento científico, y rara vez podemos responder a la pregunta de por qué estamos haciendo esto y no de otra manera. Todo en partes ya se ha escrito hace mucho tiempo, todo se puede encontrar en Internet, pero resultó que uno no se moldea con el otro, es decir, en partes lo es, pero en conjunto no funciona. Vincular fragmentos de código separados es mucho más difícil que hacerlo individualmente. Esto sucede precisamente por la falta de un enfoque sistemático, división terminológica y desincronización conceptual de especialistas. Solo lo que es ideológicamente compatible funcionará en conjunto, lo cual se basa en una teoría general y estándares generales derivados de esta teoría. Espero que con este curso tome al menos un pequeño paso para alcanzar un consenso tan importante para la industria.
Todos los materiales del curso están disponibles gratuitamente en github , y las conferencias están abiertas, se pueden asistir de forma gratuita. Cada semana grabo 4 conferencias. Celebramos más seminarios y talleres, pero no están grabados.
Estructura del curso
- Conceptos básicos : abstracciones de software, variables, operadores, tipos de datos, matrices, estructuras, tipos escalares y de referencia, mapeos;
- Conceptos clave : funciones, contextos y alcance, clases y objetos, prototipos, métodos, lambdas, funciones puras, efectos secundarios, cierres, uso parcial, currículum, composición, funciones de orden superior, devoluciones de llamada, envoltorios, decoradores, impurezas, eventos, interfaz. , singleton, iteradores, objetos funcionales, functores, mónadas, manejo de archivos, hilos, sockets, memorización, herencia, generadores, programación asincrónica, encadenamiento, módulos y dependencias, manejo de errores, fábricas y pools, temporizadores, expresiones regulares;
- Materiales de soporte : git, sistemas de control de versiones y gestores de paquetes, trabajando con la consola, pruebas, integración continua, registro, linter, optimización y rendimiento, lucha contra fugas de memoria, clases ocultas, funciones monomórficas, genéricos, recolección de basura, gestión de memoria;
- Estructuras de datos : colecciones, matrices y matrices escritas, buffers, listas, pila, cola, dec, árboles binarios y jerárquicos, árboles multidimensionales, rotaciones y equilibrado de ramas, conjuntos, mapas hash, gráficos, listas expandidas, cola asíncrona, autómatas, estructuras de datos iterativas y buscar;
- Conceptos extendidos : símbolos, proxies, diferencias, futuros y promesas, lentes, transductores, asíncrono / en espera, recolectores de datos, composición asíncrona, adaptadores asíncronos, iteradores asíncronos, introspección, reflexión, andamiaje, inversión de control e inyección de dependencia, cajas de arena, arquitectura en capas. enfoque de componentes, capa de acceso a datos, proyección de datos, monitoreo del sistema de archivos, arquitectura cliente-servidor y tres enlaces, agrupación y equilibrio, diseño de protocolo, sobrecarga de módulo dinámico, metadatos, din enlace mical, interacción entre procesos;
- Ejemplos de código y uso integrado de tecnologías: hojas de cálculo en vivo, chat en sockets web, implementación de lenguaje de consulta gráfica, biblioteca alternativa de abstracciones asíncronas metasync, comparación de la implementación de las mismas tareas en diferentes paradigmas, comparación de estilos de programación funcional, ejemplos de estructura de aplicación, enrutamiento de controladores en node.js aplicaciones, aislamiento de código en cajas de arena, objetos transaccionales;
- Paradigmas de programación : imperativo, estructural y no estructural, procesal, orientado a objetos, prototipo, funcional, lógico, declarativo, asíncrono, reactivo, evento, programación automática, generalizada, basada en datos, multi-paradigma, metaprogramación.
Referencias
El calendario de conferencias está disponible en dos grupos de mitap: HowProgrammingWorks (estas son conferencias sobre programación usando ejemplos de JavaScript) y NodeUA (estas son conferencias en Node.js) e insto a todos los que quieran asistir a conferencias a registrarse en persona. La entrada es gratuita para todos, pero organizacionalmente es más fácil estimar el número de estudiantes. A lo largo de la historia, he tenido casos y 600 personas y 2 personas, y la participación es impredecible.
Todos los videos grabados aparecen el mismo día (10-20 minutos después de la conferencia) en el canal de YouTube .
Las conferencias se agrupan en dos listas de reproducción: programación y JavaScript y Node.js.
Coloco enlaces a conferencias y materiales en dos canales de telegramas: programación y JavaScript, y Node.js y otros temas más complejos .
Hay dos grupos de telegramas para discusión y preguntas: programación y JavaScript, y Node.js.
Mi cuenta de github , repositorios de capacitación en HowProgrammingWorks y nuestra biblioteca comunitaria .
Conclusión
Estoy a la espera de sugerencias para complementar el curso con nuevos temas, espero una contra-introducción a los ejemplos de código, incluida la traducción de ejemplos a otros idiomas. Sus comentarios ayudarán a mejorar el curso.