¿Cómo puede contratar a no ingenieros con el talento y la aptitud adecuados y convertirlos en grandes ingenieros sin pasar por un curso de grado?

Lo primero es elegir a las personas adecuadas. Las personas deben estar interesadas en cómo funcionan las cosas y cómo se pueden unir las cosas para hacer algo nuevo (sin embargo, no se requieren habilidades prácticas o experiencia). También tienen que estar dispuestos a investigar cosas ellos mismos y aprender cosas nuevas ellos mismos, porque las plataformas y tecnologías de programación cambian con frecuencia y sus habilidades iniciales serán obsoletas con unos pocos años. En general, también recomendaría a las personas más jóvenes, porque si las comienzas lo suficientemente jóvenes, se vuelve tan natural como caminar y hablar.

Muéstreles ejemplos muy simples y trátelos pacientemente hasta que comprendan conceptos básicos como variables, condiciones y bucles. Si no lo entienden con bastante rapidez, ríndete, no tienen el talento o la actitud.

Luego muéstreles subs y funciones, incluida una función iterativa para que puedan ver cómo no solo ahorran espacio, hacen que el código sea más legible y fácil de digerir, sino que también pueden producir una funcionalidad que llevaría una eternidad codificar sin iteración. Explicar cómo las variables locales y globales funcionan de manera diferente.

Entonces deberían poder adaptar lo que han aprendido a otros problemas de complejidad similar. Suponiendo éxito (es decir, aptitud), no debería haberlos detenido después de eso. Los sistemas complejos están formados por pequeños módulos simples. Déles acceso a muchos ejemplos: no es una trampa cortar y pegar código si sabe lo que hace y puede hacerlo funcionar (el código no vale más porque llevó más tiempo desarrollarlo).

Probablemente sea un buen momento para demostrar el poder de la orientación y abstracción de objetos. Muestre cómo significa que puede construir cada objeto para proporcionar las pequeñas funciones finitas necesarias para actuar sobre los datos definidos por el objeto, utilizando las habilidades que han desarrollado anteriormente, y cómo pueden usar esos objetos y otros, de los cuales no saben nada sobre el código interno, para construir una funcionalidad más compleja de forma rápida y sencilla.

Después de eso, solo lleva unos años de experiencia mejorar.

La programación en pareja puede ser excelente para esto. Descubrirá que muchas de las decisiones que se toman cuando está programando tienen tanto que ver con su conocimiento de CS como con su capacidad de escribir código fácil de leer y comprensible que esté bien probado. Una persona con habilidades no técnicas puede adquirir muchas de las habilidades necesarias para ser un miembro del equipo contribuyente rápidamente una vez que comprenda que tiene una perspectiva válida sobre la legibilidad y puede sugerir escenarios de usuario que necesitan ser probados.

Una vez que sientan que están contribuyendo, el mundo se sentirá menos como un país extranjero donde no conocen el idioma y comenzarán a reconstruir las cosas de manera acelerada. Entonces, la clave real es ayudarlos a obtener ganancias rápidas en el camino. Creo que te sorprenderá lo rápido que recogen las cosas.

Sin embargo, requiere bastante paciencia. Así que no te apresures. Va a pasar bastante tiempo antes de que sean un excelente ingeniero, pero tienen mucho valor para agregar en el camino.

El “estudiante” realmente lo apreciará también. Una de las formas más valiosas de compensación es aprender, por lo que es probable que se gane un poco de lealtad mientras tanto.

La opinión general tiende a ser que la programación requiere una cierta aptitud natural y varios investigadores han intentado diseñar pruebas para medir esa aptitud:

La prueba de Saeed Dehnadi y Richard Bornat es el estudio más conocido:

También vale la pena leer el artículo de Stuart Reges sobre el Examen de Colocación Avanzada en Informática: