Lernen Sie rückwärts zu programmieren, oder? Ich habe den FizzBuzz-Test nicht bestanden. Was nun? “[Geschlossen]


94

Ein kleiner Hintergrund

Ich bin heute 28 Jahre alt und hatte noch nie eine formelle Ausbildung in Softwareentwicklung. Ich habe jedoch zwei Hochschulabschlüsse, die einem BA in Public Relations entsprechen, und einen Executive MBA mit Schwerpunkt auf Projektmanagement. Ich habe ungefähr 6 Jahre auf diesen Feldern gearbeitet und vor 2,5 Jahren habe ich meinen Job gekündigt / verloren und mich entschieden, die Richtung zu ändern.

Nachdem ich einen Monat lang nachgedacht hatte, beschloss ich, freiberuflich kleine Websites in WordPress zu entwickeln. Ich habe es selbst gelernt und kann heute sagen, dass ich eine bescheidene, aber erfolgreiche Karriere als Entwickler von Themen und Plugins für meine Kunden habe - hauptsächlich Agenturen, die einen Teil ihrer Entwicklungsarbeit für mittlere und große Websites auslagern.

Aber manchmal habe ich das Gefühl, dass es mich wirklich zurückhält, wenn ich nicht genug Mathe studiert habe oder kein formales Verständnis der Dinge habe, wenn ich mit erfahreneren Entwicklern konkurrieren oder arbeiten muss. Ich bin ständig auf der Suche nach Möglichkeiten, mehr zu lernen, aber mir fehlen anscheinend die Grundlagen.

Leider ist es derzeit nicht möglich, noch vier Jahre in Informatik zu verbringen. Deshalb versuche ich, aus Büchern und Online-Ressourcen alles zu lernen, was ich kann. Diese Methode wird die NASA niemals dazu bringen, mich einzustellen, aber es ist mir im Moment wirklich egal. Mein Ziel ist es, zuerst die Messlatte zu überschreiten und mich als echten Programmierer bezeichnen zu können.

Momentan verbringe ich meine Freizeit damit, Java für Programmierer (um eine Sprache zu erlernen, von der jeder sagt, dass sie schwierig / anspruchsvoll ist), Auszüge aus Code Complete (um Best Practices zu erlernen ) und auch Code: The Hidden Language of Computer zu lesen Hardware und Software (um das Innenleben von Computern zu erfassen).

TL; DR

Meine derzeitige Situation ist folgende: Ich bin grundsätzlich in der Lage, jedes vollständige System in PHP zu schreiben (mithilfe von Google und einigen Büchern), Ajax, SQL und so weiter zu integrieren und vielleicht ein bisschen langsamer, als es ein erfahrener Entwickler erwarten würde aufgrund all der Forschung beteiligt.

Aber ich war gestern gestrandet und habe versucht, eine Lösung für den FizzBuzz-Test zu finden (nicht Google), weil ich den if($n1 % $n2 == 0) Methodenmodul- Operator nicht auswendig gelernt habe.

Was würden Sie als einen guten Weg zur Lösung dieses Dilemmas vorschlagen? Welche Fächer / Bücher sollte ich studieren, um Probleme schneller und vielleicht "auf programmiererische Weise" zu lösen ?

EDIT - Scheint, dass es einige Verwirrung darüber gab, was ich nicht wusste, um FizzBuzz zu lösen.

Vielleicht habe ich mich nicht richtig ausgedrückt: Ich kannte die notwendigen Schritte, um das Problem zu lösen. Was ich mir nicht gemerkt habe, war der Moduloperator. Das Problem bestand darin, die Grundrechenarten in das Programm zu übertragen, nicht darin, die Grundrechenarten zu kennen.

Ich habe den Test zum Spaß gemacht, nachdem ich ihn in Coding Horror gelesen hatte . Ich habe gerade entschieden, dass es eine gute Basis-Vergleichslinie zwischen mir und formal ausgebildeten Entwicklern ist.

Ich habe dies nur als Beispiel dafür verwendet, dass ich keine Zeit damit verliere, mich mit Mathematik in einer Computerumgebung auseinanderzusetzen, um grundlegende Dinge wie Moduloperatoren nachzuschlagen, um einfache Probleme lösen zu können.


63
Wenn ich Folgendes lese: I'm basically capable of writing any complete system in PHP (with the help of Google and a few books)und dies mit Ihnen kombiniere, ohne es zu wissen if($n1 % $n2 == 0), wundere ich mich über die Belichtung, die Sie mit Dingen hatten, die in PHP geschrieben wurden. Ich denke, die meisten Dinge, die Sie tun, gehen über eine einfache Modulo-Berechnung hinaus. Könnten Sie uns einen Einblick geben, wozu Sie Ihrer Meinung nach in der Lage sind?
Phant0m

10
Ich bin auch ein Autodidakt. Ich bin seit über 10 Jahren im Internet. Damals gab es keine Webentwicklungskurse. Ich denke, es hat einen gewissen Vorteil, wenn man alleine lernt. Sie werden wirklich etwas über die grundlegenden OO-Prinzipien und Entwurfsmuster lernen wollen. Sie helfen Ihnen sehr, wenn Sie Probleme im Hinterkopf haben. Ich finde im Allgemeinen, dass ich nicht immer das Vokabular habe, das andere haben, aber wenn Sie gerne programmieren und gerne elegante Lösungen schreiben, sind Sie es schließlich Sie können Ihren Weg in das
programmieren,

