
حتما شما هم شنیدید که سی پلاس پلاس دیگه قدیمی شده و فقط به درد پاس کردن درسهای دانشگاه میخوره و ...
اما اگر میخواهید با جایگاه واقعی سی پلاس پلاس بر اساس مستندات و مشاهدات عینی افراد فعال در این حوزه آشنا شوید با ما همراه باشید.
• معرفی
• تاریخچه
• استانداردها
• کامپایلرها
• پلتفرمها
• کاربردها
• منابع یادگیری
• موقعیت شغلی
• نحوه کاریابی
معرفی
زبان یک زبان سطح پایین و بالاست و این بدن معنی است که شما میتوانید در آن کاملا سطح پایین برنامه نویسی کنید یا به طور کامل سطح بالا برنامه نویسی کنید. یک زبان کامپایلریست و این به این معنی است که کدی که شما به زبان مینویسید قابل فهم و اجرا برای سیستمعامل نیست و نیاز است یک کامپایلر کد شما را به کد قابل فهم برای ماشین تبدیل کند.
تاریخچه
استراستروپ کار بر روی زبان «C دارای کلاس» را در سال ۱۹۷۹ آغاز کرد. ایدهٔ ساخت این زبان جدید در زمان کار بر روی تز دکترای خود به ذهن استراستروپ خطور نمود. او متوجه شد که سیمولا دارای ویژگیهایی مناسب برای ساخت برنامههای بسیار بزرگ است اما برای استفادهٔ عملی بسیار کند است اما بیسیپیال با وجود سرعت بسیار زیاد برای ساخت برنامههای بزرگ بسیار سطح پایین است. زمانی که استراستروپ کار خود را در آزمایشگاههای بل (Bell Labs) آغاز نمود با مشکل تحلیل هسته یونیکس با توجه به محاسبات توزیع شده روبرو شده بود. با یادآوری تجربیات خود در دوران دکترا، او زبان C را با استفاده از ویژگیهای سیمولا گسترش داد. C به این دلیل انتخاب شد که یک زبان عمومی، سریع، قابل حمل، و در سطح گستردهای در حال استفاده بود.
در سال ۱۹۸۳ نام زبان از «C با کلاس» به تغییر یافت. ویژگیهای دیگر شامل توابع مجازی، سربارگزاری عملگر و نام تابع، ارجاعات، ثوابت، کنترل حافظه توسط کاربر بهصورت آزاد، کنترل نوع بهتر، و توضیحات یکخطی به صورت BCPL با استفاده از «//» نیز به آن اضافه شد. در سال ۱۹۸۵ اولین نسخه زبان برنامهنویسی انتشار یافت و مرجع مهمی برای این زبان فراهم شد در حالی که هیچ استاندارد رسمیای وجود نداشت. در سال ۱۹۸۹ ویرایش ۲٫۰ از زبان ارائه شد. ویژگیهای جدیدی مانند ارثبری چندگانه، کلاسهای انتزاعی، اعضای ایستای توابع، اعضای ثابت تابع، و اعضای حفاظت شده به آن اضافه شد. در سال ۱۹۹۰ «راهنمای مرجع » منتشر شد. این کار بنیان استانداردهای بعدی شد. آخرین ویژگیهای اضافه شده شامل موارد زیر بودند: قالب توابع، استثناها، فضاهای نام، تبدیلات جدید، و یک نوع داده منطقی.
استاندارد این زبان همچنان در حال ارتقاع و بروزرسانی است.
استانداردها
در صورتی که به بررسی دقیق استاندارد علاقمند هستید میتوانید به لینک تاریخچه سی پلاس پلاس مراجعه کنید. اما از استانداردهای قبل از به عنوان سی پلاس پلاس کلاسیک و از سی پلاس پلاس بعد از سال 2011 به عنوان سی پلاس پلاس مدرن یاد میشود.
تفاوت رویکرد از نسخه مشهود است و اما استانداردهای اصلی از سال 2011 بدین صورت است که هر سه سال یک نسخه از استاندارد تدوین میشود و زبان را بهبود میبخشد.
کامپایلرها
کامپایلرهای متعددی برای زبان توسعه داده شده است که از مهم ترین آنها میتوان به موارد زیر اشاره کرد:
• LLVM Clang
• GCC
• MSVC
• Intel
که برخی از آنها مانند Clang و GCC متن باز هستند.
برای اطلاع از میزان پشتیبانی هر کامپایلر از استاندارد میتوانید به لینک پشتیبانی کامپایلرها مراجعه کنید.
کامپایلرهای مختلف در زمینههای مختلف متفاوت هستند برای مثال کامپایلرهای Clang و GCC متن باز بوده و تقریبا اکثر پلتفرمهای موجود را پشتیبانی میکنند. برخی از کامپایلرها توسط شرکتهای بزرگ توسعه داده میشوند و به صورت تجاری عرضه میشوند.
وجود کامپایلرهای متعدد به این معنی است که کد شما ممکن است با کامپایل توسط کامپایلرهای مختلف کد ماشین متفاوتی ایجاد کند و سرعت یا بهینگی متفاوتی داشته باشد و به دلیل توسعه مداوم کامپایلرها نمیتوان مقایسه دقیقی از بهینگی آنها ارائه داد.
پلتفرمها
کامپایلرهای توانایی کامپایل کد برای هر پلتفرمی را دارا هستند. از جمله پلتفرمهای معروف مورد پشتیبانی میتوان به موارد زیر اشاره کرد:
• Linux
• Mac OS
• Windows
• Solaris
• Android
• IOS
• Free BSD
و حتی شما میتوانید با برای سخت افزارهای بدون سیستمعامل نیز برنامهنویسی کنید.
کاربردها
کابردهای در همه زمینهها مشهود است، برای مثال از کوچک ترین قطعات سیستمهای نهفته گرفته تا بزرگترین ابرکامپیوترهای دنیا از برنامههای نوشته شده با استفاده میکنند اما اگر بخواهیم کمی با استنداد صحبت کنیم از کاربردهای میتوانیم به توسعه موارد زیر اشاره کنیم:
• موتور بازی(unreal engine , cry engine, unigin)
• بازی(همه بازیهای بزرگ دنیا از جمله سریهای Call Of Duty, GOD Of Ware,Battlefield,GTA)
• پیام رسان(Telegram)
• برنامههای موقعیت محور(Google Earth)
• ابزارهای ویرایش دو بعدی تصیور(تمامی ابزارهای شرکت Adobe و krita)
• ابزارهای گرافیک سه بعدی (3DSMax, MAYA,CINEMA 4d,blender)
• موتور رندر(Cycles)
• سیستمهای نظامی
• سیستمهای بلادرنگ
• سیستم عامل(Linux,Mac OS, Windows)
• ابزار تخصصی پزشکی(cs-ultra-pro)
• سرور
• مخابرات(gnuradio)
• برنامه کاربردی موبایل(دانیستا،اپ اندروید ایرانمال)
• انتی ویروس
• ویرایش متن(Office)
• ویرایش صدا(audacity)
• مجسم سازی دادههای سه بعدی(VTK,Paraview)
البته این تنها گوشهای از کاربردهای در دنیای واقعیست و شما میتوانید با کمی جستجو کاربردهای بیشتری از آن بیابید مدتی پیش جناب استراستروپ جایزه draper رو در سال 2018 دریافت کردند که این جایزه فقط به کسانی اعطا میشود که .
منابع آموزشی
روش های یادگیری را میتوان به شیوههای متفاوتی دستهبندی و طبقهبندی کرد.
• مطالعه کتاب
• آموزش ویدئویی
• مطالعه مستندات
• انجام پروژه
• راهنما محور
مطالعه کتاب
در صورتی که شما با مطالعه کتاب یادگیری بهتری دارید کتابهای Bjarne Stroustrup را به شما پیشنهاد میکنم که میتوانید لیست کتابها را در سایت شخصی ایشان به آدرس کتابهای Bjarne Stroustrup مشاهده کنید.
آموزش ویدئویی
در صورتی که شما با ویدئو ارتباط بهتری برقرار میکنید میتوانید برای یافتن آموزشهای ویدئویی به سایتهای مرتبط از جمله Udemy و LinkedIn مراجعه کنید و دوره آموزشی مورد نظر خود را بیابید.
مطالعه مستندات
در صورتی که شما با مطالعه مستندات میتوانید مسیر خود را بیابید به شما سایت cppreference را پیشنهاد میکنم.
انجام پروژه
در صورتی که شما با انجام پروژه مهارتها را بهتر میآموزید میتوانید به سایتهایی که به شما امکان کدنویسی را میدهند مانند codecademy مراجعه کنید.
راهنما محور
در صورتی که شما برای آموزش نیاز به کلاس حضوری دارید میتوانید به آموزشگاههای معتبر سراسر کشور مراجعه نموده و در دورههای حضوری آنها شرکت کنید.
اما نکته مهم این است که به یاد داشته باشید هیچ کدام از روشهای بالا به تنهایی نمیتواند شما را به درجه استادی برساند و نیاز است همواره تلاش کرده و پروژه انجام دهید تا تجربه خود را بیشتر کنید.
موقعیت شغلی
و اما یکی از مهم ترین موضوعاتی که در مورد برنامهنویسی مطرح هست بازار کار اون در داخل و خارج از ایران است.
برای بررسی ظرفیت شغلی بهتر است آن را در چند لایه بررسی کنیم.
سطح حرفهای
نه تنها برای برنامهنویس سطح حرفهای بلکه برای هر فرد حرفهای در هر زمینهای کار فراهم است اما میزان درآمد آن با توجه به میزان سابقه و توانایی فرد متفاوت است و در اروپا تا ماهیانه بیش از 5 هزار یورو بالا میرود که البته این حقوق برای فردی با 15 تا 20 سال سابقه کار در نظر گرفته شده است. در آمریکا درآمد متوسط توسعه دهندگان بین ماهیانه 6 هزار تا 10 هزار دلار است. اما در ایران طبق آمار جاب ویژن حداکثر حقوق برنامه نویسان در ایران 14 میلیون تومان هست که البته به دلیل جامعه آماری بسیار کم این نظرسنجی نتایج آن قابل استناد نیست اما حقوق برنامهنویس حرفهای طبق اطلاعاتی که بنده دارم تا حدود 20 یا 25 میلیون تومان در صورتی که مدیر تیم باشند بالا خواهد رفت اما چون در ایران سیستمهای نظامی به شدت به برنامهنویس نیاز دارند در مواردی که کار حساس باشد حقوقها به اعداد خیلی بالاتر نظیر ماهیانه 40 میلیون تومان میل می کند.
سطح متوسط
برنامه نویس سطح متوسط در اروپا با 5 الی 10 سال سابقه حدود 4000 یورو درامد خواهد داشت و از 10 الی 15 مبلغ 4800 یورو که البته از این میزان حدود یک سوم سهم دولت بوده و دریافتی خالص توسعه دهنده کمتر از این مبلغ خواهد بود.
در ایران نیز حقوق برنامه نویس متوسط بین 5 تا 9 میلیون تومان است.
سطح مبتدی
متاسفانه توسعه دهنده در سطح مبتدی قابلیت انجام پروژههای بزرگ سی پلاس پلاس را نداشته و تا چندی پیش شرکتها از همکاری با این دسته از نیروها سر باز میزدند اما به دلیل کمبود نیرو شرکتهای مختلف اقدام به جذب نیروی مبتدی و یا برنامهنویس زبانهای دیگر کرده و آنها را برای کار با آموزش میدهند که حقوق دریافتی این دسته از دوستان بین 3.5 تا 6 میلیون تومان است.
نحوه کاریابی
سه راه عمده برای کسب درآمد برای توسعه دهنده وجود دارد که در ذیل به توضیح آنها خواهیم پرداخت:
انجام پروژه
در صورتی که توانایی انجام پروژه را داشته باشید میتوانید از سایتهای انجام پروژه یا ارتباطات خود و یا با ثبت شرکت و بازاریابی پروژه دریافت کنید و به کسب درآمد بپردازید اما از آنجا که پروژههای کوچک از جنس پروژههای دانشجویی و ... درآمد چندانی ندارند و پروژههای بزرگ هم معمولا به شرکتهای با رانت و سابقه کاری داده میشود گذران زندگی با پروژههای داخلی زیاد جذاب نیست و بسیاری از دوستان به انجام پروژههای خارجی روی آوردند که البته به دلیل تحریم بودن و عدم وجود راه پرداخت شفاف دردسرهای خود را داراست.
استخدام در شرکت
قرار گرفتن در محیط حرفهای در کنار دیگر توسعهدهندگان فرصت جذابیست که شما میتوانید با استخدام در یک شرکت درست به ان دست پیدا کنید اما حقوق پایین تر شرکتها نسبت به پروژههای خارجی از دلایل اصلی دور کننده دوستان از استخدام تمام وقت است اما برای کسب تجربه و یادگیری هی چیز مانند قرار گرفتن در محیط کار به شما کمک نخواهد کرد.
توسعه ایده شخصی و یا استارتاپ
کلنجار رفتن با مشکلات جدی و جدید و پیدا کردن راه حل برای آنها بسیار جذاب است و اگر این مسئله را با استرس شکست کسب و کار همراه کنیم و حقوق پایینتر نسبت به استخدام در شرکتهای معتبر هم برای ما اهممیت نداشته باشد و بتوانید ریسک حقوق پایینتر برای رسیدن به هدفی والاتر و فردایی بهتر و یا شکست کسب و کار و از دست رفتن همه چیز را تحمل کنید همکاری در استارتاپ شغل مناسبی برای شماست.
امیدوارم این مطلب براتون مفید بوده باشه و در صورتی که نظری یا سوالی دارید در قسمت نظرات ما را از آن مطلع کنید.