Como programador ‘serio’, te enseñaste a ti mismo Haskell, Erlang y Prolog y cargas mucho más porque te importa. ¿Se deprime mucho porque la mayoría de los ‘grandes trabajos’ se ven obligados a utilizar las tecnologías de denominador común más bajas porque es más fácil contratar personas?

Si.

Es una peculiaridad cultural desafortunada junto con una asignación cerrada, grandes jerarquías de gestión, horarios estrictos y códigos de vestimenta. Afortunadamente, algunas de estas cosas están desapareciendo cada vez más de las compañías tecnológicas y la cultura de las compañías tecnológicas, pero es una progresión lenta.

Casi nadie tiene códigos de vestimenta reales ni ha establecido horas más. La administración se está volviendo más plana, y hay menos atención sobre ella.

Otras cosas, como la asignación cerrada y evitar idiomas “extraños”, todavía están presentes en empresas como Google. ¡Pero Google ya no es la vanguardia cultural! En todo caso, en comparación con otras compañías tecnológicas, Google es bastante estable y conservador.

Afortunadamente, si miramos a otras compañías, vemos futuros potenciales, al igual que Google anunció un cambio cultural importante en sí mismo. Facebook es un gran ejemplo, por extraño que parezca. Si bien están atrapados con un legado PHP inevitable, están perfectamente dispuestos a usar diferentes lenguajes según corresponda por proyecto, incluidos D, Haskell y OCaml.

Espero que una mayor autodeterminación del desarrollador junto con un entorno cultural menos aversivo al riesgo caracterizará la cultura tecnológica del futuro, como parte de la misma progresión que nos dio nuestra cultura actual a partir de los trajes y la burocracia de IBM.

EDITAR: Ahora tengo un trabajo Haskell bastante impresionante, en Target de todos los lugares. Todavía me molesta que otras compañías no estén dispuestas a permitir que los equipos inviertan en Haskell si así lo desean.

Sí, pero Java (por ejemplo) no es el enemigo. Rich Hickey logró construir Clojure encima de él. Entonces, este problema no se trata de idiomas per se .

C ++ ahora se considera el lenguaje arquetípico “malo”, pero hay dominios donde es la herramienta absolutamente correcta para usar, e incluso los programadores de élite políglotas, que preferirían Clojure o Haskell para cosas de nivel superior, estarán de acuerdo.

Además, no me gusta tener que escribir Java cuando Clojure o Scala funcionarán, pero el lenguaje es un sueño en comparación con Cobol, C ++ como se practica habitualmente o 4GL específicos de dominio como SAS.

Lo deprimente es el antiintelectualismo de la industria del software. La aversión al riesgo inadecuada en las elecciones técnicas (falta de equipamiento por parte de personas de negocios técnicamente incompetentes) es solo un síntoma de eso.

La informática es un campo hermoso, pero la mayor parte de la “ingeniería de software” no tiene nada que ver con las matemáticas o avanzar en el campo o incluso hacer que las empresas sean más eficientes, sino que se trata simplemente de evitar malas decisiones y expectativas irrazonables establecidas por empresarios arrogantes que persisten en ignorancia voluntaria porque tienen el poder. Como no pueden distinguir la diferencia entre lo excelente (“10x”) y lo mediocre entre nosotros, suponen que esas diferencias no existen y se las arreglan para el medio.

Los buenos ingenieros de software no son solo “ingenieros” sino solucionadores de problemas en general. El problema es que las personas de negocios a las que respondemos (porque tenemos una identidad profesional débil y sin cohesión colectiva) no quieren que resolvamos los problemas (especialmente no problemas que caen dentro de la descripción del trabajo de otra persona) o que obtengamos las respuestas correctas, sino que refuercemos sus propios juegos políticos Quieren que seamos subordinados leales, no solucionadores de problemas objetivamente excelentes. Hay muchos conflictos de intereses involucrados que resultan en (a) baja calidad de software, (b) equipos grandes, ineficientes y mediocres a expensas de individuos de alto impacto, que a menudo serán subutilizados pueden ser rechazados, (c) mercantilización del talento de programador relacionado con el elemento (b), (d) bajo rendimiento macroscópico (proyectos grandes y costosos que no satisfacen), lo que resulta en la disminución del estado de los ingenieros en la organización, y (e) opciones de tecnología poco inspiradoras y adversas al riesgo. Esto lleva a la temida Política de Java Shop sobre la que he blogueado.

