پردازش تصاویر

پردازش تصاویر یکی از زمینه‌های عمده و خاص در پردازش علائم به حساب می‌آید که در آن داده‌های مورد پردازش و عمل‌آوری تصاویر و سیگنال‌های دو بعدی‌ست.






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







فشرده‌سازی داده‌ها

کدگذاری منبع روش‌های فشرده‌سازی یک منبع اطلاعات را مطالعه می‌کند. منابع اطلاعاتی طبیعی، مانند گفتار یا نوشتار انسان‌ها، دارای افزونگی است؛ برای مثال در جمله «من به خانه‌مان برگشتم» ضمایر «مان» و شناسه «م» در فعل جمله را می‌توان از جمله حذف نمود بدون اینکه از مفموم مورد نظر جمله چیزی کاسته شود. این توضیح را می‌توان معادل با انجام عمل فشرده سازی روی اطلاعات یک منبع اطلاعات دانست؛ بنابراین منظور از فشرده سازی اطلاعات کاستن از حجم آن به نحوی است که محتوی آن دچار تغییر نامناسبی نشود.

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

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

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






فشرده سازی بهینه در مقابل اتلافی

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

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

در عمل، فشرده سازی اتلافی نیز به مرحله‌ای می‌رسد که فشرده سازی مجدد دیگر تأثیری ندارد، هرچند یک الگوریتم بسیار اتلافی، مثلاً الگوریتمی که همواره بایت آخر فایل را حذف می‌کند، همیشه به مرحله‌ای می‌رسد که دیگر فایل تهی می‌شود.






الگوریتم‌ها و برنامه‌های اجرایی نمونه

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






نظریه

سابقهٔ نظری فشرده سازی برای فشرده سازی‌های بهینه توسط نظریهٔ اطلاعات (که رابطه نزدیکی با نظریهٔ اطلاعات الگوریتمی دارد) و برای فشرده سازی‌های اتلافی توسط نظریهٔ آهنگ-پیچیدگی ( Rate–distortion theory) ارائه شده‌اند. این شاخه‌های مطالعاتی در اصل توسط کلوده شانون( Claude Shannon)، که مقالاتی بنیادی در این زمینه در اواخر دهه‌ای ۱۹۴۰ و اوایل دههٔ ۱۹۵۰ به چاپ رسانده است به وجود آمده. "رمزنگاری" و "نظریهٔ رمزگذاری" نیز رابطه بسیار زیادی با این زمینه دارند. ایدهٔ فشرده سازی رابطهٔ عمیقی با آمار استنباطی دارد.







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






سطوح مقیاس‌ها

مقیاس‌های سنجش کیفیت‌ها را به سطوح زیر تقسیم‌بندی می‌کنند:

مقیاس اسمی (به انگلیسی: Nominal Scale)
مقیاس ترتیبی (به انگلیسی: Ordinal Scale)
مقیاس فاصله‌ای (به انگلیسی: Interval Scales)
مقیاس نسبی (به انگلیسی: Ratio Scales)







مقیاس‌های اسمی

مقیاس اسمی (Nominal Scale) ساده‌ترین و ابتدایی‌ترین مقیاس برای سنجش کیفیت‌ها است.دسته ها ی تقسیمی از لحاظ علامت کوچکتر و یا بزرگتر قابل مقایسه نیستند. به وسیله این مقیاس فقط بودن یا نبودن یک صفت سنجیده می‌شود.







خصوصیات

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







مقیاس ترتیبی

مقیاس‌های ترتیبی (Ordinal Scale) اندکی پیشرفته‌تر از مقیاس‌های اسمی هستند.







خصوصیات

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







مقیاس‌های فاصله‌ای

مقیاس فاصله‌ای (Interval Scale)، مقیاسی با درجات مساوی است مانند دماسنج.







خصوصیات

امکان رده‌بندی افراد جامه آماری در دو جهت (از پایین به بالا و از بالا به پائین) وجود دارد
به علت مساوی بودن درجات مقایسه داده‌ها امکان‌پذیر است
در مقیاس فاصله‌ای علاوه بر دارا بودن یا دارا نبودن یک صفت و شدت و ضعف آن در افراد جامعه آماری، می‌توان میزان بیشتر یا کمتر بودن یک صفت را بین افراد سنجید.

مقیاس‌های نسبی

مقیاس‌های نسبی (Ratio Scale) را می‌توان در واقع گونه‌ای از مقیاس‌های فاصله‌ای دانست. تنها تفاوت آن با مقیاس فاصله‌ای این است که مقیاس نسبی دارای نقطه صفر واقعی می­باشد. مبدأ سنجش، یک مبدأ واقعی یا به اصطلاح معمول «صفر مطلق» است؛ برای مثال در سنجش جمعیت یک روستا و یا سن و درآمد افراد، مبدأ سنجش صفر واقعی خواهد بود.






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






احتمالات

بطور ساده، احتمالات (به انگلیسی: Probability) به شانس وقوع یک حادثه گفته می‌شود.

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






نظریهٔ احتمالات

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

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

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

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

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

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

گذشته از کار ابتدایی توسط Girolamo Cardano در قرن 16 اصول احتمالات به مکاتبات پیر دو فرما و بلز پاسکال (1654). کریستین هویگنس (1657) اولین مدل شناخته شده علمی از این موضوع را داد. یاکوب برنولی ARS Conjectandi (منتشرشده پس ازمرگ،1713) و اصول شانس Abraham de Moivre (1718) این موضوع را به عنوان شاخه ای از ریاضیات مطرح می کند. برای تاریخچه ای از توسعه های اولیه مفهوم احتمال ریاضی، ظهور احتمال هک ایان و علم حدس جیمز فرانکلین را ببینید.

تئوری خطاها ممکن است از Roger Cotes's Opera Miscellanea (منتشرشده پس ازمرگ،1722) سرچشمه گرفته باشد، اما شرح حالی که توماس سیمپسون در سال 1755 آماده کرد(چاپ 1756)، برای اولین بار اعمال این نظریه به بحث در مورد خطاهای مشاهده است. چاپ مجدد (1757) این شرح حال نشان می دهد که خطاهای مثبت و منفی هر دو به یک اندازه قابل پیشبینی هستند، و با اختصاص برخی از محدودیت های معین، بازه ای برای تمام خطاها ارائه می دهد.سیمپسون همچنین در مورد خطاهای پیوسته بحث می کند و یک منحنی احتمال را توصیف می کند.

پیر سیمون لاپلاس(1774) برای اولین بار سعی دراستنتاج قانونی برای توصیف مشاهدات از نظر اصول تئوری احتمالات کرد. او قانون احتمال خطاها را با یک منحنی به صورت y = \phi(x), x ، x هر نوع خطا و y احتمال آن معرفی می کند و 3 خاصیت برای این منحنی وضع می کند:

نسبت به محور y متقارن است
محور x مجانب است، احتمال خطا در \infty صفر است
مساحت زیر نمودار آن برابر 1 است.

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

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






تفسیرها و تحلیل‌های مفاهیم احتمالات

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

Frequentists
Subjectivists
Bayesians







کاربردها

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

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

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






علوم اجتماعی

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







نظریه احتمالات

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






پیشینه

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






مفهوم

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






آزمایش تصادفی

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






فضای نمونه

به مجموعه‌ای از تمام نتایج ممکن در یک آزمایش تصادفی فضای نمونه می‌گویند.






کاربرد احتمال در زندگی

یک تأثیر مهم نظریه احتمال در زندگی روزمره در ارزیابی ریسک پذیری و در تجارت در مورد خرید و فروش اجناس می‌باشد. حکومت‌ها به طور خاص روشهای احتمال را در تنظیم جوامع اعمال می‌کنند که به عنوان «آنالیز خط مشی» نامیده می‌شود و غالباً سطح رفاه را با استفاده از متدهایی که در طبیعت تصادفی اند اندازه می‌گیرند و برنامه‌هایی را انتخاب می‌کنند تا اثر احتمال آن‌ها را روی جمعیت به صورت کلی از نظر آماری ارزیابی کنند. این گفته صحیح نیست که آمار، خود در مدل سازی درگیر هست زیرا که ارزیابی‌های میزان ریسک وابسته به زمان هستند و بنابراین مستلزم مـدل‌های احتمال قوی تر هستند؛ مثلاً «احتمال۹/۱۱ دیگری»؛ قانون اعداد کوچک در جنین مواردی اعمال می‌شود و برداشت اثر چنین انتخاب‌هایی است که روش‌های آماری را به صورت یک موضوع سیاسی در می‌آورد.

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

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

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






نقد ها
تصمیم گیری یا عدم تصمیم گیری

