Meesterontwikkelaars Addy Osmani

Adam is een heldere ster in de JavaScript-community en heeft een enorme vlucht genomen, niet alleen vanwege zijn fantastische JavaScript-artikelen en opensourcebijdragen, maar ook omdat hij een van de vriendelijkste en meest toegankelijke ontwikkelaars in de buurt is.

Zijn blog is een enorme schat aan kennis van de voorkant en het bezoek zeker waard. In deze post zullen we met Addy chatten over hoe hij in JS nat werd en enkele lastige onderwerpen aanreiken die verband houden met zijn werk in de relaties met ontwikkelaars bij Google..


V Jullie hebben JavaScript als een vis in het water genomen. Hoe bent u zo verzeild geraakt in de JS-wereld??

Javascript zou een grote rol gaan spelen in het mogelijk maken van dit.

Ik schreef een deel van mijn eerste JavaScript terug toen Netscape Navigator de dominante browser was. Dynamische front-end-ontwikkeling begon in die tijd nog maar langzaam op gang te komen, maar het idee om iets met alleen HTML / CSS / JS te kunnen schrijven en overal te laten werken, was krachtig. Ik raakte verslaafd aan dat idee en ben er sindsdien altijd geweest. Sommige van mijn eerste creaties waren kleine dingen waar je vandaag om zou lachen - rekenmachines, wachtwoordgenerators, niets te geweldig.

Als taalenthousiast vond ik dat JavaScript op prototypes was gebaseerd en zwak getypt was, dus besloot ik het te blijven leren naast andere talen zoals C ++. In het begin van de jaren 2000 probeerde ik de talen te overbruggen door een kleine interpreter te schrijven bovenop SpiderMonkey (JavaScript-engine van Mozilla), waarmee ik logica kon schrijven voor mijn desktop-apps in JS en UI-componenten kon definiëren met C ++. Het was een dwaas idee, maar ik heb veel geleerd over JavaScript-engine-internals in het proces.

Ik heb veel tijd besteed aan het bouwen van kleine hobbysites, maar toen ik vorig jaar op de middelbare school zat, besloot ik om echt in de wereld van browserinternals te blijven. Ik schreef een lichtgewicht rendering-engine, eenvoudige HTML 4.01 / CSS 2.1-parsers en verpakte al deze onderdelen in mijn eigen kleine browser. Het project was een nachtmerrie om betrouwbaar te kunnen werken, gedeeltelijk als gevolg van hoe laks webontwikkelaars waren met het naleven van normen op hun pagina's - het is grappig om nu aan de andere kant van het hek te staan! De grotere uitdagingen waren specificatie van de specificatie, het weergeven van grote tabellen en het handhaven van de prestaties, terwijl het laden van video-plug-ins (iemand herinnert zich nog goede oude 'ActiveX?).

Ik ging door met het leren en gebruiken van JavaScript als freelance webontwikkelaar tijdens mijn studie, en schreef langzaam complexere sites en speelde met Dojo. Het duurde echter niet voordat ik in 2006 een uitnodiging kreeg voor GMail, maar het kwam bij me op dat de browser het volgende platform zou worden voor het bouwen van rijke applicaties. JavaScript zou een grote rol gaan spelen in het mogelijk maken van dit en ik besloot om definitief afstand te nemen van de ontwikkeling van desktopapps.

Sindsdien probeer ik door te gaan met leren en waar mogelijk kan ik de front-end community doorsturen door mijn schrijven en bijdragen aan open-source. JavaScript is tegenwoordig vrijwel overal en het is een van de redenen waarom ik van de taal houd. Als ik een van mijn kinderen wil leren JavaScript te schrijven, kan ik mijn browser DevTools gewoon openen en tonen. Geen extra compilatiestappen nodig - daar is iets heel speciaals aan.


Q U produceert VEEL inhoud; Ik weet zeker dat mensen zich afvragen hoe je het doet. Kun je jouw geheimen delen, niet alleen om deze inhoud te genereren, maar ook om te begrijpen waar je over schrijft?

Als je met die mindset in een niet-triviaal onderwerp springt, moet je het opsplitsen in eenvoudige, gemakkelijker verteerbare stappen

Het geheim is dat ik mezelf een beetje dom vind. Werkelijk. Als je met die mindset in een niet-triviaal onderwerp springt, is het nodig om het op te splitsen in eenvoudige, gemakkelijker verteerbare stappen zodat het enige schijn van betekenis heeft.

