¿Por qué no trabajan más personas como programadores?

Si bien STEM no es exactamente equivalente a la programación, puedo ver a dónde vas, así que lo permitiré 🙂 La programación como carrera sufre una serie de obstáculos.

Hay una curva de aprendizaje empinada y abstracta . Cuando se aprende piano, por ejemplo, cualquiera puede sentarse y tocar algunas teclas y hacer algo de ruido. Luego pueden aprender a hacer ruidos más armoniosos, tocar música con la que están familiarizados y completar eso con teoría. Pero con la programación, un novato se sienta frente a una computadora y pregunta “¿y ahora qué?” sin absolutamente ningún punto de referencia para comenzar. Eso es intimidante, y sé por mis propias experiencias con mis hijos que es brutalmente difícil hacer la conexión entre un concepto de programación y un resultado tangible o dar el salto de un tutorial congelado a codificar algo desde cero.

Como dice el anuncio, los aceites no son aceites. C # es diferente a C ++. Java y Javascript son muy diferentes. HTML? PHP? Rieles? ¿Qué aprendes cuando ni siquiera entiendes realmente la diferencia? Y luego están las herramientas. Incluso una vez que comprenda los conceptos y pueda moverse en cierta medida entre idiomas, elegir la cadena de herramientas para una nueva plataforma es, en mi humilde opinión, la parte más difícil.

Todavía se percibe que la programación es una profesión para los nerds y que es inalcanzable si no eres de la persuasión del protector de bolsillo. Nos estamos alejando un poco de esto, pero es cierto que se requiere una cierta combinación de impulsos técnicos, lógicos y creativos para atraer la programación.

Supongo que también la programación se adapta a aquellos que se sienten cómodos estando solos con una pantalla durante más de 6 horas por día (a pesar de las reuniones). Aunque solía pensar que era genial, ¡trabajo en interiores sin levantar objetos pesados! – Prefiero un papel más variado e interactivo ahora.

Los entornos de desarrollo de juegos y aplicaciones (p. Ej., Plataformas Unity, Android e iOS) son los mejores lugares para comenzar en mi humilde opinión. Están altamente estructurados, bien respaldados por cadenas de herramientas, tutoriales y comunidades, y puede producir algo tangible que funcione que altere visiblemente su comportamiento en respuesta a los cambios en su código. Son los equivalentes contemporáneos de las listas de revistas BASIC que solía escribir en la PC XT de mi padre en los años 80.

Convertirse en un buen programador es increíblemente difícil y no sucede rápidamente.

No podemos esperar plantar algunos árboles y hacer que las secuoyas de 2000 años crezcan de la noche a la mañana, independientemente de la demanda.

Rasgos de personalidad

  • Uno básicamente tiene que ser un autodidacta para aprender a programar. Lleva años de práctica aprender todo lo necesario para ir más allá de un nivel básico en el que puede escribir programas cortos que funcionen. Nadie se ha convertido en un gran programador simplemente tomando clases o leyendo libros. Se necesitan horas de práctica. Y contrario a la creencia popular, los programas de CS no enseñan programación. Los programas de CS enseñan teoría.
  • Como programador, debe tener una persistencia casi ilimitada para continuar tratando de solucionar problemas, arreglar y desarrollar cosas. Se necesita una persona especial para persistir tanto, especialmente cuando a menudo parece que no estás progresando. Esto es más o menos un rasgo de personalidad, y no tener este nivel de persistencia es suficiente para rechazar a la mayoría de las personas que no lo tienen de la profesión.
  • Debes ser excepcional en matemáticas y resolución de problemas. La programación es MUCHA resolución de problemas.
  • Debe tener una excelente memoria a corto plazo (y a largo plazo) para poder hacer malabarismos con varias cosas en su cabeza simultáneamente y recordar lo que escribió hace un mes.
  • Debe tener una gran comprensión de cómo se interrelacionan las cosas y cómo diseñar una buena arquitectura. Si cambio esta cosita aquí, ¿qué podría estar rompiendo en otro lado?
  • Necesitas tener una increíble atención al detalle. Cerrar no lo corta en la programación. ¿Olvidaste un punto y coma en alguna parte? ¡El programa no se va a compilar! ¿Escribe mal el nombre de una función? Su programa podría estar haciendo algo completamente diferente de lo que esperaba.

No tener estos rasgos de personalidad es suficiente para eliminar a la mayoría de las personas.

Contenido

  • Debe tener una sólida comprensión de las estructuras de datos y las clases y saber cuándo y cómo usarlas.
  • Debe estar familiarizado con las bibliotecas que ya se han desarrollado para no tener que reinventar la rueda.
  • Debe familiarizarse con muchos algoritmos básicos (y avanzados), de nuevo para no tener que reinventar la rueda.
  • A menudo, necesita conocer los límites del hardware con el que está trabajando para poder hacer cosas como administrar la memoria correctamente y evitar quedarse sin ella, o utilizar su memoria adecuadamente para eliminar la transferencia de datos desperdiciada dentro del procesador y acelerar tratamiento.
  • Para que puedas programar. ¡Excelente! Pero, ¿sabe algo sobre la estructura de paquetes, TCP / IP, HTML, CSS, diseño de interfaz de usuario o bases de datos? Los programas no se ejecutan de forma aislada.
  • ¡Hay un montón de cosas que debes saber, y sigue cambiando! No es algo en lo que puedas ser realmente genial a menos que sea tu enfoque principal. No puedes ser un “programador de fin de semana”.