یکی از نقد هایی که به نظریه ی احتمال وارد است، مبتنی بودن آن بر فراوانی نسبی یک پیشامد به عنوان احتمال رخداد آن است. به دیگر بیان، نظریه احتمال، احتمال رخداد یک پیشامد را معادل با ایمان ما نسبت به رخداد آن پدیده می داند و ایمان به نسبت به رخداد آن پیشامد را معادل فراوانی نسبی آن پدیده در یک آزمایش آماری میداند.. در این اعتقاد دو ایراد فلسفی وجود دارد: اولا: ایمان ما نسبت به رخداد یک پیشامد برابر با احتمال رخداد پیشامد در نظر گرفته شده است. این به این معناست که ایمان درونی انسان به رخداد یک پیشامد برابر با احتمال حقیقتی است که در بیرون رخ خواهد داد. که این تطابق، فاقد هر گونه توجیه منطقی است. ثانیا: احتمال رخداد را برابر با فراوانی نسبی آن پیشامد در آزمایش آماری در نظر می گیرد که این نیز محل بحث است. به عنوان مثال فرض کنید که شما در بازی قماری شرکت کرده اید که با محاسبه ی احتمال ها بر اساس تئوری موجود، احتمال پیروزی شما 2/3 است. لذا سرمایه گذاری در این قمار در 2/3 اوقات به نفع شماست. فرض کنید که بازی 15 دور است. در این صورت شما باید 10 دور این بازی را احتمالا پیروز شوید. شما بازی را شروع می کنید و تا دور 11_ام شکست می خورید و و دور 12 را می برید و دور 13 و 14 را شکست می خورید و دور 15_ام را می برید. این اتفاق یک اتفاق کاملا "ممکن" است. در این صورت شما 0.36- = 13/15 - 1/2 واحد از سرمایه ی خود را از دست داده اید. توجیهی که احتمال دان ها می آورند این است: "اگر تعداد دور ها به بی نهایت میل می کرد شما در 2/3 حالات برنده بودید." در صورتی که در جهان واقعی هیچ گاه بازی هایی با تعداد دور بی نهایت وجود ندارد." در تصمیم گیری های اجتماعی و سیاسی نیز همین امر برقرار است. ریسک سرمایه گزاری بر اساس این نظریه در نظر گرفتنی است. اما این مساله و شبیه این مساله ها با "نظریه امکان" با دیدگاهی کاملا منطقی قابل بررسی، تحلیل و تصمیم گیری است.






عدم وجود تصادف

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

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

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

3- فرآیند هایی که تصادفی بودن آنها به علت وجود اراده ی یک موجود مختار است. مانند پرتاب یک سکه. و یا اکثر فرایند های اجتماعی و انسانی.

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






اعداد تصادفی

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






کاربرد در محاسبات

برای به دست آوردن مقادیر تصادفی در ماشین حساب‌ها و برنامه نویسی از متد تایمر استفاده می‌شود. برای مثال، اکس ثانیه، عدد(۷.)۹ را در خروجی نمایش می‌دهد، که می‌تواند به صورت زیر نوشته شود:(زبان برنامه: Visual Basic ۶)

Dim rNum as Long

MyRN.Caption = Rnd(rNum) * 10

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

Dim rNum as Long

Randomize

MyRN.Caption = Rnd(rNum) * 10

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







توان آماری

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

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

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

در مطالعات با توان آماری بالا، خیلی کم پیش میاید که در تشخیص اثرات تمرین اشتباه کنند.

توان یک تست آماری، شامل عملکردِ: حساسیت، اندازه اثر در جمیعت آماری، و استاندارد های استفاده شده برای اندازه گیری فرضیه آماری است. - ساده ترین راه برای افزایش حساسیت یک تحقیق، افزایش تعداد آزمودنی هاست. - در مورد استاندارد، ساده تر آن است که فرضیه صفر را رد کنیم اگر سطح معناداری، ۰.۰۵ باشد تا ۰.۰۱ یا ۰.۰۰۱.

سه قدم برای تعین توان آماری: ۱- مشخص کردن حد، برای معنی دار بودن آماری. فرضیه چیست؟ سطح معناداری چقدر است؟

۲- حدس زدن اندازه اثر. انتظار دارد که درمان(treatment)، دارای اثری کم، زیاد، یا متوسط باشد؟






توزیع احتمال
در نظریه احتمال و آمار تابع توزیع احتمال بیانگر احتمال هر یک از مقادیر متغیر تصادفی (در مورد متغیر گسسته) و یا احتمال قرار گرفتن متغیر در یک بازه مشخص (در مورد متغیر تصادفی پیوسته) میباشد. توزیع تجمعی احتمال یک متغیر تصادفی تابعی است از دامنهٔ آن متغیر بر بازهٔ 0,1. به طوری که احتمال رخدادن پیشامدهای با مقدار عددی کمتر از آن را نمایش می‌دهد.







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







