Programmatūras inženierijas izdzīvošanas ceļvedis

Resursi, kas jums palīdzēs karjeras sākumā

Pirmie manas karjeras gadi bija intensīvas mācīšanās laiks.

Es saskāros ar programmatūras inženiera realitāti, un man bija jāapgūst daudzas prasmes, kuras es nezināju, ka man vajag. Atskatoties uz priekšu, būtu bijis jauki uzzināt lietas, kuras es tagad zinu.

Tātad, es uzrakstīju šo ceļvedi, lai palīdzētu citiem, balstoties uz to izstrādātāju pieredzi, kurus es pirmajos pāris gados vadīju kā profesionāļus, kā arī uz sevi un dažu manu kolēģu pieredzi.

Es apskatīšu:

  • Kā vislabāk izmantot intervijas,
  • Kā izdzīvot (un uzplaukt) programmatūras inženiera darbā,
  • Kādus resursus meklēt, apsverot nepārtrauktu uzlabošanu.

Intervijas

Uzsākot karjeru programmatūras inženierijā, nāksies saskarties ar vienu neapstrīdamu faktu. Intervijas sūkā.

Tie var būt šausmīgi visiem iesaistītajiem. Būdams gan intervētājs, gan intervējamais, es varu apliecināt, ka intervijas ir liela laika izlietne, ārkārtīgi stresa un patiešām slikti rādītāji par turpmāko darba sniegumu. Neskatoties uz to, tie ir nepieciešams ļaunums, kuram labāk sagatavoties jūs un jūsu recenzija.

Gatavošanās kaujai

Ja apsverat karjeru programmatūras inženierijā, noteikti uzziniet dažus no visbiežāk uzdotajiem programmēšanas intervijas jautājumiem, piemēram, “FizzBuzz”:

“Uzrakstiet programmu, kas izdrukā skaitļus no 1 līdz 100. Bet trīs reizinājumiem drukājiet skaitļa vietā“ Fizz ”un piecu reizinājumiem -“ Buzz ”. Skaitļiem, kas ir gan trīs, gan piecu reizinājumi, drukājiet “FizzBuzz”. ”(Šausmu kodēšana)

Izklausās pietiekami vienkārši, vai ne?

Nu, lielākā daļa intervējamo neiztur šo vienkāršo pārbaudi, nemaz nerunājot par tās sarežģītākajiem variantiem.

Es personīgi esmu redzējis, ka daudzi kandidāti uz augstiem amatiem neiztur šo testu, bet viņiem ir pilna piekļuve internetam . Tāpēc pārliecinieties, ka, ja programmēšanas valoda ir norādīta jūsu kopsavilkumā, jūs zināt, kā tajā veikt vismaz FizzBuzz. Pretējā gadījumā jūs vienkārši tērējat visu laiku, ieskaitot savu.

Protams, lai izdzīvotu intervijās, jums jāzina ne tikai FizzBuzz. Jums arī jāpārliecinās, vai zināt:

  • Datu pamatstruktūras un algoritmi: piemēram, saistītie saraksti, masīvi, koki un veidi.
  • Parastās “gotchas” jūsu izvēlētajā valodā, piemēram, vai virknes ir nemainīgas un kā tiek pārvaldīta atmiņa.
  • Uz objektu orientētas programmēšanas koncepcijas, piemēram, klase pret objektu un mantojums.

Karjeras sākumā jums būs jāuzsver šāda veida jautājumi, jo jums nav pieredzes, lai pierādītu, ka jums būs labs darbs. Gatavojoties intervijām, vienmēr iesaku divus resursus:

  • “Cracking the Coding Interview” - fantastiska grāmata, kas ietver daudz kodēšanas problēmu un to risinājumus, kā arī kopsavilkumus par to, kas jums jāzina, lai tās atrisinātu
  • CodeWars, vietne, kurā ir plaša kodēšanas problēmu kolekcija, kuras jūs varat atrisināt pārlūkprogrammā, izmantojot plašu valodu izvēli. Visnoderīgākā daļa ir redzēt, kā citi lietotāji atrisināja to pašu problēmu. Jūs redzēsiet dažādas pieejas vienai un tai pašai problēmai un uzzināsiet jaunus rīkus izvēlētajā valodā.

