Szoftvertervezési túlélési útmutató

Erőforrások, amelyek segítenek a karriered elején

Fabian Grohs „bekapcsolva a laptop számítógépére” az Unsplash oldalon

Pályafutásom első néhány éve intenzív tanulás volt.

Találkoztam azzal a valósággal, hogy szoftvermérnök vagyok, és sok olyan készséget kellett elsajátítanom, amelyekről nem tudtam, hogy szükségem van rá. Visszatekintve, az biztosan jó lett volna megismerni azokat a dolgokat, amelyeket most ismerek.

Tehát azért írtam ezt az útmutatót, hogy másoknak segítsek, a fejlesztők tapasztalataim alapján, amelyeket szakemberekként évek óta gyakoroltam, valamint magam és néhány kollégám tapasztalatai alapján.

Fedezem:

  • Hogyan lehet a legjobban kihasználni az interjúkat,
  • Hogyan lehet túlélni (és boldogulni) szoftvermérnökként végzett munkájában,
  • És milyen erőforrásokat kell figyelembe venni a folyamatos fejlesztés mérlegelésekor.

Interjúk

A szoftverfejlesztési karrier megkezdésekor egy vitathatatlan tényt kell szembe néznie. Az interjúk szar.

Szörnyű lehet minden érintett számára. Interjúalanyként és interjúalanyként egyaránt bizonyíthatom, hogy az interjúk nagy időigényesek, rendkívül stresszesek és valóban rossz mutatók a jövőbeli munkavégzéshez. Mindazonáltal ők olyan szükséges gonoszok, amelyekre jobban fel lehet készülni Önnek és önéletrajzának.

Felkészülés a csatára

Ha a szoftverfejlesztő karrierjét fontolgatja, feltétlenül tanuljon meg néhányat a leggyakrabban feltett programozási interjúkérdésekről, például a „FizzBuzz” kérdést:

„Írjon egy programot, amely kinyomtatja az 1-től 100-ig terjedő számokat. De háromszoros többszöröseihez a szám helyett„ Fizz ”nyomtat, az öt-szorzóhoz pedig„ Buzz ”. Azoknak a számoknak, amelyek mind a három, mind az ötszörös szorzói nyomtatják a „FizzBuzz” betűt. ”
(Horror kódolás)

Elég egyszerűnek hangzik, igaz?

Nos, az interjúalanyok túlnyomó többsége nem teljesíti ezt az egyszerű tesztet, nem is beszélve a komplexebb variánsairól.

Személy szerint láttam, hogy sok vezető beosztású jelölt nem teljesíti ezt a tesztet, miközben teljes internet-hozzáféréssel rendelkezik. Tehát győződjön meg arról, hogy ha egy programozási nyelv szerepel az önéletrajzán, akkor tudja, hogyan kell csinálni legalább a FizzBuzz-t benne. Ellenkező esetben csak mindenki pazarolja az idejét, beleértve a sajátját is.

Természetesen nem csak a FizzBuzz-ról kell tudnia, hogy túlélje interjúit. Azt is meg kell győződnie arról, hogy tudja:

  • Alapvető adatstruktúrák és algoritmusok: például összekapcsolt listák, tömbök, fák és rendezések.
  • Általános „gotchas” az Ön által választott nyelven, például hogy a karakterláncok változatlanok-e, és hogyan kezeli az memória.
  • Tárgyorientált programozási fogalmak, például az osztály versus objektum és az öröklés.

Pályafutása elején fel kell tüntetnie ezeket a kérdéseket, mivel nincs tapasztalata annak bizonyítására, hogy jó lesz a munkájában. Két forrás van, amelyet mindig javasolok az interjúkra való felkészülés során:

  • „Cracking the Coding Interview”, fantasztikus könyv, amely sok kódolási problémát és azok megoldását tartalmazza, valamint összefoglalót arról, hogy mit kell tudni ezek megoldásához
  • A CodeWars egy olyan weboldal, amelynek kódolási problémáinak nagy gyűjteménye található, amelyet a böngészőben sokféle nyelv választásával oldhat meg. A leghasznosabb rész annak megfigyelése, hogy a többi felhasználó hogyan oldotta meg ugyanazt a problémát. Meg fogja látni ugyanazon probléma különböző megközelítéseit, és új eszközöket tanulhat a választott nyelven.

