Emacs und "selbstverstärkende Leistung"


14

Kurz gesagt, meine Frage an Sie, die Emacs-Benutzer, lautet: Haben Sie diese "sich selbst verstärkende Leistung" erreicht, über die Steve Yegge spricht ?

Emacs hostet sich selbst: Durch das Schreiben von Dingen wird die Umgebung selbst leistungsfähiger. Es ist eine Rückkopplungsschleife: ein rekursiver, sich selbst verstärkender, multiplikativer Effekt, der auftritt, weil Sie die Umgebung verbessern, in der Sie Verbesserungen erstellen.

Haben Sie wirklich das Gefühl, dass Sie durch die Verbesserung Ihres Emacs 10-mal produktiver wurden und Ihre Produktivität weiterhin exponentiell zunimmt, und so weiter und so fort?
Haben Sie einige Beispiele / Erfahrungen zu teilen?

Ich habe sowohl Emacs als auch Vim für die Entwicklung verwendet (ich halte mich derzeit an Vim), meine .emacsund .vimrcsind beide so konfiguriert, dass sie meinen Bedürfnissen entsprechen, und ich schätze die Leistungsfähigkeit dieser beiden Editoren. Aber ich habe diese "sich selbst verstärkende Schleife" des Emacs nicht erlebt, noch jemanden getroffen, der dies tat (natürlich könnte dies daran liegen, dass ich kein echter Hardcore-Emacser bin und noch nicht so viele Emacser getroffen habe).

Zum Beispiel benutzte der Typ neben mir bei Facebook Vim und der Typ neben ihm Emacs. Beide waren verdammt schnell und produktiv, und ich schreibe dies nicht dem von ihnen verwendeten Editor zu, sondern ihrer eigenen Intelligenz und Einstellung.

Trotzdem würde ich mich über erstaunliche Beispiele von Emacs-Befürwortern freuen, die mich zur Kirche von Emacs zurückbringen würden.

Antworten:


15

10 x produktiver ? Unwahrscheinlich. Ich denke eher, dass die multiplikativen Faktoren eher 1,1 entsprechen, was sich nach einer Weile summiert.

Worüber Steve Yegge spricht, ist wirklich eine Reflexion darüber, ein Experte für Emacs zu sein, und diese sind sehr selten. Menschen, die diesen multiplikativen Effekt erzielen, passen ihre Emacs-Erfahrung aktiv an, indem sie elisp schreiben, um den Emacs an ihre spezifischen Bedürfnisse anzupassen. Zum Beispiel schrieb Yegge Ejaks . Wenn Sie das Yegge-Zitat interpretieren, müssen Sie Emacs unbedingt anpassen, um die Anpassung / Erweiterung von Emacs zu vereinfachen.

Im Folgenden werden die verschiedenen Kompetenzstufen für Emacs beschrieben:

  • Ein Anfänger kann Emacs ausführen, den Cursor bewegen, einige Änderungen vornehmen und Emacs beenden.
  • Ein fortgeschrittener Anfänger kann einige grundlegende Anpassungen vornehmen .emacsoder hat Teile anderer Leute vollständig in die eigenen kopiert .emacs. Sie wissen, wie man globale Tastenzuordnungen erstellt, requirePakete einbaut und Nebenmodi aktiviert.
  • Kompetente Emacs-Benutzer haben große .emacsDateien, die möglicherweise in mehrere Dateien aufgeteilt sind. Sie laden nicht-standardmäßige Pakete herunter und verwenden sie, wissen, wie man Dokumentation für Befehle und Modi findet, sehen sich die vorhandenen Tastenkombinationen an und sind mit den Unterschieden zwischen Neben- und Hauptmodi vertraut. Kompetente Benutzer lassen im Allgemeinen eine einzelne Emacs-Instanz tagelang / wochenlang laufen und schreiben, kompilieren, führen und debuggen Programme von ihrem Emacs aus.
  • Erfahrene Benutzer können problemlos Emacs Lisp schreiben, eigene interaktive Befehle erstellen und kleinere Modi schreiben. Erfahrene Benutzer sehen sich den Emacs-Lisp-Code an, um ein besseres Verständnis der von ihnen verwendeten Modi zu erlangen, den Elisp-Debugger zu verwenden und häufig minderwertige Prozesse (Shells, Lisp-Prozesse, ...) zu verwenden.
  • Erfahrene Emacs-Benutzer schreiben neue Hauptmodi von Grund auf neu, sehen und modifizieren den C-Code für Emacs, wissen, was rekursive Bearbeitung ist, und verwenden ihn. Verwenden Sie die prozessübergreifende Kommunikation, um Emacs in externe Tools zu integrieren. Sie lesen auch die Mailingliste von emacs-devel .

Und da Sie nach persönlicher Erfahrung fragen, finden Sie hier Beispiele meiner persönlichen Aktivitäten, die das Gefühl vermitteln, produktiver zu sein. Hinweis: Ich arbeite zufällig in einem Unternehmen, in dem wir noch lange nicht auf dem neuesten Stand der Entwicklungsumgebungen sind. Beispielsweise verwenden wir immer noch CVS.

  • Ich habe Emacs in das Bug-Tracking-Tool integriert: Wenn ich Commits vornehme, protokolliert es den Dateinamen und die Version in den Feldern für den Bug. In Emacs kann ich meine Bugs anzeigen, zuweisen, beheben usw.
  • Ich habe eine Brücke zwischen meinem Produkt (Tagesgeschäft) und Emacs geschrieben, die mein Produkt zu einem minderwertigen Prozess macht und es mir ermöglicht, Änderungen am Quellcode im laufenden Betrieb vorzunehmen.
  • Ich habe das TAGS-Handling um Find-File-In-Tags erweitert, die eine Reihe von Verknüpfungen bieten, die zu meiner Entwicklungsumgebung passen.
  • Ich habe einen Modus geschrieben, der Regressionsergebnisse erfasst und es mir ermöglicht, mit minimalem Tastendruck zu Fehlern zu springen, Protokolldateien zu untersuchen, einen oder mehrere Tests erneut auszuführen oder einen Debug-Lauf zu starten.
  • Mein wöchentlicher Statusbericht (ja, ich benutze Emacs für E-Mails) wird automatisch generiert, indem ich die Commits verwende, die ich in der Woche gemacht habe.

Das sind Änderungen, die ich vorgenommen habe, um Emacs speziell an meine Umgebung und meinen Workflow anzupassen.

Bin ich 10-mal produktiver als andere in meiner Umgebung? Nein.

Für meine tägliche Arbeit gibt es jedoch viele Aufgaben, die ich mit ein paar Tastenanschlägen erledigen kann, die andere viel länger in ihrer nicht angepassten Umgebung erledigen müssen, und die im Allgemeinen erfordern, dass sie zwischen ihrem Editor und einem Webbrowser oder einer Shell wechseln .

Sind sie erstaunliche Beispiele? Nein. Ich bin sicher, dass vieles von dem, was ich getan habe, bereits in Visual Studio verfügbar ist . Wirst du mit meinem Artikel wieder zur Kirche von Emacs zurückkehren? Wahrscheinlich nicht.

Wenn Sie jedoch ein Verhaltensmuster in Ihrer Entwicklungsumgebung feststellen und es juckt, dass Sie sagen: "Ich sollte X / Y / Z wirklich nicht immer wieder machen müssen, wenn ich nur könnte ...", dann Ich empfehle, Emacs zu verwenden, um diesen Juckreiz zu kratzen. Dieser Kratzer könnte der erste Schritt sein, über den Steve Yegge spricht.

Kleinere Anmerkung: Ich weiß nicht, dass viele (irgendwelche?) Wirklich erfahrene Emacs-Benutzer die Stapelüberlauf-Sites aktiv nutzen oder zumindest keine Emacs-bezogenen Fragen beantworten. Ich sage, dass auf der Grundlage der Top-Benutzer für die Emacs und Elisp- Tags auf Stapelüberlauf.


