Frage

Soweit ich weiß (nicht viel werde ich zugeben), sind die derzeit populären Programmierparadigmen Objektorientiert (Java, C #, Ruby-) vs Funktions (F #). Als jemand, der meist vertraut mit dem ersten Paradigma ist, habe ich einige Fragen:

  • Kann hält ein Programmierer einfach mit einem Paradigma alle von seinem / ihrem Leben? Oder in anderen Worten, alle Probleme für einen Hammer Nagel reduziert werden?
  • Wenn nicht, welches Werkzeug für welche Art von Aufgabe geeignet? Zum Beispiel:. Webbasiertes vs Desktop, die Schaffung der schönen und ansprechenden Schnittstellen, die Daten schnell knirschen, usw.
  • Haben die Menschen immer ein neues Paradigma lernen benötigt? Für meine letzten zwei Jobs, benötigt meine Arbeitsplätze Java und C #. Gibt es Arbeitsplätze, die speziell nicht-OO-Sprachen verwenden?

Offensichtlich gibt es keine „beste“ Sprachen, aber ich frage mich, ob es die Investition von Zeit und Energie lohnt sich ein neues Paradigma zu lernen. Vielen Dank im Voraus!

War es hilfreich?

Lösung

„Oder in anderen Worten, alle Probleme für einen Hammer Nagel reduziert werden?“ Ja. Zeitraum. Jede Programmiersprache Sie wahrscheinlich laufen sind in wird wie alle anderen als vollständig sein. Es gibt tatsächlich eine formale Definition von „Vollständigkeit“ für eine Programmiersprache.

„Haben die Menschen jemals ein neues Paradigma lernen benötigt?“ Immer.

Es ist eigentlich ein Trick, um im Anschluss an die Höhen und Tiefen des „Paradigmenwechsels“. In den letzten 30 Jahren meiner Karriere habe ich gesehen, dass die Programmierung von einem relativ simplen Imperativ / Vorgehensmodell zu einer Reihe von viel reichen Modellen, die ein besseres Gleichgewicht sind zwischen Prozess und Daten.

gewachsen ist

Ich habe bemerkt, die folgende ...

Ein Teil der Antriebskraft ist die künstliche Intelligenz Gemeinschaft. Viele dieser „neuen Modellen“ begann als AI Wissensrepräsentationssysteme. Sie bekamen dort Traktion, dann sind sie in mehr Mainstream-Anwendungen rieselte.

Das Modell Entity Relationship war ursprünglich für Wissensrepräsentation, nicht Geschäftstransaktionen. Das Objektmodell, ähnlich war, für Wissensrepräsentation. Dann fand die Simulation Leute es. Jetzt ist der Rest von uns haben es.

Hier ist meine Schlussfolgerung.

Software ist Wissensrepräsentation.

Ihre Wahl von Paradigm oder Modell oder Ansatz oder Style wird auf der Antwort auf die folgende Frage zugrunde:

"Wie kann ich das am besten Problem dar?"

Wenn das Problem Objekte und Beziehungen hat, OO. Wenn das Problem hat Algorithmen und Transformationen, Karten, Filter und reduziert, funktional. Wenn das Problem ist dynamisch, verändern und flexibel, dynamisch. Wenn das Problem ist statisch und schnell skalieren wird, Static.

Andere Tipps

Es lohnt sich alternative Paradigmen Lernen (OO, funktional, prozedurale, dynamisch, etc), weil es denken, wird Ihnen helfen, über die Probleme auf unterschiedliche Weise.

Zum Beispiel, denken über den Unterschied in eine Baumdurchlauf in linearer Weise zu lösen (die erste Art, wie ich es immer tat) im Vergleich zu Rekursion. Oder Googles Kombination von Karte und reduzieren sie Index im Internet zu helfen.

Neue Wege für alte Probleme angewandt denken helfen, einige der schwierigsten Probleme lösen kann.

Das Paradigma ist unabhängig von einer Sprache. Sie können in OO-Stil in C (werfen Sie einen Blick auf GTK) entwickeln. Als ich in Java programmieren, verwende ich hauptsächlich funktionalen Stil.

Es lohnt sich, so viele Paradigmen wie möglich zu kennen. Einige Probleme sind trivial in einem Paradigma zu lösen und erfordern empfindlichen Crafting in einem anderen.

Als (triviales) Beispiel vergleichen quicksort Implementierungen in Java und Ocaml, oder besser noch, Haskell, auf dieser Seite: http://www.rosettacode.org/rosettacode/w/index.php?title=Quicksort

(Das bedeutet nicht, funktional besser ist. Es gibt Probleme besser mit OO gelöst).

  

Können alle Probleme für einen Hammer Nagel reduziert werden?

Err ja. Sie können mit nur einem Hammer Probleme lösen. Es ist nur Sägen, dass Tür in der Hälfte dauert viel länger mit ihm.

  

Haben die Menschen jemals ein neues Paradigma lernen benötigt? Für meine letzten zwei Jobs, benötigt meine Arbeitsplätze Java und C #. Gibt es Arbeitsplätze, die speziell nicht-OO-Sprachen verwenden?

Entwickler müssen dies tun, alle 15-20 Jahre oder so.

Es gibt auf jeden Fall eine ganze Industrie von kleinen Unternehmen mit Access-basierten Systemen mit prozeduralen VBA geschrieben. (Und ich glaube, ich habe für die meisten von ihnen arbeiteten). Klassische ASP-Entwickler mit ASP.NET zu lernen. Perl-Entwickler lernen Python. Batch getriebene Entwicklung wich ereignisgesteuerte Entwicklung.

Ich denke, dass Sie Antworten über das ganze Brett finden. Je mehr ich arbeite, desto mehr finde ich, dass es „nützlich“ ist, einige der anderen zu kennen. als C # / VB / SQL Server-Entwickler Ich finde es hilfreich für mich da draußen ein wenig über F # und einige der anderen Sprachen zu lernen, nur ein breit gefächertes Engagement zu bekommen, um wirklich herauszufinden, was Werkzeug das richtige ist ...

Die dynamischen Sachen schrecken den Mist aus mir, aber Ruby on Rails ist bei weitem das beste Entwicklungssystem I für Web-Sachen gesehen habe. Ich fühle mich nicht wohl damit für ein wirklich großes, schweres Wartungsprojekt mit, obwohl, weil es zu einfach ist, die Bedeutung des bestehenden, kompilierte fertigen Code zu ändern. Auch zu einfach für eine Person, die Codierung Stil in eine neue Sprache zu machen.

Dynamisch / Scripting ist auch gut für Systemadministratoren und alle, die zu wissen, wer ein Linux-System läuft. Schreibe eine schnelle Skript in BASH oder Ruby schlägt die Hölle aus versuchen, die gleiche Funktionalität in Java oder C ++.

zu implementieren

OO macht es viel einfacher, große Mengen an Code zu verstehen. Wenn Sie ein großes Team oder mehr großen Teams haben und müssen einen Überblick schnell geben, OO macht es viel einfacher zu beschreiben und einen bestimmten Teil der Funktionalität zu isolieren. Ich sollte richtig codiert OO sagen!

Ich verstehe funktional für Multi-Thread-Programmierung ist gut, da alles unveränderlich zu sein scheint.

Die Entwicklung der Konstruktion und Architecting Fähigkeiten mit OOP im Auge ist das wünschenswerteste Skillset für eine große Sprache Agnostiker Karriere.

Die benifit, wenn Sie Code in Oops sowohl für die anderen Teammitglieder da draußen ist und für die Organisation als Ganzes. Da der Code wird für alle verständlich sein, und wenn die Entwickler die Arbeit beenden, müssen Unternehmen tun viel befürchten. Im anderen Fall, wenn Sie folgen funktionalen Stil wird es wirklich schwer für andere zu verstehen, was Sie getan haben.

Wie die meisten anderen gesagt haben, können Sie in der Regel jede Sprache verwenden, jedes Problem zu lösen und Sie können in der Regel im Stil eines Paradigmas in einem anderen schreiben.

Wenn Sie sich die Zeit nehmen zu lernen, die verschiedene Paradigmen zu verwenden, wie sie gemeint sind dann Sie verschiedene Dinge über Wissensrepräsentation und Problemlösung lernen zu tun, die in hilfreich sein können, was auch immer Paradigma Sie in Zukunft verwenden.

Zwar gibt es einige Ausrichtung zwischen Paradigmen und Domänen ist es normalerweise am besten, um eine Sprache zu wählen, basierend auf den Besonderheiten der Umgebung, um Ihre Software in dem Betrieb benötigt.

  • Braucht es auf mehreren Desktop-Plattformen laufen zu lassen?
  • Wenn es eine Desktop-Anwendung ist es eine native Look haben müssen und fühlen?
  • Ist eine schnelle Wiederholung von Mustern und Modellen wichtig
  • Wie wird es gepflegt werden?
  • Welche 3rd-Party-Systeme braucht es mit zu betreiben?
  • Vorhandene Programmierkenntnisse / Fähigkeiten / Einstellungen.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top