Ambiente de trabajo / vida

  • Debe tener largos bloques de tiempo ininterrumpido para no perder la concentración cuando está programando (y aprendiendo a programar). Muchos entornos de trabajo (y hogar) luchan por ofrecer esto. ¿El teléfono suena? Genial, te llevará 15 minutos recuperar tu tren de pensamiento.
  • A menudo tiene que tomar decisiones sobre compensaciones sobre la marcha. Claro, podría escribir un programa que pudiera manejar cada caso, pero ¿con qué frecuencia alguien realmente va a poner “cero” como entrada? Además, estamos atrasados ​​y es más importante poner en marcha algo ahora mismo.
  • Además de todo esto, el lenguaje que pensaste que era la próxima gran novedad fue una moda pasajera y nadie lo está usando 5 años después. Ahora estás en el próximo lenguaje genial, que podría no usarse dentro de 5 años. Constantemente tienes que estar al tanto de las cosas.

Además de eso están los aspectos de gestión.

Los programadores a menudo son tratados como trabajadores de fábricas. Las personas sin talento para la programación (y con menos sentido comercial) a menudo están a cargo de los proyectos. Piensan que los programadores son engranajes en las máquinas. ¡La verdad es que los programadores son artesanos y para obtener los mejores resultados de un proyecto, lo más sensato sería preguntar a las personas expertas en programación cómo deben hacerse las cosas! Casi todos los proyectos terminan superando el presupuesto y con retraso, lo que obliga a los programadores a trabajar toneladas de horas extras no compensadas y no apreciadas para entregar un producto mal diseñado y mal probado. Los grandes programadores se dan cuenta de que no se les paga más que a los programadores malos porque la gerencia no puede notar la diferencia, y además de eso, están haciendo un trabajo adicional para compensar que otros programadores estén por debajo del nivel. Y los grandes programadores que hablan y tratan de cambiar las cosas para mejor a menudo son intimidantes para los gerentes, quienes a menudo intentan deshacerse de ellos (lo cual es una tendencia general de empleo discutida en otras publicaciones). Suficiente de esto y es fácil ver por qué las buenas personas se cansan de la profesión, especialmente porque hay muchas otras oportunidades. Las personas que incluso son programadores promedio, siempre y cuando sean razonablemente buenos para tratar con personas, tienen suficientes habilidades para tener éxito en una variedad de otras profesiones. La programación es algo que se puede transferir fácilmente, pero no a través de él.

Los buenos programadores probablemente tengan menos probabilidades de buscar trabajo al azar.

Es fácil encontrar programadores. Es difícil encontrar buenos programadores. Los programadores de mierda probablemente están buscando trabajo constantemente. Los buenos programadores, si una empresa se da cuenta de que son buenos, deberían hacer lo que sea necesario para conservarlos, por lo que probablemente estén buscando trabajo con mucha menos frecuencia. Y cuando lo hacen, son selectivos sobre dónde quieren trabajar, lo que explicaría por qué muchas compañías afirman que “no hay buenos programadores disponibles, todo lo que podemos encontrar son malos”. Como se ha dicho en otra parte, un buen programador ciertamente puede valer varias veces lo que vale un programador promedio, y un programador malo puede tener un valor negativo. Y es realmente difícil (si no imposible) que los programadores malos y promedio se conviertan en buenos, y ciertamente no vale la inversión para que cualquier startup intente emprender cuando se supone que deben enfocarse en desarrollar algo rápidamente y sacarlo a la luz. puerta.

Solo decir que programar es difícil y seguir adelante es una actitud elitista que no ayuda a nadie. Incluso si la programación es difícil, las matemáticas también lo son, pero muchas personas se convierten en estadísticos, contadores, actuarios, físicos, economistas, matemáticos, empleados de caja …

Más personas no se están convirtiendo en programadores porque no son conscientes de lo que se necesita para programar desde una edad temprana. A saber, aprende sobre álgebra en 3er grado, no cómo compilar / ejecutar un programa básico. Aunque la matemática requerida para la programación es realmente solo el concepto de funciones y un poco de aritmética, comenzamos a enseñarla extraordinariamente tarde, si acaso, en las escuelas.

Nota: algunas escuelas intentaron en algún momento enseñar algo de programación desde el principio, pero estos intentos fueron bastante débiles. Recuerdo haber aprendido Logo (lenguaje de programación) tal vez en 5to grado, pero Logo es realmente un mal lenguaje para tratar de enseñar a la gente: es imposible ver su utilidad, ya que es imposible darle utilidad. Los docentes suponiendo que los niños deben obtener una educación en programación tan diluida que sea inútil hace que la educación en programación sea inútil.

Sí, algunas personas son programadores naturalmente dotados que sobresalirán mucho más allá del resto muy rápidamente, pero es injusto no dar a la segunda pendiente de la curva de la campana una oportunidad justa para ponerse al día. Actualmente, vemos los dos gráficos de curva de campana en la universidad, y casi inmediatamente nos damos por vencidos con los rezagados porque solo tienen 4 años para obtenerlo. Los profesores piensan que este fenómeno es extraño, pero en realidad no lo es. Este es el resultado de presentar un estilo de pensamiento a un grupo de individuos cuyo estilo de pensamiento ya se ha establecido. Si tuviéramos que enseñar a programar algo como enseñar historia, matemáticas, química, biología, inglés, economía … apuesto a que habría muchos más programadores de carrera.

TL: versión dr:
1. El autoestudio motivado no es tan fácil como crees, especialmente durante todo un año.
2. Las personas a las que se les ha enseñado en la escuela a seguir instrucciones generalmente no están preparadas para sufrir por el dominio.
3. La oferta y la demanda no se autocorrige nada, es un término utilizado para explicaciones ex post facto o en modelos muy simples. Se necesitan análisis mucho más complejos para cuestiones como esta.

Esta pregunta es interesante para mí porque en realidad probé tu ‘año de autoestudio’ para aprender programación, con algunos puntos buenos y otros malos al final.

