Welche Sprache für den Start unter Linux? [geschlossen]

19

Ich bin dabei, bei Purdue ein vierjähriges Studium der Informationssicherheit zu beginnen. Der Abschluss sieht keine Programmierkurse vor. Das einzige Mal, dass ich eines nehmen kann, sind gelegentliche Wahlfächer. Also werde ich den größten Teil meines Lernens alleine machen. Zu Beginn meines Abiturjahres habe ich mich entschlossen, komplett auf Linux umzusteigen. Bisher habe ich einige Linux- und Sicherheits-Dinge gelernt. Ich glaube aber auch, dass es mir wichtig sein wird, auch ein paar Programmiersprachen zu lernen.

Grundsätzlich plane ich zu lernen, wie man Vim nebeneinander programmiert. Es wird also höchstwahrscheinlich ein langsamer Prozess sein. Am Ende denke ich aber, dass es sich lohnen wird. Wie gesagt, ich gehe auf die Sicherheit ein und erstelle hauptsächlich sicherheitsrelevante Anwendungen, von denen die meisten netzwerkbezogen sind. Ich würde auch gerne mit der Entwicklung von Android-Anwendungen beginnen, aber das wird später geschehen.

Davon abgesehen habe ich ein paar Ideen. Ich habe darüber nachgedacht, mit JavaScript zu beginnen, da es plattformübergreifend ist, und ich habe es bereits zuvor vorgeschlagen. Ich habe auch viel über Ruby gehört oder könnte mit C den natürlichen Linux-Weg gehen. In welche Richtung soll ich gehen?

JD Davis
quelle

Antworten:

53

In erster Linie: bashzusammen mit den üblichen Befehlszeilendienstprogrammen. Bashist die Standardbenutzeroberfläche für das Betriebssystem, und viele Programme auf einem Linux-System werden auf einer bestimmten Ebene in ein Shell-Skript eingeschlossen. Es kann skurril sein, hat einige Eigenheiten und wirkt oft geradezu dumm, aber es ist etwas, mit dem Sie sich befassen müssen, machen Sie es sich also bequem. Die Standard - Tools wie grep, diff, head, tail, sort, uniq, und so weiter, werden sehr hilfreich sein , nicht nur mit Shell - Skripten, aber mit Ihrer Produktivität auf der Kommandozeile.

Lerne wenigstens einiges c. Es ist das, was in den untersten Ebenen des Systems geschrieben steht, und es gibt Ihnen ein besseres Verständnis des Systems als Ganzes.

Wählen Sie eine höhere Sprache, die Sie mögen. Python, ruby, perl, java, Was auch immer - so lange , wie Sie es genießen. Hier lernst du wirklich, wie man "programmiert". Ab jetzt wird es einfacher, mehr Sprachen zu lernen und weiter zu lernen .

JimB
quelle
2
Ich stimme allen hier aufgeführten Punkten zu.
Joe
6
Wenn Sie vorhaben , dann lernen , bash sollten Sie umfassen über awk Lernen, sed, Kopf, Schwanz, geschnitten, tr, diff, grep, find, ps, netstat, tcpdump, sortieren, uniq etc., etc., etc.
jftuga
2
@jftuga Einverstanden. Ein großer Teil meines Toolkits besteht aus den Fähigkeiten zur "Datenextraktion und -integration" - eine ausgefallene Art zu sagen, "formatierte Textdateien zu manipulieren". Sobald Sie die Pipeline verstanden und die gängigen Tools kennengelernt haben, sind Sie nicht mehr an den Workflow vorinstallierter Software gebunden. Ich bin auch ein großer Fan von MS Powershell, die in vielerlei Hinsicht auf den Schultern von Bash steht.
AndyN
@jftuga - notiert. Obwohl ich denke, dass dies wichtig ist, denke ich nicht, dass jemand, der neu in Linux ist, sich Sorgen machen muss, die großen Waffen wie sed / awk gründlich zu erlernen, aber er sollte genug Verständnis haben, um in der Lage zu sein, vorhandenen Code zu entschlüsseln, wenn er darauf stößt .
JimB
8
Stimmen Sie mit allen überein, aber ich würde Python vor den anderen als Hochsprache empfehlen, insbesondere weil es die häufigste Hochsprache für Serververwaltungstools geworden ist. Sie werden viel öfter darauf stoßen als auf Rubin oder Java. Perl ist auch üblich, weil es so alt ist, also würde ich mir das nächste aussuchen.
TylerL
10

