The Learning Conundrum

När jag började arbeta inom informationstekniken professionellt år 1989 var det ganska enkelt när det gäller att välja en riktning att gå in i. Åtminstone i mitt område (South Florida) gick du in i ett av följande områden:

  • Nätverks- och systemhantering
  • Databasadministration
  • Mjukvaruutveckling
  • Projektledningsspecifika uppgifter (inklusive QA-arbete)

ColdFusion var min valfria teknik och det varade mig nästan tio år.

Jag tog programvaruutvecklingsvägen och under mycket lång tid var det enkelt att välja ett programmeringsspråk som du kunde basera din karriär på. I mitt fall började jag med Clipper (en dBase-baserad kompilator) och så småningom förgrenas till klient-server utveckling med PowerBuilder, den senare är mitt goto-verktyg i nästan fem år.

Och även när jag kom in i webbutveckling var verktyg och teknik fortfarande enkla att välja, främst på grund av att webben fortfarande var så ung och enkel efter back, uppdaterar stilutveckling på serversidan. ColdFusion var min valfria teknik och det varade mig nästan tio år. Och senast 2008 har jQuery och JavaScript varit mitt fokus sedan 2008.

Det finns en anledning till att jag säger allt detta.


Hamsterhjulet

Jag har varit mycket lycklig att ha valt tekniker som har haft stor livslängd men nyligen har jag märkt en dramatisk förändring i branschen. Mognaden av webbutveckling har lett till en explosion av nya verktyg som syftar till att hjälpa till att hantera den komplexa processen att bygga dagens sofistikerade webbplatser och appar. Det här är faktiskt en väldigt bra sak, eftersom webbutveckling länge var som den vilda västern. Formaliseringen av mönster, processer och bästa praxis är verkligen en positiv sak och kommer alltid att bidra till att bygga väsentligt stabila system.

Och mycket av denna explosion har drivits av enkel tillgång till sofistikerade programmeringsspråk och verktyg, många erbjuds gratis via open source-community. Detta har gjort det möjligt för utvecklare att ompröva hur saker ska byggas och ge dem möjlighet att bygga fantastiska verktyg.

Denna bemyndigande kan dock vara ett dubbelkantigt svärd för utvecklingssamhället eftersom det känns som om vi är på ett hamsterhjul utan bromsar som tillåter oss att sluta och ta saker. Det är lite av en evig inlärningscykel där vi många fall, som inte håller sig på de senaste utvecklingstrenderna, kan göra dig otroligt bakom när det gäller nuvarande utvecklingsmetoder. Jag vet att jag har känt det mer än en gång och i samtal med mina kollegor verkar det vara en genomgripande känsla.


Utvecklingen av lärande

Jag tycker att det är rättvist att säga att programutvecklare har en av de mest komplexa jobben i världen.

Du hör ständigt från andra att vårt fält är ett konstant lärande och det är så sant. Utvecklare är rockstjärnor nuförtiden och det beror på att vi arbetar med avancerade saker som gör en påtaglig inverkan på stora samhällen av människor. Och dessa samhällen kräver mer information via enklare användarupplevelser över flera formfaktorer. Jag tycker att det är rättvist att säga att programutvecklare har en av de mest komplexa jobben i världen. Så ständigt lärande är inte ett val längre; det är ett krav.

Det var därför jag nämnde min karriärväg hittills. Jag tycker att det liknar det hos många av mina kollegor, där vi bekvämt kunde vara beroende av att vi vet att det var "x" antal år innan vi började omskola oss själva. Om du är i webbutvecklingsvärlden är det inte längre fallet och enligt min mening ett karriärbegränsande drag. Jag säger inte att du måste gå och lära dig allt nytt bibliotek som kommer ut. Ärligt talat, tror jag att många av de libs och verktyg som utpressas:

  • Är tänkt att skrapa en mycket specifik klåda
  • Kopiera ett befintligt verktyg och erbjuder lite extra värde
  • Är tänkt att tillfredsställa någons ego i en "titta på vad jag byggt" typ av sak

