Joel on Software

Joel a szoftverről szoftvermenedzsment egyszerűen

 

Joel lapja

Gerilla magyar fordítások

Hivatalos fordítások

 

Tanácsok informatikus hallgatóknak

Írta: Joel Spolsky (2005. január 2.)
Fordította: Terray Tamás (2005. február 19.)
Lektorálta: Nagy Balázs (2005. március 11.)
Az eredeti cikk

Annak ellenére, hogy néhány két évvel ezelőtt még arról áradoztam, hogy milyen fantasztikusan gazdag Windows GUI alkalmazások jelennek meg majd a jövőben, még mindig előfordul, hogy egyetemisták tanácsot kérnek tőlem a karrierjükkel kapcsolatban. Mivel ez az elhelyezkedési szezon, gondoltam leírom a szokásos tanácsaimat, amiket el lehet olvasni, majd kacagva figyelmen kívül hagyni.

A legtöbb felsőoktatásbeli diák hála Istennek van annyira pimasz, hogy ne kérjen tanácsot idősebbektől, ami az informatika területén jó taktika. Az idősebbek képesek olyan ostoba, özönvíz előtti dolgokat mondani, mint hogy „a billentyűzet nyomogató operátorok iránti igény 2010-re eléri a százmilliótt” vagy „a LISP szakértők nagyon keresettek most a szakmában”.

Tulajdonképpen nekem sincs sok sejtelmem, miről beszélek, amikor tanácsokat osztogatok egyetemistáknak. Olyan reménytelenül ódivatú vagyok, hogy még mindig nem tudom, mi az az AIM, és olyan öreges dolgokat használok mint például az úgynevezett „email”, ami azokban az időkben volt népszerű, amikor a zenéket lapos kerek izéken terjesztették, amiket „CD”-nek hívtak.

Szóval a legjobb, ha nem hallgatsz rám, és a cikk olvasása helyett nekiállsz és fejlesztesz valami on-line szoftver izét, amit randipartnerkeresésre használhatnak az emberek.

Azonban.

Ha élvezed a programozást, soha ne feledkezz meg kivételes szerencsédről: az emberek egy olyan kivételezett kis csoportjához tartozol, amely kiválóan megél egy olyan munkából, amit szeret csinálni. A legtöbb ember nem ilyen szerencsés. Az elképzelés, hogy „imádhatod a munkádat”, meglehetősen újszerű koncepció. A munkát úgy képzelik, mint valami kellemetlenért cserébe pénzt kapni, hogy azt tehesd, amit szeretnél majd, ha 65 éves korodban végül nyugdíjba mész, ha majd megengedheted magadnak, és nem vagy már túl öreg meg beteges hozzájuk, és nem igényelnek már megbízható térdeket, jó szemet, és még tudsz kifulladás nélkül öt métert sétálni, miegymás.

Miről is akartam beszélni? Ja, a tanácsok.

Különösebb felhajtás nélkül álljon itt Joel Hét Ingyenes Tanácsa az Informatikus Hallgatóknak (annyit is érnek, amennyit adtál értük):

  1. Tanulj meg írni, mielőtt lediplomázol.
  2. Ismerd meg a C-ben programozni, mielőtt lediplomázol.
  3. Tanulj mikroökonómiát, mielőtt lediplomázol.
  4. Ne szabadulj meg a nem szakmai tárgyaidtól csak azért, mert unalmasak.
  5. Végezz programozás-központú tárgyakat.
  6. Hagyd abba az aggódást azon, hogy minden munkahelyet Indiába telepítenek.
  7. Mindegy mivel foglalkozol, csatlakozz egy nyári szakmai gyakorlathoz.

Jöjjenek akkor most a magyarázatok, hacsak nem vagy olyan hiszékeny, hogy elhidd ezeket a dolgokat, csak mert én mondtam, amely esetben adok egy ráadás, nyolcadik tanácsot: fordulj profihoz, aki meg tudja oldani az önbizalommal kapcsolatos problémáidat.

Tanulj meg írni, mielőtt lediplomázol.

