Ich bin zukunftssicher, wenn ich Programmieren lerne [geschlossen]

10

Wenn Sie möchten, möchte ich lernen, zukunftssicher zu programmieren. Während Windows (vorerst) den Markt für Desktop-Betriebssysteme dominiert, ist es offensichtlich sehr wertvoll, seine Sprachen / Frameworks / APIs usw. zu lernen. Dies kann sich ändern, wenn neue Geräte auftauchen oder Windows sich selbst in den Fuß schießt -freundliche Vorschauen von Windows 8 sehen nicht besonders ansprechend aus ...).

Wäre es richtig zu denken, dass solide Kenntnisse in C / C ++ für Back-End-Logik / Low-Level-Programmierung und dergleichen in Kombination mit einer extrem portablen Sprache wie Java für GUIs usw. eine gute Grundlage für die Softwareentwicklung wären? das wird sich auf den meisten Systemen als nützlich erweisen? - Ich spreche von Desktop-PCs, Tablets, Telefonen.

Anonym
quelle
11
Es gibt so etwas nicht
Job
Baue eine Höhle und fülle sie mit Büchern.
Edward Strange
4
Baue eine Höhle und fülle sie mit Konserven. Der zukunftssicherste Programmierer ist der Programmierer, der nach der Apokalypse lebt.
Tom Anderson
1
Lernen Sie keine Programmiersprachen oder Codierungen, sondern meistens Programmieren, und das
dauert

Antworten:

31

Wenn Sie zukunftssicher sein möchten, ist der beste Rat, den ich Ihnen geben kann, sich nicht in eine Technologie einzuschließen.

Lernen Sie APIs also nicht blind. Erfahren Sie, wie sie konzipiert sind. Was sind die Philosophien hinter den Kulissen? Was sind ihre Vor- und Nachteile? Denken Sie an Software im Allgemeinen, nicht an eine bestimmte Technologie.

Sie können auch an einer guten Programmkonzeption arbeiten. OOP und AOP sind eine gute Wahl, IMO. Aber verstehen Sie nicht nur den Mechanismus, sondern arbeiten Sie wirklich an der Philosophie hinter dem Mechanismus.

Vernachlässigen Sie nicht die allgemeine Informatik wie Datenstrukturen und Algorithmen, da es sich um technologieübergreifendes Wissen handelt, das immer nützlich ist.

Gehen Sie auch für gute Praktiken. Sie haben oft Dutzende Möglichkeiten, etwas zu tun, aber die meisten davon sind Mist: fehleranfällig, schwer zu warten, später schwer zu verstehen oder von einem anderen Programmierer usw. . . Normalerweise ist der Code schwerer zu lesen als zu schreiben. Lernen Sie also, wie Sie etwas mehr Aufwand für das Schreiben aufwenden, um das Lesen zu erleichtern (da Sie Code mehr lesen als schreiben).

Lernen Sie effektive Techniken zum Debuggen (intelligente Verwendung von Protokoll und Debugger) und zum Testen (Schreiben von Code, der auf einfache Weise getestet werden kann, und Automatisieren dieser Tests).

Dann benötigen Sie einen allgemeinen technologischen Hintergrund. Ich spreche von sehr breitem Wissen, wie die Funktionsweise eines Prozessors (Cache-Miss oder Verzweigungsvorhersage sind ein guter Start), von UNIX-Systemen, von Netzwerkprotokollen wie IP, TCP und Ethernet usw. . .

Am Ende lernen, wie man lernt. Wenn Sie lernen können, können Sie sich anpassen.

Sie benötigen einige fundierte Kenntnisse in bestimmten Technologien, um einen Job zu finden, aber diese sind sehr schnell veraltet (denken Sie beispielsweise an COBOL oder an die Webprogrammierung zur Zeit des IE / Netscape-Krieges). Verlassen Sie sich also nicht darauf, dass sie zukunftssicher sind. Sie werden der Schlüssel sein, um eingestellt zu werden, aber definitiv nicht das, was einen großartigen Programmierer ausmacht und was Ihre Fähigkeiten im Laufe der Zeit dauerhaft macht.

EDIT: Wenn Sie gerade erst anfangen, sollten Sie definitiv etwas erledigen. Eigentlich alles. Ein Spiel wie Tetris oder Snake ist ein guter Anfang und macht Spaß. Wenn Sie die Dinge nicht erledigen, werden Sie zu viel Zeit mit Lernen verbringen und wirklich nicht die Erfahrung sammeln, die erforderlich ist, um vollständig zu verstehen, was Sie lernen.

Lassen Sie uns ein Beispiel mit Entwurfsmustern geben. Designmuster sind großartig und Sie sollten sie definitiv verwenden. Bei Überbeanspruchung wird Ihr Code jedoch kompliziert und schwer verständlich. Sie müssen sich dem Problem stellen, das ein Entwurfsmuster löst, und einige Zeit verlieren, um es oder seine Nebenwirkungen zu lösen, um vollständig zu verstehen, worum es im Entwurfsmuster geht. Entwurfsmuster müssen im Laufe der Zeit als kleine Refactorings verwendet werden, wenn der Code wächst. Und Sie wissen, wann ein Entwurfsmuster benötigt wird, wenn der Nutzen größer ist als die durch seine Verwendung verursachte Codekomplexität. Dies erfordert Erfahrung.

