آخرین پرسش‌های کاربران در ++C (سی پلاس پلاس)

++C (سی پلاس پلاس)

تاریخچه ای درخشان

یکی از معروف ترین زبان های برنامه نویسی در دنیا که یکی از قدیمی ترین زبان های برنامه نویسی دنیا نیز می باشد، زبان ++C است! زبان ++C یک زبان general-purpose است یعنی اهداف عمومی دارد و می تواند در هر زمینه ای مورد استفاده قرار بگیرد.

آیا با تاریخچه ی زبان ++C آشنا هستید؟
 آیا با تاریخچه ی زبان ++C آشنا هستید؟

زبان ++C تاریخچه جالبی دارد. در ابتدا و در سال ۱۹۷۲ (حدود ۵۰ سال پیش) زبانی به نام زبان C معرفی شد که تا امروز یکی از قوی ترین زبان های برنامه نویسی دنیا است اما به دلیل قدمت بسیار زیادش از نظر برخی از برنامه نویسان انتظارات مدرن آن ها را برآورده نمی کرد گرچه هنوز هم زبانی بسیار پرقدرت است و به هیچ عنوان قدیمی محسوب نمی شود. سرانجام در سال ۱۹۸۵ (حدود ۳۶ سال پیش) آقای Bjarne Stroustrup تصمیم به رفع این مشکل گرفت و زبانی به نام ++C را به عنوان extention یا افزونه زبان C ارائه کرد. این زبان در طول سال های اخیر رشد حیرت انگیزی داشته است و با اینکه نسبتا یک زبان low level محسوب می شود (توضیح خواهم داد) قابلیت های زبان های امروزی را نیز دارد. به طور مثال:

  • اضافه شدن قابلیت شیء گرایی (Object Oriented Programming)
  • اضافه شدن Generic ها
  • اضافه شدن توابع (function) ها

از نظر تاریخی نام زبان ++C در اصل C with Classes بود چرا که اضافه کردن قابلیت کلاس ها و شیء گرایی به C از مهم ترین اهداف ++C بود اما این نام در سال ۱۹۸۳ به ++C تغییر پیدا کرد.

قبل از ادامه این توضیحات باید با برخی از ویژگی های زبان های برنامه نویسی آشنا شویم.

زبان Low Level یا High Level چیست؟

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

از طرفی، زبان های برنامه نویسی مختلف سطوح مختلفی دارند. برخی از زبان های برنامه نویسی low level یا سطح پایین هستند یعنی به زبان سخت افزارهای کامپیوتر (همان باینری) نزدیک تر هستند در حالی که برخی از زبان های برنامه نویسی High Level هستند که یعنی به زبان ما انسان ها نزدیک تر هستند. به طور مثال زبان هایی مانند assembly یا C زبان هایی کاملا low level هستند که یعنی به شدت به زبان کامپیوترها (باینری) نزدیک بوده و به همین دلیل یادگیری آن ها کمی سخت تر از زبان های High Level است. در طرف دیگر زبانی مانند PHP را داریم که به انگلیسی بسیار نزدیک بوده و یادگیری آن آسان تر از C است.

می توان گفت زبان های ++C و C زبان های Low Level محسوب می شوند چرا که automatic memory management (مدیریت خودکار مموری که به نام garbage collection نیز شناخته می شود) ندارند. یعنی چه؟ در زبان هایی مانند PHP خود زبان برنامه نویسی مسئول حذف متغیرهای بلا استفاده است تا مموری سیستم را خالی کرده و بی دلیل اشغال نکند. در زبان هایی مانند ++C شما باید خودتان این کار را به صورت دستی انجام بدهید. البته از طرف دیگر برخی اعتقاد دارند ++C هم یک زبان Low Level و هم یک زبان High Level است چرا که برخی قابلیت های زبان های High Level مانند برنامه نویسی شیء گرا را دارد اما به نظرم این گفته صحیح نیست. حرف دقیق تر این است که بگوییم ++C یک زبان low level با برخی ویژگی های High level است.

Compiler و Interpreter

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

++C یک زبان کامپایل شده است، بنابراین سرعت آن نسبت به زبان هایی مانند PHP بالاتر است. نکته جالب اینجاست که خود زبان PHP با زبان C نوشته شده است!

کاربرد زبان ++C

با زبان ++C چه کار هایی می توان انجام داد؟
 با زبان ++C چه کار هایی می توان انجام داد؟

همانطور که در ابتدای مقاله توضیح دادم زبان ++C یک زبان general-purpose است که یعنی می توان از آن برای تمام اهداف مختلف استفاده کرد. در ابتدا باید بدانید که ++C یکی از پرکاربردترین زبان های برنامه نویسی در تمام دنیا است اما من چند مثال از کاربرد ها و نرم افزار هایی که با ++C نوشته شده اند را برایتان مثال می زنم:

  • زبان ++C در سورس کد سیستم عامل ها حضور بسیار پررنگی دارد، مخصوصا سیستم عامل های لینوکس مانند Ubuntu.
  • مرورگرهای معروفی مانند Google Chromeاز ++C در سورس کد خود استفاده می کنند چرا که نیاز به سرعت بالایی دارند.
  • ساخت Game Engine (موتور بازی های کامپیوتری) تا حد زیادی وابسته به ++C است.
  • ساخت Graphic Engine (موتور برنامه های گرافیکی مانند فتوشاپ) تا حد زیادی با ++C نوشته شده است.
  • پایگاه های داده مانند MySQL یا MongoDb تا حد زیادی از زبان ++C یا C استفاده می کنند. به طور مثال با مراجعه به صفحه ی MySQL در گیت هاب یا صفحه ی MongoDB متوجه می شوید که ۷۵ درصد از سورس کد آن با ++C نوشته شده است.
  • سیستم ها و خدمات ابری نیز تا از کد ++C استفاده می کنند.
  • وب سایت های مشهور مانند Amazon و YouTube نیز در برخی از قسمت های پردازشی سایت خود از ++C استفاده می کنند.

