Ich kann immer noch nicht herausfinden, wie ich programmiere?

122

Ich habe viele Bücher für verschiedene Programmiersprachen, Java, Python, C usw. gelesen. Ich verstehe und kenne alle Grundlagen der Sprachen und verstehe Algorithmen und Datenstrukturen. (Entspricht etwa zwei Jahren Informatikunterricht)

ABER ich kann immer noch nicht herausfinden, wie man ein Programm schreibt, das irgendetwas Nützliches tut.

Alle Programmierbücher zeigen Ihnen, wie man die Sprache schreibt, aber NICHT, wie man sie benutzt! Die Programmierbeispiele sind alle sehr einfach, wie das Erstellen eines Kartenkatalogs für eine Bibliothek oder ein einfaches Spiel oder die Verwendung von Algorithmen usw. Sie zeigen Ihnen nicht, wie Sie komplexe Programme entwickeln, die tatsächlich etwas Nützliches tun!

Ich habe mir Open-Source-Programme auf SourceForge angesehen , aber sie ergeben für mich keinen Sinn. Jedes Programm enthält Hunderte von Dateien und Tausende von Codezeilen. Aber wie lerne ich das? Es gibt in keinem Buch, das ich bei Amazon kaufen kann, die Tools, mit denen ich eines dieser Programme schreiben kann.

Wie kann man eine Einführung in Java oder Programming Python oder C Programming Language usw. lesen, um tatsächlich sagen zu können, dass ich eine Idee für ein X-Programm habe? Entwickle ich es so?

Das Schreiben eines Programms scheint so viel mehr zu bedeuten, als man in einem Buch oder einer Klasse lernen kann. Ich habe das Gefühl, dass da etwas ist.

Wie kann ich auf die richtige Spur gebracht werden?

Mark K.
quelle
52
Manche Leute sollen einfach nicht programmieren. Nur Sie können beantworten, ob ein alternativer Weg Sie aussortieren würde oder ob es Zeit ist, etwas anderes auszuprobieren. Es ist unwahrscheinlich, dass Sie eine Antwort erhalten, die hier hilfreich sein wird.
Duffymo
3
Was halten Sie für "nützlich"?
7
@Michael - Ich habe als Off-Topic gestimmt und gehe zu P.SE. Ich dachte, das wäre ein geeigneterer Ort für eine Diskussion über das Programmieren als Karriere und Handwerk.
12
@duffymo: Und manche Leute sind nicht dazu gedacht, Fragen zu kommentieren.
Davidk01
4
Ich denke, du machst einfach zu lange Sprünge. Von den Buchbeispielen zu vollwertigen Sourceforge-Projekten zu wechseln, ist gewaltig und entmutigend. Versuchen Sie stattdessen zu erweitern, was Sie bereits erstellt haben. Funktionen hinzufügen, GUIs hinzufügen, Netzwerkfähigkeiten hinzufügen; und ich stelle mir vor, dass Sie bald ein eigenes Projekt auf Sourceforge haben werden.
Gablin

Antworten:

93

Komplexere Programme zu erstellen, ist mit Erfahrung verbunden. Als ich das erste Mal programmierte, dachte ich, dass es mir gut geht, wenn es mehr als 25 Zeilen lang ist (und ich musste die Bildlaufleiste verwenden). Jetzt schreibe ich jahrelang Hunderte von Zeilen pro Tag auf dieselbe Projektanwendung.

Diese Seite könnte für Sie interessant sein: "Programmieren Sie sich selbst in zehn Jahren" http://norvig.com/21-days.html

Übrigens: Es ist sehr schwer, ein Programm zu starten. Ein Schreiber könnte es "Schreiberblock" nennen. Stattdessen schlage ich vor, dass Sie anfangen, Code zu schreiben und ihn zu verbessern. Haben Sie keine Angst, große Abschnitte zu löschen, die nicht das tun, was Sie brauchen. Beginnen Sie noch einmal, diesmal schreiben Sie mit einer besseren Vorstellung davon, was Sie tun. Fangen Sie noch einmal an und Sie werden feststellen, dass Sie nicht die Hälfte der Sachen brauchten, die Sie das letzte Mal geschrieben haben. Wenn ein Autor eine Geschichte schreibt, dauert es lange, viel zu schreiben und umzuschreiben usw. Viele Rezensionen und Rückmeldungen und es ist erst fertig, wenn es veröffentlicht werden muss (veröffentlicht)

Peter Lawrey
quelle
13
+1 Für das, was Bill sagte und für die Diskussion über "Schreibblockade".
David Weiser
gawd, ich mache das schon seit ein paar Jahren (10 + -2) und ich schreibe immer noch gelegentlich ein paar Codes und lösche sie am Ende. Ich hatte ein paar "Refactors", an denen ich ein paar Tage lang gearbeitet habe und die ich (über die Quellcodeverwaltung) aufgehoben habe, weil ich ein Retarder war (um stumpf zu sein).
Ken Henderson
5
+1 für die Analogie zum Schreiben einer Geschichte. Meine Programme befinden sich noch im Stadium "Es war einmal ...".
Andy
4
Eines der beängstigendsten Dinge beim Programmieren ist ein leeres Dokument. Sobald Sie diese Hürde genommen haben, sind Sie gut vorangekommen.
Gablin
1
Schreibblockade. Du hast es geschafft!
abel
70

Ich war auch immer von sehr großen Projekten überwältigt, wie sie auf SourceForge oder GitHub zu finden sind. Ich fragte mich, wie irgendjemand oder sogar ein Team verstehen konnte, was in Zehntausenden oder Hunderten von Dateien mit Tausenden und Abertausenden von Codezeilen vor sich ging.

Niemand tut. Zumindest anfangs.

Projekte sind organische Dinge. Was als ganz einfache Idee anfängt, kann sich schnell zu einem gewaltigen Stück Arbeit ausweiten. Dies ist meiner Meinung nach der Hauptgrund für die iterative Entwicklung anstelle des klassischen Wasserfallansatzes.

Denken Sie daran, ein Auto zu bauen. Obwohl es von außen ziemlich einfach aussieht, werden Sie feststellen, dass eine Vielzahl von Überlegungen, Kompromissen und unschuldigen Fällen behandelt werden müssen.

Beispiel:

Bei einem halbgroßen Projekt fängt es oft klein an. Msgstr "Ich möchte einen Cache - Server erstellen". Sie verbringen also ein paar Tage damit, sich zu hacken und zu etwas zu gelangen, das funktioniert, aber dramatisch verbessert werden könnte. Sie fügen also das Konzept des Einfädelns hinzu.

Dann stoßen Sie aufgrund dieses Threadings auf Parallelitätsprobleme. Sie korrigieren also, indem Sie zu gleichzeitigen Datenstrukturen wechseln.

Jetzt hat sich der Prozess verlangsamt. Sie ändern also die gleichzeitigen Datenstrukturen in reguläre, stellen jedoch Sperrmechanismen für die Synchronisation bereit.

Alles scheint gut zu laufen, außer dass sich die Benutzer beschweren, dass die Operationen nicht atomar sind und die Daten beschädigt werden.

Sie fügen also einige klassische atomare Operationen wie Inkrementieren und Speichern hinzu. Dies funktioniert und Ihre Benutzer sind glücklich. Aber jemand öffnet ein Ticket und fragt, ob es möglich ist, Listenoperationen durchzuführen.

Sie verbringen also ein oder zwei Wochen damit, dieses Feature zu erstellen. Ungefähr zu dieser Zeit beschließt ein Freund, Ihnen zu helfen. Sie arbeiten zusammen daran, schließen es ab und geben es frei.

Zwei Tickets offen. In der Listenverarbeitung ist ein Fehler aufgetreten, und es gibt einige seltene Fälle, in denen ein Deadlock auftritt.