+1, Gute Anwendung des Dreyfus-Fertigkeitsmodells auf Emacs-fu. Für Leser, die mit Dreyfus nicht vertraut sind: en.wikipedia.org/wiki/Dreyfus_model_of_skill_acquisition
limist

Hinweis: Ich persönlich halte mich für einen sehr erfahrenen Emacs-Benutzer, aber ich passe meinen Emacs nicht an, nur weil ich auf so viele Systeme stoße, dass das Anpassen des Standard-Setups kontraproduktiv wäre, anstatt nur die Arbeit zu erledigen.

11

Diese Beweise sind natürlich anekdotisch, aber Ihre Frage erfordert ausdrücklich anekdotische Beweise.

Ich bin ein Student, der in einem akademischen Labor forscht, in dem es nicht nur um wissenschaftliches Rechnen geht, sondern auch um Schreiben. In einer solchen Umgebung (zB Python, SQL, spezielle Befehlszeilenprogramme für den akademischen Bereich, Textdateien, LaTeX / BibTeX) machte das Erlernen von Emacs ungefähr den Unterschied zwischen einer Handkelle und einem Baggerlader. Nach einem Jahr der Emacs (bei dem ich mich als solide Kompetenz mit einem Zeh eintauchen in Proficient bezeichnen würde)), Bin ich gespannt auf Probleme, die meine Labkameraden befürchten. Nicht weil sie faul sind und ich fleißig bin, sondern weil es Spaß macht, Berge mit einem Löffelbagger abzureißen und mühsam mit einer Kelle an einem Berg zu kratzen. Mindestens zweimal hatte mein Team angefangen, über komplizierte Änderungen am Format des Berichts zu streiten, nur um festzustellen, dass diese Aufgabe bereits erledigt war, bevor sie überhaupt mit der Diskussion darüber fertig waren, wer sie zu erledigen hatte. Regexp ersetzen + eingebettetes Elisp.

Ja, im ersten Sinne hat mich der Emacs viel produktiver gemacht.

Offenbar fragen Sie nach Produktivitätsgewinnen zweiter Ordnung: Ergeben sich meine Renditen aus Emacs zusammen? Obwohl ich mich nicht bewertet werden würde total Geübt , geschweige denn Yegge , ich glaube , ich fange an den Fuß der exponentiellen Kurve zu sehen, und dass meine Verwendung von Emacs weiter macht emacsing noch produktiver. Einige kurze, anekdotische Statistiken aus dem Repo, um dies zu quantifizieren:

  • In einem 7-köpfigen Team war ich für mehr als die Hälfte der Commits verantwortlich. Bereinigt um das Dienstalter bin ich immer noch fast doppelt so oft verpflichtet. Nicht weil ich fast doppelt so gut bin, sondern weil der Emacs die Versionskontrolle für mich übernimmt. Da ich problemlos ein Commit durchführen, aktualisieren und zusammenführen kann, checke ich mit kleineren diskreten Blöcken ein, wie wir es alle tun sollten. Das bedeutet aber, dass ich mich freier fühle, "größere Risiken" einzugehen (ich sollte erwähnen, dass wir experimentellen Code für wissenschaftliche Forschung schreiben, nicht für die Produktion), was bedeutet, dass ich mehr über Programmierung und mein Fach lerne.

  • Im letzten Bericht, den wir geschrieben haben, hat mir svn blame mitgeteilt, dass ich für mehr Zeilen verantwortlich war als dreimal die beiden anderen Autoren zusammen . (Das liegt nicht nur daran, dass ich das letzte Commit hatte. Ich war eine Weile neugierig, also habe ich angefangen, es zu verfolgen und die Ergebnisse waren im Verlauf der Versionsgeschichte ziemlich stabil.) Weil ich 6-mal schneller schreibe? Nein, weil Emacs eine Kettensäge für Text ist. Dies bedeutet, dass ich die Art von LaTeX-Operationen durchführen kann, die ich vorher noch nie versucht hätte. Das bedeutet, dass ich mehr über LaTeX verstehe, was mich in Zukunft noch produktiver macht.

  • Die Dokumentation (sowohl für den Code als auch für interne Forschungsnotizen) stammt zu 100% von mir. Weil es meinen Mitschülern nicht um Dokumentation geht? Nun, es hat mich auch nicht wirklich interessiert, bevor ich den Org-Modus gefunden habe. Während ich in diesen Dingen normalerweise Typ B bin, hat sich der Org-Modus zu einer milden Sucht entwickelt. Durch den sofortigen Export von Org-mode in angenehm aussehendes HTML und LaTeX wurden alle Hindernisse für eine verantwortungsvolle Dokumentation beseitigt und in eine Art Spiel verwandelt. Also mache ich es jetzt. Wenn es nicht so wäre, würde ich es nicht tun, oder zumindest würde ich es fürchten und abschrecken und es geistige Energie abgeben.