56
In Bezug auf das stuck b/c I didn't memorize %Problem sollte beachtet werden, dass es auch andere Möglichkeiten gibt, dies zu tun: (unter der Annahme von $ n2! = 0) if (is_int ($n1 / $n2))oder if (($n1 / $n2) == (int) ($n1 / $n2))Schlüsselwörter zu kennen, ist eine Sache, und zu wissen, wie die zugrunde liegenden Ideen in Abwesenheit einer integrierten Lösung ausgedrückt werden Ein weiterer.
Grossvogel

18
@grossvogel Genau! Einer der Gründe, warum Fizzbuzz so beliebt ist, ist, dass es so viele Möglichkeiten gibt, es zu lösen. Es ist nicht nur ein Trick, um zu sehen, ob Sie den Moduloperator kennen. Ein Schlüssel Programmierkenntnis ist die Fähigkeit , ein Problem aus der Form zu übersetzen , in der sie in die Form angegeben ist , die am besten für Ihr Wissen / tools / resources / usw.
octern

18
Die Unkenntnis des Modul-Operators ist kein Grund, FizzBuzz nicht zu bestehen. Wenn Sie feststellen, dass etwas fehlt, müssen Sie in der Lage sein, es zu umgehen.
Loren Pechtel,

Antworten:


144

In Ihrem Fall, da Sie Autodidakt sind und bereits einen guten, gesunden und BS-freien Lernansatz haben. Noch ein paar Vorschläge ...

Übung macht den Meister

Ich denke, Sie sollten in Programmierübungen eintauchen, wie die:

Nehmen Sie sogar die Prüfungsfragen bekannter Universitäten in Ihrer Nähe oder lokaler (oder entfernter) Programmierwettbewerbe zur Kenntnis. Zum Beispiel haben wir in Frankreich ein nettes Programm für angehende High-School-Programmierer namens Prologin , das jedes Jahr eine gute Reihe von Puzzles bietet (wahrscheinlich nur für Franzosen, sorry, aber das ist die Art von Dingen, die ich meine ).

Für mehr: Wo finde ich Programmierpuzzles und Herausforderungen?

Klassische Bücher und Referenzen

Wir könnten auch eine sehr lange Liste erstaunlicher Bücher empfehlen , aber ich würde sagen, die Zen-Antwort ist, dass es keinen einzigen richtigen Weg zur Erleuchtung gibt.

Es ist schwer zu sagen, welche ganz oben auf der Liste stehen. Lesen Sie also eine Menge Dinge durch, um allgemeine Fallstricke zu vermeiden und bewährte Methoden zu befolgen, wie Sie es jetzt richtig machen.

Für mehr:

Die Grenzen ausreizen

Achten Sie auch auf Material, das den Kopf zerkratzt, wie:

Nicht unbedingt als Beispiel für Dinge zu sehen, die heutzutage zu tun sind, aber es lohnt sich herauszufinden, was zum Teufel dort vor sich geht.

Peer-Systeme sind motivierend

Möglicherweise möchten Sie auch in den folgenden Communities herumlungern (und sich daran beteiligen), um Ihre Fähigkeiten schrittweise zu verbessern, indem Sie mit anderen konfrontiert werden.

Teilzeitausbildung

Wenn Sie nicht die Zeit oder die Motivation haben, sich für einen weiteren 4-jährigen Kurs oder Ähnliches zu engagieren (was möglicherweise nicht einmal notwendig oder lohnend ist und teuer), können Sie online nach Lehrmaterialien suchen. Natürlich sind diese nicht auf Informatik beschränkt.

Dank der ursprünglichen Bemühungen von MIT OpenCourseWare folgten inzwischen Unmengen von Universitäten , und Sie können viele Kursmaterialien auf Universitätsniveau kostenlos finden. Es ist nicht immer einfach, alleine zu navigieren und zu lesen, aber einige sind ziemlich gut gemacht. Betrachten Sie auch die Khan-Akademie, um von Grund auf zu beginnen und ganz nach oben zu gehen .

Einige gehen noch ein bisschen weiter und bieten echte Online-Kurse an, bei denen Sie ebenfalls Zugriff auf das Kursmaterial haben, bei denen Sie aber auch Vorträge halten und regelmäßig Selbsteinschätzungen vornehmen können. Besuchen Sie beispielsweise Coursera oder Udacity .

Die meisten der oben genannten veröffentlichen ihre Vorträge häufig auf Youtube oder iTunesU, sodass Sie viel Material finden, wenn Ihr Wissensdurst nicht bereits durch alle vorherigen Links gestillt wurde.

Wenn Sie etwas wollen, das der "realen" Universität eine nähere Erfahrung bietet, können Sie Remote-Universitäten in Betracht ziehen, die es Ihnen auch ermöglichen, Teilzeit zu arbeiten, aber von Ihnen verlangen, dem Tempo zu folgen und sowohl Selbsteinschätzungen als auch das Ende von zu haben Jahresprüfungen (manchmal vor Ort), wie bei der OpenUniversity und ihren internationalen Varianten.

Leidenschaft hält Sie am Laufen

  • Suchen Sie ein Lieblingsprojekt: Erstellen Sie Ihr eigenes oder schließen Sie sich einem oder mehreren vorhandenen Softwareprojekten an und leisten Sie einen Beitrag.
  • Code, Code, Code. Und dann noch etwas Code.