Ihr Freund bearbeitet den Listenverarbeitungsfehler, während Sie Deadlocking beheben. Sie erkennen, dass ein ziemlich umfangreiches Umschreiben von Atomoperationen erforderlich ist.

... und so geht es.

Dies scheint ziemlich typisch für das Wachstum eines Projekts zu sein. 10 oder mehr Dateien sind in ein paar Wochen auf 20 angewachsen. Es wurden neue Funktionen hinzugefügt, die nicht vom ursprünglichen Plan abweichen. Es werden gewundene Bugfixes hinzugefügt, die den Code unnatürlich groß werden lassen.

Mein Rat:

Überfordert euch nicht. Wenn Sie eine Idee haben, implementieren Sie Funktionen. Wenn es sich danach lohnt, fügen Sie nach und nach hinzu. Lassen Sie Ihr Projekt natürlich wachsen.

Josh Smeaton
quelle
Ja, es ist fast so, als ob es aus persönlicher Erfahrung kam ...
NickAldwin
@ Nick, hatten wir nicht alle ähnliche Erfahrungen mit Projekt "X" mit den Features "Y" und "Z"? Ich hatte im letzten Jahr zwei ähnliche Projekte. Keiner von ihnen war Redis = P
Josh Smeaton
Dies beschreibt fast jedes Programm, das ich geschrieben habe.
Tim Post
So geht es. Kurt Vonnegut trifft Computerprogrammierung
Zoot
1
Exzellentes Beispiel, aber wenn es etwas kleiner angefangen hätte, wäre es noch besser gewesen. Beginnen Sie zum Beispiel mit dem Aufbau einiger Datenstrukturen, dann mit einem Code, der eine API für diese Datenstrukturen bereitstellt, dann mit einem Code, der diese API zum Implementieren der Cache-Funktion verwendet, und schließlich mit einer GUI darüber. Voilá, du hast einen Cache-Server geschrieben!
Gablin
28

Selbst das größte Programm beginnt mit einer Idee und wird zeilenweise geschrieben.

Der beste (vielleicht einzige) Weg, um das Schreiben realer Programme zu erlernen, besteht darin, damit zu beginnen. Wenn Sie auf Probleme stoßen, durchsuchen Sie das Web oder fragen hier nach Lösungen für diese Probleme. Schließlich sammeln Sie Erfahrung und müssen weniger oft nachfragen.

Es gibt jedoch einige Dinge, die Sie von Anfang an beachten sollten:

  • Kaum eine große Anwendung ist heutzutage komplett neu geschrieben. Sie können viel mehr in einer viel kürzeren Zeit erledigen, wenn Sie vorhandene hochwertige Bibliotheken und Frameworks verwenden. Es ist oft frustrierend und arbeitsintensiver, mit diesen zu beginnen, als es selbst zu tun, aber das ist so gut wie nie wahr.
  • Wenn Ihre Programme größer werden, ist es sehr wichtig, sorgfältig darüber nachzudenken, wie Sie Ihr Programm strukturieren (wie Sie es gestalten). Nehmen Sie sich etwas Zeit und lesen Sie einige Bücher über Design (ich würde "Clean Code" besonders empfehlen) und Software-Engineering sowie über technische Grundlagen.
Michael Borgwardt
quelle
6
"Der beste (vielleicht einzige) Weg, um das Schreiben realer Programme zu erlernen, besteht darin, damit zu beginnen." Mehr oder weniger, was ich sagen werde. Man kann nur so viel lesen und "verstehen" ... Gummi muss irgendwo auf die Straße.
WernerCD
1
+1 für die Zeile "Beginne damit." Aus einem Buch kann man keine Erfahrung lernen.
Riwalk
+1 für die Erwähnung des Buches "Clean Code". Sie sollten Ihren Code immer lesbar machen. Leicht zu lesen == leicht zu verstehen == leicht zu ändern
Igor Popov
15

Sie sprechen von mehr Software-Engineering als von Programmierung. Es ist ein bisschen Architektur, ein bisschen "Best Practices" und "Design Patterns", ein bisschen mit anderen zusammenarbeiten. Es gibt zwar Bücher, die helfen können, aber das meiste kommt aus der Erfahrung. Niemand fängt an zu schreiben, sagen wir Microsoft Word.

Denken Sie an ein großes, "echtes" Programm, das Sie gerne schreiben würden. Denken Sie nun über die verschiedenen Teile nach, die Sie bauen müssen, damit es so funktioniert, wie Sie es möchten. Zum Beispiel benötigen Sie in einem modernen Ego-Spiel eine 3D-Grafik-Engine, eine KI ohne Spielercharakter, ein Musik- / Soundmodul, eine Physik-Engine und ein Top-Level-Modul, das die Spielregeln durchsetzt (weiß) die "Karte", wie die verschiedenen Charaktere interagieren, etc.). Und dann ist da noch das Artwork und Character Design und die Musik, von denen keine Code sind, die aber notwendig sind, damit das Spiel vollständig ist.

Nun: Welche davon wirst du selbst bauen und welche wirst du woanders bekommen? Die meisten großen Softwareprojekte werden nicht von Grund auf neu programmiert. Vielleicht werden Sie eine handelsübliche 3D-Engine und ein Musik- / Soundmodul verwenden und nur die Dinge programmieren, die Ihr Spiel einzigartig machen. OK, Sie müssen also herausfinden, welche Module von Drittanbietern Sie verwenden, was Faktoren wie die Kosten, die Sprachen, die Funktionen und das Design der API (dh die Vollständigkeit) mit sich bringt ist, wie gut es zu Ihrem persönlichen Programmierstil passt, etc.). Vielleicht schreiben Sie "Proofs of Concept" oder testen Programme mit einem oder zwei Kandidaten für die verschiedenen Module von Drittanbietern, um sicherzustellen, dass sie alle erforderlichen Funktionen ausführen und für Sie einfach zu bedienen sind.

Selbst der Code, den Sie selbst schreiben möchten, ist möglicherweise zu umfangreich, als dass Sie ihn in der von Ihnen geplanten Zeit alleine ausführen könnten. Wie viele andere Programmierer benötigen Sie für das Projekt? Wie werden Sie den Job aufteilen? Wie werden die verschiedenen Module gestaltet, damit sie alle zusammenpassen, obwohl sie von verschiedenen Personen geschrieben wurden? Wie werden Sie alle am selben Quellcode arbeiten, ohne die Änderungen der anderen zu verwischen (Antwort: Versionskontrolle, die äußerst nützlich ist, wenn Sie alleine arbeiten, aber unverzichtbar, wenn Sie mit anderen arbeiten)?

Sobald Sie herausgefunden haben, welche Module Sie intern schreiben möchten, führen Sie denselben Prozess durch. Finden Sie heraus, welche Teile jedes Moduls zusammenpassen sollten, welche Sie selbst schreiben und welche Sie woanders bekommen. Brechen Sie die Dinge so lange auf, bis jedes Stück klein genug ist, dass Sie es im Kopf behalten und sagen können: "Ja, das könnte ich schreiben!" Und dann tu es. Dabei stoßen Sie auf unvorhergesehene Hindernisse, wie die verschiedenen Teile Ihres Programms zusammenpassen. Dies wird frustrierend sein, bietet Ihnen jedoch die Möglichkeit, mehr über Ihr Handwerk zu erfahren, und sollte auch so gesehen werden.

Anfänglich können Sie nur sehr kleine Teile Ihres Programms - zum Beispiel einzelne Funktionen - im Kopf behalten, und müssen daher vor dem Codieren viel aufteilen. Wie Sie Erfahrungen sammeln, werden Sie denken in Funktionen statt , um zu denken , über Funktionen und sich Gedanken über Objekte. Und dann werden Sie in Objekten denken und über größere Module nachdenken . Schließlich werden Sie in Modulen denken und über ganze, große, echte Programme nachdenken .