En primer lugar, ya tenía una experiencia moderada en programación: HTML en la clase de diseño web de la universidad, una clase de Java en la universidad, un interés continuo en las aplicaciones de programación (visualización de datos, código VBA útil en Excel) y una formación científica que significa que no No sufra las fobias o deficiencias STEM relevantes mencionadas por el usuario.

Por casualidad, trabajé por cuenta propia y tuve suficiente tiempo libre para concentrarme en tratar de aprender a programar. Entonces, ya estoy bastante por delante de la persona promedio que está desempleada y preocupada por llegar a fin de mes, desconfía de STEM y no tiene antecedentes.

Encontré que la programación era aburrida. Pensé (debido a algunas experiencias con la meditación) que simplemente no estaba comenzando en el lugar correcto. Me llevó alrededor de 2 meses llegar a este punto, porque mientras tanto estaba arruinando las instalaciones de software básico, descubriendo qué son los archivos tar, tratando de averiguar dónde estaba mi camino y otras cosas que parecen fáciles para los programadores experimentados. , mientras vivía el resto de mi vida, y no pensé en esta solución de problemas como una programación durante mucho tiempo.

Pasé otros 5 meses mirando y probando otros lenguajes de programación (comencé con Python, probé Javascript de nuevo, probé Ruby y Ruby on Rails, jugué con una compilación de Django, algunos me dieron vueltas con el procesamiento e incluso probé libros sobre R y C ++ .). Mientras tanto, mi trabajo por cuenta propia se expandió a varias compañías exitosas y comencé a obtener una verdadera tracción en la construcción de un estilo de vida empresarial profesional.

Aprendí que es más fácil contratar programadores que hacer todo el trabajo yo mismo. Ahora tengo una certificación Security + y años de experiencia contratando y administrando codificadores en mis empresas. Ya no tiene sentido pasar tiempo creando sitios web y programas propios, si es que alguna vez lo hizo.

Todavía incursiono en la programación de vez en cuando para mantenerme actualizado, y de vez en cuando intento aprender una arquitectura y un lenguaje completos, pero no es una prioridad. Tengo mucho éxito con mi propio camino, no realmente basado en la programación, y me mantengo ocupado.

Una suposición que hace en la pregunta es que las personas desempleadas no están ocupadas, que tienen tiempo y motivación para un “año de autoaprendizaje”. La mayoría de las personas desempleadas que están crónicamente desempleadas están bastante estresadas por este hecho y están tratando de solucionarlo como mejor saben, a menudo a través de múltiples trabajos a tiempo parcial y viviendo frugalmente (lo cual es muy estresante si nunca has sido pobre) (en serio , en realidad no es razonable esperar que alguien que no sabe cómo se va a permitir comer la próxima semana se involucre en un estudio a largo plazo de una nueva disciplina). No tienden a tener un sistema de apoyo que les permita tomar ‘un año de autoaprendizaje’ y aprender una nueva disciplina, como tampoco tienen tiempo para tomar un año de autoaprendizaje y convertirse en soldadores profesionales. También hay una gran demanda de soldadores, hay una gran demanda de muchas profesiones calificadas.

Además, como propietario de un negocio, generalmente no pienso mucho en los modelos económicos simplificados, como los que incorporan la oferta y la demanda como si fueran fuerzas separadas. Hacemos cosas que la gente compra, y la gente compra cosas que hacemos. Contratamos a personas con ciertos conjuntos de habilidades, y las personas desarrollan conjuntos de habilidades que los hacen contratables, y todas estas cosas suceden al mismo tiempo. Si hay alguien sentado allí diciendo ‘¿qué deberíamos hacer a continuación?’ “¡Oh, echemos un vistazo a la demanda y abastezcamos!” ¿Quién tiene la capacidad excedente para esperar mientras se realiza este análisis y la confianza en sus economistas / especialistas en marketing para que simplemente se lo lleven sin embargo dicen que no los he conocido?

Podrías decir ‘¿por qué no hacen eso? Me parece razonable. Y la respuesta a eso es más compleja. A veces se basa en un análisis racional del tiempo necesario para la ejecución: si intentan aprender las habilidades actualmente en boga, para cuando aprendan (a partir de cero) esas habilidades serán obsoletas. A veces es porque todos miran la demanda e intentan abastecerla y usted quiere apuntar a un escenario del Océano Azul. A veces, sus especialidades no mienten con lo que se exige y solo necesita convencer a la gente para que exija lo que tiene.

Por lo general, se trata de una combinación de este tipo de cosas, porque las demandas del mercado nunca son tan obvias como “DISPUESTA A CONTRATAR A CUALQUIER PROGRAMADOR DE COMPUTADORA PARA LOS MANCHOS DE DINERO POR HORA EN EFECTIVO” Son más matizados, como ‘Tengo problemas para integrar mi quicken y excel y pagaré $ 100 por una solución’ o ‘Necesito un sitio web que pueda aceptar pedidos que funcionen con mi sistema heredado y lo necesito por menos de 6k en 3 meses.’ Si alguien le dice “hay una demanda y no hay oferta”, o algo igualmente simple, generalmente están tratando de venderle algo.

En resumen, Self Study es realmente difícil y, a menudo, infructuoso, lleva mucho tiempo y no es una opción para los desempleados, y la oferta y la demanda son simplificaciones excesivas que aprende en Economics 101 que en realidad no son muy útiles para la toma de decisiones.

