Si insiste insistentemente en el equipo de desarrollo del compilador o en el "mundo del Salvaje Oeste", no dude en elegir y aprender el
lenguaje de programación superior de TIOBE y lo mejor de todo: al nivel de su especificación. Pero en serio, ahora en la industria todo está tan confundido con la lógica y las conclusiones, tanto marketing y agua, que la estrategia más ganadora es encender sus propios cerebros y hacer una reevaluación expresa de los valores técnicos a los que estamos tan acostumbrados. En la publicación, trataré de orientar lo más claramente posible a los desarrolladores que están comenzando sus carreras sobre los riesgos de elegir tecnologías y sacar las conclusiones correctas y mucho (mucho, mucho) de largo alcance.
¿Has madurado o aún no?
Los niños difieren de los adultos en su comprensión de la palabra "responsabilidad". Desafortunadamente, no todos los niños crecen a tiempo, y algunos mueren en el pañal. Aquí no hay nada terrible, excepto por una cosa: los niños en el equipo de programadores hacen que los demás sufran mucho, especialmente cuando los plazos están abiertos y el lanzamiento está cerca: o de repente se quedan en el medio del espacio abierto, o requieren un chupete durante una lluvia de ideas del área temática con representantes del cliente.

Los adultos difieren de los niños en la comprensión del principio clave de la gestión de TI: "la programación es un privilegio". Entre los desarrolladores experimentados y exitosos, los más adecuados y codifican bien y "hacen avanzar a la compañía" al mismo tiempo.
Industria de TI - enloquecida
Sí, somos personas y propensas a las emociones. Pero hasta ahora nadie sabe cómo programar correctamente, aunque han pasado más de 50 años desde la invención de la computadora. Nadie! Todos están histéricos e intentan atraer a más seguidores a su campamento, mientras seducen al negocio para crear un proyecto por su cuenta :-) Lo explicaré con un ejemplo.

La velocidad del cerebro
El hecho es que las primeras computadoras fueron realmente lentas, muy lentas y muy caras. Por lo tanto, los primeros programas se escribieron en lenguajes de muy bajo nivel y, a veces, directamente en código máquina. Hoy en día, tales tecnologías "prehistóricas" a veces se usan, pero puntualmente: para crear sistemas operativos y sus componentes (cerca del hardware), para motores de juegos, para bibliotecas y
servidores de alto rendimiento, para
criptomonedas y, por supuesto, para crear
lenguajes de programación .
Y si
C , a pesar de su fuga total y alto peligro para el desarrollador, resultó ser realmente bueno y ganó los corazones de los conocedores, entonces
C ++ resultó ser una creación extremadamente fea y contradictoria, pero lo que hay que hacer es la vida. Tal vez
Rust , con las ideas correctas para el manejo seguro de la memoria, afectará la situación para mejor, pero en términos de fealdad de sintaxis e ilegibilidad, parece haber dejado C ++ muy por detrás.
La situación se ve agravada por la aparición de
Golang . Por un lado, no hay nada nuevo en él, el acorde democrático del gran
Ken Thompson : solo restos miserables de características de Java. Por otro lado, se ha vuelto realmente más fácil escribir un sistema "relativamente" y un software multiproceso, y esto es un hecho que
muchas compañías han calificado :-)
En este campamento encontrará tecnologías y hardware de bajo nivel, en su mayoría bien informados, de programadores "reales" con barba hardcore que generalmente aprenden un lenguaje de programación, pero luego se van a dormir con una especificación de compilador en lugar de una esposa. En verdad, hay gente genial en este campamento. Y si no sabe qué comandos del procesador x86
producen descomposición
en python , avergüéncete y avergüence. Por lo tanto, un consejo: evite este campamento hasta que lea hasta el final de la publicación.
Pero hay una otra cara de la moneda. Los proyectos aquí se llevan a cabo no solo durante mucho tiempo, sino ... durante
décadas . Los lenguajes de programación de bajo nivel no son algo que ayude, sino que interfieren. Las violaciones al trabajar con la memoria ocurren constantemente, se requieren docenas y cientos de probadores (o puede ponerlo en github y lo probaremos colectivamente) y miles de unidades y otros tipos de pruebas para
que despegue . Muchos desarrolladores que se unieron al equipo al comienzo de los proyectos no viven para ver el lanzamiento y mueren de vejez, lo que ayuda a los beta testers a su último aliento. Pero estas personas valientes, antes de sangrar por los ojos, antes de la aparición de estigmas, hacen todo lo posible y ... nacen las
obras maestras .