(und genug Augäpfel auf deinen Code werfen, um dich zu kritisieren und verschiedene Perspektiven zu haben)

Die Franzosen sagen:

C'est en forgeant que l'on devient forgeron.

Mach weiter, was du tust, und irgendwann wirst du ein Experte. Es braucht Zeit und Arbeit.

Weitere Vorschläge finden Sie unter Ich habe Probleme beim Lernen .


PS: Obwohl es ein sehr kontroverses Tool für Interviews ist und nicht dazu beiträgt, gute Kandidaten zu identifizieren, benutze ich FizzBuzz oft, um zumindest die unglaublich "schlechten" auszusortieren. Also fang an zu üben! :)


3
C'est super ça! :) Danke für die Liste. Projekt Euler und die Rätsel scheinen sehr schön. Und ich benutze bereits einige andere SE-Sites. Werde eintauchen.
Moraleida

@ Moraleida: Schön, dass dir die Antwort gefallen hat. Bitte.
Haylem

Zu Ihrer PS: Ich mache mir im Moment keine großen Sorgen um Interviews, da ich wirklich nicht wieder Angestellter werden möchte. Ich habe den Test zum Spaß gemacht, nachdem ich ihn in Coding Horror gelesen hatte. Ich habe gerade entschieden, dass es eine gute Basis-Vergleichslinie zwischen mir und formal ausgebildeten Entwicklern ist. :)
Moraleida

4
+1 nur, warum FizzBuzz direkt am Ende verwendet wird ... Zu oft sehe ich hier oder in Blogs Kommentare über Kritiker, weil sie davon ausgehen, dass Unternehmen es verwenden, um Super-Codierer zu identifizieren. (Zu diesen Firmen: Sie machen es falsch!)
Izkata

1
Dies ist auf einigen der Links aufgeführt, aber ich glaube, es ist ein Hinweis angebracht : Ich würde mich auch auf rosettacode.org umsehen . Es gibt eine Vielzahl unterschiedlicher Probleme, die in einer Vielzahl von Programmiersprachen gelöst werden. Es ist eine gute Übung, Code zu lesen, was genauso wichtig ist wie das Schreiben, und eine großartige Möglichkeit, viele verschiedene Ansätze zur Lösung desselben Problems zu erkennen. Und wenn Sie ein Problem finden, das in einer Sprache, die Sie kennen oder lernen möchten, noch nicht gelöst ist, ist dies genau dort eine Programmierherausforderung für Sie.
Mark Reed

60
I didn't have the if($n1 % $n2 == 0) method memorized.

Ich habe noch nicht lange programmiert (habe vor ungefähr 27 Monaten angefangen, mir SQL beizubringen, und habe vor ungefähr 20 Monaten angefangen, in Perl zu programmieren), aber das obige Zitat klingt wie ein paar Dinge, die ich von ehemaligen Schülern gehört habe:

Wie soll ich mir merken, welche Integrationstechnik für jedes Problem zu verwenden ist?

Ich habe nicht auswendig gelernt, ob ich Wahrscheinlichkeiten addieren oder multiplizieren oder "n wähle k" oder Fakultäten verwenden soll.

Warte eine Minute! Du hast gesagt, dass x gestern 2 war! Jetzt ist es gleich Null ?!

Okay, das letzte war wahrscheinlich ein bisschen hart ... aber der Punkt, den ich versuche, ist, dass das Lösen von Problemen nicht das Auswendiglernen ist . Wenn es so wäre, könnte ein Genie einen Computer programmieren, um jedes Problem zu lösen, und keiner von uns würde jemals wieder darüber nachdenken müssen (was für eine höllische Welt das wäre ...).

Nun ist es wahr, dass jedes intellektuelle Unterfangen zumindest ein bisschen auswendig gelernt werden muss. Insbesondere wenn Sie in PHP programmieren möchten, sollten Sie die grundlegenden Datentypen (Zahlen, Zeichenfolgen, Arrays) und die grundlegenden Funktionen kennen, die Sie damit ausführen können (für Zahlen: Addition, Subtraktion, Multiplikation, Division und Modul; für Zeichenfolgen: Verkettung, Teilzeichenfolgen, Ersetzung und zumindest einige Kenntnisse über reguläre Ausdrücke; für Arrays: Verkettung, Anheften von Elementen, Herausspleißen von Elementen, Schleifen, Zählen von Elementen usw.) und die grundlegenden logischen Strukturen, die verwendet werden können (if / then / else-Anweisungen, foreach-Schleifen, while-Schleifen usw.).

Wenn Sie auf ein Problem stoßen, verwenden Sie das Problem, um den Kontext für die benötigten Tools bereitzustellen. In FizzBuzz müssen Sie feststellen, wann eine Zahl durch 3, 5 oder 15 teilbar ist. Okay, es handelt sich also um Zahlen. Mit welchen grundlegenden Tools können wir feststellen, wann eine Ganzzahl durch eine andere teilbar ist? Nun, der Moduloperator. Also, benutze das. (Natürlich, wenn Ihre Nummer ist $n, könnten Sie ausgefallen sein und sehen, ob die letzte Ziffer von $n0 oder 5 ist, und / oder ob sich die Ziffern von $nzu etwas addieren, das durch 3 teilbar ist, aber ich schweife ab ...) Sie müssen Tun Sie dies für jede Zahl zwischen 1 und 100. Verwenden Sie eine foreachSchlaufe , um zu vermeiden, dass Karpelltunnel entstehen .

