من حالا بیشتر از سه سال است که فقط با 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
بنابراین اگر میخواهید یک زبان برنامهنویسی انتخاب کنید دو تا سوال از خودتان بپرسید: اول اینکه میخواهید چه کار کنید؟ این سوال مهمی است. اگر عاشق برنامهنویسی اندروید هستید بهتر است جاوا بخوانید. نمیگویم «لازم» است جاوا بخوانید چون با هر زبان دیگری هم میتوانید اپلیکیشن اندروید بنویسید. میگویم «بهتر» است چون هزینهی کمتری میپردازید.
سوال دوم اینکه با چه زبانی راحتتر هستید. کدام زبان به شما حس بهتری میدهد. حتی اگر نظر من را بخواهید میگویم سوال دوم از اولی هم مهمتر است. چون خدا را چه دیدید؟ شاید آنقدر عاشق اسمبلر شدید که دلتان خواست یک اپلیکیشن اندروید هم با آن بنویسید.
پینوشت: موارد خاص همیشه وجود دارد. گاهی واقعاً مجبور میشوید با یک زبان خاص کار کنید. گاهی هم مجبور میشوید یک زبان برنامهنویسی جدید طراحی کنید. این بحثاش فرق میکند.