Welche Programmiersprache soll man 2018 lernen und warum?

Wenn Sie beharrlich in das Entwicklungsteam des Compilers oder in die „Wild West-Welt“ einsteigen möchten, können Sie die beste Programmiersprache von TIOBE auswählen und lernen, und das Beste von allem: auf der Ebene der Spezifikation. Aber im Ernst, jetzt in der Branche ist alles so verwirrt mit Logik und Schlussfolgerungen, so viel Marketing und Wasser, dass die erfolgreichste Strategie darin besteht, das eigene Gehirn einzuschalten und die technischen Werte, an die wir so gewöhnt sind, ausdrücklich neu zu bewerten. In diesem Beitrag werde ich versuchen, die Entwickler, die ihre Karriere beginnen, so klar wie möglich an den Risiken der Auswahl von Technologien zu orientieren und die richtigen und weit (weit, weit) weitreichenden Schlussfolgerungen zu ziehen.

Bist du gereift oder noch nicht?


Kinder unterscheiden sich von Erwachsenen in ihrem Verständnis des Wortes „Verantwortung“. Leider werden nicht alle Kinder pünktlich erwachsen und einige sterben in der Windel. Hier gibt es nichts Schreckliches - abgesehen von einer Sache: Die Kinder im Team der Programmierer lassen andere sehr leiden, besonders wenn die Fristen abgelaufen sind und die Veröffentlichung kurz bevorsteht: Entweder hängen sie plötzlich mitten im offenen Raum herum oder sie benötigen einen Schnuller während eines Brainstormings des Themenbereichs mit Vertretern des Kunden.



Erwachsene unterscheiden sich von Kindern darin, das Schlüsselprinzip des IT-Managements zu verstehen: „Programmieren ist ein Privileg“. Unter den erfahrenen und erfolgreichen Mitentwicklern sind die am besten geeigneten und gut codierten und gleichzeitig „das Unternehmen vorwärts bringen“.

IT-Branche - verrückt geworden


Ja, wir sind Menschen und anfällig für Emotionen. Bisher weiß aber niemand, wie man richtig programmiert, obwohl seit der Erfindung des Computers mehr als 50 Jahre vergangen sind. Niemand! Jeder ist nur hysterisch und versucht, mehr Unterstützer für sein Camp zu gewinnen, während er das Geschäft dazu verführt, ein eigenes Projekt zu erstellen :-) Ich werde es anhand eines Beispiels erklären.



Die Geschwindigkeit des Gehirns


Tatsache ist, dass die ersten Computer sehr langsam, sehr langsam und sehr teuer waren. Daher wurden die ersten Programme in sehr einfachen Sprachen und manchmal direkt in Maschinencode geschrieben. Heutzutage werden solche „prähistorischen“ Technologien manchmal verwendet, aber sinnvoll: zum Erstellen von Betriebssystemen und deren Komponenten (in der Nähe der Hardware), für Spiele-Engines, für Hochleistungsbibliotheken und -server , für Kryptowährungen und natürlich zum Erstellen von Programmiersprachen .

Und wenn sich C trotz seiner völligen Undichtigkeit und hohen Gefahr für den Entwickler als wirklich gut herausstellte und die Herzen von Kennern eroberte, dann erwies sich C ++ als äußerst hässliche und widersprüchliche Kreation - aber was zu tun ist, ist das Leben. Vielleicht wird Rust mit den richtigen Ideen für einen sicheren Umgang mit dem Speicher die Situation zum Besseren beeinflussen, aber in Bezug auf die Hässlichkeit der Syntax und die Unlesbarkeit scheint er C ++ weit hinter sich gelassen zu haben.

Die Situation wird durch das Erscheinen von Golang weiter verschärft. Einerseits - es gibt nichts Neues, den demobischen Akkord des großen Ken Thompson : nur miserable Überreste von Java-Funktionen. Auf der anderen Seite ist es wirklich einfacher geworden, "relativ" System- und Multithread-Software zu schreiben, und dies ist eine Tatsache, die viele Unternehmen bewertet haben :-)

In diesem Camp finden Sie meist fundierte Low-Level-Technologien und Hardware von „echten“ Hardcore-Bartprogrammierern, die normalerweise eine Programmiersprache lernen, dann aber mit einer Compilerspezifikation anstelle einer Frau schlafen gehen. Wirklich, es gibt coole Leute in diesem Lager. Und wenn Sie nicht wissen, welche x86-Prozessorbefehle in Python zu einer Zerlegung führen, schämen Sie sich und schämen Sie sich. Ratschläge: Vermeiden Sie dieses Camp, bis Sie bis zum Ende des Beitrags gelesen haben.