Solía ​​pensar que los lenguajes “malos” eran el problema: que si solo reemplazaba Java con Scala o Clojure, golpearía a los empresarios con las ganancias de productividad de 3-25x y vería un renacimiento de la autonomía del ingeniero. Ya no creo que sea así de simple. El antiintelectualismo de la cultura empresarial estadounidense, y la herencia de ese rasgo por la cultura del ingeniero de software (debido a nuestra débil identidad colectiva), es un problema que va mucho más allá de los lenguajes de programación.

Encuentre otra forma de ganarse la vida y hágalo cuando no pueda encontrar una programación ‘sana’.

Tengo un concierto cuerdo (Prolog) pero tengo un respaldo haciendo muebles, etc.

Averigua cómo vivir a bajo precio. Ahorre dinero cuando trabaje en una empresa y luego descanse 6 meses y codifique algo. Con un par de amigos, puede codificar algo para lanzar en 6 meses. Si se cae, haga espuma, enjuague, repita.

Habla con artistas profesionales. Ellos conocen esta rutina.

Los músicos tienen una expresión, “conducir el autobús”. Es decir, cuando el concierto es lo suficientemente terrible (tocar música de fondo en una boda para un montón de borrachos que te ignoran, por ejemplo), prefieren estar haciendo un trabajo (como conducir el autobús de la banda) que no requiere creatividad entrada.

Comprende que la gente de negocios no es estúpida. Simplemente tienen diferentes prioridades, una de las cuales es, sí, ¿puedo contratar a alguien para que haga este trabajo si este programador se va?

No hablo por mi sombrero: estoy ejecutando una startup basada en Prolog.

Por lo tanto, cambie su actitud y piense qué trabajos en torno a sus trabajos corporativos podrían realmente hacerse mejor en su lenguaje funcional. Haga un caso de negocios para ello. Y acercarse al jefe. La mayoría de los empresarios se interesan mucho cuando dices algo como “Puedo reemplazar los 7 programadores que tenemos haciendo el proyecto BigThing por 2 usando Haskell / Prolog / Clojure”

Pero espere tener que demostrarlo.

La depresión no es una opción.

Es una diferencia entre un corredor y un levantador de pesas. Entre un camión y un Ferrari. Entre una superproducción de superhéroes de Hollywood y un documental lleno de significado visto por una docena de personas.

Puedes seguir el camino de grandes proyectos. Ser programador en tales proyectos no es muy divertido, sin embargo, puede crecer rápidamente para convertirse en un Arquitecto de soluciones, la persona que decide sobre los principios clave, componentes, interfaces, etc.

O puede buscar un proyecto de élite. Podría ser un inicio de ingeniería de software o una reurbanización de un componente crítico dentro de un sistema existente. Por lo general, son pequeños, sin embargo, cada desarrollador ofrece un gran valor. Un proyecto de ese tipo no vería un “recurso” convencional como programador. Y en un proyecto de ese tipo, puede encontrar un lenguaje de programación fuera de lo común en el trabajo.

La otra forma de verlo es ir a los trabajos de nicho donde puedes usar tu idioma y modismos favoritos a tu gusto. No es obligatorio que deba participar en los trabajos “grandes” y trabajar con las tecnologías de denominador común más bajas. Intento ser positivo, renuncié a un trabajo supuestamente grande en una empresa bastante grande y decidí hacer consultoría independiente. Puedo elegir mis plataformas tecnológicas y obtener algo de satisfacción. Por supuesto, tiene su propia cuota de riesgos e incertidumbres. Pero la vida es un compromiso, ¿no?

