Me parece que la industria de la programación está en una carrera hacia el fondo. Si tomamos las prácticas de:
- No tomarse el tiempo para implementar las mejores prácticas.
- Usar el código de otras personas tanto como sea posible (código personalizado como responsabilidad)
- Uso de idiomas cada vez más altos para mejorar la productividad.
- "Herramientas" de desarrollo basadas en GUI que simplifican enormemente la "programación" y no requieren que la gente entienda la plomería detrás del código
Estas cosas implican para mí que estamos en una carrera para convertirnos en cualquier otro empleado de oficina. Es del interés del empleador que las cosas no requieran habilidad (más fácil de reemplazar), que las cosas se construyan previamente (menos tiempo de proyecto).
Mi punto aquí es que a) ¿hay una desalineación entre la habilidad y los intereses económicos del empleador? y b) si es así, ¿cómo lo mitiga para hacer cumplir las normas profesionales?
Respuestas:
Creo que has hecho una pregunta muy conmovedora.
La creación de herramientas de codificación GUI deja a los programadores sin trabajo tanto como los robots dejan a los trabajadores de la línea de ensamblaje sin trabajo. En mi opinión, si bien hay una pérdida de empleos, también hay un cambio en la ubicación de los próximos trabajos.
La tecnología para realizar una tarea cambia, pero la tarea aún debe completarse: los automóviles aún deben fabricarse / ensamblarse antes de poder conducirlos; el código / lógica de negocios aún necesita ser reunido para que la aplicación funcione.
Los cambios en la tecnología presentan opciones para los programadores: aprenda programación basada en GUI o herramientas de GUI de programa ... o ... algo completamente diferente.
Puede haber una desalineación entre las habilidades de los empleados y los intereses del empleador, pero no por mucho tiempo, especialmente si el empleador es inteligente. Por lo tanto, lo mejor para el empleador y el empleado es perseguir lo que es para su beneficio mutuo. Pero uno inevitablemente estará por delante del otro. Ojalá seas tú (-:
Los mejores deseos,
KM
fuente
A las tendencias que mencionas agregaría una más, que en mi humilde opinión las explica:
Hay muchos más programadores (necesarios) que nunca.
La cantidad de tareas que requieren o incluyen programación es cada vez mayor, y en una tasa aún mayor que la cantidad de programadores. Hoy en día hay varios microchips en un automóvil promedio. En 5 años puede haber un chip en su refrigerador y en su tostadora. ¿En 10 años, su ropa interior? ... Y alguien necesita producir todo ese software para que funcione. Por lo tanto, se hacen todos los esfuerzos posibles para automatizar lo que sea automatizable y para mejorar la "productividad" (como se defina). Y se reclutan más y más cerebros frescos.
Esto implica que la mayoría de los programadores activos de hoy en día no tienen experiencia y / o están mal preparados para su trabajo. Se necesitan varios años para alcanzar un nivel adecuado de experiencia y se requiere un aprendizaje constante para mantenerse allí. La conclusión es que cada vez más trabajos de programación son cada vez menos desafiantes. Pero todavía hay suficientes desafíos para cualquiera que los esté buscando .
Déjame jugar al abogado del diablo contra tus puntos anteriores:
Mucha gente no, mucha gente lo hace. Hace diez años, cuando descubrí por primera vez las pruebas unitarias y el enfoque ágil, ninguno de mis colegas tenía la menor idea de lo que era. Hoy en día es un material casi estándar en las universidades, por lo que muchos recién graduados ya lo entienden.
¿A diferencia de qué? ¿Reinventando la rueda? ¿O usar el código de otras personas para evitar eso?
Creo que es importante tener en cuenta que se nos paga (principalmente) para resolver problemas, y escribir código no es el final, solo el medio para eso . Si se puede resolver un problema sin escribir una sola línea de código, todavía hace feliz al cliente. Especialmente si de esta manera logramos producir una solución más confiable de manera más rápida y económica. No veo ningún problema con eso.
¿A diferencia de codificar todo en el ensamblaje? ;-)
En mi humilde opinión, cualquier herramienta puede ser mal utilizada. Lo que no quiere decir que los constructores de GUI fueran necesariamente perfectos o incluso buenos, la mayoría (o al menos algunos) de ellos son utilizables dentro de sus límites. Pero si alguien no conoce esos límites, ¿es un problema de la herramienta o de su usuario?
En general, creo (aunque no tengo evidencia que lo demuestre) que en los días de la tarjeta perforada y el código de máquina, aproximadamente la misma proporción de código existente era horrible como ahora, solo ambos
fue mucho, mucho menos.
Ahora, con Internet y el Daily WTF, nos exponemos a los peores ejemplos día a día. Es un poco como ver todas las noticias sobre terrorismo y terremotos y celebridades divorciadas, y gritar lo peligroso e inmoral que se volvió este mundo.
fuente
Resume la situación correctamente, pero malinterpreta completamente el significado.
A medida que el software se vuelve más poderoso, las tareas que toma en escala con él. Por lo tanto, puede que no sea necesario hoy en día ser un programador de bases de datos para crear una base de datos de contactos telefónicos cuando puede usar Access. Y puede que no sea necesario ser un programador web para configurar un blog cuando simplemente puede ir a WordPress. Pero, mientras que hace 15 años sería necesario ser un programador para hacer esas cosas, lo que los programadores hacen ahora es un orden de magnitud mayor que lo que se podía hacer hace 15 años.
Permítanme decirlo de esta manera, dentro de 100 años, será trivial configurar un sistema tan complejo como Facebook o Google. No estoy hablando de sus páginas web, me refiero a sus centros de datos. Cualquiera podrá hacerlo. Se integrará en los teléfonos, suponiendo que aún los usemos. PERO, todavía habrá programadores, y si bien es posible que no estén trabajando en sistemas tan "triviales" dentro de 100 años, estarán trabajando en sistemas mucho más complejos y sofisticados que nadie aquí puede siquiera comenzar a comprender su alcance y escala. Y esos sistemas, como los de ahora, estarán fuera del alcance del empleado de oficina promedio porque algunas personas, llamadas programadores, optarán por especializarse en llevar la tecnología de esa época a sus extremos.
fuente
He leído ese tipo de cosas durante cuarenta años, y no estaba en el comienzo de las predicciones. No ha sucedido todavía.
COBOL era la herramienta de desarrollo original destinada a eliminar la necesidad de programadores de negocios, y era un lenguaje de nivel mucho más alto que el ensamblador. Las bibliotecas de códigos (para evitar tener que escribir el propio código) son de una antigüedad similar.
De vez en cuando, surge algo que permite a los no programadores hacer algo más como el trabajo de programación. Hubo los "idiomas de cuarta generación" de los años ochenta, hojas de cálculo elegantes como Excel, generadores de informes y similares. Lo que han hecho de manera uniforme, si tienen éxito, es eliminar parte del trabajo de programación y permitir que los programadores hagan otras cosas más interesantes.
Este patrón no durará para siempre, pero voy a necesitar algo más que argumentos teóricos y predicciones para convencerme de que la programación realmente va cuesta abajo.
El problema de COBOL a las herramientas de desarrollo modernas es que no reemplazan la capacidad de tomar una especificación inexacta y convertirla en algo preciso y útil. Esa es la capacidad fundamental de los programadores, y por qué no nos vamos a ir por mucho tiempo.
fuente
Los programadores de ensamblaje y FORTRAN probablemente dijeron lo mismo cuando la programación estructurada y los intérpretes generalizados entraron en escena.
Al final del día, el software es una creación destinada a automatizar algo que previamente se había hecho a mano. Un departamento de contabilidad en una corporación moderada habría requerido previamente docenas de personas, ahora todo ese trabajo se puede lograr con el trabajo de uno o dos. Como resultado, las publicaciones de objetivos se han movido y ahora esperamos ese estándar de capacidad adicional de un contador.
Pixar tarda más en reproducir películas que nunca. A pesar del enorme aumento en la velocidad de computación, junto con él, los animadores han exigido una complejidad y detalles cada vez mayores en sus escenas. La animación de calibre Toy Story no es aceptable en 2010 como lo fue en 1995. Como sus herramientas han avanzado, también lo han hecho sus capacidades y, por lo tanto, sus expectativas.
Cuando arrastrar y soltar u otras metodologías de programación son comunes, el mundo exigirá soluciones a problemas aún más desafiantes y complejos, y necesitarán programadores que usen esas nuevas y sofisticadas herramientas para resolverlos. Los postes de meta se moverán.
fuente
Si bien estoy de acuerdo con la mayoría de las respuestas que señalan que aún habrá mucho trabajo por hacer, le daré una respuesta diferente para que considere:
Sí lo es, y DEBE ser
Estoy aquí para diseñar una solución a los problemas que otros no pueden. Cualquier cosa en el conjunto de herramientas que me quite el tiempo de resolver problemas para lidiar con todos los pequeños detalles de cómo implementar mi diseño es un desperdicio.
La única razón por la que temería ir a un lenguaje de nivel superior o una herramienta más simple y abstracta es que esas herramientas a menudo hacen suposiciones que se interponen en mi camino y requieren mi tiempo para resolver las suposiciones para obtener la implementación deseada.
Siempre hay más problemas para resolver que buenos solucionadores de problemas. Incluso si toda la cadena de desarrollo se volviera tan simple que los niños en edad preescolar podrían usarla, la mayoría de las soluciones diseñadas serían insuficientes o lo suficientemente ineficientes como para que las personas pagaran por una solución mejor porque la mayoría de las personas son malas para ver la solución correcta a los problemas con todos los casos límite y qué pasa si necesita considerar para hacer una buena solución.
Nuestro trabajo es resolver los problemas mejor que la mayoría del resto, la complejidad de la cadena de herramientas no es terriblemente relevante en la vista general, siempre y cuando se salga del camino y le permita construir y construir algo bueno.
fuente
Aunque las tecnologías de programación pueden cambiar, la complejidad subyacente de un producto de software sigue ahí. Si el software se pudiera escribir completamente usando diagramas o diagramas de flujo (o alguna otra forma 'simple'), toda la complejidad del software aún debe entenderse y abordarse. Por esa razón, es importante que los empleadores cuenten con programadores que conozcan los productos de la compañía de manera exhaustiva para actualizarlos o agregar nuevas funciones. Y a los empleados les puede llevar bastante tiempo aprender un producto de software.
fuente
No importa lo que pueda automatizar o sacar de la plataforma, la mayoría del software empaquetado se divide en dos categorías:
Supongo que olvidé el tercero. Es software de productividad estándar (correo electrónico, navegador, procesador de textos, etc.). El software en la categoría uno lleva a las empresas a contratar desarrolladores de software para personalizar el software estándar (si es posible). El software de categoría 2, bueno también podrían contratar a un desarrollador porque la persona que conoce ese sistema personalizable por dentro y por fuera es muy buscada (piense en SAP, PeopleSoft, etc.) o una raza moribunda (piense en cualquier sistema similar a SAP y PeopleSoft que no tener la misma penetración en el mercado).
Siempre habrá una necesidad de desarrolladores. Lo que veo es que más de lo que solía ser trabajo manual, tedioso y repetitivo se ha automatizado (piense en escribir código para acceder a los datos a mano en lugar de usar un O / RM). Esto permite a los desarrolladores entregar más valor a la empresa con menos esfuerzo.
fuente
No tomo tus argumentos:
excepto eso.
La reutilización de código es una mejor práctica. El código usado se prueba. Por supuesto, debe usar código de buenas fuentes, que muchos mantienen y usan.
La productividad no es mala per se, ¿verdad?
Si la herramienta hace el trabajo: utilícela. Si no: rechazarlo. Si la promesa se cumple, y la gente realmente no necesita entender el código, ¡bien hecho! ¿Parece decir que esta es una promesa que no se cumple?
(Los números aquí se vuelven a procesar automáticamente incorrectamente. :))
fuente
La programación visual no es menos válida o merece menos desprecio que la programación basada en texto.
Existen ciertos déficits y desafíos cuando se programa visualmente, pero la fontanería de componentes subyacentes es potencialmente peligrosa cuando se ignora y no está monopolizada por los componentes visuales y, lo que es más relevante, por los diseñadores visuales. Las tuberías subyacentes ignoradas son un riesgo para cualquier desarrollo.
Si tiene la oportunidad de probar Labview, puede ver el potencial (o incluso una variante especializada en el entorno Lego NXT). Si bien no carece de defectos o defectos, existen beneficios heredados. Ver es creer.
fuente
Las prácticas de programación no solo aumentan la productividad y reducen los costos para ciertos tipos de desarrollo (su carrera hacia el fondo), sino que también aumentan las capacidades de aplicación y las expectativas del cliente (fomentando así una carrera hacia la cima). Sea testigo de los bonos que Goole y Facebook están pagando para obtener los mejores tecnólogos.
fuente
No hay otra profesión que se ocupe de la ingeniería de la existencia que se esfuerce tanto por cambiar como la programación. Tan pronto como simplifica algo, simplemente abre una lata a nuevos problemas que generan nuevas ideas.
Por lo tanto, no estropearía los esfuerzos de otras personas para compartir código y soluciones a fin de ayudarnos a avanzar hacia nuevos desafíos, ideas y experiencias de usuario con las malas prácticas, los malos hábitos y los modales de los profesionales individuales sin humanismo.
fuente
Si tomamos las prácticas de:
WTF? ¿Querías decir que esta lista es inconsistente? Las listas deben venir del mismo lado para cada elemento en lugar de cambiar de un lado a otro sin previo aviso. Por lo tanto, su lista debería leer:
Si tomamos las prácticas de:
fuente