تولید اعداد تصادفی

یک تولیدکننده اعداد تصادفی (به انگلیسی: Random Number Generation، به‌اختصار:RNG) وسیله‌ای فیزیکی و یا روشی محاسباتی است که برای تولید دنباله‌ای از اعداد که الگوی خاصی ندارند (یعنی بطور تصادفی ظاهر شده‌اند) به کار می‌رود.

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

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






روش‌های فیزیکی

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

همانطور که اشاره شد، الگوهای طبیعی جالبی برای تولید اعداد تصادفی وجود دارد؛ یک روش متداول استفاده از یک تابع درهم ساز (که ورودی اش جریانی از فریم‌های ویدئوییٍ یک منبع غیر قابل پیش بینی می‌باشد) است. به عنوان مثال لاواراند (Lavarand)از تصاویر تعدادی لامپ لاوا(Lava Lamps) استفاده کرد. Lithium Technologies از تصاویر آسمان و Random.org از صداهای آشفته جوی استفاده می‌کند.






روش‌های محاسبه‌ای

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

یک روش ساده که با قلم و کاغذ نیز قابل اجراست روش میانه مربع (Middle Square Method) است که توسط جان فون نیومن (John Von Neumann) ابداع شد که بسیار ساده‌است ولی اعداد تولیدی آن از لحاظ آماری کیفیت خوبی ندارند.

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






کاربردهای اعداد تصادفی

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

کتابهای بسیاری نیز در همین مورد نوشته شده‌اند.

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







تولید اعداد تصادفی در رایانه

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

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

هر بار که این تابع صدا زده می‌شود، رایانه عدد تولید شدهٔ پیشین را به عنوان ورودی جدید تابع تولید عدد تصادفی می‌فرستد. منشاء مشکل نیز در همین مرحله است.

هر بار که این تابع صدا زده شود، بر اساس ماهیت جبری ماشین و با توجه به مقدار اولیهٔ فرستاده شده به تابع تولید عدد تصادفی (seed) باید با یک دنباله از اعداد مشابه یکدیگر مواجه شویم.






چگونه مقدار اولیه مناسب را پیدا کنیم؟

در برنامه‌نویسی به عنوان مثال برای نوشتن یک بازی راه‌حل‌های گوناگونی مانند قرار دادن مقدار اولیه برابر با تعداد بازی‌های انجام شده بر روی رایانه و یا ذخیرهٔ خروجی آخرین seed از برنامهٔ قبلی در حال اجرا است. با اینحال کماکان مشکل مقدار دهی اولین seed پابرجاست.






اولین مقدار اولیه

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

در همان زبان برنامه‌نویسی جاوا که به عنوان نمونه آورده شد، ورودی Constructor یک عدد از نوع اولیهٔ long به عنوان ورودی می‌گیرد. این عدد long یک عدد ۶۴ بیتی در جاوا است که خود باعث محدود شدن seed و امکان به وجود آمدن اعداد تصادفی برابر را فراهم می‌سازد. بنابر این مشکل کاملاً حل نشده‌است.
10:10 pm
کاربرد برنامه نویسی

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





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

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

یک سیر رایج در گسترش زبان‌های برنامه نویسی این است که قابلیت حل مسائلی با درجات انتزاعی بالاتری را اضافه کنند. زبان‌های برنامه نویسی اولیه به سخت‌افزار رایانه گره خورده بودند. همانطور که زبان‌های برنامه نویسی جدید گسترش پیدا کرده‌اند، ویژگی‌هایی به برنامه‌ها افزوده شده که به برنامه نویس اجازه دهد که ایده‌هایی که از ترجمه ساده به دستورات سخت‌افزار دورتر هستند نیز استفاده کند. چون برنامه نویس‌ها کمتر به پیچیدگی رایانه محدود شده‌اند، برنامه‌های آنها می‌تواند محاسبات بیشتری با تلاش کمتر از سوی برنامه نویس انجام دهند. این به آنها این امکان را می‌دهد که کارایی بیشتردر واحد زمان داشته باشند. "پردازنده‌های زبان طبیعی" به عنوان راهی برای ازبین بردن نیاز به زبان‌های اختصاصی برنامه نویسی پیشنهاد شده‌اند. هرچند، این هدف دور است و فواید آن قابل بحث است. "ادسگر دیجسترا" موافق بود که استفاده از یک زبان رسمی برای جلوگیری از مقدمه سازی ساختارهای بی معنی واجب است، و زبان برنامه نویسی طبیعی را با عنوان "احمقانه" رد کرد، "آلن پرلیس" نیز مشابها این ایده را رد کرد. مطابق با متدولوژی نامتجانس استفاده شده توسط langpop.com در سال ۲۰۰۸، ۱۲ زبان پرکاربرد عبارتند از: C, C++, C#, Java, JavaScript, Perl, PHP, Python, Ruby, Shell, SQL, and Visual Basic.



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

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

