Ciencias de la Computación: ¿Cuáles fueron las clases más difíciles que tomaste como estudiante de CS?

CS 344 de la Universidad Estatal de Oregón: Sistemas operativos I

Este curso fue notorio por ser el punto donde las especialidades en Ciencias de la Computación declararon una especialidad diferente, retomaron una clase por primera vez o aprobaron. Y de acuerdo con los profesores del departamento que asistieron a diferentes universidades, este no fue un fenómeno exclusivo del estado de Oregon.

El primer curso en una serie típica de dos cursos, Sistemas operativos 1 tiene como objetivo educar a los estudiantes sobre varios principios de programación: llamadas al sistema, utilidades del sistema, hilos y comunicación entre procesos. Es posible 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 conceptualmente más difícil 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 desafiante por una variedad de razones. Tal vez pueda arrojar algo de información para cuando usted u otros se enfrentan 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 fue (y típicamente es, según tengo entendido) completamente en C. C ++ fue lo que aprendí en mis cursos introductorios de ciencias de la computación, por lo 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 integrada, por lo que tuvimos que aprender algo de C en el lateral. C y C ++ están lo suficientemente cerca como para que puedas salir bien, pero no subestimes sus diferencias. Parecerá trivial o sin importancia como un estudiante de primer año y segundo año, pero luego aprenderá que las diferencias son importantes . Ahora, C de ninguna manera es una parte significativa de la dificultad del curso, pero hace una diferencia notable si aún no conoce el idioma. Además, si eres como uno de los estudiantes que se transfirieron de otra universidad, es posible que te hayan enseñado Python o Java, lo que hará que sea aún más difícil no solo aprender los temas del curso, sino también estudiar todo nuevo lenguaje al mismo tiempo. Estoy bastante seguro de que todas las universidades con un programa de CS (informática) decente requieren al menos un curso en Sistemas Operativos, lo que significa que es muy probable que estés utilizando Linux; en consecuencia, se volverá MUY amigable con el lenguaje de programación C. Entonces, ¿ por qué las universidades enseñarían varios cursos introductorios de CS 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 está más allá de mí. Nuevamente, aprender un nuevo idioma no es un gran problema: era el entorno en el que tenía que aprender C; ese entorno es el curso riguroso y lento en sistemas operativos.

Dicho esto, tengo algunos consejos simples:

Aquí estoy yo y mi edición internacional abusada del clásico, El lenguaje de programación C de Brian Kernighan y Dennis Ritchie (científico informático estadounidense) (el libro se conoce más informalmente como K&R C. Consulte el libro así a un profesor o programador y inmediatamente te mostrarán un poco más de respeto). Entiendo lo que es ser un estudiante universitario en quiebra, pero la edición internacional es barata y fácil de encontrar. AL MENOS, pida prestada una copia o “encuentre” una versión digital y, si no le gusta, no la compre. Pero si lo hace, y lo hará, cómprelo. Es ligero, conciso, no detallado, pero lo suficientemente detallado como para que aprenda rápidamente lo que necesita saber. Confía en mí, consigue esto.

Utilizando el libro de texto del curso Y el profesor: Probablemente aquí es donde la mayoría de los estudiantes, como yo, fallaron. A diferencia de la carga de trabajo, que trataré más adelante, este tema en particular es muy crítico. Clasifico a los estudiantes como sobresalientes en una forma de aprendizaje u otra:

Lecture Learner : Esto significa que eres bastante experto en el aprendizaje auditivo. No solo puede tomar buenas notas de un profesor de conferencias, sino que también puede concentrarse en lo que está diciendo mientras toma dichas notas. Debido a las calificaciones satisfactorias, ha fortalecido en su cabeza que nunca ha usado los libros de texto antes, entonces, ¿por qué comenzar ahora? Las conferencias del profesor, las horas de oficina, sus notas y su ingenio solo lo han salvado antes y lo salvará nuevamente. (La mitad de ustedes probablemente sonríe lobunamente porque saben exactamente a qué me refiero)