Die Moral der Geschichte ist, dass, wenn Sie einerseits sagen "Ich bin grundsätzlich in der Lage, ein komplettes System in PHP zu schreiben" und andererseits FizzBuzz nicht codieren können, die erste Behauptung falsch ist. Einige meiner ehemaligen Kalkülschüler schworen auf und ab, dass sie die Konzepte verstanden, aber sie konnten die Probleme in der Prüfung ... oder die Hausaufgabenprobleme ... oder die Quizprobleme einfach nicht lösen. Sie haben sich auch in ihrem Verständnis geirrt.

Hör auf, Ausreden zu machen und lerne die Grundlagen.


6
Ich erinnere mich nicht, ich metabolisiere und mache diese Dinge zu einem Teil meiner Intuition. Versuchen Sie immer, das zu erweitern.
Ncmathsadist

@ncmathsadist - Ja, die Erweiterung der Intuition ist der Schlüssel, aber auch die Intuition muss sich auf das Auswendiglernen einer kleinen Anzahl sehr grundlegender Konzepte und Fakten stützen.

Für den Datensatz müssen Sie keine Zahl mit 3 multiplizieren und dann die Ziffern addieren, um festzustellen, ob sie durch 3 teilbar ist. Sie können einfach die Zahlen addieren. Beispiel: 864, 8 + 6 + 4 = 18, was durch 3 teilbar ist, und 864
Oztaco,

@ leaf68 - Duh! [Schläge auf die Stirn] Du bist absolut korrekt ... lass mich das ändern!

27

Sie denken vielleicht, FizzBuzz sei ein Spielzeugproblem. Wann muss ich den Modul-Operator jemals in einem echten Programm verwenden? Aber wirklich benutzt du es die ganze Zeit. Drei gängige Beispiele:

  1. Sie zeigen eine Tabelle an und möchten alternierende Hintergrundfarben für verschiedene Zeilen. Sie überprüfen, ob eine Zeile gerade ist ( row_number % 2 == 0) und zeigen eine Farbe für gerade Zeilen und eine für ungerade Zeilen an.
  2. Sie haben eine Sammlung von Objekten, die Sie durchlaufen, und Sie möchten eine Tabelle mit N Objekten pro Zeile ausdrucken. Dann ist das Kriterium für das Hinzufügen eines Zeilenumbruchs (item_number% N == 0). Ich hatte tatsächlich eine SO-Frage zu diesem genauen Verhalten, obwohl in dieser Vorlagensprache die Bedingung if item_number % N == 0als das Äquivalent ( if item_number|divisbleby: N) geschrieben wurde.
  3. Sie führen mehrere Vorgänge aus, die Sie zu einer Transaktion zusammenfassen möchten, die aus Effizienzgründen erst dann festgeschrieben wird, wenn die Gruppe eine bestimmte Größe erreicht. Möglicherweise verwenden Sie die Google Data-API und möchten nicht, dass der HTTP-Header / Authentifizierungsaufwand für das Erstellen einer neuen Transaktion für jeden Vorgang anfällt. Sie stapeln sie daher in Gruppen von 50 Vorgängen. Oder Sie speichern Datensätze in Ihrer Datenbank und möchten die Transaktion festschreiben, wenn sie eine angemessene Größe hat. So etwas wie if cur_item_number % 50 == 0 then commit_data.

Sicher gibt es andere Möglichkeiten, all diese Dinge zu tun. Sie können jedoch Fizz Buzz ausführen, ohne den Modulusoperator zu verwenden oder die Gleitkommadivision mit der Ganzzahldivision zu vergleichen. Für FizzBuzz könnten Sie beispielsweise den folgenden Pseudocode verwenden.

div_by_3_rem = 0
div_by_5_rem = 0
for(i = 0; i< 50; i++) {
    if(div_by_3_rem == 0 && div_by_5_rem == 0) {
       print "FizzBuzz"
    } elif(div_by_3_rem == 0) {
       print "Fizz"
    } elif(div_by_5_rem == 0) {
       print "Buzz"
    } else {
       print i
    }
    div_by_3_rem += 1
    div_by_5_rem += 1
    if(div_by_3_rem == 3) {
       div_by_3_rem = 0
    }
    if(div_by_5_rem == 5) {
       div_by_5_rem = 0
    }
}

Zum Schluss, wenn Sie eines Tages ein großartiger Programmierer sein möchten, sollten Sie keine Sprachbücher lernen. Ja, in einem PHP / Java-Buch erhalten Sie Antworten von Google / Stackoverflow und halb-funktionierenden Programmen viel schneller als alles andere. Aber um wirklich wissen zu können, wie man qualitativ hochwertige Programme schreibt und wie ein Programmierer denkt, muss man sich mit echten CS-Büchern auseinandersetzen.

Beginnen Sie mit einem CS-Buch, das eine Programmiersprache und den CS-Hintergrund vorstellt, mit dem berühmten Beispiel der Struktur und Interpretation von Computerprogrammen (das Schema - einen Lisp-Dialekt lehrt) oder vielleicht etwas anderem wie Think Python Wie man wie ein Computer denkt Wissenschaftler (den ich nicht gelesen habe). Beide sind online kostenlos.