Tengo algunas razones que creo que influyen en este fenómeno de personas que se alejan de la programación. A continuación trato de agregar mi parte a las respuestas de las grandes personas:

  • La programación pierde el marketing . Durante mucho tiempo, no fue calificado como una artesanía digna, por lo que las personas fueron perseguidas. Afortunadamente, las startups están cambiando esto. Hoy en día, las personas se inspiran y saben más sobre qué es un programador, qué hacen, etc.
  • Particularmente, trabajando como programador durante algún tiempo, una de las cosas más molestas al principio fue el ego experimentado de las personas . Cosas como “te pagan por eso, ve a buscarlo tú mismo”. Guru, ninja y todas esas tonterías.
  • Los programadores deben sentirse bien con su oficio . Como programador debes saber qué y por qué lo haces. Conozco a muchas personas que se congelan cuando se les pregunta “¿Qué haces?” “¿Como es eso?” “¿Reparas las PC?”.

Algunas personas dicen “debes ser autodidacta”. Estoy de acuerdo, pero tener un mentor , una gente que pueda mostrarle cómo dominar, los trucos y peculiaridades del trabajo, podría hacer las cosas más fáciles, suaves y placenteras .

Todas estas cosas deben comenzar en la escuela , cuando un niño. Lo más triste de pensar es que las matemáticas y la física están cerca de la lógica y la programación, pero la mayoría de las escuelas no pueden ver o encontrar un lugar para enseñarles. ¿Qué pasaría si las escuelas pudieran enseñar una interpretación de texto más detallada, lógica y código? ¡Qué sueño!

Recuerdo en la escuela cuando la mayoría de los jóvenes estudiantes no podían interpretar un texto. Algunos maestros lo intentaron, pero la falta de esfuerzo hizo las cosas más complicadas. ¿Podría la programación mejorar esto? Yo creo que si.

Debe ser un cambio de mentalidad . Las escuelas y los maestros deben seguir adelante para aprender y mejorar sus métodos en un esfuerzo por hacer que esto sea más accesible .

Algunos tweets que tienen mucho sentido para este contexto:

por Juan Pablo Buritica

Los desarrolladores senior no crecen en los árboles, debes darles una oportunidad a los juniors.

por Philip Roberts

Junior Dev: cree que lo saben todo
Dev regular: cree que no saben nada
Senior Dev: odia las computadoras

por Jordan Rinke

Necesitamos menos hackatones, más aprendizajes. Menos bootcamps, más clases. Menos estrellas de rock, más mentores. Desarrollar personas en lugar de producto.

¿No debería la oferta y la demanda autocorregir este desequilibrio?

He tenido exactamente este mismo pensamiento. Después de años de preguntarse, si había tanta escasez de programadores, entonces ¿por qué no estaban mejor pagados de lo que dicen … abogados de los que parece que no hay escasez en absoluto? El Instituto de Política Económica emitió este estudio que responde a esta pregunta para mí:

El análisis EPI no encuentra escasez de trabajadores STEM en los Estados Unidos

Resultados clave:

  • Los trabajadores invitados pueden ocupar hasta la mitad de todos los nuevos trabajos de TI cada año
  • Los trabajadores de TI ganan lo mismo hoy que en general, hace 14 años.
  • Actualmente, solo uno de cada dos graduados universitarios de STEM es contratado para un trabajo de STEM cada año
  • Las políticas que amplían la oferta de trabajadores invitados disuadirán a los estudiantes de EE. UU. De ingresar a STEM y, en particular, a TI

Básicamente la queja de “¡No hay suficientes programadores!” probablemente podría traducirse para que lea: “No hay suficientes programadores al precio que estamos dispuestos a pagar”

Muchos a menudo descubren que otras cosas son más valoradas tanto monetariamente como en términos de estatus profesional que la programación y, en cambio, con razón acuden a esas profesiones. Tal como sugeriría la oferta y la demanda . Como Brian sugirió, la programación es una profesión que es fácil de abandonar pero difícil de ingresar.

Una de mis primeras preguntas aquí sobre Quora estaba relacionada: ¿Deberíamos disuadir a los estudiantes de seguir sus sueños a favor de opciones más prácticas, como obtener una especialización STEM en lugar de una especialización en Historia del Arte?

Hay una brecha educativa. Les decimos a los estudiantes que sigan sus sueños, pero en la práctica, simplemente no hay un mercado laboral para algunas especializaciones.

No creo que estemos comunicando efectivamente a los estudiantes que su especialidad puede no conseguirles un trabajo después de la graduación. Teniendo en cuenta la importancia de la decisión, es nuestro deber asegurarnos de que los estudiantes que toman decisiones que no conducirán a un trabajo sean plenamente conscientes de las consecuencias.

La noción de que más personas no se convierten en programadores simplemente porque es difícil y no todos tienen el talento suficiente es engañosa, elitista y contraproducente. Por el contrario, más personas no se convierten en programadores debido a las importantes barreras iniciales de entrada, la falta de persistencia y la población plagada de detractores. Me voy a centrar en la última razón, ya que una cantidad sustancial de publicaciones ya cubren más o menos las dos primeras razones.

En general, existe una noción popular en nuestra sociedad y especialmente en la academia de que la habilidad de programación es binaria y se decide desde una edad temprana. Esencialmente, o está destinado a ser un programador o no, y esto puede determinarse a partir de los 18 años. Consecuentemente, muchas personas abandonan la programación con la más mínima dificultad o ni siquiera lo prueban porque son “demasiado viejos”. Estoy seguro de que cualquiera que use este sitio lo suficiente puede dar fe de ver publicaciones que sugieren esto. Ya sabes, los que piden alguna permutación de “Tengo X años, ¿es demasiado tarde para aprender a programar?” De hecho, incluso un consejero universitario ignorante me desanimó de convertirme en programador porque era “demasiado viejo para tener éxito”.

