En glimrende stjerne i JavaScript-fellesskapet, Addy Osmani har skyrocketed til fremtredende ikke bare for sine fabelaktige JavaScript-artikler og open source-bidrag, men for å være en av de vennligste og nærmeste utviklerne rundt.
Hans blogg er en treasture-tro på front-end kunnskap og vel verdt besøket. I dette innlegget vil vi chatte med Addy om hvordan han fikk føttene våte i JS og ta opp noen vanskelige emner knyttet til hans arbeid i utviklerforbindelser på Google.
JavaScript skulle spille en stor rolle for å gjøre dette mulig.
Jeg skrev noen av mine første JavaScript-tilbake når Netscape Navigator var den dominerende nettleseren. Dynamisk frontend-utvikling ble bare sakte begynt å bli mer populær på den tiden, men ideen om å kunne skrive noe med bare HTML / CSS / JS og få det til å fungere overalt var kraftig. Jeg ble hekta på den ideen og har vært helt siden. Noen av mine første kreasjoner var små ting du ville le av i dag - kalkulatorer, passordgeneratorer, ingenting for utrolig.
Som språkentusiaster likte jeg at JavaScript var prototypebasert og svakt skrevet, så jeg bestemte meg for å fortsette å lære det sammen med andre språk som C ++. Tilbake i begynnelsen av 2000-tallet prøvde jeg å bygge bro over språkene ved å skrive en liten tolk på toppen av SpiderMonkey (Mozillas JavaScript-motor), som lar meg skrive logikk for mine desktop-apper i JS og definere brukergrensesnittkomponenter ved hjelp av C ++. Det var en dum idé, men jeg lærte mye om JavaScript-motorinterne i prosessen.
Jeg brukte mye tid på å bygge små hobbysteder, men da jeg var i mitt siste år på videregående skole bestemte jeg meg for å bli fast i verden av nettleserinternaler. Jeg skrev en lettflyttende motor, grunnleggende HTML 4.01 / CSS 2.1-parsere og pakket alle disse delene inn i min egen lille nettleser. Prosjektet var et mareritt for å få jobbet pålidelig, delvis på grunn av hvordan laks webutviklere var med standardoverensstemmelse i deres sider - det er morsomt å være på den andre siden av gjerdet nå! De større utfordringene var spec-compliance, som gir store tabeller og opprettholder ytelse, mens du laster opp video plugins (noen husker godt, men også ActiveX?).
Jeg fortsatte å lære og bruke JavaScript som freelance webutvikler mens han var på college, sakte skrive mer komplekse nettsteder og leke med Dojo. Det var imidlertid ikke før jeg fikk en invitasjon til GMail i 2006 at det skjedde for meg at nettleseren skulle bli den neste plattformen for å bygge rike applikasjoner. JavaScript skulle spille en stor rolle i å gjøre dette mulig, og jeg bestemte meg for å gå vekk fra desktop app utvikling permanent.
Siden da har jeg forsøkt å fortsette å lære og hvor jeg kan, skyve front-end-fellesskapet fremover gjennom skriving og bidrag til åpen kildekode. JavaScript er praktisk talt overalt i dag, og det er en av grunnene til at jeg elsker språket. Hvis jeg vil lære et av barna mine hvordan man forfatter JavaScript, kan jeg bare åpne min DevTools-nettleser og vise dem. Ingen ekstra kompileringstrinn nødvendig - det er noe veldig spesielt med det.
Hvis du hopper inn i et ikke-trivielt tema med den tankegangen, er det nødvendig å bryte det ned i enkle, lettere fordøyelige trinn
Hemmeligheten er at jeg anser meg selv å være litt dum. Egentlig. Hvis du hopper inn i et ikke-trivielt emne med den tankegangen, er det nødvendig å bryte det ned i enkle, lettere fordøyelige trinn for at det skal gi mening.
Det er dette perspektivet som jeg tror gjør skrivingen til meg følsom tilgjengelig - jeg prøver å fornemme de konseptene eller verktøyene som i utgangspunktet kan føles ganske skremmende for den gjennomsnittlige utvikleren. Det er viktig å kunne bruke dette på artikler og spesielt dokumentasjon. Så hold det enkelt. Dette bidrar til å gjøre artiklene mer fokuserte. Hvordan genererer jeg så mye innhold mens du forstår materialet ?. Vel, jeg forstår en forutsetning.
Først gjør det, så gjør det riktig, og gjør det bedre.
Einstein har dette flotte sitatet: "Hvis du ikke kan forklare det enkelt, forstår du det ikke godt nok" og det er sant. Du kan ikke lære om eller kreve et rammeverk, verktøy eller god praksis, med mindre du faktisk har tatt deg tid til å bruke det selv. Å finne denne gangen er lettere i min nåværende rolle, men tilbake i mine dager som en 9-5 ingeniør, ville jeg tilbringe tid over frokost og lunsj aktivt ved å bruke det jeg senere skulle skrive om i helgen.
Å finne tid til å få alt gjort er alltid en utfordring. I de siste årene har jeg denne mantraen som jeg prøver å søke på hver oppgave - "
Du kan da dele denne første iterasjonen med dine kolleger og få en følelse av om du går i riktig retning eller ideen er verdt å forfølge. For meg er det mye mer sanselig enn å tilbringe uker på et utkast eller prototype før du ber om innspill.
Det er noe spesielt med å være en del av et selskap med så høye standarder.
Både AOL og Google er selskaper med fantastiske ingeniørlag, og noen av mine refleksjoner av kultur handler ikke om noen spesifikke grupper, mer en generell observasjon.
Ingeniørkulturen på Google er slik at vi bryr oss mye om polsk og frakt når vi føler at de er akkurat. Det er noe spesielt med å være en del av et selskap med så høye standarder.
På AOL var jeg stolt av noen av produktene eller applikasjonene vi fullførte, men på grunn av den raske virksomheten og konkurransen var det ikke alltid mulig å forsinke lanseringer eller utgivelser for polsk. Jeg tror det er en realitet for mange bedrifter, til tross for at de måtte endre den kulturen.
Når det er mulig å forsinke utgivelser til, som Google sier, få det "riktig", tror jeg det kan gjøre en verden av forskjell for brukerne dine første inntrykk av produktet ditt.
Jeg er fornøyd med retningen TC39 har tatt over de siste årene.
Jeg er fornøyd med retningen TC39 har tatt over de siste årene, som delvis har blitt hjulpet med involvering av Rick Waldron og Yehuda Katz fra jQuery-prosjektet. De har lagt merke til at mønstre og biblioteker utviklere har vært sterkt avhengige av, og undersøker hvordan disse kan løses bedre ved hjelp av plattformsprimitiver. Jeg vil ikke kommentere ES6 spesielt, men jeg gleder meg til å se moduler, klasser, "la" og Object.observe ()
tilgjengelig mer bredt.
På JavaScript-fellesskapet: Vi er på et bra sted, men det eneste jeg ønsker vi kollektivt ville gjøre, er å bruke mindre tid på å skape nye rammer og mer tid på å investere i arbeidet med å forbedre eksisterende løsninger. Jeg synes det er fantastisk at utviklere bruker tid til å lære å løse problemer på egenhånd - det er en av de beste måtene å lære nye ting på - men hvis det er et eksperiment, gjør det klart slik at andre utviklere ikke forventer at du skal opprettholde prosjekt. Den typen ting bidrar bare til støyen, så vær så snill og vær oppmerksom når du slipper ting!.
En av de store mytene der ute er at den eksisterer for å erstatte JavaScript.
Jeg var egentlig super nysgjerrig på å lære mer om målene Dart hadde da jeg først kom til Google. En av de store mytene der ute er at den eksisterer for å erstatte JavaScript, men det viser seg at dette ikke er helt sant. Dart er rettet mot de utviklere som er mer kjent med Java, C ++, C #, som prøver å bygge høyytelses webapps; og så videre, har visse forventninger rundt deres verktøy og språk. Jeg tror det er en legitim grunn til noe som Dart å eksistere.
Som et selskap er både JavaScript og Dart teknologier som vi tror på og investerer i. Vi deltar i TC39, arbeider med fremtiden for JavaScript, og fortsetter å jobbe med V8, den raske JavaScript-motoren. Chrome-ingeniører fortsetter å jobbe for å presse nettet fremover med nye spesifikasjoner som Web Components. I mellomtiden, laget som opprinnelig bygget V8, bygger nå Dart VM.
Tilbake til ditt opprinnelige spørsmål - tror jeg forking WebKit var mye mer å gjøre med divergensen mellom multi-prosessarkitekturen mellom begge prosjekter enn å prøve å legge inn Dart i Chrome. Dart er et eget åpen kildeprosjekt med sine egne mål, og du kan fortsatt få Dartium i dag (bygningen av krom ved hjelp av Dart VM).
Da jeg først hørte nyheten om Blink, var jeg opptatt av at vi nå hadde en annen nettleser for å støtte.
Virkeligheten er imidlertid at det allerede har vært så mange forskjeller mellom de ulike WebKit-porter at dette ikke kommer til å påvirke hvordan du utvikler og tester.
Faktisk gir Blink oss mulighet til å gi utviklere flere av verktøyene, funksjonene og kompatibiliteten de trenger for å få mest mulig ut av nettet som en plattform. På lang sikt skal vi prioritere funksjoner som vil lette oppbyggingen av neste generasjon webapplikasjoner, og på samme måte som V8 ga oss en måte å øke hastigheten på JavaScript, tror jeg Blink skal la oss innovere på måter som vil være til nytte hele plattformen.
Vi blir fanget opp i debatten om innfødte vs web ganske ofte i disse dager, men snakk ikke så mye om behovet for å sette våre brukere først. De er fokus. Det er mange tilfeller der du kan levere en overbevisende opplevelse for nettet på skrivebord og mobil, og det vil fungere fantastisk. Når det er sagt, er det andre, hvor enten plattformen eller mobilnettleserne fortsatt trenger jobb. Som en bedrift må du ofte ringe på det som gir mest mening for brukerne. Jeg tror at det for øyeblikket gir stor mening å tilby utviklere de beste plattformene som er mulige for å ringe på native vs web, og det er det vi gjør, via Android og Chrome for Mobile.
Gjenbrukbare komponenter.
Gjenbrukbare komponenter. Tradisjonelt har mange av oss utviklet applikasjoner ganske vertikalt og spredt et enkelt konsept (enten det er logikk eller brukergrensesnitt) på tvers av noen forskjellige deler av prosjektet. Ikke bare gjør dette det vanskeligere å opprettholde ideen, men det gjør det også vanskelig å trekke ut og gjenbruke ideen i fremtidige applikasjoner uten mye arbeid. Det reduserer også sjansene for å kunne dele komponenten med andre.
Uten å henvise til spesifikke teknologier, jobber vi med å gjøre det enklere å definere og pakke opp komponenter på webplattformssiden, og nå er det en flott tid å begynne å tenke på hvordan dine egne apper kan skrives hvis de ble brutt ned i spesifikke komponenter.
Front-end ser en revolusjon i verktøyet for øyeblikket, med et økende antall utviklere som begynner å bruke Grunt og utforsker arbeidsflytverktøy rundt det som Yeoman. Utviklere betaler mer oppmerksomhet til hva de kan automatisere, og jeg tror at dette vil bidra til å lette mer tid på å bruke å bygge bedre programmer og mindre tid på de manuelle prosessene i mellom.
Når jeg går tilbake til komponentens ide, tror jeg at mellom webkomponenter og frontend-pakkeadministrasjon har vi en stor mulighet til virkelig å forandre måten vi utvikler for nettet. AngularJS (og Angular Directives) har gjort en god jobb med å re-introdusere ideen om gjenbrukbare funksjonsblokker og ting ser virkelig opp på pakkehåndteringssiden av ting, gjennom Bower.
Skriver en app med lister du vil sortere? Flott. Noen tastetrykk på kommandolinjen, og du har det. Vil du gjøre elementene i den listen vedvarende når du er frakoblet? Ikke noe problem. Noen få tastetrykk og du bruker en pakke en annen utvikler en gang måtte skrive for å få den muligheten. Vil du slå listen din til en gjenbrukbar komponent noen andre kan bruke? Det er enkelt. Det er fremtiden vi jobber med.
Vi er heldige å ha et vell av nyttige verktøy til disposisjon på fronten i disse dager - verktøy som sparer oss tid og gjør livet enklere. Abstraksjoner som Sass og CoffeeScript, rammer som Twitter Bootstrap, modullastere som RequireJS, en uendelig liste over MVC og enhetstestingsbiblioteker. Vi vil si at vi er bortskjemt for valg, og det er interessant å se hvor lenge det kan ta deg for å få Et prosjekt startet.
Oppgraderer du nettleseren din manuelt når du endrer appen din?
Så mye som disse verktøyene fungerer svært godt alene, kan det være en kjedelig prosess å få dem til å jobbe sammen, spesielt hvis du må sette sammen en arbeidsflyt og bygge prosess der de alle kompilerer og blir optimalisert kortfattet. Selv om du klarer å få en solid byggeprosess på plass, forlater du ofte å måtte bruke mye tid på å skrive ut kjelekode for søknaden din.
Selv da må du spørre deg selv hvor godt dette passer inn i din daglige arbeidsflyt. Det er flere små skritt vi repetitivt gjør mens du utvikler, som lettere kan leveres til verktøy. Oppgraderer du nettleseren din manuelt når du endrer appen din for å forhåndsvise hvordan de ser ut? Fortsatt prøver å finne ut om du bruker de nyeste versjonene av alle dine avhengigheter? Lurer på om det bare var noe som la deg fortsette med koding og glemme mye av det grunne arbeidet?
Vi var også, derfor begynte vi å se på om vi kunne gi utviklere en løsning på mange av disse vanlige problemene. Vi prøvde å løse dem i et gratis, åpen kildekodeprosjekt vi nylig utgitt, kalt Yeoman. Yeoman s offisielle tagline er at vi er en "robust og oppfylt klientside-stabel, som består av verktøy og rammer som kan hjelpe utviklere raskt å bygge overbevisende webapplikasjoner".
Praktisk sett er vi en serie med verktøy og oppgaver som hjelper deg med å automatisere noen av de mer kjedelige oppgavene i frontend-utviklingen. Vi er sammensatt av yo (stillasverktøyet), grunt (byggverktøyet) og bower (for pakkehåndtering).
Hvis du finner ut at du fortsatt skriver boilerplate-kode for din søknad, håndterer du avhengighetene for appene dine manuelt eller setter sammen ditt eget byggesystem for å jobbe med verktøyene du elsker, kan du finne Yeoman en fin måte å spare deg for noen hodepine.
Windows utvikler samfunnet kan virkelig hjelpe oss her.
Å lage et kommandolinjeverktøy som fungerer godt på tvers av plattformen, kan være en delikat dans. En av de første utfordringene med Windows-støtte var at mange av teamet vårt var vant til å bruke et * nix-system og ha tilgang til homebrew / apt-get. Vi var imidlertid ikke så godt kjent med å bruke PowerShell eller Chocolatey (PowerShell-baserte Windows tilsvarende apt-get) og trengte tid til å forstå hvor godt disse løsningene sammenlignet med verktøyene vi hadde tilgjengelig andre steder.
Det tok da tid å finne (eller få) alle pakkene vi krevde opp på Chocolately som vi trengte git, fantomer, opting og mange andre. Situasjonen der har blitt betydelig forbedret siden vår første utgivelse, og Windows er nå offisielt støttet av Yeoman ved hjelp av instruksjonene på vår hjemmeside.
Windows-utvikler-fellesskapet kan virkelig hjelpe oss her ved å foreslå for mer utbredt adopsjon av verktøy som Chocolately og hjelpe oss å nå paritet med verktøy som apt-get. Annet enn det de har vært fantastisk, og vi har virkelig verdsatt hjelpen og støtter Windows-utviklerfellesskapet, har tilbudt oss gjennom hele veien til kompatibilitet.
Jeg må ringe til Sindre Sorhus, Mickael Daniels og Paul Irish, som alle bidro til å forbedre vår Windows-innsats i de tidlige dager.
For øyeblikket er det mange (fantastisk) utviklingsverktøy som skrives, som ikke bare er * nix, men Mac-spesifikke fordi det er egen utviklingskostnad og overhead for å lage dem på tvers av plattformen. Jeg vil gjerne se mer åpen diskusjon og utvikling av verktøy som kan fungere overalt, men dette kan ikke gjøres uten hjelp fra brukerne.
Hvis det er et verktøy du vil ha for Windows som du bare ser på Mac, vær så snakk om det - enda bedre, send inn en trekkforespørsel!
Prøv å finne ut hva det ville ta å bringe det til Windows (og andre steder) og hvem vet? Kanskje den kombinerte innsatsen til flere fellesskap ville være nok til å få noe til å skje.
Slipper ut min første bok, Lære JavaScript Design Patterns (med O'Reilly) var sannsynligvis prestasjonen som ga meg den største tilfredsheten. Det var mitt største skriveprosjekt, og jeg bestemte meg for å være helt åpen kilde fra starten - et anrop jeg aldri vil angre på. Å gjøre pedagogisk materiale tilgjengelig for alle, hvor som helst hvorvidt de har råd til det, har potensialet for en stor del av begge gode.
Det har også potensial til å øke bokens innvirkning, så hvis du er en forfatter - vær så snill å vurdere å gjøre det. Du vil ikke angre på det!