Men det finns en tydlig motivering för att hålla sig på toppen av nya tekniker, speciellt när du ser dina kamrater chatta om dem. Och för att vara tydlig definierar jag inte jämnare som de jag jobbar med. Jag tittar noga på personer på Twitter, Facebook, Google+, bloggar och forum för att mäta var de tänker på. Om du inte gör detsamma gör du dig själv och din karriär en missnöje.

När du blir äldre (ja jag rör på ålder), för de flesta blir "tid" den största begränsande faktorn för att stanna aktuell. Jag kan intyga detta vid 45 års ålder med massor av familjeåtaganden, jag måste vara extremt regimenterad för att ägna den nödvändiga lärandes "tiden" samtidigt som jag försäkrar att jag ägnar "tid" till min familj (som är min främsta prioritet) . Och jag är övertygad om att jag inte är ensam i det här sammanhanget. Jag tänker tillbaka till när jag var på min 20-tal och brukade skriva för tidskrifter (ni minns dem rätt?) Och mina kollegor skulle fråga, "Hur har du tid att göra det?". Tja, det har kommit full cirkel och jag befinner mig själv att fråga mina 20-något-utvecklare vänner samma sak.

Det jag har lärt mig är att jag inte kan jämföra mig med en 20-något eftersom våra prioriteringar i de flesta fall är olika. En ung buck kommer alltid att ha mer tid att fokusera på de nyaste sakerna så att han eller hon kan tinka bort och till och med bygga det nästa stora verktyget. Och det är fantastiskt och jag kommer ihåg de här dagarna själv!

När du går vidare i din karriär är det viktigt att du inte lulled till självkänsla och utvecklar en plan som gör att du kan hålla dig uppdaterad genom att vara selektiv av inte bara den teknik du väljer utan också de mål du planerar att uppnå.


Val, Val, Val

När du tittar på den teknik som finns tillgänglig, är det lätt att bli överväldigad på var du ska börja, mycket mindre vad du ska välja. Jag empati med dig och du är verkligen inte ensam. En del av problemet är att som utvecklare är vi naturligtvis nyfiken på ny teknik. Jag gillar att kalla det "moth to a flame" syndrom:

  • Åh, det finns en ny lib för att efterlikna webbkomponenter! (fladdra, fladdra, fladdra)
  • Denna influenser släppte precis denna nya preprocessor! (fladdra, fladdra, fladdra)
  • Åh min gud, här är den 4: e SaaS som erbjuder realtidsbackend-tjänster! (fladdra, fladdra, fladdra)

Listan kan fortsätta och fortsätta. Vad jag försöker få är att vi ibland drabbas av uppmärksamhetsunderskott och försöker rationalisera det genom att tro att det omedelbart löser ett obefintligt eller framtida problem för oss. I grund och botten är vi teknikhackare som gör en "just in case". I själva verket är det viktigt att luta sig tillbaka och bestämma vad du försöker åstadkomma och hur den nuvarande sviten av verktyg löser dina problem baserat på vart du vill gå till.

En del av problemet är att som utvecklare är vi naturligtvis nyfiken på ny teknik.

Till exempel har jag hört så många utvecklare säga att de bara vill lära sig iOS för att finna att de inte har några riktiga planer för att bygga en iOS-app. Om du har tid att göra det för skojs skull, mer makt till dig men om du inte gör det är det dags att spendera saker som är faktiskt viktiga.

Om du till exempel är en främst webbutvecklare och det är vad du planerar att vara på en tid, tänker jag på att du är snabb på saker som AMD, ES6, Sass och Sass Yeoman är mycket viktigare än att dyka i IPTables, ActiveRecord, WebView eller Amazon EC2. Innan alla förlorar sina tankar på grund av vad jag just sagt, låt oss vara tydliga om du kan klara av att lära sig alla dessa saker (till exempel en full stack-utvecklare), mer kraft för dig eftersom det kommer göra dig mer värdefull.

Vad jag försöker förmedla är att istället för att tillåta dig att bli överväldigad med tanken på att lära dig "full stack", smala ner räckvidden till lättare att hantera mål. Bestämma var din karriär fokuserar, ange en handfull nyckelteknik du borde vara snabb och fokusera på dem för att du ska vara relevant inom din karriär fokus.