Adj magadnak az extra él

Számos dolgot megtehetsz, amely megadja neked valami extraat.

Először tanulja meg kommunikálni tapasztalatait. Szüksége van egy liftteljesítményre, amely összefoglalja az önéletrajzát koherens és vonzó narratívává.

Ezen felül ismerje meg saját önéletrajzát! Buta hangzik, de láttam, hogy sok interjúalany küzd azzal, hogy egy adott elemet magyarázzon az önéletrajzukban. Önnek képesnek kell lennie arra, hogy válaszoljon az összes olyan tapasztalattal kapcsolatos kérdésekre, amelyeket felsorolt ​​az önéletrajzában, és elmagyarázza, hogy ez miért tette jobban a jelöltet az állásra.

Ezután rendelkezzen kódmintákkal, amelyeket meg lehet jeleníteni a GitHubon (vagy más nyilvános tárolóban).

A látás hisz, és az interjúkészítők, hogy megismerjék a kódot, csodákat fognak tenni. Ráadásul megmutatja, hogy megérti a verziószabályozó rendszereket.

A kódmintáknak nem kell semmi túl bonyolultnak lenniük, ám tisztának és jó kódolási gyakorlatnak kell lenniük. Ez az Ön alkalma arra, hogy megmutassa, hogyan kódol, anélkül, hogy egy kódoló interjú időbeli nyomása lenne.

Miután elvégezte a fentieket, itt az ideje fontolóra venni egy nyílt forrású projektben való részvételt. Megmutatja, hogy működhet egy meglévő kódban és együttműködhet más programozókkal.

Ez lehet a legközelebb a programozáshoz egy ipari környezetben, anélkül, hogy valójában ipari környezetben lennénk. Ez messze a legnehezebb és időigényesebb elem eddig, ezért addig tartsd fenn, amíg el nem készíted az alsó függesztett gyümölcsöt, amelyről a fentiekben tárgyaltam.

Interjú az interjúkészítővel

A munkakeresés rohama és stressze miatt sok jelölt elfelejti, hogy az interjúk kétirányú utcák. Mivel a vállalat megpróbálja kitalálni, hogy Ön a megfelelő ember-e a feladathoz, ki kell derítenie, hogy a vállalat az Ön számára megfelelő-e.

Ügyeljen arra, hogy feltegyen néhány alábbi kérdést, még akkor is, ha ez egy nyomon követési e-mailben szerepel. Ne feledje, hogy gyakran a vállalatok megpróbálják megpördülni, ha nem követik be a legjobb mérnöki gyakorlatokat, ezért olvassa el a sorok között.

Íme néhány példakérdés:

"Milyen lenne nekem egy tipikus munkanap?"

Fontos tudni, hogy mi várható el egy adott pozíciótól, mivel a szoftverfejlesztési feladatok meglehetősen eltérőek. Előfordulhat, hogy elvárja például a szerver karbantartását vagy az ügyfelekkel való közvetlen beszélgetést.

Piros zászló: „Nem vagyok biztos benne.” → Azt jelenti, hogy az interjút készítő személyek nem vesznek részt a csapatban, vagy nincs egyértelmű ötlete, hogy miért hívnak fel téged.

"Hogyan tesztelheti a szoftvert?"

Ideális esetben az egység tesztelése, a kézi tesztelés és az automatizált tesztelés kombinációját kell használni a kód minőségének ellenőrzésére.

Piros zászló: „Csak nem írunk hibákat, haha.” → Azok az emberek pontosan azok, akik hibákat írnak.

"Milyen verziószabályozó rendszert használ?"

A verzióvezérlő rendszerek rendkívül hasznosak az együttműködés szempontjából, és nulla ok van arra, hogy ne használja őket professzionális környezetben.

Piros zászló # 1: “Ööö, verziószabályozó rendszer?” → Fuss messze, messze.