No lo hago Como cuestión práctica, la profesión de TI se trata de trabajar para resolver problemas técnicos para empleadores y clientes . Ellos pueden dictar su pila de software, no tú. Las oportunidades de empleo pueden venir de cualquier parte y debes tomar cualquier trabajo que puedas conseguir. Si eres demasiado exigente, entonces puedes tener muchos años hambrientos. Si no es adaptable, entonces no tiene nada que ver en esta industria.

Si “te importa”, entonces solo quédate con estos idiomas como pasatiempo o recreación. Nadie te impide usarlos. Así funciona la vida.

Supongamos que te consideras en el cuartil superior de tu campo. Esa no es una condición escandalosa dado que 1 de cada 4 personas en el campo estará en ese cuartil. Cuantas más personas tenga con las que interactuar en un proyecto, mayor será la probabilidad de que algunas de ellas provengan del cuartil inferior.

Sin embargo, a diferencia de muchos campos, el software tiene que funcionar y es increíblemente frágil. Esto significa que un programador del cuartil inferior tiene una capacidad casi ilimitada para mezclar la calidad de todo el proyecto.

Independientemente de las tecnologías empleadas, si desea evitar la frustración del “mínimo común denominador”, evite los grandes equipos de desarrollo.

La creencia de que su lista de lenguajes declarativos es una gran bala mágica de estatura profesional es un poco vanidosa. Si eres Kernighan o Plauger, puedes escribir un código excelente en RATFOR o Pascal.

Finalmente llegué a un acuerdo con la comprensión de que es bueno que los “grandes trabajos” estén utilizando la tecnología del “mínimo común denominador”.

De hecho, yo mismo me acostumbré a ellos y ahora puedo confirmar con confianza que “usar la herramienta más simple que hace bien el trabajo” es a menudo el camino correcto.


Al final es el resultado lo que importa.

Ser capaz de contratar personas que puedan entender, apoyar y ampliar el trabajo es una gran ventaja.

Construir sistemas de una manera que los haga complejos por el uso de tecnología moderna es una gran desventaja.


Si, como ingeniero, prefiere seguir usando esas poderosas tecnologías que le interesan, hay muchas tareas y muchos trabajos que con mucho gusto le permitirán usar esas habilidades y aplicarlas para problemas de la vida real.

La tendencia para los proyectos principales es mantenerlos más uniformes y más fáciles de mantener.

Las dos declaraciones anteriores no solo no son mutuamente excluyentes, sino que se complementan entre sí.

Hoy, dentro de un proyecto, uno puede usar herramientas relativamente comunes y estandarizadas para la mayoría de las soluciones de stack y de gama alta en las que las herramientas comunes no encajan.

¡Y yo mismo encuentro esto increíble!


Agregado : Además, no estoy del todo de acuerdo con la redacción de la pregunta y espero que se edite en breve (pero no quiero imponer mi comprensión).

Si un programador se considera “serio” porque entiende las técnicas sofisticadas “porque esas cosas son geniales”, lo entendieron al revés.

Un programador “serio” es aquel que sabe cómo hacer bien su trabajo: en poco tiempo, de manera confiable y sostenible. Si, en la mayoría de los casos, esto se traduce en recurrir a la pila “simple” disponible, eso es exactamente lo que debe hacer el programador “serio”.

Ejemplo: como muchos de ustedes saben, odio absolutamente PHP. Dicho esto, si necesito una forma de ejecutar un script en el servidor para una próxima solicitud GET, votaría a favor de usar un PHP one-liner sobre muchas otras cosas. Porque funciona

Nunca llegué al nivel de ser competente en Haskell, además de Erlang. Aunque me interesan las ideas que esos idiomas pueden aportar, en realidad no es el mejor idioma para usar en ciertas áreas. Si queremos construir un nuevo lenguaje de programación front-end seguro, como “elm”, sí, use Haskell. De hecho, el olmo existe debido a Haskell.