Front-end-utvecklaren, till exempel, är tillräckligt inblandad och att hålla nuvarande kommer att hålla dig upptagen under lång tid. Lou Lazaris skrev ett inlägg tillbaka 2011 med titeln "Färdigheter för Front-End Developers" och i många fall är han på plats. Om du tittar på hans lista är han speciellt inriktad front-end tekniker som är viktiga för den rollen. Det förstärker mitt tänkande att det är bättre att begränsa omfattningen av det du lär dig till hanterbara bitar inom den roll du befinner dig i. Men det är också viktigt att filtrera ner listor som dessa ännu längre. Tror jag att CoffeeScript är avgörande för min framgång som front-end dev? Absolut inte, vilket är anledningen till att jag med avsikt inte har tilldelat tid åt det.

Återigen förespråkar jag inte att lära mig så mycket som möjligt. Trots att jag helt klart är på framsidan av saker jobbar jag för närvarande med att lära Ruby and Rails eftersom jag skulle vilja lära mig en ny server-sidostack för att runda ut mina färdigheter. För mig innebär det att offra att lära sig hur man använder något som Yeoman men jag har tagit tid att bestämma värdet för att gå ner på den här vägen och jag tycker att det är värt för mig.


Lär dig något

Lärandet kommer i olika stilar. Jag lär mig bäst av:

  • Läsa en bok (en riktig med faktiska papperssidor)
  • Skriv in kodexempel och se resultat
  • Att ha en mentor kan jag ställa frågor från

Andra föredrar att helt enkelt dyka in i någonting och lära sig av skolan av hårda banor. Oavsett hur du lär dig, att ha bra resurser tillgängliga är en kritisk del av ekvationen.

Allt fler har jag lutat mot online-kurser för att de har mognat till en punkt där de i många fall är jämförbara i kvalitet till deras bröllop på plats. De har också flexibilitet så att du kan göra saker på ditt eget schema (nästan alltid) och att fokusera på den teknik som är viktig för dig.

I mitt fall har jag nyligen anmält mig till One Month Rails som erbjöd mig följande:

  • Flexibilitet: Jag deltar på mitt schema utan att pressa på att offra enorma mängder av min personliga tid
  • överkomliga: Det är $ 49 $ 99 och verkar vara välstrukturerad för priset.
  • mentorskap: Jag kan kontakta kursens upphovsman direkt och få stöd av deras samhälle

Oavsett vilka inlärningsmöjligheter som är tillgängliga, om du inte ställer undan någon särskild inlärningstid, är det allt irrelevant.

Jag ser detta som en hoppstartmöjlighet som kommer att kompletteras med webbplatser som Nettuts + och Tuts + Premium samt böcker och mina gemenskapskontakter. Men i slutändan är kursens flexibilitet och takt det som jag känner kommer att låta mig lära mig något nytt i tid. Kostnaden är verkligen en faktor som du måste väga mot den förväntade inlärningsförmånen och resulterande uppdaterad skicklighet.

Det faktum att det finns så många online inlärningsmöjligheter som är tillgängliga (många av dem gratis) gör det väsentligt lättare att behålla din skicklighetsnivå, speciellt om du är metodisk om vad du vill lära dig (till exempel, var inte en fjäril).

Men du måste räkna ut tiden att lära dig. Oavsett vilka inlärningsmöjligheter som är tillgängliga, om du inte ställer undan någon särskild inlärningstid, är det allt irrelevant. Jag har personligen funnit att man spenderar en till två timmar, två till tre gånger i veckan omedelbart efter att arbetet verkar fungera bra för att mitt sinne fortfarande är i utvecklingsläge. Jag chattade nyligen med en vän som tycker det är bättre att vakna väldigt tidigt (6:00) och fokusera på lärande under de första timmarna på morgonen innan man påbörjar arbetet. På det sättet är han fräsch och fokuserad, fri från distraheringar eller oro över sitt jobb.

Min bra vän och badassutvecklare Joe McCann erbjöd denna bra feedback:

"Den enda kunskapen jag lägger till är att den första sak jag lärde mig att studera filosofi på college var inte vad jag lärde mig, men hur jag faktiskt lär mig saker. Att förstå hur man lär sig, förstår etc. är nyckeln till att lära sig en ny färdighet eller förbättra de nuvarande.

