Emacs e "performance autorinforzante"


14

In breve, la mia domanda per voi utenti hardcore di Emacs è questa: avete raggiunto questa "prestazione autorinforzante" di cui parla Steve Yegge ?

Emacs è self-hosting: scrivere le cose in esso rende l'ambiente stesso più potente. È un circuito di feedback: un effetto ricorsivo, autorinforzante e moltiplicativo che si verifica perché stai migliorando l'ambiente che stai utilizzando per creare miglioramenti.

Credi davvero che il potenziamento dei tuoi Emacs alla fine ti abbia reso 10 volte più produttivo e che la tua produttività continui ad aumentare esponenzialmente, e così via e così via?
Hai alcuni esempi / esperienze da condividere?

Per quanto mi riguarda, stavo usando Emacs e Vim per lo sviluppo (attualmente attenersi a Vim), i miei .emacse .vimrcsono entrambi abbastanza configurati per soddisfare le mie esigenze e apprezzo il potere di entrambi questi editor. Ma non ho sperimentato questo "circuito di auto-rinforzo" di Emacs, né ho incontrato qualcuno che l'ha fatto (ovviamente, questo potrebbe essere perché non sono davvero un vero Emacser, e non ho ancora incontrato così tanti Emacser).

Ad esempio, su Facebook, il ragazzo accanto a me stava usando Vim e il ragazzo accanto a lui stava usando Emacs. Entrambi sono stati rapidi e produttivi da morire, e lo attribuisco non all'editore che stavano usando, ma alla loro intelligenza e attitudine.

Ma comunque, sarei felice di vedere esempi sorprendenti dai sostenitori di Emacs che mi avrebbero riportato alla Chiesa di Emacs.

Risposte:


15

10 volte più produttivo ? Non probabile Tendo a pensare che i fattori moltiplicativi siano più simili a 1.1, che si sommano dopo un po '.

Ciò di cui parla Steve Yegge è davvero una riflessione sull'essere un esperto di Emacs, e quelli sono molto rari. Le persone che stanno ottenendo questo effetto moltiplicativo stanno attivamente personalizzando la loro esperienza Emacs scrivendo elisp per personalizzare Emacs in base alle loro esigenze specifiche. Ad esempio, Yegge ha scritto ejacs . L'interpretazione della citazione di Yegge implica che stai personalizzando Emacs per semplificare la personalizzazione / estensione di Emacs.

Ecco come analizzerei i vari livelli di competenza applicati a Emacs:

  • Un principiante sa come eseguire Emacs, spostare il cursore, eseguire alcune modifiche, uscire da Emacs.
  • Un principiante avanzato sa come inserire alcune personalizzazioni di base nelle loro .emacs, o ha copiato completamente pezzi di altre persone .emacsnelle loro. Sanno come creare combinazioni di tasti globali, requirepacchetti integrati, abilitare le modalità secondarie.
  • Gli utenti di Emacs competenti hanno .emacsfile di grandi dimensioni, possibilmente suddivisi in più file. Scaricano e usano pacchetti non standard, sanno come trovare la documentazione per comandi, modalità, visualizzano le combinazioni di tasti esistenti, sono a loro agio con le differenze tra le modalità minori e le modalità principali. Gli utenti competenti generalmente mantengono in esecuzione una singola istanza di Emacs per giorni / settimane, scrivendo, compilando, eseguendo e eseguendo il debug dei programmi dai loro Emacs.
  • Gli utenti esperti sono a proprio agio nella scrittura di emacs lisp, nella creazione di comandi interattivi e nella scrittura di modalità secondarie. Gli utenti esperti guardano il codice emacs lisp per comprendere meglio le modalità che stanno usando, usare il debugger elisp e comunemente usano processi inferiori (shell, processi lisp, ...).
  • Gli utenti esperti di Emacs scrivono da zero nuove modalità principali, cercano e modificano il codice C per Emacs, sanno cos'è l' editing ricorsivo e lo usano, usano la comunicazione tra processi per integrare Emacs con strumenti esterni. Hanno anche letto la mailing list di emacs-devel .