Und dann werden Sie feststellen, dass Sie noch viel zu lernen haben ... aber so geht es. Wenn Sie als Programmierer jemals aufhören zu lernen, sind Sie veraltet und werden durch ein neueres Modell ersetzt.

Hab sowieso keine Angst und mach dir keine Sorgen, ob das schrecklich oder unmöglich klingt und du eigentlich doch kein Programmierer sein willst. Es ist nicht jedermanns Sache. Ich liebe Musik und Desserts, und ich kann ein bisschen auf den Tasten spielen und ein paar Gerichte kochen, aber ich bin nicht bereit, die Zeit zu investieren, die nötig ist, um ein großartiger Musiker oder ein Meisterkoch zu werden.

Wenn sich herausstellt, dass Sie kein Programmierer sein möchten, der große, echte Desktop-Anwendungen schreibt, gibt es andere Arten von Programmieraufträgen. Sie könnten zum Beispiel ein Embedded-Programmierer werden. Das Schreiben von eingebetteten Programmen ist mit bestimmten interessanten Herausforderungen verbunden, und Sie leisten nützliche Arbeit. In der Regel sind die Programme jedoch kleiner als Desktopanwendungen. Oder Sie könnten Webanwendungen schreiben. Im Web ist es einfach, kleine Teile der Funktionalität zusammenzufügen, sodass Sie (z. B.) ein Webkommentarsystem schreiben können, das auch dann nützlich ist, wenn es sich nicht um eine ganze Webanwendung handelt. Es ist auch einfach, Dinge im Web schrittweise zu verbessern, sodass Sie mit einem einfachen Web-Mail-Client beginnen und ihn im Laufe der Zeit in etwas wie Google Mail umwandeln können. (Tun Sie dies jedoch nicht, da Sie dann mit Google Mail konkurrieren.)

Wenn Sie kein Programmierer sein möchten, aber dennoch mit Computern arbeiten möchten, können Sie sich möglicherweise der IT oder einem anderen technischen Gebiet widmen. In diesen Fällen ist es sehr nützlich, so viel wie möglich zu programmieren, da Ihre Kollegen möglicherweise nicht einmal so viel haben. Oder, wissen Sie, Musiker werden, wenn das gefällt, weil es (wie in den meisten Bereichen) heutzutage Computer betrifft. Schreiben Sie kleine Programme, die Audio- oder MIDI-Dateien auf clevere Weise bearbeiten und Sie so zu einem besseren Musiker machen. Sie werden feststellen, dass Ihre Programmierkenntnisse in vielen Bereichen angewendet werden können, um Sie bei Ihrer Arbeit zu verbessern.

kindall
quelle
Ich stimme nicht zu, dass eingebettete Programme normalerweise kleiner sind als Desktop-Apps. Möglicherweise war dies in der Vergangenheit der Fall, aber ich habe an einigen Embedded-Produkten gearbeitet, deren Entwicklung über 100 Mannjahre in Anspruch nahm und die nicht als besonders umfangreich eingestuft wurden.
Bart van Ingen Schenau
1
Ich denke, es würde davon abhängen, was Sie mit "eingebettet" meinen. Wenn Sie so etwas wie Smartphones oder integrierte Automobilsysteme meinen, kann ich Ihre 100 Mannjahre glauben. In diesem Bereich gibt es jedoch noch viele kleinere Systeme, an denen gearbeitet werden muss.
Irgendwann
+1 für mit dem Denken beginnt über kleinere Dinge, und dann bewegt zu denken , in den gleichen Dingen und über größere Dinge.
Gablin
1
Was schadet es, mit GMail zu konkurrieren? Wenn etwas, das Sie eigenhändig geschrieben haben, tatsächlich mit etwas konkurrieren kann, das Google herausgebracht hat, können Sie sich als verdammt guter Programmierer bezeichnen.
gablin
Der Hauptgrund ist, dass ich GMail als Webmail-Lösung betrachte. Die meisten Programmierer finden es nicht sehr interessant, an Problemen zu arbeiten, die bereits von anderen gut gelöst wurden. Sie können wahrscheinlich ein Problem finden, das noch nicht gelöst wurde, und viel mehr Spaß haben - und es möglicherweise auf den Markt bringen, ohne mit einem 800-Pfund-Gorilla konkurrieren zu müssen.
Irgendwann
9

Sie werden nicht herausfinden, wie Sie programmieren sollen, es sei denn, Sie stehen vor einer echten Aufgabe. Keine Theorie würde jemals eine einfache reale Aufgabe ersetzen. Bevor ich anfing, an RW-Szenarien zu arbeiten, las ich naiv viele Bücher mit allen Beispielen, aber als ich auf ein echtes Problem stieß, konnte ich einfach nicht alle theoretischen Kenntnisse sammeln, um die Aufgabe abzuschließen. Wenn Sie Anfänger sind, empfehle ich Ihnen, die Aufgaben von überall zu bekommen, wo Sie können. Denken Sie nicht, dass sie nutzlos sind, es sei denn, Sie haben sie gelöst. Versuchen Sie in einem ersten Schritt, Datenstrukturprobleme zu lösen, z. B. das Sortieren einer verknüpften Liste, das Durchführen von DFS, BFS für Bäume, Diagramme usw. Dies verbessert nicht nur Ihre Codierungsfähigkeiten, sondern auch, was noch wichtiger ist, Ihre Analyse- und Algorithmusfähigkeiten , die mir vertrauen, ist ein wertvolles Wissen. Dann, wenn Sie wissen, dass Sie mit Zeigern, Rekursion rocken können,

Endeffekt. Es geht nur um Übung. Einfach weiter graben und Code, Code, Code.

Sorantis
quelle
7

Beginnen Sie mit Computerspielen, wie es alle anderen taten. Ein gutes Spiel ist sowohl eine Programmier- als auch eine Designherausforderung, erfordert sorgfältiges Nachdenken über die interne Struktur und verwendet Systembibliotheken auf eine Weise, die viel lehrt, aber keine Pausen macht und keinen "guten Grund mit gutem Ergebnis" erfordert. wie die eigentliche "nützliche" Software.

Die allgemeine Regel ist, dass, nachdem genug Zeug geschrieben wurde, unvermeidlich eine Art Erleuchtung eintreten wird.

Ein guter Ausgangspunkt (wenn Sie Lust auf C haben) ist http://gamedev.net/ , insbesondere http://nehe.gamedev.net/ . Es gibt auch viele andere gute Punkte zu beginnen: D

Mirek Kratochvil
quelle
4
(Oh und ich habe gerade begriffen, warum jeder mit Spielen beginnt. Glänzende und hübsche Dinge motivieren.)
10
jeder ? Gewagte Behauptung.
4
Ich habe nicht mit einem Spiel angefangen. Ich würde das jenseits des Komplexes finden = P
Josh Smeaton
4
Die meisten Leute beginnen heutzutage mit einer Web-App, die eine viel niedrigere Eintrittsbarriere darstellt (es ist nur Text).
Slebetman
4
Ihr erster Kommentar war wahrscheinlich besser als Ihre Antwort - glänzendes und hübsches Zeug motiviert . Das ist was zählt.
Scorchio
6

Sie schauen sich das ganze riesige Programm an und es scheint unmöglich. Aber das Ganze besteht aus kleinen dummen Programmen wie denjenigen, die Sie sagen: "Tun Sie nichts Nützliches."

Was Sie brauchen, ist Erfahrung darin, riesige komplexe Aufgaben in kleine einfache Aufgaben zu zerlegen. Das ist die Wurzel aller Programmierung. Der Rest ist nur Semantik.

Satanicpuppy
quelle
6

Genau wie beim Fahren oder Kochen lernt man beim Programmieren, wie man es macht. Übung ist unersetzlich.

