Denkfähigkeiten, um ein guter Programmierer zu sein [geschlossen]

10

Ich programmiere seit 15 Jahren mit einem Nicht-CS-Abschluss. Der Hauptgrund, warum ich zum Programmieren kam, war, dass ich gerne neue Dinge lernte und sie auf meine Arbeit anwendete. Und ich konnte Programmierfehler und ihre Ursachen schneller als andere finden und beheben. Aber ich finde mich nie als Guru oder Experte wieder, vielleicht aufgrund meines Nicht-CS-Hauptfachs. Und als ich großartige Programmierer sah, stellte ich fest, dass sie sehr gut, natürlich viel besser als ich, Probleme lösen können.

Eine Fähigkeit, die ich in meiner Karriere als gut empfunden habe, besteht darin, Anforderungen und Aufgaben in umgekehrter Reihenfolge und abstrakt zu betrachten. Auf diese Weise kann ich sehen, was wirklich erforderlich ist, damit ich ohne Details auskommen kann, und schnell Teile der Lösung finden, die bereits vorhanden sind.

Ich frage mich also, ob es andere Denkfähigkeiten gibt, um ein guter Programmierer zu sein. Ich habe die folgenden Fragen und Antworten befolgt und einige der dort empfohlenen Bücher gelesen. Aber ich konnte nicht wirklich gute Methoden finden, die direkt für meine Programmierarbeit anwendbar waren.

Welche nicht programmierenden Bücher sollte ein Programmierer lesen, um Programmier- / Denkfähigkeiten zu entwickeln?

/software/44654/skills-and-habits-to-develop-to-be-good-at-programming-im-a-newbie

Tae-Sung Shin
quelle

Antworten:

10

Vielen Dank für die Hinweise auf die vorhandenen Fragen. Die Antworten auf diese Fragen unterscheiden sich jedoch von denen, die ich verstehe, dass Sie wollen. Ich werde Ihnen einige Vorschläge aus meiner eigenen Erfahrung geben. Mein eigener Abschluss ist in Physik. Bin ich mit Lücken in Bezug auf Formalität, Korrektheit / Verifikation, Algorithmusanalyse, dynamische Programmierung, Datenbanksysteme und zu Beginn weitgehend Auswahl von Datenstrukturen und Algorithmen auf das Gebiet gekommen? Die offensichtlichsten Lücken (z. B. Datenstrukturen und Algorithmen) habe ich früh geschlossen, aber ich lese immer noch Bücher in diesem Bereich, um mein Verständnis zu vertiefen, alternative Präsentationen zu sehen und mein Gedächtnis aufzufrischen. (Ich bin ungefähr 40, also arbeiten Bücher für mich :)

Hier ist eine Leseliste (in keiner anderen Reihenfolge als der Reihenfolge, in die sie gekommen sind).

  1. Programmieren von Perlen (Jon Bentley)
  2. Weitere Programmierperlen (Jon Bentley)
  3. Die Kunst der Computerprogrammierung (Donald Knuth)
  4. Algorithmen in C ++ (Robert Sedgewick)
  5. Das Algorithmus-Design-Handbuch (Steven Skiena)
  6. Die Programmierpraxis (Kernighan und Pike)
  7. Elemente der Programmierung (Stepanov)
  8. Wie man es löst (Polya)
  9. Struktur und Interpretation von Computerprogrammen (Abelson und Sussman)

Ich habe auch viel davon geschrieben, Solid Code zu schreiben, als ich ihn Mitte der 90er Jahre las. Aber es ist nicht in der Liste enthalten, da es sich nicht wirklich stark auf Denkfähigkeiten als solche bezieht (es befasst sich mehr mit dem Entwerfen von APIs, um die Wahrscheinlichkeit einer versehentlichen falschen Verwendung zu minimieren - oder zumindest war dies mein Hauptproblem).

Als Teenager habe ich auch viel von Gödel, Escher, Bach (Hofstadter) mitbekommen, aber es wird bereits in den Antworten auf die Fragen erwähnt, auf die Sie bereits hingewiesen haben. Es ist ein Buch, das man zum Vergnügen lesen kann und nicht direkt, um seine Informatikkenntnisse zu entwickeln.

Ich arbeite mit einer ziemlich großen Anzahl talentierter Programmierer zusammen und fast überall sind sie Fans von Programming Pearls . Natürlich wünschte ich mir, mehr der Kandidaten, die ich interviewe, hätten Kapitel 4 dieses Buches gelesen.

James Youngman
quelle
4

Zuerst; Für jede Disziplin wird es immer jemanden geben, der in irgendeiner Weise viel besser darin ist. Mach dir keine Sorgen um diesen Teil.

Dann; Ein CS-Abschluss ist nett und das alles, und das theoretische Wissen, das er Ihnen vermittelt, ist sicherlich nützlich, aber es ist keineswegs ein Hinweis darauf, dass jemand ein guter Programmierer ist. Einige der besten Programmierer sind Autodidakten, und glauben Sie mir, die Welt ist voll von CS-Absolventen, die sich nicht aus einer nassen Papiertüte heraus programmieren konnten. Also mach dir auch keine Sorgen um diesen Teil.

