No puedo responder su pregunta directamente de la manera que desea porque no puedo recomendarle hacer una u otra.
Soy un programador autodidacta que tiene un título universitario en Humanidades clásicas y un título de Juris Doctor . Comencé a programar cuando tenía 11 años en una computadora TRS80 e hice pequeños proyectos paralelos a lo largo de mi vida. Después de practicar leyes durante cinco años, dejé la ley y entré en un programa de maestría en CS. Terminé renunciando temprano porque un divorcio requería mi empleo inmediato. Casi había terminado la maestría en CS (quizás 3 clases y una tesis / proyecto restante) cuando obtuve mi primer (y actual) trabajo como ingeniero de software (llevo aquí más de 3 años).
Diría que las cosas en las que tendrá que pensar son:
- Cómo explorar los datos para elegir un algoritmo de aprendizaje automático
- ¿Cuál es la nueva actualización del algoritmo de Google?
- ¿Cómo se fragmentan los archivos en el hadoop en 64 MB o 128 MB? ¿Cuál es el algoritmo utilizado para fragmentar los archivos?
- ¿Cómo funciona la matriz internamente en Java?
- ¿Cuáles son las fuentes que pueden proporcionar múltiples metodologías a partir de un nivel básico para resolver problemas algorítmicos?
- Mostrar dominio de sus lenguajes de programación de destino: poder responder preguntas comunes de entrevistas sobre ellos
- Mostrar conocimiento básico de algoritmos y estructuras de datos. Ser capaz de hacer análisis O (n) básicos de algoritmos. Conocer las ventajas y desventajas de las estructuras de datos (por ejemplo, cuáles son los pros y los contras de la lista vinculada frente a la matriz).
- Ser capaz de codificar de forma rápida y segura (en la pizarra) problemas de programación comunes en sus idiomas de destino
- Buen conocimiento de los principios de diseño orientado a objetos y la capacidad de aplicarlos para resolver problemas. Sea capaz de distinguir entre el diseño orientado a objetos buenos y malos y sugerir mejoras cuando sea necesario.
- Alguna demostración de buena programación orientada a objetos en contexto profesional o de proyecto paralelo. Si es un proyecto paralelo, deberá hacer algo para aumentar su credibilidad. (Comencé un negocio por diversión para anodizar tornillos de titanio e hice un proyecto paralelo programando un arduino y una computadora para hablar con escalas lineales económicas para proporcionar un DRO barato para la fresadora de mi empresa). El negocio nunca despegó realmente en términos de rentabilidad, pero mi trabajo allí me ayudó en mi búsqueda de empleo.
Realmente necesitas poder hacer todas estas cosas. Ser autodidacta probablemente será más débil en los principios de diseño orientado a objetos, así como en algoritmos / estructuras de datos. Si ese es el caso, concéntrese en esas deficiencias. Sin embargo, probablemente deba poder hacer todo lo anterior.