Sie werden feststellen, dass jeder so ziemlich nur seine Lieblingssprache empfehlen wird. Meine Lieblingssprache ist Perl, daher empfehle ich diese Sprache. :) Über meine persönlichen Vorlieben hinaus gibt es jedoch einige gute Gründe, warum Sie die Verwendung von Perl in Betracht ziehen sollten:

Erstens ist Perl eine wunderbare Allzwecksprache. Es ist einfach, in Perl zu beginnen, indem Sie einfache Skripte schreiben, um dieselben Aufgaben wie in Shell-Skripten auszuführen, z. B. Dateien zu manipulieren und Entscheidungen auf der Grundlage von Benutzereingaben zu treffen. Dies bietet eine sehr einfache und schrittweise Einführung in die allgemeinen Ideen der Programmierung. Perl gibt es schon eine ganze Weile, daher gibt es viele Ressourcen (Bücher und Websites) für den Einstieg.

Zweitens ist Perl eine unglaublich leistungsfähige und ausdrucksstarke Sprache, die alle modernen Programmierfunktionen unterstützt. Ich benutze es seit über fünfzehn Jahren und lerne immer noch neue Wege, um Dinge effizienter zu machen. Wenn Sie zum Beispiel die objektorientierte Programmierung erforschen möchten, hat Perl dies (insbesondere durch Moose ).

Drittens verfügt Perl über die nahezu unendliche Leistungsfähigkeit und Flexibilität seines offiziellen Add-On-Repositorys CPAN . Um beispielsweise der Idee des Schreibens von Sicherheitssoftware zu folgen, möchten Sie beispielsweise eine Art benutzerdefinierten Netzwerksicherheitsscanner entwickeln. Anstatt alles selbst zu schreiben, können Sie zunächst NMAP :: Scanner als Scan-Engine verwenden und dann Ihre eigenen Optimierungen und Verbesserungen hinzufügen.

Wenn Sie sich mit Webprogrammierung beschäftigen möchten, bietet Perl auch diese Möglichkeiten. Eine beliebte moderne Möglichkeit, Web-Software in Perl zu schreiben, ist Catalyst , das ein modernes MVC-Webframework für die schnelle Entwicklung von Web-Apps aller Art bietet.

Alles in allem bietet Perl den Vorteil, dass Sie kleine Kommandozeilen-Skripte und -Programme schreiben und nach und nach zu voll ausgestatteten modernen Anwendungen werden können. Der Preis für diese Flexibilität ist natürlich die Komplexität. Es liegt an Ihnen, zu lernen und zu lernen, wie man Dinge richtig macht. Perl erzwingt keine guten Praktiken wie andere Sprachen. Ich persönlich mag diese Freiheit, vor allem in Verbindung mit all den großartigen Ressourcen im Internet, um den Umgang mit Perl zu erlernen.

Phil Hollenback
quelle
Perl ist eine (hauptsächlich) Skriptsprache. und der Großteil des Betriebssystems ist in C programmiert.
Chris S
Sicher, aber ich denke nicht, dass das im Zusammenhang mit dieser Frage wichtig ist. Es hört sich nicht so an, als ob das OP wirklich etwas über die Programmierung auf Betriebssystemebene lernen möchte oder muss.
Phil Hollenback
Ich würde vorschlagen, dass Perl eine gute Möglichkeit ist, Code für eine Sicherheits-App zu schreiben, die auf etwas abzielt, das in einer anderen Sprache (oft C) geschrieben ist, die Sie bereits verstehen. Wenn diese Unterscheidung Sinn macht, würde ich Perl daher als ein Werkzeug klassifizieren, dessen Verwendung Sie lernen sollten, und nicht als eine Sprache, die Sie (vollständig) verstehen sollten.
BMDan
6