دستور زبان برنامه نویسی معمولاً بوسیله ترکیب عبارات معین(برای ساختار لغوی) و فرم توضیح اعمال(برای ساختار گرامری) تعریف می‌شوند. متن زیر یک گرامر ساده، به زبان lisp است: expression ::= atom | list atom ::= number | symbol number ::= [+-]?['۰'-'۹']+ symbol ::= ['A'-'Za'-'z'].* list ::= '(' expression* ')' این گرامر موارد ذیل را مشخص می‌کند:

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

"۱۲۳۴۵"، "()"، "(a b c۲۳۲ (۱))" مثال‌هایی هستند از دنباله‌های خوش فرم در این گرامر.

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

به عنوان مثال در زبان طبیعی، ممکن نیست به برخی از جملات درست از لحاظ گرامری، معنای خاصی اطلاق کرد و یا ممکن است جمله نادرست باشد:

"ایده‌های بی رنگ سبز با خشم می‌خوابند."از نظر دستوری خوش فرم است ولی معنای مورد قبولی ندارد.
"جان یک مجرد متاهل است." از نظر دستوری درست است، ولی معنایی را بیان می‌کند که نمی‌تواند درست باشد.

این قسمت از زبان C از نظر دستوری درست است، اما دستوری را انجام می‌دهد که از نظرمعنایی تعریف نشده است(چون p یک اشاره گر خالی است، عمل p->real,p->im معنای خاصی ندارد.) complex *p = NULL; complex abs_p = sqrt (p->real * p->real + p->im * p->im);

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




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


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

یک زبان نوع گذاری شده‌است اگر مشخصات هر عملیات، نوع داده‌های قابل اجرا توسط آن را با نشان دادن نوع‌هایی که برای آنها قابل اجرا نیست، تعیین کند. برای مثال، "این متن درون گیومه قرار دارد" یک رشته‌است. در غالب زبان‌های برنامه نویسی، تقسیم یک رشته با یک عدد معنایی ندارد. در نتیجه غالب زبان‌های برنامه نویسی مدرن ممکن است اجرای این عملیات را توسط برنامه‌ها رد کنند. در برخی زبان‌ها، عبارات بی معنی ممکن است هنگام ترجمه(compile) پیدا شود(چک کننده نوع ایستا)، و توسط کامپایلر رد شود، در حالی که در سایر برنامه‌ها، هنگام اجرا پیدا شود.(چک کننده نوع دینامیک) که به استثنای در حال اجرا منتج شود(runtime exception). حالت خاص زبان‌های نوع دار زبان‌های تک نوعند. این زبان‌ها غالباً اسکریپتی و یا مارک آپ هستند، مانند rexx وSGML و فقط یک داده گونه دارند—غالباً رشته‌های کاراکتری که هم برای داده‌های عددی و هم برای داده‌های سمبلی کاربرد دارند. در مقابل، یک زبان بدون نوع گذاری، مثل اکثر زبان‌های اسمبلی، این امکان را می‌دهد که هر عملیاتی روی هر داده‌ای انجام شود، که معمولاً دنباله‌ای از بیت‌ها با طول‌های متفاوت در نظر گرفته می‌شوند. زبان‌های سطح بالا که بی نوع هستند شامل زبان‌های ساده رایانه‌ای و برخی از انواع زبان‌های نسل چهارم.

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



نوع گذاری ایستا و متحرک

در نوع گذاری ایستا تمام عبارات نوع‌های خود را قبل از اجرای برنامه تعیین می‌کنند(معمولاً در زمان کامپایل). برای مثال، ۱ و (۲+۲) عبارات عددی هستند؛ آنها نمی‌توانند به تابعی که نیاز به یک رشته دارد داده شوند، یا در متغیری که تعریف شده تا تاریخ را نگه دارد، ذخیره شوند.


