Was sollte in der Lage sein, ein guter Programmierer zu sein. Was ist die Arbeit der Technik des Programmierers? Associate Professor der Abteilung für höhere Mathematik HSE und Dozent des Zentrums für die Weiterbildung der Fakultät der Computerwissenschaften HSE HSE

Dieser Text erschien als Antwort auf die Standardreaktion der "realen Programmierer" als Antwort auf meine Wörter, die ich programmierer 1c werde. "A-A-A, 1c-Nick, ja, was ein TYPO-Programmierer, so der risionsbeschwerer Schriftsteller ist bestenfalls. Tropfen dort in Ihre Buchhaltung, und aus irgendeinem Grund betrachten Sie sich selbst Programmierer. Dieser Programmierer weiß, wie viel alles wissen sollte?"

Wenn ich daran interessiere, zu fragen, was genau der eigentliche Programmierer in der Regel weiß, bekomme ich normalerweise keine besonderen Probleme als Antwort, die privaten Probleme des Prierat, mit dem ich von dieser Minute spreche. Darüber hinaus erlassen diejenigen fast für das wahre Essenz aller Programmierungen als solche. Nun, so etwas wie - "Wenn Sie nicht wissen, wie man Semaphors in Delphi verwendet, sind Sie kein Programmierer." Oder - "Wenn Sie nicht wissen, wie die Hash-Tabellen angeordnet sind, sind Sie kein Programmierer." Ich bin es leid, ich flog im Internet und beschloss, in einem Beitrag zu sammeln, was ein echter Programmierer nach Ansicht der echten Programmierer selbst erfahren sollte. Liste des Wissens des Wissens unter dem Schnitt

MATHEMATIK

Numerische Methoden, Dichotomie / Newton-Methode, Inter- und Extrapolation, Splines, Gauß / Jacobi / Zeidel-Methode, QR und Lu-Zersetzung, SVD, MNA, Runge-Kutta-Methoden, Adams-Methode, Newton Cote-Formeln, Ritz-Methode, Bubnova-Methode - Germankin, Endunterschied / Elemente, FFT / STFT, Konvergenz und Stabilität, L-BFGs und andere Quasi-Motten-Methoden, Adjrad, Parafac, Kassow, Innenpositionsmethoden, Variationsmethoden für Bayesovsky-Ausgang, Nesterov, Automatische Differenzierung, wechselnde kleinste Quadrate, Was jeder Computer Scientis über Floating Point-Arithmetik von Goldberg, Nocedal & Wright / Boyd & Vandenberghe wissen sollte

Algorithmen, Knut-Graham-Pashnik / Zorich / Vinberg, Spivak / Dummit-Fuß, mathematische Analyse, lineare Algebra, umfassende Analyse, Funktionsanalyse, Differentialgeometrie, Nummerntheorie, differentielle Gleichungen / integrierte Gleichungen / Berechnungskalculation / optimale Steuerungen, Zeilen, Kombinatorik, Wahrscheinlichkeitstheorie / mathematische Statistiken / zufällige Prozesse / Theorie massendienst, Markov-Ketten, integrierte Transformationen (Fourier, Laplace, Wavelet), NZQrchos, Mathematica, Ahorn, Kategorie-Theorie

Informationstheorie, Komprimierung, Huffman, RLE, BWT, LZ, Fehlerkorrekturcodes, Kompressionsverluste (Bilder, Audio, Video), Information Entropie, Shannon-Formel, Komplexität von Kolmogorov, maximales Entropie-Problem, Kullback-Leibler-Divergenz, Elias / Shannon- Elias-Kodierung

Diskrete Mathematik, K2, Post-Satz, Schemata, Endautomaten (DCA und Nack), Kalashnikov-Maschine, Zellmaschinen

Kryptographie, Schneischer / Yashchenko, Kerkgoffs-Prinzip, symmetrisch (Des, AES), asymmetrisch (RSA), Qualitäts-GPSH, Diffi-Hellman-Algorithmus, elliptische Kurven, Hashing (MD5, Sha, Crcn), DHT, Kryptopie, Kryptoatika (Großmasterangriff) , Wep / wpa / wpa2 und Angriffe auf sie, digitale Signatur und Zertifikate, PKI, HTTPS / SSL, Evolution mit Null-Offenbarung, Schwelle, Murmurhash / CityHash, DKIM

Quantenberechnungen, Shore-Algorithmus, Quantenkryptographie

Allgemeine Grundlagen Programmierung.

Multipligkeit, Diner-Philosophen, Deadlock / Livelock / Race-Zustand / Hunger, Zerstäuber, Sperre-Prozessoranleitungen, Speichermodell / Barriere / Bestellung, CAS oder LL / SC, warten / sperren / obstruktionsfrei, ABA-Problem, schreibfreie Behälter, Spin-Lock, TLS / PRO-Thread-Daten, AMDALA-Gesetz, OpenMP, MPI, Map Reduzieren Sie, kritische Sektion / Mutex / Semaphor / Bedingungsvariable, WAITFORSINGLEOBJECT / WAITFORULTINEOBJEC TS, Green Thread / Coroutine, Pthreads, Zukunft / Abgrenzung / Versprechen, Modell von Schauspielern, Parameterserver, RDD (wie in Specks gesehen), Downpour SGD, wartenfrei, stapelvoll vs Stackless

Rechen-, Turing-Maschine, normale Markov-Algorithmen, Maschinenmaschine, Diophantie-Matysevich-Gleichungen, Lambda-Funktionen Chercha, teilweise rekursiv klinische Funktionen, Shainfinkel kombinieren Programmierung, Brainfuck, Turing Turing Bog Äquivalenz, Problemprobleme, RAM-Maschine, RAM-Maschine, Algorithmus Tarskoy, SAT / SMT-Löser, formale Systemtheorie, interaktive Beweise, Levin Cook theorem, 3sat, pspace \u003d npspace,

Algorithmen und kombinatorische Optimierung, Ecke / Skien / Sedzhevik / Knut / Aho-Hopcroft-in Lamba / Papaditrius / Shever Goldberg / Pre-Arata Shemos / E-MAXX.RU, Datenstrukturen, Algorithmen, Schwierigkeiten, Landau-Symbole, AKRA-Theorem Baszi , Zeitraumklasse, Klassen der Komplexität, NP-vollständige Aufgaben, KMP, Zählungen und Bäume, Threads in Netzwerken, Matrix Kirchhoff, Suchen Bäume (insbesondere RB-Baum und B-Baum), Okklusionserkennung, Heap, Hash-Tische und die Perfekter Hash, Petrietz, der Algorithmus des russischen Bauern, der Karatsuba-Methode und der Matrixmultiplikation von Trauben-Strassen, Sortieren, gierigen Algorithmen und Matriden, dynamische Programmierung., lineares Programmieren, Diff-Algorithmen, randomisierte Algorithmen und Fuzzy-Suchalgorithmen, pseudo-zufällige Zahlen, Fuzzy-Logik, Gusfield (Suffix-Baum, String-Ausrichtung), Motivsuche, Scan-Linie, Cache Orient, Trichtersortierung, VEB-Layout, Wurzeloptimierung, Algorithmen für dynamisch Grafiken, Berechnungsmodelle (RAM-Machine / Zeigermaschine / Entscheidungsbäume usw.), Algorithmen in Erinnerungshierarchien / Stranengorithmen, Time Forward-Verarbeitung, Reichweite und Rang, LSM-Bäume, gepufferte AB-Bäume, Toku-Bäume, persistische Strukturen, Succint-Struktur, verlustige Struktur (Bloom / Bloomier-Filter, Hash-Tische mit falschen Positiven), Sensibilisierungs-Hashing, Raumzeitraum in Hash-Tischen, Strategien

Maschinenausbildung, Tibshiran / Bischof, AI-Modellierungsansätze, Umschulung / Vernetzung, Bayesian-Netzwerke, neuronale Netzwerke, Kohonen-Netzwerk, eingeschränkte Boltzmann-Maschine, Gradient-Abstieg / Hügelklettern, stochastische Optimierung (Monte-Carlo-Methode, Glühmethode, genetische Algorithmen, Ameisenalgorithmen) , SVM, Gradientensteigerung, Clusteranalyse, Methode Hauptkomponente, LSH, Verstärkungstraining, MDP, Informationsabruf / Data Mining / natürliche Sprachverarbeitung, Machinestone, Szeliski, OpenCV, Bildverarbeitung, OCR, BOBE-Filter, Haarkaskade, Viola-Jones Rahmen, Surfen, Einführung in die Psychophysiologie, IPYTHON / PANDAS / SCIKIT-Lernen, (ME) HMM, CRF, Label-Vorspannungsproblem, NN, Letor, Faktorisierungsmaschinen, Autocoder, RNN / CNN, anstelle von NLP, bessere Aufgaben (Sprachmodellierung) , Co-Reference-Erkennung, Textkreuzung, Pos-Tagging, probabilistisches Analysieren, statistische maschinelle Übersetzung, Missspell-Korrektur, Frage, Anrufbeantwortung, Ner, Kollokationserkennung, Text SOMFAR Ization, Spracherkennung, Faktextraktion, Sentiment-Analyse), effiziente Berechnung Softmax, Feature Engineering / Selection, Qualitätsschätzung, Manning / Jurafsky / McCallum / KOHN, latente Themen (LDA, Chinese Restaurant, PLSI), Parallelkoordinaten, Vowpal Wabbit, NLTK , strukturiertes Lernen, EM-Algorithmus, kontrastive Divergenz, optimale Gehirnchirurgie, Glaubensausbreitung, halbüberwachter Lernen, induktives vsändisches Lernen, Kernel-Trick, disduziative / generative Paare (wie von Ng & Jordanien gesehen), Sequenz zum Sequenz Lernen, Sackging , Analyse der sozialen Grafiken, Empfehlungssysteme / kollaborative Filterung, multimodales Lernen

Allgemeine Prinzipien schreiben Programme

Architektur- und Stilcode, McConnell / Fowler / Leblack / Gamma / Alexand War Satter / Boch, Schutzprogrammierung, Muster, fest / Griff / Kiss trockener Punkte / Yagni, UML, OOP (Smalltalk), OOD / OOA, Code-Metriken, Onkel Bob .

Entwicklungsmethoden, Wasserfall / RUP / Agile / Scrum / Kanban / XP, TDD / BDD, Fall

Entwicklungstools, IDE, IntelliSense, Debugger (VS / Olly / windbg / kdb / gdb), Zwerg-Debug-Informationsformat, Demontierer und Dekompilanten (IDA / Hexrays / Reflektor), Versionskontrollsysteme (SVN, GIT), Merge / Niederlassung / Stamm , Datei- und Zweignamensysteme, kontinuierliche Integration, Ameise, Code-Abdeckung, statische Analyse (Fussrad, CPPcheck), dynamische Analyse (Valgrind, Phasening), Überprüfung und Validierung von PO (Frama-C, Raise (RSL), COQ), Profilierung , Bagtecker, Code dokumentieren, Montagesysteme (CMAKE), Batchmanager (Nuget)

