لوگوی شاگرد

چرا غول‌های فناوری پایتون را انتخاب کردند؟ (جواب نصفه است)

چرا غول‌های فناوری پایتون را انتخاب کردند؟ (جواب نصفه است)
مم
• 10 دقیقه مطالعه

اکتبر ۲۰۱۰ بود. سه نفر یک اپ عکس‌شیر کردن راه انداختن. روز اول ۲۵ هزار نفر ثبت‌نام کردن، و چهارده ماه بعد، همان سه نفر داشتند به ۱۴ میلیون کاربر سرویس می‌دادن. کدشان پایتون بود.
همین داستان را همه شنیدن. و همه یک جواب هم برایش دارن: چون پایتون ساده است.
منطقی است. پایتون واقعاً ساده است. ولی این جواب یه مشکل داره و مشکلش این نیست که غلط است. مشکلش این است که انگار داره سؤال را تکرار می‌کند، نه جواب دادنش.
شما پرسیدید چرا آن‌ها پایتون را انتخاب کردن. جواب «چون ساده است» یعنی «چون انتخابش ساده بود». این تعریف ساده بودن است، نه دلیل انتخاب.

بذارید سه چیز را نگاه کنیم که معمولاً جایی نمیان.

باور رایج: سادگی، یعنی سرعت

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

حقیقت اول: ما فقط برنده‌ها را مطالعه می‌کنیم

برای هر اینستاگرامی که با جنگو بالا رفت، چند هزار استارتاپ جنگو مردن و رفتن. درباره‌ی آن‌ها هیچ مقاله‌ای نوشته نمی‌شود. کسی از یک تیم سه‌نفره که سال ۲۰۱۱ سایتشون رو بستن، مصاحبه نمی‌گیرد.

این اسم دارد: سوگیری بقا. و تمام چیزی که ما از «شرکت‌های موفق» می‌دانیم، از یک نمونه‌ی فیلترشده می‌آید ، فیلترشده بر اساس همان چیزی که می‌خواهیم اثباتش کنیم.

حالا یک جزئیات به داستان سه مهندس اضافه کنید که تقریباً هیچ‌جا در فارسی نیست: آن دوره، قبل از تبلیغات بود. قبل از پرداخت بود. قبل از هر مسئولیتی بود.

یک نقد معتبر در Hacker News دقیقاً همین را می‌گوید: آن سه نفر وقتی کار می‌کردن که «مشتری نبود، تبلیغ نبود، سود نبود و مسئولیت واقعی نبود.» کاربر ۱۴ میلیونی روی یک شبکه‌ی اجتماعی که هر کس چند عکس منتشر می‌کند، با ۱۴ میلیون کاربر یک سیستم پرداخت، اصلاً یک چیز نیست.

این داستان را خراب نمی‌کند. جالب‌ترش می‌کند. چون سؤال را عوض می‌کند: آن‌ها پایتون را انتخاب نکردن چون می‌دانستن به آن عدد می‌رسن. انتخاب کردن چون هیچ دلیلی نداشتن فرض کنن که می‌رسن.

py4

حقیقت دوم: پایتون در لیست «فناوری خسته‌کننده» است

این بخش را باید دو بار بخونید.

سال ۲۰۱۵، یک مهندس به اسم دن مک‌کینلی مقاله‌ای نوشت به اسم Choose Boring Technology ، «فناوری خسته‌کننده انتخاب کن». ایده‌ی مرکزی‌اش یک استعاره‌ی ساده است: هر شرکت حدوداً سه توکن نوآوری دارد. هر انتخاب تازه و اثبات‌نشده، یکی از آن توکن‌ها را خرج می‌کند. توکن‌ها هم به‌سرعت تمام می‌شن.

و بعد، در همان مقاله، مک‌کینلی لیستی از فناوری‌های «خسته‌کننده» می‌دهد. MySQL. Postgres. PHP. Memcached. Cron.

و پایتون.