Entonces, como sociedad, ¿por qué albergamos estos puntos de vista? Bueno, creo que una respuesta completa a esto requiere más espacio del que estoy dispuesto a ocupar en esta publicación, pero esencialmente esto se puede atribuir a nuestra fascinación por el “genio precoz”. En todos los campos y especialmente en tecnología, crecemos aprendiendo sobre los Bill Gates y Mark Zuckerbergs del mundo que aprendieron a codificar desde una edad temprana, abandonaron la escuela y fueron éxitos de la noche a la mañana. De hecho, estos individuos son sumamente talentosos, pero sus y otros similares a ellos no impiden el éxito de aquellos programadores que comienzan más adelante en la vida o tomaron una carrera profesional más indirecta.

Muy bien, entonces, si el éxito temprano en la programación no es un buen indicador del éxito profesional en el campo, ¿qué es? En realidad, esta es una gran pregunta para la que no estoy seguro si alguien sabe completamente una respuesta. Pero lo intentaré. Para ser un buen programador necesitas tener estos tres rasgos:

1. Suficiente capacidad analítica para ser un buen programador.

2. Una cantidad considerable de paciencia y perseverancia para ser bueno en la depuración de su código.

3. Curiosidad para descubrir cómo funciona la tecnología y la voluntad de aprender constantemente nuevas tecnologías.

Esta, creo, no es la pregunta que deberíamos hacernos. El gran número de programadores en el mundo no es tan interesante. Lo que me mantiene despierto por la noche es la pregunta: ¿por qué hay tan pocos buenos programadores? He visto tantas compañías dañadas por malos programadores y peor liderazgo técnico que esta es la que me molesta. Los grandes programadores valen millones por año para la sociedad. Los malos que no pueden programar fuera de un entorno corporativo que generan código IDE descuidado están entregando un valor negativo.

Primero, tenemos un problema cuando se trata de conseguir las mejores personas y, peor aún, motivarlas para que se queden. Muchos de los que podrían estar entre nuestras mejores personas pasan 3 años en un JavaJob típico y deciden “jodan esto, voy a la escuela de leyes”. Para atraer a mejores personas al software, debemos convertirlo en una ocupación de mayor estatus. Este mundo en el que los programadores se enfrentan a una baja autonomía, una gestión contraproducente, herramientas elegidas por otros y ninguna capacidad para rechazar trabajos de baja calidad o incluso inútiles, tiene que ser disparado en la cabeza. Mientras los ingenieros de software sean tratados como subordinados, cuyo único propósito es implementar las horribles ideas de hombres de negocios cojos y gerentes de TI ambiciosos (desarrollo orientado a la promoción), no será un campo atractivo. La programación en sí misma es divertida y gratificante. Sin embargo, la mayor parte de la industria del software, tal como existe actualmente, es una maldita plaga ineficiente que merece morir porque está bloqueando demasiado talento y recursos por el poco valor que produce. Solo una persona de 22 años que piensa que “una cena gratis a las 8:00 pm” es un beneficio lo vería de otra manera.

Sin embargo, vamos a tener dificultades para convencer al mundo de los negocios para que nos otorgue más autonomía cuando, desde su perspectiva, apenas lo merecemos. Cerca de la mitad de los proyectos de software fracasan, y casi todos son montones de basura insatisfactorios. Eso no suele ser culpa de los ingenieros; de hecho, diría que en su mayoría no lo es. La mayor parte de lo horrible del software proviene de plazos irrazonables, requisitos sin sentido y condiciones de trabajo que ahuyentan el talento.

Además, la terrible verdad sobre nuestra industria es que es un caso de succión recursiva. La mayoría de los ingenieros de software obtienen proyectos malos en sus trabajos malos y hacen trabajos malos. Esto les impide volverse buenos en lo que se supone que debemos hacer: diseñar sistemas robustos y escribir código excelente. Si trabaja en entornos de software típicos, puede trabajar durante 20 años y nunca mejorar. Esta falta de crecimiento y capacidad en los niveles superiores destruye el estado de los programadores como grupo y convence a las personas de negocios de que somos infantiles y que debemos ser administrados. Esto lleva a peores condiciones de trabajo y más pérdida de talento y más succión general.

Finalmente, si bien la industria del software tiene dificultades para retener a las mejores personas, porque solo unas pocas empresas proporcionan los entornos de I + D que los mantienen, los necesita desesperadamente. Esto es algo difícil de hacer, y el aspecto de “ingeniería” es, en el mejor de los casos, en su infancia profesional, por lo que necesitamos el mejor talento más que nunca. Sin embargo, tanta gente se harta del código malo y la cultura quebrantada que proviene de la horrible administración y los Desarrolladores de productos básicos que tenemos dificultades para mantener a esas personas durante más de 10 años.

Para obtener más información sobre esto, consulte La trayectoria de un ingeniero de software … y dónde va todo mal.

Si no comprende la causa y el efecto complejos, si fracasó en las matemáticas y si no está preparado para dedicar una gran parte de su tiempo libre a mantenerse actualizado con los nuevos lenguajes y tecnologías sin que nadie le pague, la programación es No es una opción viable para ti. Soy un desarrollador empleado a tiempo completo, y cuando no trabajo en proyectos paralelos comerciales, paso casi todo mi tiempo libre manteniéndome al día y experimentando con diferentes idiomas, enfoques y tecnologías, y todavía tengo el síndrome del impostor y siento que Me estoy quedando atrás a veces. No es fácil: aprender lo básico es fácil, pero aprender la nueva mentalidad avanzada requerida para impulsar realmente la industria hacia adelante y marcar la diferencia está lejos de ser una tarea simple.