Aprendiz de libro : ya sea por pereza o por aburrimiento, no asiste a conferencias. O no puedes levantarte lo suficientemente temprano como para llegar a clase o tu aburrimiento surge de no poder concentrarte en alguien dando una conferencia durante 50-120 minutos seguidos. Pero has llegado tan lejos en la universidad, y generalmente es porque tienes una capacidad bastante buena 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 tu tarea y luego te vaya bien en los exámenes. Oye, puedes jugar a Angry Birds o dormir mientras estás en clase (o incluso no ir), y obtienes la calificación, así que ¿por qué cambiar las cosas ahora?

Aprenda a ser tanto aprendiz de clase como aprendiz de libro : el libro de texto para muchos cursos sobre sistemas operativos es el siguiente:

[Tomé prestada esta imagen de aquí]

Hubiera agregado una foto de mi propia copia de este libro y mi hermosa cara, pero en realidad no tengo esta a la mano en este momento, lamento decepcionarla. Ahora, aquí está la situación única con esta clase donde tanto los estudiantes de lectura como los estudiantes de libros se encuentran en problemas.

Los estudiantes de lectura no pueden leer el libro, o lo leen lo suficiente. El problema es que una GRAN porción de código que normalmente llevaría horas, si no días, para completar las asignaciones en realidad están en este libro. Los estudiantes de la conferencia también han aprendido cómo, si es necesario, hojear un texto de manera eficiente y encontrar lo que necesitan. El problema es que ESTE libro generalmente te hace unir las piezas del rompecabezas, por lo que realmente no puedes saltarte. El libro está bien escrito, pero la fuente es pequeña y hay MUCHO material. Para el momento en que los estudiantes de la Conferencia hayan descubierto esto, ya se han hundido demasiado para recuperarse; la amplitud de conocimiento es demasiado para ponerse al día, incluso si solo hay 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, ¿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 hace malabares con la vida. Es MUCHA información a la vez, y está destinado a leerse lentamente mientras se realizan muchos ejercicios pequeños. Los profesores, entendiendo este hecho, en realidad resumen los capítulos de información en solo unas pocas conferencias y luego proporcionan un código fundamental durante la conferencia. Entonces, si no se presenta a clase o zona, por cualquier razón, va a escribir a mano el código que le tomó al profesor una hora, lo que probablemente le tomará 8 horas o más. No, copiar el código de las diapositivas de la conferencia NO será suficiente. El código para este curso es muy circunstancial y exige que sepas cómo aplicarlo a un nivel de detalle muy fino, por lo que generalmente debes prestar mucha atención a las palabras del profesor para aplicar el código correctamente.

Por lo tanto, si no sabe cómo combinar de manera efectiva las notas de clase y los consejos del profesor con el código fuente y los detalles de cómo funcionan las cosas del libro de texto , se encontrará en un montón de problemas. O apilar. Sin embargo usted quiere mirarlo.

Gestión del tiempo : de los estudiantes que obtuvieron una A en este curso, se reveló que, en promedio, pasaron al menos 20 horas a la semana en sus tareas. Puede pensar que también pasa 20 horas a la semana en tareas, pero estoy hablando 20 horas a la semana para UNA clase. Y esa es en realidad la advertencia que los profesores dan a los estudiantes durante el primer día de este curso (temido día del programa de estudios …) Aconsejan que si un estudiante está tomando otras clases técnicas (no electivas livianas), eviten este curso y tomen otro término. . Esa es una advertencia estándar del primer día para este curso.

Entonces, comience los proyectos para este curso de inmediato . No estoy bromeando. Si tienes tiempo libre entre clases, lee tu libro de texto. Si se desconecta en otras clases, comience a dibujar ideas de diseño para su proyecto para esta clase. Cuando llegues a casa y quieras comer primero, come mientras piensas para qué son exactamente los requisitos de la tarea y, uno por uno, cómo vas a resolverlos.

