چگونه گوگل صفحه اصلی را با Angular 2 خراب کرد
All Things Open Talk درس هایی را در مورد چگونگی ارتقا ندادن بسته نرم افزاری ارائه کرد
کاریکاتوری از یک مهندس نرم افزار سابق گوگل، با عنوان "به گوگل خوش آمدید"، مدتی قبل دست به دست شد. دارای دو جاده واگرا بود که هیچکدام قابل عبور نبودند. یکی از آنها جاده اصلی بود که بهعنوان منسوخ علامتگذاری شده بود (در تابلو نوشته شده بود: «حتی به آن فکر نکن». با این حال، جاده جدید به عنوان هنوز در حال ساخت ("خطر") علامت گذاری شده بود، و همچنین غیرقابل استفاده بود.
این انتخاب بدون بردی بود که دو میلیون توسعهدهنده فرانتاند در سال 2014 با آن مواجه شدند، زمانی که گوگل بهطور غیرمنتظره چارچوب جاوا اسکریپت محبوب خود، AngularJS را به نفع Angular 2 که دارای معماری کاملا متفاوت، نامی گیجکننده، بدون مسیر ارتقا بود و حتی هنوز به طور کامل منتشر نشده بود، منسوخ کرد.
بنابراین، بسیاری از توسعه دهندگان چرخ را چرخانده و به جای آن به Reactville یا Vuetown رفتند.
اینکه چگونه گوگل ارتقای Angular را خراب کرد، درسهایی به موقع در مورد نحوه بهروزرسانی نکردن بسته نرمافزاری ارائه میدهد، که استفان فلوین، مدافع سابق توسعهدهنده Google در یک سخنرانی در کنفرانس All Things Open هفته گذشته بیان کرد.
فلوین گفت: «عدم قطعیت انگیزه را از بین میبرد. زمانی که شما همه چیزهایی را که [توسعهدهندگان] میدانند و دوست دارند، از بین میبرید، آنها احساس ناامیدی میکنند.»
Fluin اکنون رئیس روابط توسعه دهندگان Buildkite است، اما او از سال 2016 تا 2021 در پروژه Angular برای Google کار کرده است.
او به حضار گفت: "در آن زمان اوضاع کمی خشن بود. این یک راهپیمایی مرگ بود." ما هیچ ایدهای نداشتیم که انگولار 2 چه زمانی عرضه میشود و اصول اصلی انگولار مدام تغییر میکرد.
از AngularJS به Angular 2
گوگل دلایل خوبی برای به روز رسانی Angular داشت.
تیم AngularJS از بخش زیرساخت گوگل ربوده شده و تحت بخش تبلیغات آن قرار گرفته است، جایی که نرم افزار می تواند به طور کامل مورد بهره برداری قرار گیرد. برای پشتیبانی از عملیات با آن اندازه، Angular به دقت بیشتری نیاز داشت.
AngularJS اصلی در سال 2009 به عنوان یک پروژه جانبی مهندس گوگل Miško Hevery راه اندازی شد که می خواست HTML را گسترش دهد. Google AngularJS را به یک پروژه داخلی کشاند زیرا توسعه دهندگان Google کار کردن با آن را آسانتر از Google Web Toolkit مبتنی بر جاوا (GWT) یافتند.
این چارچوب بهسرعت با توسعهدهندگان وب بیرونی نیز مواجه شد، آنها به راحتی زاویههای HTML (از این رو نام آن) را درک میکردند و مولفههای تعاملی بیشتری میخواستند.
Heery AngularJS 1.3 را با یک مدل کنترلکننده سنتی ساخت که تمام ورودیهای کاربر، منطق و انتقال دادهها را تحت شی جاوا اسکریپت $scope مدیریت میکرد.
Angular 2 که در کنفرانس ng-europe 2014 معرفی شد، یک تغییر بزرگ در معماری بود. آن را به یک مدل جزء، با هر قالب HTML از ویژگی های کلاس خود لذت می برد. پس از یک جدال اجباری و ناراضی با دارت گوگل، تیم Angular را به طور کامل در TypeScript بازنویسی کرد، بدون هیچ گونه سازگاری با عقب.
این موضوع بسیار قابل قبول بود و سخنرانی مقدماتی در ng-europe به نظر می رسید که توسعه دهندگان Angular را بیش از آنکه الهام بخش باشد، ترسانده است. برای هر ویژگی دور ریخته شده، بلندگوها تصویری از یک سنگ قبر ("کنترل کننده های RIP") را نمایش می دادند و صدای ضبط شده ای از زنگ کلیسا را در پس زمینه پخش می کردند.
فلوین گفت: «این صحبتها هنوز هم امروز به خاطر آنچه که با جامعه انجام داده بدنام است. "همه این چیزهایی که شما درباره AngularJS می دانید و دوست دارید از بین رفته اند. آنها مرده اند. و هیچ کس نمی دانست که این اتفاق می افتد."
فلوین در سخنرانی خود خاطرنشان کرد: به طور کلی، زمان خوبی برای مهاجرت نرم افزاری نبود. پایتون در حال انتقال از نسخه 2 به 3 بود، همانطور که دسکتاپ KDE از نسخه 4 به نسخه 5 منتقل شد. و انتقال سنگی از گنوم 2 به 3 هنوز در آینه دید عقب برای بسیاری دیده می شد.
در یک نام چیست؟
Fluin توصیه کرد: "اگر می خواهید توسعه دهندگان خود را با خود بیاورید، به آنها یک مسیر بدهید. فقط چیز قدیمی خود را نکشید و سپس چیز جدیدی را آماده نکنید."
بسیاری از برنامهنویسها به React و Vue.js، دو فریمورک فرانتاند دیگر جاوا اسکریپت که مدل مؤلفه را نیز میپذیرفتند و در حال تولید بودند، جدا شدند.
در بررسی وضعیت JS در سال 2016، React محبوب ترین فریم ورک فرانت اند بود که 53 درصد از توسعه دهندگان JS گزارش دادند که از آن استفاده کرده اند. مخاطبان Angular به شدت دوشاخه بودند. 30 درصد هنوز از نسخه کلاسیک استفاده میکنند در حالی که فقط 13 درصد از Angular 2 استفاده میکنند.
Angular 2 سرانجام در سپتامبر 2016 منتشر شد و پس از آن Angular 4 در ماه مارس سال بعد عرضه شد. نسخه 3 بدون هیچ دلیل قابل تشخیصی به طور کامل حذف شد. در همین حال، AngularJS classic که تا پایان سال 2021 به طور رسمی بازنشسته نشده بود، در بهار 2016 با معرفی مؤلفه ها به نسخه 1.5 به روز شد.
گل آلود شدن بیشتر آب ها، نامگذاری چارچوب ها بود که بسیاری از ناظران عادی را گیج کرد. آیا AngularJS با Angular 2 متفاوت بود؟ و آیا قسمت "2" از نام Angular، نشان دهنده تغییر کامل معماری است یا شماره نسخه آن؟
فهمیدن این تغییر نام به یک باتلاق بزرگ تبدیل شد. فلوین گفت: «ما باید دستورالعملهای ارتباط عمومی را اصلاح میکردیم. باید متخصصانی را آموزش میدادیم. باید نمودار دانش Google را اصلاح میکردیم، که پایگاه داده حقایق Google درباره جهان است.
او به حضار گفت: «نامگذاری و نسخهسازی مهم است. آنها به معنای فنی صرف اهمیتی ندارند، اما برای انسانها مهم هستند، زیرا این انسانها هستند که شما سعی میکنید با آنها بهروز باشید.»
به راحتی می توان گوگل را به دلیل نزدیک به غرق شدن کشتی Angular سرزنش کرد، اما در برآوردن نیازهای گوگل موفقیت آمیز بوده است. امروزه، Angular مبتنی بر کامپوننت، رابط کاربری Gemini، Google Analytics و برنامههای بیشماری دیگر گوگل را تقویت میکند. اکنون با چارچوب داخلی ویز با عملکرد بالا گوگل که در اصل برای شبکه اجتماعی بدبخت Google+ طراحی شده بود، همگرا شده است.
Angular همچنین در الگوی بهروزرسانی قابل پیشبینیتر و کاربرپسندتر قرار گرفته است. بهروزرسانیها سرعت انتشار معمولی دارند، در حال حاضر دو بار در سال. آنها با وظیفهشناسی از دستورالعملهای نسخهسازی معنایی پیروی میکنند، با شمارههای نسخه اصلی نشاندهنده تغییرات شکسته است. گوگل هر نسخه جدید فریم ورک را قبل از انتشار عمومی در برنامه های خود آزمایش می کند. هر ویژگی که برای حذف برنامه ریزی شده باشد ابتدا برای یک سال منسوخ می شود.
اما در نگاهی به گذشته، ممکن است گوگل بهتر باشد که نامی کاملا متفاوت برای Angular 2 بگذارد، حتی اگر به معنای ایجاد یک پایگاه کاربر جدید از ابتدا باشد.
Fluin به The Register گفت: "توسعه دهندگان جاوا اسکریپت دوست داشتند فریمورک های جدید را امتحان کنند. بنابراین، تظاهر به یک چارچوب جدید ممکن بود بهتر باشد." ®
متن اصلی (انگلیسی)
How Google fumbled the frontend with Angular 2
All Things Open Talk provided lessons in how not to upgrade a software package