Mindig használjon verziószabályzót.

Piros zászló # 2: „” → Jelzi, hogy valószínűleg nem tartják be az időt, és hosszú ideje nem frissítették infrastruktúrájukat.

"Ön szakértői értékeléseket végez?"

A szakértői vélemények készítése, vagy egy másik személy megnézése a kódján, mielőtt bekerülne a kódba, fantasztikus módszer a hülye hibák feltárására, és alapvető fontosságú képzési lehetőség karrierjének megkezdésekor.

Piros zászló: „Csak bízunk egymásban!” → Nagyon valószínű, hogy az idősebb fejlesztők nagyon védik a kódjukat, és nem nagyon képesek a visszajelzéseket kapni.

"Milyen programjai vannak a folyamatos oktatáshoz?"

Szoftvermérnökként való folyamatos tanulás azt jelenti, hogy a technológiák szédülő ütemben megjelennek, éretté válnak és elavulttá válnak. Mint ilyen, sok vállalat rendelkezik képzési költségvetéssel, amelyet egyetemi és online órák, konferenciák vagy házon belüli beszélgetések fizetésére fordítanak.

Piros zászló: „A szabadidő alatt online oldalakat olvas?” → A társaság vagy készpénzre szorul, vagy a fejlesztőket cserélhetőnek, és nem hosszú távú befektetésnek tekinti.

"Mi a szoftverfejlesztési folyamat, amelyet használsz?"

A folyamat elengedhetetlen a szoftverfejlesztéshez, a tényleges részletektől függetlenül. Az optimális folyamat részletei intenzív vita tárgyát képezik, de a projekten végzett egyeztetett módon történő működés pusztán minimalizálja a káoszt és biztosítja, hogy mindenki ugyanazon az oldalon legyen.

Piros zászló: „Folyamatunkat a szabad formájú jazz ihlette.” → Valószínűleg az egész osztály tűzoltási módban van, sürgősségi helyről vészhelyzetbe ugrik, egyértelmű cél nélkül.

- Hogyan kezeli a műszaki adósságot?

A műszaki adósság elavult technológiák és gyors, de piszkos megoldások felhalmozódása a kódbázisban. Ennek kezelése fontos a kódex hosszú távú egészsége szempontjából, és ezt folyamatosan kell megtenni.

Piros zászló: „Kizárólag az új funkciókra összpontosítunk.” → Kódbázisuk rendetlenség, vagy hamarosan.

"Milyen a vállalati kultúra?"

A vállalati kultúra valószínűleg nagyon homályos koncepció, de még a kisebb dolgok is, mint például a nyitott iroda és a kabinok, jelentősen megváltoztatják a kollégákkal folytatott napi kapcsolattartást. Nincsenek általános vörös zászlók, de győződjön meg arról, hogy válaszuk olyan, amellyel heti 40+ órát élhet évekig.

Szoftvermérnökként dolgozik

Ebben a szakaszban, ha jól teljesítettél az interjúk során, és tetszett, hogy az interjúkészítők válaszoltak a kérdéseire, akkor valószínűleg felveszik Önt.

Gratulálok, hivatalosan mérnök vagy!

Most mi? Nos, itt az ideje, hogy újból megbeszélj mindent a kódolásról és a működésről. És mivel programozók vagyunk, kezdjük a kód megvitatásával.

Jó ipari kódex

A jó ipari kód a következő tulajdonságokkal rendelkezik, ebben a sorrendben:

  • Olvasható, mert a kódot a beírtnál gyakrabban olvassa és tartja karban. A kód szándékának egyértelműnek kell lennie a többi fejlesztő számára az írás elkészítése után évekkel.
  • Védekező, mint a védekező kódolás bevált gyakorlatainak követésekor. A védekező kódolás önmagában egy téma, de lényege a következő: Biztosítania kell, hogy az osztályok és metódusok helytelen használata ne vezessen ahhoz, hogy a kód összeomlik a szoftverrel.
  • Optimalizált, amely utoljára szerepel a listán, mert az idő nagy részében nem kell igazán aggódnia. Ez nem azt jelenti, hogy olyan rossz kódot kell írni, amely valamit O-ban (n³) mutat, ha lineáris megoldás létezik. De a fejlesztők általában szívesen próbálnak túlzottan optimalizálni, amikor nincs rá szükség, gyakran a kód olvashatóságának és védekezésének a kárára. Mindig képesnek kell lennie bizonyítani, hogy valóban szükség van egy bizonyos optimalizálásra, amely feláldozza ezeket a tulajdonságokat.