No eres tan bueno como crees que eres: no es que pases horas golpeándote la cabeza contra la pared porque estás atascado en tratar de descubrir cómo funcionan los punteros; es porque te golpeas la cabeza contra la pared tratando de descubrir por qué tu programa no funciona. Y termina sin funcionar porque no sabes cómo funcionan los punteros tan bien como crees que lo hiciste.

Ese es típicamente el caso con este curso. Más simplemente, su programa no se compila o no actúa adecuadamente porque hay algún principio fundamental de programación que realmente no comprende, pero no es consciente de ese hecho. No se trata de las nuevas llamadas al sistema de las que estás aprendiendo. Es porque en realidad eres un programador relativamente nuevo y tus prácticas de codificación son deficientes, y al escribir código para sistemas operativos, serás puesto a prueba.

Dicho esto, vaya al horario de oficina cuando su código no se compila. Vaya a un Asistente de enseñanza, amigo, Quora o Desbordamiento de pila. NO hagas lo que la mayoría de las personas con mentalidad de ingeniería hacemos, que es quemarte hasta el suelo pasando horas tratando de descubrir cómo romper un muro de ladrillos que has golpeado. Si te quedas quieto después de 30 minutos, ¡está bien! Como un buen programador, haga lo que sea más eficiente y busque la ayuda de alguien que sepa más que usted . Lo sé, es una píldora difícil de tragar, ¡pero cuanto antes lo aprendas, más fácil será en tu vida! :] Tengo una cabeza gruesa, así que me tomó mucho más tiempo aprender eso que la mayoría 😛

Declaración final : tuve una situación interesante que solo amplificó la dificultad de este curso. Mi profesor era un imbécil de la vieja escuela de Hewlett Packard (HP) que, en lugar de confiar en sus TA para asignar tareas, escribiría manualmente miles de líneas de scripts BASH para probar su código.

Lo has leído correctamente, jajaja. Donde normalmente tendrías la pena de un TA para ganar algunos puntos extra, o algunas veces obtendrías un TA que quisiera que aprendieras de los errores para que te pregunten por qué crees que tu código falló aquí o allá; Si te explicaras bien, normalmente ganarías algunos puntos. La mayoría de las veces, los TA no tienen más de 10-15 minutos por alumno para calificar, por lo que se saltan muchas cosas y te ahorras puntos. Pero oh no, no con este chico. Pasó horas de su tiempo libre escribiendo guiones que ejecutarían su código como lo haría un TA, pero lo haría sin problemas asegurándose de que NADA se pasara por alto. Fue MUY fácil perder puntos y además desanimarse.

Pero de todos modos, espero que alguien pueda aprender de algunos de mis propios errores y así evitarlos cuando tomen el curso. ¡Buena suerte!

Nota: me encantó este curso. No hacerlo 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 solo es otra publicación o A2A por completo. No sé si realmente “reprobé” el curso, por mucho que lo dejé caer durante la octava semana porque simplemente no podía seguir el ritmo. De todos modos, no pude completarlo la primera vez, pero estoy de acuerdo con eso:]

Según mi experiencia, el curso más difícil que tomé fue el CS 146 de la Universidad Estatal de San José: Estructuras de datos y algoritmos. El libro de texto que utilizamos fue Introducción a los algoritmos (CLRS).

Este es el primer curso de informática que una persona tomaría en mi universidad. Normalmente, las personas que entran en esta clase tendrían un mínimo de dos cursos tomados (CS46A: Introducción a la programación y CS46B: Introducción a las estructuras de datos). Hubo historias de terror que incluso si pudieras recibir una A en ambos cursos (CS46A y CS46B), tus posibilidades de obtener al menos una C aún eran muy escasas.

Se esperaba que leyeramos secciones de CLRS antes de nuestra conferencia. El problema era que, dado que CLRS ya era tan denso y difícil de leer, hacía que las conferencias fueran aún más difíciles, ya que una parte del contenido del libro de texto.