Was es braucht, um ein guter Programmierer zu werden: Ich denke, zwei Dinge sind wesentlich. Zum einen müssen Sie in der Lage sein, Probleme streng formal anzugehen und auf einer bestimmten Abstraktionsebene zu denken. Wenn Sie Zeiger und Rekursion verstehen, sind Sie in dieser Hinsicht höchstwahrscheinlich gut. Der andere ist Engagement und Ausdauer. Wie bei jedem anderen Handwerk dauert das Programmieren Zehntausende von Stunden engagierter, konzentrierter Übung, um es zu meistern. Es geschieht nicht über Nacht. Es dauert mindestens zehn Jahre, um auf die eine oder andere Weise die Meisterschaft zu erlangen. Wenn Sie leidenschaftlich sind, wird es einfach sein, die Stunden einzuplanen, sich zu konzentrieren und immer neue Herausforderungen zu finden. Wenn nicht, ist es wahrscheinlich immer noch möglich, aber es wird keine angenehme Fahrt.

tdammers
quelle
2

Denken Sie daran, wann immer Sie anfangen, die Programmiersprache zu lernen. Lernen Sie zuerst das Konzept und testen Sie es sofort. Wenn Sie diese Übung machen, werden Sie die Konzepte und ihre Verwendung nicht vergessen.

Als nächstes kommt die bekannte "Übung perfekt machen" und sie gilt auch hier in der Programmierung. Je mehr Sie mit dem Code spielen, den Code ausführen, den vorhandenen Code lesen, um ihn zu korrigieren, desto weniger werden Sie zum Gr8-Programmierer.

Chitrank Dixit
quelle
0

Es gibt zwei nicht programmierende Bücher, die ich für entscheidend halte.

Das erste ist "Lady or the Tiger" von Raymond Smullyan. Dies ist eine großartige Sammlung von Logik-Rätseln, die eine Art Tour durch die Automatentheorie enthalten. Schickes Zeug.

Das zweite ist "Godel, Escher, Bach: Ein ewiges goldenes Geflecht" von Douglas Hofstadter, das Sie zum Nachdenken über Rekursion und Sprachtheorie bringt.

Wenn Sie gute Gewohnheiten für einen Neuling wünschen, lesen Sie "Apprenticeship Patterns" von Hoover und "The New Programmers Survival Manual" von Carter. In beiden Büchern geht es darum, wie Sie Ihre Fähigkeiten und Ihre Karriere erweitern können. Sie verfolgen unterschiedliche Ansätze, arbeiten aber gut zusammen.

Philosodad
quelle
0

Mich interessiert, wie Sie die Fähigkeiten anderer Programmierer bewerten.

Ich denke, dass spezifisches, anwendbares Wissen viel beeindruckendere Ergebnisse liefert als allgemeine Fähigkeiten. Wenn Sie bereits viel Kontext haben und möglicherweise schon ähnliche Probleme gesehen haben, können Sie die Ursache eines Problems möglicherweise sehr schnell finden. Wenn Sie bereits wissen, wie Sie eine Reihe anwendbarer Tools verwenden, können Sie möglicherweise sehr schnell Lösungen erstellen. Wenn Sie dieses Wissen noch nicht haben, aber über die erforderlichen Fähigkeiten verfügen, benötigen Sie mehr Zeit, um das benötigte Wissen zu erwerben. Wenn dies der Fall ist, brauchen Sie länger, um mehr Strecken zurückzulegen, was nicht unbedingt bedeutet, dass Sie langsamer sind.

Wenn Sie Wissen aufbauen und lernen können, Tools zu verwenden, die Ihnen später helfen, haben Sie natürlich einen Vorteil. Ich finde, dass es hier hilfreich ist, ein wenig über eine Vielzahl von Themen zu lernen, da sie sich am Ende mehr überschneiden als erwartet, und nur zu wissen, wo Sie nach den benötigten Informationen suchen müssen, kann viel Zeit sparen. Aber vielleicht bin das nur ich.

Vincent Povirk
quelle
0

Sie lernen gerne Neues und können Fehler schnell beheben. Es bedeutet, dass Sie die beiden Schlüsselelemente haben, um ein Guru zu werden: Begeisterung und Können. Aber du denkst, du findest dich nie als Experte, vielleicht brauchst du zwei Dinge mehr: Fokus und Zeit. Als Linus Torvalds beispielsweise 1991 Linux zum ersten Mal veröffentlichte, betrachtete ihn niemand als Guru. Er arbeitet immer noch jeden Tag an Linux und Sie können sein Zusammenführungsprotokoll heutzutage aus dem Git-Repository des Linux-Kernels sehen. Sein Fokus macht ihn zum berühmtesten Guru im Linux-Bereich. Zeit ist ein abstraktes Konzept. Es bedeutet, sich auf dem Laufenden zu halten, durch ständiges Üben Erfahrungen zu sammeln, Ihr Wissen an andere Menschen weiterzugeben und sich im Nachhinein zu verbessern.

Ich habe die gleiche Situation mit dir. Ich programmiere seit 15 Jahren mit einem Nicht-CS-Abschluss (EE-Abschluss) und bin immer verwirrt über meine große Lücke zum Guru in meinem Bereich. Aber ich habe den Traum, ein Guru zu werden und begann, an einem Open-Source-Projekt teilzunehmen. Denkfähigkeiten kommen aus Übung und Erfahrung. Einige Bücher mögen hilfreich sein, aber ihre Bedeutung ist hauptsächlich lehrreich. Die Denkfähigkeiten, die zu Ihnen gehören, stammen aus Ihrer eigenen Erfahrung. Fangen wir von jetzt an an!

Lerne jeden Tag
quelle