Most, hogy tudod, hogyan kell jó ipari kódot írni:

Nem fogsz sok mindent kódolni

Lehet, hogy meglepetés, de legtöbbször nem új kódot ír, hanem ehelyett:

  • hibakeresés
  • A meglévő kód olvasása
  • Találkozókon vagy e-mailek írásakor
  • Kutatva, hogy mit tegyen, ne írjon kódot

Ezért a kódoláson kívüli készségek ugyanolyan létfontosságúak lesznek a karrierjéhez.

Hibakeresés és olvasási kód

  • Sokkal többre van szüksége, mint a nyomtatási nyilatkozatok hibakeresésével. Az összes széles körben használt nyelv és tech halom számos hatékony eszközzel rendelkezik. Tanuld meg őket használni, mivel szellőzést okoznak és számtalan órát takaríthatnak meg.
  • Ismerje meg a kódbázist. A legtöbb tech halom rendelkezik valamilyen kódgráf-generáló eszközzel, amely segít megérteni a kódbázis szerkezetét. Az Enterprise IDE-k általában beépítették ezt a funkciót. A kódot olyan eszközökkel is felfedezheti, mint például a ReSharper, grep vagy Sourcegraph.
  • Ismerje meg a terméket. Meg fog lepődni, hogy sok fejlesztő nem tudja, hogy a szoftvernek miként kell működnie, még mielőtt megpróbálnák kijavítani. Csak olvassa el a dokumentációt.

Szervezze meg gondolatait

Mivel sok idejét a kommunikációra, a kutatásra és a többfeladatos feladatokra fogja tölteni, szüksége van néhány eszközre, amely segít mindent rendben tartani.

  • TODO listák / Feladat: A vállalatának már rendelkeznie kell valamiféle feladatkezelő szoftverrel, de ez segíti a személyes rendszer kialakítását is. Használjon utáni jegyzeteket vagy olyan szoftvert, mint a Trello vagy a Todoist.
  • Megjegyzések: Mindig készítsen jegyzeteket az üléseken, javítsa a meglévő dokumentációt és hozzon létre egy személyes tudásbázist. Használjon Evernote-t, OneNote-t vagy notebookot, mint a régi időkben. Úgy tűnik, hogy túlterhelés, de egy évvel később megköszönni fogod magadnak, amikor újból meglátod azt a homályos építkezési folyamatot, amely 3 napba telt, hogy kitalálja az első alkalmat. Még soha nem találkoztam olyan jó szoftvermérnökkel, aki nem készített átfogó feljegyzéseket.
  • Diagramok / Megjelenítések: Az emberek vizuális lények, és a folyamatok és architektúrák diagramjának elkészítése segít neked és másoknak a bonyolult témák megértésében. A diagramok különösen hasznosak a nem műszaki kollégákkal folytatott kommunikáció során. Használjon Lucidchartot, Visio-t vagy egy egyszerű táblát.

Tudja, mikor kell használni a könyvtárakat

Rövid válasz: Szinte mindig.

Hosszú válasz: Az idő 99% -át nem szabad újra feltalálnia. A legtöbb szoftverfejlesztési pozícióban egyfajta fajta megvalósítása teljes időpocsékolás. Ez nem azt jelenti, hogy nem kellene tudnia, hogy az általuk használt algoritmusok és adatszerkezetek hogyan működnek, mivel ez segít eldönteni, hogy mit és mikor kell használni.