Aber die Münze hat eine Kehrseite. Die Projekte hier werden nicht nur lange, sondern ... seit Jahrzehnten durchgeführt . Low-Level-Programmiersprachen helfen nicht, sondern stören. Es kommt ständig zu Verstößen bei der Arbeit mit dem Gedächtnis, Dutzende und Hunderte von Testern sind erforderlich (oder Sie können es auf Github stellen und wir werden es gemeinsam testen) und Tausende von Einheiten und anderen Arten von Tests, um es zum Abheben zu bringen . Viele Entwickler, die zu Beginn der Projekte dem Team beigetreten sind, erleben die Veröffentlichung nicht mehr und sterben an Altersschwäche, was Betatestern zu ihrem letzten Atemzug verhilft. Aber diese mutigen Menschen tun, bevor sie aus den Augen bluten, bevor Stigmata auftreten, alles Mögliche und ... Meisterwerke werden geboren.



Gehirnarchitektur und Unternehmen


Weil Niemand weiß noch, wie man richtig programmiert. Die Methode des "kompetenten Designs und der Zuverlässigkeit" wurde durch natürliche Selektion gebildet. Sie sind verrückt danach, in Sprachen zu programmieren, die unsichere Speicheroperationen über Zeiger ermöglichen - Sie können auch die Welt zur Apokalypse bringen: „Segmentierungsfehler in der Software eines Kernreaktors“. Wie kann man ein Projekt starten, ohne eine starke Eingabe in der Sprache zu unterstützen? Und sie haben die nächsten richtigen Programmiersprachen entwickelt: Java und C #. In Java haben sie jedoch die Gefahren von Nullwerten vergessen, und in C # haben sie nicht vollständig über die Abwärtskompatibilität nachgedacht. Das Ergebnis ist eine riesige Unternehmenswelt, relativ sicher und relativ abwärtskompatibel. In dieser Welt wird das Ziel in Codezeilen pro Tag (normalerweise nicht mehr als ein paar Dutzend, weil die Finger ins Blut gerieben werden) und dicken philosophischen und religiösen Büchern über Designmuster gemessen, und oh ja, ich habe fast vergessen, wie ich mich, das Projekt, den Kunden und die Umwelt begraben kann die Welt in den Code hinein und ertrinken darin, wobei sie sich qualvoll an die 20-stufige Hierarchie der Vererbung erinnert - über OOP . Eines der Hauptmottos des Lagers lautet: „Warum einfach, wenn möglich ... schwierig und zuverlässig, für eine lange Zeit, für Jahrhunderte!“. Darüber hinaus können einige von ihnen schnell und elegant schreiben, sich die Hände mit Blut waschen und jeden Morgen die Projektstruktur in ihren Köpfen sammeln, wobei sie 3 Monitore gleichzeitig betrachten. Aber einige sind so süchtig, dass sie weiterhin Hierarchien von Hierarchien innerhalb von Hierarchien von Hierarchien ad infinitum erstellen - und das Ziel ist längst verloren gegangen, und die Augen brennen weiter und die Hände jucken.

In Bereichen, in denen sich der Themenbereich gut eingelebt hat und in „Objekte mit Status und Nachrichten zwischen ihnen“ passt, funktioniert ein ähnlicher Ansatz sehr gut.



Es ist besonders erfreulich, wenn es eine „strenge“ statische Typisierung (Anführungszeichen, da das, was als nächstes über haskell passieren wird) gibt (wenn Entitätstypen im Voraus bekannt sind, sie vom Compiler überprüft werden und Sie der Zahl keine Zeichenfolge hinzufügen können). Leichtigkeit und Freude beim Umgestalten und Verbessern des Codes und hoch wenn Ganz zu schweigen von großartigen, hochwertigen Entwicklungsumgebungen . Die Kollegen in diesem Camp sind oft sehr gut in Softwarearchitektur ausgebildet, lesen viel (Einstiegsschwelle ist hoch), verstehen die Fähigkeiten zahlreicher Plattformbibliotheken, Entwurfsmuster, Techniken zum Schreiben von Tonnen von Dokumentation und zum Erstellen automatisierter Tests, testen diese Tests und können monatelang einen Mock schreiben, was sich herausstellt unnötig. Wiederum - Projekte werden oft über einen sehr langen Zeitraum von großen Teams erstellt und gestartet, zahlreiche Tester sind erforderlich, aber die Art der Fehler ist um eine Größenordnung weniger tödlich, was inspiriert. Der Einstieg in diese „Kaste“ der Unternehmensentwicklung ist sehr schwierig. Wenn Sie zeigen, wie Sie in PHP das 5-Zeilen-Problem lösen können, das Ihre Java-Kollegen in 5 Tagen lösen werden, werden Sie lebendig in der Mikrowelle verbrannt :-)