También puedo hablar desde una perspectiva local: hay muy pocos (buenos) programadores en Croacia, porque muy pocos hablan inglés con fluidez. Dado que la programación (al menos programación de alto nivel como el desarrollo web) no es, en esencia, más que hablar con la computadora en inglés, muchas personas carecen de los conceptos básicos necesarios para esto y, en lugar de comprender , aprenden a codificar. Al meterlo en tu mente y aprenderlo de memoria, alcanzas una meseta desde el principio y te falta la capacidad de progresar.

La programación es como escribir. Debes tener contexto.

¿Estás escribiendo una novela de ficción? ¿Una enciclopedia? ¿Una tira cómica? ¿Un libro de recetas? ¿Un folleto? ¿Un artículo de noticias? ¿Un guión de cine? Copia del anuncio?

También hay diferentes contextos para la programación. El problema es que la programación a menudo se describe sin contexto. A las personas no les importa la recolección de basura, la administración de memoria, la iteración a través de listas, algoritmos, el enfoque orientado a objetos o la consulta de una base de datos. Todos son solo un mumbo jumbo teórico hasta que entiendas su significado.

Ahora si hablamos de las diferentes aplicaciones de programación …

– Videojuegos
– Aplicaciones móviles
– Defensa militar
– Banca
– Autos sin conductor
– aviación
– Producción de música digital
– Soluciones de seguridad
– Películas animadas

… y estoy seguro de que hay más que me he perdido …

Entonces la programación comienza a sonar como algo bastante interesante. Lo que despertó mi interés en la programación fue cuando jugué Quake III Arena en mi PC. Me sorprendió la idea de que alguien pudiera escribir código que creara una experiencia inmersiva, como un pintor podría crear un retrato o un músico podría crear una composición.

Otra cosa que puede intimidar a las posibles perspectivas es la matemática. Existe la percepción de que las matemáticas son importantes para la programación, pero generalmente no lo son para la mayoría de las aplicaciones modernas. No necesita un nivel matemático más allá de la trigonometría básica, si no es álgebra. Incluso si necesita un algoritmo complejo, hay muchas soluciones de código abierto disponibles. Ahora, si se necesita Física (como en un videojuego o simulación), implementará muchas matemáticas, pero no todas las aplicaciones requieren tales, e incluso para ellas, generalmente hay bibliotecas que hacen el trabajo pesado.

Hay varias razones simples para esto: comencemos iterativamente:

1. La programación no se enseña en las escuelas:

Las posibilidades de que aprendas español o francés en la escuela son más altas que cuando te encuentras con un buen código. Esto es enormemente problemático porque significa que, durante el tiempo en que la mente es más receptiva a la nueva información y una nueva forma de pensar, los niños pasan su tiempo aprendiendo otras cosas. La secundaria y la preparatoria son grandes filtros, y un momento perfecto para comenzar a aprender a programar. Si no aprende la codificación y / o las matemáticas de alto nivel, ya se ha perdido una etapa muy importante.

2. La programación en la universidad tampoco es muy divertida:

No quiero decir que la informática no sea divertida, pero definitivamente trabajas mucho, casi todo el tiempo. La mayoría de los programadores son jugadores, personas que generalmente no se divierten mucho y terminan gastando miles de horas escribiendo códigos y depurando, lo cual es bastante difícil y desalentador para la abrumadora mayoría de estudiantes universitarios.

3. No todos los trabajos de CS pagan bien:

La idea de que un título en informática significa que has entrado directamente en un cofre del tesoro es incorrecta y engañosa. Claro, está ganando más dinero que el promedio de historia / psiquiatría principal, pero ha trabajado mucho más (presumiblemente) y estará en su trabajo. Sin embargo, a menos que tenga una buena experiencia, pasantías, etc., como estudiante universitario / recién graduado, aún podría estar ganando $ 35- $ 40ka al año, lo cual es decente, pero eso es todo.

Esto no se aplica a todos, algunas personas ganan mucho dinero saliendo de la universidad y las posibilidades de que esto suceda son mayores si eres un programador, pero la noción de que un título de CS = mucho dinero es falso.

4. Las empresas no se preocupan por su código, se preocupan por el producto. Solo los programadores se preocupan por el código.

Esto es algo de lo que estoy completamente convencido. Una vez hice algo de programación de Python / matemáticas para un cliente que necesitaba un análisis de datos. Había pasado alrededor de una semana escribiendo código medio decente, y obtuve una respuesta. Mientras tanto, este idiota cree que tengo un botón en mi computadora portátil que dice “escribir código”. Eventualmente, ignoro las llamadas telefónicas por un día y reescribo mucho para que tenga más sentido, y lo hizo: fue claro, conciso y hermoso. ¿Les importaba? No. De ningún modo. De hecho, es probable que a la mayoría de los gerentes / jefes no les importe, van a microgestión solo para poner en marcha las cosas, pero a menos que sean programadores o tecnólogos, quieren el producto final, lo que obviamente es muy desmoralizador para muchos ingenieros de software. .

En este mundo hay grandes artistas, grandes compositores, grandes autores, grandes científicos, grandes ingenieros y grandes programadores. Simplemente no hay muchos porque son ocupaciones creativas. Estas habilidades no se pueden enseñar. Naciste con ellos o no lo eres.

Puedes enseñar a cualquiera a pintar por números. No se necesita mucha habilidad para producir libros de bolsillo románticos. Puedes enseñarle a cualquiera a escribir código. Pero eso no significa que produzcan una obra maestra. Simplemente significa que las escuelas pueden producir muchos de ellos, y serán muy baratos y fáciles de reemplazar . No podrías contratar a un programador realmente bueno, incluso si pudieras encontrar uno, porque echaría un vistazo a tu fábrica de “ingenieros de software” semi-calificados y te rechazaría. Pero en la práctica nunca encontrarás uno, porque nunca salen al mercado . Si alguna vez buscan otra posición, se hace por recomendación personal y de boca en boca. Al final, la mayoría de los grandes programadores terminan trabajando para sí mismos, como grandes artistas, compositores y autores …

