Como desarrollador de software de front-end envidio a los programadores de bajo nivel. ¿Por qué me siento así?

En primer lugar, este es un efecto clásico Dunning-Kruger: un programador no calificado probablemente se consideraría superior al promedio (desconocen a la perfección la profundidad del agujero de conejo), mientras que un programador experto es más probable que se clasifique como inferior al promedio ( son más conscientes de lo amplio que es el campo y de la gran parte de su trabajo habilitado por la brillantez de los demás).

Lo tomaría como un cumplido, porque significa que probablemente has progresado lo suficiente como para apreciar la profundidad y amplitud de la informática. Es imposible dominar todo el campo en una vida.

Como mencioné anteriormente, creo que cuando empiezas programando a un nivel más alto de abstracción (por ejemplo, Javascript, PHP), eventualmente empiezas a darte cuenta de que lo que haces fue habilitado por otros programadores en niveles más bajos.

No lo llamaría envidia en mi caso, pero hay una reverencia especial que siento por los programadores de nivel inferior, y estoy bastante seguro de que eso es lo que usted describe en la pregunta también.

Sin embargo, puede estar seguro de que alguien que escriba C y código de ensamblaje de nivel inferior para el kernel de Linux todavía siente una reverencia por los programadores que diseñaron C, los ingenieros que diseñaron el hardware, etc.

He estado trabajando en una aplicación de PHP empresarial bastante popular durante los últimos 12 años, y hace mucho tiempo que me di cuenta de que no importa cuán brillante sea mi código, o cuán innovadoras sean mis ideas, siempre estaría desarrollando parte superior del trabajo de miles de otras personas que son igualmente apasionadas por su parte de la pila.

Confío en una docena de bibliotecas y marcos. Mi aplicación simplemente escupiría texto incomprensible sin un navegador web, y ese texto no se entregaría sin PHP, un servidor web o MySQL. Sin mencionar que nada de esto estaría sucediendo sin la propia Internet.

Como Carl Sagan lo expresó maravillosamente:

Si deseas hacer un pastel de manzana desde cero, primero debes inventar el universo .

Creo que está perfectamente bien respetar y admirar a los programadores de nivel inferior que permiten el desarrollo de software front-end. Pero si realmente los envidias , probablemente deberías analizar esos sentimientos.

¿Sientes que te falta reconocimiento por tus contribuciones?

Para ser perfectamente honestos, las personas de bajo nivel como Dennis Ritchie (a quien se le atribuye la creación del lenguaje de programación C y Unix) son bastante desconocidas para la población en general en comparación con una personalidad de muy alto nivel como el fallecido Steve Jobs (Apple).

Lo mismo podría decirse de las personas de nivel superior como Mark Zuckerberg (Facebook): la persona promedio es consciente de lo que ha logrado, mientras que al mismo tiempo apuesto mucho, mucho menos del 1% de la población general podría nombrar a una sola persona. Colaborador principal de PHP (en el que está escrito Facebook), o quién inventó HTML (Tim Berners-Lee), etc.

No es diferente a los actores (nivel superior) frente a directores, escritores y cineastas (nivel inferior). Las personalidades de alto nivel comparten la mayor parte de la opinión pública.

¿Sientes que solo eres un simulador de programación?

En primer lugar, le aseguro que el desarrollo de front-end sigue siendo una programación real. Es lo que el cliente realmente ve. Y podría esclavizarse durante años trabajando en una brillante tecnología de back-end, y le prometo que lo primero que elogiarán los clientes es la nueva interfaz de usuario (también es lo primero que criticarán, independientemente de lo sorprendente que sea la tecnología de back-end en realidad es).

Si envidia que los programadores de bajo nivel sepan algo que usted no sabe, es un gran impulso para expandir su conocimiento y explorar nuevas áreas de programación. No hay nada que le impida tomar un libro y aprender sobre el desarrollo de back-end (servidores web, lenguajes de scripting, bases de datos, cachés / CDN, búsqueda de texto completo, almacenamiento distribuido), programación en C (tipos, gestión de memoria, punteros) o estudiar más a fondo – Temas de nivel como compiladores (analizadores, lexers), ensamblaje o operaciones aritméticas binarias y bitwise.

Primero un poco sobre mi. YO :

– Me apasiona la programación desde hace 21 años (comenzó con una computadora compatible con ZX Spectrum)
– Trabajé como programador profesional (pagado) durante los últimos 16 años.
– escribió C / C ++ de bajo nivel (servidores, mineros de datos, observadores de archivos, dife- rentes, servicios)
– escribí muchos códigos front-end (js, html, css)
– escribí muchos códigos de back-end (php, sql, caches)
– escribió una cantidad decente de código de empresa Java (ish)
– escribí cosas divertidas para proyectos de mascotas (ensamblador de microcontroladores de arquitectura risc, intentos de gamedev, programación de audio / gráficos relacionados con demoscene, sistema de indexación de libros)

