En lysande stjärna i JavaScript-communityen, Addy Osmani har höjt sig framträdande, inte bara för sina fantastiska JavaScript-artiklar och bidrag från öppen källkod, men också för att vara en av de vänligaste och närmaste utvecklarna runt.
Hans blogg är en förtrollande trove av front-end kunskap och väl värt besöket. I det här inlägget ska vi chatta med Addy om hur han fick fötterna blöt i JS och ta upp några tuffa ämnen som rör hans arbete i utvecklingsrelationer på Google.
JavaScript skulle spela en stor roll för att göra det möjligt.
Jag skrev några av mina första JavaScript-tillbaka när Netscape Navigator var den dominerande webbläsaren. Dynamisk front-end-utveckling började bara sakta bli mer populär vid den tiden, men tanken att kunna skriva något med bara HTML / CSS / JS och få det att fungera överallt var kraftfullt. Jag har häftat på den tanken och har varit sedan dess. Några av mina första skapelser var små saker du skulle skratta åt idag - miniräknare, lösenordsgeneratorer, inget för fantastiskt.
Som språkentusiast tyckte jag att JavaScript var prototypbaserat och svagt typat, så jag bestämde mig för att fortsätta lära mig det tillsammans med andra språk som C ++. Tillbaka i början av 2000-talet försökte jag överbrygga språken genom att skriva en liten tolk ovanpå SpiderMonkey (Mozillas JavaScript-motor), vilket låter mig skriva logik för mina stationära appar i JS och definiera UI-komponenter med C ++. Det var en dum idé, men jag lärde mig mycket om JavaScript-motorinternals i processen.
Jag spenderade mycket tid på att bygga små hobbysajter, men när jag var i mitt förra år på gymnasiet bestämde jag mig för att fastna fast i världen av webbläsarinternals. Jag skrev en lättviktsmotor, grundläggande HTML 4.01 / CSS 2.1 parsers och förpackade alla dessa delar till min egen lilla webbläsare. Projektet var en mardröm för att arbeta tillförlitligt, delvis på grund av hur lax webbutvecklare var med standardkompatibilitet i sina sidor - det är roligt att vara på andra sidan staketet nu! De större utmaningarna var spec-compliance, vilket resulterade i stora tabeller och underhåll, medan du laddar upp video-plugins (någon kommer ihåg bra ol 'ActiveX?).
Jag fortsatte att lära mig och använda JavaScript som frilans webbutvecklare medan jag på college, skriver långsamt mer komplexa platser och leker med Dojo. Det var emellertid inte förrän jag fick en inbjudan till Gmail 2006 att det kom till mig att webbläsaren skulle bli nästa plattform för att bygga riktiga applikationer. JavaScript skulle spela en stor roll för att göra det möjligt och jag bestämde mig för att gå permanent från desktop app-utveckling.
Sedan dess har jag försökt fortsätta att lära mig och där jag kan, driva fronten-communityen framåt genom mitt skrivande och bidrag till öppen källkod. JavaScript är praktiskt taget överallt idag, och det är en av anledningarna till att jag älskar språket. Om jag vill lära en av mina barn hur man skriver författare, kan jag bara öppna min webbläsare DevTools och visa dem. Inga ytterligare sammanställningssteg behövs - det är något speciellt speciellt med det.
Om du hoppar in i något icke trivialt ämne med den tanken, är det nödvändigt att bryta ner det i enkla, lättare smältbara steg
Hemligheten är att jag anser att jag är lite dum. Verkligen. Om du springer in i ett icke-trivialt ämne med den tanken, är det nödvändigt att bryta ner det i enkla, lättare smältbara steg för att det ska ge mening.
Det är detta perspektiv som jag tycker är att mina skrivningar känns tillgängliga - jag försöker att förnuftiga de begrepp eller verktyg som initialt kan vara ganska skrämmande för den genomsnittliga utvecklaren. Det är viktigt att kunna tillämpa detta på artiklar och speciellt dokumentation. Så, håll det enkelt. Detta bidrar till att göra artiklar mer fokuserade. Hur genererar jag så mycket innehåll samtidigt som jag förstår materialet ?. Tja, jag förstår en förutsättning.
Gör först det, gör det rätt, gör det bättre.
Einstein har detta stora citat: "Om du inte kan förklara det helt enkelt, förstår du det inte tillräckligt" och det är sant. Du kan inte lära om eller hävda ett ramverk, verktyg eller bästa praxis, om du inte har tagit dig tid att använda det själv. Att hitta den här tiden är lättare i min nuvarande roll, men tillbaka i mina dagar som en 9-5 ingenjör, skulle jag spendera tid över frukost och lunch aktivt med hjälp av vad jag senare skulle skriva om i helgen.
Att hitta tid att få allt gjort är alltid en utmaning. Under de senaste åren har jag den här mantra som jag försöker att tillämpa på varje uppgift - "
Du kan sedan dela den här första iterationen med dina kamrater och få en känsla för om du går i rätt riktning eller tanken är värd att driva. För mig är det mycket mer meningsfullt än att spendera veckor på ett utkast eller prototyp innan man frågar om inmatning.
Det är något speciellt att vara en del av ett företag med sådana höga krav.
Både AOL och Google är företag med fantastiska ingenjörsteam, och någon av mina reflektioner av kultur handlar inte om några specifika grupper, mer en allmän observation.
Ingenjörskulturen hos Google är sådan att vi bryr oss mycket om att polska och sänder saker när vi känner att de bara är rätt. Det är något speciellt att vara en del av ett företag med sådana höga krav.
På AOL var jag stolt över några av de produkter eller applikationer vi genomförde, men på grund av den snabba karaktären av affärer och konkurrens var det inte alltid möjligt att fördröja lanseringar eller utgåvor för polska. Jag tycker att det är en verklighet för många företag, trots att de kanske behöver ändra den där kulturen.
När det är möjligt att fördröja utgåvor att, som Google säger, få det "rätt" jag tror att det kan göra en värld av skillnad för dina användares första intryck av din produkt.
Jag är nöjd med riktningen TC39 har tagit över de senaste åren.
Jag är nöjd med den riktning TC39 har tagit över de senaste åren, vilket delvis har hjälpt till med involvering av Rick Waldron och Yehuda Katz från jQuery-projektet. De har uppmärksammat de mönster och bibliotek som utvecklare har varit starkt beroende av och undersöker hur dessa kan lösas bättre med hjälp av plattformsprimer. Jag kommer inte att kommentera ES6 specifikt, men jag ser fram emot att se moduler, klasser, "låt" och Object.observe ()
tillgänglig mer allmänt.
På JavaScript-community: vi är på ett bra ställe men det enda jag önskar att vi kollektivt skulle göra är att spendera mindre tid på att skapa nya ramar och mer tid investera i ansträngningar för att förbättra befintliga lösningar. Jag tycker att det är fantastiskt att utvecklare spenderar tid att lära sig att lösa problem på egen hand - det är ett av de bästa sätten att lära sig nya saker - men om det är ett experiment, gör det klart så att andra utvecklare inte förväntar dig att behålla projekt. Den typen av saker lägger bara till bullret, så var snäll och håll i åtanke när du släpper ut saker!.
En av de stora myterna där ute är att den existerar för att ersätta JavaScript.
Jag var verkligen super nyfiken på att lära mig mer om de mål som Dart hade när jag först gick med i Google. En av de stora myterna där ute är att den existerar för att ersätta JavaScript, men det visar sig att detta inte är riktigt sant. Dart riktar sig till de utvecklare som är mer bekanta med Java, C ++, C #, som försöker bygga högpresterande webbapps. och så vidare har vissa förväntningar kring deras verktyg och språk. Jag tycker att det är en legitim anledning till något som Dart ska existera.
Som företag är både JavaScript och Dart tekniker som vi tror på och investerar i. Vi deltar i TC39, arbetar med framtiden för JavaScript och fortsätter även arbetet med V8, den snabba JavaScript-motorn. Chrome-ingenjörerna fortsätter att arbeta för att driva webben framåt med nya specifikationer som Web Components. Under tiden bygger laget som ursprungligen byggde V8 nu Dart VM.
Tillbaka till din ursprungliga fråga - Jag tror att forking WebKit var mycket mer att göra med skillnaden i multi-process arkitekturen mellan båda projekten än att försöka integrera Dart i Chrome. Dart är ett separat open-source-projekt med sina egna mål och du kan fortfarande få Dartium idag (byggnaden av krom med Dart VM).
När jag först hörde nyheterna om Blink var jag oroad över att vi nu skulle ha en annan webbläsare att stödja.
Verkligheten är emellertid att det redan har funnits så många skillnader mellan de olika WebKit-portarna att detta inte kommer att påverka hur du utvecklar och testar negativt.
Faktum är att Blink tillåter oss att ge utvecklare mer av de verktyg, funktioner och kompatibilitet de behöver för att få ut det mesta av webben som en plattform. På lång sikt kommer det att låta oss prioritera funktioner som kommer att underlätta byggandet av nästa generations webbprogram och på samma sätt som V8 gav oss ett sätt att påskynda JavaScript, jag tror att Blink ska låta oss uppfinna på sätt som kommer att gynna hela plattformen.
Vi blir fastnade i debatten om inhemska vs web ganska ofta dessa dagar, men prata inte lika mycket om behovet att sätta våra användare först. De är fokus. Det finns många fall där du kan leverera en övertygande upplevelse för webben på skrivbordet och mobilen och det fungerar fantastiskt. Det sägs att det finns andra, där plattformen eller mobila webbläsare fortfarande behöver jobba. Som företag behöver du ofta ringa på det som ger mest mening för dina användare. Jag tycker att det för närvarande är mycket viktigt att erbjuda utvecklare de bästa plattformarna som är möjliga för att ringa på inbyggda vs webb, och det är vad vi gör via Android och Chrome for Mobile.
Återanvändbara komponenter.
Återanvändbara komponenter. Traditionellt har många av oss utvecklat applikationer ganska vertikalt och sprider ett enda koncept (oavsett om det är logik eller användargränssnitt) över några olika delar av projektet. Det gör inte bara det svårare att behålla idén, men det gör det också svårt att extrahera och återanvända idén i framtida applikationer utan stor ansträngning. Det minskar också våra chanser att kunna dela med sig av andra.
Utan att vi hänvisar till specifik teknik arbetar vi med att göra det enklare att definiera och paketera komponenter på webbplattformssidan, och det är nu dags att börja tänka på hur dina egna appar kan skrivas om de bryts ner i specifika komponenter.
Front-end ser en revolution i verktyg för tillfället med ett ökande antal utvecklare som börjar använda Grunt och utforskar arbetsflödesverktyg runt om det som Yeoman. Utvecklare lägger mer uppmärksamhet åt vad de kan automatisera och jag tror att detta kommer att hjälpa till att underlätta mer tid att spendera bättre applikationer och mindre tid på de manuella processerna mellan.
Att gå tillbaka till komponentens idé tror jag att mellan webbkomponenter och front-end-pakethantering har vi ett enormt tillfälle att verkligen förändra hur vi utvecklar för webben. AngularJS (och Angular Directives) har gjort ett bra jobb att återintroducera tanken om återanvändbara funktionsblock och saker ser verkligen på pakethanteringssidan av saker, genom Bower.
Skriva en app med listor du vill göra sorterbar? Bra. Några tangenttryckningar på kommandoraden och du har det. Vill du göra objekten i den listan kvarstår när du är offline? Inga problem. Några fler tangenttryckningar och du använder ett paket som en annan utvecklare en gång måste skriva för att få den möjligheten. Vill du ändra din lista till en återanvändbar komponent som någon annan kan använda? Det är lätt. Det är framtiden vi arbetar mot.
Vi är lyckliga att ha en mängd användbara verktyg till vårt förfogande på framsidan i dessa dagar - verktyg som sparar tid och gör våra liv bara lite enklare. Abstraktioner som Sass och CoffeeScript, ramar som Twitter Bootstrap, modulläsare som RequireJS, en oändlig lista över MVC- och enhetstestbibliotek. Vi skulle säga att vi är bortskämda för val och det är intressant att se hur länge det kan ta dig att få Ett projekt startade.
Uppdaterar du fortfarande webbläsaren manuellt när du ändrar din app?
Så mycket som dessa verktyg fungerar exceptionellt bra på egen hand kan det vara en tråkig process att få dem att arbeta tillsammans, särskilt om du måste sätta ihop ett arbetsflöde och bygga process där de alla sammanställer och optimeras kortfattat. Även om du lyckas få en solid byggprocess på plats, är du ofta kvar att behöva spendera mycket tid på att skriva ut kedjeplattkoden för din ansökan.
Även då måste du fråga dig själv hur bra det passar in i ditt dagliga arbetsflöde. Det finns flera små steg vi repetitivt gör medan vi utvecklar vilket lättare kan avlämnas till verktyg. Uppdaterar du fortfarande webbläsaren manuellt när du ändrar din app för att förhandsgranska hur de ser ut? Försöker du fortfarande ta reda på om du använder de senaste versionerna av alla dina beroende? Undrar om det bara fanns något som låter dig fortsätta med kodning och glömma mycket av det fantastiska arbetet?
Vi var också, varför vi började titta på huruvida vi kunde ge utvecklare en lösning på många av dessa vanliga problem. Vi försökte lösa dem i ett gratis, open-source-projekt som vi nyligen släppte kallat Yeoman. Yeomans officiella tagline är att vi är en "robust och uppfattad klientsidelack, som består av verktyg och ramverk som kan hjälpa utvecklare att snabbt bygga tvingande webbapplikationer".
Praktiskt taget är vi en serie verktyg och uppgifter som hjälper dig att uppnå automatisering av några av de mer tråkiga uppgifterna i front-end-utvecklingen. Vi består av yo (ställningsverktyget), grunt (byggverktyget) och bower (för pakethantering).
Om du upptäcker att du fortfarande skriver kedjeplattkod för din ansökan, hanterar manuellt beroende på dina appar eller sätter ihop ditt eget byggsystem för att arbeta med de verktyg du älskar, kan du hitta Yeoman en bra väg att spara dig lite huvudvärk.
Windows-utvecklaren kan verkligen hjälpa oss här.
Att skapa ett kommandoradsverktyg som fungerar bra på plattformen kan vara en delikat dans. En av de första utmaningarna med Windows-support var att många av vårt team brukade använda ett * nix-system och ha tillgång till homebrew / apt-get. Vi var dock inte så väl kända för att använda PowerShell eller Chocolatey (PowerShell-baserade Windows som motsvarar apt-get) och behövde tid för att förstå hur bra dessa lösningar jämfördes med verktygen vi hade tillgängliga någon annanstans.
Det tog då tid att hitta (eller få) alla paket som vi krävde upp på Chocolately som vi behövde git, phantoms, opting och många andra. Situationen där har förbättrats avsevärt sedan vår första release och Windows stöds nu officiellt med Yeoman med hjälp av instruktionerna på vår hemsida.
Windows utvecklare community kan verkligen hjälpa oss här genom att förespråka för mer utbredd adoption av verktyg som Chocolately och hjälpa oss att nå paritet med verktyg som apt-get. Utöver det har de varit fantastiska och vi har verkligen uppskattat hjälpen och stöttar utvecklaren i Windows har erbjudit oss hela vägen till kompatibilitet.
Jag måste ringa till Sindre Sorhus, Mickael Daniels och Paul Irish, som alla hjälpt till att förbättra våra Windows-insatser i de tidiga dagarna.
För tillfället finns det många (fantastiska) utvecklingsverktyg som skrivs som inte bara * nix, men Mac-specifika eftersom de har sin egen plattform, har egenutvecklingskostnader och kostnader. Jag skulle gärna vilja se mer öppen diskussion och utveckling av verktyg som kan fungera överallt, men det går inte att göra utan användarnas hjälp.
Om det finns ett verktyg du vill ha för Windows som du bara ser på Mac, var vänlig om det - ännu bättre, skicka in en dragningsförfrågan!
Försök att ta reda på vad det skulle ta för att ta med det till Windows (och på annat håll) och vem vet? Kanske skulle de samlade ansträngningarna för flera samhällen vara tillräckliga för att få något att hända.
Släpper min första bok, Lärande JavaScript Design Patterns (med O'Reilly) var förmodligen den prestation som gav mig den största tillfredsställelsen. Det var mitt största skrivprojekt och jag fattade beslutet att det skulle vara helt öppen källkod från början - ett samtal jag aldrig kommer ångra. Att göra pedagogiskt material tillgängligt för alla, var som helst om de har råd med det har potential för en hel del av både bra.
Det har också potential att öka din boks påverkan, så om du är en författare - snälla överväga att göra det. Du kommer inte ångra det!