Arquitectura del cerebro y empresa
Porque nadie sabe todavía cómo programar correctamente, el método de "diseño competente y confiabilidad" se formó por selección natural. Es una locura programar en lenguajes que permiten operaciones de memoria inseguras a través de punteros. También puede llevar el mundo al apocalipsis: "falla de segmentación en el software de un reactor nuclear". ¿Cómo se puede comenzar a hacer un proyecto sin soportar una escritura fuerte en el idioma? Y se les ocurrieron los siguientes lenguajes de programación correctos: Java y C #. Pero en Java, se olvidaron de los peligros de los valores nulos, y en C # no pensaron completamente en la compatibilidad con versiones anteriores. El resultado es un gran mundo corporativo, relativamente seguro y relativamente compatible con versiones anteriores. En este mundo, el objetivo se mide en líneas de código por día (generalmente no más de unas pocas docenas, porque los dedos se frotan en la sangre) y gruesos libros filosóficos y religiosos sobre patrones de diseño y, sí, casi me olvido de la forma de enterrarme a mí mismo, el proyecto, el cliente y el medio ambiente. el mundo en el código y ahogarse en él, recordando en agonía la jerarquía de herencia de 20 niveles, sobre
OOP . Uno de los lemas principales del campamento es "¿por qué hacerlo simplemente, si es posible ... difícil y confiable, durante mucho tiempo, durante siglos!". Además, algunos de ellos pueden escribir de manera rápida y elegante, lavarse las manos con sangre y recoger la estructura del proyecto en sus cabezas cada mañana, mirando 3 monitores al mismo tiempo. Pero algunos son tan adictos que continúan creando jerarquías de jerarquías dentro de jerarquías de jerarquías hasta el
infinito , y el objetivo se ha perdido durante mucho tiempo, y los ojos continúan ardiendo y las manos pican.
De hecho, en áreas donde el área temática se ha establecido bien y se ajusta a "objetos con estado y mensajes entre ellos", un enfoque similar funciona muy bien.

Es especialmente agradable cuando hay una escritura estática "estricta" (comillas, porque lo que sucederá después con Haskell) (esto es cuando los tipos de entidad se conocen de antemano, el compilador los verifica y no puede agregar una cadena al número) facilidad y placer al refactorizar y mejorar el código y alto si por no decir grandes,
entornos de desarrollo de calidad. Los colegas en este campo a menudo son muy educados en arquitectura de software, leen mucho (el umbral de entrada es alto), comprenden las capacidades de numerosas bibliotecas de plataformas, patrones de diseño, técnicas para escribir toneladas de documentación y crear pruebas automatizadas, prueban estas pruebas y pueden escribir un simulacro durante meses, lo que resulta ser innecesario Una vez más, los proyectos a menudo son realizados y lanzados durante mucho tiempo, por equipos grandes, se requieren numerosos probadores, pero la naturaleza de los errores es un orden de magnitud menos fatal, lo que inspira. Entrar en esta "casta" del desarrollo empresarial es muy difícil. Si demuestra cómo en PHP puede resolver el problema de 5 líneas que sus colegas de Java resolverán en 5 días, se quemará vivo en el microondas :-)
Fiabilidad del cerebro
En el entorno académico, se creó otro campamento, muy interesante y recomendado para la comprensión, y un conjunto de lenguajes de programación funcionales (Lisp, Haskell, Erlang y otros). ¿Estás loco por programar usando variables y bucles? ¡También puedes cometer muchos errores! Un programa es un conjunto de llamadas a funciones, y en lugar de bucles, use la recursividad, caballeros. OOP? No, no se escucha: clases de tipos y tipos de datos algebraicos. No conoce
los fundores aplicativos y no hojeó la teoría de las categorías: sí, no desarrolla su propio cerebro, amigo mío.
De hecho, en mi opinión, para ingresar a este campamento y comprender sus valores, debes esforzarte mucho por tu cerebro: para las matemáticas habrá un mar y conceptos aún más inesperados pero hermosos. La experiencia adquirida en este equipo será invaluable y será útil cuando trabaje con otros lenguajes de programación. Dicen que alguien a veces usa lenguajes funcionales en proyectos reales: compiladores,
criptomonedas ; sin duda, sus proyectos tendrán órdenes de magnitud menos errores lógicos que el compilador detectará, y la brevedad, claridad y concisión del código en Haskell, por supuesto, sorprende, pero en la época de "en los Louboutins!" estudiar y comprender esta belleza es cada vez menos.