Wenn Ihnen die Lehrbuchbeispiele schon zu einfach sind, ist das toll! Zeit, sich für etwas Komplexeres zu bewegen - und Sie können bereits einige herausfordernde Übungen für sich selbst herausfinden.

Oder, wenn Sie eine bestimmte Idee haben, brechen Sie sie in Stücke. Lösen Sie zuerst eine kleine Teilmenge des Problems. Dann erweitern. Wenn es schwierig wird, den neuen Code in den vorhandenen Code zu integrieren, entwerfen Sie alles neu.

Emilio M Bumachar
quelle
5

Schreiben Sie ein Skript mit 200 Zeilen. Dann fang an, es zu verbessern.

Featuritis bringt Sie in kürzester Zeit auf 100 Quelldateien und mehrere hundert KLOC :)

richo
quelle
5

"Sie zeigen dir nicht, wie man komplexe Programme entwickelt, die tatsächlich etwas Nützliches bewirken!"

Ohne eine Definition von "nützlich" können wir wirklich nicht viel tun, um Sie auf die "richtige" Spur zu bringen.

Wir wissen nicht, wie Sie versagen oder was falsch läuft. Wir können nicht sagen, auf welchem ​​Track du bist.

Irgendwie hast du eine Ahnung in deinem Kopf, dass du nicht kommunizierst.

Bei Software - der Programmierung - geht es darum, einen Begriff aus dem Kopf zu bekommen, der in eine Sprache (Python, Java, Englisch, was auch immer) übersetzt wird.

Ein wichtiger Schritt beim Programmieren (und beim Stellen von Fragen) ist das Definieren Ihrer Begriffe. Was meinst du mit "etwas Nützliches tun"? Seien Sie sehr klar, sehr vollständig und sehr präzise.

S.Lott
quelle
Ich bin sehr an der Antwort von OP in diesem Thema interessiert.
Scorchio
5

Diese Frage wird mir ständig gestellt, zB wie ich anfangen soll. Es ist wirklich einfach. Hier geht es Schritt für Schritt.

  1. Sich etwas einfallen lassen. Klingt so, als hättest du das schon.
  2. Vereinfachen Sie Ihre Idee auf das Wesentliche - etwas, von dem Sie glauben, dass Sie es in Angriff nehmen können
  3. Legen Sie die Benutzeroberfläche auf ein Stück Papier oder eine Serviette.
  4. Versuchen Sie, die Benutzeroberfläche in Ihrer Entwicklungsumgebung zu gestalten.
  5. Wenn Sie auf Schwierigkeiten stoßen, googeln, googeln, googeln, Fragen zum Stackoverflow stellen, verwenden Sie den lebenden Mist aus den Internetressourcen, um Hilfe zu erhalten. Bitten Sie Freunde und Mitarbeiter, die Programmierer sind, Ihnen in bestimmten Situationen zu helfen. Fahren Sie mit Schritt 4 fort.
  6. Beginnen Sie mit dem Schreiben der Logik Ihrer Anwendung. Wenn Sie auf Schwierigkeiten stoßen, fahren Sie mit dem vorherigen Schritt fort und versuchen Sie es erneut.
  7. Bald ist etwas in Arbeit.
AngryHacker
quelle
+1 für den Workflow - es sollte irgendwie funktionieren. Ich kann nicht sagen, wie wichtig der zweite Schritt ist. Vielleicht ist das der Schritt, der entscheidet, ob Sie die Aufgabe bewältigen können oder nicht.
Scorchio
"Klingt so, als hättest du das schon." Das würde ich bestreiten. Wenn es eine Idee gäbe, wäre dies Teil der Frage.
S.Lott
Eigentlich, imho, sollten Sie zuerst die Logik für die App schreiben und dann die Benutzeroberfläche hinzufügen. Es ist einfacher.
CaffGeek
Wenn Sie an Werkzeug / Anwendung denken können, würden Sie das sogar besser verwenden. Wegwerfprojekte können de-motivierend sein. Was auch immer es ist, fangen Sie klein an und bauen Sie von dort aus. Ich würde ein Kommandozeilen-Tool vorschlagen.
Carlosfocker
1
@Chad Ich bin nicht einverstanden mit dir. Für Noobs ist die Logik abstrakt, aber die Benutzeroberfläche ist leicht zu verstehen. Das Gegenteil ist mit Erfahrung verbunden.
AngryHacker
4

Erstelle etwas Kleines. Es macht nichts, dass Ihr Programm das 1000. sein wird, das das macht.

Einige Ideen:

  • eine Uhr (erst digital, dann analog),
  • automatischer labirynth schöpfer,
  • Verzeichnisstruktur-Anzeige,
  • mp3 album lister,
  • usw.

Die Auswahl der Plattform und der Tools sind Teil der Aufgabe.

ern0
quelle
Ich stimme Ihnen im Prinzip zu. Das OP fragt jedoch nach nützlicher Software. Ein MP3-Album Lister wäre eine gute Wahl. Ein einfacher MP3-Player wäre besser, da er die Schwierigkeiten eines Projekts erleben würde. Einschließlich LOC.
Josh Smeaton
@Josh, MP3-Dekodierung ist nicht trivial, um für einen beginnenden Programmierer das Richtige zu sein.
@Thor, absolut ist es nicht trivial. Aber es wäre nützlich und würde sehr schnell lehren, wie Programme so groß werden können. Alle Nuancen, Fehlerbehebungen, Randfälle. Es mag in diesem speziellen Fall nicht angebracht sein, aber es könnte allgemein angebracht sein. Es ist eine großartige Sache, in der Lage zu sein, eine von Ihnen geschriebene Software selbst zu verwenden.
Josh Smeaton
@Josh, ich glaube immer noch nicht, dass ein MP3-Decoder ein kleines Ding ist und für diesen Zweck geeignet ist.
3

Beginnen wir mit Ihrer Idee für Programm X, das etwas Nützliches leistet, und teilen Sie es uns mit:

  • Verwenden Sie Papier-, Mind-Mapping- oder Diagrammsoftware, um den logischen Fluss / die logischen Flüsse des Programms zu gestalten.

  • Da Sie gerade erst anfangen, wählen Sie EINEN dieser Gegenstände (am besten am Anfang) und zerlegen Sie ihn noch weiter.

  • Schreiben Sie zuerst Ihren Code dafür und verwenden Sie ihn, um darauf aufzubauen

Muss Program X eine Datei öffnen, bearbeiten und eine Ausgabedatei erstellen? Prüfen Sie, ob Sie die Datei als ersten Schritt öffnen und als Echo anzeigen können. Möchten Sie eine schöne Benutzeroberfläche? Erstellen Sie ein Programm, mit dem Sie Ihr Dateiecho-Programm usw. ausführen können. Sie erstellen nicht nur schrittweise Code, den Sie in Ihrem komplexen Programm verwenden können, sondern erweitern auch Ihre Sprachkenntnisse, da Sie Informationen suchen und nachschlagen müssen.

Wie das Sprichwort sagt - Gnome wurde nicht an einem Tag gebaut :-)

DKnight
quelle
3

(bereits oben in den Kommentaren beantwortet. Es wurde vorgeschlagen, dies als Antwort zu übermitteln, nachdem die Frage erneut geöffnet wurde.)

Sie beginnen mit einem Problem - etwas, das Sie lösen möchten - egal wie komplex Sie es finden. Dann nehmen Sie dieses Problem und schreiben es auf und beginnen, es in kleinere Probleme aufzuteilen. Sie zerlegen dann diese kleineren Probleme usw., bis Sie etwas Ursprüngliches haben, das Sie bereits zu lösen wissen oder mit etwas Mühe tun können. Sie beginnen mit der Codierung jedes dieser Teile und ordnen sie in verschiedene Funktionen oder verschiedene Klassen usw. ein.