بنابراین کاربرد های زبان ++C بی حد و حصر است.

ویژگی های زبان ++C

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

آموزش ++C

معمولا سوالی مطرح می شود که اگر من فرد تازه کاری باشم و هنوز هیچ زبان برنامه نویسی را بلد نباشم آیا می توانم با آموزش ++C شروع کنم؟ بحث «توانستن» از فرد به فرد متغیر است و نمی توانیم برای تمام افراد یک نسخه واحد صادر کنیم اما به طور کل زبان ++C یک زبان low level است بنابراین یادگیری آن نسبت به PHP یا JavaScript بسیار سخت تر است. مثلا برای افراد تازه کار مدیریت مموری (memory management) واقعا آزاردهنده و پیچیده خواهد بود. همچنین در هنگام کدنویسی در ++C آزادی و کنترل بیشتری دارید بنابراین احتمال خرابکاری توسط شما بسیار بیشتر خواهد بود. از طرفی حجم کدهای ++C در یک پروژه بسیار زیاد است و اصلا با جاوا اسکریپت و امثال آن قابل مقایسه نیست.

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

مقیاس پذیری

مقیاس پذیری در ++C بسیار عالی است، به همین دلیل برنامه هایی که نیاز به پردازش زیاد دارند با آن نوشته می شوند. به طور مثال بازی های کامپیوتری که نیاز به پردازش گرافیکی سنگین دارند همگی با ++C نوشته شده اند.

سرعت

زبان ++C یک زبان statically typed است که یعنی نوع متغیرها و داده ها در compile-time (زمان کامپایل شدن کدها و قبل از اجرای آن ها) مشخص است. زبان هایی که statically typed هستند معمولا سرعت بیشتری دارند چرا که همه چیز قبل از اجرا مشخص است و نیازی به بررسی نوع متغیرها در زمان اجرا نداریم. این مسئله در کنار کامپایل شدن ++C (به جای تفسیر شدن آن) بدین معنی است که سرعت ++C بسیار بالا است و یکی از سریع ترین زبان های دنیا محسوب می شود.

سطح کنترل

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

نگهداری و مدیریت کدها

نوشتن یک برنامه در زبان ++C به معنی نوشتن کدهای بسیار زیاد است! یادتان باشد که ++C یک زبان سطح پایین است بنابراین برای نوشتن یک قابلیت خاص در آن نیاز به نوشتن کدهای زیادی داریم. معمولا اکثر پروژه های بزرگ ++C نیاز به یک تیم توسعه ی کامل دارد تا بتوانند پروژه را تمام کنند. با این حساب از نظر مالی و زمانی، ++C قابلیت maintainability (مدیریت ساده کدها) را ندارد و مدیریت کدها در آن سخت است. از طرف دیگر توسعه دهندگان تازه کار یا توسعه دهندگانی با سطح دانش متوسط دائما خطاهای مختلفی را در ++C وارد می کنند بنابراین تصحیح این خطاها نیز زمان بر خواهد بود.

جامعه توسعه دهندگان ++C

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

زبان ++C با ۶۹ هزار دنبال کننده، ششمین زبان در StackOverflow است. همچنین نرخ پاسخ به سوالات ++C در StackOverflow حدود ۸۳.۶ درصد است که خودش بالاترین نرخ پاسخ به سوالات بین تمام زبان های برنامه نویسی را دارد. همچنین ++C ششمین زبان از نظر استفاده از گیت هاب است که به تنهایی نشان دهنده استفاده بسیار بالای این زبان است.

بازار کار ++C

میانگین درآمد برنامه نویسان ++C
 میانگین درآمد برنامه نویسان ++C

درآمد برنامه نویسان ++C در خارج از ایران معمولا بین ۴۵ تا ۱۲۵ هزار دلار در سال است (متوسط ۹۰ هزار دلار در سال) که درآمد خوبی تلقی می شود. البته نمی توان درباره ی بازار ایران با قطعیت نظر داد چرا که عوامل متغیر در آن بسیار زیاد است (سطح تجربه، شهر و محل کار، شرکت استخدامی و غیره) اما معمولا با نگاهی به بازار کار این زبان در ایران می توان گفت که توسعه دهندگان با تجربه ++C در ایران کمتر هستند بنابراین دستمزدها بین ۶ تا ۱۴ میلیون تومان در ماه است اما توجه داشته باشید که این اعداد به شدت تغییر پذیر هستند.

آینده ++C

همانطور که در طول این مقاله دیدید، سابقه طولانی ++C و پایه محکم آن در برنامه های مشهور بدین معنی است که ++C حالا حالاها از میان نخواهد رفت. همچنین طبق برخی از گزارشات از سال ۲۰۱۵ نرخ علاقه به یادگیری این زبان 22.7 درصد افزایش پیدا کرده است. این افزایش تا حدی مربوط به معرفی هدست های VR (واقعیت مجازی) و بازی های مربوط به آن است.