۲۹ شهریور ۱۴۰۳

Techboy

اخبار و اطلاعات روز تکنولوژی

پیچیدگی بد: مصاحبه با کارسون گراس خالق HTMX

چگونه یک استاد علوم کامپیوتر در مونتانا قصد دارد جایگزین واکنش‌پذیری، رقابت با جاوا اسکریپت، بازیابی REST واقعی، و دوست‌داشتنی‌تر کردن وب برای توسعه‌دهندگان شود.

چگونه یک استاد علوم کامپیوتر در مونتانا قصد دارد جایگزین واکنش‌پذیری، رقابت با جاوا اسکریپت، بازیابی REST واقعی، و دوست‌داشتنی‌تر کردن وب برای توسعه‌دهندگان شود.

کارسون گراس خالق HTMX و هایپراسکریپت، ذهن پشت توسعه‌دهنده‌ی Grug Brained، یک استاد مهندسی نرم افزار در دانشگاه ایالتی مونتانا، و نویسنده مشترک سیستم های ابررسانه.

انتخاب مغز کارسون در مورد انگیزه پروژه هایی مانند HTMX و Hyperscript، شکست REST، چرایی جاوا اسکریپت برای ماندن و بسیاری موارد دیگر بسیار لذت بخش بود.

تایسون: انتخاب اینکه از کجا شروع کنم سخت است، بنابراین می‌خواهم با Grug Brained شروع کنم توسعه دهنده. به نوعی احساس می‌کنم که می‌توانم همه را برای تمام سؤالات مربوط به برنامه‌نویسی به آنجا ارجاع دهم.

گراس: هه، من قدردان آن هستم. من فکر می کنم برای اکثر توسعه دهندگان ارزش خواندن دارد. با این حال، به نوعی آن را به سمت توسعه دهندگان جوان تر تنظیم کردم. مطمئناً عالی نیست – وقتی از صدای غارنشین استفاده می‌کنید و سعی می‌کنید بامزه باشید، بودن سخت است – اما من فکر می‌کنم بیشتر توصیه‌ها محکم است.

تایسون: این درست است که بیشتر مشکلات کدنویسی که تا به حال برای خودم به وجود آمده است، عمدتاً ناشی از این بود که فکر می کردم باهوش هستم.

گراس: بله، من فکر می‌کنم همه کسانی که برای مدتی برنامه‌نویسی کرده‌اند، آن نقطه‌ای را تجربه کرده‌اند که در آن متوجه می‌شوید خیلی عمیق شده‌اید و دیگر نمی‌توانید سیستم را در ذهن خود نگه دارید. نمی‌دانم همیشه به این فکر است که شما بیش از حد باهوش هستید، یا متوجه نمی‌شوید که چه زمانی اوضاع خیلی پیچیده‌تر می‌شود. همچنین، پویایی اجتماعی در مشاغل فناوری افرادی را که جملاتی مانند «اوه، این برای من خیلی پیچیده است» را مجازات می‌کند.

تایسون: این در مورد فضای اطراف و اعتراف به پیچیده بودن آن بسیار صادق است. یک بار با یکی از دوستانم چت کردم “جاوا اسکریپت بسیار انعطاف پذیر است، شما می توانید راه خود را از هر چیزی رمزگذاری کنید” و او در پاسخ گفت: “هاها، این صحبت های خطرناکی است.” حق با او بود.

آیا نظری در مورد جاوا اسکریپت به عنوان یک زبان دارید؟

درآمد: من فکر می‌کنم جاوا اسکریپت زبان برنامه‌نویسی مناسبی است. به نظر من این یک زبان همه منظوره عالی نیست. به روشی تا حدودی عجیب، برای من شبیه C++ است: اکنون ویژگی ها و راه های زیادی برای انجام کارها دارد. از سوی دیگر، جاوا اسکریپت یک ویژگی باورنکردنی دارد: وجود آن در مرورگر. و این به نظر من آن را به بهترین زبان برنامه نویسی برای وب برای آینده قابل پیش بینی تبدیل می کند.

