منتشر شده: ۲۸ اکتبر ۲۰۲۵
من هارش سینگ هستم، دانشجوی سال آخر کارشناسی مهندسی شیمی در دانشگاه IIT (ISM) دانباد و در سال ۲۰۲۵ در برنامه تابستانی کد گوگل (GSOC) شرکت کردم. این پست، سفر من برای پذیرفته شدن در GSoC و برخی از چیزهایی که در حین شرکت در این برنامه یاد گرفتم را به اشتراک میگذارد.
قبل از GSoC: کشف توسعه افزونهها
در سال اول، مثل خیلیهای دیگر، مشتاق پیوستن به CyberLabs، باشگاه رسمی فناوری دانشگاهمان، بودم. برای آماده شدن، پیش یکی از دانشجویان سال آخر رفتم که یک افزونه کروم را که برای ورود به باشگاه ساخته بود به من نشان داد. این افزونه کاملاً با توسعه وب استانداردی که میشناختم متفاوت بود. به نظر میرسید که روش خیلی جالبی برای تزریق اسکریپتها و تغییر وبسایتها در مرورگر خودتان باشد.
من با کلی API افزونه کار کردم، حتی شاهد گذار از Manifest V2 به V3 بودم. موفق شدم با استفاده از آنها یک پروژه کوچک بسازم، وارد CyberLabs شدم و بعد از آن مشغول زندگی دانشگاهی شدم و توسعه افزونهها را برای مدتی کنار گذاشتم.
اخیراً، وقتی داشتم به درخواست برای دوره تابستانی کدنویسی گوگل (GSoC) فکر میکردم، به طور اتفاقی به پروژهای در مورد APIهای افزونههای کروم برخوردم. حس نوستالژی خیلی به دلم نشست - "آیا جالب نیست که این بار یک API بسازیم که در آینده یک دانشجوی سال دومی از آن برای ورود به CyberLabs استفاده کند؟ این بهترین انعطافپذیری خواهد بود." از آنجایی که من بیشتر اصطلاحات افزونهها را از کارهای قبلیام میفهمم، این پروژه کاملاً مناسب من است.
آماده شدن برای درخواست
از روی هوس، تصمیم گرفتم با الیور، مهندس روابط توسعهدهندگان در تیم افزونههای کروم، تماس بگیرم. از او پرسیدم برای اینکه یک متقاضی موفق برای برنامه GSoC کرومیوم باشم، چه چیزی لازم است. او ظرف چند روز پاسخ داد! ایمیل او بسیار دلگرمکننده بود؛ او گفت که آنها فقط میخواهند ببینند که آیا من میتوانم کدبیس را بررسی کنم و کمی C++ بنویسم.
من با راهاندازی Chromium روی دستگاهم شروع کردم. واقعاً یک چالش بود؛ چهار روز کامل طول کشید و تلاشهای بیشماری انجام دادم تا بالاخره پایگاه کد عظیم را راهاندازی کنم و یک ساخت موفق داشته باشم. یک مشکل ساده آنلاین پیدا کردم - چیزی در مورد sidePanel.open() بدون حرکت کاربر - و یک وصله برای رفع آن ارسال کردم. (با نگاهی به گذشته، تغییر کوچکی بود 🙂). من در مورد پیشرفتم به الیور ایمیل زدم. او به من گفت که این چیزی نیست که آنها قصد پشتیبانی از آن را داشته باشند، اما همچنین گفت کاری که انجام دادهام برای نشان دادن جدی بودن من کافی است. سپس پیشنهاد داد که روی متد getPosition برای پنل کناری کار کنم. من آن را فهمیدم، دوباره به او ایمیل زدم و او واقعاً خوشحال شد و گفت که رویکرد من با آنچه تیم آنها در مورد آن بحث کرده بود، مطابقت دارد. این به من اعتماد به نفس داد تا با پروژه پیش بروم، زیرا میدانستم که میتوانم کد را بفهمم و تغییرات را ایجاد کنم.
پیشنهاد GSoC من
مورد بعدی پیشنهاد GSoC بود. شرح اولیه پروژه، "API های SidePanel و API های DNR"، بسیار کلی بود، بنابراین مطمئن نبودم چه وظایف خاصی را فهرست کنم یا چگونه یک جدول زمانی در پیشنهادم ایجاد کنم. در این مورد به الیور ایمیل زدم و او پاسخ داد که شرح پروژه را بهروزرسانی کرده است. خوشبختانه، او چندین API، از جمله API sidePanel.getPosition که من قبلاً روی آن کار میکردم، اضافه کرده بود.
اجزای کلیدی پروپوزال من درک پروژه، ایدههای طراحی، کارهای پیش از پروپوزال و برنامه زمانی برای تحویل پروژه بود. من به طور دقیق حجم وظایفم را مشخص کردم، زیرا این نشان دهنده درک کامل از کار مربوطه بود. من پروپوزال خود را تهیه کردم و دو بار آن را بررسی کردم.
یک چیزی که از آن پشیمانم، و نکتهی مهمی برای متقاضیان آینده است، این است که مشخصات طراحی مناسبی برای ویژگیهایی که قصد ساختشان را داشتم، ارائه نکردم. برای مثال، هنگام پیشنهاد یک API برای بستن پنل کناری، باید پارامترها را مشخص میکردم، انتخابهایم را توجیه میکردم، توضیح میدادم که چگونه موارد خاص را مدیریت میکنم و شرح میدادم که چگونه API میتواند برای همه مرورگرها استانداردسازی شود. این کار سطح درک بسیار عمیقتری را نشان میداد.
در زمینه پروژه افزونههای کرومیوم، یک نهاد کلیدی، WECG (گروه جامعه افزونههای وب، که "wee-CG" تلفظ میشود) است، جایی که طرحهای جدید API رسماً مورد بحث قرار میگیرند. در طول دوره GSoC، مشارکتکنندگان ممکن است نیاز داشته باشند که پیشنهادات API خود را به این گروه ارائه دهند. بنابراین، داشتن یک ایده طراحی آماده در پیشنهاد GSoC شما یک مزیت بزرگ است، زیرا به مربیان نشان میدهد که شما برای این مرحله حیاتی آماده هستید و در طول دوره GSoC به خوبی عمل میکنید.
اوایل ماه مه، ایمیلی دریافت کردم مبنی بر اینکه پذیرفته شدهام! 🙂
مشارکتهای من در طول GSoC
دوره GSoC فوقالعاده بود. مربی من، سلیمان، فوقالعاده مهربان بود و ما جلسات هفتگی پرباری داشتیم که مرا در مسیر نگه میداشت. همچنین با یکی از همکارانم، آمیت پی، آشنا شدم که هر زمان که ناامید میشدم، کمک بزرگی بود. شرکت در جلسات WECG چشمم را باز کرد؛ دیدم که اوضاع در آن سطح چگونه پیش میرود و فهمیدم که چرا تجربه تا این حد اهمیت دارد. من در آنجا پیشنهادات API خود را مطرح کردم و از یک فروشنده مرورگر دیگر چراغ سبز گرفتم.
در ابتدا چندین CL (لیست تغییرات) باز کردم. پیشرفت من بعداً به دلیل بررسیهای مکرر کد کند شد، اما از ادامه آن خوشحال بودم. مشارکتهای اصلی من در ادغام API پنل کناری بود:
- رابط برنامهنویسی کاربردی
sidePanel.getLayout() - API
sidePanel.close() - رویدادهای
sidePanel.onOpened()وsidePanel.onClosed()(این رویدادها بر اساس یک پیشنهاد چرخه حیات از مایکروسافت بودند)
سایر کدهای دستوری من برای رابط برنامهنویسی کاربردی دستورات (Commands API) هنوز در دست اقدام هستند (بسته به اینکه بعد از GSoC چقدر فعال بمانم 🙂). میتوانید جزئیات بیشتر را در گزارش نهایی من که در لینک «مشاهده کد» در صفحه پروژه GSoC من موجود است، مشاهده کنید.
تشکر ویژه از الیور دانک، سولومون کینارد، کلوین جیانگ، دولین کرونین، تام لوکاشویچ و آندرهآ اورو که تقریباً تمام کدهای من را بررسی کردند. دیدن اینکه کد من بخشی از کروم شده است، حس فوقالعادهای دارد. مربیان من مرا فردی با حس قوی «مالکیت» توصیف کردند که تعریف بسیار خوبی برای من بود.
جمعبندی
اگر از من بپرسید GSoC چه چیزی به من داد، چیزی بیش از دانش فنی بود. به من جایگاهی در میز مذاکره داد - جایی که بحثهای مهمی در آن اتفاق میافتاد، بحثهایی که بر چندین توسعهدهنده افزونه تأثیر خواهد گذاشت. این اولین کار من بود که در یک برنامه کاربردی در دنیای واقعی به کار گرفته شد. من با مربیان صبوری آشنا شدم که مرا راهنمایی کردند و چیزهای زیادی به من آموختند و کل تجربه را فوقالعاده غنی کردند.
امیدوارم داستان من بتواند مرجع مفیدی برای دیگران باشد که میخواهند در Chromium مشارکت کنند یا بخشی از Google Summer of Code باشند.
نکاتی برای افرادی که برای GSoC اقدام میکنند
- ایدهای را انتخاب کنید که واقعاً دوست دارید. علاقه باید اولویت اصلی شما باشد. مهارتهای شما همیشه قابل بهبود هستند، اما اشتیاق چیزی است که شما را در شرایط سخت به ادامه دادن ترغیب میکند. من در هر دو طرف بودهام و به من اعتماد کنید: وقتی روی چیزی کار میکنید که به آن علاقهای ندارید، وقتی اوضاع خراب میشود، دیگران را سرزنش میکنید. با این حال، اگر عاشق کار باشید، آن را به عنوان چالشی برای غلبه بر آن خواهید دید.
- از رقابت نترسید. من افراد زیادی را دیدهام که بعد از دیدن اینکه چه کسی در کانالهای اجتماعی درخواست میدهد، انگیزهشان را از دست دادهاند. هر پروژه خوبی رقیب خواهد داشت. روی نقاط قوت خود تمرکز کنید. اگر قبلاً با کتابخانهای کار کردهاید، پروژهای پیدا کنید که از آن استفاده میکند. شما یک مزیت خواهید داشت زیرا میتوانید تجربه منحصر به فرد خود را به کار بگیرید.
- شانس را بپذیرید و روی ارتباط تمرکز کنید. بیایید واقعبین باشیم، GSoC کمی شانس هم لازم دارد. برخی از پروژههای محبوب بیش از ۳۰۰ پیشنهاد برای ۱-۲ موقعیت دریافت میکنند. من شک دارم که مربیان بتوانند تک تک آنها را با جزئیات بخوانند. به همین دلیل است که ارتباط اولیه کلیدی است. از قبل در پروژه مشارکت کنید و مطمئن شوید که پیشنهاد شما محکم و مفید است و به اصل مطلب میپردازد.
- اگر انتخاب نشوید، پایان کار نیست. اکنون شما مشارکتهای ارزشمندی در زمینه متنباز در رزومه خود دارید. از آن برای درخواست فرصتهای تابستانی دیگر استفاده کنید. شما قبلاً کار سخت را انجام دادهاید!
نکته آخر اما نه کماهمیتتر:
«هر کس برای کار خاصی ساخته شده است و آرزوی آن کار در دل هر کسی نهاده شده است.» — رومی
ممنون که خوندید.