Sie müssen schließlich ein gutes Algorithmusbuch lesen, wobei das Beste die Algorithmen von CLRS (nicht kostenlos) sind, obwohl dieses kostenlose Online- AlgorithmusbuchDies könnte ein kostengünstiger Ersatz sein (wenn Sie jedoch nur CLRS kaufen können). Das Algorithmenbuch zeigt Ihnen, wie Sie Computerprobleme lösen und stellt Ihnen eine Vielzahl von Datenstrukturen (Arrays / verknüpfte Listen / Heaps / Binäre Bäume / B-Bäume / HashTables) sowie wichtige Algorithmen vor, deren optimale Verwendung Sie wissen müssen . Sie müssen sich nicht jeden Beweis merken oder wissen, wie man jeden Algorithmus perfekt schreibt (wer jemals einen Fibonacci-Haufen benutzt); Sie sollten aber intuitiv wissen, dass zwei verschachtelte for-Schleifen O (N ^ 2) sind. Vergleichsarten sind bestenfalls O (N lg N), binäre Suche ist O (lg N), kann Median in O (N) finden, warum Festplattendatenbanken B-Trees verwenden usw.). Zumindest helfen Ihnen gute Kenntnisse des Algorithmenbuchs dabei, technische Programmierinterviews mit der Vielfalt von Google / Facebook zu erstellen. Überfliegen / lesen Sie beim Lesen von Programmierbüchern nicht nur; Sie'

Ich empfehle Ihnen auch ein Buch über Software-Engineering (entweder Code Complete oder Pragmatic Programmer), nachdem Sie das Handbuch zu CS und Algorithmen durchgearbeitet haben. Dort erfahren Sie, wie Sie guten Code schreiben, der gewartet werden kann (eindeutige Namen; kommentieren Sie ihn nur, wenn dies erforderlich ist) ; Code zusammenhalten; bei Bedarf überarbeiten; Versionskontrolle verwenden; etc).


4
Bester Kommentar bisher; Während ich eine Menge Leute sehe, die üben, üben, üben, ist das nicht der richtige Weg. Übung macht den Meister, sagen sie, aber das erzwingt nur schlechtes Benehmen. Zum OP: Setzen Sie sich anderen Konzepten aus und erfahren Sie, warum eine Quicksorte einer Bubblesorte vorgezogen wird. Nur perfekte Übung macht den Meister. Holen Sie sich diesen CS-Kurs.
Pieter B

2
Vielen Dank, dass Sie diesen Beispielcode gepostet haben. Ich dachte bereits, ich müsste es selbst tun. - Wir können jede komplexe logische Schaltung nur mit NAND-Gattern aufbauen. Wir haben Sprachen mit sehr wenigen einfachen Operationen, die vollständig sind. Wir brauchen diese ausgefallenen Operatoren nicht, um Probleme zu lösen. Ein Problem zu lösen bedeutet nicht nur, die richtigen Werkzeuge zu kennen, ein Problem zu bearbeiten und eine Lösung zu finden, die nach eigenem Wissen funktioniert, ist das, was einen Programmierer auszeichnet.
Poke

22

Aber ich war gestern gestrandet und habe versucht, eine Lösung für den FizzBuzz-Test zu finden (nicht googeln), weil ich mir die if-Methode ($ n1% $ n2 == 0) nicht merken konnte.

Niemand merkt sich das Ding. Sie sollten sich das selbst einfallen lassen. Wenn Sie den Moduloperator kennen und wissen, was er tut, passt er problemlos zum FizzBuzz-Problem.

Ich werde hier auf die Sprünge gehen und generell vorschlagen, dass das Problem PHP ist. Ich möchte sagen, dass Java die schlechteste Sprache ist, die jemals entwickelt wurde, und PHP die schlechteste Sprache, die jemals entwickelt wurde , weil selbst die Entwickler zugeben, dass es nie entwickelt wurde. Es ist schwierig, gute Softwareentwicklungspraktiken zu erlernen, wenn Ihre Umgebung praktisch die Definition dafür ist, wie dies nicht getan werden soll. Und abhängig von einem Framework, um alles zu erledigen, ist nicht viel zu sagen.

Momentan verbringe ich meine Freizeit damit, Java für Programmierer zu studieren (eine Sprache zu erlernen, von der jeder sagt, dass sie schwierig / anspruchsvoll ist).

Java ist eine der einfachsten und schlimmsten Sprachen, die es gibt. Es gibt nur eines: die manuelle Vererbung durch Speicherbereinigung. Wenn Ihre Freunde oder Berater sagen, dass Java schwierig ist, dann finden Sie neue Freunde. C ++ ist eine schwierige Sprache, die viele Konzepte enthält und die niemand bestreiten wird. Sie können auch C # ausführen , das zumindest einige Generika und Lambdas enthält.

Wie werden Sie das Programmieren lernen, wenn Ihre Sprachen von Leuten entworfen und implementiert wurden, die nicht programmieren können, und Sie für alles, was Sie tun, auf Frameworks angewiesen sind?


14
@ Moraleida: Es ist keine Schande, die Syntax für einen Operator nachzuschlagen, den Sie nicht verwenden mussten.
DeadMG