Sikeres lenne a Linux, ha Linus Torvalds nem hirdetné az igét róla? Akármilyen brilliáns hacker is, abban hogy a Linux mozgalom nemzetek feletti önkéntesek csapatává vált, Linusnak az a képessége volt döntő, hogy írott angolban át tudta adni gondolatait emailekben és levelezős listákon.

Hallottál már a legújabb divatról, az Extrém Programozásról? Anélkül, hogy belemélyednék az XP-ről alkotott véleményem ecsetelésébe, hadd mondjak annyit, hogy amiatt hallhattál róla, mert olyan emberek támogatják, akik nagyon tehetséges írók és szónokok.

Még a legkisebb méretekben is, ha megvizsgálsz egy programozással foglalkozó szervezetet, a legnagyobb erővel és befolyással bíró emberek azok lesznek, akik képesek folyamatosan és meggyőzően írni és beszélni. Persze az is segít, ha magas vagy, de ezzel kapcsolatban nem tudsz túl sokat tenni.

A különbség egy elfogadható és egy kiemelkedő programozó között nem az, hogy hány programozási nyelvet ismer, vagy hogy a Pythont vagy a Javát szereti-e jobban. Inkább az, hogy képesek-e közölni másokkal a gondolataikat. Azzal, hogy befolyásolnak másokat, előnyhöz jutnak. Azzal, hogy érthető megjegyzéseket és technikai dokumentációt írnak, lehetővé teszik más programozóknak, hogy megértsék a kódot, amivel aztán dolgozhatnak, ahelyett, hogy újraírnák azt. Enélkül a kódjuk értéktelen. Világos technikai dokumentációk írásával lehetővé teszik a végfelhasználók számára, hogy megértsék, mire való a kód, ami az egyetlen lehetséges módja annak, hogy felismerjék annak értékét. Egy halom csodálatos, és hasznos kód van eltemetve a Sourceforge-on, amit senki sem használ, csak azért, mert olyan programozók hozták létre, akik nem írnak jól (vagy egyáltalán nem írnak), így senki sem tudja, mit hoztak létre, és a csodálatos kódjuk elsorvad.

Nem veszek fel olyan programozót, aki nem tud, vagy nem tud jól írni angolul (Ez roppantul így igaz magyar körülmények közt is – a lektor). Ha tudsz írni, akárhova is vesznek fel, azon kapod majd magadat, hogy specifikációt íratnak veled, ami azt jelenti, hogy javítod a készségedet és felfigyel rád a menedzsment.

A legtöbb főiskola indít írás-központú gyakorlatokat, ahol írtózatos mennyiséget kell összeírni ahhoz, hogy elvégezd őket. Keress ilyen gyakorlatokat, és végezd el őket! Mindegy milyen tárgyban, de találj olyan gyakorlatokat is, amelyek napi vagy heti rendszerességű írásos feladatokkal járnak.

Indíts újságot, vagy weblogot. Minél többet írsz, annál könnyebben megy, és minél könnyebb írni, annál többet is fogsz, így egy végtelen körben.

Ismerd meg a C-t mielőtt lediplomázol.

Második rész: C. Vedd észre, hogy nem C++-t írtam. Annak ellenére, hogy a C használata egyre ritkább, még mindig ez a programozók közös nyelve. Ez az a nyelv, amin kommunikálnak egymással, és ami még fontosabb, sokkal hardver-közelibb, mint azok a „modern” nyelvek, amiket a főiskolán megismersz majd, mint az ML, Java, Python, vagy más trendi vackok, amiket mostanában tanítanak. Legalább egy szemesztert kell azzal töltened, hogy közelebb kerülsz a géphez, különben soha nem leszel képes rá, hogy hatékony kódot készíts a magas szintű nyelveken. Soha nem lesz rá alkalmad, hogy fordítókkal vagy operációs rendszerekkel dolgozz, amik a legjobb programozási munkák közé tartoznak. Soha nem fognak megbízni azzal, hogy architektúrát készíts igazán nagy projektekhez. Nem érdekel, hogy mennyit tudsz folytonosságról, egységbe zárásról, vagy kivételkezelésről: ha nem tudod elmagyarázni, hogy a while (*s++ = *t++); miért másol egy karakterláncot, vagy csak nem a világ legtermészetesebb dolga számodra, akkor babonákra alapozva programozol, ahogy egy olyan orvos dolgozik szerintem, aki nem ismeri az emberi anatómiát: recepteket írogatva fel azon információk alapján, amit az orvoslátogató csajtól hallott.

