Cosas que no sé en 2018

Hola Habr! Les presento la traducción del artículo "Cosas que no sé a partir de 2018" por Dan Abramov .


La gente suele pensar que sé mucho, pero en realidad no es así. No es tan malo y no me quejo en absoluto. (Una pequeña parte de las personas a menudo sufre de creencias preconcebidas, a pesar del hecho de que merecen más, lo cual es terrible).


En esta publicación, mostraré una lista incompleta de temas de programación que la gente asume erróneamente que yo sé. No estoy diciendo que no necesites estudiarlos o no conozco otras cosas útiles. Pero como no me he puesto en una posición vulnerable, puedo ser honesto al respecto.


¿Por qué creo que esto es importante?


Primero, a menudo existe una expectativa poco realista de que un ingeniero experimentado conozca todas las tecnologías en su campo. ¿Has visto el "mapa de aprendizaje", que consta de cientos de bibliotecas y herramientas? Esto es útil, pero da miedo.


Además, no importa qué tan experimentado sea, todavía puede encontrarse cambiando entre un sentido de habilidad, insuficiencia ("Síndrome del Impostor") y confianza en sí mismo ("Dunning - Krueger effect"). Depende de su entorno, trabajo, personalidad, colega, estado mental, hora del día, etc.


Los desarrolladores experimentados a veces hablan de su inseguridad para animar a los novatos. ¡Pero hay una gran diferencia entre un cirujano experimentado que todavía está nervioso y un estudiante que tiene un bisturí por primera vez!


Escuchar que “todos somos desarrolladores principiantes” puede ser desalentador y parecer una conversación vacía con estudiantes que enfrentan una brecha de conocimiento real. Confesiones de practicantes benevolentes como yo que no pueden superar esto.


Sin embargo, incluso los ingenieros experimentados tienen muchas lagunas de conocimiento. Esta publicación es sobre la mía, e insto a aquellos que pueden permitirse esa debilidad que compartan la suya. Pero no descartemos nuestra experiencia en este punto.


Somos capaces de reconocer nuestras brechas de conocimiento, podemos o no sentirnos impostores, y sin embargo tenemos una experiencia muy valiosa para decir que años de arduo trabajo requieren desarrollo.


