2009-05-18 22 views
5

FrageTipps für grokking deklarative Programmiersprachen?

Wie bereits erwähnt, haben Sie irgendwelche Tipps grok/verstehen/get-your-head-um deklarative Programmiersprachen zu helfen?

Oder ist es einfach ein Fall, die Sie haben sich in die Sprache einzutauchen und es ist Syntax, bis es in sickert, bis Sie, dass goldenen Moment, wo Sie Get Es. Dies ist nicht wirklich eine Option, da ich mich nicht länger tagelang in einem Raum einsperren kann und mehr als ein halbes Dutzend verschiedener Bücher über das Thema (Verantwortung, was sie sind und alles)

Also, irgendwelche Tipps oder Tricks, die dir geholfen haben, wenn du dich mit deklarativen Sprachen beschäftigt hast, irgendwelche Erkenntnisse, die du weitergeben kannst?

P.S. Ich werde persönlich die erste Antwort upvote, die sagt "Shutup und legte die Arbeit".

Hintergrund

war ich 13 Jahre alt ich, als ich anfing, wringen Code (Basis, auf meine Schwestern Oric-1).

Seitdem habe ich mit vielen neuen Konzepten und vielen verschiedenen Sprachen gearbeitet, wobei ich alles auf einmal genommen habe und mir schnell genug die Oberhand gewändet habe. Objektorientierung? Keine Mühe. Ereignisgesteuerte Paradigmen? Rauch mir einen Kipper, ich komme zum Frühstück zurück.

Eule, Mfc, ActiveX, Vb3, 4, 5 & 6, VB.Net, Pascal, Delphi, C, C++ & C#. Niemand hat mir im Weg gestanden, zumindest nicht lange.

Aber vor kurzem hat meine perfekte Punktzahl ein bisschen eine Schlägerei genommen.

Vor ein paar Wochen warf ich mich in Xaml, und Leute, ich bin mehr sinken als schwimmen.

Ich denke, mein Hauptproblem ist, dass es deklarativ ist. Alle meine anderen Programmierkenntnisse sind prozedural. Ich habe diesen Block zuvor mit MSBuild getroffen, ich kann Beispiele kopieren, wie man MSBuild-Dinge zum Laufen bringt, aber es wäre verloren, etwas von Grund auf neu zusammenzusetzen.

Zurück zu Xaml, derzeit werde ich wahnsinnig versuchen, Auslöser zu Eigenschaften zu verdrahten und den Effekt zu bekommen, den ich brauche.

Ich kann meine spezifische Xaml Frage hier früh genug posten. Für jetzt stelle ich diese allgemeine Frage der "deklarativen Programmierung".

P.S. Nein, ich bin eigentlich nicht so frech. Ja, ich stolperte wie beim ersten Mal, als ich OO traf und das erste Mal, dass ich eine ereignisgesteuerte Benutzeroberfläche schreiben würde (VB3 unter Windows 3.11).

bearbeiten

Es beginnt die Hartnäckigkeit zu sinken in, die mich in diesem Bereich weit gekommen zahlt sich aus, es dauert nur so viel Fracking Zeit!

. . . Ich denke, ich werde zu alt für dieses Zeug. . .:)

+1

Ihre Schwester hatte eine Oric? Sie muss eine sehr ungewöhnliche Frau sein! –

+0

Grokking, mit 2 k;) – Carra

+0

Basic? Entschuldigung - du bist FUBAR ... :) – xtofl

Antwort

3

Ich musste XSL (oder XSLT, wie Sie wünschen) eine Menge zu Beginn des Jahrhunderts zu lehren :), und es ist eine andere Welt, wirklich. Dies ist jedoch die Grundlage für den Paradigmenwechsel: Sie müssen erkennen, dass deklarative Sprachen wirklich anders sind. Der wichtigste Rat, den ich habe, ist, die Lösungen anderer Leute zu studieren, die Arbeit reinzulegen und wirklich zu versuchen, in FLOW zu denken. Das Schlimmste ist, dass es in XSL ein "Wenn" und ein "Anderes" gibt, aber normalerweise gibt es einen anderen Weg, Dinge zu tun.

Im Gegensatz zum Lernen von OO, in XSL (oder einer deklarativen Sprache, nehme ich an) werden Sie nicht tun, was Sie versuchen zu tun, es sei denn, Sie tun es deklarativ.

Also die Antwort ist teilweise, "halten Sie die Klappe und machen Sie die Arbeit", wie Sie vorschlagen, aber der wichtigere Punkt ist zu erkennen, dass ein Großteil der Arbeit Ihren Kopf rund um den Paradigmenwechsel. Die wirkliche Antwort lautet also: "Halten Sie Ihre Augen offen für den Paradigmenwechsel." Sie müssen aufhören, im Fluss zu denken und anfangen, in Regeln zu denken, die in beliebiger Reihenfolge feuern können ... wenn sie richtig gemacht werden, ist es egal, wann sie feuern. Wenn du endlich in Regeln denkst, anstatt WANN es passiert, beginnst du den Wechsel zu machen.

+0

+1 für den guten Rat. . . aber auch für "die Klappe halten und die Arbeit machen". Danke Kumpel :) –

+0

Sho 'Ding, viel Glück mit diesem ... –

+0

Auswahl als richtige Antwort, für den hilfreichen Rat. Danke Kumpel. –

0

Ich finde den einfachsten Weg zu "grok" eine Sprache ist einfach zu starten, es ausschließlich für all Ihre Codierung zu verwenden. Mit einer völlig neuen Sprache würde ich sagen, für mich ist die Lernkurve ungefähr 2 Wochen lang ungefähr 4-5 Stunden pro Tag zu programmieren. Nach diesem Punkt "klickt" es plötzlich und Sie können sich weniger auf Handbücher und Dokumente verlassen.

