Aquí está su lista de verificación:
1. Programación basada en pruebas. Diseñe el código, escriba las pruebas, implemente el código para cumplir con las pruebas.
2. Pruebas unitarias e integradas. Pruebe todos los componentes y la colección de componentes para asegurarse de que se comportan correctamente (es decir, no coloque o dé respuestas falsas) para valores de datos válidos, no válidos y extremos.
3. Aprender la programación funcional o de la pila, no importa cuál.
- ¿Cuál es el mejor lugar para aprender drupal?
- ¿Cuál es la forma más fácil y mejor de aprender a hablar alemán?
- Cómo aprender enormes cantidades de información.
- ¿Cuál es la mejor manera de aprender mandarín en línea?
- Cómo aprender de personas mentalmente fuertes.
4. Aprenda sobre Máquinas de estados abstractos, Tipos de datos abstractos y Redes de Petri algebraicas o Redes de Petri de colores.
5. Aprenda sobre futexes, mutexes, semáforos, canales, cierres giratorios, barreras y prevención de interbloqueos.
6. Utilizando 3, 4 y 5, desarrolle un programa paralelo que abarque múltiples procesos para simular los componentes individuales de alguna pieza de maquinaria no lineal. Una pieza de hardware se ejecuta en un proceso. Transmisión de energía y momento a través de canales. Los canales unidireccionales deben ser del lado del cliente. Los canales de dos vías deben ser de igual a igual. Todo debe mantenerse sincronizado, como sería en el objeto real. El comportamiento debe ser absolutamente constante, sin importar cómo se prioricen u optimicen los procesos individuales. Envíe esto como un prototipo para su revisión en github o en una de las horquillas de gforge.
7. Aprende las pautas del CERT para una programación segura en C.
8. Tome cualquier pequeño proyecto de código abierto orientado a la seguridad existente y haga una prueba contra el CERT primero, luego realice la prueba unitaria e integrada como antes. Solucione los problemas de seguridad identificados y cree parches. Un problema, un parche. Documente por qué es un problema y por qué el parche lo corrige. Envíe los parches individuales para la revisión / instalación del código por parte del mantenedor.
9. Se garantiza que un programa en tiempo real se ejecute a una hora precisa durante un período de tiempo preciso. Debido a que las ventanas suelen ser muy cortas, no es posible realizar muchas tareas de configuración y desmontaje. Quieres hacer lo máximo en muy poco tiempo. Los programas en tiempo real a menudo se encuentran en sistemas integrados donde la memoria es limitada y los bloqueos son malos. Escriba un programa que maneje su propio estado, no use memoria de pila, pueda recuperarse correctamente de los errores, puede ejecutarse sin la intervención del usuario por períodos prolongados (es decir, sin errores acumulativos) y puede hacer algo que no sea trivial. No importa qué.
10. Pruebe sus habilidades integradas escribiendo una aplicación de Android / Kindle que requiera menos privilegios, se ejecute de manera confiable en una variedad de dispositivos cuando se cambie a / desde, se cierre de manera poco ortodoxa y también se deje ejecutando durante una semana, lo cual no es trivial. que es altamente sensible (aunque no necesariamente en tiempo real) y resistente al mal comportamiento del hardware de proveedores menos reputados. Publícalo en Amazon Store y Google Store.
Una vez que haya completado esta lista de verificación, conocerá métodos formales, programación funcional / de pila, programación paralela, arquitectura cliente / servidor, arquitectura de igual a igual, sistemas en tiempo real, pruebas de software y una forma de programación extrema.
También participará en los créditos de dos proyectos (el suyo y el que envió correcciones de errores).
Usted sabrá cuándo ir en pesado y cuándo un toque ligero hará.
Es posible que haya aprendido una o más guías de estilo.
Esa es la mayor parte de los primeros dos años de un título de ingeniería de software, si no a la misma profundidad, a la profundidad que es útil en la práctica y tal vez mayor en áreas importantes como lograr que el código funcione correctamente.
Con eso en tu haber, particularmente el crédito establecido, tienes divisas en el mercado. Para usar la metáfora de los cinturones, la mayoría de los que completan un título universitario solo tienen una comprensión básica. Están listos para pasar de ser un cinturón blanco, pero un grado BSc / BS es demasiado ligero. Complete estos diez pasos y habrá probado su capacidad para aplicar ese conocimiento tres veces, lo que es nominalmente un estado de cinturón verde.
Sin embargo, es un poco mejor que eso. El pensamiento multi-paradigma es duro, el pensamiento multi-dominio no es más fácil y se necesita mucho para entender los métodos formales. Los programadores suelen ser malos en probar y seguir los protocolos de programación. Creo que no sería irrazonable sugerir que un novato que haya logrado todo esto haya merecido el cinturón rojo, aunque se podría argumentar que se necesita mucha más práctica de la que se indica aquí.
Se sabe que Google contrata a los mejores, pero dudo que tengan más de un puñado de codificadores de cinturón negro. Incluso para tales empresas, el verde al rojo es suficiente.
Sin embargo, un curso de pensamiento de diez pasos no te llevará a los gigantes. Necesitarás calificaciones académicas (que deberías navegar después de esto) y quizás un máster de investigación (MPhil en el Reino Unido).
En ese momento, tienes credibilidad en el mundo de los programadores, credibilidad en el mundo académico y muchas habilidades muy útiles.