Frameworks, Qt, MOC- und META-Informationen, Konzeptschlitzsignal, Sommerfield Blanchet / Schale, Poco, Industrielle Biblikanten: GMP, I18N, Lapack, FFTW, PRE

GUI-Design- und Informationspräsentation, Raskin / Tafti, Usability, Design- und Typografie-Grundlagen, Fitts-Gesetz, Verlegung von Grundlagen, Latex, Datenvisualisierungsalgorithmen (wie in D3 gesehen), Subpixel-Rendering

Testen, Untertests, Funktionelle, Last, Integrationsprüfungen, UI-Tests, Mocks / Stubs / Spione, Fixture, Gerüche und Testmuster (OSHEROVE / MESZAROS)

PROGRAMMIERSPRACHEN

Allgemeine Ansicht der Programmiersprachen, der Grammatik, der Hierarchie des Homsky, der Majill-Nortude-Theorem, das Pump-Lemma und die Lemma-Ogden, die Klinikalgebra, die NDA → DCA, algorithmisch hartnäckige Aufgaben in formalen Sprachen, dem Drabonbuk, Friland, regiert, und ihre Komplexität, PCRE, BNF, Boost.Spirit + KARMA + QI / RAGEL, LL, LR / SLR / LALR / GLR, PEG / PACKRAT, YACC / BISON / FLEX / ANTLR, statische Code-Analyse, Kompilieren / Dekompilieren / Obfustration / Deobf überspringen, CLANG / LLVM / XMLVM / EMSCRIPTEN, GCCXML, OpenC ++, Bauen Virtuelle Maschinen, JIT / AOT / GC, DSL / DSEL, On-Stack-Ersatz, Typprüfung / Typ-Inferenzalgorithmen, CYK-Parser, Erweitertes Compiler-Design und Implementierung von Mangnick.

Assembler, Zubkov Sprache / Heyde / Drepper / Kaspersky / Tanne / Abrash, X86, FPU / MMX / SSen / AVX, AT & T und Intel Syntax, MASM32, Makros, Stapel, Haufen / Manager Heap, Anrufvereinbarung, Hex-Codes, Maschine Datenpräsentation, IEEE754, Little / Big Endian, SIEE754, SIMD, Hardwareausnahmen, Interrupts, virtueller Speicher, Umkehrung, Stapel und Haufen, Rücklauforientierte Programmierung, alphanumerische Shellcode, L1 / L2 / RAM / Pault und ihr Timing, Arm Assemblersprache

C ++, standard, comeau, 1 tenb, ostrastap / d & e / johnatis / vanderwood, dyuharst / meyers / slatter, raii / kopie und swap / ausnahmesicherheit, reine fünf, alexandrescus / abrahams-gurtova, type lauteure, crtp, NVI, SFinae, Koenig Lookup, Duff "S-Gerät, Boost, SIK-Lamsadin / Carlsson, TR auf C ++ - Leistung, Test Stepanova, Weiterleitungsproblem / Verschiebung Semantik, Spezifikationen, Gotw, Meyer" S Singleton, CPPGM

C ++ - Compiler, Merkmale der Implementierung der Standard-, Implementierungsbeschränkungen, intrinsische, Unterschiede zwischen Standardbibliotheken (Container, Rand), ABI, Implementierung virtueller Funktionen, virtueller Vererbung, Ausnahmen, RTTI, Switch, Zeiger auf Funktionen und Methoden; Optimierung, Kopie ELISION (RVO, NRVO), Größentof auf verschiedenen Plattformen, Compiler und Umweltverdauung, __declspec, Compiler-Schlüssel, leerer Basisoptimierung, statische und dynamische Verknüpfung, Mangeln, verteiltes Kompilieren, vorkompilierter Header, Einzelkompilationseinheit (streng) Aliasing / Einschränkung, Inline / _Forceinline, Spannende, schnelle Berechnung mathematischer Funktionen durch Bithaki, Linker & Lader von Levine

Angewandte Programmierung, C # / F #, Schildt / Troelcene / Richter, Größe, Ertrag, LINQ / PLINQ, Reflexion, AST, WCF, WinForms / WPF / Silverlight, AOP, Logging Framework, .NET-Montage, Scala, Horstmann / Oderski, Pattern-Matching, Makros / Quaszitates

Funktionelle Programmierung, Haskell / OCAML / Schema / Alice oder OZ, SICP / TAPL / YAHT / Reinen Funktionsdatenstrukturen / Harrison Field, Hof (Karten / Falten / Filter), Hindley-Milner-Typ-System, MONADS, Tapsque, ATD, abhängige Typen, Faulheit / Energie, logische Programmierung (Prolog oder Quecksilber), wettbewerbsfähige Programmierung (Erlang oder OZ)

Web-Programmier- und Skriptsprachen, Flanagan / Zend-PHP5-Zertifizierungskurs + Studienhandbuch, Apache / Nginx, CGI / Fastcgi, PHP / Zend Framework / ReactPH / Zend-Motor / -Stoutriner- oder Propel- / Cockigniter oder Sinfonie oder YII, Python / Django / Twisted, RUBY / ROR, ASP.NET MV *, JavaScript / JQuery / React / Google Closure / Extjs / Node.js, OOP in JavaScript, HTML5, CSS3 / Tabletable und Blocklayout, RSS, CANVAS / WEBLG, AJAX / GEWINKEN, FRAGEN Sicherheit (XSS, SQL Injection, CSRF), HighLoad, C10K-Problem, SWIG, CDN, Shadow-Dom, Browser KwIRKI, Echtzeit-Bidding / Trading, Anomali-Erkennung, Single-Architektur-Seite Apps, Gerät von Web-Waffeln, Web / Soziales Graphen Zufallspaziergang, ASM.Js und Zusammenstellung in JS, V8 / Spidermonkey-Internalanlagen, PAAS / IAAS, SPDY

DATENBANK

Datenbanken / verteilte Systeme, Gruber / Datum, ANSI SQL, T-SQL, ODBC, MySQL / PostgreSQL / MS SQL / BDB / SQLite / Sphinx, gespeicherte Prozeduren, Trigger, Code / A-Algebra / A, Tutorial D, Normalformen, Optimierung und Fertigstellung von Abfragen, Indexdatenstrukturen, Transaktionen und Säuren, CAP-Satzerbeeren, Graph DB, Document Store, Wide-Säulenspeicher, Schlüsselwertspeicher, Theorie verteilter Systeme, CRDT, Net-Split-Problem, Konsenprotokolle, Narbenrarbene / Replikationstheorie , Orm (C ++ - ODB), ERD, OLAP, Semantic Network, Triplestore, RDF / Schildkröte, SPARKL, Eule, SemanticsCience Integrierte Ontologie, Begründung, Dbpedia, Big Table / HBase vs. Dynamodb / cassandra / riak, 2 / 3pc, mollig / Zoo-Keeper, Führungswahlen (Paxos / Floß), HDFS / GFS / Glusterfs, Deduplizierungsproblem, Kausalitätserkennung (Vektoruhr / Briefmarken), R / W-Quorum, Lastausgleich, Gerät Suchmaschinenindizes, Ereignis-Sourcing, CRDT, Protokolldesign- und Kommunikationsprinzipien, aus Sicht der Evolution, Erweiterbarkeit, Zuverlässigkeit, Design von Softwareschnittstellen (API)

Os

Betriebssysteme, Silberschatz / Richter / Solomon-Russicovic / R Obachevsky / Vakhalia / Stevens / Tannebum / LOV E / Linux Kernel Internal, Memory Manager, Heap Manager und sein Gerät (LAL / LFH / SLAB), Geräte-Manager, Prozessleiter, Kontext Switch, Real- und Protected-Modus, Finden von Dateien (PE / ELF / MACH), Kernobjekte, Debugging-Mechanismen (Strac / Ptrace / DTrace / Pydbg, Debug-API) und MiniDamps, Bash, Netzwerkstapel und Hochleistungsservern, NetGraph, CR0 , IPC, Window Subsystem, Sicherheitssystem: ACE / ACL und Zugriffsrechte, Virtualisierungstechnologie, RTOS (QNX), Treiberprogrammierung, IRQL, IRP, Dateiträger, BigTable, NDIS / Miniport / FS-Treiber / Filtertreiber, MM-, IO -, LDR-Funktionen, DKOM und Rucker, GDT / IDT / SDT, Windows / Linux / BSD, POSIX, Trim

Formate, XML / XSLT / XPATH / XMLStarlet / DOM / SAX, RTF / ODF, JSON / BSN / BENCODE, YAML, JPEG / PNG / WEBP, AVI / MPEG / RIFF / WAV / MP3 / OGG / WEBM, SVG, Unicode, Einzelkodierungen / UTF-8 / UTF-16 / UCS-2 / UTF-32, Unicode-Länge und Vergleichsprobleme, Base64, Markierung

Komponentenorientierte Modelle, Rogerson / Tavares, COM / OLE / ActiveX / COM + / DCOM RPC, ATL, Apartments, Monixer, Midl, XPCOM, CORBA, TAO, D-Bus

Netzwerk, Stevens, OSI-Modell / Internet-Modell, Ethernet, TCP / IP, TCP-Fenster, Neojor-Algorithmus, Sockel, Protokollpuffer / Thrift / AVRO / ASN.1, AMQP, ICMP, Routing / BGP / OSPF, ARP, MITNIK-Angriff, SYN-Flut, HTTP / FTP, P2P / DHT, DHCP, SMB / NBNS, IRC / XMPP, POP3 / SMTP / ESMTP / IMAP, DNS, WIFI / WIMAX / GSM / CDMA / Rand / Bluetooth / GPS, Ass, Wireshark

HARDWARE

Hardware, Horowitz Hill / Titz-Schenk, Halbleiterelektronik / Spintronik / Photonik, Transistor, Trigger, Schematechnik, Mikrocodes, Technologieerstellung von Prozessorgeräten, Logiksynthese, statische Timing-Analyse, FPGA, Verilog / VHDL / Systemc, Sisal, Arduino, Geräte Speicher (ROM → EEPROM, RAM, SSD, HDD, DVD), RISC / CISC, Flynn "Taxonomie (ID), Princeton und Harvard-Ansatz, Prozessorarchitektur, X86-Architektur, VID / PID

Prozessoren, Fördererisierung, Hyper-Threading, Thomasulo-Algorithmus, spekulative Leistung, statische / dynamische Zweigvorhersage, Prefetching, mehrere assoziative Cache, Cacheline / Cash Promach, Takte, Schutzringe, Speicher in Multiprozessorsystemen (SMP / Numa), Timing-Speicher, Intel Optimierungshandbücher, Leistungszähler
___________________________________

Nun, was ist beeindruckend? Interessant, es gibt mindestens eine Person auf der Welt, die das alles wirklich kennt?

Die Programmierfähigkeit kann nicht nur für diejenigen nützlich sein, die Programme oder Websites professionell erstellen möchten. Wie die Fähigkeit, den Code zu schreiben, das Leben lindern kann, sagte Ilya Schurov, assoziierte Professorin der Abteilung für höhere Mathematik HSE und einen Lehrer des Zentrums, um die Fakultät der Computerwissenschaften HSE anzusehen. T & P veröffentlichen die Zusammenfassung seines Vortrags.

Ilya Shchurov.

associate Professor der Abteilung für höhere Mathematik HSE und Dozent des Zentrums für die Weiterbildung der Fakultät der Computerwissenschaften HSE HSE

Sie können viele Klassifizierungen aufstellen, aber zunächst würde ich die Programmierung in zwei große Kategorien teilen: Programmierung für jemanden, wenn Sie ein Programm schreiben, das die Leute verwenden und für sich selbst programmieren werden. Die professionelle Programmierung ist meistens Aktivitäten für andere, und ich würde nicht sagen, dass es immer angenehm ist. Unabhängig davon, ob Sie für das Programm bezahlt haben, oder Sie schreiben eine kostenlose Software, die jeder genießen kann, eine große Anzahl von Menschen, die sich beansprucht, dass sie nicht für sie funktionieren, und sie werden immer mehr als diejenigen, die Sie loben. Und Programmierung für sich selbst - der Beruf ist sehr angenehm, und heute werden wir darüber diskutieren.

Eine Umfrage mit professionellen Programmierern in diesem Jahr zeigte, dass 81% von ihnen als Hobby programmiert sind. Dies bedeutet, dass die Programmierung das Vergnügen sorgt, dass es nicht nur einen Job ist, sondern auch Unterhaltung. Sie können fertige Programme verwenden, und in 95% der Fälle tun Sie es, auch wenn Sie ein professioneller Programmierer sind. In jedem Bereich gibt es jedoch Aufgaben, die niemand vor Ihnen gelöst hat, und die Fähigkeit zu programmieren ermöglicht es Ihnen, sie viel effizienter zu lösen. Sobald ich im Call Center war, wurde ich gebeten, zwei Tische zu kombinieren. Die Person, die mir diese Aufgabe unterrichtet hat, war zu warten, dass ich mit einer Kopie der Zellen von der ersten Tabelle bis zum zweiten beginnen würde. Ich erlitt ein paar Aufzeichnungen, ich bin müde, und ich schrieb ein kurzes Skript, das die Daten von einer Tabelle übernommen hat und stattdessen meine Google-Form erfüllt ist, was nicht sehr schwierig ist. Ich mochte es, aber am meisten mochte ich die Tatsache, dass Kollegen mich ansahen, als würde ich eine Art Magie sprechen.

Das Schreiben des Codes ist interessant, aber dagegen ist dies ein Test. Sie interagieren mit dem Computer, und oft diese Interaktion, insbesondere wenn Sie die neue Technologie beherrschen, sieht die neue Sprache so aus. Sie schreiben den Code, Sie glauben, dass ich es richtig geschrieben habe, und der Computer sagt, dass Sie einen Syntaxfehler haben. In der Tat habe ich den Punkt mit einem Comma vergessen, korrigiert, erneut gestartet. Und der Computer sagt: "Close-Klammer." Durch mehrere solcher Iterationen beginnt das Programm zu arbeiten, und es wird klar, wer sich im Haus des Eigentümers befindet. Tatsache ist, dass die Fähigkeit der Programmierung, und der Lernprozess, er hat eine Seite (einschließlich positiver) Effekte.

1. Extreme Führungserfahrung

Computer im Vergleich zu den Menschen sind sehr dumm, sie verstehen alle buchstäblich, und wenn Sie gelernt haben, die Maschine zu verwalten, werden Sie höchstwahrscheinlich mit der Verwaltung von Personen umgehen.

2. Neuer Ansatz für Informationen

Sie beginnen mit der Verarbeitung von Informationen, der Organisation von Informationströmen und -management, anders auszusehen. Wenn Sie beispielsweise Datenanordnungen sammeln, denken Sie bereits daran, dass sie für die anschließende automatische Verarbeitung geeignet sind. Dies ist sehr wichtig, wenn Sie über eine große Organisation oder ein Projekt mit einer Vielzahl von Informationsströmen verfügen, mit denen Sie effizient arbeiten müssen. Wenn Sie ein Automation-Erlebnis haben, verstehen Sie schnell, in welcher Form, in welcher Form Sie benötigen, um Informationen zu empfangen, um sie zu verarbeiten.

3. Professionelle Kommunikation

Wenn Sie lernen, mindestens ein bisschen zu programmieren, ist es Ihnen viel einfacher, mit den Programmierern zu kommunizieren. Es ist zumindest auf dem Basisniveau nützlich, um zu verstehen, wie die Welt davon angeordnet ist, und in diesem Bereich ohne Zwischenhändler kommunizieren. Menschen unterrichten Sprachen, um eine andere Kultur besser zu verstehen, und Programmiersprachen - Technologie.

4. Verantwortung

Warum kannst du programmieren, kann gefährlich sein? Der erste Grund ist "Tyzhprogrammammer". Wenn jemand plötzlich herausfindet, dass Sie wissen, wie Sie programmieren, werden Anfragen mit Ihnen gestartet: "Wenn Sie das Betriebssystem erneut installieren, Sie sind ein Programmierer," "Korrigieren Sie den Wasserkocher, Sie sind ein Programmierer" und so weiter. Dies ist nicht das schrecklichste Problem, es gibt mehr Engagement. Zum Beispiel, im Jahr 2001 im ersten Jahr, als das Internet noch langsam war, entschied ich, dass es notwendig war, eine Art schneller zu machen, um Informationen mit Freunden auszutauschen. Ich dachte: Es gibt eine E-Mail und es funktioniert. Dann habe ich ein separates Postfach für unsere Partys gestartet und ein Skript geschrieben. Der Roboter ging in dieses Feld, nahm Briefe, die dorthin kamen, und schickten sie an alle, die an diesem Ding unterschrieben wurden. So arbeiten Sie jetzt Google-Gruppen. Wenn ich an alle schreiben wollte, habe ich einen Brief an diese gewöhnliche Box gesendet. Wenn jemand antworten wollte, antwortete er ihm, der Brief fiel allen an, und es war möglich, etwas zu diskutieren.

Jemand hat jedoch die Box überlastet, und wenn die Box überflutet ist, lenkt der Mail-Server als Antwort auf einen beliebigen Buchstaben eine OTLOUc, die auch ein Brief ist. Es stieg auch in die Gesamtbox, mein Skript hat es an alle Adressen gesendet, darunter auch von der, die überflutet wurde. Mail-Server Erwirtschaftete ein neues OTLOUX und so weiter. Als Ergebnis, am Sonntagmorgen, wachte ich mich auf den Anruf meines Freundes, der ordentlich gesagt hat: "Vielleicht gibt es dort ein Problem, weil ich 6 Tausend Buchstaben in meiner Mailbox habe, und ihre Anzahl steigt an." Nichts besonders schrecklich ist passiert, aber es war ein Problem. Dann wurde mir klar, dass der Code leicht außer Kontrolle geraten und die Probleme schieben könnte, sodass Sie ordentlich handeln müssen.

Dies ist eine Geschichte wie im "kleinen Prinzen": Sie sind für diejenigen verantwortlich, die gezähmt sind. Personen und Prozesse hängen von dem von Ihnen geschriebenen Code ab. Das heißt, sobald Sie etwas nützliches für andere tun, steigt der Fehlerpreis an.

Wie lernt man?

Auf diesem Thema befinden sich zwei entgegengesetzte Ansichtspunkte. Die erste: Lernprogrammierung ist sehr einfach, die Hauptteams können in drei Tagen beherrscht werden. Aber dann ist die Wahrscheinlichkeit hoch, wenn eine Person Schwierigkeiten auftreten wird, wird er entscheiden, dass es getäuscht und die Programmierung nicht er ist. Es ist nicht leicht zu programmieren, Schwierigkeiten entstehen. Einer der Gründe dafür ist, dass Sie bei der Programmierung jedes Mal neue Technologien entwickeln, und dies ist immer eine Qual.

Die entgegengesetzte Meinung ist, dass, wenn Sie nicht aus Schuljahren programmieren, nichts zu beginnen. Das ist auch nicht wahr. Die Programmierung erfordert Anstrengungen, aber der Eingang zu diesem Bereich ist offen, auch wenn Sie sich nie in sie beschäftigen.

Es ist wahrscheinlich, dass die Aufgabe, von der Sie aufgetreten sind, bereits gelöst ist und diese Entscheidung irgendwo ist. Manchmal ist es schwierig, damit umzugehen, wie es funktioniert, ist schwieriger, als neu zu schreiben. Dies ist ein Standardprogrammiererproblem, aber dafür haben wir einen Stapelüberlauf, einen der Hauptinfessionen der Menschheit im Bereich der Programmierung. Dies ist eine Website, in der Entwicklern Erfahrungen teilen und die Fragen des anderen beantworten. Jeder Teilnehmer hat einen eigenen Rufniveau, alles ist sehr erfolgreich, sodass Sie zehn Sekunden lang eine Antwort auf einfache Fragen erhalten können. Es hilft ihm sehr. In der modernen Welt schreiben Sie nicht nur ein Programm - Sie verwenden gleichzeitig eine große Anzahl von Programmen und Tools, die bereits von anderen Personen erstellt wurden.

Eine gute Art, das Programm zu lernen, ist, eine Aufgabe zu setzen, die Sie daran interessieren würden, und versuchen Sie es, es zu lösen. Natürlich gibt es viele Online-Kurse - lesen Sie das Feedback, um das entsprechende zu wählen. Die erste Programmiersprache ist schwierig, da Sie die Art und Weise neu erstellen müssen, wie Sie mit Computern interagieren und die Prozesse analysieren. Es gibt keine universellen Antworten, alles ist sehr individuell. Jemand reicht aus, um die Dokumentation zu lesen, siehe Beispiele des Codes, und alles ist klar. In einer anderen Situation ist es gut, einen Mentor zu haben, der grundlegende Fragen beantworten würde. Hier sind einige Tipps, die mir wichtig erscheinen.

