Wie verbessere ich meine Codierungsfähigkeiten? [geschlossen]

76

Hier sind ein paar Informationen über mich, bevor wir mit der Frage beginnen.

Ich bin ein Student der Informatik, wobei Java meine primäre Programmiersprache ist.

Das Grundproblem an meiner Universität sind die Lehrstandards. Niemand kümmert sich darum, den Schülern Programmierkenntnisse zu vermitteln, und nicht nur theoretisches Wissen.

Der Effekt ist, dass die meisten meiner Collegekollegen das Programmieren überhaupt nicht verstehen.

Selbst ich habe die traditionelle Programmierumgebung nicht verlassen können, was meine Codierung in gewissem Maße einschränkt.

Auf welche Weise kann ich meine Programmier- / Codierfähigkeiten entwickeln und erweitern?

Können Sie auch die Quellen für das gleiche vorschlagen?

Bearbeitet : Quellen, die die Entwicklung von Codierungsfähigkeiten vorschlagen.

ykombinator
quelle
13
Zu
Gopi
6
Können Sie schwimmen, indem Sie einfach das Buch "Bringen Sie sich selbst bei, wie man in X Tagen schwimmt" lesen?
Pramodc84
9
"Absichtliche Praxis". Mach etwas, das etwas schwieriger ist als dein derzeitiges Level, löse es, lerne daraus, wiederhole es.
7
@ pramodc84 Aber sicherlich ein Buch im Zusammenhang mit Schwimmen zu lesen und dann in einen Fluss springen wird nur direkt Springen in einen Fluss sicherlich als helfen und versucht , schwimmen zu lernen
Gopi
5
Das ist an den meisten Universitäten so. Bei einem Abschluss geht es nicht darum, ein guter Kodierer zu sein. Es geht darum, die Theorien dahinter zu kennen und anzuwenden - man kann sagen, dass es dem Absolventen überlassen bleibt, ein guter Kodierer zu sein.
Konfigurator

Antworten:

46

Die Programmierung ist eines der Gebiete, in denen Erfahrung von Bedeutung ist. Um ein besserer Programmierer zu werden, sollten Sie daher mehr programmieren. Schreiben ist jedoch nicht das einzige, was Sie tun sollten. Sie sollten auch den Code anderer Entwickler lesen und daraus lernen, was ein guter Code ist. Beziehen Sie sich auf SO Fragen dazu .

Möglicherweise finden Sie auch Bücher, die speziell dem Codieren gewidmet sind, nützlich. wie "Code Complete". Sie enthalten Beschreibungen dessen, was guter Code ist, was Sie in Kombination mit Ihren Grundkenntnissen zu einem guten Programmierer machen kann.

P Shved
quelle
8
Code Complete ist gut zu lesen - das ist das Buch, von dem ich mir am liebsten gewünscht hätte, ich hätte es gelesen, als ich als Programmierer vom College kam.
Glenatron
2
Jetzt steht das Buch auf meiner must-readListe. :) Vielen Dank!
ykombinator
2
@ykombinator:(push 'code-complete must-read)
Giorgio
98

Mein Lieblingszitat stammt von Konfuzius:

Ich höre, ich weiß. Ich verstehe, ich erinnere mich. Ich verstehe.

Alles Wissen, das ich erhielt, stammte aus der Anwendung einer einzigen Strategie:

Nehmen Sie immer den herausforderndsten Weg.

Sie möchten C # lernen? Holen Sie sich einen Job als C # -Entwickler.

Sie möchten Italienisch lernen? Gehen Sie mit einem Wörterbuch Englisch / Italienisch dorthin und sprechen Sie Italienisch

Sie möchten das Programmieren lernen? Code!


quelle
19
+1 für immer den schwersten Weg nehmen. Schließlich werden sie ein einfacher Weg! Gute Antwort.
Ryan Hayes
3
Es scheint sicherlich eine entmutigende Aufgabe zu sein, sich auf eine Herausforderung vorzubereiten, aber ich finde, dass es Motivation zum Erfolg bringt. Gute Antwort. Die Sprachen, die ich am besten kenne, sind die, die ich ohne eine Ahnung in den Kopf gesetzt und bei jedem Projekt kontinuierlich gelernt habe.
Chris
2
Ich veränderte mich am härtesten durch die meisten Herausforderungen. Es ist positiver
2
Gutes Programmieren ist kein Zuschauersport.
Inkognito
4
@Pierre, du willst 1) Latein und 2) Perl lernen. Code Perl in lateinischer Sprache: csse.monash.edu.au/~damian/papers/HTML/Perligata.html
21

