Creo que gran parte del beneficio de ser un estudiante de ciencias de la computación es explorar varias áreas y partes diferentes de CS o ingeniería de software. Si estás pensando en ser un ingeniero de software después de terminar la escuela, hay una variedad de divisiones que vale la pena explorar:
- Construye algo tú mismo y construye algo con un grupo. Poder construir algo (una aplicación, un sitio web, un pequeño conjunto de scripts tontos que lo ayuda a equilibrar sus libros mensualmente) sin la ayuda de un programador adicional es satisfactorio y útil, y le dará la confianza para asumir proyectos usted mismo. el futuro. Vaya más allá de las tareas asignadas a algo que sea por diversión y para usted. Por otro lado, trabajar con otros en un programa más amplio es un arte sutil pero de importancia crítica. Ya sea que esté programando en pareja o dividiendo el trabajo en diferentes partes de código con interfaces establecidas, es importante poder comunicar la estructura, los objetivos y los problemas sobre un proyecto de programación grupal a otros. Estas son las habilidades que convierten la parte de ‘hablar mientras codificas’ en una entrevista de programación de lo más antinatural a lo más sencillo: son una parte necesaria de un trabajo. También puede aprender mucho de su grupo sobre mejores prácticas o nuevas estrategias que pueden ayudarlo en el trabajo futuro.
- Cree algo no trivial para el front-end y el back-end de un sistema. Este es un error que cometí como estudiante: me preocupaban mucho los algoritmos y el almacenamiento y la eficiencia, pero continuamente me quejaba de hacer que las interfaces fueran aburridas y molestas sin reconocer lo difícil e importante que es un arte para hacer un frente bueno, seguro y utilizable. -fin. Por otro lado, conozco muchos ingenieros de front-end que se resisten a la primera señal de un problema de computación o almacenamiento a gran escala. Si va a trabajar en cualquier área, necesitará poder comunicarse con las personas que se encargan de las otras partes, y es importante apreciar sus desafíos, saber cómo expresar sus necesidades en su idioma, y discernir cuán desafiantes (o imposibles) son sus solicitudes para ellos.
- Construye algo que sabes exactamente cómo construir y algo que no sabes cómo construir. El primero es un currículum / portafolio: debe tener un proyecto o dos sentados en un idioma en el que escriba bien con buena organización y documentación para demostrar que sí, puede escribir código que los humanos pueden leer y usar de manera eficiente. Por otro lado, en algún momento de tu vida de ingeniería de software, si estás en una trayectoria exitosa, alguien te va a pedir que hagas algo donde no conozcas el idioma o entiendas la estrategia de cómo construirlo bien. . Es importante que no tenga ansiedad por el rendimiento cuando eso sucede, y una excelente manera de prevenir esa ansiedad es mostrarse antes de ese momento que sí, puede aprender y descubrir las cosas que no sabe sobre la marcha y Construir algo imperfecto pero viable. Para mí, eso sería Javascript sentado sobre una base de datos SQL; para otros, eso sería implementar algo de aprendizaje automático en algunos datos que recopilaron. Esto no quiere decir que no tengas debilidades; solo significa que deberías poder decir “sí, no sé cómo hacerlo, pero por la gracia de StackOverflow voy a averiguarlo”.
- Tome una clase ridículamente aplicada y ridículamente teórica. Digo ridículo, por supuesto, que significa “fuertemente en ese extremo del espectro”: estas clases no son en absoluto inútiles. Una de las partes clave de ser un gran programador es poder equilibrar el conocimiento de la teoría detrás de cuál es la “forma correcta de hacerlo”: complejidad, estructuras de datos locas, etc., y comprender las realidades de la implementación y la memoria de la vida real. modelos. Personalmente, soy bastante culpable de tener mucha de la primera y bastante poca experiencia de este último tipo, lo que lleva a algunos confusos “por qué la solución ingenua es más rápida que la eficiente paralela”. Gran parte de la resolución de problemas en ingeniería de software funciona como un experimento científico, y los buenos experimentos científicos generalmente comienzan con un modelo más simple que la realidad (su clásico ‘pollo esférico’ en física, por ejemplo). Debe conocer ese modelo teórico de cómo funcionan las cosas para que pueda comenzar con una suposición decente sobre lo que funcionará bien. También debe saber que su computadora no funcionará como un modelo ideal y estar dispuesto a adaptarse en función de información nueva y más específica sobre el rendimiento de su sistema. Y la forma más eficiente de hacer esto, en mi opinión, es tomar un curso de algoritmos de nivel superior, así como un curso de sistemas operativos de nivel superior.
- Tómese el tiempo para configurar su entorno de programación. Mi única entrada no dicotómica es engañosamente más difícil de lo que parece. No digo que necesite saber emacs o vim (ambos son útiles si solo puede acceder de forma remota a una máquina y no puede transferir o montar archivos en su sistema local). Digo que debería dedicar un tiempo dedicado exclusivamente a configurar un buen entorno de desarrollo donde sepa qué atajos hacen qué, puede encontrar cosas relevantes en una base de código grande rápidamente, y su editor lo ayuda a detectar errores y escribir el código correcto como tanto como quieras. Si no se toma el tiempo para hacer esto temprano, lo cual no hice, puede quedar atrapado en malas prácticas y escribir código mucho más lento de lo necesario, simplemente porque nunca llegó a integrar su depurador, su administrador de paquetes configuró , y su complemento de corrector de sintaxis agregado. Parece una pérdida de tiempo, pero es una inversión de tiempo que vale la pena para cualquier proyecto no trivial, especialmente porque también le ahorrará tiempo el próximo proyecto.
Obviamente, hay más cosas que puede hacer para facilitar su vida como futuro programador. Todo esto también supone que su objetivo no es trabajar para siempre en ciencias de la computación puramente teóricas en una pizarra, aunque podría argumentar que las habilidades prácticas son útiles incluso para construir buenas intuiciones sobre qué problemas trabajar y qué estrategias utilizar. Personalmente lamento lo centrado en un par de detalles en los que estaba en la universidad; Espero haber transmitido correctamente lo importante que es explorar una variedad de cosas, incluso si no eres un experto en ellas al final de la escuela. Porque, seamos sinceros, no vas a ser un experto al final de la licenciatura; Va a tomar mucho más tiempo. Pero ahora es su oportunidad de construir una base para muchos tipos diferentes de conocimiento de CS. No tengas miedo de diversificarte, y no tengas miedo de probar cosas en las que eres malo. Todo ayuda en el camino.
- ¿Qué ramas puedo obtener en VIT Vellore con un rango de 32k?
- ¿Cuál es el problema con los bonos de TCS?
- ¿Cuáles son los conceptos necesarios que necesito aprender para convertirme en un programador o desarrollador web perfecto (nadie es perfecto, pero en gran medida)?
- ¿Cuáles son las instalaciones para estudiantes de primer año en Accenture?
- ¿Qué tan malo sería si eliminara mi cuenta de LinkedIn?