Drei Sprachen kommen Ihnen zugute. In absteigender Reihenfolge der Wichtigkeit (dh die erste ist die wichtigste):

  1. Pseudocode . Oft ist die Implementierung, mit der Sie arbeiten, eine Mischung aus einem halben Dutzend Sprachen und Tools, von denen Sie nur einige direkt kennen. Wenn Sie jedoch wissen, welches Muster implementiert wird, können Sie herausfinden, welche Eingaben an ein Teil übergeben werden und welche Ausgaben es geben soll, es unter Ausschluss testen und herausfinden, ob es das Teil ist, das bricht.
  2. C . Egal ob gut oder schlecht, es ist das, was das (Linux) -Universum ausmacht, und es gibt Ihnen einen genauen Überblick über Dinge, die Sie verstehen können, was eine der übergeordneten Sprachen tatsächlich tut (z. B. PHP) Pass-by-Reference oder Javas Thread-Modell).
  3. Fast alles andere als C ++ . Eine funktionale Sprache wie SQL oder noch besser Haskell oder etwas anderes als C-ey - wenn alles andere fehlschlägt, kann Java dafür arbeiten, aber es ist immer noch sehr prozedural - erzielen Sie hier gute Noten. Die Idee ist, Ihr Gehirn um etwas zu wickeln, das sich völlig von dem unterscheidet, was Sie zuvor getan haben, und dabei die Grenzen dessen zu erkennen, was Sie zuvor getan haben. Was die Nützlichkeit angeht, gehört Bash wahrscheinlich auch in diese Liste, aber wenn Sie keine Grundlage für etwas anderes haben, schreiben Sie am Ende einfach C mit Bash-Syntax, anstatt die Möglichkeiten wirklich zu erkunden.
BMDan
quelle
1
+1 für Pseudocode. Ich mag es, in Kommentaren zu pseudocodieren und dann um die Kommentare
herum
2
+1 für Pseudocode und "Alles andere außer C ++". In der Linux-Welt solltest du mindestens eines lernen script language, wie pythonoder PHP.
Yegle
2
Ich weiß nicht, ob Pseudocode eine gute Empfehlung für Anfänger ist. Pseudocode ist nach dem Erlernen der meisten C-Sprachen verständlich. Sollte man sich also wirklich Mühe geben, einen Pseudocode selbst zu lernen? Ganz zu schweigen davon, dass es keine einzige Pseudocode-Syntax gibt, die Anfänger verwirren könnte.
JimB
@JimB: Es geht darum zu lernen, logisch zu denken, unabhängig von der Sprache. ERD, UML und dergleichen sind die Werkzeuge für diesen Elfenbeinturm, aber Sie müssen nichts so Formales lernen. Die Idee ist, zu lernen, Ihre Gedanken aufzuzeichnen und diese dann mit dem erwarteten Ergebnis zu vergleichen. Wenn Sie beispielsweise feststellen, dass die Datenbank nicht (von Natur aus) weiß, welche HTTP-Header im Rahmen der Anforderung an den Webserver gesendet wurden, können Sie eine Variable von der Prüfung ausschließen. Wenn Sie einen Pseudocode für eine Funktion schreiben, erkennen Sie häufig Kanten- und Eckfälle, die Sie sonst nicht kennen würden.
BMDan
Ich stimme vollkommen zu, ich denke nur, dass das Zeigen eines Anfängers auf "Pseudocode" Verwirrung stiftet, da es keine formale Sache ist. Der Pseudocode der meisten Leute wird eine Verschmelzung der Sprachen im C-Stil sein, in denen sie sich am wohlsten fühlen, sowie eine gewisse Ad-hoc-Syntax.
JimB
4

Sie sollten mehrere Sprachen lernen. Ich würde vorschlagen, mit Python zu beginnen. Es wird allgemein empfohlen, um einfach zu erlernen und sehr nützlich zu sein. Viele hervorragende Materialien zum Selbststudium stehen kostenlos zur Verfügung, und meiner Meinung nach wird es von IT-Sicherheitsexperten häufig verwendet. Fast jedes Mal, wenn ich Sicherheitsprofis sehe, die Demonstrationscode veröffentlichen, ist es Python.

bgvaughan
quelle
+1 für Python, und Python ist nicht nur in der Linux-Welt beliebt.
Xiao
4

Ich bin im Begriff, ein 4-jähriges Studium der Informationssicherheit bei Purdue zu beginnen. Der Abschluss sieht keine Programmierkurse vor.

Bin ich der Einzige, der OMG denkt !!!! An diesem Punkt?

Ich glaube auch, dass es für mich wichtig sein wird, auch ein paar Programmiersprachen zu lernen