No recomendaría a nadie que ingrese a la programación o la ingeniería para el caso, como carrera, a menos que sepa en su corazón que nació con ella. Serás una persona que escribe sus propias aplicaciones, por diversión, sin orientación. Te gusta trabajar solo. Estarás muy por delante de la clase en la escuela. No tendrás miedo del lenguaje ensamblador. Aprenderá suficiente ingeniería para comprender una hoja de datos. Leerá la especificación USB para diversión y recreación. Construirás una Raspberry Pi en un dispositivo genial de tu propia invención.

De esa manera, cuando llegues a los 20 años y te despidan porque te estás volviendo caro y no sabes “Dingbat on Wings”, o como se llame la próxima encarnación boutique de Java, tendrás una alternativa a trabajando en McDonalds.

Entiendo el enlace que publicaste en el estudio de trabajos. Sin embargo, algo de eso es un poco inexacto y engañoso. No todos los trabajos STEM son de programación o técnicos, y muchos requieren habilidades avanzadas más allá de la programación básica.

En segundo lugar, hay TONELADAS de candidatos existentes que estas compañías pasan por alto regularmente. Casi todas las compañías dicen que están buscando contratar “lo mejor” pero conformarse con lo mejor mediocre: una persona que habla bien y da una buena impresión, con o sin habilidades. Algunos candidatos están sobrecalificados y pasados ​​por alto debido a su gerente egoísta promedio y cotidiano. En realidad, gran parte del software que veo está escrito por monos que arrojan código a un problema, rara vez lo piensan bien, prueban cosas, etc.

Mi reacción inicial a la pregunta real fue: “Oh, Dios no, no más código basura porque todos piensan que pueden ser programadores ahora que es popular”.

Escucho quejas sobre algunas personas que tienen dificultades para recogerlo. Algunos se marchitan. Otros simplemente arrojan códigos basura como los monos arrojan caca.

Técnicamente hablando, no hay una “escasez”: hay muchas personas con habilidades que se pasan por alto y se pasan por alto. Otras notas anteriores, aparte … Tan rápido como las empresas se mueven, todos quieren candidatos “experimentados”, pero NO están dispuestos a darles a las personas la oportunidad de aprender (filtrados de ganar experiencia al ser filtrados por falta de). Es un problema de la industria. Las personas que se quejan (sobre la falta de candidatos) son el problema. Al igual que las compañías quieren más, más, más, ahora, ahora, ahora, más rápido (y más barato), quieren candidatos más experimentados ahora, ahora, ahora, pero se tropiezan como un adolescente que crece rápidamente y se adapta a nuevos Mecánica del cuerpo sobre la marcha. Las habilidades y la experiencia que la industria quiere no están allí porque no han cultivado el cultivo adecuadamente y continúan haciendo que el suelo se vuelva en barbecho (demasiada cosecha, demasiados cambios, no pueden satisfacer la demanda). Es una falta de estabilidad, simple y llanamente (acompañado de malas actitudes que complican las cosas).

Técnicamente hablando, no solo seguiremos teniendo la escasez de la que se quejan los quejumbrosos ahora, sino que será peor cuando realmente tengan que bajar sus estándares, mirar a los ignorados, al mismo tiempo que las cosas han progresado al siguiente nivel confuso de tecnología, necesidades y deseos, y habrá una escasez real (tal vez 5-10 años más adelante).

Me parece que los requisitos de trabajo para los programadores son extremadamente poco realistas. Como un ejemplo descabellado, pedir 4 años de Java y 2 años de Ruby on Rails con 2 años de .NET es un poco loco, pero he visto requisitos de trabajo como este.

Los empleadores ya no buscan personas con talento para dominar un trabajo con alguna capacitación en el trabajo. Buscan habilidades no complementarias muy específicas que simplemente no existen.

Hay montones y montones de programadores. Pero se detienen al no encontrar trabajos que se ajusten a sus habilidades y tienen que ceder a lo que exige el mercado.

Ser un buen programador es muy, muy difícil.

No puede simplemente tomar a una persona desempleada y darle un trabajo como programador, como tampoco podría tomar un desarrollador como yo y darme un trabajo como contador fiscal.

El autoestudio, durante un año, con dedicación absoluta, creo que tienes razón, probablemente haría que alguien sea lo suficientemente bueno para un puesto junior, pero ¿quién tiene 1 año de tiempo libre y dedicación absoluta? Yo se que no.

Está asumiendo implícitamente que un número considerable de personas pueden convertirse en programadores que pueden agregar valor a algún proyecto en algún lugar.

Una gran cantidad de trabajos son así: puede que no seas un carpintero experto, pero no necesitas mucha habilidad para agregar valor en un sitio de construcción cargando madera y usando una pistola de clavos, sin una gran cantidad de entrenamiento. Y siempre y cuando en realidad no claves los pies de nadie, o caigas ladrillos en la cabeza de alguien, probablemente estés ayudando.

Sin embargo, el desarrollo de software no es así. Es más parecido a escribir poesía o novelas. Puedes aprender un montón de palabras en el diccionario, y tal vez escribir un par de limericks, y sin embargo, curiosamente, ningún poeta te contratará para que te ayude. Porque básicamente romperás todo lo que toques.

Ahora, a los contadores, y a los gerentes en general, les cuesta mucho entender esto: de ahí la tendencia a externalizar el desarrollo de software de los EE. UU. A lugares donde hay desarrolladores que trabajarán por mucho menos dinero. ¡Ajá! Puedo contratar a 4 desarrolladores de software en el extranjero por el precio de un graduado del MIT. Y tu puedes. Pero esas 4 personas pasan el 25% de su tiempo reuniéndose, y no entienden las especificaciones, por lo que resulta que necesita el 50% de un desarrollador en los EE. UU. Para explicar todo y mantener el rumbo …