بله. در فهرست خودِ مک‌کینلی، پایتون کنار PHP و Cron، در ستون چیزهایی است که «نوآورانه نیستن». و او منظورش هم توهین نیست ، دقیقاً برعکس:

فناوری خسته‌کننده یعنی فناوری‌ای که خوب فهمیده شده. می‌دانیم چه کارهایی می‌کند، و به‌همان‌اندازه مهم، می‌دانیم چه کارهایی نمی‌کند. می‌دانیم چطور خراب می‌شود.

و بعد قاعده‌ی نهایی، که به نظرم بهترین جمله‌ای است که در این حوزه نوشته شده:

ابزار درست، ابزاری است که در کمترین‌بدترین وضعیت برای بیشترین تعداد از مشکلات شما قرار دارد.

نه بهترین. کمترین‌بدترین.

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

و مک‌کینلی از تجربه‌ی خودش می‌گوید. در Etsy سرویس‌هایی با Scala و MongoDB ساخت، مطمئن بود همه‌چیز بهتر می‌شود. بعداً نوشت: «هیچ بخشی از آن درست از آب درنیامد.»
در همین حال، فید فعالیت‌های Etsy روی Memcached و MySQL بود، هیچ‌کس سال‌ها به آن دست نزد، استفاده بیست برابر شد و کار کرد.

py3

یک سؤال که خودِ این استدلال را به چالش می‌کشد

اگر «خسته‌کننده بودن» دلیل انتخاب پایتون بود، یک مشکل هست: PHP هم در همان فهرست است. و PHP هم ساده است. و PHP، در همان سال‌ها، زبان اول یوتیوب و فیسبوک بود.

پس چرا آن‌ها پایتون را برداشتن، نه PHP؟

جوابش، به نظر من، این است که «خسته‌کننده» یک شرط لازم است، نه شرط کافی. چیزی که پایتون داشت و PHP نداشت، عمومیت بود.

PHP برای یک کار ساخته شد: تولید صفحه‌ی وب. و در آن کار واقعاً خوب است ، تا امروز هم بخش بزرگی از وب روی آن است. ولی وقتی یوتیوب یا اینستاگرام از «صفحه تولید کن» رد می‌شوند و می‌رسند به «صدهزار کار پس‌زمینه‌ای را هماهنگ کن»، «مدل یادگیری ماشین را روی داده‌ها اجرا کن»، «عکس را پردازش کن» و «لاگ‌ها را تحلیل کن»، PHP دیگر جواب نمی‌دهد.

اینستاگرام در همان دوره‌ی سه‌نفره‌اش حدود ۲۰۰ کارگر پایتونی داشت که صف کارها را با Gearman می‌خوردند ، اعلان‌ها، پوش‌نوتیفیکیشن، اشتراک‌گذاری در توییتر. یک اسکریپت PHP که با هر درخواست از صفر شروع می‌شود، جای این کارها نیست.

پس معادله‌ی واقعی این است: پایتون = خسته‌کننده + چندمنظوره. و برای محصولی که نمی‌دانی فردا چه شکلی می‌شود، دومی تعیین‌کننده است.

فیسبوک هم دقیقاً همین را نشان می‌دهد، از سمت مخالف. PHP را نگه داشت، ولی مجبور شد یک زبان کاملاً جدید (Hack) و یک ماشین مجازی جدید (HHVM) برایش بسازد تا در مقیاس کار کند. وقتی یک انتخاب ساده را نگه می‌داری، گاهی هزینه‌اش این است که ابزار را دورش بازسازی کنی.

حقیقت سوم: زبان عوض می‌شود. همیشه عوض می‌شود.

اینجا جایی است که افسانه کاملاً می‌شکند. ببینید این چهار محصول با چه چیزی شروع کردن:

محصول

زبان در روز اول

یوتیوب

PHP

فیسبوک

PHP

توییتر

Ruby on Rails

استک‌اورفلو

ASP.NET

هیچ‌کدام پایتون نبودن. و هر چهارتا هم موفق شدن.