Dann arbeiten Sie am nächsten Unterproblem. Während Sie an jedem Problem arbeiten, können Sie kleine Testfälle schreiben und sehen, wie Sie tatsächlich Fortschritte erzielen. Es wird immer Herausforderungen auf dem Weg geben, aber zu keinem Zeitpunkt wird es etwas zu Kolossales sein, als dass man es überhaupt angehen könnte (was sich anscheinend gerade beschäftigt). Dies gilt für die Programmierung und viele Herausforderungen des Lebens. Der Schlüssel ist, es zu brechen.

Was zu tun ist - die Idee. Sie können versuchen, etwas Neues zu erfinden, aber Sie können auch etwas nehmen, für das Sie vielleicht eine Leidenschaft haben und das es bereits gibt, aber es nur besser oder sogar nur anders machen. In meiner Freizeit schreibe ich gerade eine Gitarrentuner-App für Android. Ich weiß, dass es bereits viele andere Gitarrentuner-Apps gibt, aber ich dachte, dass dies ein unterhaltsames und herausforderndes Projekt sein würde, und nahm es an. Anfangs schien es fast unmöglich, aber nachdem ich das Problem in kleinere Schritte zerlegt hatte, passte es tatsächlich gut zusammen. Teile und erobere deine Ziele und halte daran fest.

jeffp
quelle
3

Eine der schwierigsten Aufgaben für Anfänger besteht darin, realistische Ziele für das zu setzen, was eine "Wie kann ich verbessern" -Übung auf Ihrem derzeitigen Niveau enthalten sollte.

Daher würde ich vorschlagen, dass Sie das Lösen kleiner vorgegebener Übungen üben, da die Fähigkeit, ein Programm gemäß einer vorgegebenen Spezifikation zu beenden, für jeden, der seinen Lebensunterhalt programmiert, eine sehr wertvolle Sache ist.

Ich würde vorschlagen, dass Sie sich http://projecteuler.net/ genauer ansehen. Dort finden Sie viele Übungen und ein automatisiertes "Check Answer" -System, mit dem Sie in Ihrem eigenen Tempo arbeiten können. Die Übungen sind gut formuliert, erfordern jedoch möglicherweise Nachdenken. Bei manchen müssen Sie möglicherweise sogar viel nachdenken, aber selbst wenn Sie diese Probleme nicht lösen, werden Sie etwas Nützliches lernen.

Der vollständige Wortlaut von Problem 1 lautet:

Wenn wir alle natürlichen Zahlen unter 10 auflisten, die Vielfache von 3 oder 5 sind, erhalten wir 3, 5, 6 und 9. Die Summe dieser Vielfachen ist 23.

Ermitteln Sie die Summe aller Vielfachen von 3 oder 5 unter 1000.

Glaubst du, du könntest das lösen? Dann tu es!

user1249
quelle
3

Du brauchst echte Erfahrung !! . Kein Buch kann dir das beibringen!

Sie müssen lernen , wie anderen Code zu lesen, wie es zu halten, wie sie hassen (sowohl der Code und die Codierer) , wie es zu verbessern, wie es zu denken , dass Sie besser machen können und ein paar Monate später schreien laut ich Ich werde töten, wer jemals diese Teile des Codes geschrieben hat !!! Nur um in der Versionskontrolle herauszufinden, warst du es!

Man muss verstehen, dass Bücher sehr spezifisch sind und manchmal für Leute, die bereits wissen, wie man Software entwickelt.

Ich würde Ihnen also vorschlagen, einen Programmierjob zu suchen. Beantragen Sie bei Bedarf die einfachste Einstiegsstufe. Wahrscheinlich verdienen Sie nicht so viel, wie Sie denken, dass Sie es verdienen, aber nutzen Sie ein paar Monate, um zu lernen, wie Software in der realen Welt entwickelt wird (und es ist nicht immer so perfekt und mit all den schönen Best Practices, die wir im Web lesen Oft ist die Codequalität sehr niedrig, je nachdem, wo Sie arbeiten, aber das ist ein Teil der Erfahrung.)

Lesen Sie weiter in Ihren Büchern, Sie werden feststellen, dass Sie jedes Jahr ein bisschen mehr (oder anders) das gleiche Thema verstehen, weil Sie es mit einem Glas Erfahrung sehen können.

Wenn Sie es schaffen, einen Job bei talentierten Entwicklern zu finden, ist das viel besser. Lernen Sie von ihnen, haben Sie keine Angst vor Fehlern.

Bis Sie Ihren ersten dringenden Fehler in der Live-Produktion beheben müssen, werden Sie nicht wissen, um welchen Softwarefehler es sich handelt!

:)

OscarRyz
quelle
2

Probieren Sie ein Open-Source-Projekt aus, und prüfen Sie, ob Sie dazu passen. Laden Sie zunächst die Quelle herunter und prüfen Sie, ob Sie einige Tickets abholen können

Martijn
quelle
15
Anfänger sollten nicht versuchen, sich einem Open Source-Projekt anzuschließen. Sie werden einfach in die Quere kommen. Open Source Projekte sind nicht da, um Anfänger zu unterrichten.
Eine Alternative zum direkten Einbeziehen besteht darin, die Quelle eines Projekts zu bestimmen und zu versuchen, Tickets in Ihrer eigenen Niederlassung zu reparieren, und es einfach dabei zu belassen. Es gibt zahlreiche Möglichkeiten, Code zu lesen, der von mehreren Personen geschrieben und überprüft wurde, Projektstrukturen, die gut organisiert sind und als Vorlagen für Ihre eigenen Kreationen dienen können, und zu verstehen, wie der Kollaborationsprozess funktioniert. Beobachten Sie einfach die öffentlichen Teile und verarschen Sie den Code privat.
Quallenbaum
3
@jellyfishtree, wenn du das nicht programmieren kannst, könnte das ein bisschen zu ehrgeizig sein.
@Thorbjorn auf jeden Fall, aber ich wünschte, ich hätte mehr getan, als ich anfing. Wie bei allem, denke ich, lernst du viel nur durch Osmose und Kopfspringen. Zumindest erhalten Sie ein besseres Maß für das, was Sie nicht kennen / verstehen - etwas weitaus Wertvolleres, wenn Sie zum ersten Mal anfangen und sich danach sehnen, zu wissen, wo Sie Ihre Ziele setzen und worauf Sie hinarbeiten sollen.
Quallenbaum
@ Qualle, klar, und ich bin sicher, es ist ein guter Schritt, aber noch nicht in diesem Fall.
2

Wenn ich eine neue Sprache lernen möchte, versuche ich normalerweise, ein fraktales Diagramm zu implementieren. Auf diese Weise erhalten Sie sofort Feedback, ob es funktioniert und es ist sehr lohnend. Und es gibt viele Möglichkeiten, ein Fraktal zu verbessern. Die naive Implementierung von Mandelbrot ist höllisch langsam.

Es ist nicht sehr nützlich, aber man lernt viel und es ist schön anzusehen.

onemasse
quelle
Ich mag das - eine ziemlich poetische Art, eine neue Sprache zu lernen. Aber ich weiß nicht, ob wir dies für Anfänger empfehlen sollten: D
Scorchio
2

Beim Programmieren geht es um Problemlösung und Kommunikation, nicht darum, viel Code zu schreiben. Code ist nur eine Notwendigkeit, Sie sollten normalerweise versuchen, weniger Code zu schreiben, nicht mehr.

Wenn Sie nicht wissen, wo Sie anfangen sollen, haben Sie vielleicht keine Probleme!

Schauen Sie sich Linux und andere Unix-ähnliche Systeme an: Sie bestehen alle aus vielen kleinen Anwendungen, die nur eines tun, es aber gut machen .

Als ich ein Skript benötigte, um die 10 größten Dateien in einem Ordner auf meinem Computer zu finden, las ich keine Bücher. Ich habe nur gegoogelt und eine der vorhandenen Lösungen verwendet. Habe ich irgendeinen Code geschrieben? - Nein. Ist das Problem gelöst? - Ja. Ist dieses einzeilige Programm nützlich? - Oh Ja.