2
@ Moraleida: In diesem Fall gebe ich zu, dass es kein wirkliches Problem gibt. Ich denke nicht, dass ein Fachmann, ein Interviewer oder sonst etwas dagegen haben sollte, wenn Sie nicht die exakte Syntax für eine andere Sprache angeben können, solange Sie klar ausdrücken können, was Ihre Absicht ist.
Haylem

5
In den meisten Punkten einig, aber warum halten Sie Java für die schlechteste Sprache, die jemals entwickelt wurde? Ich bin kein großer Java-Fan, aber das klingt sehr eigensinnig.
Casey Kuball

7
-1 für die Verwendung der Frage als Entschuldigung für kniffliges Bash-PHP, wenn es keine Beziehung zu dem hat, was gefragt wurde.
StasM

1
@Darthfett: Ich könnte einen Aufsatz darüber schreiben.
Besuchen

11

Ich denke, Sie müssen sich genau überlegen, warum Sie gestrandet waren, um FizzBuzz herauszufinden. Angenommen, Sie haben sich daran erinnert, dass es einen Operator gibt, der $nIhnen mitteilt, ob er durch eine Zahl teilbar ist. Und du hast Pech zu vergessen, was es ist. Gut, warum versuchst du es nicht auf andere Weise? Wenn Sie etwas über Code wissen, sollten Sie in der Lage sein, ein Dutzend anderer Möglichkeiten zu finden. Einige von ihnen sehen vielleicht seltsam aus - zum Beispiel, wenn Sie jedes Vielfache von 5 in ein Array setzen und dann prüfen, ob sie $nunter ihnen sind - und es ist eine schlechte Lösung, aber es wäre immer noch eine Lösung. Sie sagen jedoch, dass Sie keine hatten, sondern nur feststeckten. Es kann ein Symptom für ein größeres Problem sein.

Es gibt zwei Dinge in der Programmierung, die Sie lernen müssen.

  1. Trickkiste. Wie man eine Datei in PHP liest, wie man XML in Java analysiert, wie man sich mit einer Datenbank in Python verbindet. Einige Leute merken es sich, aber in Wirklichkeit sind diese Dinge nur dann wert, wenn Sie sie jeden Tag benutzen. Andernfalls rufen Sie einfach die Dokumente auf und suchen sie. Diese Dinge haben keine Substanz außer ihrer wörtlichen Form - Sie müssen nur wissen, wie die jeweilige magische Beschwörung klingt und was das Ergebnis sein wird.
  2. Denkweise. Das ist das Wichtigste. So programmieren Sie und das hat nichts mit Auswendiglernen zu tun. Sie müssen verstehen, wie Sie dem Computer erklären, was Sie tun möchten, wie Sie es tun können und welche von ihnen Sie in einem bestimmten Fall verwenden müssen. Angesichts moderner Tools und moderner Dokumentation ist es plausibel, dass man ein ganzes CMS in PHP mit dem "Bag of Tricks" -Ansatz schreiben kann. Wenn Sie jedoch auf eine Aufgabe stoßen, für die es keine vorgefertigte Lösung gibt, stecken Sie fest.

Aus Ihrer Beschreibung sieht es so aus, als hätten Sie mit dem ersten Teil begonnen, dem zweiten Teil fehlt es jedoch etwas. Ein guter CS-Kurs hilft normalerweise sehr, ist aber nicht der einzige Weg. Der Versuch, verschiedene Probleme zu lösen und zu lesen, wie diese Probleme gelöst werden müssen, und das Lesen der hier zitierten grundlegenden Bücher - all das würde helfen. Sobald Sie die Einstellung des Programmierers kennen, werden Sie feststellen, dass der Einstieg in eine neue Trickkiste kein großes Problem darstellt. Sie müssten natürlich hier und da googeln, aber Sie werden nie gestrandet sein.


1
"Und lesen Sie, wie diese Probleme gelöst werden müssen" - Betrachten Sie in der Tat verschiedene Lösungen für das gleiche Problem. Versuchen Sie, jeden von ihnen zu verstehen, zu vergleichen, was sie gemeinsam haben und was sie anders machen. Wenn Sie diese Dinge verstehen, werden Sie automatisch unterschiedliche Denkweisen bezüglich desselben Problems entwickeln.
Poke

Ich würde der Einstellung vollkommen zustimmen. Sobald Sie die Denkweise und die Konzepte verstanden haben, ist es viel einfacher, die zugrunde liegenden Sprachkonstrukte zu lernen, und Sie werden anfangen, über alternative Möglichkeiten nachzudenken, wie Sie Dinge selbstverständlich tun können. (Wie bei Fizzbuzz enden alle durch 5 teilbaren Zahlen entweder auf 5 oder auf 0, sodass der Modul-Operand für diesen Teil nicht erforderlich ist.)
JohnP

9

Sie entwickeln sich so gut, wie Sie in etwas anderem gut werden: Üben. In der Programmierwelt gibt es ein nettes Konzept, das sich Code Kata nennt . Dies ist im Wesentlichen eine Übung, bei der Sie eine Lösung für ein relativ kleines Problem codieren, analysieren, was gut und was schlecht ist, alles ausrangieren und es erneut tun. FizBuzz ist eine Kata für sich. Also, mach es und mach mehr. Wenn Sie Dinge finden, die nicht sehr gut zu sein scheinen oder einfach nicht funktionieren, recherchieren Sie und gehen Sie gründlich damit um. Stellen Sie Fragen auf Q & A-Sites, lesen Sie Artikel und Blogs, sehen Sie, wie andere damit umgehen, und üben Sie dann , was Sie gelernt haben.

In dieser Übung lernen Sie, wie viel zusätzlichen mathematischen / theoretischen Hintergrund Sie möglicherweise benötigen. Wenn Sie auf Konzepte stoßen, mit denen Sie sich einfach nicht abfinden können, lesen Sie diese und ihr vorausgesetztes Wissen durch und entscheiden Sie von Fall zu Fall, ob Sie einen Kurs belegen oder was Sie haben, um Ihr Wissen zu erweitern theoretischer Hintergrund.


1
Diese Code-Kata scheint auch fantastisch!
Moraleida

8

... weil ich mir die if-Methode ($ n1% $ n2 == 0) nicht merken konnte.

Ich interpretiere das so, dass Sie nichts über den Moduloperator wussten und / oder sich nicht daran erinnern. In diesem Fall müssen Sie zunächst die Sprachkonstrukte in der von Ihnen verwendeten Sprache überprüfen. Überprüfen Sie alles, was Sie nicht "kalt" wissen, und lernen Sie alles, was Sie einfach nicht wissen.


4
+1. Während die anderen Antworten darüber sprechen, wie man ein besserer Handwerker wird, ist es möglicherweise noch wichtiger zu wissen, welche Werkzeuge tatsächlich existieren. Haben Sie jemals versucht, eine abgebrochene Schraube zu entfernen, ohne dass es zu einem leichten Herausziehen kommt ? Es gibt andere Möglichkeiten, dies zu tun, aber es ist ein Schlag ins Gesicht, wenn Sie endlich das Werkzeug erlernen, das dafür gemacht ist. Ich würde sagen, das OP hätte schon vor langer Zeit eine Liste von PHP-Operatoren durchgehen und mit denen herumspielen sollen, die nicht vertraut waren.
Tim Lehner

5

Kodieren Sie weiter, lernen Sie weiter. Mit genügend Engagement werden Sie sich FizzBuzz ansehen und sich fragen, warum Sie überhaupt darüber nachdenken mussten. Viele Unternehmen stellen zu Beginn ihrer Befragung eine Frage im FizzBuzz-Stil. Wenn Sie diese Frage also einmal nicht beantworten, haben Sie zumindest etwas über den Einstellungsprozess gelernt.

Schreiben Sie einfach weiter Code, lassen Sie sich Projektideen einfallen und recherchieren Sie.


4

Darf ich empfehlen, JavaScript vor Java, C ++ zu lernen? Gründe für Sie:

  1. Verwendung im Front-End-Design (jQuery, einige Ihrer WordPress-Plugins, Twitter-Feeds, Laden von Datenbanken in Ihren Browser über JSON mit wenig oder gar keiner Back-End-Arbeit, Formularvalidierung usw.)
  2. Kann serverseitig über Node.js verwendet werden
  3. Kann verwendet werden, um hybride Apps für iOS, Android, Win8 usw. Zu erstellen
  4. Durch das Studium von JS können Sie die Leistung von Webseiten in verschiedenen Browsern und Geräten besser verstehen
  5. JS wurde entwickelt, um mehr Neuling freundlich zu sein
  6. Du kennst schon HTML & CSS (hoffe ich;), das hilft bei JS

Kostenlose Ressourcen für Anfänger

http://www.codecademy.com/tracks/code-year
https://stackoverflow.com/tags/javascript/info
Ich hatte ungefähr 10 weitere Links, aber SE lässt mich diese erst veröffentlichen, wenn ich 10 Wiederholungen erreicht habe.

Das Erlernen von C ++, Java usw. ist ebenfalls hilfreich, aber IMHO hat nicht die gesamte Auswirkung auf die Webprogrammierung wie JS, da Sie es sowohl für das Front-End als auch für das Back-End verwenden können. Habe Spaß!



1
und wenn du bereit bist, einen Job zu bekommen: jobety.com
imns

3

Sie könnten andere finden und ihnen helfen, z. B. Code geben (Offenlegung: meine Website) oder Code für Amerika oder was auch immer. Dies ist ein ausgezeichneter Weg, um Probleme zu bekommen, die nicht mit PHP-Webseiten zusammenhängen, und sich auch gut zu fühlen.

Wenn Sie ein Problem zu lösen haben - oder helfen, es zu lösen oder einfach nur zu verstehen -, ist es selbstverständlich, dass Sie den Code mitnehmen. Ein Ziel zu haben ist der beste Weg, etwas zu lernen.


1
Genial! Das ist wirklich eine schöne Art zu lernen!
Moraleida

0

Sie konnten das FizzBuzz-Problem also nicht lösen. Große Sache. Jetzt können Sie und ich wette, Sie werden nie all die unzähligen Möglichkeiten vergessen, wie. Versuche nicht so eifrig zu sein, dich als schlechten Programmierer zu brandmarken, nur weil du nicht ein einziges dummes Problem auf Anhieb lösen konntest.

Das ist ein Problem. Das andere ist, dass Sie sich ein bisschen hinter der Lernkurve für das Programmieren zu fühlen scheinen. Wie andere bereits gesagt haben, schreiben Sie weiter und lesen Sie weiter. Je mehr Sie tun, desto besser werden Sie. So einfach ist das. Beginnen Sie mit dem, was Ihrer Meinung nach das größte Loch in Ihrem Hintergrund ist, und fahren Sie von dort aus fort.


(Dies sollte erhebend klingen. Ich bin mir nicht sicher, ob es mir gelungen ist. Lol.)
Nick Spreitzer

0

Ich glaube nicht, dass ich es ablehnen würde, jemanden zum Mieten zu empfehlen, weil er nicht wusste, dass dies der Moduloperator ist, vorausgesetzt, dass:

  1. Sie wussten, dass es sich um eine Art Betreiber handelte.
  2. Sie konnten mir sagen, was "Modul" war, als ich sie dazu aufforderte.

Es ist nicht immer (obwohl normalerweise)%, und einige Sprachen sind komisch. Und zum Teufel, nach einem Jahrzehnt kann ich nicht ehrlich sagen, dass ich alle Perl-Operatoren kenne (und was macht das Raumschiff noch einmal?), Und ich kann mich auch nicht immer perfekt an die bitweisen Operatoren erinnern. Es ist ein paar Jahre her, dass ich irgendetwas getan habe, was diese überhaupt erfordern würde.

Was mich zögern lassen könnte, jemanden zu empfehlen, wäre, wenn er eine Panikattacke bekommt, weil er diese Frage / diesen Test verpasst. Das könnte den Eindruck erwecken, dass sie ein wenig zu grün waren (es sei denn, es war eine Einstiegsposition). Niemand braucht jemanden, der diese Dinge auswendig lernt (oder das Bedürfnis danach hat). Sie brauchen jemanden, der weitaus umfassendere Konzepte versteht. Es wird niemanden interessieren, ob Sie das bei Google nachschlagen, aber Sie müssen im Interview sicher sein, dass das Wissen um% keine große Sache war und dass Sie "operator" als Keyword verwenden, wenn Sie schnell googeln Suche.

Auch das ist nur eine Idee ... aber wenn Ihre örtliche Volkshochschule ein Compsci-Programm hat, würden alle Ihre anderen Credits übertragen, und Sie würden wahrscheinlich nur etwa 20 Credits für den 2-Jahres-Abschluss benötigen. Könnte das fast in einem Semester beenden. Sie müssten einen Kurs über Datenstrukturen machen, hoffentlich auch Algorithmen ... die Sie ein bisschen stärker machen könnten.


-1

Hier ist ein Beispielkurs: http://www.ox.ac.uk/admissions/undergraduate_courses/courses/computer_science/computer_science_.html

Ich schlage vor, zuerst Folgendes zu lesen: Objektorientierte Programmierung (sehr häufig, wird überall verwendet, hier kommt Java ins Spiel) Parallelität (um Java-Programme zu schreiben, die in der realen Welt nicht auf mysteriöse Weise abstürzen, lernen Sie mehr über Deadlocks) Datenbankkonzepte (Die meisten Anwendungen müssen Daten speichern, Theorie ist hier wichtig.) Programmierparadigmen (Lesen Sie mindestens eine andere Sprache, die vorzugsweise funktional ist, um Ihr Denken zu erweitern und neue Dinge zu lernen.)

Wenn ich mir die 4 Jahre comp. Naturwissenschaftlicher Ausbildung ansehe, gibt es ehrlich gesagt nur eine Handvoll Kurse, die Sie ernst nehmen müssen.

Datenstrukturen und Algorithmen (und Sie brauchen Mathematik, um wirklich gut zu werden und von anderen Programmierern ernst genommen zu werden), Computernetzwerke und Betriebssysteme werden als die wichtigsten betrachtet. Andere Themen, die sich mit Code auf niedrigerer Ebene befassen, z. B. die Möglichkeit, in der Assembly zu codieren, sind für Sie wahrscheinlich nicht so wichtig. Durch Software-Engineering und -Tests werden Sie mit nützlichen Konzepten konfrontiert, die Sie mit der Zeit erfassen können.

Laden Sie einfach ein PDF herunter, in dem diese Konzepte auf intuitive Weise erläutert werden, und schon sind Sie unterwegs.

In einigen comp-naturwissenschaftlichen Kursen, zumindest in meinen, ist das erste Jahr eine Einführung in alle Bereiche des Ingenieurwesens, wie z. B. Maschinenbau, Elektrotechnik, Bauwesen usw. Es gibt eine Menge komplizierter Mathematik, was wiederum relevant sein kann oder auch nicht für die meisten Anwendungsprogrammierer heute. Viele der Ingenieure von heute haben nur 3 Jahre echte naturwissenschaftliche Ausbildung (Ich hoffe, Sie fühlen sich dadurch besser :)

Der springende Punkt der Antwort: Sie können sich jeden Tag etwas Zeit zum Lernen nehmen, etwa eine Stunde, und über einen bestimmten Zeitraum hinweg ein ziemlich guter Programmierer werden. Lerne einfach weiter. Und denken Sie daran, jeden Tag Code zu schreiben.


-3

Für mich ist meine Strategie, dass ich nur das Problem angreife, das für meine Arbeit relevant ist. Mein Rat ist also, dass Sie nicht alles lernen müssen, sondern nur die Dinge lesen, die für Ihre Arbeit relevant sind. denn wenn Sie versucht haben, alles auf einmal zu lernen, besteht die Tendenz, dass Sie sich niederwerfen und am Ende die Programmierung hassen.

Frieden

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.