Zuverlässigkeit des Gehirns


Im akademischen Umfeld wurde ein weiteres Camp eingerichtet, das sehr interessant und zum Verständnis empfohlen ist, sowie eine Reihe funktionaler Programmiersprachen (Lisp, Haskell, Erlang und andere). Sind Sie verrückt danach, mit Variablen und Schleifen zu programmieren - Sie können auch viele Fehler machen! Ein Programm besteht aus einer Reihe von Funktionsaufrufen. Verwenden Sie anstelle von Schleifen die Rekursion, meine Herren! OOP? Nein, nicht gehört - Typklassen und algebraische Datentypen. Sie kennen sich mit anwendungsbezogenen Funktoren nicht aus und haben die Kategorietheorie nicht durchgesehen - ja, Sie entwickeln kein eigenes Gehirn, mein Freund.

Meiner Meinung nach muss man, um dieses Lager zu betreten und seine Werte zu verstehen, sein Gehirn so sehr belasten - für die Mathematik wird es ein Meer und noch unerwartetere, aber schönere Konzepte geben. Die in diesem Team gesammelten Erfahrungen sind von unschätzbarem Wert und werden sich bei der Arbeit mit anderen Programmiersprachen als nützlich erweisen. Sie sagen, dass jemand manchmal funktionale Sprachen in realen Projekten verwendet: Compiler, Kryptowährungen - zweifellos haben Ihre Projekte Größenordnungen weniger logische Fehler, die der Compiler abfängt, und die Kürze, Klarheit und Prägnanz des Codes in Haskell überrascht natürlich - aber in der Epoche "auf den Louboutins!" Das Studium und Verstehen dieser Schönheit wird immer weniger.



Das Ergebnis und die Wirksamkeit des „Gehirns“


Zum Teufel mit Architektur und OOP, Bruder! Cthulhu liebt dich und das Tippen von Enten ist der Schlüssel zum Erfolg! Starkes Tippen? Und wer wird bei klarem Verstand einer Zahl eine Zeichenfolge zuweisen? Statisches Tippen und Kompilieren ist Zeitverschwendung, da der Code einmal geschrieben wird. Wenn Sie keine Zeit haben, ihn für die Veröffentlichung zu schreiben, wird er weggeworfen (und sogar weggeworfen, aber etwas später). Refactoring? Richtig schreiben :-) Kapselung? Setzen Sie einen Bindestrich vor den Variablennamen und alle Dinge . OOP ist ein unnötiges Retargeting. Was zum Teufel ist F5 und Sie sehen das Ergebnis. Designmuster - nein, Sie haben noch nichts gehört: Unser Scripting ist alles ... Möchten Sie etwas Unkraut?

Das Interessanteste ist, dass wenn Sie sich mit Sprachen mit dynamischer Typisierung beschäftigen (streng in Python, nicht streng in PHP und Javascript), Ihre Augen allmählich für das wirkliche Bild der Dinge geöffnet werden, weil:

  • Der Code wird sehr klar und prägnant und es besteht keine Notwendigkeit, 20 Klassen zu erklimmen (wenn es sich nicht um Systembibliotheken handelt).
  • Sie können die Idee schnell über REPL überprüfen
  • Sprachen sind einfach, oft minimalistisch, enthalten die notwendigen und mächtigen Grundelemente (Listen, Wörterbücher), die vor allem in Ihren Kopf passen!
  • Es gibt eine Wolke von Bibliotheken und Sie können jedes Problem immer in 5 Zeilen lösen

Und zum Teufel damit, mit Refactoring :-) Das Leben hat mehr Spaß gemacht (ich hoffe, der Entwickler, der meinen Code unterstützt, weiß nicht, wo ich wohne). In diesem Camp treffen Sie oft viele fröhliche Menschen mit ganz unterschiedlichen Fachgebieten, mit Ausnahme der „Assembler-Programmierung“, die dennoch sehr schnell und effizient Probleme in 5 Zeilen lösen und Code- und Webprojekte lange und erfolgreich unterstützen können.