Programme mit Tausenden von Codezeilen werden normalerweise von mehr als einem Programmierer geschrieben. Sie werden nicht in der Lage sein, ganze Betriebssysteme alleine zu schreiben, und Sie müssen es nicht. Sie verwenden auch oft Cheats wie Versionskontrolle und Komponententests .

U / min
quelle
Bitte erwähnen Sie die Versionskontrolle und den Unit-Test nicht als "Cheats". Es ist eine Notwendigkeit, Backups Ihrer Arbeit anzufertigen und damit zu arbeiten. Die Versionskontrolle hilft nur dabei, vernünftig zu bleiben. Gleiches gilt für Unit-Tests: Jeder, der eine einzige Codezeile geschrieben hat, weiß, dass einige Tests durchgeführt werden müssen.
Scorchio
@Scorchio Ich habe nur gemeint, dass die Verwendung von Versionskontrolle und Komponententests Ihnen einen Vorteil gegenüber Leuten verschafft, die sie nicht (genug) verwenden. Besonders bei großen Projekten.
Kolobos
2

Teilen und erobern.

Es ist so einfach oder so schwer.

ocodo
quelle
2

Als ich anfing zu programmieren, liebte ich Computerspiele. Also fing ich an, meine eigenen Spiele zu schreiben, sobald ich Werkzeuge zur Verfügung hatte.

Natürlich war mein erstes Spiel ein Textabenteuer. In ähnlicher Weise können Sie mit einem Quiz oder etwas anderem oder mit einer Art Ratespiel beginnen.

Sie könnten auch mit etwas anfangen, wie einem Spielautomaten (Sie brauchen nicht wirklich die Animationen oder sogar Bilder. Verwenden Sie einfach A = Apfel, L = Zitrone, S = Start, P = Pflaume usw.).

Auf diese Weise lernen Sie die Grundlagen des Umgangs mit Benutzereingaben, des Beibehaltens des Spielzustands und des Generierens der Ausgabe entsprechend.

Ich ging diese Straße ziemlich weit hinunter. Ich lernte nach und nach, wie man den Tastaturstatus oder die Maus ausliest und wie man Grafikcode verwendet. Ich habe mehr über die Sprache selbst gelernt (ich habe mit PASCAL angefangen) und diese verwendet, um meine vorhandenen Spiele zu verbessern oder einfach etwas Neues zu beginnen.

Ich denke, Spiele sind wirklich großartig, um Programmieren zu lernen. Selbst mit wenig Erfahrung können Sie kleine Dinge erschaffen, die Ihnen kleine Momente des Stolzes verleihen. Weil du etwas erschaffst, macht das Spaß. Das Erstellen tatsächlicher Anwendungen ist ziemlich sinnlos, da viel Arbeit erforderlich ist, um etwas zu erstellen, das tatsächlich nützlich ist, wohingegen es überraschend einfach ist, ein kleines Spiel zu erstellen, das süchtig macht.

Vielleicht möchten Sie tatsächlich eine Unterrichtssprache verwenden (in meinem Fall war dies PASCAL und im Nachhinein denke ich, dass es sich als eine gute Wahl erwiesen hat). Viele von ihnen sind speziell auf das Erstellen von Spielen und dergleichen ausgerichtet.

Das Erstellen von Anwendungen ist mehr als nur das Erstellen von Algorithmen. Sie müssen Features entwerfen, Sie müssen Ihren Code in verschiedenen Ebenen und Modulen organisieren und strukturieren. Im Gegensatz zu den eher "atomaren" Problemen, die Sie an der Universität haben, werden Anwendungen manchmal am besten inkrementell entwickelt. Sie beginnen mit etwas und fügen Dinge hinzu. Wenn Sie also bereits etwas anfangen (wie in einigen der im Wikipedia-Artikel aufgelisteten Sprachen), sparen Sie sich viel Frust und erstellen sofort etwas. (Ein Kollege von mir begann mit dem Programmieren, indem er Quake 2 Mods schrieb). Irgendwann werden Sie die Einschränkungen dieser benutzerfreundlichen Tools bemerken, aber bis dahin werden Sie viel mehr Einsicht und Verständnis haben. Wahrscheinlich genug,

back2dos
quelle
2

Im College gab es eine Klasse namens Programmierpraktikum, die im Grunde diese Rampe lehrte. Schon früh bekam man eine Benutzeroberfläche für eine einfache Einkaufsanwendung und musste das Backend programmieren, der letzte Monat war Tetris von Grund auf neu. Ich denke, dass ungefähr 50% der neuen Schüler (die die Klasse nicht wiederholen) gescheitert sind, weil es unglaublich schwierig ist, von klein auf groß zu wechseln.

Ich würde einen oder mehrere der folgenden Vorschläge machen:

  • Laden Sie ein Open Source-Projekt herunter und fügen Sie etwas hinzu. Es muss nicht nützlich oder gut sein, aber Sie müssen sich die Struktur ansehen, um ein Gefühl dafür zu bekommen, wie groß das Projekt ist.

  • Gestalten Sie Ihr Endprojekt einfach auf Papier, mit Pfeilen für Abhängigkeiten. Wenn Sie Schlange machen, haben Sie möglicherweise Schlangenkopf, Schlangenschwanz, Futter, leeren Raum, Wand, Brett, aktuelle Richtung usw. Könnte Ihnen helfen, zu erkennen, ob Ihr Projekt viel größer ist, als Sie denken.

  • Nehmen Sie ein einfaches Projekt und machen Sie es größer und größer. Sie werden wahrscheinlich viel überarbeiten und hoffentlich lernen, wie Sie kleinere Projekte erstellen, die leicht hinzugefügt werden können.

  • Wenn Sie jemanden kennen, der Erfahrung mit Ihnen hat, teilen Sie ihm Ihre Idee für ein Projekt mit und lassen Sie ihn Ihre Kurse und einige wichtige Methoden schreiben. Dies würde wahrscheinlich eine Stunde dauern. Auf diese Weise können Sie einfach die Methoden ausfüllen und wissen immer, was Sie als Nächstes tun müssen.

Was auch immer Sie tun, Sie sollten wahrscheinlich ein grundlegendes MVC-Entwurfsmuster (Modell, Ansicht, Controller) verwenden. Ordnen Sie Ihre Ansicht (UI), ohne auf Details einzugehen, in mehr als 1 Klassen, Ihren Controller (Eingabe, Ausgabe usw.) in mehr als 1 Klassen und Ihr Modell (Logik, Daten, im Grunde alles andere) in mehrere Klassen ein. Es ist ein einfacher Weg, um eine grundlegende Organisation zu erhalten.

Denken Sie daran, dieser Schritt ist schwer. Es ist wahr, dass manche Leute einfach nicht programmieren können, aber Sie stecken wahrscheinlich gerade in dieser Phase fest. Viel Glück!

Kennzeichen
quelle
2