Dodiet sev to papildu malu

Jūs varat darīt vairākas lietas, kas jums dos to maz kaut ko papildus.

Pirmkārt, iemācieties paziņot savu pieredzi . Jums vajadzētu būt lifta pakāpienam, kas apkopo jūsu CV sakarīgā un saistošā stāstījumā.

Turklāt ziniet pats savu kopsavilkumu! Tas izklausās dumjš, taču esmu redzējis, ka daudzi intervētie cīnās, lai izskaidrotu kādu konkrētu rakstu viņu atlaidumā. Jums vajadzētu būt iespējai atbildēt uz jautājumiem par jebkuru pieredzi, kuru esat uzskaitījis savā kopsavilkumā, un paskaidrot, kā tas padarīja jūs par labāku šī amata kandidātu.

Pēc tam ir kodu paraugi, kurus parādīt GitHub (vai citā publiskā repozitorijā).

Redzēšana ir ticība, un intervētāji, kas var redzēt jūsu kodu, darīs brīnumus. Turklāt tas parāda, ka jums ir izpratne par versiju kontroles sistēmām.

Kodu paraugiem nav jābūt kaut ko pārāk sarežģītam, taču tiem jābūt tīriem un jāuzrāda laba kodēšanas prakse. Šī ir jūsu iespēja parādīt kodēšanu bez kodēšanas intervijas laika spiediena.

Kad esat paveicis visu iepriekš minēto, ir pienācis laiks apsvērt dalību atvērtā pirmkoda projektā . Tas parādīs, ka jūs varat strādāt esošajā kodu bāzē un sadarboties ar citiem programmētājiem.

Tas būs vistuvāk programmēšanai nozares vidē, faktiski neatrodoties nozares vidē. Tas līdz šim ir visgrūtākais un laikietilpīgākais priekšmets, tāpēc rezervējiet to, līdz esat pabeidzis zemāk pakārto augli, kuru esmu apspriedis iepriekš.

Intervējot savu intervētāju

Darba meklējumu steigā un stresā daudzi kandidāti aizmirst, ka intervēšana ir divvirzienu ceļš. Tā kā uzņēmums mēģina noskaidrot, vai jūs esat īstais cilvēks šim darbam, jums vajadzētu noskaidrot, vai uzņēmums jums ir piemērots.

Pārliecinieties, ka jums ir jāuzdod daži no šiem jautājumiem, pat ja tas ir papildu e-pastā. Ņemiet vērā, ka bieži vien uzņēmumi var mēģināt griezties, neievērojot labāko inženieru praksi kā priekšrocību, tāpēc lasiet starp rindām.

Šeit ir daži jautājumu piemēri, kurus jūs varētu uzdot:

"Kā man izskatītos tipiska darba diena?"

Ir svarīgi zināt, ko sagaidīt no konkrēta amata, jo programmatūras inženierijas darba vietas ir diezgan atšķirīgas. Iespējams, ka jūs, piemēram, uzturēsiet serverus vai runāsiet tieši ar klientiem.

Sarkanais karogs: " Es neesmu pārliecināts." → Nozīmē, ka cilvēki, kas jūs intervē, nebūs jūsu komandā vai arī viņiem nav skaidras idejas, kāpēc viņi jūs pieņem darbā.

"Kā jūs pārbaudāt savu programmatūru?"

Ideālā gadījumā koda kvalitātes pārbaudei jāizmanto vienības testēšanas, manuālas testēšanas un automatizētas testēšanas kombinācija.

Sarkanais karogs: " Mēs vienkārši nerakstām kļūdas, haha." → Tie cilvēki ir tieši tie, kas raksta kļūdas.

"Kādu versiju vadības sistēmu jūs izmantojat?"

Versiju kontroles sistēmas ir ārkārtīgi noderīgas sadarbībai, un nav iemeslu to nelietot profesionālā vidē.

Sarkanais karogs Nr. 1: “Uh, versiju kontroles sistēma?” → Skrien tālu, tālu prom.

Sarkanais karogs Nr. 2: gt; ” → Norāda, ka viņi, visticamāk, neseko līdzi laikam un ilgu laiku nav atjauninājuši savu infrastruktūru.

“Vai jūs veicat salīdzinošās atsauksmes?”