زبان‌های نوع گذاری شده ایستا می‌توانند با مانیفست نوع گذاری شوند یا با استفاده از نوع استنباط شوند. در حالت اول، برنامه نویس بیشتر صریحاً نوع‌ها را در جایگاه‌های منتنی مشخص می‌نویسد(برای مثال، در تعریف متغیرها). در حالت دوم، کامپایلر نوع عبارات و تعریف‌ها را بر اساس متن استنباط می‌کند. غالب زبان‌های مسیر اصلی(mainstream) ایستا نوع گذاری شده، مانند C#,C++ و Java، با مانیفست نوع گذاری می‌شوند



نوع گذاری قوی و ضعیف

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

نوع گذاری قوی مانع رخ دادن مشکل فوق می‌شود. تلاش برای انجام عملیات روی نوع نادرست متغیر منجر به رخ دادن خطا می‌شود. زبان‌هایی که نوع گذاری قوی دارند غالباً با نام "نوع-امن" و یا امن شناخته می‌شوند. تمام تعاریف جایگزین برای "ضعیف نوع گذاری شده" به زبان‌ها اشاره می‌کند، مثل perl, JavaScript, C++، که اجازه تعداد زیادی تبدیل نوع داخلی را می‌دهند. در جاوااسکریپت، برای مثال، عبارت ۲*x به صورت ضمنی x را به عدد تبدیل می‌کند، و این تبدیل موفقیت آمیز خواهد بود حتی اگر x خالی، تعریف نشده، یک آرایه، و یا رشته‌ای از حروف باشد. چنین تبدیلات ضمنی غالباً مفیدند، اما خطاهای برنامه نویسی را پنهان می‌کنند.

قوی و ایستا در حال حاضر عموماً دو مفهوم متعامد فرض می‌شوند، اما استفاده در ادبیات تفاوت دارد، برخی عبارت "قوی نوع گذاری شده" را به کار می‌برند و منظورشان قوی، ایستایی نوع گذاری شده‌است، و یا، حتی گیچ کننده تر، منظورشان همان ایستایی نوع گذاری شده‌است. بنابراین C هم قوی نوع گذاری شده و هم ضعیف و ایستایی نوع گذاری شده نامیده می‌شود.



معناشناسی اجرا

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

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


کتابخانه هسته
اغلب زبان‌های برنامه نویسی یک کتابخانه هسته مرتبط دارند(گاهی اوقات "کتابخانه استاندارد" نامیده می‌شوند، مخصوصا وقتی که به عنوان قسمتی از یک زبان استاندارد ارائه شده باشد)، که به طور قراردادی توسط تمام پیاده سازی‌های زبان در دسترس قرار گرفته باشند. کتابخانه هسته معمولاً تعریف الگوریتم‌ها، داده ساختارها و مکانیزم‌های ورودی و خروجی پرکاربرد را در خود دارد. کاربران یک زبان، غالباً با کتابخانه هسته به عنوان قسمتی از آن رفتار می‌کنند، اگرچه طراحان ممکن است با آن به صورت یک مفهوم مجزا رفتار کرده باشند. بسیاری از خصوصیات زبان هسته‌ای را مشخص می‌کنند که باید در تمام پیاده سازی‌ها موجود باشند، و در زبان‌های استاندارد شده این کتابخانه هسته ممکن است نیاز باشد. بنابراین خط بین زبان و کتابخانه هسته آن از زبانی به زبان دیگر متفاوت است. درواقع، برخی زبان‌ها به گونه‌ای تعریف شده‌اند که برخی از ساختارهای دستوری بدون اشاره به کتابخانه هسته قابل استفاده نیستند. برای مثالف در جاوا، یک رشته به عنوان نمونه‌ای از کلاس “java.lang.String” تعریف شده است؛ مشابها، در سمال تاک(smalltalk) یک تابع بی نام(یک "بلاک") نمونه‌ای از کلاس BlockContext کتابخانه می‌سازد. بطور معکوس، Scheme دارای چندین زیرمجموعه مرتبط برای ایجاد سایر ماکروهای زبان می‌باشد، و در نتیجه طراحان زبان حتی این زحمت را نیز تحمل نمی‌کنند که بگویند کدام قسمت زبان به عنوان ساختارهای زبان باید پیاده سازی شوند، و کدام یک به عنوان بخشی ازکتابخانه.


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



خصوصیات

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

تعریف صریح دستور، معناشناسی ایستا، ومعناشناسی اجرای زبان. درحالیکه دستور معمولاً با یک معناشناسی قراردادی مشخص می‌شود، تعاریف معناشناسی ممکن است در زبان طبیعی نوشته شده باشند (مثل زبان C)، یا معناشناسی قراردادی(مثل StandardML ,Scheme)
توضیح رفتار یک مترجم برای زبان(مثل C,fortran). دستور و معناشناسی یک زبان باید از این توضیح استنتاج شوند، که ممکن است به زبان طبیعی یا قراردادی نوشته شود.
پیاده سازی منبع یا مدل. گاهی اوقات در زبان‌های مشخص شده(مثل: prolog,ANSI REXX).دستور و معناشناسی صریحاً در رفتار پیاده سازی مدل موجودند.