1. Selbst die beste Art Etwas zu verstehen ist, ein funktionierendes Stück Code zu finden, starten Sie es, um zu ändern und zu erfahren, was passiert. Dies muss getan werden, nachdem Sie sich mit der Basissyntax befasst haben. Passen Sie den Code für Ihre Aufgaben an oder experimentieren Sie einfach.

2. Wenn Sie einfach die Programmierung lernen, müssen Sie nicht sofort versuchen, viel Code zu schreiben, bis Sie richtig erklären, was Sie möchten. Es ist notwendig, damit der Computer die Befehle gut und kleine Margen ausführt. Ob Ihre Experimente nicht in der Tatsache enden sollten, dass Sie versehentlich auf die richtige Entscheidung gestolpert haben, aber durch das Verständnis, warum und wie es funktioniert.

3. Sorgen Sie sich nicht um Mathematik. Es ist ratsam, zu wissen, was der Restbetrag von der Teilen der Nummer auf eine andere Nummer, aber alles hängt von den Aufgaben ab, die Sie vor Ihnen stehen. Wenn Sie natürlich eine listige Verarbeitungsdaten wünschen, benötigen Sie die Mathematik in dem von dieser Verarbeitung benötigten Volume.

4. Fürchte dich nicht. Wenn Sie mit der Programmierung für sich selbst beginnen, schreiben Sie wahrscheinlich nicht den Code, der an professionelle Entwickler ansprechen wird. Sie werden sagen, dass sie nicht schreiben, dass es redundant ist, dass ein solcher Code schwierig sein wird, und so weiter. Wahrscheinlich werden sie richtig sein. Wenn Sie jedoch für sich selbst schreiben und wenn Sie gerade erst beginnen, ist es normal, dass Ihre ersten Versuche keine Texte des Löwengrades sind Tolstoi. Wenn Sie ein Programm schreiben, das Ihre Aufgabe arbeitet und löst, ist es gut.

Es besteht eine Stellungnahme, dass vor dem Hintergrund der Entwicklung von künstlichem Intelligenz und Machine-Lernen, Programmierer bald benötigt werden: Computer selbst werden sich selbst lernen, sich selbst zu programmieren. Aber es scheint mir, dass es nicht ist. Solange es Aufgaben gibt, und obwohl Sie erklären müssen, wie Sie sie lösen müssen, gibt es die Programmierung. Natürlich entwickelt sich die Programmierung in den letzten 20 Jahren sehr stark weiter. Die Tatsache, dass Computer intelligenter wurden, wurden die Entwickler nicht weniger - im Gegenteil, sie wurden viel mehr. Und es scheint mir, dass das Gleiche als nächstes passieren wird.

Meine Liste enthält die folgenden Sprachen:

  1. C ++.. In dieser Sprache sind viele der folgenden Plattformen geschrieben (JVM, CLR, Knoten und andere). Darüber hinaus ist es einfacher, dass Sie leichter verstehen, wie man die Speicheroptimierung manuell durchführen kann.
  2. C # oder java. Nein, Sie müssen nicht beide wissen. Das Studium einer dieser objektorientierten Sprachen ist dem Studium der anderen sehr ähnlich.
  3. HTML.Ich halte es nicht für eine der Sprachen der Programmierung, aber andere halten genau diese Meinung, so ...
  4. CSS.. Es ist wichtig für jede Art von Webentwicklung.
  5. Javascript Es ist moderner und angenehmer, und nicht der Müll, den wir vor 20 Jahren genossen haben. Hinweis: Die Sprache selbst hat sich bisher nicht viel geändert. Wir sind nämlich die Programmierer, die es benutzen, das sich wirklich verändert hat.
  6. SQL.Es wird benötigt, um mit relationalen Datenbanken zu arbeiten.
  7. Lispeln.Ja, Lisp. Oder, um genauer zu sein, "eine der Ausführungsformen dieser Sprache". Clojure, Lisp, Schema, Nu oder so etwas. Sie müssen wissen, was eine homootische Sprache ist und versteht, wie die Grenzen zwischen dem Code und der Daten, wenn die richtigen Werkzeuge verschwinden.
  8. Smalltalk. Ja. In jedem Framework werden die grafische Benutzeroberfläche basierend auf seiner eigenen Hardware (Windows, MacOS, OS / 2, X / Windows, Android, iOS und Anderen) dieselben Grundprinzipien verwendet, die sie in Smalltalk in 60- und verkörpert wurden. Haie Jahre.
  9. Rubin oder Python. Sie müssen mindestens eine dynamische Programmiersprache kennen. JavaScript ist hier geeignet, aber nur, wenn Sie zuerst die Sprache selbst studieren, ohne dass DOM-Modelle das anfängliche Bild erheblich verzerren können (reagieren, eckig, vuejs - in alle enthalten diese meisten "DOM-Modelle", die ausgegeben werden.) Sobald Sie es mit Lisp herausfinden, sind Sie viel einfacher, JavaScript zu verstehen.
  10. Aspectj. Die Bekanntschaft mit Aspect-orientiertem Programmieren wird Ihre Meinung über Objekte vollständig ändern, und es ist in Ordnung.
  11. Haskell, ML, Ocaml oder Miranda. Verbringen Sie einige Zeit auf Funktionssprachen, in denen es keine Objekte gibt.
  12. Bash oder zsh, oder ein anderes Befehls-Shell-Szenario. Da nicht jedes Problem oder jede Aufgabe in der Programmierung mit einer vollwertigen Anwendung gelöst werden sollte.
  13. F #, scala, clojure oder andere Objekte / funktionale Hybridprogrammiersprache. Denn sobald Sie es mit dem Azami herausfinden und das grundlegende Set verdauen, auf das die ersten 11 Programmiersprachen dieser Liste umfassen, sind Sie für etwas bereit, das ziemlich schwer zu lernen ist.
  14. Swift und / oder Kotlin. Beide gehören zu den Sorten objektorientierter Sprachen und verfügen über eingebaute funktionale Funktionen. Nach der Untersuchung sind Sie bereit, an mobilen Anwendungen zu arbeiten.
  15. x86 oder Arm Assembler. Die in der Assembler-Sprache, die Sie in der Assembler-Sprache lesen, können den Code ohne Verwendung des Quellcodes debuggen.

Und ja, ich kenne wirklich alle oben genannten Sprachen. Und ich lehrt sogar viele von ihnen.