Also definitiv, erledigen Sie Dinge, sie lernen aus Ihren Fehlern. Ich kann nicht mehr darauf bestehen: GET THINGS DONE !

deadalnix
quelle
Gut ... Großartige * Antwort und etwas, das ich verstehe - ich verstehe die Notwendigkeit, das Thema "Programmieren" insgesamt zu verstehen, nicht jedes der von Ihnen erwähnten Themen. Ich mache mir keine allzu großen Sorgen um einen Job in diesem Bereich, da ich eine gut bezahlte Rolle bei der Verwaltung einer E-Commerce-Website habe, mit der ich auf absehbare Zeit definitiv zufrieden bin. Mein Interesse an der Programmierung würde ich als ernstes Hobby einstufen, obwohl ich es gerne nutzen würde, um sowohl meinen als auch den Workflow anderer bei der Arbeit zu verbessern.
Anonym
Eine Bearbeitung wurde hinzugefügt, um die Dinge als Anfängersicht klarer zu machen.
Deadalnix
4

Was die guten Programmierer von den schlechten unterscheidet, ist ihre Fähigkeit, in JEDER Sprache zu programmieren. Wie andere Poster bereits bemerkt haben, können Sie mit jeder wichtigen objektorientierten Sprache großartige Programme erstellen und gefragt sein.

Auch wenn Sie noch in der Schule sind, stellen Sie sicher, dass Sie einige Schreibkurse belegen. Die besten Ingenieure und Programmierer sind auch diejenigen, die ihre Ideen gut kommunizieren.

Sobald Sie anfangen zu arbeiten, ist es am besten, sich über aktuelle Trends zu informieren, um zu verhindern, dass Sie veraltet sind. Haben Sie keine Angst, einen Job für einen anderen zu verlassen, wenn dieser nicht die aktuelle Technologie verwendet oder schreckliche Prozesse usw. hat. Das Schlimmste, was Sie für Ihre Karriere tun können, ist, einen Job anzunehmen, bei dem Sie mit alter Technologie oder schwachen Prozessen arbeiten.

Bill Leeper
quelle
Ich schätze, dass fundierte Kenntnisse der Programmierkonzepte wichtig sind, um "in diesem Spiel" gut zu sein, aber Kenntnisse der tatsächlichen Sprachsyntax / Standardbibliothek und was sich noch nicht als wesentlich erweist, um alle Funktionen der Sprache zu nutzen (falls zutreffend). Leider bin ich noch nicht in der Schule, ich arbeite - obwohl ich, wie ich in einem früheren Kommentar sagte, ziemlich gut bezahlt bin, mache ich mir über diesen Aspekt keine allzu großen Sorgen. Danke für die Antwort. =)
Anonym
4

Die Antwort von @deadalnix ist gut. Ich würde drei Dinge hinzufügen:

  1. wiederverwendbare Informationen kommen aus der Mitte, nicht aus den Extremen. Minsky stellt dies in seinem Buch Society of Mind ausführlich vor, daher fasse ich es einfach so zusammen: Die oberste Schicht ist zu nahe an der spezifischen Lösung, als dass ein Großteil davon auf das nächste Problem angewendet werden könnte, während die unterste Schicht zu nahe an der liegt spezifische Plattform für einen Großteil davon für das nächste Problem. In der mittleren Schicht befinden sich die wiederverwendbaren Informationen - die Algorithmen, Muster, Taxonomien, Taktiken, Strategien, Techniken, Organisationen, Protokolle usw., die im Allgemeinen nützlich sind, um ähnliche Probleme unabhängig von Domäne (oberste Schicht) oder Plattform (unterste Schicht) zu lösen ). Hinweis: Diese Ebenen haben nichts mit dreistufiger Architektur zu tun. Wir sprechen hier von Problem-Raum- / Lösungsraum-Semantik.
  2. Sie werden nicht wissen, was häufig / allgemein / wiederverwendbar ist, bis Sie mindestens zwei Instanzen davon gesehen haben. Studieren Sie also, wie Windows intern funktioniert, und untersuchen Sie dann, wie Linux / Unix intern funktioniert, und vergleichen Sie die beiden. Die üblichen Dinge sind wiederverwendbar. Die verschiedenen Dinge sind Entwurfsentscheidungen, die auch zu wiederverwendbaren Erkenntnissen führen können.
  3. Überlegen Sie sich für eine bestimmte Situation oder ein bestimmtes Problem, wie Sie die Lösung implementieren könnten, vergleichen Sie dann Ihre Sessellösung mit der tatsächlichen Lösung und versuchen Sie, die möglichen Gründe für die Unterschiede zu verstehen.
Steven A. Lowe
quelle
Tolle Ergänzungen!
Deadalnix
2