Het is dit perspectief waarvan ik denk dat mijn schrijven toegankelijker wordt - ik probeer die concepten of hulpmiddelen die aanvankelijk nogal ontmoedigend kunnen zijn voor de gemiddelde ontwikkelaar te begrijpen. Het is belangrijk om dit te kunnen toepassen op artikelen en met name documentatie. Houd het dus simpel. Dit helpt om artikelen meer gericht te maken. Hoe genereer ik zoveel inhoud terwijl ik het materiaal begrijp ?. Wel, ik maak begrip een vereiste.

Doe het eerst, doe het dan goed, doe het dan beter.

Einstein heeft dit geweldige citaat: "Als je het niet eenvoudig kunt uitleggen, begrijp je het niet goed genoeg" en het is waar. Je kunt geen lesgeven over of een kader, tool of best practice claimen, tenzij je de tijd hebt genomen om het zelf te gebruiken. Het vinden van deze tijd is eenvoudiger in mijn huidige functie, maar in mijn tijd als een 9-5-technicus, besteedde ik tijd aan ontbijt en lunch, met behulp van wat ik later in het weekend zou schrijven.

Tijd vinden om alles voor elkaar te krijgen is altijd een uitdaging. De afgelopen paar jaar heb ik deze mantra die ik probeer toe te passen op elke taak - "Doe het eerst, doe het dan goed, doe het dan beter "- het gaat allemaal om het stellen van realistische doelen voor jezelf en het snel herhalen van zodra je iets hebt wat gewoon werkt. Het zal niet het meest welsprekend geschreven artikel zijn, noch de meest mooie code, maar het is een eenvoudige basislijn waarop je kunt bouwen.

Je kunt deze eerste iteratie dan delen met je collega's en een gevoel krijgen voor of je de goede richting uitgaat of het idee de moeite waard is om na te streven. Voor mij heeft dat veel meer zin dan weken te besteden aan een ontwerp of prototype voordat ik om input vraag.


V U was eerder bij AOL. Wat zijn de verschillen in de cultuur daar versus Google en hoe heeft dit uw visie op de ontwikkeling van software beïnvloed??

Er is iets speciaals aan deel te zijn van een bedrijf met zulke hoge normen.

Zowel AOL als Google zijn bedrijven met geweldige technische teams, en elk van mijn reflecties van cultuur gaat niet over specifieke groepen, meer een algemene observatie.

De engineeringcultuur bij Google is zodanig dat we veel geven om dingen te poetsen en te verzenden wanneer we vinden dat ze precies goed zijn. Er is iets speciaals aan deel te zijn van een bedrijf met zulke hoge normen.

Bij AOL was ik trots op de producten of toepassingen die we voltooiden, maar vanwege het snelle karakter van zaken en concurrentie was het uitstellen van lanceringen of releases voor Pools niet altijd haalbaar. Ik denk dat dit voor veel bedrijven een realiteit is, ondanks de wens die ze hebben om die cultuur te veranderen.

Wanneer het mogelijk is om releases uit te stellen, zoals Google zegt, krijg ik het "goed" Ik denk dat dit een wereld van verschil kan maken voor de eerste indruk van uw gebruikers van uw product.


V Wat zijn uw gedachten over de status van de JavaScript-gemeenschap en de richting die de TC39-groep volgt met betrekking tot ES6?

Ik ben tevreden met de richting die TC39 de afgelopen jaren heeft ingenomen.

Ik ben tevreden met de richting die TC39 de afgelopen jaren heeft ingenomen, wat deels geholpen is door Rick Waldron en Yehuda Katz te betrekken bij het jQuery-project. Ze hebben veel aandacht besteed aan de patronen en bibliotheken waar ontwikkelaars zwaar op hebben vertrouwd, en onderzoeken hoe deze beter kunnen worden opgelost met behulp van platformprimitieven. Ik zal niet specifiek ingaan op ES6, maar ik kijk uit naar modules, lessen, 'let' en Object.observe () op grotere schaal beschikbaar.

Over de JavaScript-community: we bevinden ons op een goede plek, maar het enige wat ik zou willen dat we gezamenlijk doen, is minder tijd besteden aan het maken van nieuwe frameworks en meer tijd investeren in inspanningen om bestaande oplossingen te verbeteren. Ik vind het fantastisch dat ontwikkelaars tijd besteden aan het zelfstandig leren problemen op te lossen - het is een van de beste manieren om nieuwe dingen te leren - maar als het een experiment is, maak dat dan duidelijk zodat andere ontwikkelaars niet van je verwachten dat je de project. Dat soort dingen draagt ​​alleen maar bij aan het lawaai, dus hou alsjeblieft rekening met het onthullen van dingen!.