Und nein, Sie müssen sie nicht kennen, um ein ziemlich kompetentes Programmierer zu werden. Wenn Sie nur einen guten Entwickler werden möchten, müssen Sie eine der Hauptsprachen (HTML / CSS / JavaScript) + Sprache für die unterstützte Programmierung (meistens C #, Java, Python, Rubin oder Nodejs-JavaScript kennen ) + SQL, wenn Sie das relationale Datenbankverwaltungssystem (RDBMS) verwenden. Das wird ganz genug sein.

Das Studium aller anderen Sprachen ist jedoch genau, was Sie ermöglichen, von "gewöhnlich" dem "führenden" Programmierer zu wechseln, und nach Erreichen des Höchststands von Wissen und Fähigkeiten.


Nichan Panta, Computeringenieurspezialist, Entwickler in der SprachePython

Ich halte mich an die sogenannte Sprache Agnostizismus, also wenn jemand in der Angst vor der Todesstrafe eine ähnliche Liste erstellt, würde es so aussehen:

1. P.ython. Da es extrem bequem und einfach für Prototyping ist, sowie aufgrund der Existenz einer großen Anzahl von Open-Source-Frameworks. Darüber hinaus wird die weit verbreitete Gemeinschaft weniger wahrscheinlich erwähnen.

2. C.. Denn damit können Sie klar verstehen, wie alles funktioniert. Ideal für einfache Aufgaben.

3. C ++.Auch für einfache Aufgaben. Geeignet für den Einsatz von objektorientierten Paradestaren. Darüber hinaus kann es für eine Reihe anderer Aufgaben verwendet werden.

4. Bash.Auf den ersten Blick kann die Arbeit mit ihm Verwirrung und sogar einige Schwierigkeiten verursachen. Sobald Sie es jedoch beherrschen, verbringen Sie alle Automatisierungsprozesse damit.

5 . S.cala. Wird als Hybrid der funktionalen und zwingenden Programmiersprache verwendet. Damit können Sie erstaunliche Dinge schaffen.

6. Javascript. Die leistungsfähigste Sprache für die Webentwicklung. Persönlich mag ich das "saubere" JS (es lohnt sich, dass die Webentwicklung definitiv nicht meins ist).

7 . Java. Aufgaben in der objektorientierten Programmierung durchführen. Und um den Frühlingsrahmen zu nutzen.

8 . Haskell. Jeder Programmierer muss die funktionalen Programmierparadigmen kennen.

9 . PHP.Wenn Sie etwas mit der Webentwicklung in Verbindung setzen müssen. Meiner Meinung nach ist diese Sprache definitiv kein Symbol für Komfort und Einfachheit.

10. R.. Zur statistischen Analyse. Persönlich habe ich nicht einmal versucht, mit ihm zusammenzuarbeiten, da ich mit Python selbst mehr als nicht schlecht bin.

11 . HTML.Wie gesagt, ich mache mir normalerweise keine Webentwicklung ein. Manchmal ist es jedoch manchmal bei der Arbeit von mir notwendig zu zeigen, was im Backend durchgeführt wurde. In diesem Fall ist das Wissen über HTML eine Notwendigkeit.

12 . Markdown.. Eine der am häufigsten verwendeten Markup-Sprachen. In der Regel verwende ich es für einige Markierungen, schreibt die Readme-Datei und vieles mehr.

13. Viml. / vimsecript. Zuvor schrieb ich mit Viml, dass ich skripts, um benutzerdefinierte Plug-Ins und Konfigurationen für VIM zu erstellen. Dies ist eine der Skriptsprachen, mit denen nicht viele Wagen arbeiten.

14. CSS.. Die Verwendung von CSS von Zeit zu Zeit schadet Ihren HTML nicht.

15. Matlab./ OKTAVE. Damit habe ich komplexe Berechnungen durchgeführt. Jetzt tue ich es jetzt alles auf Python, dank NUMPY.

Esteban Fargas, engagiert an der Entwicklung von Anwendungen und nehmen an Programmierwettbewerben teil

  1. Java.: Oracle ist wahrscheinlich so viel zugunsten Ihrer Universität, so dass Sie diese Sprache als einleitende der objektorientierten Programmierung untersuchen. Es wird auch nützlich sein, wenn Sie an Programmierwettbewerben teilnehmen möchten.
  2. C./ C.++: Grundsätzlich sehr ähnlich der oben genannten Java. Übrigens sehe ich diese beiden Sprachen immer noch als eine.
  3. C.#: Eine gute Sprache, die sich aus dem Mischen der beiden oben genannten Sprachen ergibt.
  4. Html.: Es ist die Basis des gesamten Netzwerks. Allerdings noch nicht ideal.
  5. CSS.: Ermöglicht Ihnen, schöne Dinge im Internet schön auszusehen. Auch weit ist nicht ideal.
  6. Javascript: Ermöglicht das Erstellen von Logikschemata für das Internet.
  7. Python: Es ist auch nicht schlecht, eine andere Programmiersprache und einen Satz von Paradigmen zu haben, um ein Backend für die Anwendung zu schreiben. Darüber hinaus ist im Moment eine allgemein anerkannte Sprache für maschinelle Lernentechnologien.
  8. Rubin: Eine weitere ausgezeichnete Sprache, um einen Backend zu erstellen. Es wird nicht lange auf seiner Studie dauern.
  9. Golang.: Ich habe alle angenehmen Funktionen gesammelt, die sich in verschiedenen Sprachen der Gruppe C befinden. Es ist wunderschön. Mit Hilfe des kombinierten Modells können große Projekte durchgeführt werden.
  10. Scala.: Mit Ihnen können Sie auch wirklich hervorragende professionelle Software erstellen. Die Bekanntschaft mit dem funktionalen Paradigma kann für spannende Aufgaben äußerst interessant und großzügig sein.
  11. Haskell: Studie des funktionalen Paradigmens auf dem maximalen Niveau.
  12. Lispeln: Dasselbe wie der obige Haskell, nur in einer noch ungewöhnlichen Ausführungsform, basierend auf der unvorstellbar bizarren Syntax.
  13. Bash: Ist es allgemeine Sprache oder nicht? Auf die eine oder andere Weise wäre es schön, sie als eines der praktischen Entwicklerwerkzeuge zu meistern.
  14. SQL:Verwendet, um mit Datenbanken zu arbeiten.
  15. PHP.: Die Sprache, in der das letzte Jahrhundert ein Backend erstellt wurde.

Viele Anfänger-Programmierer, insbesondere Studenten an Provinzuniversitäten, wissen oft nicht, welche Art, sie zu entwickeln, und was sie wissen müssen, um in der Spezialität wirksam zu arbeiten. Überraschenderweise, jeden Tag mit Produkten und Technologien, die von anderen Programmierern auf der Grundlage der entwickelten Wissensbereichen erstellt wurden, erkennen sie nicht einmal, wie sie arrangiert sind.

Auf der Theorie der Massenpflege und des GSM-Mobilfunknetz-Standards gebaut; PHP-Skripts remote-Server und Übertragen ihrer Ausgabe über Ethernet von TCP / IP auf Computer mit NDIS-Treibern; Prozessoren, Nachbestellen und speziellen Ausführen von Anweisungssätzen, um die Einschränkungen der Halbleiterelektronik und der Lichtgeschwindigkeit auszugleichen, um das Wachstum der Taktfrequenz zu stoppen; berechnet auf dem Computerfall von Flugzeugen und Autos, Drogen und DNA-Strukturen; Computerspiele, um einer winzigen Flare zu willen, in der Megabytes mit Fresnel-Integralen von Artikeln gefüllt sind; elektronische Filme und Bücher; Algorithmen NLP und Treenet, verursacht uns aus enormen Datenbanken Suchergebnisse - das umgibt uns jeden Tag dank der Programmierer dank der ursprünglichen Ansätze und grundlegendem Wissen, dank der durchdachten und geschliffenen Jahrzehnte, der Methodik für die Entwicklung und Verwalten der Komplexität der Software.

Ich und meine gleichgesinnten Menschen kümmerten sich um das theoretische Minimum für einen Programmierer auf der Grundlage der auffälligsten Branchen, auch in den Programmen der normalen Universitäten, auf der Grundlage von Interviews und ständig diskrepanzen in der Praxis des Wissens. Dieses Minimum kann in 5 Minuten mit Wikipedia studiert werden. Der Teil benötigt seit mehreren Monaten ernsthafte Arbeit, aber genau das sollte bekannt sein und was fließend sein sollte. Die Kommentare begrüßen Korrekturen und Ergänzungen.


  1. C ++., Standard, Comeau, 1TBs, OstraTrap / D & E / Johnatis / Vanderwood, Dyuharst / Meyers / Satter, RAII / Kopie und Swap / Ausnahmesicherheit, Regel Fünf, Alexandresci / Abrahams-Gurtova, Typlöschung, CRTP, NVI, Sfinae , Koenig Lookup, Duff "S-Gerät, Boost, SIK Lamsadin / Karlsson, TR auf C ++ - Leistung, Test Stepanova, Weiterleitungsproblem / Verschiebung Semantik, Spezifikationen
  2. Kompiller, Merkmale der Implementierung der Standard-, Implementierungsbeschränkungen, intrinsisch, Unterschiede in Standardbibliotheken (Container, Rand), ABI, Implementierung von virtuellen Funktionen, virtuellen Vererbung, Ausnahmen, RTTI, Switch, Funktionen für Funktionen und Methoden; Optimierung, Kopie ELISION (RVO, NRVO), Größentof auf verschiedenen Plattformen, Compiler und Umweltverdauung, __declspec, Compiler-Schlüssel, leerer Basisoptimierung, statische und dynamische Verknüpfung, Mangeln, verteiltes Kompilieren, vorkompilierter Header, Einzelkompilationseinheit (streng) Aliasing / Einschränkung, Inline / _Forceinline, Spannung
  3. Multitecheality., Lunchphilosophen, Deadlock / Livelock / Rennzustand / Hunger, Zerstäuber, Sperre-Prozessoranleitungen, Speichermodell / Barriere / Bestellung, CAS oder LL / SC, warten / sperren / obstruktionsfrei, ABA-Problem, schreibfreie Behälter, Spin -Lock, TLS / PRO-Thread-Daten, Amdala, OpenMP, MPI, Map-Reduge, Critical-Sektion / Mutex / Semaphor / Bedingungsvariable, WAITFORSINGLEOBJECT / WAITFULTINEOBJEC TS, Green Thread / Coroutine, Pthreads, Zukunft / Abgrenzung / Versprechen, Modellschauspieler
  4. Assembler-Sprache., ZUBKOV / HEYDE / DREPER / KAPERSI / FIO / ABRASHE, X86, FPU / MMX / SSEN / AVX, AT & T und Intel Syntax, MASM32, Macros, Stack, Heap / Heap-Manager, Anrufvereinbarungen, Hex-Codes, Datenmaschine, IEEE754, Little / Big Endian, SIEE754, SIMD, Hardwareausnahmen, Interrupts, virtueller Speicher, Umkehr, Stapel und Haufen, Rücklauforientierte Programmierung, alphanumerische Shellcode, L1 / L2 / RAM / Pault und ihr Timing, Armableitersprache
  5. Hardware, Horowitz Hill / Titels Shank / von Physik zu c panchul. , Halbleiterelektronik / Spintronik / Photonik, Transistor, Trigger, Schaltung, Mikrocode, Prozessorerzeugungstechnik, Logiksynthese, statische Timing-Analyse, FPGA, Verilog / VHDL / Systemc, Sisal, Arduino, Speichergeräte (ROM → EEPROM, RAM, SSD, HDD, DVD), RISC / CISC, Flynn "Taxonomie (ID), Princeton und Harvard-Ansatz, Prozessorarchitektur, X86-Architektur, Vid / PID
  6. Prozessoren, Förderung, Hyper-Threading, Ausführung, spekulative Leistung, statische / dynamische Zweigvorhersage, Prefetching, mehrere assoziative Cache, Cacheline / Cash Promach, Takte, Schutzringe, Speicher in Multiprozessorsystemen (SMP / Numa), Timeing Erinnerung
  7. Diskrete Mathematik, K2, festo theorem, schemata, ende automatische maschinen (dca und nak), kalashnikov avtomat, zellmaschinen
  8. Berechnet, Maschinenbekämpfungsmaschine, normale Markov-Algorithmen, Maschinenmaschine, Diophanty-Gleichungen Matysevich, Lambda-Funktionen Chercha, teilweise rekursive klinische Funktionen, Shainfinkel-Kombinationsprogrammierung, Brainfuck, Äquivalenz von Turing-Moor, Problem, Ram-Maschine, Algorithmus Tarsky, SAT / SMT-Sollersa, Theorie der formalen Systeme
  9. Programmiersprachen, Grammatik, Hierarchie des Khomsky, der Majill-Northwood-Theorem, das Lemma zum Pumpen und das Lemma von Ogden, Algorithmus der Klinik, NADD → DCA, algorithmisch hartnäckige Aufgaben in formalen Sprachen, Dragorebuk, Frise, Registern und deren Komplexität, PRE , Bnf, boost.spirit + karma + qi / ragel, ll, lr / slr / lalr / glr, peg / packrat, yacc / bison / flex / antlr, statische Code-Analyse, Zusammenstellung / Dekompilierung / Dekulation / Deobf-Schnellspannung, CLANG / LLVM / XMLVM / EMSCRIPTEN, GCCXML, OpenC ++, Virtuelle Gebäude, JIT / AOT / GC, DSL / DSEL
  10. Algorithmen und kombinatorische Optimierung, Ecke / Skien / Sedgevik / Strut / Aho-Hopcroft-y Flemberg / Papadithria / Shreier-Goldberg / Bild von Arata-Sheym / E-Maxx.ru, Datenstrukturen, Algorithmen, Komplexität, Symbole von Landau, Akra-Baszy-Theorem, Zeit - Raumklasse, Schwierigkeitsgradklassen, NP-vollständige Aufgaben, KMP, Zählungen und Bäume, Threads in Netzwerken, Matrix Kirchhoff, Suchen Bäume (insbesondere RB Holz und B-Holz), Okklusionserkennung, Heap, Hash-Tische und perfekter Hash, Netzwerk Petri, der Algorithmus des russischen Bauern, der Karatsuba-Methode und der Matrix-Multiplikation von Trauben-Strassen, Sortieren, gierigen Algorithmen und Matriden, dynamischen Programmieren, linearen Programmieren, Diff-Algorithmen, randomisierten Algorithmen und Fuzzy-Suchalgorithmen, pseudo-zufälligen Zahlen, Fuzzy Logik
  11. Numerische Methoden, Dichotomie / Newton-Methode, Inter- und Extrapolation, Splines, Gauß-Methode / Jacobi / Zeidel, QR und Lu-Zersetzung, SVD, MNK, Runge-Kutta-Methoden, Adams-Methode, Newton-Kotya-Formeln, Ritz-Methode, Bubnova-Gallerge-Methode , endlicher Unterschied / Elemente, FFT / STFT, Konvergenz und Stabilität
  12. Maschinelles Lernen, Russell Norvig / Bischof, AI-Modellierungsansätze, Gummi / Querfalt, Bayesian-Netzwerke, neuronale Netze, Kohlsnetze, eingeschränkte Bolzmann-Maschine, Gradient-Abstiegs- / Hügelklettern, stochastische Optimierung (Monte-Carlo-Methode, Glühmethode, genetische Algorithmen, morantische Algorithmen), SVM, Gradientensteigerung, Clusteranalyse, Methode Hauptkomponente, LSH, Verstärkungstraining, MDP, Information Abrufen / Daten Bergbau / natürliche Sprachverarbeitung, Machinestone, Szeliski, OpenCV, Bildverarbeitung, OCR, BOBE-Filter, Haarkaskade, Viola-Jones Framework , Surfen, Einführung in die Psychophysiologie, Ipython / Pandas / Scikit-lernen
  13. Informationstheorie, Komprimierung, Huffman, RLE, BWT, LZ, Fehlerkorrekturcodes, Komprimierung mit Verlust (Bilder, Audio, Video), Information Entropie, Shannon-Formel, Komplexität von Kolmogorov
  14. Kryptographie, Schneier / Yashchenko, das Prinzip der Kerkgoffs, symmetrisch (Des, AES), asymmetrisch (RSA), Qualitäts-GPSH, Diffi-Helmana-Algorithmus, elliptische Kurven, Hashing (MD5, SHA, CRCN), DHT, Kryptostilität, Kryptoatika (Großmasterangriff ), WEP / WPA / WPA2 und Angriffe auf sie, digitale Signatur und Zertifikate, PKI, HTTPS / SSL, Beweis mit Null-Offenbarung, Schwellenwertkreislauf
  15. Mathematik, Knut-Graham-Pashnik / Zorich / Vinberg, Spivak / Dummit-Foote, Matan, Linal, Komplant, Lunkane, Diffghem, Nummerntheorie, Diffura / Ost / Dorry / Berechnung / Optimale Steuerung, Funktionen, Zeilen, Kombinatorik, Theorer / Matstat / SADER / Theorie der Massenpflege, Markov-Ketten, integrale Transformationen (Fourier, Laplace, Wavelet), NZQrchos, Matpfe (Mathematica, Ahorn)
  16. Physik, Kirchhoff-Regeln, Joule-Lenza-Gesetz, komplexer Widerstand, Geschwindigkeit und Häufigkeit von Licht, Maxwell-Gleichungen, Lagrangian und Hamiltonisch
  17. Chemie, Stöchiometrie, Siliziumchemie :)
  18. Architektur und Kodexcode, McConnell / Fowler / Leblack / Gamma / Alexand War Satter / Boch, Schutzprogrammierung, Muster, fest / Greifen / Kuss Trockenspot / Yagni, UML, OOP (Smalltalk), OOD / OOA, Code-Metriken
  19. Entwicklungsmethoden., Wasserfall / RUP / Agile / Scrum / Kanban / XP, TDD / BDD, Fall
  20. Testen, Untertests, Funktionelle, Last, Integrationstests, UI-Tests
  21. Entwicklungswerkzeuge, Ide, intellisense, debuggers (vs / olly / windbg / kdb / gdb) und tracer (strace / ltrace), dwarf debugsinformationsformat, disassembler und decompilants (ida / hexay / refrector), versionskontrollsysteme (svn, git), Merge / Zweig / Rumpf, Datei und Zweige, Kontinuierliche Integration, Ameise, Code-Abdeckung, statische Analyse (Fussel, CPPcheck), dynamische Analyse (Valgrind, Phasening), Überprüfung und Validierung von PO (Frama-C, Raise (RSL), COQ ), Profilierung, Bugtakers, Dokumentation von Code, Montagesystem (CMAKE), Batchmanager (Nuget)
  22. Freymvorki., Qt, Moc und Meta-Information, Konzeptschlitzsignal, Sommerfield Blanchet / Schale, Poco, Industrielle Biblikanten: GMP, I18N, Lapack, FFTW, PREPE
  23. Os, Silberschatz / Richter / Solomon-Russicovich / R OBACHEVKKY / VAKHALE / Stevens / Love / Linux Kernel Internal, Memory Manager, Heap Manager und der Geräte-Manager (LAL / LFH / SLAB), Geräte-Manager, Prozessleiter, Kontextschalter, Real und Geschützter Modus, Finden von Dateien (PE / ELF / MACH), Kernobjekte, Debugging-Mechanismen (STRACE / PTRACE / DTRACE / PYDBG, DEBUG API) und MiniDamps, Bash, Network Stack und Hochleistungsservern, NetGraph, CR0, IPC, Fenster-Subsystem , Systemsicherheit: ACE / ACL und Zugriffsrechte, Virtualisierungstechnik, RTOs (QNX), Programmiertreiber, IRQL, IRP, File Systems, BigTable, NDIS / Miniport / FS-Treiber / Filtertreiber, MM-, IO, LDR-Funktionen, DKOM und Rootkits, GDT / IDT / SDT, Windows / Linux / BSD, POSIX-Kernel
  24. Komponentenorientierte Modelle, Rogerson / Tavares, COM / OLE / ActiveX / COM + / DCOM RPC, ATL, Apartments, Monixer, Midl, XPCOM, Corba, TAO, D-Bus
  25. Netz, Stevens, OSI-Modell / Internet-Modell, Ethernet, TCP / IP, TCP-Fenster, Neojor-Algorithmus, Socates, Protokollpuffer / Thrift / AVRO / ASN.1, AMQP, ICMP, Routing / BGP / OSPF, ARP, MITNIK-Angriff, SYN Flut, HTTP / FTP, P2P / DHT, DHCP, SMB / NBNS, IRC / XMPP, POP3 / SMTP / ESMTP / IMAP, DNS, WIFI / WIMAX / GSM / CDMA / Rand / Bluetooth / GPS, Ass, Wireshark
  26. Grafiken und GPGPU., Breasenham-Algorithmus, Farbmodelle, Rückverfolgungsstrahlen gegen polygonale Grafiken, OpenGL / GLSL / Open Inventor, DirectX / DirectSlyShow / DirectAudio / HLSL, Schablonen- / Tiefen- / Alpha-Test, Grafikförderer in DirectX 11, Shader, Beleuchtungsmodelle (Fong), Bandbreite, Fillrat, OpenCl / CUDA / AMP, Landschaften, Lods, Schatten, aufgeschobene Schattierung, Texturierung und Filterung, Antiacing, HDR, Tone Mapping, virtuelle / Augmented Reality
  27. Formate, XML / XSLT / XPath / XMLStarlet / DOM / SAX, RTF / ODF, JSON / BSN / BENCODE, YAML, JPEG / PNG / WEBP, AVI / MPEG / RIFF / WAV / MP3 / OGG / WEBM, SVG, Unicode, Codierung Single / UTF-8 / UTF-16 / UCS-2 / UTF-32, Unicode-String Länge Probleme und Vergleich
  28. Datenbank, Gruber / Datum, ANSI SQL, T-SQL, ODBC, MySQL / PostgreSQL / MS SQL / BDB / SQLite / Sphinx, gespeicherte Prozeduren, Trigger, Code / A-Algebra, Tutorial D, Normalformen, Optimierung und Ausführung von Anforderungen, Daten Strukturen Indizes, Transaktionen und Säure, Cap-theorem-Beere, NOSQL, Schlüsselwertaufbewahrung, Narbenbildung, Orm (C ++ ODB), ERD, OLAP, Semantisches Netzwerk, Triplestore, RDF / Schildkröte, SPARKL, Eule, SemanticsCience Integrated Ontology, Begründung, dbpedia.
  29. Anwendungsprogrammierung., C # / f #, schildt / troelzene / Richter, Größe, Ertrag, Linq / Plinq, Reflexion, AST, WCF, WinForms / WPF / Silverlight, AOP, Protokollierung Framework, .NET-Montage, Scala, Horstmann / Oderski, Musteranpassung , Makros / Quasicates
  30. Quantum-Berechnungen, Shore-Algorithmus, Quantenkryptographie
  31. Funktionelle Programmierung., Haskell / Ocaml / Schema / Alice oder OZ, SICP / TAPL / YAHT / Reine funktionelle Datenstrukturen / Harrison Field, Hof (Karten / Falten / Filter), Hindley Milner, Monads, Tapsque, atd, abhängige Typen, Livity / Energie, Logische Programmierung (Prolog oder Quecksilber), wettbewerbsfähige Programmierung (Erlang oder oz)
  32. Webprogrammierung und Skriptsprachen, Flanagan / Zend-PHP5-Zertifizierungskurs + Studienführer, Apache / Nginx, CGI / Fastcgi, PHP / ZEND Framework / ReactPHP / Zend-Motor / -doktrin oder Propel / Cockigniter oder Sinfonie oder YII, Python / Django / Twisted, Rubin / ROR, ASP .NET MVC, JavaScript / JQuery / React / Google Closure / Extjs / Node.js, OOP in JavaScript, HTML5, CSS3 / Tabletable, HTML5, CSS3 / Tabletable und Blocklayout, RSS, CANVAS / WEBLG, AJAX / Weckes, Sicherheitsfragen (XSS, SQL Injection, CSRF), HighLoad, C10K-Problem, SCHWEG
  33. GUI-Design- und Informationspräsentation, Raskin / Taffti, Uzabiti, Grundlagen des Designs und Typografie, das Gesetz, das Gesetz von Fitts, Grundlagen des Layouts, Latex