Con esto no soy responsable, aquí hay algunas cosas que no sé:


  • Comandos Unix y Bash Puedo hacer ls y cd , pero también espiar todo lo demás. Entendí el concepto de tubería, pero lo usé solo en casos simples. No sé cómo usar xargs para crear cadenas complejas o cómo componer y redirigir varias secuencias de salida. Nunca estudié Bash correctamente, por lo que solo puedo escribir scripts de shell muy simples (y a menudo con errores).
  • Idiomas de bajo nivel. Entiendo que Assembly le permite almacenar cosas en la memoria y navegar por el código, pero eso es todo. Escribí varias líneas en C y entiendo qué es un puntero, pero no sé cómo usar malloc u otros métodos de administración manual de memoria. Nunca te metiste con Rust.
  • Pila de red Sé que las computadoras tienen direcciones IP, y DNS es cómo trabajamos con los nombres de host. Sé que hay protocolos de bajo nivel como TCP / IP para el intercambio de paquetes que (¿posiblemente?) Garantizan la integridad. Eso es todo, no entiendo los detalles.
  • Contenedores No tengo idea de cómo usar Docker o Kubernetes. (¿Están relacionados?) Tengo una vaga idea de que me permiten implementar una máquina virtual separada. Eso suena genial, pero no lo he probado.
  • Sin servidor También suena genial. Nunca lo intenté. No tengo una idea clara de cómo este modelo cambia la programación del backend (si es que lo hace).
  • Microservicios Si entiendo correctamente, esto simplemente significa que "muchos puntos finales API se comunican entre sí". No sé cuáles son las ventajas o desventajas prácticas de este enfoque, porque no trabajé con él.
  • Pitón Siempre es malo para mí recordar esto: he estado trabajando con Python durante varios años y nunca me molesté en aprenderlo. Hay muchas cosas, como el comportamiento de importación, que para mí son un bosque oscuro.
  • Nodo JS. Entiendo cómo iniciar Node, usé algunas API, por ejemplo fs, para construir herramientas, y puedo configurar Express. Pero nunca me he comunicado a través de Node con una base de datos y no sé cómo escribir un back-end en ella. Tampoco estoy familiarizado con los marcos de React como Next, más "hello world".
  • Plataforma nativa. Traté de aprender Objective-C en algún momento, pero eso no me ayudó. Yo tampoco enseñé a Swift. Lo mismo con Java. (Probablemente podría haberlos dominado desde que trabajé con C #).
  • Algoritmos Lo máximo que obtendrás de mí es el tipo de burbuja y, posiblemente, la clasificación rápida en el mejor de los casos. Probablemente pueda realizar tareas simples de recorrido de gráficos si están relacionadas con un problema práctico específico. Entiendo la notación O (n), pero mi comprensión no es mucho más profunda que "no poner bucles en bucles".
  • Lenguajes funcionales Si no cuenta JavaScript, no hablo ningún lenguaje tradicionalmente funcional. (Solo soy gratuito en C # y JavaScript, y ya olvidé C #.) Apenas puedo leer el código inspirado en Lisp (como Clojure), inspirado en Haskell (como Elm) o inspirado en ML (como OCaml).
  • Terminología funcional Mapa y reducir Sé cuánto se necesita. No conozco monoides, functores, etc. Sé lo que es una mónada, pero quizás esto sea solo una ilusión.
  • CSS moderno No sé Flexbox o Grid. Flotadores es mi todo.
  • Metodologías CSS. Usé BEM (es decir, como parte de CSS, no el BEM original), pero eso es todo lo que sé. No he probado OOCSS u otras metodologías.
  • SCSS / Sass. Nunca comencé a estudiarlos.
  • CORS. Tengo miedo de estos errores! Sé que necesito ajustar los encabezados para arreglarlos, pero en el pasado pasé mucho tiempo en esto.
  • HTTPS / SSL. Nunca lo configures. No sé cómo funciona esto, excepto por la idea de claves privadas y públicas.
  • GraphQL. Puedo leer la consulta, pero realmente no sé cómo expresar cosas con nodos y bordes, cuándo usar fragmentos y cómo funciona la paginación allí.
  • Enchufes Según tengo entendido, permiten que las computadoras se comuniquen entre sí fuera del modelo de solicitud / respuesta, pero eso es todo lo que sé.
  • Corrientes Aparte de Rx Observables, no he trabajado con hilos tan cercanos. Usé los viejos hilos de Nodo una o dos veces, pero siempre recibí un error de procesamiento.
  • Electrón Nunca lo intenté.
  • TypeScript Entiendo el concepto de tipos y puedo leer anotaciones, pero nunca lo escribí. Lo intenté varias veces, pero me encontré con dificultades.
  • Despliegue y devops. Puedo enviar varios archivos a través de FTP o eliminar algunos procesos, pero este es el límite de mis habilidades en devops.
  • Gráficos Ya sea lienzo, SVG, WebGL o gráficos de bajo nivel, no soy inteligente en eso. Comprendí la idea general, pero no necesito aprender cosas simples.

Por supuesto, esta no es una lista completa. Hay muchas cosas que no se


Esto puede parecer extraño de discutir. Ni siquiera vale la pena escribir sobre esto. ¿Estoy presumiendo mi ignorancia? Mi conclusión a esta publicación es la siguiente:


  • Incluso sus desarrolladores favoritos pueden no saber muchas cosas que usted sabe.
  • Independientemente de su nivel de conocimiento, su confianza puede ser muy diferente.
  • Los desarrolladores experimentados son muy competentes, a pesar de las brechas de conocimiento.

Sé acerca de mis lagunas de conocimiento (al menos algunas de ellas). Puedo completarlos más tarde si me interesa o los necesito para el proyecto.


Esto no menosprecia mi conocimiento y experiencia. Hay muchas cosas que puedo hacer bien. Por ejemplo, para estudiar tecnologías cuando las necesito.

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


All Articles