Salīdzinošās atsauksmes vai tas, ka kāds cits ieskatās jūsu kodā, pirms tas nonāk kodu bāzē, ir fantastisks veids, kā pamanīt dumjš kļūdas, un ir būtiska apmācības iespēja, sākot savu karjeru.

Sarkanais karogs: "Mēs vienkārši uzticamies viens otram!" → Ļoti iespējams, ka vecākie izstrādātāji ļoti aizsargā savu kodu un nav lieliski, lai saņemtu atsauksmes.

"Kādas programmas jums ir tālākizglītībai?"

Būt programmatūras inženierim nozīmē nepārtraukti mācīties, kad tehnoloģijas parādās, nobriest un noveco novecojošā ātrumā. Daudziem uzņēmumiem ir apmācību budžets, ko viņi izmanto, lai apmaksātu universitātes un tiešsaistes nodarbības, konferences vai iekšējās sarunas.

Sarkanais karogs: "Jūs domājat, ka brīvajā laikā tiešsaistē lasāt saturu?" → Uzņēmums ir vai nu piesiets skaidrā naudā, vai arī uzskata izstrādātājus par aizstājamiem, nevis par ilgtermiņa ieguldījumiem.

"Kāds ir jūsu izmantotais programmatūras izstrādes process?"

Process ir vitāli svarīgs programmatūras inženierijai neatkarīgi no faktiskās detaļas. Informācija par to, kas ir optimālais process, tiek pakļauts intensīvām diskusijām, bet tikai tas, ka pastāv saskaņots veids, kā strādāt pie projekta, samazina haosu un nodrošina, ka visi atrodas uz vienas lapas.

Sarkanais karogs: “Mūsu procesu iedvesmo brīvas formas džezs.” → Visticamāk, viss departaments ir ugunsdzēsības režīmā, pārejot no avārijas uz ārkārtas situāciju bez skaidra mērķa.

"Kā jūs risināt tehnisko parādu?"

Tehniskais parāds ir novecojušu tehnoloģiju un ātru, bet netīru risinājumu uzkrāšanās kodu bāzē. Tas ir svarīgi pievērsties koda ilgtermiņa veselībai, un tas jādara nepārtraukti.

Sarkanais karogs: “Mēs koncentrējamies tikai uz jaunām funkcijām.” → Viņu kodu bāze ir haoss, vai tas drīz būs.

"Kāda ir jūsu uzņēmuma kultūra?"

Uzņēmuma kultūra varētu būt ļoti neskaidrs jēdziens, taču pat tādas sīkas lietas kā atvērts birojs pret kabīnēm ievērojami mainīs jūsu ikdienas mijiedarbību ar kolēģiem. Nav vispārīgu sarkano karodziņu, taču pārliecinieties, ka viņu atbilde ir kaut kas tāds, ar kuru jūs varat dzīvot 40+ stundas nedēļā gadiem ilgi.

Darbs kā programmatūras inženieris

Šajā posmā, ja jūs labi darbojāties intervijās un jums patika, kā intervētāji atbildēja uz jūsu jautājumiem, jūs, iespējams, pieņemsiet darbā.

Apsveicam, jūs oficiāli esat inženieris!

Ko tagad? Nu ir pienācis laiks no jauna uzzināt daudzas lietas par kodēšanu un darbu. Tā kā mēs esam programmētāji, sāksim apspriest kodu.

Labs nozares kodekss

Labam nozares kodam ir šādas īpašības šādā secībā:

  • Lasāms , jo kods tiek lasīts un uzturēts biežāk nekā rakstīts. Citiem izstrādātājiem koda nodomam jābūt skaidram gadiem pēc tam, kad esat to uzrakstījis.
  • Aizsardzības, tāpat kā ievērojot aizsardzības kodēšanas paraugpraksi. Aizsardzības kodēšana ir atsevišķa tēma, taču tās būtība ir šāda: jums jānodrošina, ka nepareiza jūsu uzrakstīto klašu un metožu izmantošana nenovedīs pie tā, ka kods avarēs programmatūru.
  • Optimizēts , kas ir pēdējais šajā sarakstā, jo lielākoties jums par to nebūs jāuztraucas. Tas nenozīmē, ka jums vajadzētu rakstīt nepareizu kodu, kas kaut ko dara O (n³), ja pastāv lineārs risinājums. Bet izstrādātāji parasti vēlas izmēģināt un pāroptimizēt, kad tas nav nepieciešams, bieži vien kaitējot koda lasāmībai un aizstāvamībai. Jums vienmēr jāspēj pierādīt, ka patiesībā ir nepieciešama noteikta optimizācija, kas upurē šīs īpašības.

