پدرام بهروزی

کدام زبان برنامه‌نویسی؟

Ruby in a Jar

من حالا بیشتر از سه سال است که فقط با PHP کار کرده‌ام. از frameworkها، CMSها و eCommerceهای زیادی استفاده کرده‌ام و تا الان زندگی راحتی داشته‌ام (به جز آن روزهای سیاهی که با بیتریکس کار می‌کردم البته). حالا دارم Ruby را یاد می‌گیرم. به این خاطر که در شرکت چند پروژه‌ی روبی داریم و من باید خودم را به آنها برسانم. خب انگیزه‌ی خیلی بدی نیست. اما راستش خیلی هم قوی نیست. مگر PHP چه اشکالی دارد؟

 

حالا سه هفته از شروع یاد گرفتن روبی گذشته و من با خودم فکر می‌کنم: «خدایا! چرا زودتر با روبی آشنا نشده بودم؟»

 

با مسرت تمام یک روز کامل کلیدواژه‌های گوگل من اینها بودند: «Ruby vs PHP»، «چرا روبی از PHP بهتر است؟»، «اگر روبی نبود چه اتفاقی برای دنیا می‌افتاد؟»، «چرا روبی را از دبستان به بچه‌ها یاد نمی‌دهند؟»

 

خب دلیلش این است که روبی دو تا مزیت بزرگ دارد: اول اینکه ژاپنی است و دوم اینکه Ruby سنگ تولد متولدین جولای است و بله. من هم متولد جولای هستم.

 

The glowing ruby shall adorn,

Those who in July are born;

 

شروع کردم به یاد گرفتن روبی. rubymonk.com و ruby.learncodethehardway.org منابعم بودند. روی یک پروژه‌ی دستگرمی هم کار کردم. یک وبلاگ ساده. در این حد که بتوان یک پست را ایجاد، تغییر و حذف کرد. به طرز معجزه‌آسایی همه چیز خیلی راحت انجام شد و من خیلی خوشحال بودم. حتی تا مرز نوشتن یک فریم‌ورک جدید پیش رفتم. بنابراین طبیعتاً تصمیم گرفتم راجع به برتری‌های روبی نسبت به PHP بنویسم. که چه مزیت‌هایی دارد و چه امکاناتی در اختیار برنامه‌نویس قرار می‌دهد. اما وقتی جستجو می‌کردم تقریباً ناامید شدم. هرکسی عقیده‌ی خودش را داشت. هر زبانی را که جستجو کنید یک عده دارند راجع به این حرف می‌زنند که چرا آن زبان بهترین زبان دنیا است. روبی، پایتون، PHP، حتی زبان‌هایی مثل Haskell.

 

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

 

پس با روبی یا پایتون یا PHP و یا هر زبان برنامه‌نویسی دیگر، هر کاری که فکرش را بکنید می‌توانید انجام دهید و این سوال که کدام زبان از بقیه بهتر است کمی نامربوط است. سوال درست‌تر این است: برای انجام دادن کار X کدام زبان مناسب‌تر است؟ مثلاً برای نوشتن برنامه‌ی دسکتاپ ویندوز، احتمالاً، مناسب‌ترین گزینه سی‌شارپ است. برای نوشتن یک اپلیکیشن اندروید، مناسب‌ترین زبان جاوا است.

 

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

جواب این است: روبی به طرز فکر آدم بیشتر شبیه است.

این را دیوید هاینمیر هانسون (dhh) سازنده‌ی Ruby on Rails می‌گوید و من هم همین را می‌خواستم بگویم اما نمی‌دانستم چطور باید در یک جمله خلاصه‌اش کنم. البته این جمله یک گزاره‌ی علمی نیست. منظور از «آدم» در اینجا بدون شک یک برنامه‌نویس است. معمارها، نویسنده‌ها، چشم‌پزشک‌ها، کفاش‌ها و هزار نوع آدم دیگر، طور دیگری فکر می‌کنند و روبی (و هر زبان برنامه‌نویسی دیگر) برای آنها مفهومی ندارد. پس جمله را اصلاح می‌کنم: روبی به طرز فکر یک برنامه‌نویس بیشتر شبیه است.

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