La tarea era una mezcla de problemas escritos y problemas de codificación. Problemas escritos salieron del libro. Cuando hicimos pruebas de problemas relacionados, esos fueron probablemente los más fáciles que mis compañeros y yo pudimos hacer. Nos recordó un poco cómo era nuestra clase de matemática discreta. Algunos problemas con los libros eran mucho más difíciles y no teníamos idea de lo que estábamos viendo.

Los problemas de codificación fueron un poco más razonables. Al mirarlos ahora, siento que no fueron demasiado difíciles. El problema de codificación más difícil fue escribir un árbol 2-3 desde cero. La parte más dura fue cómo se clasificaron los problemas de codificación. Si no obtuvo el 100% en base al calificador en línea del profesor, su tarea no se ha completado. Por cada tarea que reprobas, bajas el límite de tu mejor calificación posible. El único espacio para la comodidad era que la caída de primer grado comenzaría después de que fallasen tus dos primeras tareas de codificación. Si fallan dos tareas de codificación, la calificación más alta posible sería una B +; fallar tres, C +; fallar cuatro, no vas a pasar la clase con una D +.

Los exámenes no fueron más fáciles. Diría que algunas de las preguntas del examen fueron similares a los problemas escritos en el libro. Otras preguntas del examen fueron un poco más abstractas. Es un poco difícil recordar todos los tipos de problemas que hicimos, pero puedo asegurarles que fue difícil. El promedio de la clase para los exámenes fue normalmente inferior al 60%. El más bajo para mi clase, creo, fue alrededor del 45%. Si tuvo la suerte de mantenerse por encima del promedio de la clase, la probabilidad de aprobar la clase sería muy alta (suponiendo que haya completado la mayoría de las tareas de codificación).

Otras personas podrían haber tenido un tiempo más fácil con su curso de algoritmos, pero definitivamente lo encontré muy difícil.

Informática de la UNAM: Cálculo 1, Cálculo 4, Álgebra lineal 2, Sistemas operativos, Lenguajes de programación y Probabilidad y estadística.

  1. Cálculo 1: Para mí y para varios socios, este curso fue impactante ya que fue la primera vez que estuvimos expuestos a pruebas formales, en la escuela secundaria solíamos abordar las matemáticas como ecuaciones computacionales e integrales, sin embargo, en este segundo año Por supuesto, el conocimiento de fórmulas, recuentos informáticos, derivadas y resolución de ecuaciones no fue útil. Aunque el nombre del curso era “Cálculo 1”, en realidad era “Análisis matemático 1”. Como bibliografía para este curso, el profesor utilizó el cálculo 1 de Spivak entre otros.
  2. Cálculo 4: La misma historia, pero en n-variables.
  3. Álgebra lineal 2: para este curso utilizamos el curso de álgebra lineal de Hoffman, los temas fueron: isomorfismos, funcional lineal, espacios cocientes, dobles dobles, teorema espectral.
  4. A pesar del hecho de que particularmente para este curso tuve un excelente maestro, este lado práctico del curso fue en lenguaje de programación C. Solíamos resolver los proyectos del sistema operativo de Stanford.
  5. Para este curso usamos raqueta y el libro de Shriram. Sin embargo, este tema no era de mi interés.
  6. Probabilidad y estadística: este tema también fue muy teórico, todavía no entiendo cómo probar si algo es un estimador de máxima verosimilitud.

Cuando era estudiante universitario, COMP2037 “Programming Language Accepors” (Universidad Nacional Australiana) fue bastante duro. Como curso electivo de segundo año, gran parte de la cohorte posible tenía solo un C de semestre bajo sus cinturones, por lo que sumergirse en los fundamentos del compilador fue una subida muy empinada. Se sabía que tenía la tasa de fallas más alta en el departamento en ese momento, supuestamente más del 50%.

15 años después, veo que ahora es un curso de tercer año. Todavía tengo mi copia del Libro del Dragón, en alguna parte.