تایسون: من بسیار تحت تأثیر Hyperscript قرار گرفتم، اما احساس می‌کنم که این یک حاشیه سرگرم‌کننده برای شماست. آیا در مورد تجربه فنی پیاده سازی تجزیه کننده و غیره به ما بگویید؟

درآمد: حتماً. Hyperscript یک زبان برنامه نویسی است که با جاوا اسکریپت به عنوان گزینه ای برای اسکریپت نویسی فرانت اند “رقابت” می کند. این بر اساس HyperTalk، زبان برنامه نویسی HyperCard است، و دارای ویژگی هایی است که فکر می کنم زمانی که شما به سادگی می خواهید در یک صفحه وب اسکریپت بنویسید، تجربه بهتری از نویسندگی ایجاد می کند. به عنوان مثال، زمان اجرا Hyperscript به طور خودکار Promises را حل می کند، بنابراین اسکریپت نویسان نیازی به مقابله با آنها ندارند. این یک نحو طبیعی و انگلیسی مانند دارد که برخی از مردم آن را دوست دارند و بسیاری از مردم از آن متنفرند. این قطعاً یک پروژه پرشور من است، اما امیدوارم پس از عرضه HTMX 2، امسال آن را به ۱.۰ برسانم.

اندروید 15 به نسخه بتا می رسد

تا آنجایی که پیاده‌سازی می‌شود، بله، در جاوا اسکریپت به عنوان یک lexer، تجزیه‌کننده و زمان اجرا مبتنی بر ارزیابی پیاده‌سازی می‌شود. من تعجب کردم که زمان اجرا جاوا اسکریپت به اندازه کافی سریع است که به من اجازه می دهد از آن دوری کنم، اما اینطور است. من سعی نمی کنم یک استخراج کننده بیت کوین را در Hyperscript پیاده سازی کنم، اما برای اسکریپت نویسی سبک DOM به اندازه کافی سریع است. تجزیه کننده Hyperscript و زمان اجرا دقیقاً در لبه پیچیدگی است که من مایل به انجام آن با جاوا اسکریپت هستم.

Tyson: HTMX یکی دیگر از بخش‌های تاثیرگذار کدنویسی است. معرفی من به HTMX یکی از پرخواننده ترین مقالات InfoWorld در سال گذشته بود که نشان می دهد علاقه زیادی به آن وجود دارد. این پروژه نیز جدی تر به نظر می رسد، زیرا به نظر می رسد حداقل امکان معماری REST واقعی را بازیابی کند.

Gross: بله، سال بسیار عجیبی برای HTMX بود. برای خوانندگانی که نام آن را نشنیده‌اند، HTMX یک کتابخانه جاوا اسکریپت است که من نوشتم که به شما امکان می‌دهد ویژگی‌هایی را اضافه کنید، از نظر روحی بسیار شبیه به ویژگی‌های href و action پیوندها و فرم ها در HTML استاندارد با استفاده از این ویژگی‌ها، می‌توانید درخواست‌های AJAX را راه‌اندازی کنید و سپس بخش‌هایی از DOM را با HTML که سرور با آن پاسخ می‌دهد جایگزین کنید.

تایسون: من می‌توانم بگویم HTMX واژگان HTML خوب را گسترش می‌دهد تا برخی موارد استفاده مدرن، به‌ویژه AJAX را پوشش دهد. آیا این یک توصیف منصفانه است؟

درشت: بله، این روش خوبی برای توضیح آن است. من گاهی اوقات می گویم که HTMX “HTML را به عنوان یک ابررسانه کامل می کند” به این دلیل که به هر عنصری در صفحه اجازه می دهد تا در پاسخ به یک عنصر درخواست HTTP را صادر کند و سپس آن پاسخ را در هر جایی از DOM قرار دهد.

این احتمالاً بسیار ساده به نظر می رسد، و همینطور است، اما فقط با همین تعمیم کمی از HTML، بسیاری از الگوهای UX را که به طور سنتی به جاوا اسکریپت رزرو شده اند، باز می کنید. مثال‌ها عبارتند از پیمایش بی‌نهایت، بخش‌های بارگیری تنبل یک صفحه، و اعتبارسنجی سمت سرور همانطور که تایپ می‌کنید.