So würde ich sagen. Obwohl Sie nicht wirklich erwarten, ein kompetenter Programmierer zu werden, benötigen Sie wahrscheinlich die Fähigkeiten, um Angriffe zu simulieren / neu zu erstellen und die Funktionsweise des Programmierprozesses zu verstehen. Sie benötigen auch die Fähigkeiten, um Daten zu analysieren und Informationen aus Massenquellen (wie Protokollen) zu extrahieren. JimB hat Bash erwähnt - und während Sie dies zweifellos verwenden werden, dauert es nur ein paar Stunden, um die wesentlichen Teile zu lernen. Tatsächlich ist der einzige Ort, an dem Sie Bash wahrscheinlich jemals sehen werden, Linux-Systeme - aber die anderen Shells sind sehr ähnlich.

Ich würde empfehlen, awk und / oder Perl für die Datenverarbeitung zu lernen. Machen Sie sich keine Gedanken darüber, ob Sie ein objektorientiertes Kästchen ankreuzen müssen, aber ich würde empfehlen, auch nicht-prozedurale Sprachen zu betrachten.

Durch das Erlernen von C erhalten Sie auch zahlreiche Informationen darüber, wie sich Code in ein ausführbares Programm verwandelt (das Kompilieren ist nur ein Schritt in einem sehr komplexen Prozess).

Die naheliegende Wahl für jemanden, der sich für Android / Mobile-Entwicklung interessiert, wäre Java - aber Java versucht sehr, den Entwickler davon abzuhalten, sich mit den Realitäten des Betriebs und der Protokolle auseinanderzusetzen - meiner Erfahrung nach treten hier Sicherheitsprobleme mit Java auf Apps. Das heißt, es könnte Ihnen helfen, Ihr letztes Ziel zu erreichen, und es wird in Ihrem Lebenslauf gut aussehen, aber Sie sollten nicht erwarten, dass das Erlernen von Java Ihre Sicherheitskenntnisse stark ergänzt.

symcbean
quelle
1
Du bist nicht der Einzige. : -o
Keith
2

Mein Rat:

  • bash(und sein Typ) sind keine Allzweck-Programmiersprachen. Obwohl es möglich ist, einige ausgefeilte Skripte zu erstellen, ist dies bashnicht der beste Weg, um das Programmieren im Allgemeinen zu erlernen. Es ist die natürlichste Art, Systemadministrationsaufgaben zu erledigen, bei denen es in erster Linie darum geht, andere Programme auszuführen, ihre Datendateien und -verzeichnisse zu verwalten und Ein- und Ausgaben in diese und aus diesen zu marshallen. Wenn bashes sich um einen Hammer handelt, reservieren Sie ihn für Probleme, die wirklich wie Nägel aussehen. Das Erlernen nicht-trivialer Aufgaben bashwird erheblich erleichtert, wenn Sie einige sehr kleine Teilmengen von sedund lernen awk(da die Manipulation von Zeichenfolgen bashweitgehend von der Syntax ähnlicher Operationen in diesen "kleinen" Sprachen inspiriert ist).
  • Bei der allgemeinen Programmierung unter Linux werden Sie viele leidenschaftliche Argumente hören. Die beiden besten Konkurrenten sind Perl und Python . Hierbei handelt es sich sowohl um allgemeine Skriptsprachen auf sehr hohem Niveau, die über eine ausreichende Funktionalität auf niedrigem Niveau verfügen, um nahezu alle Operationen auszuführen, auf die ein beliebiger Benutzerbereichsprozess auf Ihrem System zugreifen kann, als auch um eine riesige Sammlung vorab geschriebener Module und Bibliotheken.