Y creo que C ahora se enseña explícitamente en lugar de aparecer repentinamente al comienzo del segundo año en el curso de Fundamentos de sistemas operativos, que comenzó con “Aquí está la fuente de Linux. Esta semana estamos escribiendo un dispositivo de caracteres que muestra su nombre” y finalizó con un proyecto final de “Portar el sistema de archivos minix a Linux”. (Las cohortes anteriores habían utilizado la fuente SunOS, en lugar de Linux, por lo que podría haber sido peor …)

Para mi BSCS, diría Diseño de SO de alto nivel o Teoría.

Diseño del sistema operativo simplemente porque fue la culminación de casi todo lo que había aprendido del plan de estudios de pregrado en un solo curso, estudiando y modificando el núcleo de Linux desde la gestión de memoria hasta la programación de procesos.

Teoría porque había una gran cantidad de razonamiento abstracto involucrado en el mapeo de un algoritmo en otro con el fin de demostrar que su complejidad de tiempo de ejecución era P o NP. No había tanto enfoque de implementación iterativa, y la clase era mucho más cerebral que el resto del plan de estudios.

A pesar de la dificultad, estos dos cursos probablemente contribuyeron desproporcionadamente a mi pedigrí.

¡Espero que esto ayude! ¡La mejor de las suertes!

La clase que todavía me da escalofríos cuando lo pienso: los sistemas operativos CS 571 durante mi licenciatura en la Universidad George Mason. Estaba en el programa acelerado de maestría, que me requería completar dos clases de posgrado durante mis estudios de pregrado. Era mi último semestre y ya estaba tomando una clase de ciencias de 100 niveles, una clase de derecho de propiedad intelectual / informática de 300 niveles, dos clases superiores de CS de 400 niveles y una adición de último minuto: una clase de matemáticas de 300 niveles que realicé justo antes de mi última semestre que tendría que tomar para completar mi especialización en matemáticas. Junto con todo esto, tuve que tomar un curso de posgrado de nivel 500 de CS. No sé lo que estaba pensando, pero elegí Sistemas operativos, un curso que era conocido por su dificultad. Pero pensé que el sistema operativo se vería genial en mi currículum, así que lo tomé. Todo ello sumaba hasta 19 créditos, que excedían el límite de crédito del semestre. Cuando fui al departamento de CS para solicitar su firma en el formulario de aumento de crédito, miraron la lista de clases y me dijeron en diferentes palabras que reprobaría. Era tan ambicioso que no me importaba.

¡Me encantó el sistema operativo! Aprendí algo nuevo y desafiante todos los días y quedé absolutamente fascinado. Eso duró hasta la primera asignación de programación. Las tareas tenían que ver con la implementación de concurrencia, llamadas al sistema, asignación de espacio de direcciones, etc. en OS161. Cuatro semanas en el semestre y yo era un desastre emocional. Estaba enloqueciendo y todo lo que hice fue trabajar en mis asignaciones de SO. No sé cómo pasé las otras clases. Había planeado graduarme sin ninguna C en mi transcripción, pero en ese momento, recordé lo que un amigo dijo una vez: “C obtener títulos”. Pero logré graduarme sin ninguna C. En retrospectiva, fue lo más difícil que encontré en una clase, pero estoy seguro de que lo habría hecho mejor y lo habría disfrutado más si no tomara todas esas otras clases al mismo tiempo.

Universidad Técnica Danesa – 02282 Algoritmos para conjuntos de datos masivos. No había material del curso, excepto un montón de artículos científicos, que no es exactamente amigable para los estudiantes. Pero desde entonces he mejorado mucho en la lectura de artículos científicos 😉

La más difícil fue probablemente una de las primeras clases de matemáticas que tomé en el primer año de la Escuela de Ingeniería (que corresponde al tercer año en los EE. UU.), Sobre las Funciones Holomórficas y sus aplicaciones (ver el Teorema de Residuos, etc.).

Más tarde, la clase pasó a la Teoría de las distribuciones, que fue más fácil para mí.

Para mí, los dos cursos más difíciles / más difíciles que tomé en CS major fueron

  1. Teoría de Autómatas Teoría de Autómatas | Wikiwand
  2. Construcción del compilador Construcción del compilador | Wikiwand

