Emacs - editorul zeilor

March 8th, 2009 Alex Posted in passion, technology, unix |

Am fost Joi la Wurbe #18 și am ținut o prezentare despre Emacs.

Nu a fost prea reușită … n-am mai ținut prezentări până acum și m-am cam emoționat :) … încurcându-mă în prezentare am uitat de aspecte importante despre care ar fi trebuit să vorbesc, și am lăsat pe afară alte câteva plugin-uri foarte cool. Plus că am uitat de partea cea mai importantă … resurse de învățare.

Data viitoare o să vin mai bine pregătit :)

Resurse Emacs

Pentru început:

Plugin-urile prezentate:

  • Yasnippets … cu un articol introductiv scris pe celălat blog
  • ISpell și FlySpell (module incluse în distribuție) … integrare cu ispell/aspell ce permite corecția textului în mai multe limbi, inclusiv în română
  • Flymake (modul inclus în distribuție) … ce permite raportarea de erori sintactice în real time, independent de limbajul de programare
  • cperl-mode (inclus în distribuție) … mod editare inteligent de Perl, cu syntax highlighting bine făcut, integrare cu perldoc, și integrare cu Grand Unified Debugger din Emacs
  • python-mode (inclus în distribuție) … modul de Python inteligent, cu debugger integrat cu GUD și interpretor interactiv

Funcționalități care ar fi trebuit să le menționez:

Și bineînțeles … configurația mea de Emacs.

De ce nu Eclipse, Visual Studio, etc…?

Pe vremea când foloseam Eclipse, chiar încercam să-mi placă. Îmi plăcea ideea că este extensibil și că de voie de nevoie are o comunitate, și promite să fie un Visual Studio pentru Linux/Mac OS X.

Dar sunt genul de om ce experimentează cu diverse tehnologii și limbaje de programare destul de „cutting edge”, iar plugin-urile de Eclipse sunt mereu la câteva buguri departe de pragul în care încep a fi funcționale. Și pentru a începe lucrul cu orice limbaj, n-ai nevoie decât de syntax highlighting … atât. Și nici un IDE nu are integrare reală cu alte unelte, fiind monolitice și destul de departe de filozofia Unix.

Și un IDE pe termen lung nu te ajută deoarece din motive greu de prevăzut îți dictează arhitectura aplicației, și influențează întreaga cultură din jurul tehnologiilor suportate, făcând posibile aberații ale naturii, cum ar fi …

BufferedReader in = new BufferedReader(
    new InputStreamReader(
    new FileInputStream("file.txt"), "UTF-8"));

… idee exprimată ceva mai bine în Does Visual Studio Rot the Mind? (Charles Petzold … unul dintre cei mai cunoscuți editori pe tehnologii Microsoft).

Iar pentru o comparație de perspectivă dintre cele două lumi … o diferență între System.Shell.CommandLine și Mono.Options, discuție care n-ar exista dacă System.Shell.CommandLine n-ar fi gândit pentru utilizarea într-un IDE de programatori mediocrii (din fericire se pare că nu vor include totuși System.Shell.CommandLine în următorul preview).

Plus că trebuie să aștepți deschiderea aplicației cam cât îți ia să citești acest articol ;)

De ce Emacs?

Nu cred că pot răspunde prea bine, este mai mult vorba de un sentiment pe care-l simți odată ce reușești să devi familiar cu mediul.

Emacs și Vim sunt două unelte foarte interesante, comparate cu IDE-urile clasice. Nu oferă prea ușor intellisense, n-au interfață de design a interfețelor grafice, și de fapt nu au interfață point&click. Asta nu înseamnă că nu te ajută, departe de asta. Și pentru a lucra eficient, ai nevoie de ceva timp de studiu, și deoarece sunt atât de diferite de mediile tradiționale tranziția este dureroasă.

Munca fizică efectivă a oricărui programator este citirea/generarea/editarea de texte. Cu toate astea instrumentele clasice nu sunt eficiente pentru editare. Este ca diferența între un chirurg ce folosește un bisturiu ascuțit, și un chirurg (al viitorului) ce folosește un roboțel programat din fabrică pentru anumite operații. Esta ca diferența între un set de Lego tematic din care poți construi doar o corabie cu pirați, și unul format doar din cărămizi de diverse forme :)

Lumea a devenit mult prea obsedată de ușurință în folosire, de rezultate rapide, de „instant gratification”. Cu toate astea profesioniștii din alte domenii merg într-o direcție diferită … n-o să auzi de la un chirurg că și-a luat licența fără ani buni de studiu, n-o să auzi de la un pilot de curse că folosește cutie de viteze automată, n-o să auzi de la nici un artist sau sportiv bun că a ajuns unde a ajuns fără o cantitate de efort aproape ireal.

Am exprimat în mare aceeași idee în Obsesie pentru limbaj, de unde și citatul …

The clumsiness of people who have to engage their brain at every step is unbearably painful to watch, at least to me, and that’s what the novice-friendly software makes people do, because there’s no elegance in them, it’s just a mass of features to be learned by rote. However, this suits people a hell of a lot better than setting out at age 6 to become a great ballet dancer and achieving their goal 20 years later after every tendon and muscle and joint has been asked to perform just a little bit more than nature ever intended over and over and over again. To most people, this is insanity. But in reality, it’s art, and it’s the art in what we do that makes us human.

Erik Naggum, Usenet article

Așa că aveți răspunsul … Emacs este pentru artiști. Știu că pare a fi o atitudine arogantă, dar în Emacs simplul fapt că orice acțiune și comportament poate fi controlat din eLisp, simpla idee că-ți poți controla mediul în orice chip imaginabil, și că nu ești limitat de un wizard grafic al cărui rezultat este bătut în cuie … este o idee periculoasă în industria noastră. Asta înseamnă că-ți poți controla mediul, că nu ești o comoditate debarasabilă, că vei putea concura de unul singur cu hale întregi de programatori ieftini ;)

Enjoy ~

  1. Oh come on! You didn’t suck that bad! Şi pe mine m-ai convins…

  2. :P

  3. Pe mine m-a convis Steve Yegge ;-)

  4. @V - după posibilităţi…

  5. Emacs e cool. Eu îl folosesc de prin ‘98 şi sunt de mult dependent — am constatat deseori că sunt pur şi simplu incapabil să scriu cod în Eclipse sau alte IDE-uri. Dar nu mă deranjează. ;-)

    Iar Steve Yegge e Teh Man. E prea fain js2-mode. Tocmai am publicat azi nişte note despre setup-ul meu: http://mihai.bazon.net/projects/editing-javascript-with-emacs-js2-mode

    Apropo de obsesia “să învăţăm repede” pe care-o au toţi “programatorii” de 5$/h, un articol care mi s-a părut fain: http://norvig.com/21-days.html — “teach yourself programming in 10 years”. ;-)

Leave a Reply