Update: Einige Kommentare werden häufig wiederholt, und es wäre vernünftig, versuchen, sie in der Post-Update zu beantworten.


Dieser Theoremin ist ziemlich ziemlich kritisiert von mangel an Systemeismuspräsentation Und die plötzlichen Nachbarschaften verschiedener Tiefe und den Inhalt der Themen. Dies ist kein Fehler, dies ist eine Funktion. Die Systempräsentation des Programms in nahezu jedem der Artikel würde nicht weniger als der Inhaltsverzeichnis der prallen Talmuds erfolgen, daher ist es besser als die Namen dieser Talmuds und bringen. Wie funktioniert dann mit dieser Liste? Es ist notwendig, gute Bücher zu Themen mitzunehmen und zu lesen, bis alle Wörter während des Lesevorgangs nicht erfüllen werden. Die Autoren und in einem schrecklichen Traum konnten nicht davon ausgehen, dass jemand entscheiden würde, dass das Duff-Gerät in der Tiefe und das Volumen von etwas der zweijährigen heiligen Standards betrachten würde. Dieses Kriterium ist jedoch ein ziemlicher Arbeiter - Sie können die hundert Bücher auf C ++ für Anfänger erneut lesen und niemals die Erwähnung erfüllen, aber wenn Sie wirklich nützliche Bücher und Artikel lesen (für solche wie C ++, Bücher existieren und aufgelistet), dann treffen sich alle Wörter ziemlich schnell. Die Bedeutung des Programms aufgrund seiner Größe ist genau die Möglichkeit, zu beurteilen, ob die Anzahl der Bücher zum Thema gelesen wird.