Das Codieren ist ein guter Rat, aber ohne dass jemand da ist, der Ihnen Feedback gibt, wiederholen Sie einfach Ihre Fehler. Suchen Sie einen Job, arbeiten Sie an einem Open Source-Projekt, suchen Sie einen Mentor und lassen Sie ihn Ihren Code ansehen.

JeffO
quelle
1
Genau! Das ist ein großartiger Punkt. Wahrscheinlich habe ich noch keinen Mentor.
ykombinator
4
Schreiben Sie Code und veröffentlichen Sie ihn mit einer bestimmten Frage auf StackOverflow.com.
JeffO
2
Aus diesem Grund meckere ich immer wieder, um Code-Reviews für unser Projekt zu bekommen, aber "dafür ist keine Zeit."
MetalMikester
1
@MetalMikester - aber es gibt immer Zeit, es noch einmal zu machen.
JeffO
1
@JeffO Genau das passiert jetzt. :(
MetalMikester
10

Hier ist eine Präsentation von Dan North und QCon, wie man vom Anfänger zum erfahrenen Programmierer namens Sharpening the Tools übergeht . Nachfolgend finden Sie wichtige Vorschläge aus der Präsentation:

  1. Übe die Grundlagen: Kata, Code zum Spaß ...
  2. Lernen Sie von anderen: Lesen Sie Bücher, Blogs usw., lesen Sie Code, programmieren Sie paarweise ...
  3. Verstehen Sie die Trends: Was passiert jetzt in der Branche?
  4. Wissen teilen: Der beste Weg, etwas zu lernen, besteht darin, es zu verstehen und zu lehren
  5. Pflegen Sie Ihre Werkzeugkiste: Verwenden Sie "zeitlose" und neue Werkzeuge
  6. Lernen lernen: Verstehen, wie Lernen funktioniert
ysolik
quelle
8

Versuchen Sie, einen Compiler für eine einfache Sprache von Grund auf neu zu schreiben. Sie werden Ihre Fähigkeiten auf dem Weg viel verbessern (mit einigen schönen theoretischen Techniken aus der formalen Sprachtheorie als Bonus). Ich habe versucht, eine einfache Version von Excel zu schreiben, und es ist auch eine sehr schöne Übung.

Wie schon andere gesagt haben, ist der einzige Weg, um Ihre Codierungsfähigkeiten zu verbessern, dies tatsächlich zu tun. Machen Sie sich bei großen Projekten die Hände schmutzig. Bei großen Programmen ist es jedoch umso wichtiger, dass Sie die Techniken des Softwaredesigns beherrschen, da sonst die Größe des Programms nicht zu handhaben ist.

Es gibt ein schönes Zitat von Nate Kirby:

"Schlechte Programmierer ignorieren Details. Schlechte Designer verlieren sich in Details."

Der Wechsel zwischen diesen beiden Abstraktionsebenen ist also die Fähigkeit, die Sie beherrschen sollten.

Auch die Geschwindigkeit, mit der Sie so viele Codezeilen pro Stunde schreiben können, ist nicht das, was Sie anstreben sollten. Ich mag ein Zitat von David Parnas :

"Ich höre Entwickler oft als" jemanden, der weiß, wie man ein großes System schnell aufbaut ". Es gibt keinen Trick, große Systeme schnell zu erstellen. Je schneller Sie sie erstellen, desto größer werden sie! "

DL
quelle
5

Ich habe in fast jeder Sprache, die ich gelernt habe, entweder einen Wettpool oder ein Baccarat-Spiel implementiert.

Diese Art von Software umfasst

  • Daten und Zeiten mit Berechnungen
  • Währungstypen und Dinge, die in und von Währung konvertiert werden können
  • Ein diskreter Satz von Regeln, der leicht zu testen ist
  • Staaten, Übergang zwischen Staaten und mehrere für den Staatsübergang zuständige Stellen
  • Mehrere Benutzer mit unterschiedlichen Ansichten desselben Modells
  • Mehrere Endbedingungen

Blackjack und Poker mit mehreren Spielern würden auch funktionieren.

Eine Einschränkung ist, dass ich in meiner täglichen Arbeit an Finanzsystemen arbeite und es eine enorme Überschneidung zwischen Dingen gibt, die beim Schreiben eines Multiplayer-Glücksspiels und eines Handelssystems zu berücksichtigen sind.

sal
quelle
4
  • Wählen Sie gute Open Source-Projekte aus und lesen Sie den Code.
  • Nehmen Sie sich ein mittelgroßes Projekt vor und beginnen Sie mit dem Programmieren
    • Wenn Sie an der Webentwicklung interessiert sind, versuchen Sie, eine vorhandene Site mit Ihrer bevorzugten Technologie von Grund auf neu zu erstellen. Wie wäre es mit Twitter in Django?
    • Wenn Sie sich mit der Entwicklung von Desktopanwendungen beschäftigen, beginnen Sie mit einem Notizblock und improvisieren Sie ihn, um erweiterte Funktionen zu unterstützen (zunächst eine Suche auf der Basis von Regex).
Amarghosh
quelle
4

Stellen Sie es sich so vor ... Tiger Woods wurde nicht zum "besten" Golfer, wenn er Golf sah oder etwas darüber las. Er wurde so, wie jeder andere Athlet, indem er lernte, übte, herausfand, wo er sein Spiel verbessern und etwas dagegen unternehmen konnte.

Die Codierung ist die gleiche. Der beste Weg, um besser darin zu werden, besteht darin, zu studieren, was andere tun, zu verstehen, warum sie es so tun, und es dann selbst zu tun.

Muad'Dib
quelle
Ja, Tiger Woods wird zum "besten" Golfer, wenn er viele Liebhaber hat. :-) Also ist er kein wirklich gutes Beispiel.
DL
4