گفتم تقریباً بقیه هم همین را می‌گویند و مهم است که توضیح دهم چرا تقریباً. چون هیچ چیزی در دنیا برای همه ایده‌آل نیست. این را متز توی همان مصاحبه هم می‌گوید. یک برنامه‌نویس از یک زبان انتظاراتی دارد و برنامه‌نویس دیگر انتظاراتی دیگر. من دوست دارم برنامه‌ام را اینطوری بنویسم:

puts “Hello wordl!”

 

اما هیچ بعید نیست کسی دوست داشته باشد همین برنامه را با INTERCAL اینطوری بنویسد:

 

DO ,1 <- #13
PLEASE DO ,1 SUB #1 <- #238
DO ,1 SUB #2 <- #108
DO ,1 SUB #3 <- #112
DO ,1 SUB #4 <- #0
DO ,1 SUB #5 <- #64
DO ,1 SUB #6 <- #194
DO ,1 SUB #7 <- #48
PLEASE DO ,1 SUB #8 <- #22
DO ,1 SUB #9 <- #248
DO ,1 SUB #10 <- #168
DO ,1 SUB #11 <- #24
DO ,1 SUB #12 <- #16
DO ,1 SUB #13 <- #162
PLEASE READ OUT ,1
PLEASE GIVE UP

 

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

سوال دوم اینکه با چه زبانی راحت‌تر هستید. کدام زبان به شما حس بهتری می‌دهد. حتی اگر نظر من را بخواهید می‌گویم سوال دوم از اولی هم مهم‌تر است. چون خدا را چه دیدید؟ شاید آنقدر عاشق اسمبلر شدید که دلتان خواست یک اپلیکیشن اندروید هم با آن بنویسید.

 

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

پدرام بهروزی