El resultado y la efectividad del "cerebro"
¡Al diablo con la arquitectura y la OOP, hermano! ¡Cthulhu te ama, y
escribir pato es la clave del éxito! ¿Mecanografía fuerte? ¿Y quién en su sano juicio asignará una cadena a un número? La escritura y compilación estáticas es una pérdida de tiempo, porque el código se escribe una vez, y si no tiene tiempo para escribirlo para su lanzamiento, se descartará (e incluso se descartará, pero un poco más tarde). Refactorización? Escribir a la derecha :-) Encapsulación? Pon un guión delante del nombre de la variable
y todas las cosas . OOP es un retargeting innecesario. Qué demonios es la compilación F5 y ves el resultado. Patrones de diseño: no, no has escuchado: nuestro script es todo ... ¿Quieres hierba?
Lo más interesante es que cuando profundizas en los idiomas con tipeo dinámico (estricto en python, no estricto en php y javascript), tus ojos se abren gradualmente a la imagen real de las cosas, porque:
- el código se vuelve muy claro y conciso y no hay necesidad de subir 20 clases (si no concierne a las bibliotecas del sistema)
- puedes comprobar rápidamente la idea a través de REPL
- los idiomas son simples, a menudo minimalistas, contienen las primitivas necesarias y poderosas (listas, diccionarios) que, lo más importante, ¡caben en tu cabeza!
- hay una nube de bibliotecas y siempre puedes resolver cualquier problema en 5 líneas
Y al diablo con eso, con la refactorización :-) La vida se ha vuelto más divertida (espero que el desarrollador que admite mi código no sepa dónde vivo). En este campamento, a menudo conocerá a muchas personas alegres de especialidades completamente diferentes, a excepción de la "programación de ensamblador", que son capaces, sin embargo, de forma muy rápida y eficiente para resolver problemas en 5 líneas y apoyar proyectos de código y web durante mucho tiempo y con éxito.
Mira las últimas tendencias en este campamento y sumérgete en esta filosofía de la felicidad. Un
entorno de programación simple y comprensible
en el navegador , bueno, ¿qué podría ser más sexy?