Erstens schaffen Sie bereits die Voraussetzungen, indem Sie Unterricht nehmen, Referenzmaterial lesen, sich Open Source-Projekte ansehen und neugierig auf Fragen bleiben. Ich betone dies, weil ich persönlich auf ähnliche Fragen gestoßen bin, bevor die Person ihrerseits Beinarbeit geleistet hat (insbesondere Personen, die den Unterricht umgehen und auf Abkürzungen hoffen). Jetzt denke ich an die Zeit zurück, als wir mit Turing-Maschinen zu tun hatten und als ich das Gefühl hatte, dass es keine echte Programmierung war. Dies sind die Erfahrungen, die Sie machen werden, dass jeder, der Abkürzungen nimmt, überspringt.

  • Anmeldung für studentische Projekte. Ich habe mich mit (CSUA) einer Gruppe gleichgesinnter Studenten zusammengetan, um ein Spiel für den Karnevalsstand in meinem letzten Jahr zu bauen. Wenn Sie weiterhin Spaß daran haben und glauben, dass Sie Ihr Engagement ausweiten möchten, nutzen Sie die Ressourcen wirklich. Informieren Sie sich über Projekte, sprechen Sie mit Ihren Klassenkameraden, Ihren Professoren und machen Sie ein Praktikum.

  • Setzen Sie sich mit einem erfahrenen Programmierer zusammen. In meiner Geschichte habe ich ungefähr dreimal eine andere Person gesehen, die wirklich inspirierend war. Für sie schrieben sie nur Code und dachten laut nach. Keine Übertreibung, ich hatte das Gefühl, dass ich mehr davon in Anspruch nahm, ihnen zuzuhören, als ich es Jahre für mich tun würde. Wenn Sie mehr begegnen, sind Sie viel reicher. Wir können uns glücklich schätzen, in einer Zeit zu sein, in der wir Videos ansehen, komplette Quellenspeicher einsehen und sofort einen riesigen Online-Wissensspeicher durchsuchen können. Es ist kein Ersatz für die persönliche Erfahrung, aber in Abwesenheit eines Mentors ist es eine dramatische Verbesserung gegenüber herkömmlichem Material. Das Betrachten von Rohcode durch andere allein kann jedoch zu nichts führen. Sie möchten etwas im Sinn haben und einen guten Debugger, um in die Logik einzusteigen. Einer meiner liebsten Momente war es, einen Quake-Mod zu machen und es war nicht der Mod selbst, der etwas Denkwürdiges hatte. Es war die Logik von Carmack im Spiel. Der Mod war für mich nur ein Grund zum Eintauchen.

  • Üben Sie, die Fragen Ihres Laborpartners zu erklären und zu beantworten. Helfen Sie freiwillig beim Unterrichten. Bilden Sie vielleicht eine Lerngruppe und verlangen Sie, dass jedes Mitglied Experte für ein Klassenthema wird. Dann grille diese Person und lass sie dich grillen. Wenn Sie gezwungen sind, Fragen zu beantworten, müssen Sie die Antworten selbst lernen. Wenn Sie anderen Konzepte klar erklären können, haben Sie Ihr eigenes Verständnis so weit bereichert, dass Sie es außerhalb eines Buches und Ihrer Gedanken vermitteln können.

  • Hab keine Angst davor, auf die harte Tour zu lernen, mach dir die Hände schmutzig, mach Fehler. Dies kann auch als Erfahrung bezeichnet werden. Führen Sie diese Übung aus, um ein praktischeres Beispiel für Ihre Frage zu Projekten mit unhandlicher Codebasis und einer großen Anzahl von Dateien zu erhalten: Verwenden Sie für Ihre Arbeit eine einzelne Datei. Wirklich, ich mache keine Witze. Genau diese Frage tauchte auch in meiner jetzigen und früheren Firma auf. Hier bemerkte ein anderer Entwickler, dass ich es vorziehen würde, eine Datei für jede Klasse aufzubewahren. Dies schien ihm fremd zu sein und in einer verwandten Angelegenheit mochte er auch keinen Teilunterricht. Eine Möglichkeit für Sie, ein Gefühl dafür zu bekommen, wann oder wo es angebracht ist, die Logik in separate Dateien aufzuteilen, besteht darin, mit nur einer einzigen Datei zu beginnen. Nachdem Sie die Ein-Datei-Regel für mehrere Projekte mit hoffentlich zunehmender Komplexität angewendet haben, Möglicherweise stoßen Sie auf ein Projekt, in dem so viele Klassen in einer Datei enthalten sind, dass das Lesen oder die Zusammenarbeit aufgrund der Versionskontrolle schwierig wird. An dieser Stelle möchten Sie separate Dateien erstellen, um verschiedene Klassen zu gruppieren. Je nach Ihren Wünschen können Sie frühzeitig entscheiden, dass Sie alle Datenklassen in einer Datei mögen. Dann vielleicht später wieder, können Sie entscheiden, dass Sie separate Dateien auch zwischen Datenklassen als Gruppe mögen.

Muster
quelle
+1 Schöne Antwort. Ich muss sagen, dass das Sitzen mit einem erfahrenen Programmierer einschüchternd sein kann, wenn man neue Leute kennenlernt. Durch Sachen zu rasen, die Sie viel Zeit gekostet hätten. Aber abhängig von der Art der Person, die Sie sind, könnten solche Dinge ein motivierender Faktor sein und etwas von diesem Feuer in Ihrem Bauch entzünden. Drängt dich dazu, in den Arsch treten zu wollen.
Terrance
1

Sie müssen keine großartige Idee haben, um etwas zu programmieren. Ich würde mit dem einfachen Teil beginnen. Wie ein Programm, das Sie bereits verwenden. Versuchen Sie, etwas zu machen, von dem Sie bereits wissen, wie es funktioniert. Stellt sich Ihren Problemen, damit Sie es schneller lernen. Sobald Sie mehr Erfahrung gesammelt haben, haben Sie einige gute Ideen für Programme, die Ihnen das Programmieren erleichtern, oder nur ein gutes Programm, mit dem Sie etwas tun können, woran Sie noch nie zuvor gedacht haben. Ich programmiere seit fast einem Jahr Java und seit ein paar Jahren andere Sprachen. Es dauerte eine Weile, bis ich anfing, das zu tun, was ich wirklich wollte. Ich habe gerade angefangen, meine eigenen Sachen zu machen. Dank StackOverflow. Ich wusste es vorher nicht.

pringlesinn
quelle
1

Es gibt also eine Menge Antworten, also verzeih mir, wenn ich vieles von dem, was bereits gesagt wurde, wiederhole, aber hier sind meine 2 Cent.

Wähle zuerst eine Idee aus. Jede Idee wird in Ordnung sein, etwas Einfaches wäre wahrscheinlich besser als groß. Projekte haben die Tendenz, sehr schnell in ihrem Umfang zu wachsen (manche nennen es Kriechen).

Als nächstes erstellen Sie ein Skelett für das Projekt. Dies erfordert ein wenig Architektur- und Designkenntnis und Sie werden es wahrscheinlich falsch machen, wenn Sie es die ersten zehn Male probieren - das habe ich getan. Legen Sie einfach eine anständige Dateistruktur und möglicherweise ein kleines Code-Gerüst an, das die wichtigen Teile des Systems zeigt.

Speichern Sie das Skelett in Ihrem VCS (wählen Sie Ihr Gift mit diesem und halten Sie es fest, wenn es zu einem heiligen Krieg führt). Sobald Sie mit der Verwendung von VCS begonnen haben, wird die ständige Verwendung für kleine Änderungen zur Selbstverständlichkeit, aber stellen Sie sicher, dass Sie beginnen.

Wählen Sie nun ein kleines, aber wichtiges Feature für das System und machen Sie es. Machen Sie sich keine Sorgen, dass Sie sicherstellen, dass alles perfekt gekapselt ist und dass es das "beste" Design hat (das sich mit dem System entwickelt). Holen Sie sich einfach etwas, das funktioniert. Wenn Sie regelmäßig Tests durchführen, können Sie auch sicherstellen, dass Sie wissen, was passiert ist, wenn etwas kaputt geht.

Bauen Sie Ihr System. Dies wäre auch ein guter Zeitpunkt, um ein automatisiertes Build-System und eine kontinuierliche Integration zu erhalten. Wenn Sie nicht wissen, was sie sind, lernen Sie es entweder und versuchen Sie es, oder fahren Sie einfach auf eigenes Risiko fort. so oder so weiter arbeiten.

Wählen Sie nun ein anderes Feature und wiederholen und wiederholen und wiederholen.

