Was Sie in einem 4-jährigen Informatik-Abschluss lernen

Ich habe kürzlich einen Artikel darüber geschrieben, ob Sie einen Abschluss in Informatik benötigen, um einen Job in der Technik zu bekommen. Ich dachte, dass es nützlich wäre, mein Protokoll durchzugehen. Das Diskutieren, was ich studiert habe, wird hoffentlich den Menschen helfen. Ich möchte, dass jeder in der Lage ist, die bestmögliche Entscheidung zu treffen, wenn er seinen Weg für eine Tech-Karriere wählt.

Haftungsausschluss : Dies ist aus meiner Erinnerung an die Klassen und aus der Sicht eines mobilen Entwicklers geschrieben. Viele der Themen dieser Klassen könnten spezialisiert und in eine Karriere verwandelt werden. Sie sind alle für jemanden auf der Welt wichtig. Ich schreibe aus meiner Perspektive und aus der Sicht von jemandem, der den Karriereweg eines mobilen Entwicklers gewählt hat.

Programmierung I, II

Dies war das Fleisch von allem, was ich gelernt und mich zum Programmieren gebracht habe. In diesen Klassen haben Sie das Programmieren gelernt. Bevor ich an diesen Kursen teilnahm, hatte ich kaum programmiert. Ich hatte versucht, einen Vorsprung zu bekommen, kam aber nicht viel weiter als Schleifen.

Diese Klasse begann damit, eine leere Datei zu erstellen und sie in einer IDE kompilieren zu lassen (ich habe Code :: Blocks verwendet). Und wir haben uns bis zur Entwicklung unseres eigenen textbasierten Kampfspiels hochgearbeitet. Wenn ich auf den Code zurückblicke, den ich geschrieben habe, schäme ich mich. Ich habe seitdem einen langen Weg zurückgelegt. Hier ist das Repo, wenn Sie lachen möchten (ich verwende nur eine main.cpp-Datei mit 1063 Codezeilen).

Was habe ich hier gelernt? Ich möchte alles sagen. Diese Kurse waren wahnsinnig wertvoll und brachten mir mindestens 70% des Wissens ein, das ich brauchte, um als Programmierer professionell zu arbeiten. Ich habe gelernt, ob Anweisungen, Schleifen, boolesche Logik, Klassenerstellung, Strukturerstellung, Erstellen von Schnittstellen, Polymorphismus, Vererbung und mehr. Es wurden auch grundlegende Datenstrukturen wie Arrays und Vektoren verwendet.

Diskrete Strukturen in der Informatik

Diese Klasse wurde dem Transkript hinzugefügt, um die Leute an die boolesche Logik zu gewöhnen. Was wir in den ersten zwei Wochen des Unterrichts hatten. Leider geht es für uns ahnungslose Studenten ziemlich weit in den Kaninchenbau. Hier sind einige der behandelten Themen: „Logik, Mengen- und Mengenoperationen, Beweismethoden, rekursive Definitionen, Kombinatorik und Graphentheorie“.

Dies sind alles nützliche Dinge, die Sie wissen sollten. Das Problem ist jedoch, dass die Schüler ermutigt wurden, diese Klasse frühzeitig zu besuchen. Normalerweise neben Progamming I und II. Und dies sind einige fortgeschrittene Themen. Ich würde jetzt Schwierigkeiten haben, mathematische Beweismethoden anzuwenden. Und ich erinnere mich, dass ich damals wirklich Probleme hatte. Außerdem musste ich nur googeln, was Kombinatorik ist, damit ich sie offensichtlich nicht zu oft benutze.

Tatsache ist, dass viele der Dinge, die sie in diesem Kurs unterrichteten, zum Zeitpunkt meines Kurses nicht auf eine Informatikkarriere anwendbar waren. Ich weiß jetzt, dass Logik, Mengen- und Mengenoperationen, rekursive Definitionen und Graphentheorie nützlich sein können. Aber das ist nur im Nachhinein ein paar Jahre Programmierer zu sein.

Was ich in meiner aktuellen Karriere täglich bewerbe, ist Logik und möglicherweise festgelegte Operationen. Rekursive Definitionen und Graphentheorie waren wirklich nur für Interviews hilfreich. Aber nimm das mit einem Körnchen Salz, weil ich ein mobiler Entwickler bin. Ein Back-End-Entwickler würde die Graphentheorie wahrscheinlich sehr nützlich finden.

Datenstrukturen

Diese Klasse war gut. Sehr gut. Datenstrukturen werden in der gesamten Computerprogrammierung verwendet und sind das Rückgrat der meisten Codes, die von Menschen geschrieben werden. Sie ermöglichen es uns, Daten auf eine Weise zu speichern, die für die von uns geschriebenen Programme nützlich ist. Die Fähigkeit, Daten zu betrachten und zu wissen, wie sie für die zeitliche und räumliche Leistung am besten gespeichert werden können, ist eine sehr nützliche Fähigkeit.

Ich habe etwas über Arrays, Stapel, verknüpfte Listen, doppelt verknüpfte Listen, Bäume, Diagramme, Haufen und all die verschiedenen Varianten dieser Datenstrukturen (wie selbstausgleichende Bäume) gelernt. Diese Klasse half mir nicht nur, Datenstrukturen zu verstehen, sondern auch, die von mir gespeicherten Daten besser zu organisieren.

Diese Klasse wurde in C gemacht, was es noch interessanter machte. C kann sehr pingelig sein, aber auch sehr mächtig, wenn es richtig verwendet wird. Ich musste sehr vorsichtig sein, wie ich Speicher zuordnete und bereinigte, was auch sehr gut für das Unterrichten über Speicherverwaltung war.

Es gab so viele nützliche Dinge in dieser Klasse, dass es schwierig ist, alle zu behandeln. Ich habe noch nicht einmal die Tatsache erwähnt, dass dies eine wichtige Wissenskomponente für Interviews in der Technik ist. Wenn Sie bei Datenstrukturen wackelig sind, sollten Sie einige Grundlagen auffrischen, da diese sehr wichtig sind.

Analyse von Algorithmen

Diese Klasse war etwas nützlich. Algorithmen sind nützlich. Sie steuern die beste Software der Welt und machen sie leistungsfähig genug, um in der modernen Welt relevant zu bleiben. Aber diese Klasse hatte einige Probleme.

Der nützlichste Teil davon war das Erlernen der Big O-Notation. Mit der Big O-Notation können Sie Code auswerten und verstehen, wie gut er zeitlich und räumlich funktioniert. Wenn Sie die Codeleistung in einem Unternehmen messen, verwenden Sie im Allgemeinen einen Timer, um die Zeit zwischen Interaktionen zu verfolgen. Auf diese Weise können Sie sehen, wie gut Ihre Software funktioniert. Dazu müssen Sie Code schreiben und die Ergebnisse anschließend auswerten.

Mit der Big O-Notation können Sie die Codeleistung bewerten, indem Sie sich nur den Code ansehen. Ich möchte nicht zu viel darauf eingehen, aber wenn Sie nichts über die Big O-Notation wissen, lesen Sie diesen Blog-Beitrag.

Die tatsächlichen Algorithmen, die wir durchgingen, waren nicht so nützlich. Ich erinnere mich nur an das Rucksackproblem und das Problem der reisenden Verkäufer. Ich musste auch Code für diese in Gruppen schreiben, was nicht großartig war, weil es eine Person in meiner Gruppe gab, die über das hinausging, wonach er gesucht hatte. Das bedeutete, dass ich jedes Mal weniger Code für die endgültige Implementierung schrieb, als ich gerne hätte.

Ein grundlegendes Verständnis der bekannten Algorithmen, ihres Zwecks und ihrer Implementierung kann hilfreich sein (hauptsächlich für Interviews). Big O-Notation ist hier der Schlüssel. Es ist sehr nützlich bei der Arbeit und es ist auch unglaublich nützlich für Interviews.

Web Entwicklung

Diese Klasse hatte die meisten Fähigkeiten, die direkt auf einen Job in der Technik anwendbar waren. Ich habe etwas über HTML, CSS, JQuery, JavaScript, PHP und JSON gelernt. Ich habe erfahren, wie eine Anfrage von einem Website-Frontend an ein Backend gesendet wird, wie sie im Backend verarbeitet und dann mit einer Antwort an das Frontend zurückgesendet wird. Ich habe gelernt, wie man eine Benutzeroberfläche erstellt und wie man mit einer Datenschicht interagiert, die dann mit dem Netzwerk interagiert.

