Informatique : Quels ont été les cours les plus difficiles que vous avez suivis en tant que major en CS ?


CS 344 de l'Université d'État de l'Oregon : Operating Systems I

Ce cours était connu pour être le point où les majors de l'informatique soit déclaraient une autre majeure, soit reprenaient un cours pour leur première fois, soit passaient. Et selon les professeurs du département qui sont allés dans différentes universités, ce n'était't un phénomène unique à l'Oregon State.


Le premier cours d'une série typique de deux cours, Operating Systems 1 vise à éduquer les étudiants sur plusieurs principes de programmation : les appels système, les utilitaires système, les threads et la communication interprocessus. Il se peut que je manque un ou deux éléments clés (les suggestions sont les bienvenues), mais ce que je viens d'énumérer est essentiellement le point principal du cours.

Ce n'était't le cours le plus difficile sur le plan conceptuel que j'ai suivi ; Introduction à l'analyse réelle, un cours de mathématiques de niveau junior pour les majors en mathématiques, était beaucoup, beaucoup plus complexe. Mais c'était le plus difficile pour une variété de raisons. Peut-être puis-je vous éclairer lorsque vous ou d'autres personnes serez confrontés à ce cours. Faites attention à mes erreurs pour que vous n'ayez pas à reprendre le cours comme je l'ai fait ! :]


Le langage C : Le cours était (et est typiquement, d'après ce que j'ai compris) entièrement en C. Le C++ était ce que j'avais appris dans mes cours d'introduction à l'informatique, donc c'était ce avec quoi j'étais le plus familier. Certains de nos laboratoires dans ces cours de première année nous ont familiarisés avec la programmation embarquée, nous avons donc dû apprendre un peu de C en parallèle. Le C et le C++ sont suffisamment proches pour que vous puissiez vous en sortir sans problème, mais ne sous-estimez pas leurs différences. Cela vous semblera trivial ou sans importance en tant qu'étudiant de première ou deuxième année, mais vous apprendrez plus tard que les différences sont importantes. Le langage C ne représente en aucun cas une part importante de la difficulté du cours, mais il fait une différence notable si vous ne connaissez pas déjà le langage. De plus, si vous êtes comme l'un des étudiants transférés d'une autre université, il se peut que l'on vous ait enseigné Python ou Java à la place, ce qui rendra encore plus difficile non seulement l'apprentissage des sujets du cours, mais aussi l'assimilation d'un langage entièrement nouveau. Je suis à peu près sûr que toutes les universités ayant un programme CS (computer science) décent exigent au moins un cours sur les systèmes d'exploitation, ce qui signifie que vous utiliserez très probablement Linux ; par conséquent, vous vous familiariserez TRES facilement avec le langage de programmation C. Alors, pourquoi les universités enseignent-elles plusieurs cours d'introduction à la CS dans un langage autre que C++ ou C, alors que le C va clairement être un langage fortement utilisé dans un cours difficile plus tard dans le programme d'études - eh bien, cela me dépasse. Encore une fois, apprendre un nouveau langage n'est pas un gros problème - c'est l'environnement dans lequel vous avez dû apprendre le C ; cet environnement étant le cours rigoureux et chronophage sur les systèmes d'exploitation.

Ceci étant dit, j'ai quelques conseils simples :

main-qimg-064e68f450b52c1411a08ab68b6f0452

Voici'moi et mon édition internationale abusée du classique, The C Programming Language de Brian Kernighan et Dennis Ritchie (informaticien américain) (le livre est plus couramment appelé K&R C. Faites référence au livre comme cela à un professeur ou à un programmeur et ils'vous montreront immédiatement un peu plus de respect). Je comprends ce que c'est que d'être un étudiant fauché, mais l'édition internationale est bon marché et facile à trouver. Au minimum, empruntez une copie ou "trouvez" une version numérique et si vous ne l'aimez pas, ne l'achetez pas. Mais si vous l'aimez, et vous l'aimerez, achetez-le. Il'est léger, concis, pas verbeux, mais suffisamment détaillé pour que vous'appreniez rapidement ce que vous devez savoir. Faites-moi confiance - achetez-le.

Utiliser votre manuel de cours ET votre professeur : C'est probablement là que la plupart des étudiants, comme moi, ont échoué. Contrairement à la charge de travail, que j'aborderai plus tard, ce sujet particulier est très critique. Je catégorise les étudiants comme excellant généralement dans une forme d'apprentissage ou l'autre :

Lecture Learner : Cela signifie que vous'êtes plutôt doué pour l'apprentissage auditif. Vous pouvez non seulement prendre de bonnes notes d'un professeur qui fait des conférences, mais vous pouvez aussi vous concentrer sur ce qu'ils'disent pendant que vous prenez lesdites notes. Grâce à des notes satisfaisantes, vous vous êtes fortifié dans votre tête en vous disant que vous n'aviez jamais utilisé les manuels scolaires auparavant, alors pourquoi commencer maintenant ? Les cours magistraux du professeur, les heures de bureau, vos notes et votre esprit vous ont déjà sauvé et vous sauveront encore. (La moitié d'entre vous est probablement en train de grimacer comme un loup parce que vous savez exactement ce que je veux dire)

L'apprenant des livres : Que ce soit par paresse ou par ennui, vous n'assistez pas aux conférences. Soit vous ne pouvez pas'vous lever assez tôt pour vous rendre en cours, soit votre ennui vient du fait que vous ne pouvez pas vous concentrer sur quelqu'un qui fait un cours pendant 50 à 120 minutes d'affilée. Mais si vous êtes arrivé jusqu'ici à l'université, c'est généralement parce que vous êtes capable de lire des manuels et d'utiliser l'internet. Vos manuels ou Stack Overflow ont toujours contenu les informations nécessaires pour vous permettre de faire vos devoirs et de réussir vos examens. Hé, vous pouvez jouer à Angry Birds ou dormir pendant le cours (ou même ne pas y aller), ET vous obtenez la note - alors pourquoi changer les choses maintenant ?

Apprenez à être à la fois un apprenant de cours ET un apprenant de livres : Le manuel pour de nombreux cours sur les systèmes d'exploitation est le suivant:

main-qimg-f8c5174cad1b2c49fe0aafd85750707a.webp

[J'ai emprunté cette image ici]

J'aurais ajouté une photo de mon propre exemplaire de ce livre et de mon magnifique visage, mais en fait, je n'ai pas celui-ci sous la main avec moi en ce moment, donc désolé de vous décevoir. Maintenant, voici'la situation unique de cette classe où les apprenants de cours et les apprenants de livres se retrouvent en difficulté.

Les apprenants en cours magistral ne parviennent pas à lire le livre, ou à le lire suffisamment. Le problème est qu'une GRANDE partie du code qui vous prendrait normalement des heures, voire des jours, à inventer pour compléter les devoirs sont en fait DANS ce livre. Les apprenants en cours magistraux ont également appris à parcourir efficacement un texte et à trouver ce dont ils ont besoin, si nécessaire. Le problème, c'est que CE livre vous fait généralement assembler les pièces du puzzle, de sorte que vous ne pouvez vraiment pas vous en passer. Le livre est bien écrit, mais la police est petite et il y a BEAUCOUP de matériel. Au moment où les Lecture Learners ont compris cela, ils'ont déjà sombré trop profondément pour s'en remettre ; l'étendue des connaissances est juste trop importante pour rattraper le retard, même si ce n'est que 2 semaines dans le cours.

Les apprenants du livre se retrouvent à se demander pourquoi ils ont l'impression que le code est si long à écrire. Ils'ont lu le livre, alors qu'est-ce qu'ils manquent ? ! Eh bien, le livre est écrit d'une manière telle qu'il suppose que le lecteur ne suit pas 3 autres cours et jongle aussi avec la vie. C'est BEAUCOUP d'informations à la fois, et il est destiné à être lu lentement tout en faisant de nombreux petits exercices. Les professeurs, conscients de ce fait, résument en fait l'équivalent de chapitres d'informations en quelques cours et fournissent ensuite un code pivot pendant le cours. Ainsi, si vous n'assistez pas au cours ou si vous vous endormez, pour quelque raison que ce soit, vous allez devoir écrire à la main le code qui a pris une heure au professeur, ce qui vous prendra probablement 8 heures ou plus. Non, copier le code des diapositives du cours ne suffira PAS. Le code de ce cours est très circonstanciel et exige que vous sachiez comment l'appliquer jusqu'à un niveau de détail très fin, donc vous devez généralement avoir prêté beaucoup d'attention aux mots du professeur'pour appliquer le code correctement.

Donc, si vous ne trouvez pas comment combiner efficacement les notes de cours et les conseils du professeur avec le code source et les détails du fonctionnement du livre de texte, vous'allez vous retrouver dans un tas de problèmes. Ou une pile. Quelle que soit la façon dont vous voulez voir les choses.

Gestion du temps : Des étudiants qui ont obtenu des A's dans ce cours, il a été révélé qu'ils passaient en moyenne au moins 20 heures par semaine sur leurs devoirs. Vous pensez peut-être que vous aussi, vous passez 20 heures par semaine sur des devoirs, mais je'parle de 20 heures par semaine pour UN seul cours. Et c'est en fait l'avertissement que les professeurs donnent aux étudiants le premier jour de ce cours (le jour redouté du syllabus...) Ils conseillent aux étudiants qui suivent d'autres cours techniques (et non des cours facultatifs légers) d'éviter ce cours et de le suivre un autre trimestre. C'est un avertissement standard, le premier jour, pour ce cours.

Donc, commencez les projets pour ce cours immédiatement. Je'ne plaisante pas. Si vous avez du temps libre entre les cours, lisez votre livre de texte. Si vous zappez dans les autres classes, commencez à dessiner des idées de conception pour votre projet pour ce cours. Lorsque vous rentrez chez vous et que vous voulez d'abord manger, mangez tout en pensant à ce à quoi servent exactement les exigences du devoir et, une par une, comment vous'allez les résoudre.

Vous'n'êtes pas aussi bon que vous le pensez : Ce'n'est pas que vous'passerez des heures à vous frapper la tête contre le mur parce que vous'êtes coincé à essayer de comprendre comment fonctionnent les pointeurs ; c'est parce que vous vous frappez la tête contre le mur en essayant de comprendre pourquoi votre programme ne'fonctionne pas. Et il finit par ne pas fonctionner parce que vous don't know how pointers work as well as you think you did.

C'est'typiquement le cas avec ce cours. Plus simplement, votre programme ne'compile pas ou n'agit pas de manière appropriée parce qu'il y a un principe fondamental de programmation que vous ne comprenez vraiment pas - mais vous n'en êtes pas conscient. Ce ne sont pas les nouveaux appels système que vous apprenez. C'est parce que vous'êtes en fait un programmeur relativement nouveau et que vos pratiques de codage sont inférieures à la normale, et lors de l'écriture de code pour les systèmes d'exploitation, vous serez mis à l'épreuve.

Avec cela étant dit, allez aux heures de bureau lorsque votre code ne'compile pas. Allez voir un assistant d'enseignement, un ami, Quora, ou Stack Overflow. Ne faites PAS ce que la plupart d'entre nous, les personnes ayant un esprit d'ingénieur, font, c'est-à-dire vous brûler au sol en passant des heures à essayer de comprendre comment briser un mur de briques que vous'avez frappé. Si vous êtes toujours bloqué après 30 minutes, ce n'est pas grave ! Comme un bon programmeur, faites ce qui est le plus efficace et demandez l'aide de quelqu'un qui en sait plus que vous. Je sais, c'est une pilule difficile à avaler, mais plus vite vous l'apprendrez, plus facile sera votre vie ! :] J'ai la tête dure, alors il m'a fallu beaucoup plus de temps que la plupart des gens pour l'apprendre 😛

Déclaration finale : J'ai eu une situation intéressante qui n'a fait qu'amplifier la difficulté de ce cours. Mon professeur était un dur à cuire de la vieille école de Hewlett Packard (HP) qui, au lieu de faire confiance à ses TA's pour noter les devoirs, écrivait manuellement des milliers de lignes de scripts BASH pour tester votre code.

Vous avez bien lu, lol. Là où normalement tu'aurais la pitié d'un TA pour jeter quelques points supplémentaires, ou parfois obtenir un TA qui voudrait que tu apprennes de tes erreurs donc ils te demandent pourquoi tu penses que ton code a échoué ici ou là ; si tu t'es bien expliqué, tu'gagnerais généralement quelques points en retour. La plupart du temps, les assistants n'ont pas plus de 10 à 15 minutes par étudiant pour noter, donc ils sautent beaucoup de choses et vous économisez des points. Mais oh non, pas avec ce type. Il a passé des heures de son temps libre à écrire des scripts qui exécuteraient votre code comme le ferait un TA, mais il le ferait de façon impeccable en s'assurant que RIEN n'a été oublié. Il était TRÈS facile de perdre des points et en outre de se décourager.

Mais quoi qu'il en soit, j'espère que quelqu'un pourra apprendre de certaines de mes propres erreurs et ainsi les éviter ensuite lorsqu'il suivra le cours. Bonne chance !

Note : j'ai adoré ce cours. Le fait d'échouer m'a fait apprendre beaucoup de choses sur moi-même ; en tant qu'étudiant, en tant que programmeur et en tant qu'être humain. J'ai appris tellement de choses sur l'informatique et même sur moi-même, et cela seul est un autre post ou A2A entièrement. Je ne sais pas si j'ai réellement " échoué " au cours, mais plutôt si je l'ai abandonné à la huitième semaine parce que je n'arrivais pas à suivre. Quoi qu'il en soit, je n'ai pas réussi à le terminer la première fois, mais cela me convient :]

.