![]() | ||
Joel a szoftverről szoftvermenedzsment egyszerűen
| ||
Tanácsok informatikus hallgatóknakÍrta: Joel Spolsky (2005. január 2.)
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.
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):
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.
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.
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.
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.
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. | ||