Ich empfehle , dass Sie einen einleitenden Text auf C gelesen und einige Zeit den Lauf verbringen straceund ltraceBefehle auf einigen einfachen Dienstprogramm Befehle wie lsund mkdirund /bin/echousw. (Eigentlich würde ich vorschlagen , in diesen Tagen ltrace -Sstatt dem straceaben Streifzüge in die Ausgabe von beiden Befehlen und in Die ltraceAusgabe, die durch die -SOption erweitert wird, ist äußerst lehrreich.

C ist die primäre Programmiersprache, in der der Linux-Kernel und die GNU libc geschrieben sind. (Kleinteile sind in Montage). Fast alle Programme auf einem Linux-System (oder einem anderen UNIX-ähnlichen System) sind mit den C-Bibliotheken (libc) verknüpft. Die primären Perl- und Python-Interpreter (und die meisten anderen Skriptsprachen) sind ebenfalls in C geschrieben. Diese Programme (der Kernel, die allgemeinen Systembibliotheken und die verschiedenen Interpreter für Skriptsprachen) sind alle von C-Programmierern geschrieben, da ihr Design und ihre Funktionen stark beeinflusst werden durch ihre zugrunde liegenden Implementierungen. Ein tieferes Verständnis von alledem erfordert daher schließlich das Verständnis von C. Sie müssen weder C ++ noch Java kennen, um die Programmierung auf dieser Ebene zu verstehen. (Diese können je nach Karriere-Patch für sich interessant und notwendig sein.)

Wenn Sie also mit meinen bisherigen Prämissen einverstanden sind, haben wir uns für eine Wahl zwischen Perl und Python entschieden.

Hier beginnen echte Flammenkriege.

Mein Rat ist, sich zuerst auf Python (2.x) zu konzentrieren. Python hat eine relativ einfache und konsistente Syntax. Sie können die Grundlagen der Python- Syntax in wenigen Stunden erlernen, und das ist die überwiegende Mehrheit der Syntax, die Ihnen jemals begegnen wird. Es gibt nur wenige Funktionen (Listenverständnisse, Generatorausdrücke, Dekoratoren), die die grundlegende Syntax verknittern. Der größte Teil Ihrer Mühe beim Erlernen von Python wird dem Erlernen der umfangreichen Standardbibliotheken und dem Versuch gewidmet sein, den "besten" Weg zu finden, sie zu verwenden (und herauszufinden, welche spezifischen Ausnahmen es wert sind, behandelt zu werden, um Ihre Programme robust zu machen). und vor allem beim Erlernen der zugrunde liegenden Konzepte.

Ich denke, dass die umfangreichen Bibliotheken und die relativ einfache Syntax von Python zwei deutliche Nachteile haben.

Erstens, wenn Sie in Python lernen, wie man etwas auf einer sehr hohen Ebene macht, werden Sie vielleicht den Gedanken haben, auf einer niedrigeren Ebene arbeiten zu müssen, um mühsam zu sein. Wo ich arbeite Perl ist der Standard. Ich habe meine Arbeit in Python prototypisiert, wo ich weiß, dass ich sie viel schneller und zuverlässiger zum Laufen bringen kann als in Perl. dann fürchte ich, es für meine Kollegen nach Perl portieren zu müssen. (Ich war einigermaßen gut in Perl, bevor ich Python benutzte - es ist also keine Frage der einfachen Vertrautheit).

Der andere Nachteil ist, dass es manchmal schwierig ist, in Python die beste Lösung für eine bestimmte Aufgabe zu finden. Zum Beispiel, um eine Webseite abzurufen, könnten Sie zunächst versuchen, dies mit Sockets auf niedriger Ebene zu tun ... was funktionieren wird. Sie würden jedoch ziemlich viel Code duplizieren, den Sie bereits in den Modulen urllibund / oder finden können urllib2. Die Tatsache, dass die Standardbibliotheken ab 2.7.1 beides enthalten, macht meinen Standpunkt aus. Wo immer möglich, haben die Python-Betreuer ältere Module und APIs transparent erweitert. Es gibt jedoch Dutzende von Fällen, in denen Python zwei oder drei Module beibehält, bei denen eine transparente Erweiterung aus irgendeinem Grund nicht möglich war. (Für ein anderes Beispiel , das Sie bei den Optionen für das Parsen von Kommandozeilen - Optionen aussehen könnten: argparse, optparseundgetopt. Das Schreiben von Programmen mit getopt(dem ältesten davon) schadet wenig . Für sehr einfache Dienstprogramme mit wenigen Optionen und einer strengen Anrufkonvention (die zum Beispiel nur von einer kleinen Gruppe von Menschen verwendet wird) ist es nicht von Natur aus falsch, über sich sys.argvselbst zu gehen. In der Regel lohnt es sich jedoch, die Dokumente sorgfältig zu lesen und den Links am Ende älterer oder niedrigerer Module zu folgen, die die verfügbaren neueren oder höheren Funktionen beschreiben.

Mein Rat basiert auf meiner Meinung, dass Sie sich auf tiefere Konzepte konzentrieren möchten und nicht viel Zeit und Mühe auf syntaktische und sprachspezifische Probleme verwenden müssen. Zu verstehen, wann ein Unterprozess oder ein Thread oder die in Python enthaltenen Multi-Processing-Funktionen verwendet werden müssen, hat relativ wenig mit der Sprache zu tun, und alles, was mit Programmierkenntnissen zu tun hat, unabhängig von der Sprache. (Wenn Sie Argumente zum ereignisgesteuerten Twisted-Modell im Vergleich zu Threading und Multiprocessing verstehen, haben Sie wahrscheinlich Python beherrscht und können in jeder Sprache programmieren.)

Das Gegenargument für Perl ist einfach und praktisch. Es gibt noch eine ganze Reihe weiterer Jobs, die speziell nach Perl-Kenntnissen verlangen. Perl ist eine mächtige Sprache und verfügt über extrem umfangreiche Bibliotheken. (Der Kern von Perl, der mit den meisten Linux-Systemen ausgeliefert wird, umfasst einen kleineren Funktionsumfang als die Standard-Python-Bibliotheken. Es wird davon ausgegangen, dass Sie eine erhebliche Anzahl zusätzlicher Pakete aus Ihrer Distribution oder über CPAN - das Comprehensive Perl Archive - installiert haben Netzwerk). (Im Gegensatz dazu gibt es weniger Python-Module und -Pakete, die ich separat abrufen muss ... diese sind bei PyPI erhältlich - dem Python-Paketindex).

Wenn Sie also Perl lernen, haben Sie kurzfristig die Qual der Wahl, einen Job zu finden, insbesondere einen Sysadmin-Job. Die Syntax von Perl ist jedoch ... naja ... in den Worten einiger seiner eigenen Enthusiasten ... "pathologisch vielseitig!" Perl kann extrem knapp sein und sein Code ist mit einer Menge Interpunktion gefüllt. Diejenigen, die es lieben, werden endlos behaupten, dass es "einfach" und sinnvoll ist - und sie werden endlose Möglichkeiten haben, dies in Foren zu tun, die voller Verwirrung darüber sind, wie genau ein bestimmter Codeausschnitt interpretiert wurde. Die Syntax und die Sprache, die in der Dokumentation verwendet werden, und diejenigen, die sie in öffentlichen Foren unterstützen, sind so differenziert, dass Sie erhebliche Anstrengungen unternehmen können, um sie zu erlernen.

Bitte beachten Sie, dass dieser vorhergehende Kommentar subjektiv und voreingenommen ist. Möglicherweise werden Sie Perl ausprobieren und feststellen, dass die Syntax intuitiv und angenehm ist. Wenn ja, mehr Kraft für Sie. Ich persönlich finde jedoch, dass mein Verständnis von Perls Eigenheiten sehr schnell abnimmt. Die Grundlagen, die ich beibehalten habe, sind jedoch schwierig, wenn ich für mehr als ein paar Zeilen Code wieder darauf zurückgreifen muss.

Es gibt viele andere Sprachen, die Sie lernen würden, Java, Lisp und Schema, TCL, Scala und so weiter. Ich würde jedoch vorschlagen, mit einem zu beginnen, das die beste Balance zwischen Nützlichkeit und Einfachheit bietet.

Jim Dennis
quelle
1

In der Linux-Welt sollten Sie zwei grundlegende Dinge wissen:

  1. Regular Expression. Das ist ein Muss. RegExist eine universelle "Sprache". Wenn Sie einmal wissen, wie man reguläre Ausdrücke verwendet, wird Ihr Leben viel einfacher :-)
  2. " quick & dirty" ist in der Linux - Welt sehr verbreitet. Wenn Sie Ihre Arbeit erledigen können, egal wie hässlich Ihre Lösung ist, haben Sie Ihre Arbeit erledigt.

Also, wenn Sie eine Sprache auf Linux erfahren möchten, Sie sollten ein wählen script language, wie python, PHPoder sogar bash scripting.

Und ich empfehle PHP. Es ist einfach und hässlich. Es verfügt über ein detailliertes Online-Handbuch . Es hat eine gute RegExUnterstützung. Das ist alles.

Yegle
quelle
2
Das muss die beste Beschreibung von PHP sein, die ich je gehört habe ... Wenn man die Popularität herausnimmt, bleibt nicht viel dahinter: P
Gordon Gustafson
Ein bisschen abseits des Themas, aber ich denke, der Hauptgrund für die Popularität von PHP sind viele der Funktionen, die über viele Linker-Bibliotheken / Pakete in anderen Sprachen verstreut sind libc)
Phil Lello
1