Tanulj mikroökonómiát mielőtt lediplomázol.

Ha még nem lettek volna gazdasági tárgyaid, rövid ízelítőül: a gazdaságtan a nagy bummal kezdődő területek közé tartozik, sok hasznos ténnyel és elmélettel ismertet meg, amelyek bizonyítottak már a valóságban is. Utána viszont egy meredek lejtőre emlékeztet. A hasznos dolog az elején a mikroökonómia, ami az alapja szinte minden hasznos üzleti elméletnek. Az utána következő dolgok már túlságosan elméletiek: bevezetnek a Makroökonómiába (nyugodtan kihagyhatod) a maga érdekes elméleteivel, mint például a kapcsolattal a kamatláb és a munkanélküliség között, ami hmm, többször tűnik megalapozatlannak mint bizonyítottnak, aztán egyre rosszabb és rosszabb lesz a helyzet, végül egy pár gazdasággal foglalkozó átvált fizikára, amitől jobb munkát kaphatnak a Wall Streeten. De vedd fel mindenképpen a mikroökonómiát, mert ismerned kell a kereslet és kínálat fogalmát, a versenyelőnyt, meg kell értened az elvárt és a kiegészítő haszon, vagy az árengedmény fogalmát, mielőtt halvány fogalmad lehet róla, hogy miért pont úgy működik az üzlet, ahogy.

Miért kell egy programozónak ismernie a gazdaságtant? Mert egy programozó, aki tisztában van az alapvető üzleti fogalmakkal értékesebbé válik, mint azok, akik nem. Ennyi az egész. El nem tudom mondani, hányszor voltam frusztrált olyan programozók beteges ötleteitől, akik értettek a kódhoz, de nem értettek a kapitalizmushoz. Ha megérted ezeket a fogalmakat, akkor értékesebb programozóvá válsz, és meg is kapod majd a jutalmat érte, olyan okokból kifolyólag, amelyeket szintén megismerhetsz a mikróban.

Ne szabadulj meg a nem szakmai tárgyaktól, csak mert unalmasak.

A nem szakmai tárgyak mellőzése jó módszer a tanulmányi átlagod lerontására.

Soha ne becsüld alá a tanulmányi átlagaid fontosságát. Rengeteg felvételekkel foglalkozó menedzser – beleértve engem is – egyből az átlagokhoz lapoz, amikor átnéz egy önéletrajzot, és nem fogunk emiatt bocsánatot kérni. Miért? Mert az átlag sokkal inkább megmutatja, mint bármi más jellemző, hogy tanárok tucatjai, hosszú idő alatt, különböző helyzetekben mit gondoltak a teljesítményedről. Pár órás tesztek? Nem mondanak sokat rólad. A tanulmányi átlagod leadott dolgozatok, zh- és vizsgaeredmények és órai munka négy évét jellemzi. Persze, megvannak a saját problémái. Semmit nem mond az átlagod arról, hogy könnyű gyakorlatokon szerezted a jegyeket egy falusi főiskola háztartástan óráin, vagy kvantummechanikát hallgattál a Caltechen. Végül, miután kirostáltam a falusi főiskola háztartástan óráján szerzett jegyeket, kérem a felvételiket és ajánlásokat. Közben következetesen magas jegyeket keresek, nem csak számítástudományból.

Miért kell nekem, mint munkáltatónak olyan szoftverfejlesztőket keresnem, akiket érdekelt, hogy milyen jegyeket kaptak európai történelemből? Hiszen a történelem unalmas. Ó, ezek szerint fel kellene hogy vegyelek, mert nem dolgozol elég keményen, amikor a munka unalmas? Hát, sajnos a programozásban is vannak unalmas részek. Minden munkának megvannak a maga unalmas pillanatai. És nem akarok olyan embereket alkalmazni, akik csak a munka érdekes részét szeretnék megcsinálni.

Felvettem egyszer egy Kultúrális Antropológia kurzust, mert úgy gondoltam, hogy tanulnom kell valamit az antropológiáról és ez úgy hangzott, mintha érdekes bevezető óra lenne.