Tagad, kad jūs zināt, kā rakstīt labu nozares kodu:

Jūs nedarīsit daudz kodēšanas

Tas var būt pārsteigums, taču lielākoties jūs nerakstīsit jaunu kodu, bet tā vietā:

  • Atkļūdošana
  • Esošā koda lasīšana
  • Sanāksmēs vai rakstot e-pastus
  • Pētot to, ko darīt, lai jums nav rakstīt kodu

Tāpēc citas prasmes, nevis kodēšana, būs tikpat svarīgas jūsu karjerai.

Atkļūdošana un koda lasīšana

  • Jums būs nepieciešams daudz vairāk nekā atkļūdošana, izmantojot izdrukātos paziņojumus. Visās plaši lietotajās valodās un tehnoloģiju kaudzēs ir dažādi jaudīgi rīki. Iemācieties tos izmantot, jo tie kļūs par brāļa atkļūdošanu un ietaupīs neskaitāmas stundas.
  • Izprotiet kodu bāzi. Lielākajai daļai tehnikas kaudzīšu ir sava veida kodu diagrammu ģenerēšanas rīki, kas palīdzēs jums izprast kodu bāzes struktūru. Uzņēmumu IDE parasti ir iebūvēta šī funkcionalitāte. Jūs varat arī izpētīt kodu, izmantojot tādus rīkus kā ReSharper, grep vai Sourcegraph.
  • Izprotiet produktu. Jūs būsiet pārsteigts, cik daudzi izstrādātāji nezina, kā programmatūrai vajadzētu darboties, pirms viņi mēģina to “salabot”. Vienkārši izlasiet dokumentāciju.

Sakārtojiet savas domas

Tā kā daudz laika pavadīsit komunikācijā, pētniecībā un daudzuzdevumu veikšanā, jums ir nepieciešami daži rīki, kas palīdzēs visu uzturēt kārtībā.

  • TODO saraksti / Uzdevumi: Jūsu uzņēmumam jau vajadzētu būt sava veida uzdevumu programmatūrai, taču tas palīdz arī personīgai sistēmai. Izmantojiet post-it piezīmes vai programmatūru, piemēram, Trello vai Todoist.
  • Piezīmes . Sapulcēs vienmēr veiciet piezīmes, strādājiet, lai uzlabotu esošo dokumentāciju un izveidotu personisko zināšanu bāzi. Izmantojiet Evernote, OneNote vai piezīmju grāmatiņu, piemēram, senākos laikos. Tas varētu šķist pārspīlēts, bet jūs pateiksieties sev pēc gada, kad pārskatīsit šo neskaidro veidošanas procesu, kas jums prasīja 3 dienas, lai pirmo reizi noskaidrotu. Es nekad neesmu saticis labu programmatūras inženieri, kurš nebūtu veicis plašas piezīmes.
  • Diagrammas / Vizualizācijas: Cilvēki ir vizuālas radības, un procesu un arhitektūru diagrammu izveide palīdzēs jums un citiem saprast sarežģītas tēmas. Diagrammas ir īpaši noderīgas, sazinoties ar netehniskajiem kolēģiem. Izmantojiet Lucidchart, Visio vai vienkāršu tāfeli.

Zināt, kad lietot bibliotēkas

Īsa atbilde: Gandrīz visu laiku.

Ilga atbilde: 99% gadījumu jums nevajadzētu izgudrot riteni no jauna. Lielākajā daļā programmatūras inženierijas amatu noteikta veida kārtošana ir pilnīga laika izšķiešana. Tas nenozīmē, ka jums nevajadzētu zināt, kā darbojas jūsu izmantotie algoritmi un datu struktūras, jo tas palīdzēs jums izlemt, ko un kad izmantot.