+0

Ich stimme zu, aber ich bin auf der Suche nach Lektionen, die woanders gelernt wurden a.k.a "Short cuts", die in aller Ehrlichkeit glaube ich nicht existieren. Trotzdem tut es nicht weh zu fragen :) –

+1

Es gibt wirklich keine Abkürzungen (außer "Cheatsheets" und selbst wenn es Sie gäbe, würden Sie sich selbst betrügen, indem Sie nicht wirklich die Sprachnuancen verstehen. – ennuikiller

2

Finden Sie einige Beispiele mit Erklärungen zum "Warum" von jemandem, der die Sprache wirklich kennt. Es lernt die Muster und Redewendungen, die einen Unterschied machen.

Ich vermute, Sie versuchen, im deklarativen Land imperative Dinge zu tun, was bedeutet, dass Sie in Schritten denken. Schreiben Sie den Datenfluss in Bezug auf die erforderlichen Eingaben + zustandslose Funktion dieser Eingänge und sehen Sie, ob das hilft.

Probieren Sie eine funktionale oder funktionale Sprache wie ML oder Scheme.

1

Ich weiß nicht, was Ihre speziellen Probleme mit Xaml sind (und ich habe es nicht selbst verwendet), aber ich habe festgestellt, dass bei Verwendung XML-basierten Technologien wie XSLT, ein wenig LISP oder Scheme Erfahrung gehen kann langer Weg. Vielleicht möchten Sie mit dem hervorragenden System von http://www.plt-scheme.org kostenlos spielen.

0

Ich nahm eine Klasse in der Schule (Programmiersprachen). Es fühlte sich ziemlich so an, als würde ich meinen Kopf wiederholt gegen eine Ziegelmauer schlagen, aber ungefähr 3/4 des Weges durch die Klasse wurde mir klar, dass die Mauer nicht mehr da war; Ich hatte mir für ein paar Wochen den Kopf gegen nichts geschlagen. Es war ein ziemlich surreales Gefühl.

Ich denke jeder andere Weg wird nicht den gleichen Charme haben. Lies Gödel, Escher, Bach; höre viel von Emerson, Lake und Palmer und Kaikhosru Sorabji; rauche etwas Ganja und lege die Zeit ein.

+0

Was war die Klasse? –

1

Betrachten Sie Ihre Lieblings “programmer ignorance” pet peeve. Das erste Code-Snippet ist offensichtlich prozedural. Im zweiten Schnipsel Sie eine deklarative Aussage machen dass für den Prozentsatz gültig zu sein, es i zwischen 0 und 100.

Also würde sein muss erraten Sie deklarative Programmiersprachen haben werden, solange Sie keine Schwierigkeiten grokking arbeite hart genug daran ... there is no royal road to geometry

+1

+1 um meinen erfolgreichsten Beitrag gegen mich zu drehen.Nizza :) –

1

Ich kann sehen, wo dies deine Meinung weht. All diese Sprachen, die Sie auflisten, sind in der Tat ziemlich ähnlich (prozedural).

Sobald Sie das bekommen, ich hoch ermutigen Sie, ein functional language auch zu lernen. Sie können es auch schwierig finden, aber das Lernen wird Ihre allgemeinen Programmierfähigkeiten sehr unterstützen. Sie werden eine ganze neue Trickkiste haben (sogar in prozeduralen Sprachen), und Sie werden nie wieder Angst vor einer Rekursion haben.

1

Wie Binary Worrier, hatte ich eine lange Geschichte mit Dingen wie C, C++, MFC, usw. und bin auf XAML, WPF und C# gekommen. Ich hatte einen Abstecher durch HTML, Javascript und XSLT, was mir sehr geholfen hat, mich auf XAML vorzubereiten.

Die Grundidee hinter XAML ist recht einfach - es ist alles, was Sie zeigen , nicht das, was Sie tun. Der schwierige Teil bei XAML ist, dass es nur eine Tonne von Implementierungsdetails zu lernen gibt und Sie lernen, sie alle gleichzeitig zu lernen, um in der Lage zu sein, viel von allem zu erledigen.

Ich könnte wahrscheinlich hilfreicher sein, wenn die Frage spezifischer wäre.

1

"Bei der Programmierung geht es darum, dem Computer eine Folge von Anweisungen zu geben."

Die meisten Programmierer reagieren mit Gleichmut auf diese Aussage. Es ist fast wie ... "Duh?"

Aber der Glaube an diese Aussage ist, was Menschen dazu bringt, Probleme zu haben, andere Programmierparadigmen zu verstehen. Es ist nicht wahr, und war schon sehr lange nicht mehr. Um zu einem besseren Verständnis der Programmierung zu gelangen, können viele davon profitieren, darüber nachzudenken, warum diese Aussage falsch ist.

Auch wenn Sie in reiner Assembly programmiert haben, würden moderne Prozessoren Ihre Anweisungen neu anordnen, Verzweigungsvorhersage durchführen und versuchen, mehrere potenziell copependente Anweisungen gleichzeitig auszuführen. Auf diese Weise denken sie in logischen Abhängigkeiten, nicht in Sequenzen. Die Sequenz-Metapher ist die falsche Vorstellung, dass ein Befehl logisch von allem abhängt, was ihm voranging. Wenn dies der Fall wäre, wäre der beste Weg, über Programme nachzudenken, der Kontrollfluss. Aber es ist nicht wahr.

Es ist nicht nur eine deklarative Programmierung, die nicht zu dieser Metapher passt, sondern auch parallele und asynchrone Programmierung.