Ahhoz, hogy hatékony szoftvermérnök lehessen, meg kell értenie a rendelkezésére álló könyvtárakat. A legnépszerűbb nyelvek szokásos könyvtárai rendkívül hasznosak, és nagyobbak, mint amit elvárt volna. Ezenkívül a kódbázis további, speciális könyvtárakat is felhasználhat. Olvassa el a dokumentációt és tudja, mikor kell használni.

Nem szabad attól tartania, hogy további könyvtárakat is javasol, ha időt takarítanak meg. Gondoskodnia kell arról, hogy megfelelő könyvtárat válasszon ipari használatra. Egy jó könyvtár:

  • Nyílt forráskódú, így maga is ellenőrizheti a kód minőségét, és potenciálisan kijavíthatja az alkalmazás szempontjából kritikus hibákat.
  • Olyan megengedett licenc alapján licencelték, mint például a MIT és a BSD, így a vállalkozás használatával nem merül fel semmilyen probléma. Legyen óvatos a GPL-vel, nehogy véletlenül nyitja meg a teljes kódbázist.
  • Érett, vagyis egy ideje már ki is van, és gazdag funkciókkal rendelkezik.
  • Fenntartva, az új kiadások gyakran megjelennek.
  • Más vállalatok vagy projektek által használt, amely jóváhagyási pecsétként szolgál és biztosítja, hogy az iparág támogatja a karbantartás folytatását.

Folyamatos fejlesztés

A készségek elsajátítása mellett, amelyek jobbá teszik a mindennapi munkáját, folyamatosan fejlesztenie kell képességeit és újakat kell tanulnia annak érdekében, hogy új karrierlehetőségeket teremtsen magának.

A tanulási lehetőségek nagyon sokak, és sokuk meglehetősen megfizethető:

  • Online tanfolyamok: Nem szabad kihagyni azt a lehetőséget, hogy rugalmasan tanuljunk a terület legjobb professzoraitól. Nézze meg a Coursera, az Udacity és az edX (sok közül) olyan tanfolyamokat, amelyek kiegészíthetik meglévő készségeidet.
  • Online mesterfokozat: A legmagasabb rangú egyetemek körében az utóbbi időben az online mesterfokozat rugalmas módja a formális oktatás folytatásának. Általában olcsóbbak is, köszönöm az egyetemi diplomákat, a legtöbb program a teljes végzettségért ~ 10 000 dollárt fizet. A Georgia Tech, az UT és a San Diego UC néhány ilyen egyetemet kínáló egyetem. Személy szerint ajánlom a Georgia Tech Online Mesterét, amelyet ebben az évben végeztem.
  • Blogok: A blogok a fejlesztői közösség fontos részét képezik (itt nem meglepő, mivel éppen most olvasol). Az olyan blogok, mint a Coding Horror, a Joel on Software, vagy még humorosabb webhelyek, például a Daily WTF, jó ötlettel szolgálhatnak arra, hogy mit és mit ne tegyen szoftvermérnökként. A Közepes böngészés, az r / programozás, a HackerNews vagy más hírcsatornák jó cikkeket és blogokat is vezethetnek.
  • Konferenciák: Végül, de nem utolsósorban, a konferenciák csodálatos tanulási lehetőséget jelentenek, és mindenképpen ki kell használnia a vállalat képzési költségvetését, ha odamenne hozzájuk. A kiválogatásra váró jó konferenciák nagyon hiányos listája (a téma mellett): GOTO; (Általános), Strange Loop (Általános), PyCon (Python), CPPCon (C ++), DEF CON (Biztonság), Fluent (Web dev). Mindezen videók (a legtöbb) beszélgetésről is tartalmaznak videókat a YouTube-on, így akkor is megtanulhat valamit, ha nem tudsz részt venni!

Remélhetőleg ez a cikk felgyorsította Önt azzal a tudással, hogy mit várhat szoftverfejlesztő karrierje kezdetétől, és megadta az eszközöket, hogy jól teljesítsék ezt az izgalmas utat! Köszönöm, hogy elolvasta! Ha bármilyen kérdése vagy javaslata van, kérjük, hagyjon megjegyzést vagy csipogjon @AlexievValeri.