Hogy érdekes volt? Távolról sem! El kellett olvasnom ezeket az irtózatosan monoton könyveket a Brazil esőerdők indiánjairól és a trobriandi szigetlakókról, akik – minden tiszteletem ellenére – nem nagyon érdekelnek. Néha a kurzus olyan hihetetlenül unalmassá vált, hogy valami érdekesebbre vágytam, például hogy nézhessem ahogy a fű nő. Teljesen elveszítettem a téma iránti érdeklődésemet. Teljesen, és végérvényesen. A szemeim könnyeztek, olyan fáradt voltam a yamgyökerek felhalmozásáról szóló végtelen elődadásoktól. Nem tudom miért foglalkoztak ott, a Trobriand szigeteken ilyen behatóan a yamgyökerek felhalmozásával, soha nem is fogok már visszaemlékezni, meglehetősen unalmas is, de jött a vizsgaidőszak és én átvergődtem rajta valahogy. Történetesen úgy döntöttem, hogy a Kultúrális Antropológia lesz az unalommal való küzdelmemnek a jelképe. Ha képes vagyok a legjobb jegyet szerezni egy olyan teszten, amihez indián törzsek ünnepi pokrócairól kell mindent tudnom, akkor képes vagyok bármit elvégezni, akármilyen unalmas is legyen. Elhatározásom után egyszer ottragadtam a Lincoln Centerben, végigülve Wagner 18 órás művének előadását, köszönhetően annak, hogy tanulmányaimhoz képest egész szórakoztatónak tűnt.

Megkaptam a legjobb jegyet. És ha nekem sikerült, akkor neked is sikerülhet.

Vegyél fel programozás-központú órákat.

Pontosan emlékszem a pillanatra, amikor megfogadtam, hogy soha nem megyek tudományos egyetemi órákra.

Egy Dinamikus Logikával foglalkozó előadáson volt, amelyet Lenore Zuck tartott a Yale-en és egyike volt a legragyogóbb számítástudományi gyakorlatoknak.

Bár homályos emlékeim nem elegendőek arra, hogy bemutassam ezt a területet, de hadd próbálkozzak meg vele legalább felületesen. A Formális Logika alapötlete, hogy bizonyos dolgokról elhisszük, hogy igazak, mert más dolgokat igaznak találtunk. Például a Formális Logikának köszönhetően, a „mindenki, aki jó jegyeket kap, azt alkalmazni fogják” és „Józsi jó jegyeket kap” állításokból levezetheted azt az új tényt, hogy „Józsit alkalmazni fogják”. Az egész nagyon eredeti, és csak tíz másodpercbe telik egy levezetőnek, hogy teljesen elszakadjon minden hasznostól, ami a Formális Logikában található, és ott maradjon valamivel, ami szórakoztató, de haszontalan.

Namármost, a dinamikus logika ugyanez a dolog, az idő bevezetésével. Például, „azután hogy felkapcsoltad a lámpát, láthatod a cipőidet” plusz „A lámpát felkapcsoltuk valamikor” arra utal, hogy „láthatod a cipőidet”.

A Dinamukus Logika rokonszenves az olyan teoretikusoknak, mint Zuck professzor, mert felcsillantja annak reményét, hogyha képes vagy formálisan levezetni dolgokat számítógépes programokról, az nagyon hasznos lehet, mert példának okáért le tudod vezetni, hogy a marsjáró flash kártyájának nem szabadna folyamatosan újraindulnia ahelyett, hogy a vörös planétán mászkálna körbe-körbe és keresgélné Marvint, a marslakót.

Ennek reményében a gyakorlat első napján Dr. Zuck teleírt két teljes táblát, plusz a mellette lévő fal tekintélyes részét, levezetendő, hogyha van egy villanykapcsolód, és a lámpák nem égnek, majd átkapcsolod a kapcsolót, akkor a lámpák égni fognak.