E poiché stai chiedendo un'esperienza personale, ecco alcuni esempi di ciò che ho fatto personalmente che mi fanno sentire più produttivo. Nota: mi capita di lavorare in un'azienda in cui non siamo in nessun posto vicino al limite degli ambienti di sviluppo, ad esempio, utilizziamo ancora CVS.

  • Ho integrato Emacs con lo strumento di tracciamento dei bug: quando eseguo i commit, registra il nome del file e la versione nei campi per il bug, e da Emacs posso visualizzare i miei bug, assegnarli, risolverli, ecc.
  • Ho scritto un bridge che collega il mio prodotto (lavoro diurno) ed Emacs, rendendo efficacemente il mio prodotto un processo inferiore, permettendomi di apportare modifiche al codice sorgente al volo.
  • Ho esteso la gestione di TAGS con find-file-in-tags che fornisce una serie di scorciatoie adatte al mio ambiente di sviluppo.
  • Ho scritto una modalità che accetta i risultati della regressione e mi consente di saltare agli errori, esaminare i file di registro, rieseguire uno o più test o avviare una corsa di debug, con sequenze di tasti minime.
  • Il mio rapporto sullo stato settimanale (sì, utilizzo Emacs per e-mail) viene generato automaticamente utilizzando i commit che ho fatto durante la settimana.

Queste sono le modifiche che ho apportato per personalizzare specificamente Emacs in base al mio ambiente e al mio flusso di lavoro.

Sono 10 volte più produttivo di altri intorno a me? No.

Tuttavia, per il mio lavoro quotidiano, ci sono molte attività che posso svolgere con un paio di sequenze di tasti che altri trascorrono molto più tempo a fare nel loro ambiente non personalizzato e che generalmente richiedono loro di passare dal loro editor a un browser Web o a una shell .

Sono esempi sorprendenti? No. Sono sicuro che gran parte di ciò che ho fatto è già disponibile in Visual Studio . Il mio articolo ti riporterà alla Chiesa degli Emacs? Probabilmente no.

Tuttavia, se vedi un modello di comportamento nel tuo ambiente di sviluppo e hai quel prurito che ti dice: "Non dovrei davvero fare X / Y / Z più e più volte, se solo potessi ..." allora Consiglio di provare a usare Emacs per grattare quel prurito. Quel graffio potrebbe essere il primo passo verso il sentiero "autorinforzante" di cui parla Steve Yegge.

Nota minore: non so che molti (nessuno?) Utenti Emacs veramente esperti utilizzano attivamente i siti di overflow dello stack o, almeno, non rispondono alle domande relative a Emacs. Lo dico sulla base dei migliori utenti per i tag emacs e elisp su overflow dello stack.


+1, bella applicazione del modello di abilità Dreyfus su Emacs-fu. Per i lettori che non hanno familiarità con Dreyfus: en.wikipedia.org/wiki/Dreyfus_model_of_skill_acquisition
limist

Nota: personalmente mi considero un utente Emacs abbastanza esperto, ma non personalizzo il mio Emacs'en semplicemente perché incontro così tanti sistemi che la personalizzazione della configurazione predefinita sarebbe controproducente piuttosto che portare a termine il lavoro.

11

Questa prova è aneddotica, ovviamente, ma la tua domanda richiede esplicitamente prove aneddotiche.

Sono uno studente che sta facendo ricerche in un laboratorio accademico che coinvolge parecchi calcoli scientifici e anche scritti. In un tale ambiente (pensate: python, SQL, programmi di utilità accademici per la riga di comando, file di testo, LaTeX / BibTeX), l'apprendimento degli emac ha fatto all'incirca la differenza tra una spatola a mano e una terna. Dopo un anno di emacs (a cui mi classificherei un solido Competente con un dito che si tuffa in Competente), Mi trovo ansioso di gestire i problemi che i miei compagni di laboratorio temono. Non perché sono pigri e io sono diligente, ma perché è divertente abbattere le montagne con una terna e oneroso graffiare una montagna con una cazzuola. Almeno due volte, la mia squadra aveva iniziato a discutere sul fatto di apportare alcune complicate modifiche al formato del rapporto, solo per scoprire che quel compito era già stato completato prima ancora che avessero finito di discutere su chi doveva farlo. Regexp sostituisci + elisp incorporato.