Sie können fast jede Aufgabe in fast jeder Sprache erledigen. Die richtige Wahl hängt also maßgeblich von dem Problem ab, das Sie lösen.

Es lohnt sich auf jeden Fall, Sprachen aus folgenden Kategorien zu kennen:

  • Kompilierte Sprachen (wie C / C ++ / Java). C / C ++ ist ein guter Ort, um Sicherheitsprobleme mit Pufferüberläufen, Stapelbeschädigungen usw. zu untersuchen.
  • Interpretierte Sprachen (wie PHP). Ein guter Ort, um die Probleme mit lose eingegebenen Variablen zu untersuchen und nicht definierte Funktionen erst dann zu erkennen, wenn Sie sie aufrufen
  • Skriptsprachen (sh / bash / csh / ksh). Sehr nützlich, um die vielen nützlichen Shell-Dienstprogramme (siehe / bin & / usr / bin) zusammenzufügen

Ich würde mich bemühen, C / C ++ zu erlernen, da dies Stapelbeschädigung und direkten Speicherzugriff ermöglicht. Dies ist wichtig, wenn Sie mit Sicherheitsproblemen experimentieren möchten. Viele Sprachen haben eine C-ähnliche Syntax (einschließlich JavaScript), daher ist dies ein gutes Sprungbrett.