¿Y cuán fácil es ahora crear un servidor web sin bloqueo que sirve a miles de conexiones en 10 líneas en
node.js y la comunidad está creciendo a pasos agigantados?
Y no "Eclipse XML Soap Entiny beans Enterprise OOP ..." - json y csv y una sonrisa (y el olor de una planta desconocida). Y el código se lee y se coloca en el cerebro y, por lo tanto, funciona de manera feliz y prolongada y se mantiene con la misma facilidad durante muchos años.
Y resulta que "de esta manera" también se puede programar con éxito y los años pasados en "lenguajes de programación industrial" se viven en vano (pero los dedos se fortalecieron).
Selección de tecnología
Estas en shock? Yo tambien ¡E imagine lo asombrados que están los clientes al elegir la tecnología para implementar un proyecto comercial! :-)
Creo que en este momento entendiste muy bien que el mundo de TI realmente se volvió loco y se perdió (es broma). Algunos lenguajes de programación, como Scala, intentan sentarse en todas las sillas, pero aún no tienen éxito: el código se está volviendo difícil de entender como un simple mortal. Pero en serio, la competencia de paradigmas de programación solo se intensificará porque ... ¡las tareas en los proyectos son completamente diferentes y es de las tareas que necesita para "bailar"! En un dominio establecido (servidores, bibliotecas),
la tipificación nominal (C ++, Java, C # ...) es mejor, en algún lugar será mejor con
la tipificación estructural (Golang, Haskell ...), y en scripts web o tareas de máquina el aprendizaje traerá felicidad real con
duck (python, php, javascript ...). No es necesario pensar que
la escritura estática , especialmente la
escritura estricta, es directamente "imprescindible": no cumplirá los plazos y el código con un pensamiento paranoico satisfecho sobre "posibles errores" será arrojado a la basura. En la web, las secuencias de comandos y el aprendizaje automático, puede avanzar con confianza con gran velocidad y con la escritura dinámica de pato y php y python con una gran cantidad de
bibliotecas hermosas y
potentes, este es un buen ejemplo.
Por lo tanto, olvídate de "qué aprender un lenguaje de programación en 2018" al infierno:
- Comprenda los paradigmas de programación (OOP puede ser grave o puede salvarle un proyecto)
- Comprenda las sutilezas de la escritura y los riesgos y oportunidades asociados con ella (puede maldecir la escritura dinámica en una biblioteca financiera, o puede sacrificar un programador de Java a Cthulhu y reescribir sus 100 clases en 100 líneas en un guión que es comprensible incluso para los niños)
- en el nivel de la intuición, comprenda los algoritmos (necesita distinguir entre búsqueda y clasificación, y una red neuronal de la regresión logística, y para comprender mejor, tiene que aprender ... toda su vida, pero vale la pena)
- Comprenda que los desarrolladores experimentados (aunque nadie sabe dónde encontrarlos en el mercado) implementarán el proyecto a tiempo en prácticamente cualquier tecnología (incluso un ataque mental) y lo harán bien, pero los inexpertos tendrán que elegir un lenguaje de programación con el nivel más cómodo de riesgos de entrada y colapso sigue siendo genial
A continuación, seleccione el área de tareas que le interesará realizar, como la web o el aprendizaje automático, y:
- mira lo que la gente resuelve estos problemas
- dispersar los riesgos y oportunidades de cada instrumento de acuerdo con los criterios anteriores
- sentarse un par de fines de semana con 1-3 herramientas específicas, pero en ningún caso no está a la altura del fanatismo o las especificaciones
- ponerse manos a la obra más rápido y adquirir experiencia en el uso de herramientas en la práctica: esto es lo más importante
- no es necesario que aprenda el lenguaje de programación "hasta el final"; es mejor aprender cómo resolver su problema en las 5 herramientas más populares en 10-15 líneas y ¡realmente actuará de una manera extremadamente adecuada!
Estudio de caso - ML
Digamos que está interesado en el aprendizaje automático ... ¡Felicitaciones! Por un lado, hay una teoría académica, pero tienes que sacarle la esencia de acuerdo con las estadísticas y el álgebra lineal, y en ningún caso debes pasar el rato en cursos de muchos meses (ve, créeme, loco si no eres matemático, sino humanista) y es imperceptible para ti ) Por otro lado, debe aprender a escribir rápidamente código útil y resolver un problema en 5-15 líneas. Sí, puedes escribir todo en C en 10,000 años, así que miras la experiencia de tus colegas y eliges, correctamente, Python, en el que hay muchas bibliotecas y soluciones preparadas sobre este tema. Dedicas un par de días libres a estudiar python: no hay nada más que aprender allí, el idioma es muy simple (y acordamos no subir a la naturaleza, porque el tiempo es dinero).
Además, lea sobre la esencia de numpy, pandas, scikit-learn y, si sus ojos están bien, entonces Keras y adelante, haga proyectos. Pero puede ir por otro camino, uno largo y difícil que conduce a la santidad personal y la pobreza social (después de 3 años comprenderá la esencia del algoritmo, vender periódicos en un tren eléctrico, pero tal vez esta sea una forma especial): comience a implementar los algoritmos usted mismo, con administración manual de memoria, o implemente una solución
más pesada y profundice en el código durante meses. La herramienta incorrecta, la clave para las noches de insomnio y el tiempo perdido, evita la complejidad en todos los sentidos.
Una herramienta elegida incorrectamente, incluso la más popular, incluso de forma gratuita como regalo, incluso si es teóricamente capaz de todo a largo plazo, puede arruinar su proyecto al fallar todos los plazos. Minimice este riesgo como pueda y no pueda.
Conclusiones
En total, mis amigos, nos aseguramos de que nadie sepa cómo programar correctamente y con éxito, incluso nosotros, los desarrolladores :-) La competencia de paradigmas y tecnologías de programación se está fortaleciendo, la cabeza se hincha y el tiempo libre es cada vez menor. Por lo tanto, la estrategia más ganadora para un desarrollador que comienza su carrera es beber una lata de cerveza fría, relajarse y:
- evite la adherencia y la inmersión en partes tecnológicas excesivas, cuyo número crece exponencialmente
- Elija un área interesante de problemas en la que esté interesado en resolver los problemas de los clientes.
- aprender a extraer esencias cortas y eróticas de herramientas y lenguajes de programación
- escriba lo menos posible, pero claro y comprensible para usted y las personas que lo rodean
- aprender a resolver problemas en 5-15 líneas, no en 20-50 clases
- si quieres ir a otro lado, deja que sean cosas fundamentales como las matemáticas, haskell o rfc por tcp / ip
- ¡disfruta de la programación y calienta a tus colegas con ella!

Y recuerde siempre que el tiempo, especialmente el tiempo libre, es un recurso valioso y depende de nosotros dónde invertirlo. ¡Buena suerte a todos y buen humor!