A bizonyítás hihetetlenül összetett volt, és hibára hajlamos. Nehezebb volt levezetni a bizonyítást, mint meggyőzni magadat arról, hogy egy villanykapcsoló átbillentése a fény megjelenésével jár. A levezetés mérete ellenére ki kellett hagynunk jópár lépést, mert túlontúl unalmas lett volna a formalizálásuk. Sok lépés Indukciós Módszerrel, mások Redukcióval, megint mások pedig Az Egyetemi Diákok Módszerével kerültek bizonyításra.

Házi feladatként le kellett vezetnünk a következőt: ha a lámpa nem ég, és és most már igen, akkor átkapcsoltad a kapcsolót.

Próbáltam, istenemre, próbáltam.

Órákat töltöttem a könyvtárban a próbálkozásokkal.

Pár óra alatt találtam egy hibát Dr Zuck eredeti bizonyításában, ami alapján elindultam. Talán én írtam le helytelenül, de ez valamire ráébresztett: ha három órába, és teljes táblák teleírásába telik, hogy hibelehetőségekkel telt módszerrel bebizonyítsunk valami triviálisat, akkor ez az eljárás soha nem lesz alkalmas érdekes dolgok levezetésére.

Ez nem befolyásolja a dimamikus logikával foglalkozókat: nem azért használják mert hasznos, hanem, csak hogy használják.

Elhagytam ezt az órát és megfogadtam, hogy soha nem veszek fel számítástudománnyal foglalkozó kurzust.

A történet tanulsága, hogy a számítástudomány nem ugyanaz, mint a szoftverfejlesztés. Ha nagyon-nagyon szerencsés vagy, akkor az iskoládnak van egy tisztességes szoftverfejlesztéssel kapcsolatos tananyaga, annak ellenére, hogy az elit iskolák úgy gondolják, hogy gyakorlati ismeretek oktatását jobb meghagyni a szakmai intézeteknek és a börtönök rehabilitációs programjainak. Akárhol megtanulhatsz programozni. Mi a Yale egyetem vagyunk, és a Következő Nemzedék Vezetőit neveljük. Azt gondolod, hogy a 160.000 dolláros tandíjad felhatalmaz arra, hogy megtanuld miért használj ciklusokat? Hát mit gondolsz te, hogy ez egy valami gyorstalpaló Java szeminárium egy esti repülőjáraton? Piha.

A gond az, hogy tulajdonképpen nincsenek professzionális szoftverfejlesztéssel foglalkozó iskolák, így, ha programozó akarsz lenni, marad a számítástudomány. Ami egy kellemes terület, de nincs sok köze a szoftver fejlesztéshez.

Ha szerencsés vagy, találhatsz egy csomó programozás-központú tárgyat a számítástudományi karon, ahogy a történelem szakon is találhatsz elegendő kurzust ahhoz, hogy megtanulj jól írni. És ezek azok a tárgyak, amiket a leginkább érdemes elvégezni. Ha imádsz programozni, akkor nem kell szégyellned, ha nem mozogsz otthonosan olyan tárgyakban ahol a lambda kalkulussal vagy lineáris programozással kell foglalkozni anélkül, hogy megérintenéd a billentyűzetet. Keresd a magasszíntű kurzusokat, amelyeknek a nevében a „gyakorlatban” megtalálható. Ez sokkal jobb annál, mintha felvennél valami borzasztó közigazgatási tárgyat, amit latin névvel tesznek eladhatóbbá.

Hagyd abba az aggódást amiatt, hogy minden munkahelyet Indiába telepítenek.

Nos, először is, ha már Indiában vagy, akkor soha nem kell emiatt aggódnod, szóval ne zavarjon, ha tényleg minden munka hozzátok kerül, csodálatos munkák ezek, élvezd őket jó egészségben.

