• لیست زبان های برنامه نویسی زبان های برنامه نویسی سطح پایین و بالا

    برنامه نویس ویلیام دبلیو ولد می گوید

    در شش ماه گذشته، من روی یک زبان برنامه نویسی (PL) به نام Pinecone کار کرده ام. من نمی‌خواهم آن را کامل بخوانم، اما در حال حاضر قابل استفاده است - شامل عناصر کافی برای این کار است، مانند متغیرها، توابع، و ساختارهای داده تعریف‌شده توسط کاربر. اگر می خواهید قبل از خواندن آن را بررسی کنید، پیشنهاد می کنم از صفحه رسمی و مخزن GitHub دیدن کنید.

    معرفی

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

    با این حال، من یک زبان کاملاً جدید نوشتم. و او کار می کند. باید کاری را درست انجام دهم.

    در این مقاله، من سعی خواهم کرد نشان دهم که چگونه Pinecone (و سایر زبان های برنامه نویسی) کد منبع را به چیزی تبدیل می کند که بسیاری آن را جادو می دانند. من همچنین بر موقعیت هایی تمرکز خواهم کرد که در آن ها مجبور به سازش شدم و توضیح خواهم داد که چرا تصمیماتی را گرفته ام.

    متن دقیقاً ادعا نمی کند که راهنمای کاملی برای ایجاد یک زبان برنامه نویسی است، اما برای افراد کنجکاو نقطه شروع خوبی خواهد بود.

    اولین قدم ها

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

    تألیف یا تفسیر؟

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

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

    من می خواستم یک زبان ساده و در عین حال کاربردی ایجاد کنم، که نادر است، بنابراین از همان ابتدا تصمیم گرفتم Pinecone را قابل کامپایل کنم. با این وجود، Pinecone یک مترجم نیز دارد - در ابتدا، راه اندازی تنها با کمک آن امکان پذیر بود، بعداً دلیل آن را توضیح خواهم داد.

    توجه داشته باشید. ترجمه به هر حال، ما یک مرور کلی داریم - این یک تمرین عالی برای کسانی است که در حال یادگیری پایتون هستند.

    انتخاب زبان

    نوعی متا استپ: خود زبان برنامه نویسی برنامه ای است که باید به زبانی نوشته شود. من C++ را به دلیل عملکرد آن، مجموعه ویژگی های غنی آن و صرفاً به این دلیل که آن را دوست دارم، انتخاب کردم.

    اما به طور کلی می توان چنین توصیه هایی کرد:

    • PL را تفسیر کرد بسیار توصیه شدهنوشتندر یک PL کامپایل شده (C، C++، Swift). در غیر این صورت، جریمه عملکرد همانطور که مترجم متا مترجم شما را تفسیر می کند، گلوله برفی خواهد داشت.
    • PL را گردآوری کرد می توانید بنویسیددر یک PL تفسیر شده (Python، JS). زمان کامپایل افزایش می یابد، اما زمان اجرای برنامه افزایش نمی یابد.

    طراحی معماری

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

    تحلیلگر واژگانی / lexer

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

    اولین مرحله در اکثر PL، تحلیل واژگانی است. به عبارت ساده، این تقسیم متن به نشانه ها است، یعنی واحدهای زبان: متغیرها، نام توابع (شناسه)، عملگرها، اعداد. بنابراین، با ارائه یک رشته با کد منبع به lexer، لیستی از تمام نشانه هایی که در آن به عنوان یک خروجی وجود دارد، دریافت می کنیم.

    ارجاع به کد منبع دیگر در مراحل بعدی رخ نخواهد داد، بنابراین lexer باید تمام اطلاعات لازم را برای آنها ارائه دهد.

    فلکس

    هنگام ایجاد یک زبان، اولین کاری که انجام دادم نوشتن lexer بود. بعدها، ابزارهایی را مطالعه کردم که می‌توانستند تحلیل واژگانی را آسان‌تر کنند و تعداد اشکالات را کاهش دهند.

    یکی از اصلی‌ترین ابزارهای این چنینی Flex، یک تولیدکننده تحلیلگر واژگانی است. یک فایل با توضیحات گرامر زبان به عنوان ورودی می گیرد و سپس یک برنامه C ایجاد می کند که به نوبه خود رشته را تجزیه می کند و نتیجه دلخواه را ایجاد می کند.

    تصمیم من

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

    تجزیه کننده / تجزیه کننده

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

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

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

    در این مرحله، من همچنین به استفاده از یک کتابخانه شخص ثالث فکر می‌کردم، با در نظر گرفتن Bison برای تولید تجزیه‌کننده. از بسیاری جهات شبیه Flex است - فایل کاربر با قوانین نحوی با استفاده از یک برنامه C ساخته شده است. اما دوباره، من ابزارهای اتوماسیون را رها کردم.

    مزایای برنامه های سفارشی

    با lexer، تصمیم من برای نوشتن و استفاده از کد خودم (حدود 200 خط) کاملاً واضح بود: من عاشق پازل هستم، و این یکی نیز نسبتاً بی اهمیت است. تجزیه کننده داستان متفاوتی است: اکنون طول کد آن 750 خط است و این سومین تلاش است (دو مورد اول فقط افتضاح بودند).

    با این حال تصمیم گرفتم خودم تجزیه کننده را بسازم. در اینجا دلایل اصلی ذکر شده است:

    • به حداقل رساندن تغییر زمینه؛
    • ساده سازی مونتاژ؛
    • تمایل به انجام کارها به تنهایی

    من با بیانیه والتر برایت (خالق زبان D) در یکی از مقالاتش به مصلحت راه حل متقاعد شدم:

    من استفاده از ژنراتورهای lexer و parser و همچنین سایر کامپایلرهای به اصطلاح "کامپایلر" را توصیه نمی کنم. نوشتن یک lexer و تجزیه کننده زمان زیادی نمی برد و استفاده از یک ژنراتور شما را محکم به آن در کارهای آینده گره می زند (که هنگام پورت یک کامپایلر به یک پلت فرم جدید مهم است). علاوه بر این، ژنراتورها برای صدور پیام های خطای نامربوط قابل توجه هستند.

    نمودار معنایی انتزاعی

    حرکت از درخت نحو به گراف معنایی

    در این بخش، ساختاری را پیاده‌سازی کردم که اساساً نزدیک‌ترین ساختار به «نمایش متوسط» (نمایندگی متوسط) در LLVM است. تفاوت کوچک اما مهمی بین درخت نحو انتزاعی (AST) و نمودار معنایی انتزاعی (ASG) وجود دارد.

    ASG در مقابل ASD

    به طور کلی، یک گراف معنایی یک درخت نحوی با زمینه است. یعنی حاوی اطلاعاتی مانند نوع تابعی که برمی‌گرداند یا همان متغیر در کجا استفاده می‌شود. از آنجایی که گراف باید تمام این زمینه را بشناسد و به خاطر بسپارد، کدی که آن را تولید می کند به پشتیبانی در قالب جداول توضیحی مختلف نیاز دارد.

    راه اندازی

    هنگامی که نمودار در جای خود قرار گرفت، اجرای برنامه به یک کار نسبتاً ساده تبدیل می شود. هر گره شامل اجرای یک تابع است که مقداری ورودی می گیرد، کاری را که برای انجام آن برنامه ریزی شده است انجام می دهد (از جمله احتمالاً فراخوانی توابع کمکی) و نتیجه را برمی گرداند. این مترجم در عمل است.

    گزینه های تالیف

    ممکن است بپرسید که اگر من در اصل Pinecone را به عنوان یک زبان کامپایل شده تعریف کرده ام، مترجم از کجا آمده است. نکته این است که تدوین بسیار پیچیده تر از تفسیر است - قبلاً اشاره کردم که در این مرحله با مشکلاتی مواجه شدم.

    کامپایلر خود را بنویسید

    در ابتدا این ایده را دوست داشتم - من دوست دارم خودم کارها را انجام دهم، علاوه بر این، مدتهاست که می خواستم زبان اسمبلی را یاد بگیرم. اما ایجاد یک کامپایلر کراس پلتفرم از ابتدا دشوارتر از نوشتن کد ماشین برای هر عنصر زبان است. به نظر من این ایده کاملاً عملی نیست و ارزش منابع صرف شده را ندارد.

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

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

    برنامه نويسي؟

    قبل از جداسازی زبان های برنامه نویسی اصلی و توصیف آنها، لازم است خود مفهوم را جدا کنید.

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

    زبان های برنامه نویسی در سطوح پایین و بالا را اختصاص دهید. تا به امروز، دومی عمدتا استفاده می شود.

    زبان های برنامه نویسی سطح بالا و پایین

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

    کار با هر یک از زبان ها مستلزم صلاحیت های بالا، درک است، علاوه بر این، نوشتن برنامه ها زمان زیادی می برد. در عین حال، با کمک برنامه های کم، می توانید برنامه های کوچک، اما در عین حال موثر ایجاد کنید. به برنامه نویسان تازه کار توصیه نمی شود که آشنایی خود را با آنها آغاز کنند.

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

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

    محبوب ترین زبان های برنامه نویسی

    محبوب ترین زبان های برنامه نویسی امروز کدامند؟

    در سال‌های اخیر زبان‌های جاوا، سی، سی پلاس پلاس، پایتون، سی شارپ که جزو برترین زبان‌های برنامه‌نویسی هستند، محبوب‌ترین و پرطرفدارترین زبان‌ها محسوب می‌شوند. آنها اساس برنامه های مدرن را تشکیل می دهند و هنگام نوشتن هر پروژه بزرگ مورد استفاده قرار می گیرند. بیش از 70 درصد برنامه نویسان با این زبان ها کار می کنند. پیش بینی می شود که در 10 سال آینده آنها همچنان در همان تقاضایی که امروز هستند خواهند بود.

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

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

    C، C++ و C#

    بیایید با خانواده C شروع کنیم.

    زبان C در دهه 70 گردآوری و توسعه یافته است. بر اساس آن، زبان هایی مانند C ++ و C #، جاوا متعاقبا ایجاد شد.

    C++ یک زبان قدرتمند است که برای ایجاد برنامه های کاربردی و درایورهای سطح پایین و برنامه ها و بسته های نرم افزاری بسیار چشمگیر طراحی شده است.

    سی شارپ یک زبان شی گرا مدرن است که مبتنی بر C و C++ است. دارای سیستم نوع ایمن. یکی از ویژگی های متمایز آن این است که بسیار شبیه به زبان برنامه نویسی محبوب دیگر - جاوا است.

    یکی از معایب زبان این است که به شما اجازه می دهد فقط برای سیستم عامل ویندوز برنامه بسازید و علاوه بر آن بسیار سنگین است، یعنی برنامه های نوشته شده با آن فضای زیادی را اشغال می کنند.

    می توان اشاره کرد که از بسیاری جهات C، C++ و C# زبان های برنامه نویسی برای مبتدیان هستند. با تسلط بر آنها، می توانید مطمئن باشید که یادگیری یک زبان جدید حداقل زمان می برد.

    می توانید با آنها آشنا شوید و اولین برنامه های خود را در محیطی خاص Borland یا Visual Studio بنویسید.

    جاوا اسکریپت

    جاوا اسکریپت یک زبان با قابلیت های شی گرا است. در سال 1996 توسعه یافته و امروزه یکی از محبوب ترین هاست. این زبان عمدتاً در برنامه نویسی وب استفاده می شود و در مرورگرهای اصلی مانند اینترنت اکسپلورر، فایرفاکس، اپرا کار می کند. همچنین ارتباط نزدیکی با HTML و CSS دارد، بنابراین قبل از شروع یادگیری آن، باید بر اصول اولیه این زبان ها مسلط باشید.

    شایان ذکر است که با وجود شباهت در نام، جاوا اسکریپت و جاوا دو زبان کاملا متفاوت هستند.

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

    جاوا

    با توجه به محبوب ترین زبان های برنامه نویسی، نمی توان از جاوا نام برد. این یک زبان برنامه نویسی شی گرا است که از سال 1995 مورد استفاده قرار گرفته است. این بسیار سبک وزن است و بر روی هر ماشین جاوا با هر معماری اجرا می شود. برای توسعه برنامه های کاربردی برای اندروید و iOS استفاده می شود.

    پایتون

    پایتون - وظیفه اصلی آن افزایش بهره وری توسعه دهنده، خوانایی بیشتر کد است. دارای یک لیست کوچک از ساختارهای نحوی و یک کتابخانه استاندارد بسیار چشمگیر از توابع است. توسعه زبان از دهه 90 آغاز شد و تا امروز ادامه دارد. برای توسعه پروژه های مختلف، برنامه های افزودنی و یکپارچه سازی برنامه های کاربردی قبلا توسعه یافته استفاده می شود.

    اصول اولیه زبان پایتون را می توان هم به عنوان شروع برنامه نویسی و هم به عنوان زبان اضافی دوم یاد گرفت.

    یاقوت سرخ

    Ruby یک زبان برنامه نویسی سطح بالا است که شامل بخش هایی از Perl، Smalltalk، Eiffel، Ada و Lisp است. از سال 1995 استفاده شده است. از مزایای اصلی این زبان می توان به سادگی و انعطاف پذیری آن اشاره کرد. هم برای نوشتن برنامه های کوچک و هم برای توسعه برنامه های جدی مناسب است.

    زبان PHP

    PHP یک زبان برنامه نویسی نسبتاً محبوب است که برای ساخت برنامه های وب طراحی شده است. اغلب اوقات، در لیست "زبان های برنامه نویسی برای مبتدیان" نیز گنجانده شده است و برای مطالعه توصیه می شود.

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

    نتیجه

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

    زبان برنامه نویسی

    زبان برنامه نویسی- یک سیستم علامت رسمی طراحی شده برای ضبط برنامه های کامپیوتری. یک زبان برنامه نویسی مجموعه ای از قواعد واژگانی، نحوی و معنایی را تعریف می کند که ظاهر برنامه و اقداماتی را که مجری (رایانه) تحت کنترل خود انجام می دهد، تعریف می کند.

    • تابع:یک زبان برنامه نویسی برای نوشتن برنامه های رایانه ای طراحی شده است که برای انتقال دستورالعمل ها به رایانه برای انجام یک فرآیند محاسباتی خاص و سازماندهی کنترل دستگاه های جداگانه استفاده می شود.
    • وظیفه:تفاوت یک زبان برنامه نویسی با زبان های طبیعی این است که برای انتقال دستورات و داده ها از یک شخص به رایانه طراحی شده است، در حالی که زبان های طبیعی برای برقراری ارتباط بین افراد استفاده می شود. شما می توانید تعریف "زبان های برنامه نویسی" را تعمیم دهید - این راهی برای انتقال دستورات، دستورات، یک راهنمای روشن برای عمل است. در حالی که زبان های انسانی نیز در خدمت تبادل اطلاعات هستند.
    • اجرا:یک زبان برنامه نویسی ممکن است از ساختارهای ویژه برای تعریف و دستکاری ساختارهای داده و کنترل فرآیند محاسبات استفاده کند.

    استاندارد سازی زبان های برنامه نویسی

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

    استانداردهای بین المللی برای بسیاری از زبان های برنامه نویسی پرکاربرد ایجاد شده است. سازمان های ویژه به طور منظم مشخصات و تعاریف رسمی زبان مربوطه را به روز کرده و منتشر می کنند. در چارچوب چنین کمیته هایی، توسعه و نوسازی زبان های برنامه نویسی ادامه دارد و مسائل مربوط به گسترش یا پشتیبانی از ساختارهای زبانی موجود و جدید حل می شود.

    انواع داده ها

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

    یک سیستم خاص که توسط آن داده ها در یک برنامه سازماندهی می شوند نوع سیستمزبان برنامه نویسی؛ توسعه و مطالعه سیستم های نوع به عنوان نظریه نوع شناخته می شود. زبان ها را می توان به عنوان سیستم طبقه بندی کرد با تایپ استاتیکو زبان ها از تایپ پویا.

    زبان‌های تایپ استاتیک را می‌توان به زبان‌هایی با اعلامیه اجباری، که در آن هر اعلان متغیر و تابع دارای یک اعلان نوع اجباری است و زبان هایی با انواع استنباط شده. گاهی اوقات زبان هایی که به صورت پویا تایپ می شوند نامیده می شوند نهفته تایپ شده.

    ساختارهای داده

    سیستم‌های تایپ در زبان‌های سطح بالا امکان تعریف انواع پیچیده و ترکیبی، به اصطلاح ساختارهای داده را می‌دهند. به طور معمول، انواع داده های ساختاری به عنوان حاصلضرب دکارتی از انواع پایه (اتمی) و انواع مرکب از قبل تعریف شده تشکیل می شوند.

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

    معناشناسی زبان های برنامه نویسی

    چندین رویکرد برای تعریف معنایی زبان های برنامه نویسی وجود دارد.

    گسترده ترین انواع از سه مورد زیر: عملیاتی، اشتقاقی (اکسیوماتیک) و معنایی (ریاضی).

    • هنگام توصیف معناشناسی در چارچوب عملیاتیبا رویکرد، اجرای سازه های زبان برنامه نویسی معمولاً با کمک یک کامپیوتر خیالی (انتزاعی) تفسیر می شود.
    • مشتقمعناشناسی پیامدهای اجرای سازه های زبان را با استفاده از زبان منطق و تنظیم پیش و پس شرط ها توصیف می کند.
    • دلالتیمعناشناسی با مفاهیم معمولی ریاضیات عمل می کند - مجموعه ها، مطابقت ها، و همچنین قضاوت ها، گزاره ها و غیره.

    پارادایم برنامه نویسی

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

    علیرغم این واقعیت که بیشتر زبان ها بر روی مدل ضروری محاسبات ارائه شده توسط معماری کامپیوتر فون نویمان تمرکز دارند، رویکردهای دیگری نیز وجود دارد. می توان به زبان هایی با مدل محاسبات پشته ای (فورث، فاکتور، پست اسکریپت و ...) و همچنین برنامه نویسی تابعی (Lisp، Haskell و غیره) و منطقی (Prolog) و زبان REFAL بر اساس مدل محاسباتی اشاره کرد. معرفی شده توسط ریاضیدان شوروی A A. Markov Jr.

    در حال حاضر، زبان های برنامه نویسی ویژه دامنه، اعلامی و بصری نیز به طور فعال در حال توسعه هستند.

    راه های پیاده سازی زبان ها

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

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

    اگر برنامه به زبان تفسیر شده نوشته شده باشد، مفسر مستقیماً متن مبدأ را بدون ترجمه قبلی اجرا می کند (تفسیر می کند). برنامه به زبان اصلی خود باقی می ماند و بدون مترجم قابل اجرا نیست. پردازنده یک کامپیوتر را در این رابطه می توان مفسر کد ماشین نامید.

    تقسیم به زبان های کامپایل و تفسیر شده مشروط است. بنابراین، برای هر زبان کامپایل شده سنتی، مانند پاسکال، می توانید یک مفسر بنویسید. علاوه بر این، اغلب مفسرهای مدرن «خالص» ساختارهای زبان را مستقیماً اجرا نمی‌کنند، بلکه آن‌ها را در برخی نمایش‌های میانی سطح بالا (مثلاً با عدم ارجاع متغیر و بسط کلان) جمع‌آوری می‌کنند.

    برای هر زبان تفسیر شده، می توانید یک کامپایلر ایجاد کنید - به عنوان مثال، زبان Lisp که در ابتدا تفسیر شده است، می تواند بدون هیچ محدودیتی کامپایل شود. کد تولید شده در زمان اجرا نیز می تواند به صورت پویا در زمان اجرا کامپایل شود.

    به عنوان یک قاعده، برنامه های کامپایل شده سریعتر اجرا می شوند و نیازی به برنامه های اضافی برای اجرا ندارند، زیرا آنها قبلاً به زبان ماشین ترجمه شده اند. در عین حال، هر بار که متن برنامه تغییر می کند، نیاز به کامپایل مجدد دارد که روند توسعه را کند می کند. علاوه بر این، یک برنامه کامپایل شده فقط می تواند بر روی همان نوع کامپیوتر و معمولاً تحت سیستم عامل یکسانی اجرا شود که کامپایلر برای آن طراحی شده است. برای ایجاد یک فایل اجرایی برای نوع دیگری از ماشین، یک کامپایل جدید مورد نیاز است.

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

    با این حال، برنامه های تفسیر شده به طور قابل توجهی کندتر از برنامه های کامپایل شده اجرا می شوند و بدون برنامه مفسر نمی توانند اجرا شوند.

    این رویکرد به یک معنا به شما امکان می دهد از مزایای مفسر و کامپایلر استفاده کنید. لازم به ذکر است که زبان هایی هستند که هم مترجم دارند و هم کامپایلر (فورث).

    نمادهای مورد استفاده

    زبان های برنامه نویسی مدرن برای استفاده از ASCII، یعنی در دسترس بودن همه طراحی شده اند گرافیکیکاراکترهای اسکی شرط لازم و کافی برای نوشتن هر ساختار زبانی است. مدیراننویسه‌های ASCII به میزان محدودی استفاده می‌شوند: فقط CR بازگشتی کالسکه، LF تغذیه خط، و زبانه افقی HT (گاهی اوقات زبانه عمودی VT و صفحه بعدی FF) مجاز هستند.

    زبان های اولیه که در دوره کاراکترهای 6 بیتی پدیدار شدند، از مجموعه محدودتری استفاده می کردند. به عنوان مثال، الفبای Fortran دارای 49 کاراکتر (شامل فاصله): A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 = + - * / () . ، $" :

    یک استثنای قابل توجه زبان APL است که از تعداد زیادی کاراکتر خاص استفاده می کند.

    استفاده از کاراکترهای غیرASCII (مانند کاراکترهای KOI8-R یا کاراکترهای Unicode) وابسته به پیاده سازی است: گاهی اوقات آنها فقط در نظرات و ثابت های کاراکتر/رشته مجاز هستند و گاهی اوقات در شناسه ها نیز مجاز هستند. در اتحاد جماهیر شوروی، زبان هایی وجود داشت که در آن همه کلمات کلیدی با حروف روسی نوشته می شد، اما چنین زبان هایی محبوبیت زیادی به دست نیاوردند (به استثنای زبان برنامه نویسی داخلی 1C: Enterprise).

    گسترش مجموعه کاراکترهای مورد استفاده به دلیل این واقعیت است که بسیاری از پروژه های توسعه نرم افزار بین المللی هستند. کار با کدی که نام برخی از متغیرها با حروف روسی، برخی دیگر به عربی و برخی دیگر با حروف چینی نوشته شده باشد، بسیار دشوار است. در همان زمان، زبان های برنامه نویسی نسل جدید (دلفی 2006، جاوا) از یونیکد برای کار با داده های متنی پشتیبانی می کنند.

    کلاس های زبان برنامه نویسی

    همچنین ببینید

    یادداشت

    ادبیات

    • هال آبلسون، جرالد جی ساسمن. ساختار و تفسیر برنامه های کامپیوتری
    • رابرت دبلیو سبستا.مفاهیم اساسی زبان های برنامه نویسی \u003d مفاهیم زبان های برنامه نویسی / Per. از انگلیسی. - ویرایش پنجم - M.: ویلیامز، 2001. - 672 ص. - 5000 نسخه. - ISBN 5-8459-0192-8 (روسی)، ISBN 0-201-75295-6 (انگلیسی)
    • Wolfenhagen V. E.طراحی زبان های برنامه نویسی روش های توصیف - M .: Center YurInfoR, 2001. - 276 p. - شابک 5-89158-079-9
    • پارونژانوف V. D.چگونه می توان کار ذهن را بهبود بخشید. الگوریتم های بدون برنامه نویس - بسیار ساده است! - م .: دلو، 2001. - 360 ص. - شابک 5-7749-0211-0
    • F. Biancuzzi, S. Worden.پیشگامان برنامه نویسی گفتگو با سازندگان محبوب ترین زبان های برنامه نویسی. - سنت پترزبورگ. : Symbol-Plus, 2010. - 608 p. - شابک 978-5-93286-170-7

    پیوندها

    • فهرست زبان (انگلیسی) - بیش از 2500 زبان با یک توضیح مختصر
    • Computer Languages ​​History (انگلیسی) - تاریخچه زبان های برنامه نویسی (از 1954 تا مه 2004) (شامل نمودار به روز رسانی منظم)
    • مثال ها (انگلیسی) - نمونه های برنامه نویسی به 162 زبان
    • محبوبیت زبان برنامه نویسی (انگلیسی) - 2004 بررسی محبوبیت زبان برنامه نویسی
    • 10 زبان برنامه نویسی برای یادگیری (2006)
    • فهرست جامعه برنامه نویسی (انگلیسی) - رتبه بندی به طور مرتب به روز شده محبوبیت زبان های برنامه نویسی
    • معیارهای ضربات زبان کامپیوتری (انگلیسی) - مقایسه زبان های برنامه نویسی از نظر کارایی
    • زبان های برنامه نویسی که مورد علاقه هستند (انگلیسی) - مقایسه زبان های برنامه نویسی با "عشق" و "نفرت" نسبت به آنها

    بنیاد ویکی مدیا 2010 .

    زالینا 13 ژانویه 2016 در 03:42 ب.ظ

    زبان های برنامه نویسی مختلف و حوزه های کاربردی آنها. سخنرانی در Yandex

    • وبلاگ شرکت Yandex،
    • توسعه وب سایت،
    • برنامه نويسي،
    • برنامه نویسی صنعتی

    ما تصمیم گرفتیم اولین پست امسال خود را به یک موضوع بسیار اساسی اختصاص دهیم، یک سخنرانی در مورد آن در Small ShAD ارائه شد. دانش آموزان دبیرستانی که به فناوری علاقه مند هستند در آن شرکت می کنند، از این رو ویژگی ارائه - این سخنرانی به ویژه برای کسانی که تازه شروع به برنامه ریزی کرده اند و به این فکر می کنند که کدام جهت را توسعه دهند جالب خواهد بود. برای آنها، Yandex یک دوره آموزشی "مقدمه ای بر برنامه نویسی (C++) دارد، که می تواند در پلت فرم Stepic.org برگزار شود.

    مدرس میخائیل گوستوکاشین - متصدی برنامه های دانشگاهی در Yandex، مدیر مرکز المپیادهای دانشجویی دانشکده علوم کامپیوتر HSE. میخائیل ده ها برنده و برنده جوایز المپیادهای برنامه نویسی همه روسیه را آماده کرد.

    این سخنرانی در مورد زبان های برنامه نویسی، تفاوت آنها، نحوه ظاهر شدن آنها و کدام یک بهتر و کدام یک بدتر می گوید. در ابتدا، ما کمی در مورد تاریخچه زبان ها صحبت خواهیم کرد - چگونه آنها ظاهر شدند، چگونه مردم برنامه نویسی را شروع کردند، چگونه همه چیز توسعه یافت، چه چیزی اکنون اتفاق می افتد. بخش دوم به این موضوع می پردازد که کدام زبان برای چه وظایفی مناسب است، چگونه "زبان مورد علاقه خود را انتخاب کنید و از زندگی لذت ببرید." مدرس همچنین کمی در مورد چگونگی یادگیری همه اینها و سپس به دست آوردن شغل صحبت خواهد کرد.

    مثل همیشه، زیر برش متن مفصلی از سخنرانی وجود دارد تا بتوانید محتوای آن را مرور کنید.

    تاریخچه زبان های برنامه نویسی

    بیایید از همان ابتدا شروع کنیم. در ابتدا کامپیوترها حتی صفحه کلید نداشتند! یعنی همه چیز خیلی بد بود - آنها نه صفحه کلید داشتند و نه صفحه نمایش، آنها کارتهای پانچ داشتند (اینها چیزهای کوچکی هستند که سوراخ دارند یا بدون سوراخ). بر این اساس، یا پین ها به آنجا رانده می شدند، یا در آنجا با نور می درخشیدند. اگر سوراخی وجود داشته باشد (یا برعکس نباشد) - به معنای صفر یا یک است. و برنامه ها در آن زمان با استفاده از کدهای ماشین نوشته می شدند - هر عملیات در رایانه (جمع، تفریق، برخی عملیات پیچیده تر) نوعی کد ماشین داشت. مردم خودشان این کد را از بشقاب انتخاب کردند، انواع آدرس‌ها را در حافظه، همه آن را با دستان خود حذف کردند و به خواننده فرو کردند - و همه اینها در نظر گرفته شد. البته، احتمالاً در آن زمان کار یک برنامه نویس چندان جالب نبود - ایجاد سوراخ - و البته با پیشرفت علم و فناوری، آنها شروع به ارائه انواع چیزهای "جالب" بیشتری کردند. به عنوان مثال اسمبلر (Assembler) که قبلاً زندگی را کمی آسان کرده است.

    خوب، او چگونه زندگی را آسان کرد؟ به جای اینکه به خاطر بسپاریم که نوعی کد "جادویی" برای دستور وجود دارد، از انواع و اقسام کلمات مشابه انگلیسی "human" استفاده شد - برخی افزودن یا mov - خوب، و سپس ثبات ها یا مناطق حافظه لیست شدند، متغیرهایی که با آنها انجام عملیات اما واضح است که این، به طور کلی، به تلاش ذهنی کافی نیز نیاز دارد تا در نظر داشته باشیم که در کدام ثبت چه دروغ هایی داریم، متغیرها کجا هستند و به طور کلی چه اتفاقی می افتد. چرا این اتفاق افتاد؟ زیرا کامپیوترها "احمقانه" بودند و نمی توانستند چیزی "هوشمندتر" را درک کنند. در واقع، مونتاژ کد ماشین از اسمبلر نیز به زمان و حافظه نیاز دارد (البته در آن زمان به اندازه کافی نبود).

    به تدریج مشخص شد که توسعه چنین برنامه های پیچیده ای بسیار دشوار است. بهره وری برنامه نویس در این دستورات به شدت پایین بود - یعنی او چندین خط در روز می نوشت (معنادار) و هر خط کار خاصی انجام نمی داد - چند عملیات ساده حسابی. و مردم می خواستند زبان ها را بسیار شبیه به زبان انسانی، به ویژه انگلیسی، کنند تا نوشتن برنامه ها آسان تر و راحت تر باشد. و ما می رویم!

    زبان های قدیمی و مرده

    یکی از اولین زبان ها فرترن بود. به هر حال، روی کارت های پانچ نیز شکسته شد - کارت های پانچ مخصوصی برای حذف برنامه های فرترن وجود داشت. اما اگر اکنون این Fortran را بگیرید - به نظر من، حتی بین 50-60 سال است. ظاهر شد - و سعی کنید چیزی روی آن بنویسید، برای شما بسیار ناخوشایند خواهد بود، من به شما تضمین می کنم! فرترن مدرن هنوز زنده است، اما در حال حاضر کاملاً با آنچه قبلا بود متفاوت است.

    زبان های دیگر - اکنون من یک چیز را می نویسم، که احتمالاً در مورد آن شنیده اید، اما فقط در همه رویدادهایی که در مورد تاریخ برنامه نویسی صحبت می کنند - این COBOL است. این زبان برای نوشتن برنامه های تجاری بود. برنامه های کاربردی تجاری چیست؟ بعضی تراکنش ها در بانک ها، یک چیز دیگر، همه این ها در کوبول نوشته شده بود. البته ما خیلی محبوب نیستیم. فکر می کنم به سختی یک برنامه نویس Cobol را در مسکو پیدا کنید. و در جایی نه در مسکو - با دشواری حتی بیشتر. اما در کمال تعجب، حتی 10 سال پیش، بیش از نیمی از کدهای نوشته شده توسط بشر در Cobol نوشته شده بود. و تاکنون بخش قابل توجهی از تمام تراکنش های بانکی به کمک برنامه های نوشته شده روی آن (COBOL) انجام می شود و مردم همچنان چیزی روی آن می نویسند.

    همچنین یک زبان "خنده دار" وجود دارد که Algol نام داشت (نسخه 68 که سال ایجاد آن را مشخص می کند). این یک زبان الگوریتمی است. به طور کلی، آنها یک چیزی را در آنجا می دانستند، اما اکنون ما خیلی علاقه ای نداریم که آنها چه کاری انجام دهند. و در این مورد، گشت و گذار ما به زبان های باستانی و نسبتاً بی استفاده می تواند تکمیل شود و می توانیم به آنچه هنوز زنده است (و به طور فعال زندگی می کند) حرکت کنیم.

    زبان های قدیمی اما زنده

    Algol در اروپا اختراع شد و Fortran عمدتاً در ایالات متحده استفاده شد - تفاوت زیادی وجود ندارد. چه روندی قابل توجه است؟ در ابتدا همه چیز سخت بود و برای نوشتن باید تقریباً یک مهندس بود، یک مهندس برق، تا بفهمید کدام مخاطبین بسته شده اند و چیز دیگری برای برنامه نویسی. بعد هم باید با برگ ها نشست و خاطره شمرد و مراقبش بود. و به تدریج همه چیز برای برنامه نویس ساده تر، ساده تر، ساده تر و حتی آسان تر شد - تا آنجا که ممکن است برای یک فرد کمتر فکر کند، تا آنجا که ممکن است به طور خودکار انجام دهد. در اواخر این دوره (استاد به الگول و کوبول اشاره می کند)، زبان هایی ظاهر می شوند که به تعبیری تا به امروز «بقا» کرده اند.

    پایه ای. شاید برخی از مردم هنوز چیزی روی آن بنویسند، حداقل من دیدم که در برخی موسسات آنها در QBasic تدریس می کنند - چنین پنجره آبی که در آن "1989" نوشته شده است. در کل زندگی های "با قدرت و اصلی"! این به عنوان یک زبان برای غیر برنامه نویسان تصور شد. در آن زمان برنامه نویسی یک حرفه بسیار تخصصی بود. و در اینجا آنها به شما می گویند: "در اینجا ما یک زبان بیسیک جالب داریم و هر فرد منطقی برنامه ای را در آن می گیرد و می نویسد - آسان است." باز هم، بیسیک و بیسیک مدرن تفاوت بزرگی دارند. همه این خطوط تا 10 شماره گذاری شده اند، انواع GOTO ها و وحشت های دیگر - آنها دیگر هیچ ربطی به بیسیک مدرن ندارند، و حتی ارتباط کمی با بیسیک سال 89 دارند.

    یکی دیگر از داستان های خنده دار زبان پاسکال است که به طور گسترده در محافل دانشگاهی، عمدتا در روسیه و کشورهای اتحاد جماهیر شوروی سابق شناخته شده است. این زبان به طور شگفت انگیزی به عنوان یک زبان آموزشی مورد استفاده قرار گرفته و همچنان ادامه دارد. در سایر نقاط جهان، کمتر رایج است، اما در عین حال زنده و سالم است. چنین فردی Wirth وجود دارد - در اینجا او یک دانشمند، یک نظریه پرداز است. او در بحث الگول شرکت کرد، آنچه اتفاق افتاد را دوست نداشت و با زبان خودش - پاسکال - آمد. و سپس شرکت Borland (و قبل از آن، بسیاری از شرکت های دیگر - به ویژه اپل درگیر بود) آن را گرفت و همه چیز را خراب کرد. او یک نظریه زیبا داشت، باریک - "همه چیز خوب خواهد شد" - و آنها آن را گرفتند و با آنچه مردم برای کار نیاز دارند پر کردند. خوب، آنطور که او می خواست، خوب نشد.

    و در نهایت، . C توسط مهندسان اختراع شد. اگر پاسکال توسط یک دانشمند اختراع شد، پس C توسط کرنیگان و ریچی اختراع شد، آنها به عنوان مهندس در بل کار می کردند. چگونه اتفاق افتاد؟ در آن زمان، در این زبان ها (استاد به Fortran، COBOL، Algol اشاره می کند) نوشتن چیزی سیستمی غیرممکن بود. "سیستمیک" چیست؟ به عنوان مثال، یک سیستم عامل، برخی از درایورها، چیز دیگری. این زبان ها برای محاسبات ریاضی، برای محاسبات تجاری، برای همه چیز در نظر گرفته شده بودند. و بقیه موارد در اسمبلر نوشته شده بود. برخی از زبان ها بودند، آنها اکنون مرده اند، یعنی زبان C بلافاصله از اسمبلر ظاهر نشد، بلکه از طریق برخی چیزهای میانی ظاهر شد.

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

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

    بر این اساس، این زبان اصلی در یونیکس بود، سیستم عاملی که در آن زمان حتی محبوب‌تر از اکنون بود. و در حدود دهه 80، وضعیت چیزی شبیه به این بود (استاد به زبان های Basic، C و سایر زبان های ذکر شده نشان می دهد). بیایید فرض کنیم که همه اینها به آرامی با ما مرده است (استاد سخنران نام اسمبلر، فرترن و الگول را پاک می کند) ... و در دهه 80، رایانه ها کوچکتر، هوشمندتر، ارزان تر شدند و مردم برای این کار همه چیزهای عجیب و غریب را می خواستند. حتی بهتر زندگی کنید، تا لذت بیشتری زندگی کنید.

    زبان های دهه 80

    یکی از اولین چیزهای عجیب زبان C++ بود. زبان C تعداد زیادی کاستی دارد (خوب، فقط یک کاستی بزرگ) - شما می توانید همه چیز را در آن انجام دهید، از جمله شلیک به پای خود، شلیک به پای خود با داستان، در پای دیگر، تیراندازی با یک پا در داخل پای دیگر، به طور کلی - هر کاری که می خواهید انجام دهید. اما در عین حال، برخی از چیزهای معماری در آنجا بسیار دشوار می شوند - دوباره، مانند اسمبلر، باید پیگیری کنیم که کجا هستیم، چه و چه نوع حافظه ای را اختصاص داده ایم. این حافظه همیشه در جایی "جریان" است - یعنی ما اختصاص دادیم، فراموش کردیم حذف کنیم، چیز اشتباهی را حذف کردیم، به طور کلی از حافظه خارج شدیم - مشکلات زیادی را ایجاد کرد.

    C++ در ابتدا به عنوان مجموعه ای از برنامه های افزودنی برای زبان C ایجاد شد که توسعه را آسان تر می کند. در آن زمان برنامه نویسی شی گرا مد شد و مردم به این نتیجه رسیدند که همه چیز را می توان به صورت سلسله مراتبی توصیف کرد، یعنی شما یک توپ (انتزاعی) دارید، از آن یک توپ فوتبال، یک توپ والیبال، یک توپ انتزاعی دیگر به ارث می برید. بعد مد شد که "ما الان همه چیز را به شکل سلسله مراتبی می نویسیم و همه چیز خوب می شود ، زندگی بهتر می شود ، همه چیز خوب می شود و بس." C++ به یک معنا این رویکرد شی را پیاده سازی کرد - این اولین زبان برنامه نویسی شی گرا نبود، اما بسیار محبوب شد و انواع ویژگی ها در آن ظاهر شدند. در همان زمان، C ++ سازگاری تقریباً کامل (در آن زمان) با زبان C را حفظ کرد، برنامه ای که به زبان C نوشته شده بود در 99٪ موارد با موفقیت به عنوان C ++ کامپایل شد و حتی به همان روش کار می کرد. هدف از این کار انتقال آسان از C به C++ بود.

    علاوه بر رویکرد شی (در C++)، کتابخانه قالب استاندارد (STL) نسبتاً سریع ظاهر شد. من فکر می کنم که در مدرسه، کسانی که هنوز پاسکال را مطالعه می کردند متوجه شدند که شما اولاً هیچ مرتب سازی داخلی ندارید (در باستانی آبی بورلند پاسکال، اکنون در نسخه های مدرن موجود است) - یک نمونه (منبع) مرتب سازی وجود دارد. ، می توان آن را کپی و پیست کرد. اما اگر می‌خواهید اعداد صحیح را اینجا مرتب کنید، اعداد واقعی را در اینجا می‌خواهید، و در اینجا رشته‌هایی را می‌خواهید که با یکدیگر مقایسه شوند، باید سه مرتبه مختلف بنویسید که دقیقاً یک کار را انجام می‌دهند، فقط انواع داده‌های متفاوتی دارند. این خیلی خوب نیست و قالب هایی که بلافاصله در C ++ ظاهر نشدند، این مشکل را تا حد زیادی تسهیل کردند. یعنی شما یک برنامه انتزاعی داشتید که با موفقیت چیزی را مرتب کرد که قابل مقایسه با یکدیگر بود.

    زبان های اسکریپت از دهه 90

    اما زمان متوقف نشد، در دهه 80 اتفاقات جالب زیادی افتاد. اما در اواخر دهه 80 و 90، کامپیوترها آنقدر خوب شدند که انجام کارهای بسیار عجیب و بسیار ناکارآمد از قبل امکان پذیر بود. به طور خاص، اینها زبان های برنامه نویسی بودند که در کد ماشین کامپایل نشدند، بلکه تفسیر شدند. BASIC نیز زمانی تفسیر شد، اما این زبان های برنامه نویسی عمدتاً برای پردازش کلمه در نظر گرفته شده بودند - به عنوان مثال، Perl، Python (در آن زمان خیلی معروف نبود)، PHP، Ruby - اینها زبان های برنامه نویسی هستند. که در یک یا تا حدودی، آنها هنوز زندگی می کنند (همه آنها موفق شدند قبل از سال 2000 ظاهر شوند، حتی خیلی زودتر).

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

    Perl برای پردازش کلمه طراحی شده بود - در آن روزها حافظه زیادی در رایانه ها وجود داشت که می توانستید متنی را در آنجا قرار دهید و با این متن کار مفیدی انجام دهید (مثلاً کلمات را بشمارید، برخی را جستجو کنید). اما، به نظر من، آن را افرادی طراحی کردند که کمی دیوانه بودند، زیرا چنین شوخی در مورد آن وجود دارد: "هر مجموعه شخصیتی که نوشته شود یک برنامه صحیح در پرل است." به نظر من شما فقط می توانید روی آن بنویسید، نمی توانید آن را بخوانید. وقتی به کد پرل نگاه می کنم و سعی می کنم چیزی را بفهمم، چیزی نمی فهمم. شاید اگر او را بهتر می شناختم، چیزی را می فهمیدم، اما همانطور که از کسانی شنیدم که هنوز چطور می دانند، می گویند بازنویسی راحت تر است. به این معنا که برنامه ها کوتاه هستند و بازنویسی آنها واقعا راحت تر از این است که بفهمید چه چیزی وجود دارد و آن را تعمیر کنید.

    در همان زمان، در اواسط دهه 90، اینترنت ظاهر شد. در ابتدا ایمیل بود، سایت هایی با HTML ثابت، اما مردم می خواستند نوعی پویایی را در آنجا اضافه کنند، تا همه چیز به صورت پویا اتفاق بیفتد، برخی از فرم ها پر شوند، کتاب مهمان انجام شود، چیز دیگری. بر این اساس، این نیاز به نوعی تعامل داشت، آنها پروتکلی برای نحوه تعامل آن ارائه کردند، و از همه مهمتر، تولید این صفحات ثابت (شرطی) که در پاسخ به درخواست کاربر برای کاربر «تفک می‌شوند».

    به طور کلی، هیچ چیز جز مروارید در آن زمان مناسب نبود. نوشتن با C خالص یا C++ handler ایده بدی بود. و به دلیل نبود زبان بهتر در آن زمان (و به اندازه کافی طولانی)، Pearl زبان اصلی برای توسعه وب بود. البته نمی توان مقیاس را با آنچه اکنون در حال وقوع است مقایسه کرد.

    پی اچ پی به صورت تصادفی به صورت ... ظاهر شد. یک نفر خیلی سریع این کار را متوقف کرد - او نوعی صفحه شخصی خود را ایجاد کرد، او نوعی کتاب مهمان داشت، چیز دیگری، نوعی چیز. و او مجموعه‌ای از ماکروها را برای پرل نوشت که شبیه C بودند، زیرا می‌دانست چگونه از C استفاده کند، فقط به این دلیل که برای او بسیار راحت بود. و آن را صفحه اصلی شخصی نامیدند. او آن را به اشتراک گذاشت و گفت: "مردم، ببینید من چه نوشتم، اینجا همه چیز بسیار واضح تر از پرل است و می توانید آن را ویرایش کنید." و مردم آن را دوست داشتند.

    سپس موضوع را رها کرد. به طور کلی، در نتیجه، این PHP شروع به زندگی کرد و با گذشت زمان بسیار محبوبتر از Perl شد. اما این "آسیب ناشی از تولد" او (ایده مجموعه ای از ماکروها برای پرل) شوخی نسبتاً بی رحمانه ای با او داشت. زبان عجیبی است. یعنی خود به خود توسعه پیدا کرد، هیچکس آن را طراحی نکرد، هیچ کس فرآیند توسعه را مدیریت نکرد (نه شرکت و نه هیچ شخصی)، اما گروه های زیادی وجود داشتند که هر کدام آنچه را که دوست داشتند اره کردند. در نتیجه، توابع به طور متفاوتی در آنجا نامیده می شوند، حتی یک سبک وجود ندارد، همه چیز از طریق خط کشی است، به طور کلی، به هر حال، تنظیمات اینجا و آنجا هستند، و اینکه چگونه همه اینها کار خواهند کرد، چندان روشن نیست. اما شما می توانید در عرض دو ساعت بنشینید و با پی اچ پی بنویسید، زیرا او چنین فکر می کرد.

    پایتون و روبی: روبی در حال حاضر کمتر محبوب است، پایتون به نوعی بهتر است، اجازه دهید بعداً در مورد آن صحبت کنیم. واضح است که در آن روزها اینها (استاد به Perl، Python، Ruby، PHP اشاره می کند) زبان های بسیار تخصصی برای اهداف بسیار تخصصی بودند. در حالت کلی، هیچکس آن زمان هیچ برنامه نویسی سیستمی، هیچ منطق تجاری روی آنها ننوشت و الان خیلی این کار را انجام نمی دهند.

    زبان های گردآوری شده از دهه 90

    تقریباً در همان زمان‌ها، اما در جهتی متفاوت خواهیم رفت. در آن زمان، C++ در کشور ما تقریباً برای همه چیزهایی که لازم بود نوشته شود نه برای وب، نه برای پردازش متن، بلکه فقط برای برنامه ها، برای سیستم عامل ها، برای اسباب بازی ها - به طور کلی، برای هر چیزی استفاده می شد. اما C++ واقعاً یک زبان ترسناک است. چرا؟ زیرا اولاً به دلیل سازگاری با عقب، تمام مشکلات C را به ارث برده است. در آنجا هنوز هم می‌توانید خود را به میلیون‌ها روش مختلف بکشید، همان مواردی که در C بودند (طبیعتاً راه‌های جدیدی در C ++ اضافه شد). در عین حال، اگر همه چیز را خوب و درست بنویسید، همانطور که نویسندگان C ++ در نظر گرفته بودند، پس، البته، از قبل غیرممکن بود که خود را به روش های قدیمی C-ish بکشید، و به نظر می رسد در آنجا وجود دارد. تعداد آنها کمتر بود. با این حال، مدل شی بسیار عجیبی برای خود داشت. تقسیم برنامه به ماژول ها، به قطعات، به نحوی از C آمده است (اگر می دانید چگونه بنویسید شامل C یا C ++ - در واقع، این تصور می شود که فقط متن کتابخانه را در برنامه خود وارد کنید، در نتیجه، وقتی یک دسته از شامل می نویسید، همه چیز دارید - اگر "ابتدایی" باشد، همانطور که در همان ابتدا بود - همه چیز در یک فایل درج می شود و سپس کامپایل کردن همه چیز خیلی طول می کشد، زیرا چندین بار می رود. همان پاسکال، ویرتوفسکی، در این زمینه بسیار متفکرتر بود، نسخه های بعدی حتی بهتر هستند.

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

    جاوا اینگونه متولد شد. همچنین یک داستان نسبتا خنده دار در مورد چگونگی نامگذاری این زبان وجود دارد. برنامه نویس ها هستند، آنها همیشه قهوه می نوشند و در آن زمان نوشیدن قهوه مد شده بود که در جزیره جاوا رشد می کرد. این زبان به عنوان زبانی برای دستگاه‌های تعبیه‌شده، به‌ویژه برای دستگاه قهوه‌ساز در نظر گرفته شد. اینطوری اسمش پیدا شد...
    به طور کلی چه چیزی با او شروع شد، چه چیز خوبی در او بود و چرا محبوبیت زیادی به دست آورد؟ اول، آنها به طور کامل از میراث سیشنوی خلاص شدند. هیچ اشاره‌ای وجود ندارد، حتی راه‌هایی برای شلیک به بخشی از بدن و شکستن همه چیز. ثانیا، آنها ایده های بسیار جدیدتری را از نظر مدل شی معرفی کردند - یعنی C ++ خیلی زودتر از جاوا ظاهر شد و از یک مدل شی قدیمی تر و "وحشی" استفاده کرد. خوب، اینجا (استاد به جاوا اشاره می کند) در آن زمان بیشتر فکر شده بود و در تئوری مردم فکر می کردند و در عمل به کار می رفتند و همه چیز را بسیار سردتر می کردند.

    و در نهایت، سوم. برنامه های ما در جاوا نه در کد ماشین، بلکه در کد یک ماشین مجازی مونتاژ شدند. یعنی شما یک ماشین مجازی (VM) JVM - Java داشتید. برنامه های شما در نوعی بازنمایی میانی مونتاژ شدند و سپس با کمک این دستگاه قبلاً اجرا شدند. چه چیزی داد؟ اولاً سرعتش کم شد ، ثانیاً با قدرت وحشتناکی حافظه را خورد ، ثالثاً در همه جا قابل حمل بود (از لحاظ نظری) - حتی برای قهوه ساز ، حتی به یک آسیاب قهوه ، حتی به رایانه ، حتی به تلفن همراه. از یک طرف این خوب است، یعنی شما فقط پیاده سازی یک ماشین مجازی را نوشتید، سپس برنامه های جاوا خود را در همه جا راه اندازی می کنید. اما، از طرف دیگر، بد است که در آن زمان حافظه کمی در همان گوشی وجود داشت، عملکرد پایینی داشت و همه اینها علاوه بر این، شروع به کند شدن و کند شدن کرد.

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

    یعنی اگر در C، در C ++، در پایتون، روی هر چیزی بتوانیم نوعی زباله‌دانی وحشتناک را از پروژه‌مان ایجاد کنیم، جایی که همه چیز به هم ریخته است، ساعت‌ها می‌رویم، و چیز دیگری وجود دارد. در جاوا، پرورش سطل زباله نیز امکان پذیر است، اما برای این کار باید کمی تلاش کنید. یعنی به طور پیش‌فرض معلوم نمی‌شود که یک "محل زباله" باشد، مشکلات دیگر معلوم می‌شود که چیزی به ارث رسیده است، در آنجا به ارث رسیده است - به طور کلی، ده خط نه چندان معنی‌دار یک خط معنادار است. اما، شاید چنین برنامه نویسی با مهارت متوسط ​​بتواند کدهای بسیار با کیفیتی بنویسد.
    تقریباً به پایان رسیده ایم. برای ما، چیز بعدی که ظاهر شد .Net (dotnet) است، و به طور خاص، ما به C # علاقه مندیم (تقریباً همان [استاد به جاوا اشاره می کند]، یعنی اگر بین آنها انتخاب کنید، تفاوت هایی در جزئیات وجود دارد. - ببینید کجا پول بیشتری بپردازید).

    و یک چیز دیگر - جاوا اسکریپت. هیچ ربطی به زبان جاوا ندارد، در همان سال ظاهر شد - این کلمه مد روز بود، آنها مجوز استفاده از علامت تجاری را صادر کردند.

    مهم ترین نکته ای که باید به آن توجه کرد چیست؟ (مدرس فلش هایی را از C++ به جاوا، .Net، C#، JavaScript و PHP می کشد). برای نوشتن یک برنامه ساده به یکی از این زبان‌ها و در بسیاری از زبان‌های دیگر - اگر C ++ می‌دانید، معمولاً نیازی به دانستن هیچ چیز دیگری ندارید - می‌گیرید و به زبان C ++ می‌نویسید و سپس در ابتدا دلار اضافه می‌کنید. ، چیز دیگری کارهای کوچک را انجام می دهد و روی هر چیزی برای شما کار می کند (استاد به زبان هایی اشاره می کند که فلش های C ++ به آنها اختصاص داده شده است). یعنی در بعضی چیزهای ساده به شدت شبیه هم هستند. اگر برخی از مشکلات مدرسه، مشکلات آموزشی، چیز دیگری را حل می کنید (شما پروژه بزرگی طراحی نمی کنید - یک فایل دارید که اعداد را می خواند، اعداد را در کنسول نمایش می دهد، کار دیگری انجام می دهد)، پس تقریباً هیچ تفاوتی بین این زبان ها وجود ندارد. . واضح است که جاوا اسکریپت و PHP تخصصی هستند، همه چیز کمی متفاوت است. و در اینجا (استاد به جاوا و C # اشاره می کند) تفاوت بسیار کمی وجود دارد.

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

    انتخاب زبان بسته به وظیفه

    فرض کنید با وظیفه نوشتن درایور برای کارت گرافیک روبرو هستید. امروز از چه زبانی استفاده خواهید کرد؟ (از حضار فریاد بزنید: جاوا!) چرا... جاوا عالی است، اما چرا در روبی یا PHP نه؟ (مدرس به طعنه صحبت می کند.)

    برنامه نویسی سطح پایین

    اگر چیزی سطح پایین می نویسید، C بهترین انتخاب است، اما من شنیده ام (اما ندیده ام) که C++ برای این کار استفاده می شود. اما من به این اعتقاد کمی دارم، زیرا در C به وضوح می توانید کنترل کنید - از آنجایی که شما تعداد زیادی بایت حافظه داده اید، به این معنی است که تعداد زیادی بایت وجود خواهد داشت. و در C++ (STL)، یک رشته چگونه پیاده سازی می شود؟ خوب، به نوعی اجرا شده است. و در پایان، ما نمی دانیم چگونه و چه اتفاقی در آنجا می افتد، شاید حافظه ما در کارت گرافیک ما تمام شود یا اتفاق دیگری رخ دهد. بنابراین، C هنوز زندگی می کند و نمی میرد، هنوز هم چنین وظایف برنامه نویسی سیستم وجود دارد - نوشتن یک سیستم عامل، نوشتن درایورها، نوشتن چیز دیگری - C برای این کار عالی است. علاوه بر این، اکنون انواع دستگاه ها ظاهر می شوند (اینترنت اشیا وعده می دهد که در شرف آمدن است) که با باتری زندگی می کنند (و البته میلیون ها نفر از آنها وجود خواهند داشت، همه چیز با این اینترنت اشیا آویزان خواهد شد) ، باید بسیار ارزان باشند و برق بسیار کمی مصرف کنند. بر این اساس، 2 کیلوبایت حافظه، پردازنده با فرکانس 5 کیلوهرتز وجود خواهد داشت و البته در آینده نزدیک امکان پیچیدن ماشین مجازی یا زبان اسکریپت وجود نخواهد داشت - به این معنی که باید بنویسید. چیزی در C و حتی در حال حاضر، برای مثال، محاسبات روی یک کارت گرافیک (OpenCL یا برخی فناوری های دیگر) - آنها زبان جدیدی برای نوشتن برنامه برای آنها پیدا نمی کنند - آنها C را با محدودیت های بزرگ انجام می دهند. فقط به این دلیل که مردم قبلاً می دانند چگونه، چرا چیز جدیدی یاد بگیرند؟ به طور رسمی، این احتمالاً به یک معنا نیز C.

    برنامه نویسی وب

    فرض کنید می خواهید یک فیس بوک (شبکه اجتماعی) جدید بنویسید. روی چه چیزی خواهید نوشت؟ (از مخاطبان آنها در مورد HTML و CSS صحبت می کنند.) HTML، CSS طراحی است، و ما می خواهیم که امکان افزودن عکس، ایجاد دوستی، گذاشتن نظر در آنجا وجود داشته باشد.

    برای بخش اسکریپت - یعنی آنچه در سمت مشتری اتفاق می افتد - این جاوا اسکریپت است. علاوه بر این، گاهی اوقات جاوا اسکریپت به زبان دیگری تولید و ارسال می شود (این اتفاق می افتد که اسکریپت تولید می شود ... زیرا گاهی اوقات پردازش برخی تغییرات در منطق آسان تر است).

    با کمال تعجب، به زبان PHP - و فیس بوک و بسیاری از پروژه های بزرگ دیگر نوشته شده است. البته باید چیزهای خودم را می نوشتم تا باز هم خوب کار کند و نه آنطور که انجام شد، اما آنها این کار را کردند. اصولاً مهم نیست که در چه چیزی بنویسید، اما من پرل را توصیه نمی کنم. در اینجا و اکنون، البته، هیچ کس چیزی از ابتدا برای وب نمی نویسد. هرکس نوعی چارچوب یا چیز دیگری می نویسد. فروشگاه آنلاین؟ ما یک چارچوب برای یک فروشگاه آنلاین دانلود کردیم - این همه است، ما یک فروشگاه آنلاین نوشتیم.

    برنامه نویسی کسب و کار

    در مرحله بعد، می خواهید یک برنامه بانکی خسته کننده بنویسید. یا مثلا کسی سیم کارت می فروشه؟ شاید تا به حال یک تلفن یا چیزی خریده باشید و به شما بگویند: "اینجا سیستم معلق است، ما نمی توانیم کاری انجام دهیم." چنین برنامه ای را روی چه چیزی می نویسید؟ (فریاد حضار در مورد پایتون) شما نمی توانید چنین چیزهایی را در پایتون بنویسید، شما چیست؟ هیچ چیزی برای تجارت نباید در پایتون نوشته شود. چرا؟ زیرا وقتی چیزی در پایتون می نویسید، نمی توانید تعداد قابل توجهی باگ را در فرآیند نوشتن پیدا کنید. پایتون به هر شکل ممکن به صورت پویا تایپ می شود و در کل می توانید یک باگ را در آنجا پنهان کنید تا در شرایطی ظاهر شود که حتی نتوانید بفهمید این کاربران کلاهبردار آنجا چه کردند که همه چیز برای شما خراب شد. یعنی بهتر است برای خود پایتون بنویسید، اسکریپت های کوچک - متوجه می شوید که در آنجا چه اتفاقی می افتد و چه کاری انجام می شود. خوب، یا چیزی که بدتان نمی‌آید دور بریزید: می‌خواهید چیزی را قبل از رقبای خود عرضه کنید، پس اگر هر بار خراب شود چه می‌شود. شما در پایتون نوشتید و تمام - بازار را تسخیر کردید. و اگر چیزی را برای مدت طولانی می نویسید، مثلاً نوعی برنامه بانکی (به طوری که وام ها را تأیید می کند، چیز دیگری) - آن را در جاوا می نویسید. چون اونجا قضیه جدیه، اوراق، پول، مدارک، یه چیز دیگه، ولی نمیشه انقدر خرابش کرد که همه چیز خراب بشه، وگرنه مردم آزرده میشن - پولشون رفت و به جایی نرسید، چون داری یک لحظه رشته به عدد تبدیل شد یا برعکس. پس یعنی شما روشمند می گیرید و در جاوا می نویسید، می نویسید... خوب یا در نت، اصولا چنین شرایطی هم پیش می آید. البته در آنجا نیز می توانید با مشکلاتی روبرو شوید ، اما هنوز هم احتمال این امر تا حدودی کمتر است.

    برنامه نویسی برای ارتش، صنعت هوافضا

    حالا تصور کنید که تصمیم گرفتند شما را با موشک به ماه بفرستند. برای نوشتن کدی که موتورهای موشک را کنترل می کند، چه چیزی را ترجیح می دهید؟ بیایید نگاهی بیندازیم. این احتمالاً (استاد به Perl ، Python ، PHP ، Ruby اشاره می کند) ارزشش را ندارد - کند می شود ، اتفاق دیگری در حال رخ دادن است ، خوب ، به طور کلی ، من با پرواز روی چنین موشکی موافق نیستم. در C++؟ صادقانه بگویم، من هم این کار را نمی کنم، زیرا راه های زیادی برای کشتن خود در C++ وجود دارد. وقتی جایی در فضا هستید، خیلی خوب نیست.

    شاید در جاوا؟ به نظر می رسد همه چیز در آنجا کاملاً قابل اعتماد است و معماری خوب است، بدون انواع وحشی، بدون اضافه شدن حافظه اضافی. فرض کنید مهم ترین لحظه فرا رسیده است و جاوا ما تصمیم گرفته است برای ما زباله جمع کند. ما باید فرود بیاییم، سرعت را کم کنیم، و او می گوید: "نه، زباله ها می روند." به طور کلی، نه چندان هم.

    راستش را بخواهید ترجیح می دهم این برنامه با پاسکال نوشته شود. البته، من واقعاً پاسکال را دوست ندارم، اما به نوعی در چنین مسائلی بسیار جالب خواهد بود.

    استفاده از چندین زبان برای توسعه نرم افزار به طور همزمان

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

    در توسعه برخی از برنامه ها، حتی برنامه های بزرگ، گاهی اوقات مردم چه می کنند؟ آنها آن را می گیرند و یک نمونه اولیه در پایتون می نویسند (چگونه همه کار می کند)، طرح آن را می کشند، به نوعی معماری فکر می کنند. نوشتن روی آن واقعاً بسیار سریع است - آنها یک نمونه اولیه پرتاب کردند، با آن آزمایش کردند و گفتند: "وای! خیلی باحاله! و کاملا بازنویسی شده است. به نظر می رسد که آنها این کار را دو بار انجام دادند که دو برابر بیشتر طول کشید (خوب، یک و نیم). اما نه! اغلب معلوم می شود که این روش بد نیست، زیرا اگر بلافاصله در چیزی بنویسید، مثلاً در جاوا، و سپس تصمیم بگیرید: "نه، بیایید اصلاح کنیم، معماری را به طور کامل تغییر دهیم و همه چیز"، آنگاه 10 بار هزینه خواهید کرد. زمان بیشتر . چنین چیزهایی نیز وجود دارند و زندگی می کنند.

    شرایط موفقیت هر زبان برنامه نویسی

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

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

    مشکل چیه؟ چرا برخی از زبان‌ها مانند پایتون، که هیچ شرکتی در ابتدا از آن‌ها پشتیبانی نمی‌کرد، بازار را تصاحب کردند. PHP که طراحی ضعیفی نیز دارد، بازار را (بیشتر آن) نیز به خودی خود تصاحب کرد. و انواع و اقسام میلیاردها دلار سرمایه گذاری شد (استاد به آدا اشاره می کند) و به جایی نرسید، هیچ اتفاقی نیفتاد. به چی ربط داره؟ دلیلش این است که هیچ زیرساختی در اطراف این زبان ها وجود ندارد. یعنی زبان می تواند عالی باشد، اما تا زمانی که هیچ مستندی وجود نداشته باشد، تا زمانی که جامعه ای وجود نداشته باشد که بتواند به سؤالات پاسخ دهد (در Stack Overflow)، و، در نهایت، مهمتر از همه، تا زمانی که تعداد زیادی وجود نداشته باشد. تعداد کتابخانه ها، زبان شلیک نمی کند. یعنی شما مثلاً می خواستید یک وب سایت در Oberon بنویسید. و آن چیست، چرا که نه؟ و مشکل شروع می شود ... شما نمی توانید وب سرور خود را روی Oberon راه اندازی کنید تا آن را به آرامی آزمایش کنید، نمی توانید هیچ کتابخانه ای را متصل کنید، زیرا آنها در Oberon نیستند. و همه اینها از طریق نوعی عصا انجام می شود، نیروها از بین می روند و در کل شما به جای اوبرون، تف می کنید و سایت خود را با C خالص می نویسید. و زبان هایی که قادر به استفاده از کتابخانه های زبان های دیگر هستند به خوبی زندگی می کنند. همون پایتون در اون جاهایی که سرعتش کم میشه. خب، به طور کلی، انواع چیزهای استاندارد مانند مرتب سازی و چیزهای دیگر در C نوشته می شوند و او (پایتون) می داند که چگونه با آنها تعامل داشته باشد.

    جاوا یک رابط بومی جاوا نیز دارد. این اساساً C است، یعنی آنجا (به نظر من، آنها همیشه می خواهند تحریم کنند، اما به نظر می رسد هنوز ممنوع نشده اند) این زبان ها می توانند با کتابخانه های موجود (عمدتاً Cs) تعامل داشته باشند. و به این دلیل می گیرند و کار می کنند. شما ایده ای را که می خواهم به شما منتقل کنم، درک می کنید، درست است؟ به زبان هایی که نمی دانند چگونه به کتابخانه C متصل شوند، ننویسید. خوب، اگر می خواهید از چیز جالب استفاده کنید. خوب، و به تدریج آنها (زبان ها) نوعی زیرساخت را به دست می آورند. و خوب زندگی می کنند.

    زبان برنامه نویسی و راهنمایی شغلی

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

    اگر می خواهید بنویسید، شاید جالب ترین برنامه های زندگی نباشند، اما برای شما جالب است که آنها را طراحی کنید، به همه اینها فکر کنید و بابت نشستن و بی حوصلگی بیشتر اوقات پول زیادی به دست آورید (برای این کار باید هزینه کنید. اگر خوب هستی دلتنگت می شوی)، اینجا هستند - جاوا، دات نت. می روی در فلان بانک کار می کنی، می نویسی، ساعت 9 با پیراهن سفید می روی سر کار، حقوق خوبی می گیری و طبق توصیه های بهترین توسعه دهندگان جاوا می نویسی، Net sheep و اینها...

    اگر می‌خواهید برنامه‌ها، مرورگرها، اسباب‌بازی‌ها و چیز دیگری بنویسید، C ++ عالی است. اگر می‌خواهید وب‌سایت‌ها را بنویسید، زبان‌های انتخابی شما اینجا هستند (مدرس Perl، Python، PHP، Ruby را نشان می‌دهد)، تفاوت زیادی وجود ندارد. تنها چیزی که وجود دارد این است که PHP قبل از پایتون خواهد مرد، بنابراین اگر برای یادگیری چیزهای جدید تنبل هستید، پایتون را یاد بگیرید. تفاوت زیادی را متوجه نخواهید شد، اما بیشتر دوام خواهید آورد.

    چه اتفاقی برای روبی می افتد نیز مشخص نیست. خوب، اگر قبلاً آن را یاد گرفته اید، می توانید PHP را نیز یاد بگیرید، زیرا آنها به قدری ساده هستند که یادگیری مجدد در آنجا زیاد طول نمی کشد.

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

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

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

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

    برنامه توزیع زبان ها در المپیاد روسی در انفورماتیک چگونه است؟ افرادی که در مسابقه همه روسی، جالبترین المپیاد شرکت می کنند، روی چه چیزی می نویسند؟ به نظر می رسد (در اینجا به معنی پاسکال است، و اینجا حدود 2000 است، و اینجا حدود صفر است، اینجا C ++، و اینجا 2015 است).

    در سال 2000، تقریبا هیچ کس C++ را ننوشت. 15 سال می گذرد و با وجود مدرن بودن پاسکال، تقریباً هیچ کس به پاسکال نمی نویسد. این زبانی است که تقریباً می تواند همین کار را انجام دهد. فقط این است که همه برای یادگیری این موضوع تنبل شده اند، با انواع گرایش های جدید، و همه به نوشتن در Borland Pascal ادامه می دهند، که البته، کاری نمی تواند انجام دهد. در C++، مردم برخی الگوریتم‌ها (STL) را برای مرتب‌سازی می‌نویسند - عالی است، آنها مرتب کردن () را نوشتند و تمام. در پاسکال، در معمول، در قدیمی - این یک مشکل است. آنها مجموعه ای نوشتند (نیاز) - عالی، آنها آن را در C ++ نوشتند، در پاسکال دوباره عذاب محض. در پاسکال های جدید، البته، می توانید این کار را انجام دهید، اما آنها به طور کلی هزینه دارند. شاید به آن توجه نکرده باشید، اما اینطور است.

    جاوا نیز وجود دارد، اما در جاوا حروف زیادی وجود دارد. این برای پروژه های بزرگ است، اما برای برنامه های کوچک یک بار مصرف بسیار بد است، زیرا حروف اضافی زیادی وجود دارد. اما برخی از مردم نیز می نویسند، شما می توانید یاد بگیرید که روی آن بنویسید. اما در USE در دسترس نیست و USE همچنان باید در بیشتر موارد استفاده شود.

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

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

    اکنون در مورد نحوه ساخت دوره در HSE صحبت خواهم کرد، زبان ها به چه ترتیبی تدریس می شوند، چگونه در ریاضیات کاربردی و علوم کامپیوتر دانشکده علوم کاربردی مطالعه می شوند، که ما با Yandex انجام می دهیم. در ترم اول - پایتون (نه به طور کامل، در مورد اینکه چگونه باید در مدرسه به شما آموزش داده شود) و C ++ (از قبل گسترده تر، بسیار گسترده تر از آنچه معمولاً در مدارس تدریس می شود). بیایید فوراً بگوییم تا نترسید، اگر ناگهان بخواهید این کار را انجام دهید، می گویید: "چی، من قبلاً همه اینها را می دانم، چرا باید بروم جایی برای مطالعه؟ ترجیح می دهم جای دیگری بروم." برای کسانی که از قبل می دانند چگونه به خوبی برنامه ریزی کنند، فرصتی وجود دارد که بلافاصله به مطالعه الگوریتم ها و در یک آمادگی نسبتاً نظری بروند. ما الان به آنها نگاه نمی کنیم، این (به تخته سیاه اشاره می کند) برای کسانی است که به طور متوسط ​​برنامه نویسی می کنند یا اصلا برنامه نویسی نمی کنند.

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

    سپس دوره "الگوریتم ها" و یک پروژه دوره جداگانه می آید. الگوریتم های کلاسیک با پیاده سازی نه اینکه در تئوری چیزی را گرفتیم، پیچیدگی را محاسبه کردیم. در سخنرانی، ما گرفتیم، پیچیدگی را محاسبه کردیم، در سمینار - الگوریتم را گرفتیم، پیاده سازی کردیم. یک پروژه دانش آموزانی است که کار تمام شده را انجام می دهند. به عنوان مثال، یکی از پروژه ها این بود: برای محاسبه ... فرض کنید شما آپارتمان های زیادی در مسکو دارید و می فهمید: «اوه، من چیزهای اضافی زیادی دارم، یکی را اجاره می کنم. و آنها مقداری قیمت تعیین می کنند و هیچ کس نمی خواهد یک آپارتمان از شما اجاره کند - احتمالاً خیلی گران است. یا مقداری قیمت گذاشتند، بلافاصله آن را از شما برداشتند و فکر می کنید: "اوه، احتمالاً من آن را ارزان گذراندم" - و شما نیز ناراحت هستید. یعنی باید محاسبه می شد که هزینه اجاره آپارتمان چقدر است؟ شما در داده ها رانندگی می کنید - این یک ارزیابی برای شما ایجاد می کند. چنین سایتی که از چند چیز تشکیل شده بود: جمله بردارید، تجزیه کنید، یک نوع الگوریتم یادگیری ماشینی (احتمالا) ساده را اعمال کنید و یک صفحه وب زیبا بسازید که در آن می توانید چیزی را انتخاب کنید، چیزی را در آن برانید، چند متر، تعدادی اتاق، تعداد سونا، تعداد جکوزی در آپارتمان شما و تخمین تقریبی هزینه. این است که، برخی به پایان رسید، چیز خیلی پیچیده نیست. در اینجا به معنای (استاد به یک دوره در مورد الگوریتم ها اشاره می کند) چنین C ++ قوی، با کنسول I / O است. خوب، و اینجا (استاد به کتیبه "پروژه" اشاره می کند) چیزی تحت هدایت یک مربی، شاید با پایگاه داده، شاید با تجزیه متن و چیز دیگری.
    سپس ترم سوم می آید - دوره ای به نام "سیستم های کامپیوتری". مقدار کمی اسمبلر برای درک وجود دارد (خیلی کم) و سپس چیزی شبیه به C خالص و تعامل با سیستم عامل ها، برنامه نویسی سیستم در اصل. و پروژه سمینار نیز چیزی است در مورد انواع تعاملات شبکه، کاملا سطح پایین: توسعه برخی از ابزارها، به عنوان مثال rsync (همگام سازی، احتمالاً می دانید. در C خالص، کم و بیش، یک آنالوگ بنویسید rsync، که در پوشه های همگام سازی شبکه با تمام دسترسی به فایل ها و غیره خواهید داشت).

    و در نهایت، چهارم. من حتی نمی‌دانم اسمش را چه بگذارم، چنین ترکیبی از فناوری‌ها برای توسعه واقعی، مانند توسعه وب، مورد نیاز است. یعنی این کاربرد عملی پایگاه های داده است، دوباره چیزی شبیه به آنچه در پروژه انجام شده است (استاد 2 دوره در مورد پروژه را نشان می دهد)، اما در حال حاضر عمیق تر است. یعنی چنین چیزهای کم و بیش عینی در حال حاضر، برنامه نویسی عملی. به موازات این، هر نظریه ای وجود دارد، خب، اینجا هنوز دارند علم می کنند.

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

    در اینجا باید به طور گسترده تر به آن نگاه کنید (استاد به لیست دروس روی تخته سیاه اشاره می کند) - این یکی از روش هایی است که انتخاب شده است، به ویژه در HSE (به تازگی ظاهر شده است، بنابراین کاملاً مدرن است) . راه های دیگری برای ملاقات وجود دارد. سایر دانشگاه های خوب نظم و لهجه های متفاوتی دارند. اما سعی می کنند مردم را با هر آنچه که دارند آشنا کنند.

    چگونه به عنوان برنامه نویس شغل پیدا کنیم

    شما هستید ( مدرس به لیست دوره ها اشاره می کند) همه کارها را انجام دادید، در دانشگاه یاد گرفتید، دو سال دیگر کار مفیدتری انجام دادید و باید سر کار بروید. چگونه چیزی را برای کار انتخاب می کنید؟ اولاً، شما همه چیز را شناختید، به جایی عمیق رفتید و قبلاً می دانید چه چیزی را دوست دارید. شما باید به طور طبیعی آنچه را که دوست دارید انتخاب کنید. چون اگر عشق بورزید، زحماتتان را سرمایه گذاری می کنید، انگیزه خواهید داشت و در کل همه چیز خوب می شود. زیرا فقط پول نیست، بلکه برای شما جالب و دلپذیر است. خوب، و شما می خواهید وارد یک شرکت جالب شوید، شغلی پیدا کنید. من شخصا دوست دارم چه جور آدمی را ببینم؟ فرض کنید صد دانش آموز پیش من بیایند - من باید دو تا را به محل کار ببرم یا یکی را. چرا می آیند، من اصلاً نمی فهمم آنها چه کسانی هستند، چه هستند، چگونه هستند؟ در بهترین حالت مدرکی را که در دانشگاه گرفته اند به من نشان می دهند و من می گویم: «عجب! این یک دیپلم باحال است، اما این خیلی باحال نیست!» و اتفاقا من ممکن است اشتباه کنم. شاید فرد وقت آزاد زیادی داشت و خیلی بهتر یاد گرفت.

    چه چیزی عالی خواهد بود؟ ابتدا چند پروژه منبع باز که از ابتدا تا انتها نوشته اید. ترجیحاً، اگر نوعی زیرساخت انجام می دهم تا داده ها به سرعت خوانده شوند، یا چیز دیگری، مطمئناً علاقه مند هستم که چیزی متن باز برای من بنویسم. آنها نوعی وب سایت درست نکردند، بلکه چیزی در مورد موضوع ایجاد کردند. چرا این برای من جالب است؟ من می‌توانم به کد شما نگاه کنم، می‌توانم ببینم چند بار مرتکب می‌شوید، می‌توانم ببینم که چگونه به اشکالات کاربران، اشکالات توسعه‌دهندگانی که از آن استفاده می‌کنند واکنش نشان می‌دهید - همه چیز ضبط می‌شود، من به همه چیز نگاه می‌کنم و فکر می‌کنم: "وای، این اشکال دارد. به مدت دو سال بسته شده است، سپس شما بی ادبانه به کاربر پاسخ دادید، چیز دیگری وجود دارد - من آن را قبول ندارم. بنابراین این پروژه شخصی شماست.

    بعد، چه چیز دیگری می تواند جالب باشد؟ دوست دارم ببینم کار تیمی شما چطور بود. یعنی شما برای مصاحبه پیش من می آیید و می گویید: «من و بچه های دانشگاه یک برنامه خوب را شستیم. من یک پایگاه داده در آنجا ساختم، آنها یک نوع برنامه تلفن همراه را در آنجا ساختند، و همچنین یک پسر در آنجا کار می کرد، یک دختر طراح، یک پسر پشتیبانی فنی. ما پنج نفر بودیم و یک پروژه جالب ساختیم.» خوب، من به پروژه شما نگاه می کنم، می گویم: "مال شما چیست؟" من دوباره به کد نگاه می کنم و می فهمم که شما می دانید چگونه در یک تیم با افراد کار کنید.

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

    من شخصا چه چیز دیگری را دوست دارم؟ اگر در پروژه های بزرگ خود را نشان دادید. به عنوان مثال، شما چیزی را به هسته لینوکس متعهد کرده اید، اگر به برنامه نویسی سیستم علاقه دارید، برخی از باگ ها را برطرف کرده اید. یعنی نشان دادند که شما می توانید کد شخص دیگری را بخوانید و می دانید که چگونه باید در آن تغییرات ایجاد کنید. من نگاه می کنم: "اوه، واقعاً، شما چیز پیچیده ای را کشف کردید و برخی از اشکالات را برطرف کردید!" و من شروع به لذت بردن از آن کردم. چون من دارم... خوب، نمی دانم... بنابراین برنامه نویس من استعفا داد زیرا رقبای او حقوق بیشتری به او پیشنهاد دادند و من به یک نفر نیاز فوری دارم که جای او را وصل کند - شما. به نظر من فقط از اول نوشتی و بلد نیستی کد شخص دیگری را بخوانی و ویرایش کنی و من ناراحت می شوم.

    و در نهایت بسته به موقعیت خاص، موارد متفاوت دیگری نیز وجود دارد. اگر برای شغلی به عنوان تحلیلگر درخواست می دهید، از شما می خواهم مشکلات تجزیه و تحلیل داده ها را در Kaggle حل کنید. اگر در برخی از موارد الگوریتمی شغلی پیدا کردید، از شما می خواهم الگوریتم هایی را در برنامه نویسی ورزشی انجام دهید. و در نهایت، اگر به این حرفه فکر کردید، بخوانید که مصاحبه‌ها چگونه پیش می‌رود، متوجه شدید که در آنجا عده‌ای نارضایتی شدید می‌کنند: «من آمدم و از من می‌پرسند سرگرمی من چیست. من مثل جغد می‌نشینم و جواب نمی‌دهم چون سرگرمی ندارم» و آنها فکر می‌کنند که منابع انسانی این کار را می‌کنند. در واقع، آنها سعی می کنند بفهمند که شما چقدر دوستانه و کافی هستید. اگر غیردوستانه و ناکافی هستید، مهم نیست که چقدر نابغه و معتاد به کار هستید، یک متخصص باحال با دانش عالی، کار تیم با شما دشوار خواهد بود و شما نمی توانید به تنهایی پروژه را بیرون بکشید. علاوه بر این، حتی اگر آن را بیرون بکشید، می توانید تصور کنید که شرکت با چه بار سنگینی روبروست. و فردا چه می‌آیی و می‌گویی: «حقوقم را 10 برابر کن وگرنه تو را ترک می‌کنم». البته شرکت ها نمی خواهند وارد چنین شرایطی شوند. بنابراین، پرورش کفایت و حسن نیت در خود به همان اندازه (حداقل) مهم است که توسعه برخی مهارت های حرفه ای.

    به طور خلاصه، چه می توان گفت؟ کدام زبان خوب و کدام بد است؟ خوب، در یک گروه از زبان ها، به عنوان مثال بین روبی، پایتون و PHP، چه چیزی را انتخاب کنیم؟ البته، پاسخ صحیح پایتون است، اما در واقع تفاوت بین آنها در تعداد اشکالات مجاز است، در مقدار چیز دیگری - 5٪، خوب، شاید 10٪. یعنی اگر قبلاً یک پروژه تمام‌شده نوشته شده با PHP دارید، هیچ کس در ذهنش نمی‌گوید: «بیایید همه چیز را در پایتون بازنویسی کنیم». آنها خواهند گفت: "بیایید توسعه دهندگان PHP بیشتری استخدام کنیم و به نوشتن در PHP ادامه دهیم." خوب، این انتخاب خوبی است. البته، اگر به طور ناگهانی شروع به نوشتن نوعی پروژه کردید، شاید عاقلانه باشد که اکنون پایتون را انتخاب کنید. اگرچه، این نیز بستگی دارد. شاید برنامه‌نویس‌های ارزان PHP زیادی در بازار داشته باشید، و برنامه‌نویس‌های پایتون گران هستند، و فکر می‌کنید: «بله، فناوری جالب‌تر است، اما من در هزینه‌های توسعه‌دهندگان آماده صرفه‌جویی می‌کنم». و همه چیز خوب است، شما قبلاً آمده اید و آنجا کار می کنید.
    چگونه بین جاوا و سی پلاس پلاس یکی را انتخاب کنیم؟ بله، دقیقاً همین اتفاق می افتد. من فکر می کنم زمانی که تصمیم بگیرید به چه زبانی یک پروژه بزرگ جدید را شروع کنید، دانشی در زمینه حرفه ای خود به دست خواهید آورد و می توانید انتخاب درستی داشته باشید. در حال حاضر مجبور نیستید این انتخاب را انجام دهید، بنابراین من به شما توصیه می کنم کاری را که دوست دارید انجام دهید.

    همان طور که گفتم، اصول اولیه برنامه نویسی (یک تابع چیست، if’s، for’s، آرایه ها و چیزهای دیگر) کم و بیش در هر زبانی قابل یادگیری است. به عنوان مثال، در C ++، از آنجایی که بسیاری از چیزها شبیه به آن هستند، و مشخصات آن (در این سطح) کمترین، و کمترین حروف غیر ضروری برای نوشتن است. خوب، پس وقتی چیزهای پیچیده معماری را یاد می گیرید، یاد خواهید گرفت و نیازی نیست که زیاد نگران این موضوع باشید. یعنی نکته اصلی این است که سعی کنید، به دنبال چیزی باشید که دوست دارید، و وقتی متوجه شدید که ساعت 4 صبح است و برای سرگرمی نشسته اید و می نویسید، زیرا آن را دوست دارید - احتمالاً در این لحظه ای مشخص می شود که شما خود را پیدا کرده اید.

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

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

    در اواسط قرن بیستم، ماشین تورینگ ظاهر شد، سپس اولین کامپیوترها و اولین زبان برنامه نویسی مدرن Plankalkül. اولین جهش در توسعه زمانی رخ داد که ارتش به رایانه ها توجه کرد - دارپا و دیگران مانند آنها شروع به سرمایه گذاری فعال در یک صنعت جوان کردند. دومی با گسترش اینترنت به وجود آمد - هر چه مردم عمیق تر وارد عصر دیجیتال شوند، تقاضای سازندگان اصلی محیط این دوره - برنامه نویسان - بیشتر می شود. و افراد بیشتری می خواهند به آنها بپیوندند.

    میل معقول و قابل درک است، اما اولین سوال در ذهن اغلب به یک مانع غیرقابل حل تبدیل می شود - از چه زبانی باید برنامه نویسی را شروع کرد؟ ترس از انتخاب اشتباه مبتنی بر ترس از اتلاف وقت است. در نتیجه، یک برنامه نویس تازه کار چندین سال است که به دنبال زبان "خود" است، بدون اینکه به سمت هدف گرامی خود حرکت کند. خب، لعنتی، کدام زبان را انتخاب کنم؟

    معیارهای انتخاب اولین زبان برنامه نویسی

    انتخاب زبان بستگی به وظایفی دارد که برنامه نویس می خواهد حل کند. برای پروژه های اینترنتی پایتون محبوب است که گوگل و فیسبوک در پروژه هایشان استفاده می کنند، برای اپلیکیشن های موبایل برای اندروید جاوا بهترین دوست است و برای iOS سوئیفت.

    مشکل واقعی انتخاب فقدان یک کار خاص است. این طبیعی است، زیرا تنها زمانی که در محیط هستید می توانید دقیقاً بفهمید که چه کاری می خواهید انجام دهید. بنابراین، کارشناسان توصیه می کنند زبانی را به عنوان زبان اول در نظر بگیرید که با آن می توانید طیف وسیعی از مشکلات را حل کنید.

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

    جدا از جهانی بودن، معیارهای دیگری نیز وجود دارد:

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

    این سه توصیف به بهترین وجه با پایتون، سی شارپ، جاوا و روبی مطابقت دارند.

    در دهه 80 توسط برنامه نویس هلندی Guido van Rossum توسعه یافت. شرکت های بزرگ فناوری با پایتون کار می کنند: Yandex، Google، Facebook و YouTube. این به اصطلاح زبان برنامه نویسی است - آنها آنچه را که برنامه در زیر سرپوش دارد در آن می نویسند. برای برنامه های کاربردی وب، توسعه بازی، نرم افزار سرور و ... استفاده می شود.

    سادگی محبوبیت تطبیق پذیری

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

    رتبه اول در برنامه های برنامه نویسی ابتدایی در دانشگاه های ایالات متحده.

    به طور مرتب به روز می شود - هر 2.5 سال. از ژانویه 2016 در پنج زبان محبوب برتر طبق شرکت تحلیلی TIOBE Software گنجانده شده است.

    تقریباً همه چیز در پایتون نوشته شده است: اسکریپت های مدیریت سیستم ها، وب سایت ها، سیستم های یادگیری ماشین، بازی ها.

    این زبان در اواخر دهه 90 بر اساس C++ و جاوا توسعه یافت. عمدتا برای پروژه های بزرگ سازمانی استفاده می شود، اما محدود به آنها نیست. به عنوان مثال، اسکریپت ها در موتور بازی Unity به زبان سی شارپ نوشته می شوند.

    سادگی محبوبیت تطبیق پذیری

    از نظر ساختاری نزدیک به C ++ و جاوا - نحو (ساختار کد) پیچیده‌تر از Python و Ruby است، اما یادگیری زبان‌های مرتبط زمان کمتری می‌برد. رابط های کتابخانه به خوبی در الگوهای طراحی قرار می گیرند و یادگیری آن را آسان می کنند.

    آخرین به روز رسانی در سال 2015 بود.

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

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


    یاقوت سرخ

    ایجاد شده توسط یک توسعه دهنده ژاپنی تحت تاثیر زبان Perl. در سال 1995 راه اندازی شد. نوشته شده در Ruby: Shopify، Github، Groupon، Yellow Pages، Twitter و Slideshare. محبوبیت پیدا می کند، اما در استارتاپ ها بیشتر از شرکت های بزرگ رایج است. برای ایجاد یک پروژه اینترنتی ساده خوب است.

    سادگی محبوبیت تطبیق پذیری

    خواندن کد مانند پایتون آسان است. ساختار نیز مشابه پایتون است. در مقایسه با سایر زبان‌ها، انتخاب کتابخانه‌های استاندارد ضعیف‌تر است - شما باید زمانی را صرف جستجو کنید.

    یک جامعه توسعه دهندگان بزرگ و وفادار - ده زبان محبوب ترین زبان را طبق نرم افزار TIOBE می بندد. بسیاری از کتابخانه ها به صورت رایگان در دسترس هستند.

    کمترین تطبیق پذیری از چهار مورد - عمدتاً برای توسعه وب مناسب است. از طرفی در داخل پروژه های اینترنتی می توانید کارهای بسیار متفاوت و بسیار جالبی با آن انجام دهید.


    جاوا

    اولین نسخه این زبان در می 1995 منتشر شد. جاوا توسط آمازون، eBay، LinkedIn و Yahoo استفاده می شود!

    سادگی محبوبیت تطبیق پذیری

    همانطور که قبلاً ذکر شد، جاوا و سی شارپ دارای نحو بسیار مشابهی هستند - یکی را یاد گرفته، تقریباً دیگری را می شناسید. اما مانند مورد اول، نحو پیچیده‌تر از Ruby و Python است.

    3 میلیارد گوشی هوشمند اندرویدی در جهان وجود دارد که به این معنی است که جاوا برای مدت طولانی مورد تقاضا خواهد بود. اولین محبوبیت طبق نرم افزار TIOBE.

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


    نتیجه آماده سازی

    نتیجه گیری دشوار است. از یک طرف، توانایی کشتن دو پرنده با یک سنگ و گرفتن جاوا یا سی # صدا می کند، اما پایتون با تطبیق پذیری اش و روبی با سادگی صدا می زند.

    ما شک داشتیم و با توسعه دهندگان باتجربه صحبت کردیم - آنها همچنان توصیه می کنند در پایتون توقف کنید. در اینجا چیزی است که گریگوری پتروف، توسعه دهنده حرفه ای، مبشر VoxImplant می گوید:

    زبان برنامه نویسی پایتون اغلب به عنوان «شبه کد اجرایی» شناخته می شود، زیرا نحو و کتابخانه های استاندارد زبان بر خوانایی و قابل فهم بودن آن تأکید دارند. به این مجموعه گسترده ترین ابزارهای توسعه، کتابخانه ها، مواد آموزشی را اضافه کنید - و ما یکی از بهترین زبان های برنامه نویسی را برای مبتدیان داریم.

    نتیجه:در حالی که وظایف روشن و اهداف روشنی وجود ندارد، اما فقط میل به کدنویسی وجود دارد، ارزش توقف در پایتون را دارد - ساده، محبوب و جهانی است. نیکیتا سوبولف، معلم برنامه نویسی برای مبتدیان در #tceh نیز انتخاب این زبان را برای یک مبتدی بهینه می داند - برنامه آموزشی پیچیده تر و طولانی تر از دوره روبی بود، اما آزادی در انتخاب جهت ارزشش را دارد