Am Ende des Kurses hatte ich meine eigene Website erstellt und die Initiative ergriffen, um Angular zu lernen. Ich habe Angular verwendet, um meine Website auffällig aussehen zu lassen, was mir mein erstes Praktikum bescherte. Ich habe auch ein gutes Verständnis dafür erworben, wie eine Website unter der Haube funktioniert.

Dieses Wissen allein war großartig, aber ich habe auch gelernt, wie man eine unbekannte Sprache, ein unbekanntes Framework oder ein unbekanntes Datenformat aufnimmt und lernt und damit im laufenden Betrieb arbeitet. Ich habe viel zu diesen Themen gegoogelt, um konkrete Beispiele zu sehen. Ich habe gelernt, wie man Dokumentation und Online-Recherchen verwendet, um ein Konzept besser zu verstehen, das ich in kurzer Zeit direkt anwenden musste. Dies ist eine Schlüsselkompetenz, um ein erfahrener Programmierer zu sein.

Einführung in Datenbanken

In dieser Klasse habe ich meistens nur SQL gelernt. Ich bin sicher, wir haben einige andere Konzepte wie Sharding und Clustering durchgearbeitet, aber ich erinnere mich nicht an sie. Bei meinem aktuellen Job verwende ich manchmal SQL, um Datenabfragen für von mir protokollierte Ereignisse auszuführen. SQL wird entweder ein wesentlicher Bestandteil Ihres Jobs sein oder Sie werden es kaum verwenden. Wenn Sie es brauchen, lernen Sie es und werden Sie Experte. Wenn Sie dies nicht tun, machen Sie sich keine allzu großen Sorgen.

Software Engineering I, II

Auch eine andere Klasse, an die ich mich nicht wirklich erinnern kann. Ich glaube, wir haben in dieser Klasse eine Reihe umfassender Konzepte durchgearbeitet. Wir haben die Projektmanagementmethoden von Scrum und Waterfall behandelt. Wir haben die Tests und die verschiedenen Arten von Tests durchgesehen. Wir haben einige Usability- und Accessibility-Konzepte behandelt. Es war wirklich nur ein Allheilmittel für Konzepte, die nicht wirklich in ihre eigenen Klassen passten.

Aufgrund des Patchwork-Charakters der Klasse habe ich keines der Konzepte wirklich gut verinnerlicht. Es war gut, einen grundlegenden Überblick über die behandelten Konzepte zu haben, aber ich wünschte, mehr Zeit würde für wichtige einzelne Themen wie das Testen aufgewendet.

Computerarchitektur & Assemblersprache

Ich erinnere mich lebhaft an diese Klasse. Diese Klasse befasst sich mit der Funktionsweise eines Computers. Wie Maschinenanweisungen vom Computer gesendet und verarbeitet werden. Wir müssen auch Code in MASM schreiben, einer Assemblersprache, die sehr eng mit Maschinencode interagiert.

Die meisten Programmiersprachen, die ich bis zu diesem Kurs verwendet hatte, waren Hochsprachen. Hochsprachen sind in der Regel näher an der menschlichen Sprache als Maschinencode. MASM ist dem Maschinencode sehr nahe und ich würde sagen, es ist näher an der Maschinensprache als an der menschlichen Sprache.

Der wichtigste Teil dieser Klasse besteht darin, eine Vorstellung davon zu bekommen, was mit Ihrem Code passiert, wenn er kompiliert wird. Es war sehr interessant, die verschiedenen logischen Einheiten in einem Computer zu verstehen und zu verstehen, wie Ihr Code von ihnen verarbeitet wird.

Aus praktischen Gründen glaube ich nicht, dass diese Klasse einen entscheidenden Beitrag zu meiner technischen Karriere geleistet hat. Ich habe bisher nicht viel von dem Wissen genutzt, das ich während meiner Karriere aus dieser Klasse gewonnen habe.

Betriebssysteme

Ich bin ehrlich, es fällt mir wirklich schwer, mich an das zu erinnern, was ich in dieser Klasse gelernt habe. Das einzige, woran ich mich erinnern kann, ist das Erstellen eines Messaging-Programms, das die Socket-Programmierung in C zur Kommunikation verwendete. Ich habe auch gelernt, wie man Dateien öffnet und Ordner mithilfe von Skripten bearbeitet.

Ich möchte offen darüber sein, woran ich mich aus meinem Studium erinnere, und Tatsache ist, dass ich mich nicht an viel aus dieser Klasse erinnere. Ich habe in meiner aktuellen Karriere einfach nicht viel von dem daraus gewonnenen Wissen genutzt.

Einführung in Computernetzwerke

Diese Klasse war sehr nützlich. Es wurde untersucht, wie Computernetzwerke funktionieren. Dies beinhaltete das Durchgehen von Netzwerkprotokollen wie HTTP, HTTPS, TCP, IP, FTP, IMAP, POP3, SSH und DNS. Ich musste lernen, wofür jedes dieser Protokolle verwendet wird, wie sie implementiert werden, und ein Verständnis dafür gewinnen, warum sie erstellt wurden.

Die oben erwähnten Netzwerkprotokolle werden für kritische Funktionen moderner Software verwendet. Dies umfasst die E-Mail-Verarbeitung (POP3 & IMAP), das Senden von Netzwerkanforderungen zwischen Client und Server (HTTP, HTTPS) und die sichere Verarbeitung von Geräten über ein Netzwerk (SSH). Dies gibt Ihnen wirklich ein Verständnis dafür, wie das Internet funktioniert und wie Geräte auf der ganzen Welt miteinander interagieren können.

Das ist nicht nur faszinierend, sondern kann auch nützlich sein. Ich habe die Dinge, die ich aus dieser Klasse gelernt habe, verwendet, um Probleme zu beheben, auf die ich gestoßen bin, als ich Fehler aus dem Netzwerk erhielt. Ich konnte die Probleme, auf die ich stieß, genau bestimmen und dem Back-End-Entwickler, mit dem ich arbeitete, helfen, den Fehler am Ende zu finden.

Einführung in Usability Engineering

In diesem Kurs wurde erläutert, wie Sie eine intuitive App erstellen, aber auch wie Sie eine App oder Website zugänglich machen. Barrierefreiheit bezieht sich darauf, eine Software für jedermann nutzbar zu machen, auch für Menschen mit Behinderungen. Dies umfasst Dinge wie die Verwendung von Text in Sprache und das Entwerfen von Software, die nicht nur auf Audioelemente angewiesen ist.

Die behandelten Themen waren nützlich, wenn Sie noch nie von Barrierefreiheit gehört haben. Zumindest haben Sie diese Dinge beim Entwerfen von Software berücksichtigt. Es hat mich auch dazu gebracht, wirklich über die Benutzererfahrung nachzudenken und wie wichtig sie für eine gute Software ist. Wenn niemand die Schlüsselfunktionalität Ihrer App verwendet, weil sie verwirrend ist, verliert Ihre Software möglicherweise alle Benutzer.

Obwohl das Wissen interessant war, hängen die spezifischen Implementierungen, wie Sie eine verwendbare und zugängliche Software erstellen würden, von der Plattform ab. Zum Beispiel verfügt Apple über eigene Richtlinien für Benutzeroberflächen, die allgemeine Entwurfsprinzipien und spezifische Details zum Entwerfen von Software beschreiben, die auf einer der Apple-Plattformen ausgeführt werden kann.

Aufgrund der spezifischen Informationen, die pro Plattform benötigt werden, bin ich mir nicht sicher, ob diese Klasse unglaublich nützlich war. Es war ein schönes Intro, aber ich musste schließlich die Schnittstellenrichtlinien von Apple lernen, die alle in dieser Klasse behandelten Themen behandelten.

Entwicklung von Mobil- und Cloud-Software

Ich werde mich kurz fassen. Ich war bereits ein mobiler Ingenieur, als ich diesen Kurs belegte. Ich habe in wenigen Stunden eine beschissene mobile App erstellt, um mein Studium so schnell wie möglich abzuschließen. Zu diesem Zeitpunkt hatte ich bereits mein Ziel erreicht, einen Job als Software-Ingenieur zu bekommen, musste aber nur meinen Abschluss in Comp Sci machen, da ich fast fertig war. Mein Herz war zu diesem Zeitpunkt nicht in Lernen.

Trotzdem glaube ich nicht, dass diese Klasse gut geführt wurde. Es wurde faul gestaltet. Sie ermutigten die Leute, Code für eine Windows Phone-App für diese Klasse zu schreiben, und die Nachfrage nach diesen Jobs ist viel geringer als bei anderen. Ich bin der Meinung, dass dies nur empfohlen wurde, weil die Umgebung einfacher einzurichten ist und der Code in JavaScript geschrieben werden kann und der Webentwicklung ähnelt.