Lai kļūtu par efektīvu programmatūras inženieri, jums ir jāsaprot jūsu rīcībā esošās bibliotēkas. Populārāko valodu standarta bibliotēkas ir ārkārtīgi noderīgas un ir lielākas nekā gaidīts. Turklāt kodu bāzē var izmantot arī citas specializētas bibliotēkas. Izlasiet viņu dokumentāciju un ziniet, kad tās jālieto.

Jums nevajadzētu arī baidīties ieteikt papildu bibliotēkas, ja tās ietaupīs laiku. Tomēr jums jāpārliecinās, ka esat izvēlējies labu bibliotēku rūpniecības vajadzībām. Laba bibliotēka ir:

  • Atvērtā koda , lai jūs pats varētu pārbaudīt koda kvalitāti un, iespējams, novērst kļūdas, kas ir kritiskas jūsu lietojumprogrammai.
  • Licencēts saskaņā ar atļauto licenci, piemēram, MIT un BSD , tāpēc, izmantojot to, jūsu uzņēmumam nav problēmu. Esiet piesardzīgs ar GPL, lai nejauši neatvērtu visu kodu bāzi.
  • Nobriedis , ti, tas jau kādu laiku nav pieejams, un tam ir bagātīgs funkciju kopums.
  • Uzturēts , bieži nāk klajā jauni izlaidumi.
  • Izmanto citi uzņēmumi vai projekti , kas darbojas kā apstiprinājuma zīmogs un nodrošina nozares atbalstu nepārtrauktai apkopei.

Pastāvīgu uzlabošanu

Lai apgūtu sev jaunas karjeras iespējas, papildus prasmju apguvei, kas uzlabos ikdienas darbu, jums arī nepārtraukti jāuzlabo savas prasmes un jāapgūst jaunas.

Iespējas mācīties ir daudz, un daudzas no tām ir diezgan pieejamas:

  • Tiešsaistes kursi: nevajadzētu palaist garām iespēju elastīgā formātā mācīties no labākajiem nozares profesoriem. Apskatiet Coursera, Udacity un edX (starp daudziem) par kursiem, kas var papildināt jūsu esošās prasmes.
  • Tiešsaistes maģistra grādi: nesenā tendence starp augstāk vērtētajām universitātēm, tiešsaistes maģistra grādi ir elastīgs veids, kā turpināt formālo izglītību. Pateicoties universitātes pilsētiņas grādiem, tie parasti ir arī lētāki, un lielākā daļa programmu par visu grādu maksā ~ 10 000 USD. Georgia Tech, UT un UC San Diego ir dažas no universitātēm, kas piedāvā šādus grādus. Es personīgi iesaku Georgia Tech tiešsaistes maģistra programmas, kuras esmu absolvējis šogad.
  • Blogi: emuāri ir svarīga izstrādātāju kopienas sastāvdaļa (šeit nav pārsteigums, jo jūs to lasāt šobrīd). Tādi emuāri kā Coding Horror, Joel on Software vai vēl humoristiskākas vietnes, piemēram, The Daily WTF, var sniegt labu priekšstatu par to, ko un ko nedrīkst darīt kā programmatūras inženierim. Pārlūkošana Medium, r / programmēšana, HackerNews vai citas plūsmas arī novedīs pie labiem rakstiem un emuāriem.
  • Konferences: Visbeidzot, bet ne mazāk svarīgi, konferences ir pārsteidzoša mācību iespēja, un jums noteikti vajadzētu izmantot sava uzņēmuma apmācību budžetu, dodoties uz tām. Ļoti nepilnīgs labo konferenču saraksts, kas jāpārbauda (līdzās viņu tēmai): GOTO; (General), Strange Loop (General), PyCon (Python), CPPCon (C ++), DEF CON (Security), Fluent (Web dev). Tajos visos ir arī video par (lielāko) sarunām pakalpojumā YouTube, lai jūs varētu kaut ko iemācīties, pat ja nevarat apmeklēt!

Cerams, ka šis raksts ir bruņojis jūs ar zināšanām par to, ko var sagaidīt no savas programmatūras inženiera karjeras sākuma, un devuši rīkus, lai labi darbotos šajā aizraujošajā ceļojumā! Paldies, ka lasījāt! Ja jums ir kādi jautājumi vai ieteikumi, lūdzu, atstājiet komentāru vai čivināt @AlexievValeri.