پیاده سازی

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

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

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

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



تاریخچه
پیشرفت‌های اولیه

اولین زبان برنامه نویسی به قبل از رایانه‌های مدرن باز می‌گردد. قرن ۱۹ دستگاه‌های نساجی و متون نوازنده پیانو قابل برنامه نویسی داشت که امروزه به عنوان مثال‌هایی از زبان‌های برنامه نویسی با حوزه مشخص شناخته می‌شوند. با شروع قرن بیستم، پانچ کارت‌ها داده را کد گذاری کردند و پردازش مکانیکی را هدایت کردند. در دهه ۱۹۳۰ و ۱۹۴۰، صورت گرایی حساب لاندای آلونزو چرچ و ماشین تورینگ آلن تورینگ مفاهیم ریاضی بیان الگوریتم‌ها را فراهم کردند؛ حساب لاندا همچنان در طراحی زبان موثر است.

در دهه ۴۰، اولین رایانه‌های دیجیتال که توسط برق تغذیه می‌شدند ایجاد شدند. اولین زبان برنامه نویسی سطح بالا طراحی شده برای کامپیوتر پلانکالکول بود، که بین سال‌های ۱۹۴۵ و ۱۹۴۳ توسط کنراد زوس برای ز۳ آلمان طراحی شد.

کامپیوترهای اوایل ۱۹۵۰، بطور خاص ÜNIVAC ۱ و IBM ۷۰۱ از برنامه‌های زبان ماشین استفاده می‌کردند. برنامه نویسی زبان ماشین نسل اول توسط نسل دومی که زبان اسمبلی نامیده می‌شوند جایگزین شد. در سال‌های بعد دهه ۵۰، زبان برنامه نویسی اسمبلی، که برای استفاده از دستورات ماکرو تکامل یافته بود، توسط سه زبان برنامه نویسی سطح بالا دیگر: FORTRAN,LISP , COBOL مورد استفاده قرار گرفت. نسخه‌های به روز شده این برنامه‌ها همچنان مورد استفاده قرار می‌گیرند، و هر کدام قویا توسعه زبان‌های بعد را تحت تاثیر قرار دادند. در پایان دهه ۵۰ زبان algol ۶۰ معرفی شد، و بسیاری از زبان‌های برنامه نویسی بعد، با ملاحظه بسیار، از نسل algol هستند. قالب و استفاده از زبان‌های برنامه نویسی به شدت متاثر از محدودیت‌های رابط بودند.



پالایش

دوره دهه ۶۰ تا اواخر دهه ۷۰ گسترش مثال‌های عمده زبان پرکاربرد امروز را به همراه داشت. با این حال بسیاری از جنبه‌های آن بهینه سازی ایده‌های اولیه نسل سوم زبان برنامه نویسی بود:

APL برنامه نویسی آرایه‌ای را معرفی کرد و برنامه نویسی کاربردی را تحت تاثیر قرار داد.
PL/i(NPL) دراوایل دهه ۶۰ طراحی شده بود تا ایده‌های خوب فورترن و کوبول را بهم پیوند دهد.
در دهه ۶۰، Simula اولین زبانی بود که برنامه نویسی شئ گرا را پشتیبانی می‌کرد، در اواسط دهه۷۰. Smalltalk به دنبال آن به

عنوان اولین زبان کاملاً شئ گرا معرفی شد.

C بین سال‌های ۱۹۶۹ تا ۱۹۷۳ به عنوان زبان برنامه نویسی سیستمی طراحی شد و همچنان محبوب است.
Prolog، طراحی شده در ۱۹۷۲، اولین زبان برنامه نویسی منطقی بود.
در ۱۹۷۸ ML سیستم نوع چند ریخت روی لیسپ ایجاد کرد، و در زبان‌های برنامه نویسی کاربردی ایستا نوع گذاری شده پیشگام شد.

هر یک از این زبان‌ها یک خانواده بزرگ از وارثین از خود به جای گذاشت، و مدرنترین زبان‌ها از تبار حداقل یکی از زبان‌های فوق به شمار می‌آیند.