Habiendo escrito el código de nivel bajo y alto (er), siento que hay suficiente espacio en este mundo y en el mercado para ambos tipos de niveles. Esto es lo que descubrí:

– Los lenguajes de bajo nivel me permiten tener un mejor control sobre el manejo de recursos.
– los lenguajes de bajo nivel suelen estar estrechamente relacionados con el código de infraestructura, lo que elimina la imprevisibilidad de las aportaciones de los usuarios de la ecuación. Esto tiende a hacer que el código sea más determinista y más fácil de probar que respeta un contrato determinado.
– Los lenguajes de bajo nivel son rápidos y hacen un mejor uso de los recursos. (estar triste, con gran poder conlleva una gran responsabilidad; es aún más difícil usar el poder de una manera correcta y es muy fácil equivocarse y dispararte a ti mismo)

– Los idiomas de nivel superior son excelentes para un rápido desarrollo. Esto los hace excelentes para proporcionar fácilmente una GUI enriquecida que es útil para el usuario. Después de todo, no importa qué tan bueno sea su back-end, la GUI es la única puerta de enlace con la que el usuario interactúa.
– los lenguajes de nivel superior han resumido las partes específicas de la plataforma, que los lenguajes de bajo nivel no lo hacen. Esto significa que puede ejecutar su código de nivel superior tal como está en más de una plataforma, lo que a su vez significa menos código para mantener y más tiempo para centrarse en el negocio de la aplicación en sí.
Como ejemplo contrario, el manejo de cadenas Unicode multiplataforma, el análisis xml / json o la manipulación del sistema de archivos no están incorporados en las bibliotecas estándar de C ++, por lo que queda la tarea dolorosa de encontrar una implementación adecuada o escribir una e implementar envoltorios para esconder el código centrado en la plataforma si desea que su código funcione en más de una plataforma. No hace falta decir que esto consume mucho tiempo, es propenso a los errores y al asesino de enfoque.
– Los lenguajes de nivel superior son excelentes para la implementación de reglas de negocios. Algunos pueden estar en desacuerdo, pero creo que los lenguajes de nivel superior son más expresivos que los de bajo nivel y eso es lo que quiere (expresividad) cuando escribe el código de negocios

Dicho todo esto, prefiero ambos niveles, pero solo donde encajan. Tratar de usarlos al revés por lo general resulta en dolores de cabeza. Pruebe, por ejemplo, analizar protocolos binarios con PHP usando unpack (), es una pesadilla.

Me temo que me alejé de la pregunta original. Mi conjetura es que te sientes así porque no has experimentado el “otro lado” también. Una vez que lo hagas, te darás cuenta del hecho de que los niveles alto y bajo no son adversarios sino jugadores de equipo.

Creo que tu envidia es buena; es un signo de ganas de aprender más, de explorar diferentes paradigmas y formas de pensar. No dejes que eso se vaya. Apaga esa sed y serás más feliz

Te escucho completamente sobre eso Jeff. Lo veo con bastante frecuencia ya que tengo una gran cantidad de conocimientos de hardware, servidores, redes y similares.

Cuando me mudé al Área de la Bahía, pensé que todos los desarrolladores de software sabían todo lo que sabía, además de la programación. Me di cuenta de que la mayoría no tenía idea de cómo verificar sus resoluciones de DNS y no había editado un archivo de zona en BIND (trabajé un poco en un ISP). Llegué a comprender al verlos tropezar con ciertas cosas que no se trataba de ser el héroe que salva el día, sino de trabajar como un equipo cohesionado, llevar tus habilidades e ideas a la mesa con una mente abierta.

También puedo escucharlo sobre el aspecto de verlos operar con menos equipaje, sin ser conscientes del panorama general porque están trabajando en el parche en el que aterrizaron.

Sí, en muchos campos, los que vienen a menudo no se dan cuenta de cuán profundo es el agujero del conejo. Si nos fijamos en los automóviles y electrodomésticos modernos, son prácticamente una operación de un solo botón. Por otro lado, navegue o haga punto, ambos lo he intentado y he encontrado que se sienten similares en términos de concentración una vez que llegué a mi “zona”. Con la navegación tienes una variedad de cuerdas (hojas), velas, timones y todo tipo de accesorios disponibles para dirigir el barco. En cambio, gira la llave en un automóvil y ahora está a cargo de una caja de metal de 1-2 que puede viajar miles de millas. Con el tejido de punto, estás siguiendo un patrón y todo, desde el tipo de hilo, la fuerza con que tejes las agujas y el tejido (sí, hay un tejido de mano derecho [inglés] e izquierdo [continental]).

Lo que veo en las personas que recién ingresan a la tecnología en los últimos cinco años es que no tienen un marco de referencia para la complejidad / flexibilidad / final abierto de DIY del desarrollo de software, por lo que si podemos encontrar una manera de transmitir eso, aplauda .

Descargo de responsabilidad: solía ser un cliente de pago de los años de Jeff por su sistema de tickets de mesa de ayuda.

Habiendo pasado una buena parte de mi carrera tanto en ensamblaje de bajo nivel como en front-end html / js, etc., responderé con una analogía. Si la programación fuera como construir lego, lo que preferirías hacer; ¿Poner todas las piezas pequeñas juntas para construir algo tú mismo o tomar varios modelos precompilados combinarlos y construir algunas piezas para unirlas?

Lo que me encantó del lenguaje ensamblador es que, en su mayor parte, no hay bibliotecas. No hay herramientas de terceros, muy pocas diferencias de plataforma. Es muy divertido, pero dolorosamente lento para que algo se programe / complete.

Lo que me encanta de la parte delantera (actualmente haciendo WPF, así que no tanto amor) es lo rápido que se puede poner algo genial luciendo juntos. (La gente no mira el pastel, mira la guinda). Pero la curva de aprendizaje es un dolor. Los marcos son un dolor. Y siempre existe la sensación de que no lo estoy haciendo correctamente, o podría ser mejor.

Así que, chico de Front End, el nivel bajo parece divertido, sin complicaciones, en la aventura del salvaje oeste. Los chicos de bajo nivel allanan el camino hacia adelante. Sin embargo, la realidad es mucho más trabajo para lograr cualquier cosa.

Hey gente, ambos somos!

Una respuesta para no estar deprimido es hacer un proyecto de pila completa.
Por ejemplo, mi proyecto personal está hecho de cada aspecto de la programación:

Hice algunas recetas de Ruby Chef (+ Docker) para instalar mi infraestructura: por ejemplo, Gitlab, MailServer, Jenkins, SonarQube, Nexus, WordPress (para documentos), LDAP, Redmine … Me hizo descubrir algunos ladrillos de bajo nivel, como configurar y seguro LDAP, SSL, configuración de Apache, hosts, mucho shell y algo de C …

Luego hice mi propio marco de aplicación, utilizando Maven, OSGI, JPA (persistencia), JTA (transacciones), JMS (mensajería), REST, Enrutamiento (Camel), y luego lo abrí …

Luego integré un módulo UI en el marco para descubrir Angular, Bootstrap, Sass, Grunt …

Luego integré una muestra hecha con mi marco de aplicación en mi plataforma para aprender Entrega continua, tuberías …

Finalmente, estoy profundizando en el modelado: diagramas similares a UML con algunos DSL textuales, Modelo para la transformación del código, gramáticas: así que estoy tratando de hacer un IDE para facilitar la visualización y generación de mi código de marco aplicativo.

También probé algún concepto de urbanismo, como TOGAF para hacer mapas de mi sistema de información

Ahora puedo decir que soy un Dev de pila completa, y puedo hablar sobre todas las cosas que son buenas, malas y feas con el sistema, la programación de alto nivel, etc.

Me tomó cerca de 6 años de codificación nocturna, pero nunca lo lamentaré.

Vas a conocer este tipo de aventuras, confía en mí.

Comencé como programador de “bajo nivel”, y tengo 10 años de experiencia (redes L2-L4 / infra). Día tras día, interactúo con personas que son desarrolladores backend … y cuando hablamos de ideas aleatorias, hablamos de aplicaciones, sitios web, etc. También envidiamos a los desarrolladores front-end …
Y también envidiamos a los desarrolladores de gama baja :). Incluso mientras trabajaba en la pila L2 en un ASIC, donde estaba programando los registros para que la infraestructura estuviera disponible para la pila IP de nivel superior, solía envidiar a los ingenieros de hardware que escribieron el código vhdl que dio lugar a la ASIC que estaba programando.

La pila de aplicaciones que tenemos en estos días es tan multinivel que si no sientes envidia por los otros niveles y las habilidades requeridas, es probable que no sepas mucho sobre esos niveles.

Lo mismo se aplica a los campos no relacionados. Podría pensar que su ingeniero de mercadeo no está haciendo mucho trabajo, o que todo lo que un líder está haciendo es simplemente actualizar hojas de cálculo y canalizar a la gente, pero a menos que obtenga un conocimiento íntimo de su trabajo, nunca apreciará ni envidiará a los demás. posiciones

Y si ser un programador de bajo nivel es algo que desea hacer, entonces probablemente esté en una posición de saber lo que no sabe y pueda trabajar para lograr ese objetivo.

Es probable que seas un fanático del control y desees la habilidad de hacer girar bits y estructurar los datos en la memoria de manera super-óptima. La mayoría de los lenguajes de “alto nivel” tienen limitaciones, y los lenguajes web (como Javascript) tienen severas limitaciones, solo puede programar felizmente en esos idiomas si no está consciente de cómo funciona realmente el hardware / infraestructura. Incluso si logras migrar a C ++ y obtienes el nivel de control que deseas, descubrirás que el hardware apesta, y luego querrás rediseñar eso 😉

Eso es interesante para mí, porque como antiguo desarrollador de back-end (asp y sql), siempre tuve un poco de envidia de los muchachos de front-end. Estaba creando bases de datos escalables y escribiendo software de transacciones complejas para bancos en los años 90, pero pídame que cree una interfaz de usuario para eso y … Bueno, digamos que tenía que ser un desarrollador para entenderlo.

Haría una plataforma muy funcional con una terrible interfaz de usuario y luego algún otro niño vendría con nada más que el panel de texto y Photoshop, lo haría lucir increíble y robaría toda la gloria, jajaja.

De hecho, creo que si me esforzara al máximo para crear algo artístico de forma remota y lo mostrara, la gente diría “¿Su hija hizo eso? ¡No está mal para un niño de 8 años!” 🙂

Creo que, en algún nivel, todos envidian algo acerca de alguien más. No te preocupes, hombre. Concéntrese en lo que usted es el experto y deje las otras cosas a alguien que sea un experto en eso . Un gato de todos los oficios es un maestro de ninguno.

Realmente no entiendo tu sentimiento como desarrollador de sitios web. Hay tantas cosas que aprender y hacer ahora mismo. Y, lo que hacemos parece ser mucho más emocionante que lo que están haciendo los desarrolladores de bajo nivel en este momento.

¿Por qué es más emocionante? Porque el desarrollo web se está renovando más rápido.

Angular.js está abriendo nuevas formas de hacer las cosas y los resultados son simplemente excelentes. Bootstrap hizo css hacer un gran paso adelante. Ruby on Rails es casi perfecto y siempre está a la vanguardia. Coffeescript hace que mi gusto sea más fácil cada día. Y así.

Si te sientes aburrido porque sientes que has llegado al límite, echa un vistazo a webGL y Three.js. Es increíble lo que puedes hacer. Solo prueba esta demostración para ver cuánto se puede hacer cuando eres un desarrollador de aplicaciones: HexGL, el juego de carreras futurista HTML5.

Ingeniero de software de bajo nivel aquí. Trabajo en un compilador no tradicional escrito en C ++. He diseñado ASIC y he trabajado en sistemas integrados (en ASM). He trabajado en niveles más altos de abstracción, como el desarrollo de front-end. La mayoría de las personas con las que he trabajado tienen casi la misma opinión que las personas como usted. Tu percepción tiene más que ver con lo difícil que fue para ti llegar a donde estás y lo difícil que sería para ti llegar a otra parte.

Todos sabemos cosas pero no todas sabemos las mismas cosas. A medida que amplíes tu conjunto de habilidades, aprenderás que todos somos más o menos iguales.

¡GRACIAS por hacer esta pregunta!
Es difícil saber cuánto no sabes.
Y para verlos a ustedes, respuestas, sé que no estoy solo en esto.
Oh, oh acabo de recordar, trabaje a través de “Los elementos de los sistemas de computación” o siga el curso llamado “De NAND a Tetris” en Coursera.
USTED CONSEGUIRÁ CÓMO FUNCIONAN LAS COSAS DE BAJO A ALTO NIVEL. o /

De Brasil con amor – Gabriel

Probablemente porque no has hecho suficiente programación de bajo nivel 🙂 Diviértete con los punteros y malloc() en C, escribe algún ensamblaje, explota uno o dos programas con errores! Tienes que hacer esas cosas para comenzar a apreciar el poder de la abstracción, sin mencionar para comprender mejor la abstracción en sí misma (muchas de ellas tienen fugas, saber qué hay debajo ayuda mucho cuando algo que nunca debería salir mal, inevitablemente, sale mal).

No se sienta tan mal, hay una buena posibilidad de que si un programador está codificando en ensamblador o en lenguaje de máquina, ese programador esté construyendo un sistema de armas o sea un espía.

Porque eres curioso y capaz y quieres aceptar más desafíos ahora que eres bueno en lo que haces.