La CS 344 de la Universidad Estatal de Oregón: Operating Systems I
Este curso era notorio por ser el punto en el que los estudiantes de Ciencias de la Computación declaraban una carrera diferente, volvían a tomar una clase por primera vez, o aprobaban. Y de acuerdo con los profesores del departamento que fueron a diferentes universidades, esto no era un fenómeno exclusivo de Oregon State.
El primer curso de una serie típica de dos cursos, Sistemas Operativos 1 tiene como objetivo educar a los estudiantes en varios principios de programación: llamadas al sistema, utilidades del sistema, hilos y comunicación entre procesos. Puede que me falten uno o dos elementos clave (las sugerencias son bienvenidas), pero lo que acabo de enumerar es esencialmente el punto principal del curso.
No fue el curso más difícil conceptualmente que tomé; Introducción al Análisis Real, un curso de matemáticas de nivel junior para estudiantes de matemáticas, fue mucho, mucho más complejo. Pero fue el más difícil por varias razones. Tal vez pueda aportar alguna idea para cuando tú u otras personas se enfrenten a este curso. Presta atención a mis errores para que no tengas que retomar la clase como lo hice yo :]
El lenguaje C: El curso era (y suele ser, a mi entender) completamente en C. C++ era lo que había aprendido en mis cursos de introducción a la informática, así que era con lo que estaba más familiarizado. Algunos de nuestros laboratorios en estos cursos de primer año nos familiarizaron con la programación embebida, así que tuvimos que aprender algo de C al margen. C y C++ son lo suficientemente parecidos como para que puedas desenvolverte sin problemas, pero no subestimes sus diferencias. Te parecerán triviales o sin importancia como estudiante de primer y segundo año, pero más adelante aprenderás que las diferencias importan. Ahora, C no es de ninguna manera una parte significativa de la dificultad del curso, pero hace una diferencia notable si usted don't ya saben el lenguaje. Además, si eres uno de los estudiantes que se trasladó desde otra universidad, es posible que te hayan enseñado Python o Java, lo que hará aún más difícil no sólo aprender los temas del curso, sino también introducir un lenguaje completamente nuevo al mismo tiempo. Estoy bastante seguro de que todas las universidades con un programa decente de CS (ciencias de la computación) requieren al menos un curso de Sistemas Operativos, lo que significa que es muy probable que utilices Linux; en consecuencia, te estarás haciendo MUY amigo del lenguaje de programación C. Así que por qué las universidades enseñan varios cursos de introducción a la informática en algo que no sea C++ o C cuando C va a ser claramente un lenguaje muy utilizado en un curso difícil más adelante en el plan de estudios, bueno, eso no lo entiendo. De nuevo, aprender un nuevo lenguaje no es un gran problema, sino el entorno en el que tienes que aprender C; ese entorno es el riguroso y largo curso de Sistemas Operativos.
Dicho esto, tengo un simple consejo:
Aquí estoy yo y mi maltratada edición internacional del clásico, El Lenguaje de Programación C, de Brian Kernighan y Dennis Ritchie (informático estadounidense) (el libro se conoce más casualmente como K&R C. Refiérete al libro así a un profesor o programador e inmediatamente te mostrarán un poco más de respeto). Entiendo lo que es ser un estudiante universitario sin dinero, pero la edición internacional es barata y fácil de encontrar. Como mínimo, pide prestada una copia o "encuentra" una versión digital y si no te gusta, no la compres. Pero si te gusta, y te gustará, cómpralo. Es ligero, conciso, no verboso, pero lo suficientemente detallado como para aprender rápidamente lo que necesita saber. Confíe en mí - consiga esto.
Utilizando su libro de texto del curso y el profesor: Esto es probablemente donde la mayoría de los estudiantes, como yo, fallaron. A diferencia de la carga de trabajo, a la que llegaré más tarde, este tema en particular es muy crítico. Yo clasifico a los estudiantes en función de una u otra forma de aprendizaje:
Aprendiz de lectura: Esto significa que eres bastante experto en el aprendizaje auditivo. No sólo puedes tomar buenos apuntes de un profesor, sino que también puedes concentrarte en lo que está diciendo mientras tomas dichos apuntes. Debido a las notas satisfactorias, te has forjado en la cabeza que nunca has utilizado los libros de texto, así que ¿por qué empezar ahora? Las clases del profesor, las horas de oficina, tus apuntes y tu ingenio te han salvado antes y te volverán a salvar. (La mitad de vosotros probablemente estáis sonriendo como lobos porque sabéis exactamente a lo que me refiero)
Aprendizaje de libros: Ya sea por pereza o por aburrimiento, no asistes a las clases. O bien no puedes madrugar lo suficiente para llegar a clase o tu aburrimiento se debe a que no puedes concentrarte en alguien que da una conferencia durante 50-120 minutos seguidos. Pero has llegado hasta aquí en la universidad, y normalmente es porque tienes una buena capacidad para leer libros de texto y utilizar Internet. Tus libros de texto o Stack Overflow siempre han contenido la información necesaria para que completes tus deberes y luego te vaya bien en los exámenes. Oye, puedes jugar a Angry Birds o dormir mientras estás en clase (o ni siquiera ir), y tienes la nota, así que ¿por qué cambiar las cosas ahora? El libro de texto para muchos cursos de Sistemas Operativos es el siguiente:
[Tomé prestada esta imagen de aquí]
Habría añadido una foto de mi propio ejemplar de este libro y mi preciosa cara pero en realidad no tengo este a mano en este momento, así que siento decepcionar. Ahora, aquí's la situación única con esta clase en la que tanto los estudiantes de conferencias como los estudiantes de libros se encuentran en problemas.
Los estudiantes de conferencias no leen el libro, o lo leen lo suficiente. El problema es que una GRAN parte del código que normalmente le llevaría horas, si no días, para completar las tareas está en realidad en este libro. Los estudiantes de lectura también han aprendido a, si es necesario, hojear eficientemente un texto y encontrar lo que necesitan. El problema es que este libro generalmente te hace juntar las piezas del rompecabezas, por lo que realmente no puedes saltar de un lado a otro. El libro está bien escrito, pero la letra es pequeña y hay MUCHO material. Cuando los estudiantes de la conferencia se dan cuenta de esto, ya se han hundido demasiado para recuperarse; la amplitud del conocimiento es demasiado para ponerse al día, incluso si sólo se trata de 2 semanas en el curso.
Los estudiantes de libros se preguntan por qué sienten que el código tarda tanto en escribirse. Han leído el libro, así que ¿qué se están perdiendo? Bueno, el libro está escrito de tal manera que asume que el lector no está tomando otras 3 clases y también haciendo malabares con la vida. Es MUCHA información de una sola vez, y está pensado para ser leído lentamente mientras se hacen pequeños ejercicios. Los profesores, que comprenden este hecho, resumen la información de los capítulos en unas pocas clases y proporcionan un código fundamental durante la clase. Así que, si no te presentas a la clase o te quedas dormido, por la razón que sea, vas a tener que escribir a mano el código que le llevó al profesor una hora, lo que probablemente te llevará 8 horas o más. No, copiar el código de las diapositivas de la clase NO será suficiente. El código de este curso es muy circunstancial y exige que sepas cómo aplicarlo hasta un nivel muy fino de detalle, por lo que normalmente tienes que prestar mucha atención a las palabras del profesor para aplicar el código correctamente.
Así que, si no averiguas cómo combinar eficazmente las notas de la clase y las pistas del profesor con el código fuente y los detalles de cómo funcionan las cosas del libro de texto, te vas a encontrar con un montón de problemas. O en una pila. Como quieras verlo.
Gestión del tiempo: De los estudiantes que obtuvieron A's en este curso, se reveló que en promedio pasaron al menos 20 horas a la semana en sus tareas. Puede que tú también pienses que dedicas 20 horas a la semana a las tareas, pero estoy hablando de 20 horas a la semana para UNA clase. Y esa es la advertencia que los profesores hacen a los estudiantes durante el primer día de este curso (el temido día del programa...) Aconsejan que si un estudiante está tomando otras clases técnicas (no optativas ligeras), que evite este curso y lo tome otro trimestre. Eso' es una advertencia estándar, del día de esta asignatura.
Así que, empiecen los proyectos para esta asignatura inmediatamente. No estoy bromeando. Si tienes tiempo libre entre clases, lee el libro de texto. Si te desconcentras en otras clases, empieza a dibujar ideas de diseño para tu proyecto para esta clase. Cuando llegues a casa y quieras comer primero, come mientras piensas en cuáles son exactamente los requisitos de la tarea y, uno por uno, cómo vas a resolverlos.
No eres tan bueno como crees: No es que te pases horas dándote la cabeza contra la pared porque estés atascado tratando de averiguar cómo funcionan los punteros; es porque te estás dando la cabeza contra la pared tratando de averiguar por qué tu programa no funciona. Y acaba por no funcionar porque no sabes cómo funcionan los punteros tan bien como crees.
Ese es el caso típico de este curso. Más sencillamente, su programa no compila o no actúa adecuadamente porque hay algún principio fundamental de programación que realmente no entiende, pero no es consciente de ello. No son las nuevas llamadas al sistema lo que está aprendiendo. Es porque en realidad eres un programador relativamente nuevo y tus prácticas de codificación están por debajo de lo normal, y al escribir código para Sistemas Operativos, serás puesto a prueba.
Dicho esto, acude a las horas de oficina cuando tu código no compila. Acude a un profesor asistente, a un amigo, a Quora o a Stack Overflow. NO hagas lo que la mayoría de las personas con mentalidad de ingeniero hacemos, que es quemarte hasta los huesos pasando horas tratando de averiguar cómo romper alguna pared de ladrillos con la que te has topado. Si después de 30 minutos sigues atascado, ¡no pasa nada! Como un buen programador, haz lo más eficiente y busca la ayuda de alguien que sepa más que tú. Lo sé, es una píldora difícil de tragar, pero cuanto antes lo aprendas, más fácil te resultará la vida. :] Tengo una cabeza gruesa, así que me llevó mucho más tiempo aprender eso que la mayoría 😛
Declaración final: Tuve una situación interesante que sólo amplió la dificultad de este curso. Mi profesor era un duro de la vieja escuela de Hewlett Packard (HP) que, en lugar de confiar en sus TA's para calificar las tareas, escribía manualmente miles de líneas de scripts BASH para probar tu código.
Has leído bien, lol. Donde normalmente tendrías la compasión de un TA para poner algunos puntos extra, o a veces conseguirías un TA que querría que aprendieras de los errores así que te preguntarían por qué crees que tu código falló aquí o allá; si te explicabas bien, normalmente ganarías algunos puntos de vuelta. La mayoría de las veces, los tutores no tienen más de 10-15 minutos por estudiante para calificar, así que se saltan muchas cosas y te ahorras los puntos. Pero no, no con este tipo. Pasó horas de su tiempo libre escribiendo scripts que ejecutarían tu código como lo haría un TA, pero lo haría impecablemente asegurándose de que NADA se pasara por alto. Era MUY fácil perder puntos y además desanimarse.
Pero en fin, espero que alguien pueda aprender de algunos de mis propios errores y así luego evitarlos cuando hagan el curso. Buena suerte!
Nota: me ha encantado este curso. Suspenderlo me hizo aprender mucho sobre mí mismo; como estudiante, como programador y como ser humano. Aprendí mucho sobre informática e incluso sobre mí mismo, y eso ya es otro post o A2A completamente. No sé si realmente "suspendí" el curso, sino que lo dejé en la octava semana porque no podía seguir el ritmo. En cualquier caso, no conseguí completarlo la primera vez, pero estoy bien con eso :]