Quindi, nel senso del primo ordine, sì, emacs mi ha reso molto più produttivo.

Sembra che tu stia chiedendo dei guadagni dalla produttività nel senso del secondo ordine: i miei ritorni da Emacs aumentano? Anche se non mi classificherei totalmente competente , figuriamoci Yegge , penso di iniziare a vedere il piede della curva esponenziale e che il mio uso di emacs renda ulteriormente emacsing ancora più produttivo. Alcune brevi statistiche aneddotiche dal repository per quantificare questo:

  • In una squadra di 7, ero responsabile di oltre la metà degli impegni. Adattandosi all'anzianità, mi impegno ancora quasi il doppio delle volte. Non perché sono quasi due volte fantastico, ma perché emacs tutto ma gestisce il controllo della versione per me. Poiché posso eseguire il commit, l'aggiornamento e l'unione indolore, eseguo il check-in con blocchi discreti più piccoli, come dovremmo fare tutti. Ciò significa che mi sento più libero di correre "rischi maggiori" (dovrei menzionare che stiamo scrivendo un codice sperimentale per la ricerca scientifica, non per la produzione), il che significa che imparo di più sulla programmazione e sulla mia materia.

  • Nell'ultimo rapporto che abbiamo scritto, la colpa di svn mi dice che ero responsabile di più righe rispetto a tre volte gli altri due autori messi insieme . (Questo non è solo perché ho avuto l'ultimo commit. Sono stato curioso per questo per un po ', quindi ho iniziato a seguirlo e i risultati sono stati abbastanza stabili per tutta la cronologia delle versioni.) Perché sono uno scrittore 6 volte più veloce? No: perché emacs è una motosega per il testo. Ciò significa che posso fare i tipi di chirurgia LaTeX che non mi sarei mai preso la briga di provare prima. Ciò significa che alla fine capisco di più su LaTeX, il che mi rende ancora più produttivo in futuro.

  • Il 100% della documentazione (sia per il codice che per le note di ricerca interna) è mio. Perché i miei compagni di laboratorio non si preoccupano della documentazione? Beh, non me ne importava nemmeno prima di trovare la modalità org. Mentre di solito sono super-tipo-B su queste cose, la modalità org si è delineata in una lieve dipendenza. L'esportazione istantanea di Org-mode in html dall'aspetto gradevole e LaTeX ha rimosso tutte le barriere alla documentazione responsabile e l'ha trasformata in una specie di gioco. Quindi ora lo faccio. Se così non fosse, non lo farei, o almeno lo temerei, lo rimanderei e gli farei perdere energia mentale.

Altri commentatori suggeriscono che la connessione causale può essere precisamente all'indietro: forse emacs premia l'alta produttività, il che priverebbe la fiducia dell'ipotesi che l'utente mediano probabilmente godrà di eventuali guadagni. Potrei anche suggerire una sorta di effetto placebo che si autoavvera: se emacs mi ha reso o meno produttivo (e ovviamente non lo sapremo mai, dal momento che non ho un gemello identico che non abbia imparato emacs), ho certamente ho vissuto un'epifania nella mia relazione con il testo strutturato. Sono entusiasta di usare emacs, il che significa che lo uso di più, il che significa che imparo di più su di esso, mi emoziono di più, ecc. Quando ho scoperto la modalità BibTeX, ricordo di aver sentito come se avessi appena chiesto a una ragazza di uscire al mio primo appuntamento.

Nel caso te lo fossi perso: emacs mi ha fatto venire le vertigini al pensiero di modificare i database bibliografici. Nel mio lavoro vale qualcosa, penso.


8

Ad esempio, su Facebook, il ragazzo accanto a me stava usando Vim e il ragazzo accanto a lui stava usando Emacs. Entrambi sono stati rapidi e produttivi da morire, e lo attribuisco non all'editore che stavano usando, ma alla loro intelligenza e attitudine.

Questa osservazione suona molto vera ed è in qualche modo applicabile a tutti i tipi di suggerimenti per la produttività.

Le persone interessate ad aumentare / ottimizzare la propria produttività tendono ad essere più produttive a causa della loro attenzione o comportamento nella vita, indipendentemente dall'efficienza del suggerimento stesso sulla produttività.

