Als ich 2004 mein Studium abschloss, gab es in unserer Stadt fast keine Entwicklungsteams. Wo arbeiten, von wem praktische Erfahrungen sammeln?
Die Wahl war einfach: "admin" oder "nach Moskau". Oder den Beruf verlassen.
Jetzt unterrichte ich Webentwicklung an lokalen Universitäten, leite ein großes Team und es ist mir wichtig, dass kluge junge Leute in meiner Stadt leben wollen, damit unsere Stadt nicht als „fauler Ort“ gilt.
Das Wesentliche des Artikels ist kurz
Meine Kollegen und ich wissen, wie man Webprogrammierer von „fast Null“ auf das Niveau eines selbstbewussten Profis (Senior / Architekt) „wächst“.
Wir möchten Ihnen erklären, wie alles funktioniert, und Materialien und Methoden mit der Community teilen.
Dieser Artikel richtet sich an Studenten, Anfänger und wachsende Webentwickler.
Im Folgenden werden der „Entwicklungspfad eines Webentwicklers“, die Kompetenzstufen „Trainee“, „Junior“, „Middle“, „Senior“ und „Architect“, wie ich sie sehe, sowie Beispiele für Zertifizierungsaufgaben beschrieben.
Die Pyramide der Programmiererfähigkeiten oder "was zu Beginn heruntergeladen werden soll"
Wie werde ich ein guter Webprogrammierer? Muss ich "Informatik" an einer guten Universität beenden? Oder reichen monatliche Kurse aus? Oder "mit einem Buch und einer Maus" können Sie alles studieren?
Drei "Säulen", auf denen der Beruf eines Entwicklers auf einem Technologie-Stack steht, sind Algorithmen, Datenbanken und die Programmierung selbst (Sprache + OOP + Muster).
Was ist Algorithmisierung?
Ein nahes "alltägliches" Analogon der technischen Fähigkeit der "Algorithmusisierung" ist die Lüfterreparatur. Was ist, wenn es sich nicht dreht? Überprüfen / wechseln Sie die Buchse, drehen Sie die Klingen von Hand und "klingeln" Sie den Draht.
Die Logik ist offensichtlich: "Ich habe in Teile geteilt und jeden überprüft." Überraschenderweise wissen viele Menschen nicht, wie sie so denken sollen. Dies liegt einem echten Programmierer im Blut.
Datenbank
Der DB-Kurs ist einer der Hauptkurse, wie die Physik für einen Ingenieur. Die schlechte Nachricht ist, dass sie oft gleich schlecht unterrichtet werden: Sie werden auf "Nacherzählen von Absätzen" reduziert.
Sowohl Theorie als auch Praxis sind in der DB wichtig. Der Programmierer muss in der Lage sein, Abfragen zu schreiben, die ORM-Logik zu verstehen und die Struktur zu entwerfen.
Welche Technologien muss ein Programmierer kennen?
Woraus besteht die Professionalität eines Entwicklers? Der ungefähre Entwicklungszeitpunkt ist für den klassischen Entwicklungspfad (ab Universität) angegeben.
Die Algorithmusisierung wird in der Schule / Universität „nach dem Verstand“ gelehrt. Dies dauert 1-2 Jahre, und dieser Zeitraum bestimmt die Höhe des zukünftigen professionellen Starts. Wenn Sie keine Algorithmen beherrschen, werden Sie niemals erwachsen.
Die Merkmale einer bestimmten Sprache können ziemlich schnell erlernt werden. Wenn Sie eine zweite oder dritte Sprache lernen, lösen Sie Ihr erstes bedeutungsvolles Problem in einer Woche. Aber "Ich weiß es perfekt" wird mindestens ein Jahr dauern.
Frameworks enthalten häufig Hunderte von Modulen / Klassen / Erweiterungen und werden ständig weiterentwickelt. Das Beherrschen des Frameworks dauert mindestens einige Monate.
Viele Autodidakten folgen dem „einfachen“, aber falschen Weg: Statt algorithmisch lernen sie das Framework. Und nach ein paar Monaten erklären die Praktizierenden, dass sie programmieren können. Sie scheitern an ernsthaften Interviews innerhalb von 10 Minuten nach dem Start.
Spezifische Technologien (z. B. AJAX, serverseitiges JS-Rendering, Push & Pull, Lastausgleich über Geo-Cluster hinweg, Profilerstellung langer Abfragen in xhprof, Nachrichtenwarteschlangen, NoSQL-Datenbanken) sind endlos. Sie können sie für immer lernen.
Diese Pyramide muss „von unten nach oben“ durchquert werden. Wenn Sie mit einem Framework beginnen und einen schönen Lebenslauf schreiben, aber nicht wissen, wie "Bare JS" oder "Wie sich eine Get-Anfrage von einem Post unterscheidet" funktionieren, sind Sie kein Profi.
Welche Aufgaben müssen gelöst werden?
Die erste Stufe ist "Start". Erstens benötigen Sie die Fähigkeit zur sicheren und korrekten Lösung relativ einfacher Aufgaben. Meist handelt es sich dabei um spielerische, mathematische oder logische Probleme.
Für die Fähigkeit "Ich schreibe einfachen Code schnell" müssen Sie eine der klassischen Sammlungen von Programmierproblemen in einer beliebigen Programmiersprache lösen. Zum Beispiel Zlatopolsky .
Es mag Ihnen seltsam erscheinen, 1000 langweilige Probleme zu lösen, aber jeder gute Programmierer hat es zu Beginn seiner Reise getan. Jemand - am Institut, jemand in der Schule, unsere Kinder werden es in Kindergärten tun.
Diese Lehrmethode von Ärzten wird als "Lead-W * Py-Methode" bezeichnet. Vergib mir, dass ich unhöflich bin, aber du kannst keine Worte aus der Volkskunst herauswerfen.
Die zweite Stufe ist „Übung“.Sie müssen Code schreiben, den Sie in einem Jahr herausfinden können. Wenn neue Anforderungen angezeigt werden, müssen Sie nicht alles von Grund auf neu schreiben. Wenn das Projekt 100-mal wächst, bleibt es „unterstützt“. Wenn sie dem Team Programmierer hinzufügen, beißen sie Sie nicht für einen seltsamen Stil.
Dies ist ein sehr schwieriger Übergang. Viele Programmierer tun dies nie: Sie werden "Ein-Programm" -Entwickler oder schreiben immer Projekte mit nicht mehr als 200 Zeilen. Dies ist kein Pro-Level.
Um zu lernen, müssen Sie große Probleme in einem Team lösen und parallel die richtigen Bücher lesen. Zum Beispiel Robert Martins "Clean Code" .
„Große Aufgaben“ sind echte Dienste, die von Personen genutzt werden. Das Team besteht aus mindestens zwei Personen und besteht aus Tausenden von Codezeilen. Solche Projekte bilden einen selbstbewussten Spezialisten.
Die dritte Stufe ist "Meisterschaft". Es beinhaltet das Beherrschen bestimmter Frameworks innerhalb des ausgewählten Technologie-Stacks. Sie müssen lernen, echte moderne Probleme auf hohem Niveau zu lösen.
Ein schwierigeres und nützlicheres Buch sind Martin Fowlers Enterprise Application Patterns . Es muss auch gelesen werden, nach ungefähr anderthalb Jahren Arbeit im Beruf.
Und warum? Kann ich den dreimonatigen Kurs "Webentwickler" beenden?
Überraschenderweise kommen „Programmierer“ oft zu Interviews. Sie haben Kurse, mehrere Jobs, Portfolios mit schönen Websites (seltsame Art, als ob wir einen Webdesigner suchen).
Gleichzeitig kennen die Benutzer häufig die Antwort auf die einfachste Frage wie „Was sind Cookies?“ Oder „Wie funktioniert das Laden von Nachrichten im VKontakte-Feed?“ Nicht. Sie haben nicht einmal Versionen.
Ein guter Programmierer kennt die Theorie und wendet sie in der Praxis an. Er denkt ständig darüber nach, wie man es richtig macht. Das "Rückenmark" und das "Kopieren von Codeteilen von Google" bringen Sie nicht sehr weit. Sie brauchen eine Basis und Übung.
Wie bekomme ich diese "Basis"? Wo ist der richtige Ort zum Lernen? Es gibt zwei Möglichkeiten. Der erste ist 4-5 Jahre an einer guten Universität. Das zweite ist ein paar Jahre hartnäckiges Selbststudium und Üben. Sie können ein starker Programmierer ohne spezielle Ausbildung werden, wenn Sie einen hellen Kopf, ein offenes Herz und selbst bereit sind, hart zu arbeiten.
Kurze Kurse sind nützlich, um Grundkenntnisse zu erwerben und zu verstehen, wo man sich graben kann. Sie werden keinen Profi machen.
Kompetenzmatrix. Praktikant - Junior - Middle - Senior - Architekt
Wir glauben, dass unsere Matrix die Antwort auf die Frage ist, wie man vom Anfänger zum Webentwicklungs-Guru wird.
In unserer Welt befasst sich ein Entwickler hauptsächlich mit Backend-Aufgaben, aber er sollte keine Angst vor dem Frontend und der Verwaltung haben (es gibt enge Spezialisten für böse Aufgaben).
Eine vollständige Matrix mit Beispielfragen zur Zertifizierung finden Sie hier.
Dies ist eine Tabelle, die in Klassen unterteilt ist (Praktikant, Junior, Mittel, Senior). Jede Note enthält eine Reihe einzigartiger Kompetenzen. Die Fragen sind nach Fachgebieten gruppiert (PHP, SQL, Frontend, Webtechnologien im Allgemeinen und Serververwaltung).
Auszubildender
Zu Beginn muss der Auszubildende in der Lage sein:
- Cookies sicher von Sitzungen unterscheiden;
- verstehen, dass eine bestimmte Operation auf dem Server oder im Browser stattfindet;
- eine einfache Datenverwaltungsaufgabe in PHP ohne Server-Frameworks zu schreiben. Zum Beispiel "Verwalten einer Datenbank mit Gruppen und Schülern mit Bearbeiten, Löschen, Erstellen und Anzeigen";
- Ordnen Sie das Ergebnis Ihrer Arbeit anständig.
Der Auszubildende studiert. Seine Hauptaufgabe ist es, Wissen zu erlangen, Probleme unter Aufsicht zu lösen und - große Treffer zu erzielen.
Fast jeder Auszubildende löscht eine Basis, verpasst ein Fenster oder löst ein lange geschlossenes Problem erneut. Natürlich kein Schaden, um Projekte zu bekämpfen.
Fehler sind ein normaler Teil des Lernens.
Junior
Junior kann Probleme selbst lösen. Er konsultiert oft seine Ältesten, aber die Fragen, die er stellt, sind überhaupt keine Praktikanten.
Was Junior zu Beginn praktisch kann:
- die Autorisierung auf der Website neu schreiben (und das bedeutet, dass Sie sie gründlich verstehen);
- Bearbeiten Sie die Einstellungen und den Framework-Code der Arbeit von Verzeichnissen, Newsfeeds und Formularen sicher.
- Sammeln Sie einfache Datenverwaltungsschnittstellen und ganze Sites im Framework.
- Schreiben Sie eine einfache Integration mit einer externen API.
Mitte
Middle ist ein Spezialist, der in der Lage ist, jedes typische Branchenproblem selbst zu lösen.
Was Middle zu Beginn kann:
- Arbeiten Sie mit einer externen Autorisierung (melden Sie sich über einen externen Anbieter an oder machen Sie Ihren Code zu einem Autorisierungsanbieter).
- die Schnittstellen öffentlicher Online-Shops, Marktplätze oder Intranet-Portale (abhängig von den Besonderheiten) sicher programmieren;
- Sammeln komplexer Datenverwaltungsschnittstellen und -abschnitte im Framework;
- Schreiben Sie komplexe Integrationen mit externen APIs und implementieren Sie Webdienste.
Senior
Senior kennt „seinen Stack“ genau, lernt und wendet neue Technologien an und arbeitet als Mentor.
Zum Beispiel, was der Senior selbst über den Block „Arbeiten mit Servern und Linux“ wissen und können sollte.
- Erstellen Sie ein atypisches Rollout-System
- Arbeiten mit Microservices.
- Organisation von Lasttests
- Kontinuierliche Integration konfigurieren
- Dateisynchronisation und Datenreplikation
- Erstellen Sie einen fehlertoleranten und hochlastigen Cluster mit und ohne Bitrix Framework.
- ELK / andere Protokollierungs- und Analysesysteme
- Gearman / RabbitMQ-Warteschlangenserver und Aufbau verteilter Systeme
In der Regel spielt Senior die Rolle des technischen Leiters des Entwicklungsteams.
Architekt
Ein Architekt ist die nächste Entwicklungsstufe für einen Spezialisten, wenn er über die Architektur großer Projekte nachdenkt und deren Umsetzung leitet. Er ist nicht nur ein technischer, sondern auch ein Projektmanager.
Solche Spezialisten spielen eine Schlüsselrolle in technisch und organisatorisch komplexen Projekten.
Die Qualität eines Architekten bestimmt die Fähigkeit eines Projekts, pünktlich abgeschlossen zu werden und sich viele Jahre hintereinander zu entwickeln.
Programmierer-Entwicklungsmanagement
Jeden Monat führen wir mit jedem Programmierer individuell ein "Entwicklungsplanungstreffen" durch und sprechen über andere Arbeitsthemen. Abteilungsleiter, technischer Leiter und / oder Mentor sind beteiligt.
Während solcher Treffen definieren wir gemeinsam Entwicklungsprioritäten - um eine Labor- oder mündliche Kompetenzprüfung zu bestehen.
Wie ist der Level Check (Zertifizierung) organisiert?
Was ist eine Bescheinigung? Dies ist ein Verfahren zur Bestätigung der Qualifikationen eines Programmierers. Alle Programmierer bestehen es. Die Zertifizierung umfasst Laborarbeiten und mündliche Prüfungen.
Als Ergebnis der Bescheinigung erscheint "Ja" gegenüber den bestätigten Kompetenzen in der Kompetenzmatrix. Dies erhöht die Note, zum Beispiel "Trainee-54%" → "Junior-27%".
Wie läuft die Zertifizierung?
Die Zertifizierung umfasst Theorie (mündliche Prüfung) und Praxis (Laborarbeit). Ziel ist es, mehrere Kompetenzen in der Matrix zu „schließen“, das Niveau zu bestätigen, neue Aufgaben zu erhalten und die Gehälter zu erhöhen.
Praktische Übungen können nur korrekt durchgeführt werden, wenn Sie die Theorie studieren und verstehen. Betrug und Betrug werden nicht akzeptiert und der Mentor wird den Hack nicht verpassen.
Viele Blöcke der Kompetenzmatrix werden durch die Praxis geschlossen und es gibt keine theoretischen Fragen dazu.
Theorie. Mündliche Prüfung
Kompetenzen, die nicht durch Laborarbeiten abgedeckt sind, müssen in einer mündlichen Prüfung bestätigt werden.
Für jede Kompetenz stellen wir ungefähr 5 Fragen. Auf freundschaftliche Weise müssen Sie alles oder fast alles beantworten. Die Dauer der mündlichen Prüfung hängt vom Niveau ab, normalerweise 1-2 Stunden.
Trainieren. Laborarbeiten
Die Laborarbeit umfasst mehrere Kompetenzen gleichzeitig. Nach Abschluss der Laborarbeiten gelten diese Kompetenzen als bestätigt und fallen nicht in die mündliche Prüfung.
Die Laborarbeit endet mit einem Bericht. Der Bericht kann eine Demo, eine Codeüberprüfung und mündliche Fragen enthalten. Die Anzahl der Überprüfungen hängt vom Labor selbst ab.
Ungefähre Formulierungen von Aufgaben
Wir haben ungefähr 20 Aufgaben entwickelt (wir nennen sie normalerweise "Laborarbeit" für Studenten). Mehrere - wir werden veröffentlichen.
Hier sind Beispiele für einfache Aufgaben.
Aufgabe 2a. "Basic Web". Lassen Sie uns CRUD in reinem PHP implementieren.
Kompetenzen:
- PHP: Site-Authentifizierung und Autorisierung
- PHP: Verarbeitung eines Feedback-Formulars mit Datenspeicherung und -validierung
- Frontend: Erstellen von HTML-Formularen
- Vorderseite: CSS-Syntax und Selektoren, Grundlegendes zu Selektorgewichten
- SQL: MySQL-Grundlagen
- SQL: Datentypen
- PHP: PHP-Sprachensyntax
Die Essenz:
- Erstellen Sie ein Repository auf Bitbucket und führen Sie es aus.
- Machen Sie sofort eine Verzweigungs- und Pull-Anfrage.
- Installieren Sie das Statistik-Plugin in PhpStorm. Die maximale Anzahl von Zeilen für das gesamte Projekt beträgt 1500:
- Erstellen Sie die erforderlichen Tabellen über PhpStorm und füllen Sie sie mit Daten.
- eine Authentifizierungsseite erstellen;
- Erstellen Sie eine Seite mit einem Feedback-Formular, das Folgendes enthält: ein Textfeld, ein mehrzeiliges Textfeld, Optionsfelder, Kontrollkästchen, eine Dropdown-Liste, eine Schaltfläche zum Zurücksetzen von Formularen und eine Schaltfläche zum Senden von Formularen;
- Das Feedback-Formular steht nur autorisierten Benutzern zur Verfügung. Das Zulassungskriterium ist, dass Sie am System angemeldet sind.
- Alles ist schön angelegt. Zeigen Sie ein Beispiel für die Verwendung der grundlegenden Selektortypen: ID, Klasse, Attribut, Pseudoklasse, Pseudoelement.
- Beide Formulare müssen ohne JS verarbeitet werden.
- Überprüfen Sie über PhpStorm, ob Daten zur Tabelle hinzugefügt werden.
Überprüfung:
- Die Qualität der Zerlegung von PHP, JS und CSS wird überprüft.
- die Fähigkeit, Verantwortung zuzuweisen und die richtigen Abhängigkeiten zwischen MVC / EZB-Komponenten herzustellen;
- Sicherheitszugang);
- Sicherheit (XSS, SQL-Injection);
- Richtigkeit der Weiterleitungen;
- Einheitlichkeit des Codierungsstils.
Entwicklung der Aufgabe
Aufgabe 2b. Entwicklung der CRUD-Schnittstelle in PHP.
Kompetenzen:
- 3 Möglichkeiten, ein Skript zu verbinden
- HTML-Formulare erstellen
- CSS-Syntax und Selektoren, Grundlegendes zu Selektorgewichten
- JS: Operatoren, Funktionen
- Debuggen von JS über die Browserkonsole
- MySQL-Grundlagen
- Datentypen
Fazit: Wir arbeiten ab Aufgabe 2a weiter an der Site:
- Erstelle ein Mini-Admin-Panel:
- eine Liste der eingereichten Feedback-Formulare;
- Die Liste sollte nach dem Datum der Einreichung sortiert werden, neue - zuerst;
- Die Liste kann "aktualisiert" werden. Dies erfolgt mit AJAX.
- Tipp: Verwenden Sie zum interaktiven Testen von Datenbankabfragen die Datenbankkonsole in PhpStorm.
- Das übermittelte Formular kann aus dem Administrationsbereich entfernt werden, alles unter AJAX.
- auf diese Weise alle Möglichkeiten zum Verbinden von JS demonstrieren;
- Die übermittelten Daten können bearbeitet werden (verwenden Sie ein bereits entwickeltes Formular ohne AJAX).
- jQuery kann verwendet werden.
- Öffnen Sie Entwicklertools (vorzugsweise Firefox):
- Suchen Sie die Quelle der Anforderung aus dem Anforderungsprotokoll.
- Setzen Sie einen Haltepunkt, provozieren Sie die Codeausführung und untersuchen Sie die schrittweise Codeausführung.
- Zeigen Sie während der schrittweisen Ausführung die Werte von Variablen über den entsprechenden Inspektor an.
- Uhr hinzufügen;
- Verwenden Sie die Konsole, um auf Variablen im aktuellen Bereich zuzugreifen.
Überprüfung:
- Die Qualität der Zerlegung von PHP, JS und CSS wird überprüft.
- die Fähigkeit, die richtigen Abhängigkeiten zwischen MVC / EZB-Komponenten hervorzuheben und festzustellen;
- Sicherheitszugang);
- Sicherheit (XSS, SQL-Injection);
- die Einheit des Codierungsstils;
- Alle Punkte zur Verwendung von Entwicklertools zur Demonstration.
Hier ist ein Beispiel für
Aufgabe 10 mit mittlerem Schwierigkeitsgrad . Web-Scraping-
Kompetenzen:
- Reguläre Ausdrücke
- HTTP-Anfragen vom Server cURL
- TODO: Schreiben von Konsolendienstprogrammen (und einmaligen Skripten) basierend auf der Bitrix Framework-Codebasis
- TODO: CRON hinzufügen
Die Essenz:
- Analysieren Sie die Site und überlegen Sie sich Datenstrukturen, die für die automatisierte Verarbeitung geeignet sind
- Analysieren Sie die Site in diese Strukturen
- Design als CLI-Skript
- Einstellungen zur Implementierung der Fähigkeit, nicht alles zu analysieren, sondern nur das, was der Benutzer benötigt
Überprüfung:
- Korrektheit der CLI-Umgebung
- Regex-Zersetzung
- Kosteneffizienz auf Anfrage
- Fehlerverarbeitung
- die Möglichkeit der parallelen Analyse mehrerer Objekte gleichzeitig
- Arbeiten Sie im Konsolen- und interaktiven Modus
- * Arbeiten im Modus eines externen Dienstes, auf den über HTTP zugegriffen werden kann, mit Unterstützung für Warteschlangen
Anzeigen und Herunterladen der Kompetenzmatrix - 2020
Ich bin sicher, dass sich auf diese Weise Schritt für Schritt mit einem Mentor und einer ständigen Codeüberprüfung durch eine Kette von Zertifizierungen der richtige Entwickler "vom Auszubildenden zum Architekten" entwickelt.
Diamanten bilden sich unter Druck.