V Veel mensen beschouwen het feit dat WebKit door Google wordt gezien als een spel om Dart in staat te stellen Dart in te voegen in Chrome. Zie je Dart het ideaal van Google over JavaScript zijn??

Een van de grote mythes die er is, is dat het JavaScript vervangt.

Ik was eigenlijk super nieuwsgierig om meer te weten te komen over de doelen die Dart had toen ik voor het eerst lid werd van Google. Een van de grote mythes die er is, is dat het JavaScript vervangt, maar het blijkt dat dit niet helemaal waar is. Dart is gericht op die ontwikkelaars die meer vertrouwd zijn met Java, C ++, C #, die proberen krachtige webapps te bouwen; en zo verder, hebben bepaalde verwachtingen over hun gereedschap en taal. Ik denk dat dat een legitieme reden is om zoiets als Dart te laten bestaan.

Als bedrijf zijn zowel JavaScript als Dart technologieën waarin we geloven en waarin we investeren. We nemen deel aan TC39, werken aan de toekomst van JavaScript en blijven ook werken aan V8, de snelle JavaScript-engine. De Chrome-engineers blijven werken om het web vooruit te helpen met nieuwe specificaties, zoals webcomponenten. Ondertussen bouwt het team dat oorspronkelijk V8 bouwde nu de Dart VM.

Terug naar uw oorspronkelijke vraag - Ik geloof dat WebKit veel meer te maken had met de divergentie van de multi-procesarchitectuur tussen beide projecten dan met het proberen Dart in Chrome in te bedden. Dart is een afzonderlijk open-sourceproject met zijn eigen doelen en je kunt Dartium nog steeds krijgen (de build van Chromium met de Dart VM).


V Nu Blink aan het werk is, hoe denk je dat dit het internet helpt, en wat zijn volgens jou een aantal nieuwe uitdagingen waarmee webontwikkelaars te maken hebben met nog een andere rendering-engine om over na te denken??

Toen ik voor het eerst het nieuws over Blink hoorde, was ik bang dat we nu een andere browser zouden hebben om te ondersteunen.

De realiteit is echter dat er al zoveel verschillen zijn geweest tussen de verschillende WebKit-poorten dat dit niet van negatieve invloed zal zijn op hoe je je ontwikkelt en test.

Met Blink kunnen we ontwikkelaars meer tools, functies en compatibiliteit bieden die ze nodig hebben om het beste uit het web te halen als een platform. Op de lange termijn kan het ons prioriteit geven aan functies die het gemakkelijker maken om de volgende generatie web-apps te bouwen en op dezelfde manier waarop V8 ons een manier gaf om JavaScript te versnellen, ik denk dat Blink ons ​​gaat laten innoveren op een manier die voordelen biedt het hele platform.


Q Google bevindt zich in een interessante positie, waar ze zwaar zijn gevestigd op zowel native apps (Android) als webervaringen. Als u ontwikkelaarsrelaties bij Google onderhoudt, hoe brengt u dan de zakelijke richtlijnen en prioriteiten in evenwicht voor beide ecosystemen?

We raken deze dagen vaak in het debat over native vs. web, maar praten niet zo veel over de noodzaak om onze gebruikers op de eerste plaats te zetten. Ze zijn de focus. Er zijn veel gevallen waarin u een aantrekkelijke ervaring voor het web op desktop en mobiel kunt bieden en het fantastisch zal werken. Dat gezegd hebbende, er zijn er nog andere, waar het platform of de mobiele browsers nog steeds werk nodig hebben. Als bedrijf moet u vaak bellen wat het meest zinvol is voor uw gebruikers. Ik denk dat het op dit moment heel zinvol is om ontwikkelaars de best mogelijke platforms te bieden voor een gesprek op native vs web, en dat is wat we doen, via Android en Chrome voor mobiel.


Q Weghalen van specifieke webtechnologieën, waaraan ontwikkelaars op een hoger niveau moeten denken als het gaat om de toekomst van het web?

Herbruikbare componenten.

Herbruikbare componenten. Vanouds hebben velen van ons applicaties tamelijk verticaal ontwikkeld, waarbij een enkel concept (of het nu logica of UI is) over een paar verschillende delen van het project wordt verspreid. Dit maakt het niet alleen moeilijker om het idee te handhaven, maar het maakt het ook moeilijk om het idee in toekomstige applicaties te extraheren en opnieuw te gebruiken zonder veel moeite. Het vermindert ook onze kansen om het onderdeel met anderen te delen.