دهه‌های ۶۰ و ۷۰ مناقشات بسیاری روی برنامه نویسی ساخت یافته به خود دیدند، و اینکه آیا زبان‌های برنامه نویسی باید طوری طراحی شوند که آنها را پشتیبانی کنند.

"ادسگر دیکسترا" در نامه‌ای معروف در ۱۹۶۸ که در ارتباطات ACM منتشر شد، استدلال کرد که دستورgoto باید از تمام زبان‌های سطح بالا حذف شود.

در دهه‌های ۶۰ و ۷۰ توسعهٔ تکنیک‌هایی صورت گرفت که اثر یک برنامه را کاهش می‌داد و در عین حال بهره وری برنامه نویس و کاربر را بهبود بخشید. دسته کارت برای ۴GL اولیه بسیار کوچکتر از برنامهٔ هم سطح بود که با ۳GL deck نوشته شده بود.




یکپارچگی و رشد

دهه ۸۰ سال‌های یکپارچگی نسبی بود. C++ برنامه نویسی شئ گرا و برنامه نویسی سیستمی را ترکیب کرده بود. ایالات متحده ایدا(زبان برنامه نویسی سیستمی که بیشتر برای استفاده توسط پیمان کاران دفاعی بود) را استاندارد سازی کرد. در ژاپن و جاهای دیگر، هزینه‌های گزافی صرف تحقیق در مورد زبان نسل پنجم می‌شد که دارای ساختارهای برنامه نویسی منطقی بود. انجمن زبان کاربردی به سمت استانداردسازی ML و Lisp حرکت کرد. به جای ایجاد مثال‌های جدید، تمام این تلاش‌ها ایده‌هایی که در دهه‌های قبل حلق شده بودند را بهتر کرد.

یک گرایش مهم در طراحی زبان در دهه ۸۰ تمرکز بیشتر روی برنامه نویسی برای سیستم‌های بزرگ از طریق مدول‌ها، و یا واحدهای کدهای سازمانی بزرگ مقیاس بود. مدول-۲، ایدا. و ML همگی سیستم‌های مدولی برجسته‌ای را در دهه ۸۰ توسعه دادند. با وجود اینکه زبان‌های دیگر، مثل PL/i، پشتیبانی بسیار خوبی برای برنامه نویسی مدولی داشتند. سیستم‌های مدولی غالباً با ساختارهای برنامه نویسی عام همراه شده‌اند.

رشد سریع اینترنت در میانه دهه ۹۰ فرصت‌های ایجاد زبان‌های جدید را فراهم کرد. Perl، در اصل یک ابزار نوشتن یونیکس بود که اولین بار در سال ۱۹۸۷ منتشر شد، در وب‌گاه‌های دینامیک متداول شد. جاوا برای برنامه نویسی جنب سروری مورد استفاده قرار گرفت. این توسعه‌ها اساساً نو نبودند، بلکه بیشتر بهینه سازی شده زبان و مثال‌های موجود بودند، و بیشتر بر اساس خانواده زبان برنامه نویسی C بودند. پیشرفت زبان برنامه نویسی همچنان ادامه پیدا می‌کند، هم در تحقیقات و هم در صنعت. جهت‌های فعلی شامل امنیت و وارسی قابلیت اعتماد است، گونه‌های جدید مدولی(mixin، نماینده‌ها، جنبه‌ها) و تجمع پایگاه داده.

۴GLها نمونه‌ای از زبان‌هایی هستند که محدوده استفاده آنها مشخص است، مثل SQL. که به جای اینکه داده‌های اسکالر را برگردانند، مجموعه‌هایی را تغییر داده و بر می‌گردانند که برای اکثر زبان‌ها متعارفند. Perl برای مثال، با "مدرک اینجا" خود می‌تواند چندین برنامه ۴GL را نگه دارد، مانند چند برنامه جاوا سکریبت، در قسمتی از کد پرل خود و برای پشتیبانی از چندین زبان برنامه نویسی با تناسب متغیر در "مدرک اینجا" استفاده کند.




سنجش استفاده از زبان

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

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

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

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

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

یک زبان برنامه نویسی ممکن است با فاکتورهای غیر مرتبط به مثال‌های برنامه نویسی دسته بندی شود. برای مثال، غالب زبان‌های برنامه نویسی کلمات کلیدی زبان انگلیسی را استفاده می‌کنند، در حالیکه تعداد کمی این کار را نمی‌کنند. سایر زبان‌ها ممکن است براساس داخلی بودن یا نبودن دسته بندی شوند.
ساعت : 10:10 pm | نویسنده : admin | تک گرافیک | مطلب قبلی
تک گرافیک | next page | next page