Eine sehr bedeutende Anzahl von Kritik-Theoremin trifft sich von Menschen, die sich selbst Programmierer betrachten, die das glauben es ist unmöglich, all das zu wissenStudieren Sie zu lange, und in einer abstrakten engen Praxis wird die meisten nicht verwendet. Diese Leute verstehen leider nicht einfach nicht, was der Unterschied zwischen Ersudition / Erinnerung und Wissen. Der Wert für den Programmierer verfügt nicht über das Leerzeichen des genauen Formats eines der NBNS-Pakete, sondern beherrscht die Ansätze, die in der Entwicklung verwendet wurden, mit anderen Worten, nicht die Fähigkeit zu reproduzieren, sondern die Fähigkeit, neu zu erstellen oder zu identifizieren in einem anderen Bereich. Es ist die Fähigkeit einer Person, zu analysieren und zu synthetisieren (die immer noch nicht aus dem Nirgendwo genommen wird, sondern durch aktive kognitive Arbeitskräfte erreicht wird), unterscheidet ihn von Google, der selbst in einer sehr entfernten Zukunft nicht lernen wird, selbst div2 250 zu lösen. Es ist auf der Entwicklung dieser Fähigkeit und ein theoretisches Minimum ist gerichtet, der in der Arbeitsweise domänenspezifischer Kenntnisse erforderlich sein wird, unabhängig davon, ob es sich um Funktionen der Gaming-Physik handelt, eine klarer auf Java entwickelt oder echter Chip erstellt.

In einem separaten Absatz ist es wert, die Frage von denen hervorzuheben, die an ihren Fähigkeiten an ihren Fähigkeiten an der Meister der Theoremin bezweifeln, oder es ist der Ansicht, dass die Fähigkeit, es anzuwenden, selten verlangt und schwächer wird. Im Allgemeinen ist der Theoremismus in den meisten Punkten dem Lehrplan der Fakultät der CS der normalen Universitäten etwas unterlegen, so dass es durchaus möglich ist, es 5 Jahre lang zu beherrschen, sogar mit der Arbeit zu kombinieren. Insbesondere wird GameDeva aktiv (durch unterschiedliche Schätzungen in Diskussionen) von 1/3 bis 2/3 der aufgeführten Artikel verwendet. Die fehlende Aktivität kann zum Beispiel gefüllt werden, um andere auf dem Stapelüberlauf zu konsultieren.

Eine separate Kategorie von Menschen, die im Stil von "Ich kenne das nicht, ich kenne das nicht, ich verbiete das", entscheidet diejenigen, die glauben, dass der Zweck des Programmierers nicht in der Verbesserung der Welt ist, sondern in geld verdienen. Sie brauchen dieses theoretische Minimum nicht wirklich, aber sie sollten nach Selbstunterricht, wie es richtig ist, und mit dem Wissen aller Feinheiten, die man stehlen, täuschen und zwingen, andere statt sich selbst zu täuschen und zu zwingen.

"Wir sind hier schön satt.". Dieses Argument erfüllt seine Widerlegung in der zweiten aktiven Diskussion des Artikels aus der Metaklasse:
Alles, was der Programmierer wissen muss, damit er nach 40 Jahren nicht mit dem Müll weggeworfen wird, wo der Bum ist.
In der Tat, im Alter von etwa 45 Jahren, beginnt der Hirnabbau aktiv zu manifestieren, was zu erheblichen Problemen des Verständnisses und der Fähigkeit, durch den Code mit normaler cyclomatischer Komplexität zu führen. Verlust der Fähigkeit, Code in Kombination mit Unfähigkeit zu schreiben, wegen mangelndem Training an die Analyse / Synthese - garantierter Weg. Einige Leute behalten die Fähigkeit, mit normaler cyclomatischer Komplexität und im Alter zu arbeiten, aber nur auf Kosten der Indikatoren in der Jugend. Prüfen Sie, ob Sie die Risikomone eingeben, können Sie bei TopCoder
Von der Physik zur Programmierung
Warum müssen Sie jegliche Dinge mit niedrigem Niveau erfahren?

Nun, endlich, wo diese Theoremin im Allgemeinen herumkam:
Curriculum des ACM-Informatiks

Programmierer - Dies ist ein Spezialist, der Algorithmen und Computerprogramme auf Basis speziellen mathematischen Modellen entwickelt. Beruf vielversprechend und sehr gefragt auf der ganzen Welt (mittlere Bedeutung). Ein Programmierer werden, kann jedes Alter sein. Der Beruf passt zu Männern und Frauen mit Interessen für die Programmierung, Mathematik, Sprachen sowie gute analytische Fähigkeiten und entwickelte Logik (bestanden den Test, kannst du ein Programmierer werden). Es gibt auch Colleges-Trainings-Programmierungen, es ist jedoch möglich, in der Regel zu lernen und unabhängig zu lernen, werden Programmierer darüber geschätzt. Existieren Beruf hat seine eigenen. Der Beruf eignet sich für diejenigen, die an der Informatik interessiert sind (siehe Wahl eines Berufs für das Interesse an Schulfächern).

Sorten

Bei der Programmierung werden nicht nur praktische Fähigkeiten, sondern auch die Ideen eines Spezialisten in die Programmierung eingesetzt. Programmierer können je nach Spezialisierung in drei Kategorien unterteilt werden:

  1. Anwendungsprogrammierer Engagieren Sie sich an der Hauptentwicklung der angewandten Software - Spiele, Buchhaltungsprogramme, Redakteure, Messenger usw. Das Feld ihrer Arbeit kann auch die Erstellung von Software für Video- und Audio-Beobachtungssysteme, SCD, Feuerlöschsysteme oder Feueralarmsysteme usw. enthalten. Ihre Verantwortlichkeiten umfassen auch die Anpassung bestehender Programme für die Anforderungen einer separaten Organisation oder Benutzer.
  2. Systemprogrammierer entwickeln Betriebssysteme, arbeiten mit Netzwerken, Schnittstellen schreiben an verschiedene verteilte Datenbanken. Die Spezialisten dieser Kategorie sind die Anzahl seltener und sehr bezahlter. Ihre Aufgabe besteht darin, Software-Systeme (Dienste) zu entwickeln, die wiederum das Rechensystem verwalten (wobei der Prozessor, Kommunikation und Peripheriegeräte enthalten sind). Die Aufgabenliste umfasst auch die Sicherstellung des Betriebs und des Betriebs der erstellten Systeme (Gerätetreiber, Lader usw.).
  3. Web-Programmierer arbeiten auch mit Netzwerken, aber in den meisten Fällen global-Internet. Sie schreiben die Softwarekomponente von Websites, erstellen dynamische Webseiten, Web-Schnittstellen für die Arbeit mit Datenbanken.

Eigenschaften des Berufs

Basierend auf der Analyse mathematischer Modelle und Algorithmen zur Lösung wissenschaftlicher und technischer Lösungen und produktionsaufgaben Der Programmierer entwickelt Programme zur Durchführung von Rechenvorgängen. Dies ist das Rechenschema der Methode der Lösung von Problemen, überträgt die Lösungsalgorithmen für eine formalisierte Maschinensprache. Bestimmt die in der Maschine erzeugten Informationen, sein Volumen, Verfahren zum Steuern der Maschinenoperationen, der Form und den Inhalt der Quelldokumente und der Ergebnisse der Berechnungen. Entwickelt Layouts und Eingabeschemata, Verarbeitungs-, Speicher- und Ausgabeinformationen, leitet Schreibtischprüfungen durch.

Bestimmt den Datensatz, der die Lösung der maximalen Anzahl von in diesem Programm enthaltenen Bedingungen gewährleistet. Debugging entwickelte Programme, bestimmt die Fähigkeit, fertige Programme zu verwenden, die von anderen Organisationen entwickelt wurden. Entwickelt und implementiert Programmierautomatisierungsmethoden, typische und standardmäßige Programme, Programmierprogramme, Übersetzer, Algorithmische Sprachen.

Führt die Arbeit an der Vereinigung durch und tippen auf Computerprozesse, beteiligt sich an der Erstellung von Katalogen und Karten von Standardprogrammen, in der Entwicklung von Dokumentenformen, die zu maschinell zu bearbeiten sind, in der Designarbeiten, um den Umfang der Computertechnologie zu erweitern.

Vor- und Nachteile Beruf

Pros:

  • hohe Gewinnzahlung;
  • relativ hohe Nachfrage nach Spezialisten;
  • manchmal können Sie einen Job bekommen, ohne die Hochschulbildung zu haben;
  • der Nutzen ist ein kreativer Beruf.

Minus:

  • es ist oft oft und viel zu erklären, dass das Gleiche so erklärt wird, wie verständlich und natürlich der Programmierer nicht immer klar ist und dem Benutzer offensichtlich ist;
  • arbeiten Sie im Avral-Modus (manchmal) in der stressigen Situation;
  • der Beruf verhängt dem Charakter einen bestimmten Aufdruck, der nicht alle anderen ist.

Arbeitsplatz

  • IT-Unternehmen und Webstudios;
  • forschungszentren;
  • organisationen, die in ihrer Struktur ein regulärer Einheits- oder Programmiererabteilungen impliziert sind.

Wichtige Qualitäten

Die Programmierung ist ein schneller Entwicklungsbereich, daher sollte der Programmierer in der Lage sein, sich schnell an den aktuellen Technologiezustand anzupassen und ständig neue Technologien zu studieren. Daher ist die Selbstlernfähigkeit eines der Hauptfähigkeiten, die der Programmierer haben muss. Andernfalls wird in wenigen Jahren sein Wert als Spezialist spürbar niedriger sein.

Das Besitz von Englisch auf der Ebene des Lesens technischer Dokumentation ist eine weitere obligatorische Anforderung für Vertreter dieses Berufs. Für solche Spezialisten ist die Fähigkeit, in einem Team zu arbeiten, über große Projekte, mit kollektiver Entwicklung, mit großen Finanzsystemen (Budget, Banking, Management Accounting) sehr wichtig. Für Bewerber für die Position des Lead-Programms sind die Fähigkeiten des Projektmanagements und des Teams, der Unabhängigkeit, der Initiative sowie die Fähigkeit, persönliche Verantwortung für die Aufgabe zu tragen, wünschenswert.

Auf dem Programmierer lernen