Zonder te verwijzen naar specifieke technologieën, werken we eraan om het eenvoudiger te maken om componenten op het webplatform te definiëren en te verpakken, en het is nu een goed moment om na te denken over hoe uw eigen apps kunnen worden geschreven, als ze zijn opgesplitst in specifieke componenten.


V Wat blijven de belangrijkste technologieën, end-to-end, die naar uw mening de grootste impact hebben op het vooruitdrijven van het web? Waarom?

De front-end ziet op dit moment een revolutie in tooling met een toenemend aantal ontwikkelaars dat Grunt begint te gebruiken en workflowtools eromheen verkennen, zoals Yeoman. Ontwikkelaars besteden meer aandacht aan wat ze kunnen automatiseren en ik denk dat dit zal helpen meer tijd te spenderen aan het bouwen van betere apps en minder tijd aan die handmatige processen tussenin.


Terugkomend op het componentenidee, denk ik dat tussen webcomponenten en front-end pakketbeheer we een enorme kans hebben om de manier waarop we ons ontwikkelen voor het web echt te veranderen. AngularJS (en hoekige richtlijnen) hebben het opnieuw gebruiken van het idee van herbruikbare blokken met functionaliteit goed gedaan en dingen kijken echt naar de kant van het pakketbeheer, via Bower.

Een app schrijven met lijsten die u sorteerbaar wilt maken? Super goed. Een paar toetsaanslagen op de opdrachtregel en je hebt dat. Wilt u de items in die lijst behouden als u offline bent? Geen probleem. Nog een paar toetsaanslagen en je gebruikt een pakket dat een andere ontwikkelaar ooit moest schrijven om die mogelijkheid te krijgen. Wilt u uw lijst veranderen in een herbruikbare component die iemand anders kan gebruiken? Dat is eenvoudig. Dat is de toekomst waar we naartoe werken.


Q Yeoman is je nieuwe baby. Waarom voelde je de behoefte om zo'n ambitieuze poging te doen als bestaande projecten de behoefte leken te vullen??


We hebben het geluk dat we tegenwoordig een schat aan nuttige tools tot onze beschikking hebben - tools die ons tijd besparen en ons leven net iets gemakkelijker maken. Abstracties zoals Sass en CoffeeScript, frameworks zoals Twitter Bootstrap, module-loaders zoals RequireJS, een oneindige lijst van MVC- en unit testing-bibliothekenâ € | sommige zouden zeggen dat we verwend zijn met keuzes en het is interessant om te zien hoe lang het kan duren een project opgestart.

Bent u nog steeds handmatig uw browser aan het vernieuwen wanneer u een wijziging in uw app aanbrengt??

Zoveel als deze tools op zichzelf uitzonderlijk goed werken, kan het een vervelend proces zijn om ze samen te laten werken, vooral als je een workflow- en bouwproces moet samenstellen waarin ze allemaal compileren en geoptimaliseerd worden. Zelfs als het je lukt om een ​​solide bouwproces op zijn plaats te krijgen, moet je vaak veel tijd besteden aan het schrijven van de standaardcode voor je toepassing.

Zelfs dan moet je je afvragen hoe goed dit past in je dagelijkse workflow. Er zijn verschillende kleine stapjes die we herhaaldelijk doen tijdens het ontwikkelen en die gemakkelijker kunnen worden overgedragen aan tooling. Ververs je je browser nog steeds wanneer je een wijziging in je app aanbrengt om een ​​voorbeeld te zien van hoe ze eruit zien? Probeer je nog steeds uit te vinden of je de nieuwste versies van al je afhankelijkheden gebruikt? Vraagt ​​u zich af of er iets is dat u laat doorgaan met coderen en veel van het gruntwerk vergeet?

Dat waren we ook, daarom zijn we gaan kijken of we ontwikkelaars een oplossing konden bieden voor veel van deze veel voorkomende problemen. We hebben geprobeerd ze op te lossen in een gratis open-sourceproject dat we onlangs hebben uitgebracht, genaamd Yeoman. De officiële slogan van Yeoman is dat we een â € œrobuuste en eigenzinnige client-side stack zijn, bestaande uit tools en frameworks die ontwikkelaars helpen snel interessante webapps te bouwenâ € ??.

