¿Es normal tener un título en CS y no ser capaz de implementar algoritmos simples?

Si esto es normal o no, no viene al caso, ¿sí? Usted ha identificado que implementar algoritmos simples bajo presión de tiempo es una habilidad que necesita para tener éxito en las entrevistas de trabajo, por lo tanto, dedique el tiempo de práctica necesario para adquirir esa habilidad.

La mayoría de los estudiantes que se gradúan con un título universitario de CS no saben cómo codificar en un nivel en el que se les pagaría por hacerlo. La razón es bastante sencilla: no hay clases que les enseñen cómo hacerlo.

Los estudiantes que pueden codificar bien son autodidactas, antes o después de haber tomado clases de lenguaje de programación. Si ha invertido un par de miles de horas más de lo requerido para su tarea, aún no podrá implementar un árbol rojo-negro en la pizarra, pero al menos tendrá una cartera.

Para las preguntas de la entrevista rojo-negro-árbol-ish, solo tienes que practicar. O’Reilly tiene un libro “Algorithms in a Nutshell” que es bastante accesible. Simplemente siéntese durante unas semanas e implemente todos los algoritmos del libro. Entonces, al menos, podrá decirle al entrevistador: “Ah, recuerdo haber codificado esto, acertar con los consejos es complicado. Veamos lo que puedo recordar “en lugar de” ¿Qué es un árbol rojo-negro? “.

El 99.9% de los programadores nunca resuelven ninguna de las preguntas que le preocupan y lo hacen bien, puede que no funcionen para los gigantes de la tecnología, pero la ingeniería de software es un vasto campo donde la mayor parte del trabajo aún requiere poder integrar varios componentes y construir algo útil para resolver un problema del usuario. Tales preguntas tenían sentido cuando hace 20 años, las personas escribieron sus propias bibliotecas y la compilación de código tomó más de unas pocas horas y la memoria era una limitación seria. Hoy, cuando hay bibliotecas, IDEs, infraestructura escalable mejorada, no tiene ningún sentido hacer estas preguntas. Siempre que una persona tenga más de 100 IQ y pueda escribir un fragmento de código para poner elementos en un bucle y extraer datos de ellos según ciertos criterios con conocimiento de conjunto, árbol, lista, conjunto como estructuras de datos, esa persona puede hacer el trabajo. Esa es la razón por la cual algunas de las innovaciones más innovadoras están siendo realizadas por adolescentes que crean sus propias startups y pueden hacer las cosas rápidamente en lugar de preocuparse por estos conceptos teóricos pero prácticamente inútiles.

La informática no es una ciencia a diferencia de otros campos como física, química, matemáticas, etc., que se basan en ciertos principios. Si bien un médico con experiencia puede responder cualquier pregunta fundamental, la mayoría de los llamados informáticos no pueden garantizar que obtendrán la respuesta correcta a un problema de programación dinámica o minimax.

Tomo nota de la palabra “implementar” en lugar de “desarrollar”.

Sí, si tiene un título en Ciencias de la Computación, e incluso un mínimo de experiencia en programación, debería ser capaz de comprender un algoritmo y convertirlo en código. Esa es una habilidad bastante básica.

El verdadero conocimiento en informática (y más aún en ingeniería de software) proviene de encontrar algoritmos que se aplican a problemas particulares, seleccionarlos y adaptarlos según sea necesario.

Por ejemplo, si uno está desarrollando un sistema para despachar camiones, para la entrega de paquetes, hay mucha técnica anterior para la programación de despacho. Saber que existe, saber cómo encontrarlo, saber cómo seleccionar entre los algoritmos disponibles, ahora es un trabajo real, que requiere un conocimiento sustancial y al menos algo de experiencia. Desarrollar un nuevo algoritmo específico de problemas o heurístico, que impulse el estado del arte o el estado de la práctica, ahora es un trabajo serio, que requiere un conocimiento y experiencia serios.

Convertir un algoritmo o heurístico, expresado como fórmulas, diagramas de flujo o pseudocódigo, en código de ejecución. Eso realmente debería ser bastante sencillo. Si no puede hacer eso, sugiere que en realidad no comprende los algoritmos, y eso es una deficiencia grave.

Los algoritmos no son un deporte para espectadores. Debe practicarlos para poder descubrir la forma correcta de pensar sobre los problemas y la forma correcta de resolverlos; si el algoritmo funciona o no es solo una pieza pequeña en comparación con la complejidad espacio / tiempo.

Han aparecido muchos sitios que ofrecen preguntas gratuitas con explicaciones de las soluciones en múltiples niveles de excelencia. O haga un desafío de topcoder o algo similar para trabajar en la resolución general de problemas de programación.

¿Se puede desarrollar software?

Parece que la respuesta es no. Si obtuviste un título, implica que no solo sabes cómo sino que eres realmente bueno en eso.

A menos que haya comprado un certificado en lugar de ganarlo, tengo que preguntarme cómo se graduó. ¿Te gusta la programación? ¿Debes tener algunas habilidades que no brillaban ese día?

¿Podrías antes del grado o realmente te hicieron retroceder? Si no retrocediste, puedes mejorar, pero parece una pérdida de esfuerzo si no entiendes nada.

Si puede desarrollar software en un par de idiomas, probablemente fue un problema de estilo de comunicación o nerviosismo. Si no puedes, entonces tienes problemas. Problemas caros.

¿Se pueden hacer fuera de una entrevista?

Si es así, el problema no es la capacidad de su algoritmo, sino la entrevista.

Desafortunadamente, estas pruebas de programación de pizarra blanca parecen bastante comunes, con suerte no por mucho tiempo, pero por el momento, solo tendrá que practicar haciéndolas.

Algunos empleadores parecen querer buscar personas que hayan ensayado técnicas de entrevista, en lugar de tener capacidad de programación real.