Y luego ocurre el horror de los horrores: su código pasa sus pruebas, por lo que lo registran, y no coincide con lo que el resto del sistema espera, en ese momento, de repente, las personas caras en los Estados Unidos no pueden hacer el trabajo y tener que pasar tiempo descifrándolo y arreglándolo.

Lo realmente triste es que todo esto fue conocido y documentado a principios de la década de 1970, y explicado por The Mythical Man-Month de Fred Brooks. Y su recomendación es que el desarrollo de software debe ser realizado por un número muy pequeño de expertos, que funcionan como cirujanos, con el apoyo de un equipo que se ocupa de las tareas menos críticas pero nunca aplica un bisturí al paciente.

Por lo tanto, no existe una demanda de personal de software poco calificado. Rompen cosas, pierden el tiempo de personas más capacitadas y, de hecho, destruyen el valor. * Hay * una demanda de personas realmente inteligentes que puedan pasar por una breve fase de destrucción de valor, pero emerjan del otro lado como creadores de valor, pero entrar en ese camino requiere un currículum que demuestre inteligencia cruda (por ejemplo, un grado) o evidencia que ya pasó la fase de destrucción de valor (por ejemplo, contribuciones bien documentadas y bien documentadas a proyectos de software de código abierto, o un desarrollo individual exitoso sustancial).

En resumen, * hay * una demanda, y el desarrollo de software no tiene los mismos requisitos para calificaciones particulares que muchas otras carreras: pero las personas que contratan no solo buscan cuerpos cálidos.


La programación implica una habilidad natural que muchas personas no tienen. Eres bueno en eso o no, y no te toma mucho tiempo darte cuenta de quién eres. La distribución de talento que resulta se ve como un pico con unos pocos programadores excepcionales, un pequeño medio (con el resto de los naturales) que son promedio y un fondo enorme compuesto por programadores tan terribles que es sorprendente que estén empleados.

Hay una escasez de talento (cuya severidad es exagerada) no porque exista una baja cantidad de programadores (hay toneladas de ellos), sino porque hay muy pocos programadores que realmente sean buenos (el pico y el medio). Además, cualquier programador decente podrá obtener un trabajo mejor que el inicio de alguien sin nombre, por lo que eso deja solo un gran fondo para estas nuevas empresas. Y como está claro que no hay mucho que ganar con la contratación de ese grupo, muchas de esas nuevas empresas se encuentran en una posición interesante.

A veces, la falta de grandes programadores que causa una escasez de talento me confunde, porque en cada trabajo que he tenido siempre que venía un programador era genial, la administración hacía todo lo posible para hacerlos miserables, hacer que se estancaran y deshacerse de ellos. . Tal vez hay una escasez del medio no amenazante medio / mediocre que está dispuesto a trabajar por centavos, y dispuesto a aceptar y tratar en silencio con el BS de la gerencia.

Dicho esto, probablemente podría haber más programadores en la cima y en el medio, pero la programación como profesión no se anuncia mucho, el plan de estudios estándar supera la forma de pensamiento / imaginación necesaria para ser un gran programador, y la mayoría de las escuelas están predispuestos a dirigir (y exponer) a los estudiantes a otras profesiones.

Creo que, en realidad, la suposición de que la oferta debería alcanzar a la demanda es acertada. El problema es que hay un desfase entre la creación de empleo y las personas que priorizan la educación para los trabajos. La programación es un trabajo nuevo y los padres de mi generación no nos lo contaron. Nunca lo consideraron porque la gente recién comenzaba a usar computadoras cuando iban a la universidad, y mucho menos a Internet.

La brecha entre la oferta y la demanda se amplió aún más porque hoy en día, algo así como 20 años creía que siempre habría empleos, se suponía que debíamos “seguir nuestra pasión”, y los trabajos se caerían de los árboles de trabajo y todos serían ricos y vivirían felices para siempre. . Puedo pensar en menos de 10 personas en mi clase de secundaria que decidieron qué tipo de trabajo querían obtener en ese momento en función de la demanda del mercado.

Con nuestra economía “nueva normal” y una mayor conciencia de las profesiones informáticas, creo que la brecha se cerrará lentamente.

Observación de 35 años de programación:

Creo que programar computadoras es una de las cosas más extrañas que los seres humanos pueden hacer. Está tan alejado de los tipos de cosas que los humanos evolucionaron para hacer en nuestros biomas nativos, me sorprende y es un testimonio de la adaptabilidad de los humanos que podemos hacerlo.

Aún así, varias personas no solo son comparativamente buenas en eso, sino que también disfrutan haciéndolo. (De hecho, ¡es poco probable que se vuelva bueno y siga siendo bueno si no lo disfruta!) Creo que estas personas están muy lejos “a un lado” en alguna curva de campana particular de alguna habilidad particular o conjunto de habilidades que tienen que hacer con la abstracción, la proyección, el análisis, las matemáticas, la creatividad, la visualización y algunas otras cantidades igualmente difíciles de precisar.

Las estadísticas de población simples dicen que el número de personas que se encuentran en el extremo más alejado de esa curva particular es limitado. Incluso si intenta poner a más personas en la misma profesión, es probable que no se ajusten al perfil que prosperará y que no se conviertan en programadores efectivos.

Otra forma de decirlo: creo que solo un pequeño porcentaje de la población está realmente bien adaptado para ser programadores de computadoras, y que este porcentaje está más limitado por la genética que por la educación. Lo que la educación puede hacer es sacar a la luz la predisposición inherente entre quienes la tienen pero que de otra manera no la descubrirían.