Om någon lär sig genom att läsa en bok eller skriva notecards eller höra den via föreläsningar, är alla dessa tillgängliga att använda nu online. Det handlar om att förstå hur du lär dig och sedan går och söker rätt medium att göra det."

Bra sagt.


Lärande resurser

Det är självklart att jag tror att Nettuts + och de olika Envato-egenskaperna erbjuder några av de bästa online-lärandealternativen runt. Dessutom finns här ett par lärosäten jag har använt och rekommenderar:

  • Codeacademy: Lär dig JS, Ruby, Python och mer via deras interaktiva webbplats
  • Ember 101: Ryan Florence gjorde ett bra jobb att skapa skärmdumpar som går igenom processen att lära sig Ember
  • Varför är Poignant Guide till Ruby: Stilen tar lite vänja men det är definitivt en bra resurs för att lära Ruby
  • Egghead.io: Fokuserad nästan uteslutande på AngularJS och rekommenderas av många medlemmar i samhället
  • Ruby on Rails Tutorial: Det här är goto-handledningen för alla som bara börjar med Rails-utveckling

Om du vill ha något lite mer strukturerat och hardcore, är en ny trend on-site bootcamps där du kommer att satsa mycket tid på att lära dig hur du använder den senaste tekniken. Observera bara att många av dessa kräver att du flyttar till var bootcamp hålls och begår heltid till det under några veckor. Dessa kurser är också dyra i tusentals dollar i utbyte mot den mer personliga inlärningsupplevelsen. Jag har personligen deltagit i Bloc.io bootcamp men behövde inte flytta. Medan jag inte kunde klara det på grund av tidsbegränsningar skulle jag rekommendera det. Här är några av de bootcamps som har fått mycket positiv press:

  • Bloc.io: Välstrukturerad kurs som leder dig genom aktuell teknik och ger dig online mentorering via e-post, chatt eller röst. Kräver inte att du flyttar.
  • Hacker School: Baserat i New York, är det en tre månaders onsdag bootcamp där du arbetar heltidsinlärning programmering färdigheter i Ruby och Python
  • Starter League: På plats i Chicago, IL och samarbetat med 37signals (beslutsfattare av Basecamp) för att förbättra deras lärande erfarenhet.

Webbplatsen BootCamper har aggregerat en lista över de olika bootcamps som är tillgängliga och ger information om dem på ett sökbart sätt.


Få Unstuck

Det viktigaste är att fortsätta att lära sig och göra det i en hanterbar takt och på ett tankeväckande sätt.

Jag har skrivit något liknande här för ett tag. Det är lite självbetjäning eftersom det hjälpte mig att skaka ner känslor jag har haft om att vara överväldigad med hamsterhjulet att lära sig. Med tiden har jag tittat på sätt att se till att jag stannar på saker och ting medan jag inte brinner ut mig och jag har kommit inse att det är omöjligt att hålla sig på toppen av allt, även i min egen nisch. Det finns bara för många devs som bygger för många svalar saker och inte tillräckligt "tid".

Så jag har beslutat att fokusera på saker som är aktuella och relevanta men kan inte vara blödande kant och den senaste coola leksaken. Jag tycker att detta är ett mycket mer hanterbart sätt att lära sig för mig. Och jag tycker också att det är viktigt att återvända till de provade och sanna sakerna som kanske inte är den senaste modellbilen men kan ha några stora överraskningar för dig under huven. Jag ser tillbaka till Jeff Atwoods stora inlägg "Varför Ruby?" där han diskuterar sitt val för att använda Ruby för att bygga diskurs och specifikt berör Rubins mognad och brist på kylning.

Det viktigaste är att fortsätta lära sig och att göra det i en hanterbar takt och på ett tankeväckande sätt. Ge verkligen tanken på var du är på väg i din karriär, redogör för de viktigaste sakerna du borde vara bra inom det här området och arbeta för att utveckla en plan för att ta itu med att stanna nuvarande. Det finns gott om flammor där ute och du behöver inte klappa dina vingar till var och en av dem.

Jag skulle gärna lära mig mer om hur du håller dig uppdaterad så var god och kom med dina förslag i kommentarerna.