Elixir se ejecuta sobre Erlang VM.

Ambos son buenos para ser aplicados en ese contexto. Pero esos lenguajes no han evolucionado lo suficiente como para ser utilizados, por ejemplo, en sistemas operativos móviles.

También depende de qué quieres decir con “grandes trabajos”.

Creo que no se paga por el dominio del lenguaje, pero se trata de lo que una persona podría hacer para lograr algo en el contexto de la organización para la que trabaja. Es solo una coincidencia que cierto lenguaje de programación “A” es la herramienta para llegar allí.

La facilidad de contratación no es la razón por la que iOS usa Swift, o Objective-C ya no es popular (aunque dudo que alguna vez sea popular).

Tampoco es la razón por la que Artsy está comenzando a usar React Native (basado en JavaScript), más que puramente Swift para sus futuras aplicaciones de iOS.

Entonces, Android usa Java (un lenguaje relativamente popular), y no significa que sea fácil contratar a un desarrollador de Android competente.

Es posible ser un artista, incluso cuando estás escribiendo en idiomas malos.

Había una compañía de redes sociales llamada “The Palace” en la década de 1990. Casi todo su software fue escrito en javascript, pero tenían la distinción de emplear dos de las mejores mentes de OOP en el mundo. Por mucho que desprecie Javascript, todavía tengo que encontrar una arquitectura de software mejor y más elegante.

Sí, si encuentra una compañía que está considerando hacer Scala, es excepcional (solo me pasó una vez). Haskell, completamente fuera del radar. Tal vez sea posible hacer talleres de Haskell en lugares donde las personas están abiertas a aprender más sobre el mundo de la PF, como mi trabajo actual. Al menos usamos RxJava y Java 8, pero usar una biblioteca Java como Slang, traer mónadas a Java, está más allá de los proyectos normales.

No, porque no quiero el tipo de trabajo en el que los empleadores creen que es más fácil contratar personas si nombras un idioma.

De ningún modo. Los grandes trabajos que hago solo son posibles mediante el uso de tecnologías específicas y hacerlas de otra manera simplemente no sería práctico.

More Interesting

¿Cuáles son las habilidades más útiles en la sociedad moderna (principalmente occidental)?

¿Cómo puede alguien adaptarse a un entorno laboral altamente presurizado en India y en el extranjero?

¿Qué se puede hacer en un año para mejorar mis posibilidades de obtener una maestría en informática en las mejores universidades?

Cómo convertirse en administrador del sistema en India

¿Cuáles fueron las calificaciones mínimas por categoría requeridas en el JEE (Main) 2014 para realizar ingeniería aeroespacial en IIST, Trivandrum?

¿Cómo un estudiante de último año de BTech (ingeniería informática), bueno en estructuras de datos, algoritmos, resolución de problemas y con buenas habilidades de codificación, pero de una pequeña universidad, es reconocido por buenas empresas basadas en productos en la India?

¿Cuáles son las ventajas de estudiar asignaturas no filiales en B.Tech primer año?

¿Qué es mejor, un CSE BTech + MTech (5 años) o un CSE BTech (4 años) en el VIT?

¿Algún comentario sobre la distancia MBA de NMIMS?

Soy analista de negocios con 3 años de experiencia en TI. Actualmente estoy tratando de saltar al perfil de análisis de negocios. ¿Qué opciones debo considerar como certificaciones, cursos, etc. en India?

Cómo convertirse en ingeniero

¿Cuáles son algunos buenos trabajos mientras viajas?

¿Necesitas ser bueno en matemáticas para ser bueno en aprendizaje automático?

Como estudiante de ciencias de datos computacionales, si solicito un puesto de ingeniería de software o una pasantía, ¿mis posibilidades disminuirán porque no soy estudiante de CS?

He trabajado como desarrollador de PHP durante dos años. Quiero cambiar mi tecnología de PHP a otra, pero estoy confundido. ¿A qué tecnología debería cambiarme: un iPhone, Android o cualquier otro?