چه ابزاری بهتره؟

امروز بعد از ساعت کاری با بچه‌های شرکت راستین تو شبکه داخلی Counter Strike بازی کردیم. خیلی حال داد ولی من یه ایده جالب از این بازی گرفتم.

به نظرم توی این بازی میشه با دوتا استراتژی جلو رفت:

  1. یک سلاح رو که از همه بهتره برداریم و کلا بچسبیم به همون و دیگه درگیر خرید و تعویض و این چیزها نشیم
  2. از انواع سلاح و ابزار استفاده کنیم. مثلا استفاده از نارنجک، Shield و … که در این صورت لازمه حسابی توی تعویض ابزارها و استفاده به موقعه ازشون حرفه‌ای بشیم

قطعا استراتژی اول زودتر جواب میده و آدم سریع راه میفته، از طرفی دومی سختتره ولی اگر توش حرفه‌ای بشیم میتونه خیلی موثرتر و کاراتر باشه. یه مثال میزنم؛ من و یکی از بچه‌ها توی این بازی خیلی بی تجربه هستیم، تا حدی که دوستان میومدن از پشت با چاقو ما رو میکشتن! یه بار من یه Shield برداشتم و هم تیمیم هم پشت سر من اومد تا رسیدم به دشمن، من Shield رو گذاشتم جلوم و به هم تیمی گفتم نارنجک بنداز! خیلی راحت مقاومت کردیم. هر چند هم تیمیم حول شد و رفت جلو و خودش رو به کشتن داد و من هم Shield رو برداشتم تا تیر بزنم که من هم مردم. ولی درس اخلاقی اینجاست؛ با اینکه ما تجربه کمی داشتیم ولی به خاطر داشتن امکانات خوب بیشتر دووم اوردیم و حتی باعث شدیم دشمنمون که خیلی حرفه‌ای بود شوکه بشه!

این حکایت زبان‌های برنامه‌نویسی ساده و پیچیده هست. زبان‌های ساده مثل Go و Python و زبان‌های پیچیده‌تر مثل Scala و Rust. کار با زبان Go یا Python مثل کار با یک سلاح خاصه بدون اجازه خلاقیت و عدم وجود چند راه برای انجام یه ماموریت. اما کار با زبان Scala یا Rust یا هر زبانی که ازش به عنوان یه زبان پیچیده یاد میشه مثل استفاده از چند سلاح و ابزار و وجود چند راه مختلف برای انجام یه مامویت هست. به عبارت دیگه مثل چاقو سوئیسی هستن.

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

نکته: Simple != Easy ؛ ممکنه چیزهایی که ما امروز پیچیده میدونیمشون، بعدها ازشون به عنوان یه چیز ساده (نه الزاما آسون) یاد بشه.