Sin duda la clase de Introducción a la Informática. Ahí fue donde tuve que moldear mi cerebro para pensar algorítmicamente paso a paso. También fue psicológicamente difícil porque tenía dudas sobre si podía hacerlo.

Hubo cursos que requirieron mucho más tiempo, pero tratar de aprender a pensar de una manera diferente es algo mucho más difícil de lograr.

Más tarde tomé otro curso donde tuve que moldear mi cerebro una vez más, que llegó a ser el curso más gratificante que he tomado. Mi curso favorito de todos los tiempos: teoría de autómatas e idiomas formales.

Muchas clases fueron difíciles, pero valieron la pena.

El que fue el más frustrante, que no terminé usando mucho, fue un curso de teoría de grafos. Fue enseñado por un profesor del Departamento de Matemáticas, como un curso de Matemáticas. Excepto que figuraba como un tema CS. Esto arruinó mi récord de A en los cursos de CS …

Universidad de Maryland, College Park: CMSC 330, Organización de lenguajes de programación y CMSC 451, Diseño y análisis de algoritmos informáticos.

Pero el curso más difícil para mí personalmente fue un curso de matemáticas de nivel superior, STAT 410 Probability Theory (fuera de mi especialidad de CS).

Los algoritmos son un rito de iniciación: me las arreglé para sobrevivir y, a veces, incluso disfruté de las algs de pregrado y posgrado 😛

De lo contrario, mi propia clase de matemática discreta fue un curso esponjoso, pero la versión para la que hice TA fue bastante agotadora. Muchas pruebas y conceptos abstractos, y para muchos estudiantes fue una primera exposición (al menos desde su geometría) a ese tipo de rigor.

Inglés 101. Como estudiante universitario en cualquier programa de ciencias o ingeniería en mi escuela (UBC), tuve que tomar este curso. Me llevó años apreciarlo realmente, y por lo tanto ser bueno escribiendo.

El tema más difícil que enfrentará si es un estudiante de informática en sus 4 años es CS341: Sistema operativo y CS222 Organización y arquitectura de computadoras

Estos son los dos cursos más difíciles que he enfrentado. Estudie estos cursos en profundidad.

En los años 80, obtuve un título en CS. Mi curso más difícil fue un programa de simulación de una computadora. Teníamos PL-C para programar. Las tarjetas perforadas se ejecutan en un antiguo mainframe IBM 360. Memoria, registros, reloj del sistema, etc. Tuvimos que inventar nuestro propio conjunto de instrucciones. Escribí un programa de calculadora que se ejecutaba en mi programa de simulación de computadora … con tarjetas perforadas. Aprendí mucho. Más adelante en mi carrera, escribí un lenguaje de computadora SPIN que permitió a los analistas de negocios crear fácilmente conversiones de pólizas de seguros.

Si está hablando de un módulo relacionado con CS, entonces debe ser Bioinformática para mí. Tomé el curso por curiosidad y resultó ser un grave error (lo que retrasó mi graduación en 6 meses).

Sin embargo, durante toda mi vida universitaria, el módulo más difícil que tomé fue este electivo llamado “Realismo Mágico”. Claro, el módulo fue divertido y el profesor estuvo caliente (se parecía a Orlando Bloom). Pero la literatura no era lo mío y la tomé solo porque necesito tomar un curso electivo en esa área para cumplir con mis criterios de graduación.

Procesamiento de señales digitales. Todavía no obtengo FFT.

Estudiante de primer año de CS aquí.

Esta es mi clase más difícil en este momento: programación de computadoras

La clase más difícil para mí es esta Concepción y construcción de programas (Concepción y construcción de software), es fácil de entender, pero los conjuntos de problemas y los exámenes son muy difíciles, recuerdo que resolvimos todos los exámenes anteriores como preparación para nuestro primer examen y cuando salieron los resultados, la mejor nota fue 6/20 (seis de veinte puntos), obtuve 4.5 / 20, me sentí estúpido en ese momento, el último examen obtuve 9 más o menos.