Wie bei jeder anderen menschlichen Aktivität besteht der beste Weg zur Verbesserung darin, Ihr Wissen zu üben. Dazu benötigen Sie jedoch einige Übungen. Dave Thomas , einer der Autoren des Buches The Pragmatic Programmer, führte das Konzept von Code Katas ein , ähnlich dem Kata-Konzept in den Kampfkünsten.

Sie können einen Blick darauf werfen: http://codekata.pragprog.com/

jmservera
quelle
4

Springen Sie ins Wasser, es könnte anfangs kalt sein und Sie werden versucht rauszukommen, aber bald wird sich Ihr Körper daran gewöhnen und wird wieder warm und wenn Sie sich im Wasser wohlfühlen, können Sie herumschwimmen und vielleicht ins Wasser gehen tiefes Ende.

Ich habe gerade das College vor ein paar Monaten beendet, wo ich Java studiert habe. Wie Sie hatte ich keine Ahnung, wie man richtig codiert. Vor ungefähr einem Monat wollte ich eine Web-App in PHP erstellen. Ich wusste nicht, was ich tat, aber ich habe es einfach versucht. Anfangs war es einschüchternd und überwältigend, aber beim Üben wird es natürlich. Ich habe die Anwendung sogar viele Male geschrieben und sie jedes Mal noch weiter vereinfacht. Jetzt arbeite ich von Grund auf an der App, aber diesmal überlege ich mir, wie ich sie objektorientiert und mithilfe von PEAR und seiner Modul-Quickform umsetzen kann.

Übe also. Sprung ins Wasser! Viel Glück :)

Jonathan
quelle
3

Ich schlage vor, die gesamte Syntax Ihrer Lieblingssprache zu lernen. Verstehen, wie virtuelle Funktionen, Vererbung und Lambda verwendet werden, falls vorhanden. usw. Eine Sache, die ich tat, war, eine große beängstigende Bibliothek zu ergreifen (ich tat dies mit Boost und STL für C ++) und zu sehen, ob jede Zeile und jedes Schlüsselwort sinnvoll sind.

Alternativ können Sie die Sprachensyntaxreferenz lesen, wenn es eine gute gibt, die die aktuellste Version abdeckt. Als Beispiel dient hier die C # -Referenz (Nicht die Version oben. Ich habe den Fehler gemacht, indem ich mir eine populärere ältere Version angesehen habe, die nicht die von mir gesuchte Syntax hatte.)


quelle
3

Der allgemeine Konsens ist "mehr Code schreiben", dem ich zustimme, aber ich werde diesem Ratschlag hinzufügen, dass Sie viele verschiedene Arten von Code schreiben sollten. Java ist in Bezug auf Sprachen in Ordnung, aber Sie sollten auf jeden Fall Code schreiben, der das Leistungsspektrum auf- und abwärts bewegt. Zusätzlich zu Java würde ich vorschlagen, ein paar kleine Projekte in einer niedrigeren Programmiersprache (C ist hierfür eine gute Sprache), einer Skriptsprache (ich bevorzuge Perl, aber Python ist auch eine gute Wahl), einer funktionalen Sprache ( lisp ist hier die allgemeine Empfehlung, aber OCaml und Haskell sind auch eine gute Wahl) und machen sich zumindest mit dem Lesen einer Assemblersprache vertraut.