Si potrebbe riassumere come: "Non sei uno sviluppatore migliore perché stai usando Emacs o Vim, ma il tipo di persone che sono abbastanza dedicate a padroneggiare questi strumenti tende ad essere un buon sviluppatore" [1].

  1. Questa è una generalizzazione orribile, quindi non è una verità assoluta e non significa comunque molto (che cos'è uno sviluppatore buono / cattivo? Ecc.)

4

Sono un utente Emacs da circa 20 anni e devo dire che no, non ho raggiunto quel punto.

Per arrivare all '"emacsvana" di cui sta parlando, devi davvero renderti un esperto elisp . Ho fatto un po ', ma in realtà le mie capacità praticamente finiscono per essere in grado di configurare una nuova modalità che qualcun altro ha scritto. Cercare di eseguire il debug (o Dio proibire la correzione) di qualcun altro è un po 'oltre me, e scrivere il mio da zero nemmeno un pensiero.

Questo proviene da qualcuno che ha già usato lisp in precedenza e ha oltre 20 anni di esperienza professionale nello sviluppo di software.

Forse sono solo un wuus o qualcosa del genere, ma sospetto che pochissimi utenti Emacs siano mai arrivati ​​al punto di cui sta parlando.

Non c'è niente di sbagliato in questo. So come creare macro, il che da solo mi rende molto più produttivo con Emacs di quanto non possa essere con qualsiasi altro editor di testo. A volte, molto più di 10 volte più produttivo. Tuttavia, non mi rende migliore di qualcuno che conosce altrettanto bene vi (poiché può anche fare macro).


Ri: il tuo testo in grassetto, sarei molto più sorpreso se la maggior parte degli utenti veterani di Emacs di 20 anni sapesse come fare la strana macro. Sembra un anatema a tutte le cose che Emacs è così felicemente inconsapevole del suo potenziale.
ottobre

4

No, non l'ho fatto e non ho mai sentito parlare di nessuno. Non penso che accada. Penso che Steve Yegge stia facendo quello che fanno i blogger popolari: sta facendo una dichiarazione controversa e esagerata per far capire il suo punto di vista ed essere più visibile. Non penso che lo voglia dire come tale. Ciò che probabilmente intende comunicare è questo: "Emacs è davvero efficiente per cominciare, e se lo personalizzi molto, impari come essere ancora più efficiente con esso, il che è fantastico, mmm-kay?"

Se lo avesse appena detto, non saresti confuso e non avrebbe la metà dei lettori.


4

Guardalo in questo modo: Emacs e Vim eccellono nella chirurgia del testo e nell'automatizzazione delle sequenze di tasti ripetitivi, per non parlare della navigazione di grossi blocchi di testo. Questo è ciò di cui parla Yegge, anche se in un modo più predicato.

Se hai un file di 10000 righe in cui devi aggiungere un numero di riga all'inizio di ogni riga, puoi anche passare mezza giornata a farlo manualmente nel Blocco note.

Oppure, avvia una macro o usa una funzione Emacs integrata per questo tipo di cose. Quindi risparmi mezza giornata di lavoro e sei più di 10 volte produttivo.

Si tratta di rilevare la ripetizione ed eliminarla. Ciò richiede intelligenza, esperienza, pratica e abilità, quindi non tutti coloro che usano Emacs vedranno benefici in termini di produttività.


Oppure potresti fare una semplice elaborazione del testo sede concederti il ​​resto della giornata libera.
Josh K,

@Josh K: O Perl o awk o shell con incolla. Qualunque strumento tu conosca meglio, davvero.
Zan Lynx,

anche scrivere un programma C per farlo non richiederebbe più di 5 minuti
user281377,

2
Emacs non è adatto per gestire file MOLTO grandi. Diventa troppo pigro.

2

Non conosco "N volte più veloce", ma un'attenta aggiunta di funzioni di utilità può rendere Emacs abbastanza bravo a compilare modelli. Combinalo con un po 'di consapevolezza della lingua di destinazione e puoi fare cose come "dire a emacs che vuoi creare una funzione, dirgli gli argomenti di input (tipi, se la lingua richiede informazioni sul tipo) e restituire valore, fai emacs creare uno scheletro per ulteriori compilando".

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.