از سال ۸۵ برنامه‌نویسی را با نوشتن یک بازی ساده با ++C شروع کرد. به زبان PHP مسلط است و با سیستم‌های مدیریت محتوای زیادی مثل دروپال، وردپرس، بیتریکس و مجنتو آشنایی دارد. درحال حاضر در سارینا با Magento، Laravel و Ruby on Rails کار می‌کند. عاشق سرک کشیدن در تکنولوژی‌های جدید، خواندن کتاب و موسیقی راک است.

  1. دوشنبه، ۹ تیر ۱۳۹۳ هادی کلانتری
    از اینکه تجربیاتت رو به اشتراک گذاشتی سپاس‌گزارم. علاقه‌مند شدم به شخصه
    مخصوصا وقتی فهمیدم ‌ژاپنی ه و Boss Matsomuto طراحش بوده
  2. سه شنبه، ۱۰ تیر ۱۳۹۳ علی چلمقانی
    منم خوندم متنت رو :) مثل همیشه جذاااااب :)
    موفق باشی
  3. چهارشنبه، ۱۱ تیر ۱۳۹۳ نوید کوهی
    "او شش سال پیش برنامه نویسی را با نوشتن یک بازی ساده ی C++ شروع کرد " اسنیک !! یادش بخیر، بعد اون گیم همه گیرداده بودند اسنیک بنویسن و البته با استفاده از روش ابداعی نمایش آرائه ی دوبعدی به عنوان صفحه ی نمایش که مخترعش من بودم :))))) . جدا یادش بخیر . موفق باشی و مشتاق دیدار .
  4. چهارشنبه، ۱۱ تیر ۱۳۹۳ Steve Jobs
    بسیار عالی، جذاب و تو فکر فرو برنده بود
  5. چهارشنبه، ۱۱ تیر ۱۳۹۳ asdasd
    چه چیزا :D
    فقط php عزیزم
  6. پنج شنبه، ۱۲ تیر ۱۳۹۳ مجيد
    خيلى ممنون. نوشته جالب و مفيدى بود.
    به نظر من هر زبان برنامه نويسى به آدم يا همون برنامه نويس يه ديد جديد ميده واسه حل كردن مساله كه ميشه به زبونهاى قبلى تعميمش داد.
  7. یکشنبه، ۱۵ تیر ۱۳۹۳ مرثا بنی اسدی
    مرسی به خاطر معرفی منابع و راهنمایی
  8. سه شنبه، ۱۷ تیر ۱۳۹۳ مهران رسولیان
    درسته . ولی جاوا فقط به آندروید ختم نمیشه
    مثلا من الان هی این چیز تو ذهنمه که من وقتی جاوا رو تا یکی دو سال دیگه هم خوب کار بکنم، اونوقت بتونم برای ربات ها و حتی ماشین هم برنامه نویسی انجام بدم و احساس میکنم که علاقه ی شدیدی به این کار دارم.
    البته برای جاوا برنامه های زیادی در نظر دارم.
  9. دوشنبه، ۳۰ تیر ۱۳۹۳ پیمان گلدسته
    جالب بود ، واقعاً از این سوال جایگزین و صحیح خوشم اومد.
    آفرین.
  10. دوشنبه، ۱۳ مرداد ۱۳۹۳ ناصر
    جای مار، فیل و ... توی اون قوطی ها خالیه!
    درسته که گر تو منطق دانی، زبان آموزی سهل است. ولی این تجربه‌ست که توی این حرفه حالیت میکنه مثل بقیه عناصر عالم، گل بی‌خار خداست و اونیم که پی کمال باید خودش با کمالات باشه. همونطور که گفتی زبان‌ها صرفاً ابزارن، حالا حال خوش وقتی که این ابزار به دستت بشینه، هر چند باز هم در آخر هر کدوم هزینه های خودشون دارن و باز هم میرسیم سر همون جای اول :)
  11. شنبه، ۸ شهریور ۱۳۹۳ شاهین اردانه کلانتر
    این میتونه یه تجربه لذت بخش برای آینده باشه --- شاید شما شاید هم من
  12. یکشنبه، ۹ شهریور ۱۳۹۳ علی عسگری
    ببخشید یعنی مثلا با روبی و php هم میشه برای آندروید و ios برنامه نوشت؟
    یه سوال دیگه. درگاه های پرداخت رو با ruby هم میشه به سایت ها متصل کرد؟
    • پدرام بهروزی
      دوشنبه، ۱۰ شهریور ۱۳۹۳ پدرام بهروزی
      بله. امکانش هست. برای روبی یه فریم‌ورک خوب هست به اسم Ruboto. برای php چیزی سراغ ندارم اما احتمالن اگر سرچ کنی پیدا می‌کنی.
      درگاه‌های پرداخت رو هم به راحتی میشه با روبی نوشت.
  13. پنج شنبه، ۲۵ دی ۱۳۹۳ علیرضا مرادی
    دوست عزیزم با تشکر بابت اشتراک گذاری شدیدا به این برنامه علاقمند هستم دنبال مکانی هستم که نوع برنامه نویسی رو درست آموزش دهد اگر جایی ر ا می شناسید لطفا اطلاع رسانی کنید متشکرم
  14. سه شنبه، ۲۱ مهر ۱۳۹۴ بهرنگ
    خیلی خوب بود
  15. پنج شنبه، ۱۱ آذر ۱۳۹۵ nima
    درود . شما تدریس خصوصی روبی هم انجام میدهید؟!
    منتظر پاسخ شما هستم.
    سپاس
    • پدرام بهروزی
      پنج شنبه، ۱۱ آذر ۱۳۹۵ پدرام بهروزی
      سلام. نخیر دوست عزیز.
      ولی یکی از بهترین منابع واسه یاد گرفتن روبی این وبسایته. امیدوارم به دردتون بخوره:
      https://learnrubythehardway.org/