Viszont folyamatosan azt hallom, hogy vészesen csökken a létszáma a számítástudományi szakoknak, és az erre adott egyik gyakori magyarázat, hogy „a diákok nem akarnak olyan területre kerülni, amelynek minden munkahelye Indiába kerül”. Ez a logika több sebből vérzik. Elsőként, aki a karrierjét aktuális üzleti helyzettől teszi függővé, az bolond. Másodsorban a programozás hihetetlenül jó felkészülés egy csomó érdekes munkára. Olyanokra, mint például üzleti folyamatok tervezése arra az esetre, ha valóban az összes programozói munkahely Indiában és Kínában is kerülne. Harmadszorra pedig, és ezt hidd el nekem, máig nagy hiány van igazán jó programozókból mind itt, mind pedig Indiában. Igen, van egy halom munkanélküli IT szakember, akik nagy zajjal magyarázzák, hogy mióta nincs munkájuk, de tudod mit? Talán meg fognak kövezni, de szerintem a jó programozóknak van munkájuk. Negyedszerre, van valami jobb ötleted, mondjuk történelem lesz a főtárgyad? Akkor nem lesz más választásod, mint jogi iskolába menni. És van egy dolog, amiben biztos vagyok: a jogászok 99%-a rühelli a munkáját, utálja minden egyes percét, viszont ugyanúgy 90 órát dolgozik egy héten. Ahogy már mondtam: ha szeretsz programozni, örülj a szerencsédnek, hogy az embereknek egy olyan kisebbségéhez tartozhatsz, aki jól megélhet egy olyan dologból, amit imád csinálni.

Akárhogy is, nem hiszem, hogy a diákok így gondolkoznak. Az informatikai szakra felvételizők számában tapasztalható visszaesés csak a dotkom lufi kipukkadása utáni normalizáció. Akik akkor a lufi bűvkörében éltek, nem igazán szerettek programozni, viszont nagyon kellemesnek tartották azokat a szexi bérrel járó munkaköröket, meg annak a lehetőségét, hogy tőzsdére kerülő cég részvényesei legyenek 24 évesen. Azok az emberek hála Istennek már messze járnak.

Mindegy mivel foglalkozol, menj szakmai gyakorlatra.

A jobb felvételiztető szakemberek tudják, hogy akik imádnak programozni, azok biztos fejlesztenek egy adatbázist a fogorvosuknak nyolcadik osztályban, legalább három nyarat számítógépes táborokban töltenek az egyetem előtt, tartalomkezelő rendszert fejlesztenek az egyetemi újságnak, és részt vesznek egy szoftvercég nyári gyakorlatán. Ez az, amit keresnek az önéletrajzodban.

Ha élvezed a fejlesztést, akkor a legnagyobb hiba, amit elkövethetsz, hogy olyan nyári munkát végzek – akár részidőset, akár nem –, ami nem programozás. Tudom, minden 19 éves álma, hogy egy bevásárlóközpontban ingeket hajtogasson, de neked van egy olyan hihetetlenül hasznos képességed, hogy fölösleges tehetségedet ingek hajtogatására pazarolnod. Amikor lediplomázol, nagy szükséged lesz egy olyan önéletrajzra, ami hemzseg a programozási munkáktól. A közgázosoknak meg maradnak az olyan állások, mint vállalati autókölcsönzőben „segíteni az embereknek kielégíteni a kölcsönzési igényeiket” (kivéve Tom Wellinget, aki Superman a tévében).

Hogy igazán megkönnyítsem az életedet, és hogy leleplezzem mennyire önző volt ez az egész iromány, elárulom hogy a cégemnek, a Fog Creek Software-nek van nyári gyakorlata szoftverfejlesztőknek, ami nagyon jól cseng majd az önéletrajzokban. „Többet fogsz tanulni a kódolásról, a fejlesztésről és az üzletről a Fog Creek Software-nél, mint bármely más gyakorlaton”, ahogy Ben mondta, aki egyike volt a tavaly nyári gyakornokainknak, és talán nem csak azért, mert beküldtem egy verőembert a kollégiumi hálószobájába, hogy erre kényszerítse. A beküldési határidő február elseje. Hajrá!

Ha rám hallgatsz, akkor túl hamar túl fogsz adni a Microsoft részvényeiden, elutasítod az állásajánlatokat a Google-nél, mert saját irodát akarsz ajtóval, és egyéb hülye elhatározásaid lesznek, de ez már nem az én hibám. Szóltam, hogy ne hallgass rám.


Joel lapja | Fog Creek Software | Hibakövetés | Tartalomkezelés | Személyes oldal | Archívum
Ezen oldalak egy személy véleményét tükrözik.
Minden itt megjelent tartalom Copyright© 1999-2004 Joel Spolsky. Minden jog fenntartva.