Zeigen Sie es einem Freund, wenn Sie der Meinung sind, dass es gut funktioniert. Der Freund muss nicht programmieren können oder gar wissen, was das Programm tut. Zum einen fühlen Sie sich wohl, wenn Sie jemandem etwas zeigen, zum anderen wissen Sie genau, was das System tut.

Wenn Sie zu dem Punkt kommen, an dem Sie mit dem, was Sie gemacht haben, sehr sicher sind, geben Sie es online frei und versuchen Sie, Feedback zu erhalten. Ein Repository-Hub oder die Weiterleitung durch den Programmierer kann konstruktive Kritik anrichten. Versuchen Sie, einen CS / SE-Professor zu finden, und lassen Sie ihn sich das ansehen. Vielleicht fragen Sie einen professionellen Programmierer. Holen Sie sich einfach eine andere Meinung des Programmierers.

Sobald Sie fertig sind (oder wahrscheinlich schon früher), werden Sie feststellen, dass der Code, den Sie ursprünglich geschrieben haben, viel schlechter ist als der, den Sie kürzlich gemacht haben. Das ist völlig natürlich und passiert uns allen. Sie müssen jetzt ein neues Projekt finden und etwas Neues lernen - vielleicht eine neue Teststrategie oder die Verwendung der serviceorientierten Architektur.

Jonathan
quelle
1

Etwas, das helfen könnte, ist, an ein einfaches Problem zu denken, das Sie Tag für Tag haben und bei dem etwas, das Sie mit Bleistift und Papier tun könnten, durch ein Programm ersetzt werden könnte.

Dies gibt Ihnen ein relativ einfaches Problem mit einer ziemlich bekannten Lösung, die nur einen Grad an Automatisierung benötigt. Beachten Sie, dass dies nicht das nächste MS Word / WordPad / NotePad sein muss. Nur etwas, das Ihr (einfaches) Problem löst.

Ein Problem, das ich bei der Arbeit mit einer neuen Sprache immer wieder neu implementiere, ist beispielsweise eine einfache Zeitnehmer-App. Mit der App können an einem Tag abrechnungsfähige Stunden für verschiedene Projekte erfasst werden. Ein relativ einfaches Programm mit vielen kleinen Problemen, z. B. wie man mit Neustarts mitten am Tag umgeht oder wie man Elemente zu Ihrer Liste hinzufügt / daraus entfernt.

Ken Henderson
quelle
1

Ich denke, ein Teil des Problems ist, dass man beim Lesen von Programmierbüchern nur die Sprache lernt. Sie erwähnen nicht, dass Sie zum Programmieren von fast allem Zugriff auf das Programmieren von BIBLIOTHEKEN, SDKS usw. benötigen. Nur die Sprache zu kennen, reicht leider nicht aus.

David-S
quelle
1

Ich vermute, Ihr Problem kommt von: 1. dem Konflikt zwischen Theorie und Praxis und auch dem, dass ... 2. Sie erkennen müssen, dass Ihr Code vom Code anderer ausgeführt wird. 3. Sie können nichts codieren, wenn Sie keine Ahnung haben, was Sie machen könnten. 4. Sie kennen die Hälfte der Schwierigkeit

  1. Wenn Sie eine Sprache theoretisch kennen, heißt das nicht, dass Sie sie "sprechen": Das ist der Unterschied zwischen dem Lesen und dem Sprechen von Englisch. Auch die große Anzahl verschiedener Tools, die zum Kompilieren, Verknüpfen und Bearbeiten eines Quellcodes zur Verfügung stehen, wird Ihren Kopf drehen.

  2. Beim Erlernen des Programmierens meistens, wenn ein Terminal zum Eingeben / Ausgeben von Text verwendet wird, da dies die einfachste Art ist, mit dem Programmieren umzugehen. Tatsächlich verwenden Programmierer Bibliotheken (wie Qt), Frameworks (ich nehme an, Django) und anderen Verknüpfungscode, um produktiv zu sein. Natürlich, wenn Sie das Gefühl haben, dass Sie Ihr eigenes Rad schreiben können, erfinden Sie es nicht neu und lesen Sie Bücher über Compiler-Design und Kernel-Design. Es gibt eine Menge zu lernen: Vielleicht finden Sie es dumm, Apps zu entwickeln, die nicht viel erfordern der Technik.

  3. Erfinde etwas ! Natürlich können Sie einen Texteditor, ein Spiel usw. erstellen. Die Sache ist, dass Sie diese nicht ausführen, wenn Sie keinen Grund dafür sehen: Diese Programme sind für Sie nutzlos, wenn alles, woran Sie denken, bereits erstellt wurde . Ich träume immer noch davon, ein Facebook-ähnliches, dezentrales p2p-Protokoll mit Chat, Offline-Nachrichten usw. in einem zu codieren, damit es mit drahtlosen Embedded-Geräten verwendet werden kann. Das Internet bietet viele Möglichkeiten. Denken Sie auch darüber nach.

  4. Tatsächlich ist die Theorie für die Praxis notwendig, aber das ist noch nicht alles: Algorithmen und Techniken sind nicht Teil der Theorie der Programmierung, es gibt viele Paradigmen und andere "Standard" -Methoden, um Ihren Code zu erstellen: Entwurfsmuster, verknüpfte Listen, usw. usw.

jokoon
quelle
1

Vielleicht könnten Sie eine Skriptsprache auswählen, um zu beginnen. Ich fing an, mit der Sprache C zu programmieren. Meiner Meinung nach ist die C-Sprache leicht zu erlernen, aber es wird viel mehr Zeit benötigt, um den Algorithmus und etwas über das Betriebssystem zu kennen. Und jedes Mal, wenn ich mit einer DOS-Benutzeroberfläche trainiere, bin ich depressiv.

Und später habe ich eine Skriptsprache namens ActionScript zum Starten ausgewählt. Die Skriptsprache ist eine objektorientierte Sprache und kann das Verhalten eines Flash-Films steuern. Die Skriptsprache ist einfach, um Arbeiten auszuführen, die nahe an der Problemdomäne liegen , genau wie trace("HelloWorld")in ActionScript, um eine Zeichenfolge auszugeben. Und es hat eine leistungsstarke IDE, mit der Sie überprüfen können, ob Ihr Programm gut läuft.

Kurz gesagt, wenn Sie schnell mit dem Programmieren beginnen möchten , ist eine Skriptsprache eine gute Wahl :-)

Tomyail
quelle
1

Schreiben Sie eine Spezifikation. Was soll Ihr Programm tun? Die Bildschirme (wenn es sich um ein UI-basiertes Programm handelt), die Logik, die Eingabe / Ausgabe usw. Beschränken Sie den Umfang auf das, was Sie in einem angemessenen Zeitraum (eine Woche? Einen Monat?) Tun können.

Dann baue es. Halten Sie sich an die Spezifikation, damit sie den Anforderungen der Spezifikation entspricht. Sicher werden Sie auf Ablenkungen stoßen, sicher müssen Sie Nachforschungen anstellen, weil Sie noch nie mit einem bestimmten Problem konfrontiert waren, aber Sie werden etwas bauen, das Sie bauen wollten. Das ist etwas anderes als etwas zu bauen, das man einfach "bauen" kann.

Wenn Sie fertig sind, überarbeiten Sie Ihren Code und versuchen Sie, ihn effizienter zu gestalten. Wenn Sie der Meinung sind, dass Ihr Programm immer noch nicht fertig ist, beginnen Sie von vorne, verbessern Sie die Spezifikation, verbessern Sie den Code und machen Sie weiter.

Denken Sie daran, dass die meisten kommerziellen Programme einen Bedarf lösen. Es ist sehr wichtig, den Bedarf und die Lösung für die Befüllung dieses Bedarfs zu definieren, bevor das Problem tatsächlich gelöst wird. Und da der Bedarf immer größer wird, wird auch Ihre Software mit der Zeit wachsen!

Roopesh Shenoy
quelle