Andere Kommentatoren behaupten, dass der Kausalzusammenhang genau umgekehrt sein könnte: Vielleicht belohnt Emacs das Hochproduktive, was der Hypothese, dass der Medianbenutzer wahrscheinlich Gewinne genießen wird, das Vertrauen rauben würde. Ich könnte auch eine Art sich selbst erfüllenden Placebo-Effekt vorschlagen: Ob mich Emacs produktiver gemacht hat oder nicht (und wir werden es natürlich nie erfahren, da ich keinen identischen Zwilling habe , der Emacs nicht gelernt hat), habe ich Ich habe mit Sicherheit eine Offenbarung in meiner Beziehung zu strukturiertem Text erlebt. Ich bin aufgeregt, Emacs zu verwenden, was bedeutet, dass ich es mehr benutze, was bedeutet, dass ich mehr darüber lerne, aufgeregter werde usw. Als ich den BibTeX-Modus entdeckte, hatte ich das Gefühl, ich hätte gerade bei meinem ersten Date ein Mädchen ausgefragt.

Falls Sie das verpasst haben: Emacs hat mich bei dem Gedanken, bibliografische Datenbanken zu bearbeiten, schwindelig gemacht. In meiner Arbeit ist das etwas wert, denke ich.


8

Zum Beispiel benutzte der Typ neben mir bei Facebook Vim und der Typ neben ihm Emacs. Beide waren verdammt schnell und produktiv, und ich schreibe dies nicht dem von ihnen verwendeten Editor zu, sondern ihrer eigenen Intelligenz und Einstellung.

Diese Bemerkung ist sehr zutreffend und gilt in gewisser Weise für jede Art von Produktivitätstipps.

Menschen, die daran interessiert sind, ihre Produktivität zu steigern / zu optimieren, sind aufgrund ihres Fokus oder ihres Verhaltens im Leben in der Regel produktiver, unabhängig von der Effizienz der Produktivitätsspitze.

Es könnte zusammengefasst werden als: "Sie sind kein besserer Entwickler, weil Sie Emacs oder Vim verwenden, aber die Art von Leuten, die engagiert genug sind, um diese Tools zu beherrschen, sind in der Regel gute Entwickler" [1].

  1. Dies ist eine schreckliche Verallgemeinerung, es ist also keine absolute Wahrheit und bedeutet sowieso nicht viel (was ist ein guter / schlechter Entwickler? Usw.)

4

Ich bin jetzt seit ungefähr 20 Jahren ein Emacs-Benutzer, und ich muss sagen, dass ich diesen Punkt noch nicht erreicht habe.

Um zu dem "Emacsvana" zu gelangen, von dem er spricht, muss man sich wirklich zu einem Elisp- Experten machen. Ich habe ein bisschen gearbeitet, aber meine Fähigkeiten enden so ziemlich damit, dass ich einen neuen Modus konfigurieren kann, den jemand anderes geschrieben hat. Der Versuch, das Elisp eines anderen zu debuggen (oder es zu verbieten), liegt etwas außerhalb meiner Möglichkeiten, und mein eigenes von Grund auf neu zu schreiben, ist nicht einmal ein Gedanke.

Dies ist von jemandem, der lisp bereits verwendet hat und über 20 Jahre Berufserfahrung in der Softwareentwicklung hat.

Vielleicht bin ich nur ein Wuus oder so, aber ich vermute, dass nur sehr wenige Emacs-Benutzer jemals den Punkt erreichen, von dem er spricht.

Daran ist wirklich nichts auszusetzen. Ich kann Makros erstellen, was mich mit Emacs produktiver macht als mit jedem anderen Texteditor. Gelegentlich weit mehr als 10x so produktiv. Es macht mich jedoch nicht besser als jemanden, der vi gleich gut kennt (da es auch Makros kann).


Betreff: Ihr Text in Fettdruck. Ich wäre viel mehr überrascht, wenn die Mehrheit der 20-jährigen Emacs-Veteranen nur wüsste, wie man das seltsame Makro ausführt. Es scheint für alle Dinge ein Gräuel zu sein, dass Emacs sich seines Potenzials auf so glücklose Weise nicht bewusst ist.
ocodo

4

Nein, das habe ich nicht und ich habe noch nie von jemandem gehört, der es getan hat. Ich glaube nicht, dass es passiert. Ich denke, Steve Yegge macht das, was beliebte Blogger tun: Er macht eine kontroverse, übertriebene Aussage, um seinen Standpunkt zu verdeutlichen und sichtbarer zu werden. Ich glaube nicht, dass er es so meint. Was er wahrscheinlich mitzuteilen beabsichtigt, ist Folgendes: "Emacs ist anfangs sehr effizient, und wenn man es sehr anpasst, lernt man, wie man noch effizienter damit umgeht, was großartig ist, mmm-kay?"

Wenn er das nur gesagt hätte, wären Sie nicht verwirrt und er hätte nicht halb so viele Leser.


4

Betrachten Sie es so: Emacs und Vim zeichnen sich durch Textoperationen und die Automatisierung sich wiederholender Tastenanschläge aus, ganz zu schweigen von der Navigation durch große Textblöcke. Das ist es, worüber Yegge spricht, wenn auch auf eine etwas predigendere Art und Weise.

Wenn Sie eine 10000-Zeilen-Datei haben, in der Sie am Anfang jeder Zeile eine Zeilennummer hinzufügen müssen, können Sie auch einen halben Tag damit verbringen, diese manuell im Editor auszuführen.

Oder starten Sie ein Makro oder verwenden Sie eine eingebaute Emacs-Funktion für diese Art von Dingen. Dann sparen Sie einen halben Arbeitstag und sind mehr als 10x produktiv.

Es geht darum, Wiederholungen zu erkennen und zu beseitigen. Dies erfordert Intelligenz, Erfahrung, Übung und Geschick, sodass nicht jeder, der Emacs verwendet, Produktivitätsvorteile sieht.


Oder Sie können eine einfache Textverarbeitung durchführen sedund sich den Rest des Tages frei geben.
Josh K

@ Josh K: Oder Perl oder awk oder Shell mit Paste. Welches Werkzeug Sie auch am besten kennen.
Zan Lynx

Selbst ein C-Programm zu schreiben, würde nicht länger als 5 Minuten dauern
user281377

2
Emacs eignet sich nicht für den Umgang mit SEHR großen Dateien. Wird zu träge.

2

Ich kenne mich mit "N-mal schneller" nicht aus, aber eine sorgfältige Hinzufügung von Utility-Funktionen kann Emacs ziemlich gut darin machen, Vorlagen auszufüllen. Kombinieren Sie das mit ein bisschen Zielsprachenbewusstsein und Sie können Dinge tun wie "Sagen Sie Emacs, dass Sie eine Funktion erstellen möchten, Sagen Sie ihr die Eingabeargumente (Typen, wenn die Sprache Typinformationen erfordert) und den Rückgabewert. Lassen Sie Emacs ein Skelett für weitere erstellen Einfüllen".

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.