یوتیوب سال ۲۰۰۵ با PHP راه افتاد ، بنیان‌گذارانش از سایت‌های دیتینگ آن دوران الگو گرفتن که PHP بودن. بعد از خرید گوگل، بخش بزرگی از آن با پایتون بازنویسی شد. منبع

پس سادگی زبان، توضیح نمی‌دهد. اگر توضیح می‌داد، این چهار مورد نباید وجود داشتن.

آن‌چه توضیح می‌دهد، این است که زبان انتخاب اول است، نه انتخاب آخر.

بهترین شاهدش ردیت است. ردیت با Lisp نوشته شد. و بعد، در دسامبر ۲۰۰۵، آرون شوارتز سایت را از Lisp به پایتون بازنویسی کرد. جمله‌ی خودش:

«در reddit، سایت را در هفته‌ی گذشته از Lisp به پایتون بازنویسی کردیم. تقریباً در یک آخر هفته تمام شد. نسخه‌ی پایتون کد کمتری داشت که سریع‌تر اجرا می‌شد و خواناتر و نگهداری‌اش آسان‌تر بود.»

یک آخر هفته. کل بازنویسی.

و دو نکته که این داستان را از یک افسانه به یک درس تبدیل می‌کند:

اول، دلیل واقعی رفتن از Lisp، نه فلسفه بود نه سادگی. یک باگ thread در CMUCL بود که سایت را چند بار در روز از کار می‌انداخت. آن‌ها دنبال زبانی نبودن که «الهام‌بخش» باشد؛ دنبال زبانی بودن که سایتشان دیگر نخوابد.

دوم، پایتون هم مقصد نهایی نبود. ردیت بعداً رفت به Pylons. و سال‌ها بعد، بخش‌هایی از آن به Go منتقل شد.

یعنی حتی شرکتی که به‌خاطر پایتون معروف شد، پایتون را برای همیشه نگه نداشت. هیچ‌کس نگه نداشت.

اینستاگرام هم همین‌طور. پایتون را بیرون نریخت، ولی در ۲۰۱۶ تنها چیزی که می‌شد گفت این بود که بزرگ‌ترین استقرار جنگو در جهان را دارد — و در کنارش ده‌ها سرویس دیگر با زبان‌های دیگر. یوتیوب هم امروز ترکیبی است از پایتون، C++، Java و Go.

py2

سه چیزی که همه اشتباه تکرار می‌کنند

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

«ردیت از جنگو استفاده می‌کند.»
غلط است. ردیت هیچ‌وقت جنگو نبود. مسیرش این بود: Lisp → web.py → Pylons. خود شوارتز در همان مقاله نوشت که جنگو را بررسی کردند و «جادو»ی زیادش را نپسندیدن. (بعد از آن مقاله، تیم جنگو یک پروژه به اسم RemovingTheMagic راه انداخت.)

«اسپاتیفای از جنگو استفاده می‌کند.»
نیمه‌غلط. اسپاتیفای پایتون دارد، ولی با Twisted و بعد gevent کار می‌کند. مهندسان خودشان گفته‌اند فقط «یکی دو اپ جنگو» دارند.

«اینستاگرام ۲ میلیارد کاربر فعال روزانه دارد.»
غلط است. این عدد ماهانه است، نه روزانه.

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

پس درس واقعی چیست؟

یک جمله را برگردانیم.

پایتون باعث موفقیت اینستاگرام نشد. اینستاگرام موفق شد چون اجازه داشت با پایتون شروع کند.

این تفاوت را جدی بگیرید. یک تیم دو نفره که در آپارتمانش نشسته، ازش انتظار نمی‌رود یک میلیارد کاربر بیاورد. پس انتخاب یک زبان «ساده» برایش ریسک نبود، صرفه‌جویی بود. پول و وقت محدودش را جایی خرج کرد که برگشت داشت: خود محصول.

شرکت بزرگی که از روز اول می‌داند باید به میلیاردها درخواست جواب بدهد، همین انتخاب را نمی‌کند. برعکس، همان‌جا Java یا C++ یا Go انتخاب می‌کند، چون از قبل می‌داند کدام دیوار را می‌بیند.

پس «کار ساده را اول انجام بده» ، همان شعاری که مهندس‌های اینستاگرام گفته‌اند ،یک توصیه‌ی فلسفی نیست. یک تصمیم مدیریت ریسک است.

و بخش دومش را کمتر کسی می‌گوید: بعداً بازنویسی می‌کنی.

ردیت یه آخر هفته بازنویسی کرد. یوتیوب بعد از خرید گوگل بازنویسی شد. هر دو زنده‌اند. آن‌چه نمی‌شود بازنویسی کرد، محصولی است که هیچ‌کس نمی‌خواهد.

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

پایتون دقیقاً همین است. نه بهترین برای هر کاری. فقط زبانی که بیشتر آدم‌ها بلدن و بیشتر خرابی‌هاش نوشته شده.

و یک چیز در مورد آینده: پایتون در اوج خودش نیست. شاخص TIOBE آن در جولای ۲۰۲۵ به ۲۶.۹۸ درصد رسید ، بالاترین رقمی که یک زبان در تاریخ این شاخص گرفته و از آن موقع پایین آمده. در اکتبر ۲۰۲۶ حدود ۱۹.۲۳ درصد است و همچنان اول. منبع: TIOBE

ولی چیزی که رشد کرد، جای دیگری بود: در نظرسنجی استک‌اورفلو ۲۰۲۵، استفاده از پایتون در یک سال هفت واحد درصد جهید به ۵۷.۹ درصد و در میان کسانی که تازه دارند یاد می‌گیرند، ۷۱.۸ درصد. پایتون دیگر زبان «استارتاپ‌های کوچک» نیست. زبان کسانی است که تازه شروع کرده‌اند.

که دقیقاً برعکس داستان اینستاگرام است. و شاید برای همین، داستان اینستاگرام هنوز این‌قدر تکرار می‌شود.

سؤالات متداول

آیا پایتون برای پروژه‌های بزرگ مناسب است؟
بله، ولی به شرطی که بدانید چه چیزی را دارید قربانی می‌کنید. اینستاگرام و یوتیوب هر دو در مقیاس بزرگ پایتون دارند و هر دو در کنارش C++، Java یا Go هم دارند، برای بخش‌هایی که سرعت واقعاً مهم است. هیچ‌کدام همه‌چیز را با پایتون ننوشتن.

چرا آن سه مهندس اینستاگرام به زبان دیگری نرفتند؟
چون بعد از رسیدن به چند صد میلیون کاربر هم دلیلی ندیدن. هوی دینگ، رئیس مهندسی، گفته: «با استک پایتون/جنگو به چند صد میلیون کاربر رسیده بودیم، پس تصمیم گرفتیم ادامه بدهیم.» و یک دلیل دیگر هم اضافه کرده که کمتر جدی گرفته می‌شود: «مهندسان ما واقعاً پایتون را دوست دارند. این خودش دلیلی است که آدم‌ها می‌خواهند برای ما کار کنند.» استخدام، یک مزیت فنی است.

آیا زبانی که شرکت‌های بزرگ استفاده می‌کنند، لزوماً زبان بهتری است؟
نه. معمولاً فقط زبانی است که برای آن شرکت، در آن لحظه، کمترین دردسر را داشت. تفاوت مهمی است.

پس چرا همه از پایتون شروع می‌کنند؟
سه دلیل واقعی: کتابخانه‌های آماده، تعداد زیاد آدمی که بلدن، و اینکه می‌شود سریع یک چیز قابل نمایش ساخت. هیچ‌کدام از این‌ها یعنی پایتون «بهترین» است. یعنی کم‌دردسرترین است.

py1

حرف آخر

برگردیم به آن سه نفر در اکتبر ۲۰۱۰.

آن‌ها یک انتخاب خیلی خوب نکردن. یک انتخاب بی‌خطر کردن. و این دو، بیشتر وقت‌ها یک چیز می‌شوند ، چون در روز اول، هیچ‌کس نمی‌داند کدام انتخاب «خوب» است.

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