6 دیدگاه برای «چه ابزاری بهتره؟»

  1. من با ایده شما کاملا موافقم. زبان هایی که یادگیریشون سخته و به اصطلاح بهشون پیچیده می گن، برای یادگیری آدم خاص خودشونم می خان. بدین معنی که اون آدم نمی تونه یک توسعه دهنده ساده باشه و باید کمی باهوشتر و با استعدادتر باشه. تا زمانی که تیم ها کوچیکن و پروژه های سازمانی انجام نمی دن که بجای پیچیدگی فنی پیچیدگی business داره. مشکلی نیست و گیر آوردن این مدل آدم های باهوش تر و با استعدادتر کار دشواری نیست ولی وقتی تیم توسعه شما باید متشکل از هزاران نفر باشه کار سخت میشه و اون پیچیدگی میشه دردسر و از طرف دیگه جذب این تعداد نیروی باهوش تر و با استعدادتر نیز کار سختی میشه. بهمین دلیله که زبان های برنامه نویسی مثل C یا جاوا که بر روی سادگی تاکید دارند هنوز بین شرکت های بزرگ محبوبیت بالایی دارند.

    1. بله دقیقا وقتی تیم خیلی بزرگ باشه ابزارهای ساده کارایی بیشتری دارن. از طرفی با استفاده از ابزارهای قوی‌تر میشه کارها رو سریعتر انجام داد و در نتیجه میشه نیروی انسانی کمتری مصرف بشه. به هرحال این یه trade off هست. بعضی معتقدن فقط باید A Player داشته باشیم تا پروژه‌های بزرگ و سنگین رو انجام بدیم بعضی میگن نه به جای یه A Player میریم یه عالمه برنامه نویس متوسط میاریم یه مدیر خوب میزاریم بالا سرشون.
      اگر کار ما چیزی مثل ساختن ساختمون بود با دسته دوم موافق بودم ولی چون توی کار ما همه چیز رو میشه مکانیزه کرد بیشتر با دسته اول موافقم. در نهایت همه اینها به نوع پروژه هم بستگی داره.

  2. با سلام
    اولا تفاوتی که بین این بازی و برنامه نویسی وجود دارد نوع مشارکت در کار تیمی می باشد. چه اینکه خود کانتر را یک زبان فرض بگیرید و بگویید هر کس با هر روشی که می خواهد مشغول به نوشتن باشد و یا چه آنکه روش بازی هر فرد را یک زبان فرض بگیرید که آن موقع در کار تیمی نمی توانید همزمان از چند زبان برای یک هدف استفاده نمایید. شاید منظورتان استفاده مشترک کل اعضای تیم از روش های گوناگون حل مسئله به صورت توافقی و هماهنگ است.

    ثانیا این درست نیست که بگوییم سطح خلاقیت و تنوع راه حل ها در زبانی مثل پایتون نسبت به مواردی که فرمودید پایین یا محدود است چرا که در حوزه کارکردها و محصولات، این ها (در زمان کنونی لااقل) قابل مقایسه با هم نیستند. بالاخره پایتون یا امثالهم آنقدر خوب بوده اند که توانسته اند این طیف وسیع از ذائقه های گوناگون در زمینه تولید نرم افزار را جذب خود نمایند.

    ثالثا ای کاش مصداقی سخن می گفتید که بیان حضرت عالی ناظر به کدام دسته بندی از ویژگی های هم خانواده می باشد. البته من باور دارم که در نگاه کلی اسکالا زبانی قدرتمندتر و پیچیده تر می باشد اما آن چیزی که اهمیت و نمود بیشتری دارد اندازه یا میزان سودمندی هر کدام از ویژگی ها در برآیند کلی ما می باشد. شاید منطقی نباشد از اسکالا در محیطی استفاده شود که پایتون به خوبی از پس آن برآید. برای مثال منظور شما از امکانات بیشتر کدام است؟

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

    به هر صورت کلام شما در مقوله آن دو استراتژی کاملا متین می باشد. موافقم. اما مقایسه را نپسندیدم چون بسیار کلی اشاره فرمودید. تشکر.

    1. صابر جان این صحبت، نسبت دادن دقیق بازی و زبان‌ها نبود. بلکه فقط این بازی باعث شد این ایده به ذهنم برسه.

      چندتا نکته گفتی که موافقم:

      ۱) جمع و جور بودن زبان باعث میشه (حداقل در اوایل کار) تمرکز بیشتر بر روی ایده کلی باشه تا نکات فنی
      ۲) وقتی برای یک کاری به راحتی میشه یه اسکریپت پایتون نوشتن در حالی که نوشتنش با یه زبان دیگه سختتر باشه، منطقی اینه که با پایتون نوشته بشه

      چندتا نکته که مخالفم:
      ۱) من اعتقاد ندارم که با پایتون نمیشه کاری کرد که با اسکالا میشه. با اسمبلی هم میشه هر کاری انجام داد ولی معنی ابزار یعنی همین که یه کار رو میشه به راحتتی انجام داد
      ۲) اینکه پایتون مورد استقبال عمومی قرار گرفته دلیل بر خوب بودنش نیست، همونطور که دلیل بر بد بودنش نیست. فقط ۱٪ از توسعه‌دهنده‌ها واقعا خیلی خیلی خفن هستن. حتی در خوبینانه‌ترین حالت ۸۰ درصد کارهای توسعه داره توسط ۲۰ درصد توسعه دهنده‌ها انجام میشه. طبیعی هست که استقبال از یک زبان ساده خیلی خیلی بیشتر از یک زبان پیچیده هست.
      ۳) من قطعا جزو اون ۱ درصد خفن برنامه‌نویسها نیستم اما هم با پایتون کار کردم هم اسکالا یعنی پروژه واقعی باهاشون انجام دادم و فقط در حد آزمایش و اینها نبوده. حالا که اسکالا رو خوب فهمیدم و یاد گرفتم ترجیح میدم حتی اسکریپت‌های ساده رو (که نشه با bash نوشتن) هم با اسکالا بنویسم. چون واقعا قابلیتش رو داره.

      با همه این حرفها. زبان یه چیز سلیقه‌ایه و بهتره هر کسی با هر زبان و تکنولوژی که راحته کار کنه. همون ۱٪ حفن هم فقط با یه زبان کار نمیکنن و توی هر زبانی که فکرش رو بکنی از این نخبه‌ها هستن.

      این مقاله خوبی در زمینه کم بودن برنامه‌نویسهای خیلی قوی هست: http://www.newyorker.com/magazine/2014/11/24/programmers-price

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *