
۱ نوامبر ۲۰۲۴
هش کد یک مسابقه برنامهنویسی تیمی توسط گوگل بود که از سال ۲۰۱۴ تا ۲۰۲۳ برگزار شد.
من در گوگل فرانسه این رویداد را به صورت مشترک ایجاد کردم و رهبری تیم مهندسی داوطلبی را بر عهده داشتم که این مسابقه را طی نه دوره سالانه اجرا و توسعه دادند. در سال ۲۰۲۳، برنامه Hash Code به همراه بقیه برنامههای مسابقات کدنویسی گوگل به پایان رسید.
سازماندهی هش کد و تماشای رشد آن از ۲۰۰ شرکتکننده محلی به بیش از ۱۲۸۰۰۰ شرکتکننده جهانی، هم آموزنده و هم سرگرمکننده بود! این پست تلاشی است برای ثبت بخشی از تاریخچهی سرگرمکنندهی هش کد، آنطور که من به یاد دارم.
اینها یادداشتهای شخصی من هستند، نه ابلاغیه رسمی از طرف گوگل.
هش کد یک مسابقه برنامهنویسی تیمی با مسائلی الهام گرفته از چالشهای واقعی پیش روی مهندسان نرمافزار در گوگل بود. اولین مسئله هش کد، بهینهسازی مسیرهای خودروهای نمای خیابان بود که تصاویر یک شهر را ثبت میکردند، چیزی که همکاران من در گوگل فرانسه در آن زمان واقعاً روی آن کار میکردند.
مرکز #hashcode دانشگاه KU Leuven امشب آماده شرکت با جمعیت کامل است! برای همه تیمها آرزوی موفقیت دارم! #kuleuven #hype pic.twitter.com/avVYxZ8nfC
— توماس دی بکر (@mosterdt) ۱ مارس ۲۰۱۸
چیزی که Hash Code را خاص میکرد، تجربهی جامعهسازیای بود که ارائه میداد:
تیمها : شرکتکنندگان در تیمهای دو تا چهار نفره کار کردند و همکاری و کار گروهی را تمرین کردند.
هابها : تیمهایی که در گردهماییهای محلی خودسازماندهیشده، که معمولاً در دانشگاهها یا گروههای توسعهدهنده برگزار میشوند، گرد هم میآیند و به افراد فرصتی برای برقراری ارتباط حضوری میدهند.
وحدت جهانی : همه افراد در یک دوره آنلاین بزرگ هر ساله، همزمان روی یک مسئله کار میکردند و این امر هر دوره را به یک رویداد بزرگ جهانی تبدیل میکرد.
یه استراحت کوتاه با پیتزا و برگشتن به هک کردن @Andela_Kenya @Andela #hashcode2016 pic.twitter.com/LZpnzQRqnK
— آنتونی ناندا (@ProfNandaa) 11 فوریه 2016
در سال ۲۰۱۳، تیم مهندسی گوگل پاریس جدید، نسبتاً کوچک و با رشد سریع بود. به عنوان تازه وارد، احساس کردیم که میتوانیم از ارتباطات بیشتر، از جمله ایجاد ارتباط بیشتر با دانشجویان و دانشگاههای فرانسوی، بهرهمند شویم. و وقتی میخواهید با کسی ارتباط برقرار کنید، چه میکنید؟ بدیهی است که آنها را برای یک جلسه پیتزا و کدنویسی دعوت میکنید!
در یک جلسه طوفان فکری، ما روی سه رکن توافق کردیم که در نهایت راهنمای Hash Code در تمام طول تاریخ آن بودند:
قابل دسترس در همه سطوح : ما مسائل را به صورت باز مطرح کردیم، بنابراین توسعه یک راهحل ساده و ابتدایی و تکرار آن از آنجا آسان بود. این امر باعث شد که رقابت برای شرکتکنندگان در همه سطوح، نه فقط متخصصان الگوریتم، قابل دسترس باشد.
واقعبینانه : ما این رویداد را به صورت تیمی برگزار کردیم زیرا مهندسان معمولاً به صورت تیمی کار میکنند.
Scrappy : Hash Code به عنوان یک پروژه جانبی برای چند مهندس شروع شد، بنابراین ما نمیتوانستیم از نظر سیستم رقابت، چیز خیلی پیچیدهای بسازیم.
شرکتکنندگان ثبتنامشده : ۲۰۰ نفر (فقط فرانسه)
پس از تصمیمگیری در مورد فرمول مسابقه، یک وبسایت راهاندازی کردیم و دعوتنامههایی را برای دانشگاههای محلی ارسال کردیم. پاراگراف اول این بود:
گوگل پاریس با افتخار مسابقه برنامهنویسی Hash Code را برگزار میکند که در آن شما با یک چالش واقعی که توسط مهندسان گوگل ایجاد شده است، روبرو خواهید شد. با استفاده از زبان(های) برنامهنویسی و ابزارهای مورد نظر خود، وظیفه شما این است که با استفاده از مهارتهای کدنویسی و الگوریتمی خود، یک راهحل ابتکاری برای مسئله ایجاد کنید. شما در تیمهای دو تا چهار نفره کار خواهید کرد و به تیمهای برنده جوایز نفیس گوگل اهدا خواهد شد.
وبسایت هش کد، ۲۰۱۴
در آن زمان یکی از تیمهای مهندسی در گوگل پاریس روی بهینهسازی مسیرهای خودروهای Street View که از یک شهر تصویربرداری میکردند، کار میکرد. ما این ایده را گرفتیم و آن را در مسئله رقابتی Hash Code first پیادهسازی کردیم .
مسیریابی نمای خیابان از کد هش ۲۰۱۴
این رویداد دو روزه بود: جمعه بعدازظهر، معرفی و تمرین، و شنبه برای مسابقه اصلی. تمرین بسیار ارزشمند بود: تیمها میتوانستند چیدمان و کار تیمی خود را آزمایش کنند، در حالی که ما زیرساختها را بررسی میکردیم (مثلاً منبع تغذیه برق در اتاق، نه فقط سیستم امتیازدهی).
کد هش ۲۰۱۴ در غذاخوری گوگل فرانسه
همه چیز خوب پیش رفت. سکوت متمرکز غذاخوری را به یاد دارم که در آن ۲۰۰ دانشجو روی حل مسئله مسیریابی خودروها کار میکردند. در یکی از راهحلهای بازیگوشانهتر، قرار بود خودروهای نمای خیابان مسیرهایی را طی کنند که از بالا شبیه کلمه «گوگل» به نظر میرسیدند.
این نوع شوخی و بازیگوشی بعداً در طول فینالهای Hash Code در محل، با گسترش دامنه رقابت و رقابتیتر شدن مسابقه، کمی کمتر شد.
نویسنده در Hash Code 2014
تنها مشکل اصلی ما: کمبود پیتزا . ما از راهنمایی تیم غذای دفتر استفاده کردیم و عدد را در دو ضرب کردیم تا به اشتهای دانشآموزان برسیم. اما معلوم شد که این کافی نیست!
شرکتکنندگان ثبتنامشده : ۱۵۳۸ نفر (فرانسه، لوکزامبورگ، بلژیک، سوئیس)
محدودیت اصلی دوره اول، فضای فیزیکی بود. با ۲۰۰ شرکتکننده، غذاخوری ما در گوگل پاریس کاملاً پر بود. ما میخواستیم همه علاقهمندان بتوانند در این رویداد شرکت کنند، در عین حال که حال و هوای محلی رویداد حفظ شود.
راه حل ما: «هابهای» هش کد. ما از دانشگاهها و گروههای توسعهدهنده در سراسر فرانسه دعوت کردیم تا رویدادهای هش کد خود را در مکان خودشان (و با پیتزای خودشان) سازماندهی کنند. ما مسئله مسابقه و سیستم امتیازدهی آنلاین (شامل یک تابلوی امتیازدهی برای هر هاب) را فراهم کردیم تا به ایجاد یک تجربه محلی جذاب کمک کنیم. قرار بود بهترین تیمهای امتیازآور در دور مقدماتی به دور نهایی در گوگل پاریس دعوت شوند.
برای دور مقدماتی، میتوانید از هر مکانی با استفاده از رایانه و اتصال اینترنت خود شرکت کنید. با این حال، برای هیجانانگیزتر کردن دور مقدماتی، دانشگاهها، دانشکدههای مهندسی و افراد میتوانند مراکزی را برای جمعآوری شرکتکنندگان ترتیب دهند.
(وبسایت هش کد)
از یک جهت، این فرمول بیش از حد خوب جواب داد . سیستم امتیازدهی موقت ما که یک سال قبل ایجاد شده بود، محدودیتهای مقیاسپذیری داشت که قبل از رویداد به طور کامل از آنها آگاه نبودیم. این محدودیتها زمانی آشکار شدند که حدود ۱۵۰۰ شرکتکننده همزمان تلاش کردند راهحل ارائه دهند:
گزارشهای سرور از سیستم امتیازدهی با بار اضافی.
از قضا، مشکل رقابت در این دور مربوط به قابلیت اطمینان مرکز داده بود.
آن شب با یک فرم گوگل نجات پیدا کرد. شرکتکنندگان میتوانستند به ارسال راهحلها ادامه دهند، در حالی که ما روز بعد را صرف ارسال آن پاسخها به سیستم امتیازدهی برای محاسبه نتایج میکردیم.
فرم ارسال نسخه پشتیبان اضطراری
اگرچه شب مسابقه به دلیل خرابی سیستم بسیار پرتنش بود، اما بازخورد شرکتکنندگان و برگزارکنندگان به ما اطمینان خاطر داد - با وجود این مشکل، مردم اوقات خوبی را سپری کردند! از طرف ما، قاطعانه تصمیم گرفتیم که برای سال آینده بهتر آماده شویم.
حداقل دور نهایی که در محل برگزار شد، خوب پیش رفت و شامل یک مسئله جالب در مورد هماهنگ کردن بادکنکهای لون بود .
خیلی خوش گذشت و کلی بادکنک جمع شد #HashCode2015 pic.twitter.com/Hl0Yxd8zJy
— سیسیل (@CecileHbh) 30 مارس 2015
شرکتکنندگان ثبتنامشده : ۱۷۳۰۷ (EMEA)
برای Hash Code 2016، ما میخواستیم رقابت را از نظر جغرافیایی گسترش دهیم و برای اولین بار از شرکتکنندگانی از اکثر مناطق EMEA (اروپا، خاورمیانه و آفریقا) دعوت کردیم. با توجه به مشکلات فنی سال ۲۰۱۵، میدانستیم که به یک قایق بزرگتر نیاز داریم - یعنی یک سیستم امتیازدهی که بتواند مقیاسپذیر باشد.
پشته اصلی پایتون/جنگو/مایاسکیوال ما از نظر سرعت توسعه عالی بود، اما زیر بار مقیاسپذیر نبود. برای سال ۲۰۱۶، سیستم را با استفاده از App Engine و Datastore به عنوان پایگاه داده پشتیبان بازسازی کردیم. Datastore برای مقیاسپذیری عالی است. چیزهایی که در پایگاههای داده سنتی SQL کند بودند، با Datastore به سادگی غیرممکن هستند . این امر طراحی برنامه را سختتر میکند، اما سرویس حاصل بسیار قوی است.
سیستم داوری کد هش نسل دوم
همان سیستم قاضی در سال ۲۰۲۰، ۴۵۰۰ درخواست در ثانیه را مدیریت میکند.
شرکتکنندگان ثبتنامشده : ۲۶۴۲۰ نفر (EMEA)
با راهاندازی سیستم جدید، نسخه ۲۰۱۷ بر بهبود کیفیت زندگی متمرکز شد. ما سیستم داوری را با بنرهای اعلان فوری، تابلوهای امتیازدهی به ازای هر کشور، تجربه بهتر مدیر مرکز و آزمایشهای خودکار بیشتر گسترش دادیم.
برای مشکلات، ما بر روی سادهسازی درک راند ارزیابی صلاحیت تمرکز کردیم. پس از مشکل چالشبرانگیز مسیریابی پهپادهای تحویل کالا در سال ۲۰۱۶ ، ما یک وظیفه بهینهسازی با استفاده از ویدیوهای یوتیوب و مشخصات خروجی نسبتاً ساده ایجاد کردیم که باعث افزایش ۳ برابری تعداد راهحلهای ارسالی شد!
ما همچنین یک مسئله تمرینی جدید در مورد برش بهینه پیتزا به قطعات 🍕 اجرا کردیم.
انگار یکی داره پیتزا میبره... 🍕 #hashcode2017 #ready4hashcode @Google pic.twitter.com/EHCGzXfD7x
— Ana Roig Jiménez (@anicacortes) 16 فوریه 2017
شرکتکنندگان ثبتنامشده : ۳۷۷۷۸ (EMEA)
برای نسخه ۲۰۱۸، ما یک مسئله دور مقدماتی با الهام از خودروهای خودران، که در آن زمان موضوع داغی بود، اجرا کردیم.
از آنجایی که دفتر ما در گوگل فرانسه به دلیل بازسازی بسته شده بود، فینال را به گوگل دوبلین منتقل کردیم. ما یک مسئله برنامهریزی شهری ایجاد کردیم که به منطقه بازسازیشده اسکله گراند کانال، جایی که گوگل دوبلین در آن واقع شده است، اشاره داشت.
یکی دیگر از اولینهای Hash Code: دو داوطلب گوگل دوبلین که در دور نهایی ۲۰۱۸ کمک کرده بودند، در طول این رویداد با هم آشنا شدند و بعداً در تابستان ۲۰۲۱ ازدواج کردند.
شرکتکنندگان ثبتنامشده : ۷۰,۸۶۵
تا سال ۲۰۱۹، حداقل سه سال بود که در مورد جهانی شدن بحث میکردیم. پس از کمی بحث در مورد قالب مسابقه، تصمیم گرفتیم «وحدت زمانی» هش کد را حفظ کنیم: حس شرکت با هم در یک رویداد جهانی.
برای اینکه بتوانیم در دسترس باشیم، دور برنامهریزی ۴ ساعته را حفظ کردیم. دلیلش این است که ماراتنهای طولانیتر برای مبتدیان جذابیت کمتری دارند. برای حفظ وحدت زمان، به یک دور مقدماتی بسنده کردیم.
در ۲۸ فوریه ۲۰۱۹، مسابقه برنامهنویسی Hash Code به یک مسابقه جهانی تبدیل شد! ما یک مسئله سرگرمکننده و آسان برای توضیح در مورد چیدمان یک گالری عکس به «جالبترین» روش ممکن را اجرا کردیم.
هفتهی پیش برای اولین بار به همراه @KinnzaZ در یک مسابقهی کدنویسی ( #hashcode ) شرکت کردم .
خیلی عالی بود، ما شکست خوردیم و من یک پست جدید در موردش نوشتم: https://t.co/KAt0n3A8Xt از @Baot_IL بابت معرفی ما به این مسابقه و میزبانی یک مرکز #hashcodesolved
خیلی ممنونم .— دالیا سیمونز (@SimonsDalia) 7 مارس 2019
شرکتکنندگان ثبتنامشده : ۱۱۱,۹۵۵
تا سال ۲۰۲۰، سیستم امتیازدهی ما کاملاً آزمایش شده بود. ما همچنین مجموعهای نسبتاً پایدار از فرآیندها را برای مدیریت رقابت داشتیم که طی سالها در حال توسعه آنها بودیم، از جمله فهرستی مفید از راهحلهای پشتیبان در صورت بروز مشکل. این فهرست شامل سناریوهای نسبتاً بعیدی مانند قطع برق در دفتر بود.
اما برنامههای ما شامل اتفاقی که در ۲۰ فوریه افتاد، نمیشد: سیستم پخش زنده یوتیوب دقیقاً در زمان اعلام نتایج پخش زنده ما، دچار قطعی نادری شد . احتمال این اتفاق چقدر بود؟
اتاق کنترل پخش زنده
خوشبختانه، این بخش مهمی از رویداد نبود: خود مسابقه در این زمان تمام شده بود. ما تابلوی امتیازات را باز کردیم و لینک ضبط پخش زنده را از طریق ایمیل ارسال کردیم.
پخش زنده Hash Code، ویدیوهای کوتاهی برای هر مسابقه بود. شرکتکنندگان میتوانستند آنها را به صورت زنده در هر کجا که رقابت میکنند تماشا کنند و این به ایجاد حس مشارکت جهانی با وجود بیش از ۱۰۰ هزار نفر در سراسر جهان کمک میکرد.
فینال مسابقات ۲۰۲۰ برای سومین بار در دوبلین برنامهریزی شده بود. اما شیوع بیماری همهگیر ما را مجبور کرد که به صورت آنلاین برگزار کنیم. من در مراسم اختتامیه شرکت کردم... از اتاق خوابم. پیامهای بسیار خوبی از شرکتکنندگان دریافت کردیم که میخواستند به ما بگویند که هنوز هم اوقات خوشی را سپری میکنند ❤️.
فراخوان اعلام فینال دنیای مجازی با شرکتکنندگان
شرکتکنندگان ثبتنامشده : ۱۲۸۴۱۰
مکس و دیوید، گویندگان پرشور نتایج دور مقدماتی
دوره ۲۰۲۱ حتی بیشتر تحت تأثیر این بیماری همهگیر قرار گرفت. ما برای جلوگیری از خطرات غیرضروری به مراکز مجازی روی آوردیم.
برای مشکلات، عمداً موضوعاتی غیرمرتبط با همهگیری را انتخاب کردیم: چراغهای راهنمایی شهری و سازماندهی پروژههای نرمافزاری. با تمام اختلالاتی که کووید ایجاد کرده بود، میخواستیم فرصتی برای چند ساعت فکر کردن به چیزی متفاوت فراهم کنیم.
انجمن Hash Code بیش از هر زمان دیگری حضور یافت و به ۱۲۸۴۱۰ شرکتکنندهی ثبتنامشده رسید!
در سال ۲۰۲۲، ما یکپارچهسازی بزرگی از مجموعه مسابقات کدنویسی گوگل را تکمیل کردیم.
مسابقات کدنویسی شامل سه مسابقه برنامهنویسی سالانه با فرمتهای مختلف بود:
کد جم: معماهای الگوریتمی
شروع سریع: طراحی شده برای مبتدیان
کد هش: رقابت تیمی با تمرکز بر اکتشافات برای مسائل محاسباتی دشوار
این سه مسابقه به طور مستقل شروع شدند: Hash Code در فرانسه، Kick Start در آسیا و اقیانوسیه، Code Jam در ایالات متحده. این مسابقات به مرور زمان گسترش یافتند و در سال 2022 آنها را تحت یک برنامه جهانی ترکیب کردیم.
سیستم جدید و یکپارچه رقابت چند مزیت داشت. برای شرکتکنندگان، تجربه یکپارچهتری ارائه میداد: دیگر نیازی به جابجایی بین دو وبسایت (یکی برای ثبت نام و دیگری برای رقابت) نداشتند. از نظر داخلی، باعث کاهش تکرار کار میشد. زیرساخت مسابقات کدنویسی توسط یک تیم اختصاصی توسعه داده شده بود و داوطلبان Hash Code را آزاد میکرد تا روی مشکلات رقابت تمرکز کنند.
همانطور که در پست وبلاگ توسعهدهندگان گوگل اعلام شد، مسابقات کدنویسی در فوریه ۲۰۲۳ به پایان رسید .
ما یک آرشیو از مشکلات در گیتهاب راهاندازی کردیم . موارد مورد علاقه شخصی من عبارتند از:
مسیریابی نمای خیابان (کد هش ۲۰۱۴): اولین مسئله کد هش که فرمول رقابت ما را تعریف کرد. مستقیماً از کار بهینهسازی واقعی در گوگل فرانسه الهام گرفته شده است.
قابلیت اطمینان مرکز داده (کد هش ۲۰۱۵): مسئلهای ساده که نگرانیهای اساسی در مورد ساخت سیستمهای قابل اعتماد از اجزای غیرقابل اعتماد را در بر میگیرد.
نمایش اسلاید عکس (Hash Code 2019): یکی از کوتاهترین صورتهای مسئلهی Hash Code: فقط عکسها را به ترتیب بچینید. و این مسئله از قبل NP-hard است.
ما از Hash Code چیزهای زیادی یاد گرفتیم! در اینجا درسهای کلیدی آمده است:
از کوچک شروع کنید و تکرار کنید. ما هرگز در سال ۲۰۱۳ در گوگل فرانسه، شروع یک مسابقه برنامهنویسی جهانی را به عنوان یک پروژه جانبی امتحان نمیکردیم. اما شروع یک رویداد محلی متناسب با نیازهای ما با منابع محدود، ارزشمند بود. از آنجا، هش کد به صورت تکراری رشد کرد و به ما امکان ایجاد تغییرات، یادگیری و سازگاری را داد.
مادهی مخفی پیتزا بود. هر دوره به یک سیستم مسابقه و امتیازدهی خوب نیاز داشت. اما مادهی مخفی همیشه پیتزا بود، منظورم از آن، حس اجتماعی پشت مسابقه بود. کار تیمی، فرصت ملاقات با افراد جدید، تجربهی حضور در یک مرکز محلی و سر و صدای رسانههای اجتماعی بود که در نهایت باعث میشد هر رویداد ارزشمند به نظر برسد.
آمار مورد علاقه من در هر دوره، رتبهبندی هابها بر اساس امتیاز کل بود . اگرچه کاملاً منصفانه نبود (به نفع هابهای بزرگتر بود)، اما روح Hash Code را مجسم میکرد، زیرا هر تیم به تنهایی به جایگاه هاب خود کمک میکرد ، حتی اگر فقط ۱ امتیاز کسب میکرد.
از همه کسانی که در طول این سالها برگزاری Hash Code را ممکن ساختند، متشکرم! این شامل شرکتکنندگان فوقالعاده ما، برگزارکنندگان مرکز، همه همکاران من در تیم Hash Code و داوطلبانی از بخشها و مناطق جغرافیایی مختلف در سراسر گوگل میشود.
یک فراخوان ویژه به خاطر حامی و برگزارکننده خستگیناپذیر اولین دورههای این رویداد و کاشف ضریب پیتزای Hash Code و سرپرست سایت مهندسی گوگل فرانسه، وینسنت سیمونت، وجود دارد.
(عکسهای این پست با حسن نیت از تیم Hash Code، ماتیاس کنده و دیگران گرفته شده است.)
طرح کلی
https://pnote.eu/projects/hashcode/
بازبرگشت به ارتباط های حداقل شش ماه پیش اش.
درکمترازیک ثانیه نه پنج ثانیه حدود2000نفرمن رادیدند چه جالب من را نه پستم را دیدند.
موفق باشید
به امید خدا