Cómo convertirme en ingeniero de software si ya tengo un doctorado en matemática pura y algunos conocimientos autodidactas de C ++ pero no tengo antecedentes formales de CS

Creo que Raúl Castro tiene razón; Si tiene un conocimiento básico de C ++ y estructuras de datos y algoritmos, no veo ninguna razón para que alguien no tome una foto con usted.

Sin embargo, no estoy seguro de que disfrutes de la ingeniería de software. No es esencialmente matemático; Se trata de un negocio muy humano, el proceso de construir sistemas con los que las personas interactúan. Creo que el trabajo en ciencia de datos puede resultarle mucho más interesante. Si bien el énfasis en la ciencia de datos en este momento está en el análisis estadístico y el LD, las aplicaciones de la combinatoria podrían ser críticas y le darían una ventaja. En un nivel base, debe aprender algo de R (un lenguaje estadístico) y python (con especial atención a numpy y scikit-learn).

Algunas notas

  1. Las estadísticas utilizadas no son (probablemente) las estadísticas que le enseñaron como estudiante de matemáticas, graduado o estudiante universitario; Se trata principalmente de métodos de investigación en ciencias sociales.
  2. En ingeniería de software o ciencia de datos, se encontrará con personas que han sido capacitadas para pensar de manera muy diferente a la suya. Puede adaptarse rápidamente, pero no cometa el error de pensar que estas personas no están bien informadas.

Finalmente, y lo digo con el debido respeto: me doy cuenta de que probablemente solo esté aclarando / especificando aquí, pero hay tres señales de alerta en su descripción que pueden causar cierta angustia o despido cuando se lo considera para un trabajo: “PhD”, ” matemática pura “y” Ivy League “. No te diré ni puedo decirte qué escribir, pero puedo ayudarte a ver cómo se leerá.

Esto es más crítico en la declaración de objetivos en su currículum (que debe ser de 1 página; no tiene experiencia en desarrollo profesional y no les importan los documentos que ha publicado en este nivel de revisión). Si declara “Soy un matemático puro entrenado en Hahvahd que, por un momento sin empleo, está dispuesto a entretener aclarando para su organización lo que no puede entender”, eso no va a salir bien. Por otro lado, si declaras “En mi trabajo de matemáticas, me encontré atraído por la aplicación de las matemáticas para resolver acertijos [esto sería para la ingeniería de software] / encontrar relaciones interesantes e importantes dentro de grandes conjuntos de datos …”, eso Salir mucho mejor.

Ah, y porque es mi área de investigación, un segundo “finalmente”: ¿por qué no convertirme en profesor / instructor de ciencias de la computación? La demanda en este momento es enorme, y no es como si fueras el primer matemático en hacer el cambio. Claro, no tienes mucha capacitación formal, pero probablemente puedas aprender rápidamente la teoría de la computación y los métodos formales, y si puedes enseñar programación a un nivel básico, ese es un comienzo fundamentalmente bueno. Ganará más dinero en software o ciencia de datos, pero se divertirá más como un profesional de CS. Soy 100% serio sobre esto; si está interesado, contácteme por correo electrónico (no es difícil de encontrar) y con gusto haré lo que pueda para ayudarlo.

Recomiendo contribuir a algún proyecto de software libre existente (por ejemplo, en github), e instalar y usar alguna distribución de Linux. Estudiar y luego contribuir a una base de código existente le enseñará mucho (elija proyectos de tamaño medio de aproximadamente cien mil líneas, algo más grande que lo que puede hacer solo, pero algo no tan grande como grandes proyectos multimillonarios de líneas como el kernel de Linux o Firefox o GCC). También necesita mucha práctica de programación (que por sí sola no es suficiente).

Necesita conocimiento en informática, no solo en C ++, porque la programación se trata de resolver problemas con computadoras (no de codificación). Lea la programación Enseñe usted mismo en diez años

Su doctorado en matemáticas le dio una sólida base matemática (que es útil en CS) y, lo que es más importante, la capacidad de aprender mucho por su cuenta. Ciertamente necesita aprender muchas cosas relacionadas con la programación (por ejemplo, Introducción a Algoritmos, el Libro del Dragón, Pragmática del lenguaje de programación, Sistemas operativos: tres piezas fáciles, algo sobre bases de datos, etc.).

Necesita aprender todo el conocimiento que un título de CS le enseñaría. Ciertamente, codificar solo en C ++ no es suficiente. Aprenderá mucho aprendiendo otros lenguajes de programación (comience leyendo SICP para aprender un poco de Scheme y practicarlo; luego lea R5RS, que es bastante matemático en la descripción de la semántica).

No sé si necesita un título de CS (pero ciertamente necesita el conocimiento que le enseñaría). En algunos países y para algunas empresas ese papel es importante.

Vea también la respuesta de Basile Starynkevitch a Si quiero codificar para vivir, ¿cuáles son los idiomas que debo aprender y las cosas que debo hacer?

IIRC, Knuth observó que la informática es matemática con un énfasis clave en los recursos y el tiempo. Dependiendo de su dominio matemático, está o no muy cerca de su experiencia; la idea clave es si su trabajo de doctorado obtuvo muchas pruebas constructivas (que están muy cerca de los algoritmos; sin embargo, la complejidad también importa mucho cuando se programa porque la explosión combinatoria es importante).