Wenn Sie viel in einer Shell arbeiten, was Sie beim Lernen von vim wahrscheinlich auch sind, werden Sie als Nebeneffekt die grundlegenden Skripte der Shell lernen. UNIX Power Tools war ein gutes Buch, um fortgeschrittenere Dinge zu lernen. Ich weiß nicht, ob es noch veröffentlicht ist.

PHP kann auch eine gute Sprache zum Lernen sein. Der Hauptvorteil, den es neuen Programmierern bietet, besteht darin, dass viele Funktionen integriert sind und nicht in einer Bibliothek, zu der Sie eine Verknüpfung herstellen müssen (was keine komplexe Aufgabe ist). Aus diesem Grund werden Sie beim Durchsuchen der Hauptdokumente über viele Dinge informiert .

Phil Lello
quelle
1

Zunächst einige negative Ratschläge:

Grundsätzlich plane ich, zu lernen, wie man Vim nebeneinander programmiert.

TU das nicht. Finden Sie einen Editor, der wirklich komfortabel ist. Das Erlernen der Sprache und des Editors ist dreimal so schwer wie das Erlernen der Reihenfolge (natürlich sollte der Editor zuerst beginnen :-))

Wie gesagt, ich gehe auf die Sicherheit ein und erstelle hauptsächlich sicherheitsrelevante Apps. Die meisten davon werden im Zusammenhang mit Netzwerken stehen.

Netzwerkbezogene Sicherheits-Apps? C ist hier eine gute Wahl. Sie müssen auf der System-API-Ebene auf das Netzwerk zugreifen, was bedeutet, dass C der richtige Weg ist. Dies bedeutet natürlich nicht, dass sich alles in C befinden muss - eine C-Bibliothek + ein $favorite-high-level-languageWrapper können Ihnen die C-bezogenen Probleme in Teilen ersparen, die kein C benötigen.

Davon abgesehen habe ich ein paar Ideen. Ich habe darüber nachgedacht, mit JavaScript zu beginnen, da es plattformübergreifend ist, und ich habe es bereits zuvor vorgeschlagen.

Ich wette, es wurde in einem anderen Kontext als Ihrem vorgeschlagen. JavaScript hat seine Stärken, ist aber noch keine gute Allzwecksprache. JS hat keine Standardbibliotheken, die mit denen von C, Python, Perl, Ruby, Java & Company vergleichbar sind.

Apropos $favorite-high-level-language- mein Rat ist, mit Python zu gehen. Es passt gut zu C, wird mit vielen nützlichen Bibliotheken ausgeliefert und verfügt über viel mehr Bibliotheken als Add-Ons.

Rafał Dowgird
quelle
0

Das Erlernen von Javascript ist überhaupt nicht verkehrt, aber es läuft nur unter einem Browser, sodass sich Ihre Programmierung auf Apps beschränkt, die mit Webseiten in Verbindung stehen.