Wählen Sie auch eine Vielfalt der Arten von Programmen, die Sie implementieren. Implementieren Sie mindestens eine Desktop-GUI, eine umfangreiche Webanwendung, einen Netzwerkclient und -server, einen Treiber, ein Dienstprogramm zur Datenerfassung, einen Ray Tracer und eine Physiksimulation.

Alle Projekte sollten einen relativ kleinen Umfang haben. Das Ziel ist nicht, ein umfangreiches Programm zu haben, sondern eine breite Palette von Erfahrungen in den verschiedenen Bereichen zu sammeln, in denen Sie möglicherweise vorkommen, um die verschiedenen Arten des Denkens zu erlernen, die für die einzelnen Projekte erforderlich sind. und um herauszufinden, wo Ihre Interessen liegen.

Sobald Sie dies getan haben, haben Sie eine gute Vorstellung von der Art der Programmierung, an der Sie am meisten interessiert sind, und Sie können ein Open-Source-Projekt finden oder starten, um Erfahrungen mit der Arbeit an großen Codebasen zu sammeln, die sich mit langwierigen Problemen befassen. befristete Projekte und die Zusammenarbeit mit anderen Entwicklern.

Cercerilla
quelle
2

Du bekommst ein paar ähnliche Antworten und meine werden auch gleich sein. Code schreiben. Dafür gibt es zwei gute Möglichkeiten.

  1. Suchen Sie sich etwas aus, das Sie wirklich anspricht oder interessiert, und setzen Sie es einfach um. Wenn Sie sich für Spiele interessieren, schreiben Sie ein Spiel. Wenn Sie sich für Webmaterial interessieren, stellen Sie eine interessante und originelle Website zusammen. Sie werden es vielleicht nicht schaffen, es zu beenden, aber die Erfahrung wird Ihnen eine ganze Menge beibringen.
  2. Suchen Sie sich ein Open Source-Projekt aus, das Sie interessant finden, und beteiligen Sie sich daran. Lernen Sie aus dem vorhandenen Code und verwenden Sie ihn, um Fehler zu beheben, Komponententests zu erstellen und neue Funktionen zu implementieren.

In beiden Fällen erhalten Sie die direkte Erfahrung mit dem Programmieren, die Sie benötigen, sowie die Einbeziehung in Programmier-Communities, während Sie lernen und Fragen stellen müssen, um mehr daraus zu machen. Sie werden viele Fehler machen. Das ist gut - wenn Sie aufhören, Fehler zu machen, haben Sie aufgehört zu lernen, und Sie müssen einen neuen Weg finden, sich selbst herauszufordern.

Glenatron
quelle
2

Meine Vorschläge

  • Suchen Sie ein Haustierprojekt und schreiben Sie es in einer anderen Sprache (lyke python / c #) als die, die Sie kennen. Dies wird Ihnen mehr beibringen, als Sie sich vorstellen können. Schauen Sie sich andere Projekte an, die ähnlich sind, und versuchen Sie, eine Feature-Parität mit ihnen zu erzielen. Sie können dies langsam angehen und bescheidene Ziele verfolgen, indem Sie Ihren Schwierigkeitsgrad mit neuen Funktionen stetig erhöhen. Dies wird auch zu Ihrem Aushängeschild, wenn Sie ein Vorstellungsgespräch führen.
  • Finden Sie in Ihrem Projekt Verwendungsmöglichkeiten für relevante Technologien wie Webservices, Javascript, Ajax, Geokodierung und im Grunde alles, was in der Software-Welt Fortschritte macht.
  • Spiele mit anderen Betriebssystemen wie Linux / freebsd. Je mehr Sie sich mit verschiedenen Arten von Systemen auseinandersetzen, desto besser werden Sie verstehen, wie sie denken und warum sie die Dinge so gemacht haben, wie sie es getan haben.
  • Wenn Sie mit Teilen Ihres Codes fertig sind, kehren Sie zu ihm zurück und versuchen, ihn ständig zu verbessern. Finde Ineffizienzen, füge bei Bedarf weitere Kommentare hinzu und versuche, sie zu perfektionieren.
  • Stöbern Sie auf c2.com. Es gibt viele gute Codierungsmethoden. Lernen Sie diese und versuchen Sie, sie in Ihrem eigenen Projekt anzuwenden.
  • Lesen Sie Bücher wie den pragmatischen Programmierer und vervollständigen Sie den Code. Sie vermitteln Ihnen das Wissen über kampferprobte Programmierung.
  • Das hört sich vielleicht nicht verwandt an, aber finden Sie ein anderes technisches Hobby, wenn Sie noch kein RC-Rennauto haben, kein Musikinstrument spielen oder keine Fremdsprache lernen. Je mehr Teile Ihres Gehirns in Gebrauch sind, desto besser, und Sie müssen sich von Zeit zu Zeit entspannen, da das Programmieren zu viel werden kann.
Tjaart
quelle
2

Peer Reviews helfen wirklich dabei, die Qualität Ihres Codes zu verbessern. Wenn Sie keinen echten Mentor haben, können Sie Ihren Code [nachdem Sie ihn auf das erforderliche Minimum reduziert haben] bei StackOverflow oder RefactorMyCode oder in Mailinglisten veröffentlichen. Die Mitarbeiter helfen Ihnen dabei, die Qualität Ihres Codes zu verbessern.

Fehlender Faktor
quelle
1

"Trainieren!" Das ist ein Klischee.

Sie sollten überprüfen, was Sie in den Matheklassen gelernt haben, und einige Programme erstellen, die sich mit den Problemen befassen. Implementieren Sie außerdem ein Aufzugsprogramm, einen Verkaufsautomaten (der Änderungen an Münzen berechnet), um Ihre logischen Fähigkeiten zu verbessern. Denken Sie an alles im Alltag und setzen Sie diese um.

Ming-Tang
quelle
1

Ja, Übung ist äußerst wichtig, um Programmierkenntnisse zu entwickeln und sie scharf zu halten. Das Üben allein bringt Sie jedoch nur so weit. Sie müssen auch von Menschen lernen, die mehr wissen als Sie. Es gibt Techniken, von denen Sie noch nie gehört haben, Praktiken, deren Nutzen nicht sofort offensichtlich ist, und Tricks, die Sie sich niemals selbst ausdenken könnten.

Es gibt viele Möglichkeiten, neue Techniken, nette Tricks und nützliche Praktiken zu erlernen. Bücher lesen. Sprechen Sie mit Kollegen. Fragen stellen. Überprüfen Sie den Code anderer Personen und lassen Sie ihn Ihren Code überprüfen. Lesen Sie Blogs und Artikel zur Programmierung, einschließlich dieser Website. Kurz gesagt, nicht im Vakuum arbeiten.

Oh, und wenn Sie sich nicht sicher sind, was NP-complete bedeutet, oder wenn Ihnen die Big-O-Notation Angst macht, sollten Sie sich wahrscheinlich eine Theorie der Berechnungs- und Algorithmusklassen zulegen.

Dima
quelle
1

Ich würde sagen, dass Sie sich über Entwurfsmuster wie Builder, Factory, Composite und schließlich Observer, Mediator und Flyweight informieren sollten. Entwurfsmuster sind nicht das A und O für Codierungslösungen, sondern zeigen, wie theoretische Konzepte der objektorientierten Programmierung implementiert werden können.

Tim Claason
quelle
1

Ich kann nur das vorschlagen, was bei mir funktioniert hat. Ich hatte den Traum, Programmiersprache zu lernen und damit eine Schachengine zu erstellen. Ich habe Zeit mit Büchern, Artikeln und kleinen Mustern verbracht. Also habe ich mich entschlossen, echte Projekte zu prüfen, die eine bessere Dokumentation für Entwickler bieten. Ich habe eines ausgewählt und habe angefangen, das Projekt Tag für Tag zu lesen. Denken Sie nicht, dass vorübergehende Tage Zeitverschwendung beim Lesen sind. Es ist viel besser, als Zeit mit dem Lesen von Artikeln und Büchern zu verbringen. Sie werden auf viele Dinge stoßen, die auf den ersten Blick nicht klar sind, aber dies wird sich von Tag zu Tag ändern, wenn Sie sich geduldig um Forschung bemühen. Erwarten Sie nicht, dass Sie in einer Woche alles verstehen. Sie müssen Ihr geringes Selbstwertgefühl halten, wenn Sie einige Dinge nicht verstehen. Versuchen Sie einfach herauszufinden, wie diese verdammt tolle Sache funktioniert, und genießen Sie es.

Wählen Sie ein bestehendes Projekt aus, für das Sie eine Leidenschaft haben. Beginnen Sie mit dem Lesen von Codes, dem Debuggen und versuchen Sie zu verstehen, wie die Dinge im Alltag funktionieren. Nutzen Sie das Projekt auch für sich. Fügen Sie dann einige Funktionen hinzu, die Sie möchten. Versuchen Sie sogar, die gleiche oder eine ähnliche Anwendung zu schreiben.

Frisches Blut
quelle