Schauen Sie sich die neuesten Trends in diesem Camp an und lassen Sie sich von dieser Philosophie des Glücks erfüllen. Eine einfache und verständliche Programmierumgebung im Browser . Was könnte sexier sein?



Und wie einfach ist es jetzt, einen nicht blockierenden Webserver zu errichten, der Tausende von Verbindungen in 10 Zeilen auf node.js bedient, und die Community wächst sprunghaft?

Und kein "Eclipse XML Soap Entiny Beans Enterprise OOP ..." - json und csv und ein Lächeln (und der Geruch einer unbekannten Pflanze). Und der Code wird gelesen und im Gehirn platziert, und daher funktioniert er glücklich und lange und wird viele Jahre lang mit der gleichen Leichtigkeit gepflegt.

Und es stellt sich heraus, dass „dieser Weg“ auch erfolgreich programmiert werden kann und die Jahre in „industriellen Programmiersprachen“ vergebens gelebt werden (aber die Finger wurden stärker).

Technologieauswahl


Bist du unter Schock? Ich auch. Und stellen Sie sich vor, wie begeistert die Kunden sind, wenn Sie die Technologie für die Implementierung eines Geschäftsprojekts auswählen! :-)

Ich denke, Sie haben im Moment sehr gut verstanden, dass die IT-Welt wirklich verrückt geworden ist und sich verlaufen hat (nur ein Scherz). Einige Programmiersprachen wie Scala versuchen, auf allen Stühlen zu sitzen, aber es gelingt ihnen immer noch nicht wirklich - der Code wird als Sterblicher immer schwieriger zu verstehen. Aber im Ernst, der Wettbewerb der Programmierparadigmen wird sich nur verschärfen, weil ... die Aufgaben in den Projekten völlig anders sind und von den Aufgaben, die Sie zum „Tanzen“ benötigen! In einer festgelegten Domäne (Server, Bibliotheken) ist die nominelle Typisierung (C ++, Java, C # ...) besser, irgendwo besser bei der strukturellen Typisierung (Golang, Haskell ...) und bei Web-Skripten oder Maschinenaufgaben Lernen bringt echtes Glück mit Ente (Python, PHP, Javascript ...). Es ist nicht notwendig zu glauben, dass statisches Tippen , insbesondere striktes Tippen , direkt "muss" - Sie werden die Fristen nicht einhalten und der Code mit einem zufriedenen paranoiden Gedanken über "mögliche Fehler" wird in den Papierkorb geworfen. Im Web, bei Skripten und beim maschinellen Lernen können Sie sicher mit großer Geschwindigkeit und mit dynamischer Ententypisierung sowie PHP und Python mit einer großen Anzahl an schönen und leistungsstarken Bibliotheken vorankommen. Dies ist ein gutes Beispiel.

Vergessen Sie deshalb zur Hölle: „Was lernen Sie 2018 in einer Programmiersprache?“

  • Programmierparadigmen verstehen (OOP kann ein Grab sein oder Ihnen ein Projekt ersparen)
  • Verstehen Sie die Feinheiten des Schreibens und die damit verbundenen Risiken und Chancen (Sie können das dynamische Schreiben in einer Finanzbibliothek verfluchen oder Cthulhu einen Java-Programmierer opfern und seine 100 Klassen in 100 Zeilen in einem Skript umschreiben, das selbst für Kinder verständlich ist).
  • Verstehe auf der Ebene der Intuition die Algorithmen (du musst zwischen Suchen und Sortieren und einem neuronalen Netzwerk von logistischer Regression unterscheiden - und um weiter zu verstehen, musst du lernen ... dein ganzes Leben lang, aber es lohnt sich)
  • Verstehen Sie, dass erfahrene Entwickler (obwohl niemand weiß, wo sie auf dem Markt zu finden sind) das Projekt pünktlich auf praktisch jeder Technologie (sogar Brainfuck) implementieren und es gut machen, aber Unerfahrene müssen eine Programmiersprache mit dem bequemsten Grad an Eintritts- und Kollapsrisiken wählen immer noch großartig

Wählen Sie als Nächstes den Aufgabenbereich aus, an dem Sie interessiert sind, z. B. Web- oder maschinelles Lernen, und:

  • Schau dir an, was die Leute diese Probleme lösen
  • Streuen Sie die Risiken und Chancen jedes Instruments gemäß den oben genannten Kriterien
  • Sitzen Sie ein paar Wochenenden mit 1-3 spezifischen Werkzeugen, aber auf keinen Fall den Fanatismus oder Spezifikationen
  • Gehen Sie schneller zur Sache und sammeln Sie Erfahrung im praktischen Einsatz von Werkzeugen - das ist das Wichtigste
  • Sie müssen die Programmiersprache nicht "bis zum Ende" lernen - es ist besser zu lernen, wie Sie Ihr Problem in den 5 beliebtesten Tools in 10-15 Zeilen lösen können, und Sie werden tatsächlich äußerst angemessen handeln!

Fallstudie - ML


Angenommen, Sie interessieren sich für maschinelles Lernen ... Herzlichen Glückwunsch! Auf der einen Seite gibt es eine akademische Theorie - aber Sie müssen das Wesentliche gemäß Statistik und linearer Algebra herausholen, und auf keinen Fall sollten Sie in mehrmonatigen Kursen rumhängen (glauben Sie mir, verrückt, wenn Sie kein Mathematiker, sondern ein Humanist sind - und das ist für Sie selbst nicht wahrnehmbar ) Auf der anderen Seite müssen Sie lernen, wie Sie schnell nützlichen Code schreiben und ein Problem in 5-15 Zeilen lösen. Ja, Sie können in 10.000 Jahren alles in C schreiben. Sehen Sie sich also die Erfahrungen der Kollegen an und wählen Sie richtig Python, in dem es viele Bibliotheken und vorgefertigte Lösungen zu diesem Thema gibt. Sie widmen sich ein paar Tage dem Python-Lernen - dort gibt es nichts mehr zu lernen, die Sprache ist sehr einfach (und wir haben vereinbart, nicht in die Wildnis zu klettern, weil Zeit Geld ist).

Lesen Sie außerdem über die Essenz von Numpy, Pandas, Scikit-Learn und, wenn Ihre Augen gerade sind, dann Keras und machen Sie Projekte. Aber Sie können einen anderen Weg gehen, einen langen, schwierigen, der zu persönlicher Heiligkeit und sozialer Armut führt (nach 3 Jahren werden Sie die Essenz des Algorithmus verstehen, Zeitungen in einem elektrischen Zug verkaufen, aber vielleicht ist dies ein besonderer Weg) - beginnen Sie, die Algorithmen selbst zu implementieren, mit manueller Speicherverwaltung. oder implementieren Sie eine schwerere Lösung und vertiefen Sie sich monatelang in den Code. Das falsche Werkzeug - der Schlüssel zu schlaflosen Nächten und Zeitverschwendung - vermeidet Komplexität in jeder Hinsicht.

Ein falsch gewähltes Tool, selbst das beliebteste, auch kostenlos als Geschenk, selbst wenn es theoretisch auf lange Sicht zu allem fähig ist, kann Ihr Projekt ruinieren, indem es alle Fristen nicht einhält. Minimieren Sie dieses Risiko so gut wie möglich und nicht.

Schlussfolgerungen


Insgesamt, meine Freunde, haben wir dafür gesorgt, dass niemand richtig und erfolgreich programmieren kann, auch wir Entwickler :-) Der Wettbewerb zwischen Programmierparadigmen und -technologien wächst, der Kopf schwillt an und die Freizeit wird kürzer. Daher ist die erfolgreichste Strategie für einen Entwickler, der seine Karriere beginnt, eine Dose kühles Bier zu trinken, sich zu entspannen und:

  • Vermeiden Sie das Anhaften und Eintauchen in übermäßige technologische Teile, deren Anzahl exponentiell zunimmt
  • Wählen Sie einen interessanten Problembereich, in dem Sie Kundenprobleme lösen möchten
  • lernen, kurze und erotische Essenzen aus Werkzeugen und Programmiersprachen zu extrahieren
  • Schreiben Sie so wenig wie möglich, aber klar und verständlich für Sie und die Menschen um Sie herum
  • lernen, Probleme in 5-15 Zeilen zu lösen, nicht in 20-50 Klassen
  • Wenn Sie irgendwohin gehen möchten, dann lassen Sie es grundlegende Dinge wie Mathematik, Haskell oder RFC von TCP / IP sein
  • Viel Spaß beim Programmieren und wärmen Sie Ihre Kollegen damit!



Und denken Sie immer daran, dass Zeit, insbesondere Freizeit, eine wertvolle Ressource ist und von uns abhängt, wo wir sie investieren. Viel Glück an alle und gute Laune!

Source: https://habr.com/ru/post/de417397/


All Articles