No aprenda lenguajes de programación solo por su utilidad industrial. Aprende también porque (como las teorías y dominios matemáticos) mejorarán tu forma de pensar. En ese sentido, Haskell, Ocaml, Common Lisp, Io, Coq te enseñarán mucho (incluso si por razones tristes la industria no los usa). Conocerlos mejorará incluso tus habilidades de programación en C ++.

El mejor consejo es comenzar aprendiendo a escribir código claro y bien estructurado en el estilo contemporáneo principal. Un obstáculo que puede enfrentar es la definición de soluciones de una manera accesible para el público en general que probablemente mantenga las soluciones si ha seguido adelante. Un buen punto de partida serán los libros y los recursos en línea que se centran en los estándares de escritura de códigos, el código limpio (en la vista general) y las mejores prácticas para la organización.

Lo siguiente ayudará, cada uno tiene problemas u omisiones. Buenos puntos de partida.

CppStyleGuide – ROS Wiki

Guía de estilo de Google C ++ (buen comienzo, con advertencias)

https://www.linkedin.com/pulse/2 … (Explica algunas cosas a tener en cuenta en la guía de estilo de Google)

¿Cuáles son algunas pautas para escribir código limpio, mantenible y escalable para aplicaciones a gran escala? (Pregunta de Quora)

Esos enlaces dan una idea de qué abrazar. Existe material de una naturaleza más enfocada. Vale la pena echar un vistazo a los libros con el título de Refactorización, Código limpio y Patrones de diseño.

Solo inténtalo.

Quiero decir: solicitar un trabajo.

Las empresas excepcionalmente modernas son exigentes, buscan unicornios (esa habitual recién graduada Suma Cum Laude, con 6 años de experiencia de campo y un par de nuevas empresas exitosas en su haber).

Otras grandes empresas, principalmente las más grandes, contratan cerebros. Estas compañías están listas para invertir construyendo un ingeniero de software. Y esto puede funcionar para ti. Sin ninguna cosa adicional.
Cualquier conocimiento adicional ayuda, pero no entraría en un idioma. pero en las metodologías de SE y el proceso de desarrollo (desarrollo ágil, garantía de calidad, automatización de pruebas). Eso te dará una verdadera ventaja.

Las empresas más pequeñas buscan personas que no tienen que entrenar. No es tu perfil. Pero también puedes intentarlo. Nunca sabes.

¡Creo que la clave de este tipo de cosas es mostrarle a la gente lo que puedes hacer! En qué proyectos, etc., ha trabajado o está trabajando.

Honestamente, creo que tu doctorado en matemática pura debería llevarte a la puerta de la mayoría de las empresas. Demuestra que eres muy capaz técnicamente, puedes pensar en problemas y llegar a soluciones de una manera muy analítica. Esta es la clave del software. Conocer la sintaxis de un idioma es una pequeña parte (creo que de todos modos, otros pueden estar en desacuerdo). Lo importante es poder resolver problemas. Su doctorado, su amor por los algoritmos, etc., lo demuestran.

Por lo tanto, mi consejo (como ingeniero de hardware, no SW, así que tenlo en cuenta) es trabajar en proyectos, de código abierto o simplemente en tus propios proyectos en casa. Piense en problemas para resolver y encuentre sus soluciones. Cuando vaya a entrevistas, puede usar esto para mostrar cómo combina todas sus habilidades.

Me gustaría reforzar que soy un experto en hardware, no un ingeniero de software, por lo que es posible que esté un poco fuera de lugar aquí, estoy seguro de que otros ofrecerán mejores respuestas.

¡Buena suerte!

Seán

More Interesting

¿Cuáles son algunos de los puntos de falla más comunes en una aplicación que conducen a la necesidad de escalar?

Cómo obtener experiencia práctica en la programación de sistemas distribuidos y a gran escala en su tiempo privado

¿Cómo es la transición de Stanford a la ingeniería de software en South Bay?

¿En qué consiste realmente la programación orientada a objetos? ¿Cuál es el punto aparte de la reutilización y la encapsulación?

¿Deberían los estudiantes actuales de CS / SE preocuparse por el creciente énfasis en CS y la codificación en las escuelas públicas?

¿Cuáles son todas las cosas que necesito saber sobre la programación de software si voy a inventar, por ejemplo, el próximo mejor Facebook?

¿Cómo es ser ingeniero de software en Egipto?

¿Qué decisiones acertadas de arquitectura de software tomó Facebook? ¿Qué elecciones y decisiones que se tomaron en los primeros días realmente valieron la pena a largo plazo?

¿Cuál es el tipo de computadora portátil más adecuado para ser utilizado por un estudiante de ingeniería de software?

¿Qué tipo de software fabrica IBM, Accenture o HP?

¿Qué libros debo leer para convertirme en un mejor ingeniero / desarrollador de software en general?

¿Qué lenguajes de programación se usan en Twitter?

¿Qué hace un integrador de sistemas de TI?

Si de repente encuentra que es extremadamente lento para su software comunicarse con la base de datos, ¿cuál es el posible problema?

¿Cuáles son los requisitos básicos para las pruebas de software?