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

خب میشه گفت این حرف اشتباه هست مگر این که از نظر علمی بررسی بشه و در هر حوزه زبان هایی که بهتر هستند معرفی بشند مثلا در حوزه وب یا گرافیک دو بعدی یا ...

ولی من نمیخوام این بررسی رو توی این پست انجام بدم چون من تسلط به تمامی حوزه ها و تمامی زبان ها ندارم و این کار یک کار خیلی تخصصی و زمانبر هست .

من توی این پست میخوام در مورد حوزه هایی که توشون کار کردم یا دوست دارم کار کنم و یا در موردشون تحقیق کردم و با افرادی که در اون حوزه کار میکردند آشنا هستم صحبت کنم .

خب اولین حوزه ، حوزه سه بعدی هست البته نه انجام دادن سه بعدی با نرم افزار هایی مثل مایا و تریدیمکس بلکه برنامه نویسی سه بعدی با کتابخانه های موجود مثل VTK ، اوپن جی ال و pcl و ...

من کارم رو با یک پروژه برای معدن چادرملو(بزرگ ترین معدن سنگ آهن ایران ) شروع کردم توی اون پروژه نیاز به ویژوالیزیشن مدل های سه بعدی از معدن و اطلاعات رادار داشتیم اونجا به دلیل محدودیت زمانی که وجود داشت از VTK استفاده کردیم که هم جوابش رو توی کلی کار دیگه پس داده بود و هم سطح بالاتر از اوپن جی ال بود توی کار باهاش خوب پیش رفتیم البته به دلیل این که وقت نکردیم بشینیم اصولی از اول یاد بگیریم مشکلاتی هم توی کار برامون پیش اومد ولی در کل راضی بودم ازش و ای پی ای برای خیلی از زبان ها مثل سیشارپ و پایتون و ... داره ولی ما با سی پلاس پلاسش کار کردیم و هرکجا هم که دیدم توی کارهای صنعتی با همین نسخه سی پلاس پلاس کار می‌کردند . بعد از اون یا بهتره بگم هم زمان با اون یک پروژه توسعه ابزار تخصصی برای دندون پزشکی با یک شرکت اتریشی رو شروع کردم به همکاری توی اون بخش سه بعدی با PCL نوشته شده بود و صد البته سی پلاس پلاس چون PCL بر پایه VTK بود میشد تا حدودی باهاش ارتباط بر قرار کرد و البته یک سری کارهایی که لازم بود انجام بشه از لایه PCL قابل انجام نبود و نیاز به دانش VTK برای پیاده سازیش بود که خب انجام دادم .

بعد از اون یکم بیشتر جذب سطح پایین شدم چون دیدم معمول هست که اگر زمان و هزینش باشه از لایه اوپن جی ال کارها رو انجام میدند و برای سیستم های موبایل یا امبدد از OPENGL ES استفاده می‌کنند سعی کردم برم سمتش و با اون کار کنم تا دانش سه بعدی خودم رو از پایه تصحیح کنم ولی بعد یکم پیش رفتن شرایط کاریم تغییر کرد و ناخود آگاه کنار گذاشته شد ترجیح دادم با کتابخانه های سطح بالاتر برای دو بعدی شروع کنم که رفتم سراغ گرافیکس ویو کیوت که داشتم باهاش یک موتور بازی دو بعدی برای خودم مینوشتم که باز شرایط کاریم تغییر کرد و هنوز کدش داره توی سیستمم خاک میخوره . در کل توی حوزه سه بعدی چه توی کارهای بزرگ چه کارهای کوچکی که میخوایم به مشتری تحویل بدیم تنها گزینه سی پلاس پلاس هست و استفاده از زبان های دیگه مشکلاتی رو برامون به وجود میاره که ممکنه هم زمان هم هزینه و هم آبرومون رو هدر بده .

 

حوزه بعدی که خیلی علاقمند به کار توش هستم حوزه سرورنویسی هست . تا الان کارهایی هم توش انجام دادم و یک پروژه نسبتا خوب هم الان دستمه توی این زمینه که ترجیح میدم تا تمومش نکردم خیلی عمومی اعلامش نکنم ولی دوستان نزدیکم ازش خبر دارند . قبلا هم داشتم یک پلتفرم برای نویسنده ها توسعه میدادم که قرار بود برای تمامی پلتفرم ها کلاینت داشته باشه و کلی ایده و خدمت پشتش داشتم ولی بعد یه مدت انگار ایده جذابیتش رو برام از دست داد توی اون پروژه داشتم از POCO و MongoDB استفاده میکردم و سورسش هم توی گیتهابم هست میتونید اگر دوست داشتید با کارکرد مونگو و پوکو آشنا بشید میتونید بهش نگاهی بندازید .

لینک پروژه پلتفرم نویسندگان در گیتهاب

 

بعدش مشغول پروژه خودم شدم که الان دارم انجام میدم و اون هم با سی پلاس پلاس هست به دلیل نیاز به گسترشی که در آینده داره ترجیح دادم با سی پلاس پلاس انجامش بدم .

توی یک پروژه هوشمند سازی هم یکم دخالت کردم که اون هم روی ابزار های امبدد (رسپبری ) نوشته شده بود و با کیوت و سی پلاس د داشتند کار می‌کردند و اما بعد از همون شرکت یک پروژه پلتفرم هوشمند سازی اینترنت اشیا بهم پیشنهاد شد که به دلایلی (درگیری توی پروژه خودم و شرایط زندگیم ) ترجیح دادم خودم توی برنامه نویسیش ورود نکنم و سپردم به دوتا برنامه نویس دیگه و خودم یه حالت مشاوره دارم توی پروژه . برای این پلتفرم بحث بود سر این که سرورش رو با چی بزنیم یا نسخه های موبایلش رو با چی بزنیم .

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

نسخه سمت سخت افزارش و تعبیه شدش باز با سی پلاس پلاس و کیوت هست .

 

دکتر فصیح که توی تیم اتریش مدیر پروژه بود و باهاش کار میکردم از تجربش در کار با شرکت‌های ماشین سازی میگفت که همشون از کیوت و سی پلاس پلاس استفاده میکردند و قسمت هایی از کار رو به تیم ایشون داده بودند برای انجام .

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

«توی کارهای بزرگ و صنعتی هیچ انتخابی بجز سی پلاس پلاس نمیمونه تا الان توی هر شرکتی کار کردم و با هرکس هم کاری کردم همه توی کار داشتند سی پلاس پلاس کار میکردند »

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

  • گرافیک دو بعدی (فتوشاپ ، گیمپ ، کریتا و ... )
  • موتورهای گرافیکی ( 3ds max ، Maya ، blender و ...)
  • موتورهای بازی سازی اوپن سورس ( کرای انجین ، انریل انجین و ...)
  • موتورهای بازسازی اختصاصی شرکت های بزرگ ( فراست بایت و Unigine  ... )
  • سرور های بازی های بزرگ
  • کلاینت های اینترنت اشیا
  • اس دی کی های هوش مصنوعی
  • اس دی کی های واقعیت افزوده
  • کتابخانه نویسی برای کارهای خاص برای بقیه زبان ها مثل رابی و پایتون

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

اگر حوزه‌ی دیگه ای مونده خب اونها رو ممکنه زبان های دیگه یکه تاز باشند .

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

اینطوری هست که کسی که دنیاش به اندازه طراحی وب هست پی اچ پی رو بهترین زبان دنیا میدونه در واقع دنیاش رو به اندازه طراحی وب محدود کرده و توی دنیای خودش پی اچ پی رو بهترین زبان دنیا میدونه .