Da Sie am Anfang stehen, würde ich sagen, lernen Sie einfach eine Sprache, egal welche. Die Schwierigkeit liegt nicht in der Sprache (Syntax) selbst, sondern im Verständnis der Konzepte; und diese allgemeinen Programmierkonzepte gelten für alle Programmiersprachen, so lernen Sie Ihre zweite und dritte und vierte (...) Sprache wird viel einfacher sein.

Denken Sie also am Anfang nicht zu viel darüber nach, „zukunftssicher“ zu sein. Versuchen Sie jedoch im Laufe der Zeit, Sprachen zu beherrschen, die sich stark voneinander unterscheiden. Grundsätzlich sollten Sie (wie Sie sagten) mit einer einfachen (-ish) Sprache wie C / C ++, einer höheren Programmiersprache wie Java und einer Skriptsprache (Python, Ruby usw.) vertraut sein. Wenn Sie in die wirklich fortgeschrittenen Dinge einsteigen möchten, müssen Sie auch Assembly kennen.

Aber betonen Sie sich jetzt nicht zu sehr. Das Programmieren zu lernen dauert Jahre. Wählen Sie für den Moment einfach eine Sprache wie Java oder C # oder was auch immer und versuchen Sie es. :) :)

Paul
quelle
Ich mag die 'Pick One' und mache es ... Ich werde sie wahrscheinlich übernehmen. Ja oder nein, um eine Sprache auf niedriger Ebene (C), eine Sprache auf hoher Ebene (Java) und eine Skriptsprache (Python) auszuwählen und alle drei gleichzeitig zu lernen?
Anonym
Beginnen Sie gerade mit dem Programmieren? Dann lerne nicht mehr als eine Sprache gleichzeitig, es wird dich nur verwirren. Was Sie am Anfang lernen müssen, sind die Konzepte, nicht die Sprachen. Sie sollten nur dann zu neuen Sprachen wechseln, wenn Sie dazu aufgefordert werden. Zum Beispiel hatte ich erst vor kurzem das Bedürfnis, in Skriptsprachen zu wechseln, und das liegt daran, dass ich beschlossen habe, mein Spiel mit Python skriptfähig zu machen.
Paul
Ich würde nicht sagen, dass ich gerade erst anfange - ich kenne HTML / CSS seit Jahren (obwohl sie nicht wirklich qualifiziert / irgendwie irrelevant sind) und baue seit einigen Monaten PHP / MySQL-Websites. Webentwicklung, mit der ich auskommen kann, es ist Softwareentwicklung, die ich in Angriff nehme. Ich werde aber beachten, was du sagst.
Anonym
If you want to go into the really advanced stuff you must also know Assembly- Sie können dies in jeder Stufe tun, die Herausforderungen sind einfach unterschiedlich.
Sixtyfootersdude
1

Wäre es richtig zu denken, dass solide Kenntnisse in C / C ++ für Back-End-Logik / Low-Level-Programmierung und dergleichen in Kombination mit einer extrem portablen Sprache wie Java für GUIs usw. eine gute Grundlage für die Softwareentwicklung wären? das wird sich auf den meisten Systemen als nützlich erweisen?

Ich spreche von Desktop-PCs, Tablets, Telefonen.

Nichts davon wird helfen.

Eine solide Kenntnis der Datenstrukturen und Algorithmen - unabhängig von einer bestimmten Programmiersprache - ist wertvoller als "Low-Level-Programmierung und dergleichen".

Eine "extrem portable Sprache wie Java" ist genauso portabel wie C und hilft nicht. The Next Big Thing unterscheidet sich so stark von diesen Sprachen, dass Ihr super-portables Java eine Haftung und kein Vorteil darstellt.

Mac OS (Desktop, Tablet und Telefon) wird in Ziel C ausgeführt. Dies könnte ein Ausgangspunkt sein.

Windows (Desktop, Tabelle und Telefon) wird in C # ausgeführt. Das könnte ein Anfang sein.

S.Lott
quelle
Ich habe Java mit C als tragbare Sprachen verglichen - wobei Java auf niedriger bzw. hoher Ebene ist, was irgendwie wahr ist ... Wie Sie gerade selbst gesagt haben, ist Mac OS = Obj-C, Windows = C # wo ich mich nicht auf eine spezialisieren und meine Optionen oder beides abschneiden und ein "Meister der Nichts" sein möchte, wenn du meinen Drift fängst. Ich weiß zu schätzen, was Sie sagen, aber eine solide Kenntnis von Datenstrukturen und Algorithmen ohne Kenntnis einer Programmiersprache ist genauso nutzlos wie die Kenntnis einer Programmiersprache ohne letztere.
Anonym
@ Chris Bridgett: Sie verwechseln den Punkt völlig. Es gibt universelle Grundlagen, und eine Programmiersprache ist keine. Lernen Sie zunächst die Grundlagen. Dann bereift einfach eine Sprache (oder ein Betriebssystem) den Kuchen. Grundlagen sind der Kuchen und zukunftssicher.
S.Lott