تایسون: باید بگویم، فکر می‌کردم تقریباً می‌دانم REST به چه معناست، اما برای مدت طولانی اشتباه می‌کردم. شما در مقاله خود به چگونگی شکل گیری آن می پردازید، چگونه REST به معنای مخالف REST است؟

Google V8 API WebAssembly و وب ناهمزمان را پل می کند

آیا مایلید تفاوت بین REST-as-intended و REST که معمولاً اجرا می شود را برای خوانندگان تقطیر کنید؟

ناخالص: *می‌خندد* خب، ما نحوه استفاده صنعت از اصطلاح REST را تغییر نمی‌دهیم. امروزه این اصطلاح به معنای “API های JSON از طریق HTTP” است و احتمالاً برای بقیه مشاغل ما به این معنی خواهد بود.

با این حال، REST در ابتدا به معنای این نیست. در عوض، REST شرحی از نحوه کار شبکه جهانی وب (معماری شبکه) قبل از وجود APIهای JSON بود. فقط پیوند می دهد و تعاملات را از طریق مرورگر ایجاد می کند. اصطلاح REST از پایان نامه معروف روی فیلدینگ آمده است، و او مجموعه ای از محدودیت ها را تعریف می کند که یک سیستم RESTful باید با آنها مطابقت داشته باشد.

امروزه، اکثر APIهای JSON که “RESTful” نامیده می شوند، این محدودیت ها را برآورده نمی کنند. حتی خنده دار تر، یک وب سایت ثابت ساده با چند صفحه HTML که به یکدیگر پیوند دارند همه محدودیت ها را برآورده می کند. بنابراین، شخصی که یک وب‌سایت ثابت ساده ایجاد می‌کند، در برخی از سطوح، مهندس «REST» بهتری نسبت به افرادی است که عناوین مهندسی JSON API «RESTful» را در رزومه خود دارند.

زبان تغییر نخواهد کرد، اما من فکر می‌کنم که ارزش درک معنای اصلی این واژه و به‌ویژه آنچه که محدودیت واسط یکنواخت REST نامیده می‌شود را دارد تا واقعاً بفهمیم که چرا وب بسیار انعطاف پذیر است.

تایسون: من از ابتدای هزاره در کلاس برنامه نویسی نرفته ام. آیا هنوز از کتاب استفاده می کنید؟ شوخی کردم (من فکر می کنم.) 

معلم برنامه نویسی چگونه است؟ آیا می‌توانم CSCI 468 را از شما بگیرم؟

درآمد: هه! خوب، اگر می‌خواهید ۴۶۸ را انتخاب کنید، که کلاس کامپایلرهایی است که من تدریس می‌کنم، فقط می‌توانید Crafting Interpreters توسط Bob Noystrom را بخوانید. و حدود ۵۰ درصد آن را دریافت کنید. ما JVM را با بایت کد در قسمت پشتی هدف قرار می دهیم و صادقانه بگویم، این کار چندان جالب نیست مگر اینکه شما یک مرد بزرگ جاوا باشید.

من تدریس را دوست دارم. قطعاً نکات منفی وجود دارد: دستمزد بد است و بوروکراسی برای مقابله با آن وجود دارد. اما نکات مثبت زیادی وجود دارد و من از رساندن دانش آموزان به جایی که احساس می کنند می توانند به تنهایی برنامه ریزی کنند لذت می برم.

تایسون: بله، من قطعا یک پسر جاوا هستم.

بنابراین، این کمی به موضوع REST باز می گردد، اما از منظری بالاتر. شما یکی از نویسندگان سیستم‌های ابررسانه هستید، که باعث می‌شود نحوه طراحی وب، معماری برنامه‌ای را ارائه دهد که ما اگر به درستی به آن نگاه کنیم، می توان بر اساس آن کار کرد.

درآمد: مطمئناً، و HTMX سعی می‌کند با تقویت HTML به‌عنوان ابررسانه، به جای جایگزینی آن معماری اصلی با معماری جدید، یعنی APIهای JSON با فرمت ثابت، معماری شبکه را ایجاد کند. در این کتاب، من سعی می‌کنم ماهیت سیستمیک عملکرد درست هایپر رسانه را بیان کنم. به عنوان مثال، برای مدت طولانی، من درک نمی‌کردم که کلاینت ابررسانه‌ای (به عنوان مثال، مرورگرها) برای عملکرد صحیح رابط یکنواخت چقدر مهم است. شما واقعاً باید یک سیستم کامل داشته باشید – هایپر رسانه ای مانند HTML، یک پروتکل شبکه مانند HTTP، سرورهای هایپر مدیا، و سرویس گیرندگان هایپر مدیا – تا همه چیز طبق خواسته کار کند.

تایسون: در پایان، می‌خواهم همه چیز مهم را در چند نکته کوتاه و سرگرم‌کننده خلاصه کنم، اما شما قبلاً این کار را انجام داد. سعی می کنم در فلسفه گرگ چیزهایی را پیدا کنم که با آنها مخالفم، اما واقعاً نمی توانم. پیچیدگی بیان، closures، نه گفتن … grug توصیه های خوبی برای همه این موضوعات دارد.

اما من در مورد احساسات گرگ درباره الگوی بازدیدکننده کنجکاو هستم. من از آن استفاده کردم و فکر کردم خوب پیش رفت. در پایان، پروژه ارسال نشد، اما کد ثابت بود . به من بگویید مشکل الگوی بازدیدکننده چیست.

گراس: بله، علی‌رغم آنچه که مقاله‌ی ناخالص می‌گوید، ۱۰۰٪ با الگوی بازدیدکننده مخالف نیستم. (به طور کلی، من ۱۰۰٪ موافق یا مخالف هیچ چیزی در توسعه نرم افزار نیستم.) با این حال، اغلب فکر می کنم بهتر است به جای داشتن یک چیز جانبی دیگر که عملیات را روی درخت انجام می دهد، عملیات را مستقیماً در یک درخت رمزگذاری کنیم. گاهی اوقات این کمی نگرانی‌ها را در هم می‌آمیزد، اما من در این مورد اهمیتی نمی‌دهم.

به عنوان مثال، در Hyperscript، عناصر درخت تجزیه دارای متدهای eval تعریف شده بر روی آنها هستند و مستقیماً در نقطه ای که تجزیه می شوند، تعریف می شوند. این نگرانی‌ها را با هم ترکیب می‌کند، اما فکر می‌کنم به وضوح برنامه اضافه می‌کند، زیرا وقتی می‌خواهید بفهمید که مثلاً دستور «wait» چگونه کار می‌کند، می‌توانید به یک مکان بروید و ببینید که چگونه آن را هم تجزیه و هم ارزیابی می‌کنید. به نظر من بسیار مفید است.

تایسون: چرا می دانیم که پیچیدگی برای ما بد است اما به هر حال به سمت آن کشیده می شویم؟

گراس: خوب، دوباره، فکر می‌کنم فشارهای صنعتی در اینجا وجود دارد. نرم افزار یک صنعت وحشیانه است و ظاهراً غیر هوشمندانه می تواند به شغل شما آسیب جدی وارد کند. این بدان معنی است که همه ما برای نشان دادن باهوش بودن خود تحت فشار هستیم و همچنین برای نپذیرفتن اینکه کد شخص دیگری گیج کننده است یا برایمان خیلی پیچیده به نظر می رسد، فشار را احساس می کنیم. در بسیاری از محافل، “پیچیده” ستایش و “گنگ” انتقاد است.

من این پویایی را درک می کنم و با مهندسانی که این فشارها را احساس می کنند، همدردی هستم. این یکی از دلایلی است که من پیشنهاد می‌کنم مهندسان ارشدی که موقعیت امنی در یک سازمان مهندسی دارند، اغلب با صدای بلند اعلام کنند که اگر واقعاً چنین کنند، همه چیز برای آنها خیلی پیچیده به نظر می‌رسد. این امر باعث می‌شود مهندسان جوان‌تر نیز نگرانی‌های خود را بیان کنند، و حداقل تا حدی از این فشارها کم می‌کند.