Es gibt wahrscheinlich so viele Antworten auf die Frage, was eine gute Programmiersprache ist, wie es Sprachen gibt. Mein Tuppence-Wert ist, dass Sie es schlechter machen könnten, als mit einfachen Shell-Skripten zu beginnen, nur zu sehen, was Sie tun können, um Aufgaben zu automatisieren, ohne etwas über die Shell hinaus zu verwenden, und dann diese mit Perl oder einer ähnlichen Sprache zu erweitern, die aus der Notwendigkeit heraus entstanden ist Aufgaben, die komplexer sind als die Shell, können dann ausgeführt werden. Wenn Sie wirklich interessiert sind, dauert es nur ein paar Wochen, bis Sie C oder ein Derivat verwenden.

Blankabout
quelle
3
Nur in Browsern? Nicht mehr .
EEAA
Danke, ich stehe korrigiert da, aber ich würde Javascript immer noch nicht als Lernumgebung empfehlen. Für Anfänger wäre es ein Albtraum, Unterstützung für Nicht-Browser-Versionen zu erhalten.
Blankabout
2
Ich habe immer gedacht, dass ECMAScript die Programmiersprache ist und Javascipt auf ECMAScript sitzt, um nützliche Funktionen für die Manipulation des DOM bereitzustellen. Javascript ist für den Browser.
Jonathan Mayhak
0

Meine Empfehlungen? Hmmm. Nun, Sie müssen sich vielleicht entscheiden, wie Sie gehen. Für den gesunden, abgerundeten Bereich können Sie den üblichen CS-Grad-Weg einschlagen, möglicherweise nicht in dieser Reihenfolge.

(1) C / C ++ - Sie können das objektorientierte Material herunterladen, und zumindest haben Sie es versucht. C ++ ist der "professionelle" Standard. (2) Assembly (nur für einen kleinen Teil - es wird Ihnen helfen, die tatsächlichen Funktionen des Prozessors, des Speichers usw. zu verstehen - Sie müssen es nicht heiraten.) (3) Python / Perl / Bash - Holen Sie sich diese Wenn Sie die Skriptsprachen nicht verwenden, sind sie für Ihre Linux-Kenntnisse (4) PHP / Ruby, MySQL und HTML am nützlichsten. Sie werden den gesamten Server-Client-Interaktionsprozess verstehen, eine weitere Computerebene.

Benötigen Sie hilfreiche Konzepte? KI, neuronale Netze. Diese sollten Sie abrunden.

Sie können eine davon auswählen oder alle berühren. Meine Sprache? Alle nach Bedarf, aber ich programmiere seit 1984 und habe einen CS-Abschluss, geschriebene Spiele und alle Arten von Anwendungen für eingebettete Systeme. Es ist was ich tue. Sie müssen herausfinden, wer Sie sind und was Sie tun. Stellen Sie sicher, dass Sie Spaß haben.

Genießen!

Scott Foulk
quelle
0

hoppla, missgelesene info-sicherheit für info-systeme ... na ja das meiste davon gilt immer noch

Java

  1. Es muss einen Programmierkurs für Anfänger geben, der auf Java basiert und für Ihren Abschluss gilt. Es ist immer schön, Credits für das zu bekommen, was du lernst.
  2. Wenn Sie es satt haben, ausschließlich ein System-Typ zu sein, oder wenn das Unternehmen, in dem Sie später arbeiten, entscheidet, dass Systeme wie Toaster sind, und die Leute, die sie betreiben, können Sie Karriere machen.
  3. Objektorientierter
  4. Sie sagten, Sie wollten eine Android-Entwicklung machen. Das wird Java bedeuten.

Wenn Sie unter Linux arbeiten und einen ersten Programmierkurs in Java absolvieren und dann vielleicht ein paar weitere Programmierkurse absolvieren, sollten die anderen Tools wie Bash sed / awk usw. irgendwie passen. Wenn Sie sich wirklich mit Systemen beschäftigen, werden Sie vielleicht später ein wenig mit C anfangen, aber ich würde nicht sagen, dass es sehr gefragt ist, und ich würde nicht einmal sagen, dass es eine Voraussetzung dafür ist, ein System-Typ zu sein - es sei denn, Sie stehen wirklich auf Interna.

YMMV

MLH
quelle