Computerakademie Step - IT-Bildung, wie es sein sollte. Seit 1999, Designer und Systemingenieure, die nicht durch künstliche Intelligenz ersetzt werden können. Dafür lernen Sie außer auf tiefe Profilkenntnisse, die Aufgaben zu verstehen, um fertiggestellte Projekte und Arbeit in einem Team zu denken. Und sie tun alles, um die Absolventen der Akademieschritte unmittelbar nach dem Schutz von Diplomen zu arbeiten.

In diesem Kurs können Sie einen Programmiererberuf in 1-3 Monaten aus der Ferne erhalten. Diplom der professionellen Umschulung einer vom Staat festgelegten Probe. Training in einem vollständig entfernten Format. Die größte Bildungseinrichtung zusätzlicher Prof. Bildung in Russland.

Der Unterricht leitet Praktizierende von Webentwicklern mit Profilausbildung und Berufserfahrung in der Spezialität von 5 Jahren. . 10 Jahre im Formationsmarkt, 4 Millionen Nutzer. Alle Kurse können für ein Jahr mit zinsfreien Raten gekauft werden. Sie können auch eine IT-Spezialität in der Geek University erhalten und ein Jahr nach dem Start studieren.

Für 115 Stunden können Sie erfahren, wie Sie Websites und Online-Shops erstellen können, um 120.000 Rubel pro Monat zu verdienen. Nach dem Übergeben von Training - garantierte Beschäftigung. Vorteile: Zugang zum Kurs für immer, 3 Exit-Spezialisierungen, flexibler und kostenloser Zeitplan der Klassen, arbeiten mit einem persönlichen Mentor, beschäftigungspflichtiger Dokumentation.

Universitäten

Gehalt

Der Programmierer ist einer der begehrtesten und hochbezahlten Berufe in Russland. Nicht einmal der fortschrittlichste Spezialist kann einen Job in Übereinstimmung mit ihrem Wissensniveau finden und dann allmählich erfahren und erleben. Außengehalt - etwa $ 1000. Der Standardprogrammierer in der mittleren Ebene (nicht) erhält bis zu 1500-1800 US-Dollar, ein wenig mehr - in einer Organisation, die sich auf die Massenentwicklung der Software zusammenhängt. Das Gehalt des Blei-Programmierers beträgt 2500-3000 US-Dollar. Der nächste Schritt ist der Kopf der IT-Abteilung. ZU notwendiges Wissen Die obligatorische Berufserfahrung, das Besitz von Fremdsprache, Personalmanagement-Fähigkeiten usw. und das Ergebnis kann 4.000 US-Dollar erreichen. Ein guter Programmierer kann der Anführer eines großen Projektentwicklungsprojekts sein, und hier erreicht das Einkommensgrad 5.000 $ und höher.

Gehalt am 05.02.2020.

Russland 30000-150000 ₽.

Moskau 70000-200000 ₽.

Treppenkarriere und Perspektiven

Ein guter Start der Karriere kann bei der Entwicklung eines Projekts einer Gruppe von Programmierern teilnehmen. Große Projekte ziehen oft die Aufmerksamkeit westlicher Unternehmen an, die russische Programmierer "überlappen". Zum Beispiel entwickelte eine Gruppe unserer jungen Wissenschaftler den Prozessor "Elbrus" für das Verteidigungsministerium und am Ende von ihnen alle Intel Corporation, und jetzt arbeiten unsere Wissenschaftler und Programmierer im Ausland, und das Ellrus-Projekt selbst schloss sich langsam. Das Problem von "Gehirnlecks" in diesem Beruf ist einer der am stärksten.

Der Programmierer kann eine Karriere an den Leiter der Programmiergruppe (Tim-Leader), IT-Direktor des Unternehmens, des IT-Projektmanagers usw. machen. Im Laufe der Arbeit kann der Programmierer sich als Teil seiner Spezialität bewegen, was professionell verbessert wird.

Berühmte und tolle Programmierer

  • Knut Donald Erwin.
  • Matsumoto Yukihiro.
  • Tannebum Andrew.
  • Raymond Eric Stephen.
  • Fowler Martin.
  • Hopper Grace
  • Stallman Richard Matthäus.
  • Kay Alan.
  • Meyer Sid.
  • Sturastrup Björn.

Die Entstehung der Programmierung als eine Art Klassen und insbesondere, wie professionelle Aktivität schwer zu datieren ist, um eindeutig zu datieren.

Oft gilt das erste programmierbare Gerät als Jacquard-Weberei, der 1804 von Joseph Marie Jacquar erbaut wurde, der eine Revolution in der Weberei produzierte, wodurch die Fähigkeit, Muster auf Gewebe mit der Leistung zu programmieren.

Das erste programmierbare Rechengerät, ein analytisches Maschinen, entwickelte Charles Babbage (konnte es aber nicht aufbauen). Am 19. Juli 1843 schrieb die Gräfin von Ada Augustus Lavleis, die Tochter des großen englischen Dichters George Bairon, wie üblich, das erste Programm für die analytische Maschine in der Geschichte der Menschheit. Dieses Programm löste die Bernoulli-Gleichung und drückte das Erhaltungsgesetz der Energie der Bewegungsflüssigkeit aus.

In seiner ersten und einzigen wissenschaftlichen Arbeit der Hölle betrachtete Lovelace eine große Anzahl von Problemen. Eine Reihe von allgemeinen Bestimmungen, die daraus ausgedrückt werden (das Prinzip des Einsparungsspeichers, das Zusammenhang mit wiederkehrenden Formeln mit cyclischen Verarbeitungsprozessen) hat ihre grundlegende Bedeutung für die moderne Programmierung eingespart. In den Materialien von Babbja und Kommentaren ist Lavlais für solche Konzepte als Unterprogramm und Bibliothek von Unterprogrammen, Änderungen von Teams und einem Indexregister geplant, die nur in den 1950er Jahren verwendet werden.

Keines der von ADA Lavleis geschriebenen Programme wurde jedoch nie nie gestartet.

ADU August, Gräfin Lovelace, es ist üblich, dass der erste Programmierer ehrenhaft ist (zwar natürlich, ein Programm auf modernen Standards zu schreiben, kann nicht als Unterricht von Klassen gelten oder berufsaktivitäten). Die Geschichte hat ihren Namen im Titel gehalten universelle Sprache Programmierung "Hölle".

Der erste arbeitet programmierbare Computer (1941), die ersten Programme dafür sowie (mit bestimmten Reservierungen) Die erste Hochprägen-Programmiersprache Plankalkul erstellte den deutschen Ingenieur Konrad Tsuz.

Die Namen der Personen, die zunächst anfing, die Arbeit in der Programmierung professionell auszuführen (in der Trennung von der Setup von Computergeräten), die Geschichte speichert nicht, da bei der ersten Programmierung als sekundärer Setup-Operation betrachtet wurde.

Murphy-Gesetze für Programmierer

1. Nichts funktioniert wie geplant, um zu programmieren.

2. Nichts ist so programmiert, wie es funktionieren soll.

3. Ein guter Programmierer zeichnet sich durch die Fähigkeit aus, zu beweisen, warum die Aufgabe nicht ausgeführt werden kann, wenn es nur faul ist, es auszuführen.

4. Das Problem des Problems lässt dreimal weniger als die Diskussion aller "für" und "gegen" seiner Entscheidung.

5. Das versprochene Liefertermin ist ein ordentlich berechneter Abschluss des Projekts und sechs Monaten.

6. Der Programmierer ist sich der Reihenfolge der Aktionen immer bewusst, die der Benutzer sein Programm hängen kann, aber es repariert dieses Problem jedoch nie, hofft, dass es nie zum Kopf dieser Reihenfolge kommt.

7. Echte Programmierer lieben Fenster - Alle Fehler, die von ihrer eigenen Dummheit hergestellt werden, können Microsoft ablegen.

8. Folgerung - 99% der mit Microsoft verbundenen Probleme ist eine Folge der Dummheit der Programmierer selbst.

9. Beim Angriff von Wut wird alles aus irgendeinem Grund entlang eines unschuldigen Monitors, anstelle einer Systemeinheit, gebetet.

10. Im Falle eines Hungerstreiks wird ein echter Programmierer in der Lage sein, Lebensmittel zu essen, ähnlich zu den Tastaturknöpfen.

11. Dieser Programmierer hat die drei überflutete Tastatur bereits geändert.

12. Alle, die Probleme mit der Codierungskonfiguration erleben, werden automatisch als Neandertal betrachtet.

13. Amateurgespräche über Computer verursachen scharfe Übelkeit den Anschlägen des Erbrechens. Die Frage, wie Sie das "Wallpaper" in Windows ändern können, verursacht den Wunsch, den Hals mit der Befragung zu schneiden.

14. Die meisten Menschen, die Ihre Hilfe benötigen, ist die Ursache des Fehlers in der Arbeit des Programms rein genetisch.

15. HTML, HTTP, FTP, SMTP, TCP / IP, RTFM usw. - Dies sind Wörter, keine Abkürzungen.

16. Der Phrase "Maus-Norushka" macht keinen Sinn.

17. Die mystischen Probleme, die weit verbreitet und beworben werden, werden am Ende Ihre dummen Fehler erweisen.

18. Folglich - Wenn Ihr Programm mystische Aktionen ausführt, bedeutet dies, dass Sie etwas unglaublich dumm getan haben.

19. Der schlimmste Sinne für den Programmierer - wenn es zehn Leute um Sie herum gibt, und jeder versucht, den Grund für das Problem in Ihrem Programm zu finden, und Sie haben bereits verstanden, was das Problem ist, aber Sie haben Angst, zu sagen, weil es ist etwas unklares dummes ...

20. Die Lösung aller Lebensprobleme liegt im Internet. Wir müssen nur gut aussehen können.

21. Der Konflikt der logischen Anweisungen im Leben verursacht einen tödlichen Fehler im Gehirn des Programmierers - es ist möglich, die Temperatur und das schwere Schwindel auf Erbrechen oder Bewusstseinsverlust zu erhöhen.

22. Diejenigen, die Programmierer verachten, verachten die Programmierer stärker als diejenigen, die verachten, die Programmierer verachten, verachten Sie Programmierer, die diejenigen verachten, die sie verachten, die sie verachten, die sie verachten, die sie verachten.

23. Wenn Sie den vorherigen verstehen, sind Sie ein Programmierer.

In diesem Licht sind 10 Arten von Menschen diejenigen, die das binäre Nummernsystem verstehen, und diejenigen, die es nicht verstehen.

Video: Sie sind ein Programmierer

Fortsetzung des Themas:
Netzwerk

EINLEITUNG Es ist passiert, dass, als die Zeit des nächsten Upgrades aufkam, fast alle Komponenten neuer. Und die alte, freundliche, gute ...