Praktisch gezien zijn we een reeks tools en taken die u helpen enkele van de moeilijkere taken in de front-end ontwikkeling te automatiseren. We zijn samengesteld uit yo (het steigertool), grunt (de buildtool) en prieel (voor pakketbeheer).


Als je merkt dat je nog steeds een boilerplate-code voor je applicatie schrijft, handmatig de afhankelijkheden voor je apps beheert of je eigen build-systeem samenstelt om met de tools te werken waar je van houdt, dan vind je Yeoman een leuke manier om jezelf wat hoofdpijn te besparen.


V Toen u Yeoman startte, werd Windows aanvankelijk niet ondersteund. Wat waren de uitdagingen waarmee u te maken kreeg en hoe kan de ontwikkelaarsgemeenschap van Windows hierbij helpen??

De Windows-ontwikkelaarscommunity zou ons hier echt kunnen helpen.

Het creëren van een opdrachtregelprogramma dat goed cross-platform werkt, kan een delicate dans zijn. Een van de eerste uitdagingen met Windows-ondersteuning was dat veel van ons team gewend waren een * nix-systeem te gebruiken en toegang te hebben tot homebrew / apt-get. We waren echter niet zo goed thuis in het gebruik van PowerShell of Chocolatey (het PowerShell-gebaseerde Windows equivalent van apt-get) en hadden tijd nodig om te begrijpen hoe goed deze oplossingen vergeleken met de tools die we elders beschikbaar hadden.

Daarna kostte het tijd om alle pakketten die we nodig hadden op Chocolately te vinden (of te krijgen) omdat we git, phantoms, optting en vele anderen nodig hadden. De situatie daar is enorm verbeterd sinds onze eerste release en Windows wordt nu officieel ondersteund met Yeoman volgens de instructies op onze homepage.

De Windows-ontwikkelaarscommunity zou ons hier echt kunnen helpen door te pleiten voor een bredere toepassing van hulpmiddelen zoals Chocolately en ons te helpen pariteit te bereiken met hulpmiddelen zoals apt-get. Verder zijn ze fantastisch geweest en we hebben de hulp en ondersteuning die de Windows-ontwikkelaarsgemeenschap ons biedt gedurende onze weg naar compatibiliteit enorm op prijs gesteld.

Ik moet een beroep doen op Sindre Sorhus, Mickael Daniels en Paul Irish, die allemaal echt hebben geholpen onze Windows-inspanningen in het begin te verbeteren.


Q In die zin heb ik een vraag die gebaseerd is op totale zelfzuchtige motivatie, omdat ik Windows gebruik. Hoe kunnen * nix en Windows-ontwikkelaars effectiever samenwerken zodat iedereen een bijdrage kan leveren?

Op dit moment worden er veel (fantastische) ontwikkeltools geschreven die niet alleen * nix zijn, maar Mac specifiek omdat het maken van platformoverschrijdende eigen ontwikkelingskosten en overheadkosten heeft. Ik zou graag meer open discussie en ontwikkeling van hulpmiddelen zien die overal kunnen werken, maar dit kan niet worden gedaan zonder de hulp van gebruikers.

Als u een programma voor Windows wilt dat u zojuist op Mac ziet, moet u er openlijk over praten - nog beter, een pull-aanvraag indienen!

Probeer uit te zoeken wat er nodig is om het naar Windows (en elders) te brengen en wie weet? Misschien zijn de gecombineerde inspanningen van meerdere gemeenschappen voldoende om iets te laten gebeuren.


V Je hebt uitstekende berichten geschreven, boeken gepubliceerd en bijgedragen aan top OSS-projecten, zoals jQuery en Yeoman. Van al uw professionele prestaties, is er iets dat echt opvalt als een trots moment?

Het vrijgeven van mijn eerste boek, JavaScript-ontwerppatronen leren (met O'Reilly) was waarschijnlijk de prestatie die mij de grootste voldoening gaf. Het was mijn grootste schrijfproject en ik heb de beslissing genomen om vanaf het begin volledig open source te zijn - een telefoontje waar ik nooit spijt van krijg. Het beschikbaar maken van educatief materiaal voor iedereen, overal, of ze het zich kunnen veroorloven, heeft het potentieel voor een groot deel van beide goed.

Het heeft ook het potentieel om de invloed van je boek te vergroten, dus als je een auteur bent, kun je overwegen dit te doen. Je zult er geen spijt van krijgen!


Hartelijk bedankt aan Addy om erbij te gaan zitten. Als je nog vragen hebt, weet ik zeker dat hij het niet erg vindt om hieronder in de comments te antwoorden!