Außerdem war mir klar, dass die Person, die die Klasse leitet, nicht über alle mobilen App-Plattformen Bescheid wusste. Wir mussten einen kleinen Backend-Teil schreiben, aber ich wollte es wirklich nicht. Am Ende habe ich eine Webanforderung gefälscht, indem ich stattdessen von der Festplatte gelesen und nach einigen Sekunden eine vordefinierte Antwort zurückgegeben habe. Dies funktionierte, weil ich nur eine Demo und den Quellcode einreichen musste. Und ich habe das Gefühl, dass die benotete Person nur die Demo angesehen hat.

Insgesamt unterrichtete die Klasse veraltete und unbenutzte Technik, wurde nicht richtig bewertet und bot wirklich nicht viel Anleitung. Dies war keine sehr gute Klasse.

Capstone-Softwareprojekt

Da wir gerade von veralteter Technologie sprechen, mussten wir für dieses Projekt eine grafische Benutzeroberfläche für den Zugriff auf eine Datenbank mithilfe von Flüchen erstellen. Hier ist das vollständige Projekt, wenn Sie interessiert sind. Wir konnten uns nicht entscheiden, was unser Schlusssteinprojekt war, es wurde uns zugewiesen. Und jeder musste das gleiche Projekt machen. Es wurde auch in Dreiergruppen durchgeführt, sodass Sie nur einen kleinen Teil des Projekts wirklich abgedeckt haben. Dies war eine wirklich schlecht geführte Klasse.

Die Interaktion mit dem Lehrer war so gut wie nicht vorhanden. Ich hatte kein Interesse an dem Projekt und was wir lernten, schien absolut nutzlos. Um ein Interesse an einem Thema zu wecken, müssen Sie den Menschen einen freien Willen geben, wenn es darum geht, auszuwählen, was sie lernen. Es ist einfach albern, in Ihrem Schlusssteinprojekt keine Wahl zu haben. Dieses Projekt ist für die meisten Karrierewege nutzlos und es macht keinen Sinn, es den Menschen aufzuzwingen.

Die Klasse sollte jeden Schüler dazu bringen, einen Vorschlag mit groben Schätzungen für einen Zeitplan einzureichen, wann sie jeden Teil des Projekts abschließen würden. Dies bewirkt zwei Dinge: die Leute dazu zu bringen, das Schätzen der Arbeit zu üben und den Leuten zu erlauben, an dem zu arbeiten, woran sie interessiert sind. Die Klasse wäre auf diese Weise 100-mal besser gewesen.

Abschließende Gedanken

Ich hätte keinen guten Teil des Unterrichts belegen können und wäre immer noch der Software-Ingenieur, der ich heute bin. Aber ich denke, einige dieser Kurse zu verpassen, könnte eine große Lücke in Ihrem Wissen als Entwickler hinterlassen. Die Themen, in denen meiner Meinung nach jeder Softwareentwickler Kenntnisse haben sollte, sind Datenstrukturen und Algorithmen.

Die anderen Klassen hängen von der Karriere ab, die Sie wählen. Wenn Sie sich für die Embedded-Entwicklung entschieden haben, sollten Sie sich mit der Computerarchitektur vertraut machen. Wenn Sie sich entscheiden, Front-End-Ingenieur zu werden, sollten Sie sich mit Computernetzwerken vertraut machen.

Der Schlüssel zum Erfolg ist, dass ein guter Ingenieur ständig lernt. Wenn Ihnen Kenntnisse fehlen, von denen Sie wissen, dass sie für Ihren Job nützlich und anwendbar sind, nehmen Sie an einem Kurs teil, um dieses Wissen zu erlangen. So können Sie guten Code besser schreiben. Lerne immer.

Hat dir gefallen, was du gelesen hast? Schauen Sie sich meine anderen Artikel an

Eine Tech-Karriere aus dem Nichts beginnen.

Wählen Sie die beste Tech-Karriere für sich selbst - Dev Ops, Mobile Engineer, Data Scientist, Projektmanager und Front End.

Tipps für Ihr erstes Tech-Interview.

Sollten Sie einen Abschluss in Informatik machen?

Swift vs. Objective-C