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

در این مبحث، با استفاده از خاصیتهای میکروسکوپی این ذرات مانند ساختار اتمی و برهمکنش بین آنها، اطلاعاتی در مورد خواص ماکروسکوپی سیستم مانند فشار، انتروپی و انرژی آزاد گیبس، از طریق محاسبات و روشهای آماری به دست میآید. مثلاً معادلههای حالت در ترمودینامیک توسط مدلهای میکروسکوپی-آماری مشتق میشوند.
مکانیک آماری شکوفایی خود را قبل از همه، مدیون دانشمندان کلاسیکی نظیر لودویگ بولتزمان، جوسایا ویلارد گیبز و جیمز کلرک ماکسول میباشد.
میانهها و شاخصهای آماری
میانهها وشاخصهای آماری ترتیبی
iامین شاخص آمار ترتیبی یک مجموعه n عضوی، iامین عضو کوچک است. به عنوان مثال، مینیمم یک مجموعه از اعضا، اولین شاخص آمار ترتیبی (i=۱)است و ماکزیمم، nامین شاخص آمار ترتیبی (i=n)است. میانه، به طور غیر رسمی، نقطهٔ میانی مجموعهاست. هنگامی که n فرد است، میانه منحصر به فرد است که در i=(n+۱)/۲ رخ میدهد. وقتی n زوج است، دو میانه وجود دارند که در i=n/۲ و i=n/۲+۱ رخ میدهند. این مقاله انتخاب iامین شاخص آمار ترتیبی از یک مجموعه با n عضو مجزا را بیان میکند. مسئله انتخاب میتواند به طور رسمی به شکل زیر تعیین شود: ورودی: مجموعه A با n عدد(مجزا) و عدد i، که i بزرگتر یا مساوی ۱ و کوچکتر یا مساوی با n است. خروجی: عضو x در A که بزرگتر از دقیقا i-۱ عضو دیگر A میباشد. مسئله انتخاب میتواند در زمان (O(nlgn حل شود، چون میتوانیم اعداد را با استفاده از مرتب سازی دودویی (heap sort) یا مرتب سازی ادغام مرتب کنیم و سپس به سادگی iامین عنصر در آرایه خروجی را مشخص کنیم اما الگوریتمهای سریع تری وجود دارند. ابتدا مسئله انتخاب مینمم و ماکزیمم یک مجموعه از اعضا را بررسی میکنیم. مسئله جالب تر، مسئله انتخاب کلی است، که دردوقسمت بررسی میشود.قسمت اول یک الگوریتم عملی را تحلیل میکند که در حالت میانگین به زمان اجرای (O(n میرسد. قسمت بعد یک الگوریتم است که جنبههای نظری بیشتری داشته و در بدترین حالت به زمان اجرای (O(n میرسد.
مینیمم و ماکزیمم
چه تعداد مقایسه برای تعیین یک مجموعه n عضوی لازم است؟ میتوانیم به سادگی به حد بالای n-۱ برای مقایسهها برسیم: هر عضو مجموعه را به ترتیب بررسی کرده و کوچکترین عضوی که تا کنون دیده شدهاست را نگه میداریم. در روال زیر، فرض میکنیم مجموعه در آرایه A قرار دارد، که طول آرایه n است. قطعا یافتن ماکزیمم میتواند با n-۱ مقایسه نیز انجام شود. آیا این بهترین کاری است که میتوانیم انجام دهیم؟ بله، چون میتوانیم به حد پایین n-۱ برا مقایسهها برای مینممم برسیم. الگوریتم را در نظر بگیرید که مینیمم را به صورت مسابقهای بین عناصر تعیین میکند. هر مقایسه یک بازی در مسابقهاست که در آن عنصر کوچکتر از میان دو عنصر، برنده میشود. نگرش اصلی این است که هر عنصر به جز برنده باید حداقل یک بازی را ببازد. از این رو n-۱ مقایسه برای تعیین مینیمم لازم است.
مینیمم و ماکزیمم هم زمان
در برخی کاربردها، باید هم مینیمم و هم ماکزیمم یک مجموعه از n عضو را پیدا کنیم. ارائه الگوریتمی که بتواند هم مینیمم و هم ماکزیمم n عضو را با استفاده از (θ(nمقایسه، که به طور مجانبی بهینهاست، پیدا کند سخت نیست. به سادگی مینیمم و ماکزیمم را به طور مستقل، با استفاده از n-۱ مقایسه برای هر یک پیدا میکند، که در کل ۲n-۲ مقایسه انجام میدهد. در حقیقت، حداکثر ۳n/۲ مقایسه برای پیدا کردن مینیمم و ماکزیمم کافی است. استراتژی این است که اعضای مینیمم و ماکزیمم را که تا این جا دیده شدهاند نگه داریم. به جای این که هر عضو ورودی را با مقایسه با مینیمم و ماکزیمم فعلی پردازش کنیم، که هزینه ۲ مقایسه برای هر عضو را صرف میکند، اعضا را جفت به جفت مقایسه میکنیم. ابتدا جفت عضوها را از ورودی با یکدیگر مقایسه میکنیم و سپس عضو کوچکتر را با مینیمم جاری و عضو بزرگتر را با ماکزیمم جاری مقایسه میکنیم که هزینه ۳ مقایسه برای هر دو عضو را موجب میشود.
انتخاب در زمان خطی مورد انتظار
مسئله انتخاب کلی نسبت به مسئله پیدا کردن یک مینیمم سخت تر به نظر میآیدو هم چنان که به صورت شگفت آوری زمان اجرای مجانبی هر دو مسئله یکی است: (θ(n.در این بخش یک الگوریتم تقسیم و حل را برای مسئله انتخاب ارائه می دهیم. الگوریتم Randomized-Select بعد از الگوریتم مرتب سازی سریع مدل میشود. همانند مرتب سازی سریع ایده آن است که آرایه ورودی را به طور بازگشتی تقسیم کنیم. ولی برخلاف مرتب سازی سریع که هر دو طرف تقسیم بندی را به صورت بازگشتی پردازش میکند، Randomized-Select فقط روی یک طرف تقسیم بندی عمل میکند. این تفاوت در تحلیل آشکار میشود. در حالی که زمان اجرای مورد انتظار مرتب سازی سریع (θ(nlgn است، زمان مورد انتظار این الگوریتم (θ(nاست. Randomized-Select از روال Randomized-Partition که در بخش مرتب سازی سریع معرفی شد استفاده میکند.
انتخاب در بدترین حالت زمان خطی
اکنون الگوریتمی را بررسی می کنیم که زمان اجرای آن در بدترین حالت (O(nاست. مانند Randomized-Select، الگوریتم Select عنصر مورد نظر را با تقسیم بندی بازگشتی آرایه ورودی پیدا میکند. اما ایدهای که پشت این الگوریتم وجود دارد، این است که یک قسمت خوب را در هنگامی که آرایه تقسیم میشود تضمین میکند. Select از الگوریتم تقسیم بندی قطعی Partition مربوط به مرتب سازی سریع استفاده میکند که طوری تغییر یافته است که عنصری که تقسیم بندی حول آن انجام میشود را به عنوان پارامتر ورودی بگیرد. این الگوریتم iامین عنصر کوچک از آرایه ورودی با n>1 عنصر را با اجرای مراحل زیر تعیین میکند.(اگر n=1باشد آن گاه Select به طور مطلق، تنها ورودیش را به عنوان iامین عنصر کوچک برمی گرداند.)
n عنصرآرایه ورودی را بهn/5 گروه 5 عنصری تقسیم کنید و حداکثر یک گروه از n mod 5 عنصر باقیمانده ساخته میشود.
میانه هر یک از n/5گروه را ابتدا با مرتب ساز درجی عناصر هر گروه (که حداکثر 5 عنصر در هر یک وجود دارد)و سپس انتخاب میانه از لیست مرتب شده عناصر گروه پیدا کنید.
از Select به صورت بازگشتی برای پیدا کردن میانه x از n/5میانهای که در مرحله 2 پیدا شدند استفاده کنید.
آرایه ورودی را حول میانهٔ میانهها (یعنی x)با استفاده از نسخه تغییر یافته Partition تقسیم کنید. فرض کنید k یک واحد بیشتر از تعداد عناصر در طرف کم تر تقسیم بندی باشد، بنابراین k، x امین عنصر کوچک است و n-k عنصر در طرف بیشتر تقسیم بندی موجود است.
اگر i=k باشد، x را برگردانید در غیر این صورت اگر i<k باشد از Select به صورت بازگشتی برای پیدا کردن iامین عنصر کوچک در طرف کم تر استفاده کرده یا اگر i>k باشد، از آن برای پیدا کردن (i-k)امین عنصر کوچک در طرف بیشتر استفاده کنید.
برای تحلیل زمان اجرای Select، ابتدا یک حد پایین روی تعداد عناصر بزرگتر از عنصر تقسیم کنندهٔ x تعیین می کنیم. حداقل نصفی از میانههای پیدا شده در مرحله 2 بزرگتر از x یعنی میانهٔ میانهها هستند. بنابراین در حداقل نصف n/5گروه، 3 عنصر وجود دارند که از x بزرگترند، به جز برای گروهی که اگر5 به n قابل قسمت نباشد، کم تر از 5 عنصر دارد و گروهی که خود شامل x است. با منظور نکردن این دو گروه ثابت میشود که تعداد عناصر بزرگتر از x حداقل برابر است با
3(2-1/2n/5)
که این عبارت بزرگتر یا مساوی با 3n/10-6 است. به طور مشابه عناصری که کوچک تر از x هستند حداقل 3n/10-6 است. بنابراین در بدترین حالت، Select برای حداکثر 7n/10+6 عنصر در مرحلهٔ 5 به طور بازگشتی فراخوانی میشود.
توان آماری
توان یک آزمون آماری احتمال رد کردن فرض صفر اشتباه میباشد (احتمال آنکه تست آماری مرتکب خطای نوع دوم نشود). هر چه توان یک تست بیشتر باشد احتمال وقوع خطای نوع دوم کمتر خواهد بود.
محققان همیشه نگران این بوده اند که نکند فرضیه صفر را رد کنند در حالی که در واقع درست بوده است (تست آماری مرتکب خطای نوع یک شود) یا اینکه نتوانند فرضیه صفر را رد کنند در حالی که این روش های استفاده شده بوده اند که اثری واقعی داشتهاند (تست آماری مرتکب خطای نوع دو شود). توان آماری یک تست، احتمال آن است که منجر به این میشود که شما فرضیه صفر را رد کنید وقتی فرضیه در واقع غلط است. چون بیشتر تست های امری در شرایطی انجام میشوند که عامل اصلی(treatment)، حداقل کمی اثر روی نتیجه دارد، توان آماری به صورت احتمال اینکه آن تست "منجر به نتیجه گیری درستی در مورد فرضیه صفر میشود"، تعبیر میشود.
توان یک تست آماری عبارت است از: یک، منهای احتمال ایجاد خطای نوع دو. یا به عبارتی، احتمال اینکه شما از خطای نوع دو دوری میکنید.
در مطالعات با توان آماری بالا، خیلی کم پیش میاید که در تشخیص اثرات تمرین اشتباه کنند.
توان یک تست آماری، شامل عملکردِ: حساسیت، اندازه اثر در جمیعت آماری، و استاندارد های استفاده شده برای اندازه گیری فرضیه آماری است. - ساده ترین راه برای افزایش حساسیت یک تحقیق، افزایش تعداد آزمودنی هاست. - در مورد استاندارد، ساده تر آن است که فرضیه صفر را رد کنیم اگر سطح معناداری، ۰.۰۵ باشد تا ۰.۰۱ یا ۰.۰۰۱.
سه قدم برای تعین توان آماری: ۱- مشخص کردن حد، برای معنی دار بودن آماری. فرضیه چیست؟ سطح معناداری چقدر است؟
۲- حدس زدن اندازه اثر. انتظار دارد که درمان(treatment)، دارای اثری کم، زیاد، یا متوسط باشد؟
احتمالات
بطور ساده، احتمالات (به انگلیسی: 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
کاربردها
نظریه احتمال در زندگی روزمره در ارزیابی ریسک و در تجارت در بازار کالاها اعمال می شود. دولت ها به طور معمول روش های احتمالاتی را در تنظیم محیط زیست اعمال می کنند، که آن را تجزیه و تحلیل مسیر می نامند. یک مثال خوب اثر احتمال هر گونه درگیری گسترده در خاورمیانه بر قیمت نفت است، که اثرات موج واری روی اقتصاد کل جهان می گذارد. ارزیابی که توسط یک معامله گر کالا زمانیکه احتمال جنگ بیشترباشد، در مقابل حالتی که احتمال کمتری دارد، قیمت ها را بالا و پایین می فرستد و معامله گران دیگر را نیز از نظرات خود آگاه می کند. در واقع، احتمالات (در تجارت) به طور مستقل ارزیابی نمی شوند و لزوما عقلانی نیستند. تئوری های رفتار مالی برای توصیف اثر فکر گروهی در قیمت گذاری ، در سیاست، و در صلح و درگیری ظهور کردند.
می توان گفت که کشف روش های جدی برای سنجش و ترکیب ارزیابی های احتمال، عمیقا جامعه مدرن را تحت تاثیر قرار داده است. مثلا اکثر شهروندان اهمیت بیشتری به اینکه چگونه ارزیابی های احتمال وشانس ساخته می شوند، می دهند واینکه تاثیر آنها در تصمیم گیری ها بزرگتر و به ویژه در دموکراسی چگونه است.
یکی دیگر از کاربردهای قابل توجه نظریه احتمال در زندگی روزمره، قابلیت اطمینان می باشد. بسیاری از محصولات مصرفی، از جمله خودروها و لوازم الکترونیکی مصرفی، در طراحی خود به منظور کاهش احتمال خرابی(شکست) از نظریه قابلیت اطمینان استفاده می کنند. تولید کننده با توجه به احتمال خرابی یک محصول، آنرا گارانتی می کند.
علوم اجتماعی
نقش پایه و اساس را برای بیشتر علوم اجتماعی داراست. آزمونهای آماری فواصل اطمینان شیوههای رگرسیون (پس رفت)
توزیع احتمال
در نظریه احتمال و آمار تابع توزیع احتمال بیانگر احتمال هر یک از مقادیر متغیر تصادفی (در مورد متغیر گسسته) و یا احتمال قرار گرفتن متغیر در یک بازه مشخص (در مورد متغیر تصادفی پیوسته) میباشد. توزیع تجمعی احتمال یک متغیر تصادفی تابعی است از دامنهٔ آن متغیر بر بازهٔ 0,1. به طوری که احتمال رخدادن پیشامدهای با مقدار عددی کمتر از آن را نمایش میدهد.
روشهای آمارگیری
در آمار کاربردی، روشهای آمارگیری روشهایی برای نمونهبرداری از یک جامعه آماری هستند که به منظور بهبود میزان پاسخ و دقت پاسخ به آمارگیری تدوین میشوند. سنجههای اندازهگیری شده آماره نام دارند که به منظور استنباط آماری در مورد کل جامعه طراحی میشوند. گهگاه آمارههایی توصیفی نیز گردآوری میشوند. نظرسنجیها، پرسشنامهها، و سرشماریها در مورد وضعیت سلامت یا بازار مثالهایی از آمارگیری هستند. آمارگیری ابزار مهمی برای تحقیق در مورد جنبههای مختلف جامعه است و اطلاعات مهمی را در اختیار میگذارد؛ از جمله زمینههایی که آمارگیری در آن کاربر دارد به بازاریابی، روانشناسی، سلامت عمومی، و جامعهشناسی اشاره کرد.
داده
به طور کلی، میتوان همهٔ دانستهها، آگاهیها، داشتهها، آمارها، شناسهها، پیشینهها و پنداشتهها را داده یا دیتا (به انگلیسی: Data) نامید. انسان برای ثبت و درک مشترک هر واقعیت و پدیده از نشانههای ویژهٔ آن بهره گرفتهاست.
انسان برای نمایاندن دادهها نخست از نگاره و در ادامهٔ سیر تکاملی آن از حروف، شمارهها و نشانهها کمک گرفت. برای بازنمودن دادهها از این موارد کمکی یا ترکیبی از آنها استفاده میشود
در رایانه
به اعداد، حروف و علائم که جهت درک و فهم مشترک از انسانها یا رایانه سرچشمه میگیرند داده میگویند. دادهها معمولاً از سوی انسانها بصورت حروف، اعداد، علائم و در رایانه به صورت نمادهایی (همان رمزهای صفر و یک) قراردادی ارائه میشوند. اصطلاح داده یک عبارت نسبی است یعنی اگر موجب درک و فهم لازم و کامل دراین مرحله شدهاست به عنوان آگاهی یا اطلاعات از آن نام میبرند و چنانچه موجب درک و فهم کامل نگردد به عنوان همان داده به شمار میآیند و چون هدف نهایی آگاهی و اطلاعات است باید از سوی دستاندرکاران (انسان یا رایانه) دستکاری یا پردازش شوند. منظور از دستکاری یا پردازش دادهها انجام عملیاتی از قبیل جمع، تفریق، ضرب، تقسیم، مقایسه وغیرهاست.
دادهها مجموعهای از نمادها (برای انسان حروف، اعداد، علائم و برای رایانه رمزهای صفر و یک) هستند که حقایق را نشان میدهند و برای انسان از طریق رسانههای وی (بینایی، شنوایی، چشایی، بویایی، بساوایی) و برای رایانه از طریق لوازم ویژه (صفحه کلید موس و غیره) به دست میآیند.
دادهها امروزه فقط از سوی انسان یا رایانه پردازش میشوند یعنی کارهایی روی آنها صورت میگیرد. در پردازش دادهها (دادهپردازی) در رایانه ابتدا دادهها به رایانه وارد میشوند. این دادهها درابتدا ذخیره شده و روی آنها عملیاتی (جمع، تفریق، ضرب، تقسیم و...) صورت میگیرد. پس از این که این عملیات (پردازش) صورت گرفت معمولاً دادهها به یک رایانه دیگر یا دوباره به انسانها منتقل میشود. در اغلب گزارشها و یادداشتهای سازمانی، دادهها به چشم میخورند. برای نمونه، تاریخ و مقدار یک صورتحساب یا چک، جزئیات فهرست حقوق، تعداد وسایل نقلیهای که از نقطهٔ خاصی در کنار جاده گذشتهاند،... نمونههایی از دادهها هستند.
انواع دادهها از نظر ساختیافتگی
دادههای ساختیافته
دادههای نیمهساختیافته
دادههای زمانی
در بسیاری از کاربردهای مبتنی بر دادهها و اطلاعات ذخیرهسازی و بازیافت حالا ت و وضعیتهای سیستم در طی زمان اهمیت مییابد.
قضاوت
قضاوت در بافت حقوقی ، به معنی کشف حقیقت در نزاع چند طرف که در نهایت به ارائه حکمی از سوی نهاد متصدی قضاوت و لازم الاجراء از سوی حکومت برای پایان دادن به اختلاف میان آنها منجر می شود .
بیانیه
بیانیه متنی است که یک شخص یا گروه از آن برای بیان اصول، عقاید و اهداف خود به عموم استفاده میکند. رسمیت بیانیهها، با توجه به بیانکنندهٔ آنها و مطالب بیانشده، به دو دستهٔ رسمی و غیررسمی طبقهبندی میگردد.
استدلال
استدلال، ترکیب قانونمند قضیه(های) معلوم برای رسیدن به قضیه(های) تازه است. در استدلال، ذهن بین چند قضیه، ارتباط برقرار میکند تا از پیوند آنها، نتیجه زاده شود و بهاینترتیب نسبتی مشکوک و مبهم به نسبتی یقینی تبدیل شود.
انواع استدلال
تمثیل
تمثیل سرایت دادن حکم یک موضوع به موضوع دیگر به دلیل مشابهت آن دو به یکدیگر است.
استقرا
استقرا نوعی استدلال است که در آن ذهن از جزء به کل سیر میکند. یعنی چند مورد جزئی را مشاهده میکند و سپس یک حکم کلی میدهد. مثلا در چند مورد آب را حرارت میدهیم و میبینیم که در صد درجه سلسیوس میجوشد و از این نتیجه میگیریم که هر آبی در صد درجه سلسیوس میجوشد.
قیاس (استنتاج)
اما وقتی ذهن از قضیههای کلّی به نتیجههای جزئی میرسد و به عبارت مختصرتر از کلّ به جز میآید، آن را قیاس مینامند. مثال:
«۱. سقراط انسان است.
۲. هر انسان فانی است.
۳. پس سقراط فانی است.»
در استدلال قیاسی از حداقل دو قضیهٔ درست، ضرورتا و بدون هیچ تردیدی قضیهٔ درست دیگری به نام نتیجه به دست میآید.
حقیقت
حقیقت مفهوم و اصطلاحی است برای اشاره به اصل هر چیز استفاده میشود.
واژهشناسی
واژه حقیقت وامواژهای است که از واژه عربی حقیقة وارد فارسی شدهاست. معادل انگلیسی واژه حقیقت واژهٔ Truth میباشد.
تفاوت حقیقت و واقعیت
حقیقت شامل ذات هر چیزی بوده و غیر قابل تغییر است و به همین دلیل بر خلاف واقعیت امری است که لزوماً با برهانهای علمی قابل اثبات نیست. در بسیاری موارد حقیقت ( به دلیل اینکه از دسترس انسان به حیطه ذات به دور است )به نوع نگرش افراد بستگی پیدا میکند. بطور مثال واقعیت و حقیقت واقعه کربلا را میتوان به این دو صورت بیان کرد.
واقعیت: حسین و یارانش به سمت کوفه حرکت کردند، لشکریان یزید در محلی به نام کربلا بر آنها حمله کردند، و حسین کشته شد. و یزید پیروز این جنگ بود.
اما حقیقت میتواند این باشد:
در واقعه کربلا امام حسین و یاران با وفایش برای نجات دین اسلام تصمیم به هجرت به کوفه گرفتند. اما لشکریان یزید ملعون به آنان حمله کردند و در این واقعه امام حسین به شهادت رسید. و امام حسین توانست با نثار خون خود اسلام را زنده نگاه دارد و به حق او پیروز این میدان بود.
اگر در ریشهٔ واژگان حقیقت و واقعیت دقیق شویم، تفاوتهایی را مشاهده میکنیم. ریشهٔ کلمهٔ حقیقت، "حق" به معنای راستی و درستی است و ریشهٔ کلمهٔ واقعیت، "وَقَعَ" به معنای رویدادن و یا اتفاق افتادن است. حقیقت، اشاره به ماهیت راست و درست دارد و واقعیت اشاره به امور عینی و یا اموری که اتفاق میافتند.
یک نگرش افراطی حقیقت یک واقعه تاریخی را جز بیان عواطف و احساسات گوینده در رابطه با آن واقعه نمیداند و هدف آن جذب باور به حقیقت گفته شده است.
حقیقت و واقعیت در اندیشههای متفکران و فلاسفه
در یونان باستان، نوعی تفکر اسطورهای نسبت به مقولهٔ حقیقت و واقعیت وجود داشته که طی سیر تحول به مذهب و باورهای مذهبی تبدیل شده است. این مساله در هر تمدن دیگری نیز مشاهده میشود. تمدنهای بینالنهرین، هند و چین همگی چنین سیر تحولی را طی کردهاند.
تفکر اسطورهای، طی تکاملش به صورت مثالی افلاطونی رسید که گونهای تفکر مذهبی است. در اندیشههای مذهبی مانند سه مذهب زرتشتیت، مسیحیت و اسلام تمایز و جدایی واقعیت مادی و حقیقت وجود دارد.
دیدگاه عرفاً پیرامون حقیقت و واقعیت، شکل متکامل تفکرات دینی است.
آراء و اندیشههای متفکرین دوران مدرن و همچنین تحولاتی که در نوع نگاه انسانها در جامعهٔ مدرن نسبت به حقیقت حاصل شده، باعث شده است تا مسیر گسست از اندیشههای اسطورهای به اندیشههای دینی در دوران مدرن دچار واگشت و یا تغییر مسیر شود. یعنی تمایز و گسست حقیقت و واقعیت دوباره به اتحاد آن دو منجر شده است. در اصل، ظهور رئالیسم جدید و همچنین اومانیسم مدرن، نمایانگر گونهای بازگشت به اصول کلاسیک یونانیان است. بشر در دوران مدرن اعتقاد یافت که طی سالیان درازی، دچار خطا شده است، از این رو دوباره به تفکر یونانی رجعت کرد.
در اندیشههای ماتریالیستها و مارکسیستها از جمله فوئرباخ، مارکس و انگلس و پیروان آنها، مادهگرایی که خود یکی از ثمرات مدرنیته است، نمایشگر رجعت انسان به یکی انگاشتن حقیقت و واقعیت است. با این تفاوت که از نگاه ماتریالیستها، حقایق، قوانینی هستند که بر واقعیات حاکماند. به طور مثال، نیروی محرکهٔ تاریخ که بر وقایع تاریخی احاطه دارد، حقیقتی دربارهٔ جهان و هستی است.
اندیشههای فردریش ویلهلم نیچه، فیلسوف نامدار آلمانی دربارهٔ حقیقت از اهمیت بسیار بالایی برخوردار است. چون او، نوع نگاه انسان به حقیقت را دگرگون کرد و با وهمی خواندن حقیقت، به تبیین یک نگاه کاملاً نسبیگرایانه پرداخت. نسبیت حقیقت که با نیچه آغاز شد در نهایت به مکاتب و تفکراتی از جمله هرمنوتیک، مکتب فرانکفورت و پستمدرنیسم منجر شد.
اندیشههای نسبیگرایانهٔ نیچه در باب حقیقت و واقعیت به شکلی رادیکال در آراء متفکران پست مدرنی چون ژان فرانسوا لیوتار، ژاک دریدا، ژیل دلوز، میشل فوکو و ژان بودریار دوباره مطرح شد.
مکانیک آماری، یکی از مباحث مطرح در فیزیک است که به سیستمهایی با تعداد متغیرهای بسیار زیاد میپردازد. این متغیرها میتوانند ذراتی چون اتمها، مولکولها، یا ذرات بنیادی باشند که تعداد آنها میتواند هممرتبه با عدد آووگادرو باشد.

در این مبحث، با استفاده از خاصیتهای میکروسکوپی این ذرات مانند ساختار اتمی و برهمکنش بین آنها، اطلاعاتی در مورد خواص ماکروسکوپی سیستم مانند فشار، انتروپی و انرژی آزاد گیبس، از طریق محاسبات و روشهای آماری به دست میآید. مثلاً معادلههای حالت در ترمودینامیک توسط مدلهای میکروسکوپی-آماری مشتق میشوند.
مکانیک آماری شکوفایی خود را قبل از همه، مدیون دانشمندان کلاسیکی نظیر لودویگ بولتزمان، جوسایا ویلارد گیبز و جیمز کلرک ماکسول میباشد.
میانهها و شاخصهای آماری
میانهها وشاخصهای آماری ترتیبی
iامین شاخص آمار ترتیبی یک مجموعه n عضوی، iامین عضو کوچک است. به عنوان مثال، مینیمم یک مجموعه از اعضا، اولین شاخص آمار ترتیبی (i=۱)است و ماکزیمم، nامین شاخص آمار ترتیبی (i=n)است. میانه، به طور غیر رسمی، نقطهٔ میانی مجموعهاست. هنگامی که n فرد است، میانه منحصر به فرد است که در i=(n+۱)/۲ رخ میدهد. وقتی n زوج است، دو میانه وجود دارند که در i=n/۲ و i=n/۲+۱ رخ میدهند. این مقاله انتخاب iامین شاخص آمار ترتیبی از یک مجموعه با n عضو مجزا را بیان میکند. مسئله انتخاب میتواند به طور رسمی به شکل زیر تعیین شود: ورودی: مجموعه A با n عدد(مجزا) و عدد i، که i بزرگتر یا مساوی ۱ و کوچکتر یا مساوی با n است. خروجی: عضو x در A که بزرگتر از دقیقا i-۱ عضو دیگر A میباشد. مسئله انتخاب میتواند در زمان (O(nlgn حل شود، چون میتوانیم اعداد را با استفاده از مرتب سازی دودویی (heap sort) یا مرتب سازی ادغام مرتب کنیم و سپس به سادگی iامین عنصر در آرایه خروجی را مشخص کنیم اما الگوریتمهای سریع تری وجود دارند. ابتدا مسئله انتخاب مینمم و ماکزیمم یک مجموعه از اعضا را بررسی میکنیم. مسئله جالب تر، مسئله انتخاب کلی است، که دردوقسمت بررسی میشود.قسمت اول یک الگوریتم عملی را تحلیل میکند که در حالت میانگین به زمان اجرای (O(n میرسد. قسمت بعد یک الگوریتم است که جنبههای نظری بیشتری داشته و در بدترین حالت به زمان اجرای (O(n میرسد.
مینیمم و ماکزیمم
چه تعداد مقایسه برای تعیین یک مجموعه n عضوی لازم است؟ میتوانیم به سادگی به حد بالای n-۱ برای مقایسهها برسیم: هر عضو مجموعه را به ترتیب بررسی کرده و کوچکترین عضوی که تا کنون دیده شدهاست را نگه میداریم. در روال زیر، فرض میکنیم مجموعه در آرایه A قرار دارد، که طول آرایه n است. قطعا یافتن ماکزیمم میتواند با n-۱ مقایسه نیز انجام شود. آیا این بهترین کاری است که میتوانیم انجام دهیم؟ بله، چون میتوانیم به حد پایین n-۱ برا مقایسهها برای مینممم برسیم. الگوریتم را در نظر بگیرید که مینیمم را به صورت مسابقهای بین عناصر تعیین میکند. هر مقایسه یک بازی در مسابقهاست که در آن عنصر کوچکتر از میان دو عنصر، برنده میشود. نگرش اصلی این است که هر عنصر به جز برنده باید حداقل یک بازی را ببازد. از این رو n-۱ مقایسه برای تعیین مینیمم لازم است.
مینیمم و ماکزیمم هم زمان
در برخی کاربردها، باید هم مینیمم و هم ماکزیمم یک مجموعه از n عضو را پیدا کنیم. ارائه الگوریتمی که بتواند هم مینیمم و هم ماکزیمم n عضو را با استفاده از (θ(nمقایسه، که به طور مجانبی بهینهاست، پیدا کند سخت نیست. به سادگی مینیمم و ماکزیمم را به طور مستقل، با استفاده از n-۱ مقایسه برای هر یک پیدا میکند، که در کل ۲n-۲ مقایسه انجام میدهد. در حقیقت، حداکثر ۳n/۲ مقایسه برای پیدا کردن مینیمم و ماکزیمم کافی است. استراتژی این است که اعضای مینیمم و ماکزیمم را که تا این جا دیده شدهاند نگه داریم. به جای این که هر عضو ورودی را با مقایسه با مینیمم و ماکزیمم فعلی پردازش کنیم، که هزینه ۲ مقایسه برای هر عضو را صرف میکند، اعضا را جفت به جفت مقایسه میکنیم. ابتدا جفت عضوها را از ورودی با یکدیگر مقایسه میکنیم و سپس عضو کوچکتر را با مینیمم جاری و عضو بزرگتر را با ماکزیمم جاری مقایسه میکنیم که هزینه ۳ مقایسه برای هر دو عضو را موجب میشود.
انتخاب در زمان خطی مورد انتظار
مسئله انتخاب کلی نسبت به مسئله پیدا کردن یک مینیمم سخت تر به نظر میآیدو هم چنان که به صورت شگفت آوری زمان اجرای مجانبی هر دو مسئله یکی است: (θ(n.در این بخش یک الگوریتم تقسیم و حل را برای مسئله انتخاب ارائه می دهیم. الگوریتم Randomized-Select بعد از الگوریتم مرتب سازی سریع مدل میشود. همانند مرتب سازی سریع ایده آن است که آرایه ورودی را به طور بازگشتی تقسیم کنیم. ولی برخلاف مرتب سازی سریع که هر دو طرف تقسیم بندی را به صورت بازگشتی پردازش میکند، Randomized-Select فقط روی یک طرف تقسیم بندی عمل میکند. این تفاوت در تحلیل آشکار میشود. در حالی که زمان اجرای مورد انتظار مرتب سازی سریع (θ(nlgn است، زمان مورد انتظار این الگوریتم (θ(nاست. Randomized-Select از روال Randomized-Partition که در بخش مرتب سازی سریع معرفی شد استفاده میکند.
انتخاب در بدترین حالت زمان خطی
اکنون الگوریتمی را بررسی می کنیم که زمان اجرای آن در بدترین حالت (O(nاست. مانند Randomized-Select، الگوریتم Select عنصر مورد نظر را با تقسیم بندی بازگشتی آرایه ورودی پیدا میکند. اما ایدهای که پشت این الگوریتم وجود دارد، این است که یک قسمت خوب را در هنگامی که آرایه تقسیم میشود تضمین میکند. Select از الگوریتم تقسیم بندی قطعی Partition مربوط به مرتب سازی سریع استفاده میکند که طوری تغییر یافته است که عنصری که تقسیم بندی حول آن انجام میشود را به عنوان پارامتر ورودی بگیرد. این الگوریتم iامین عنصر کوچک از آرایه ورودی با n>1 عنصر را با اجرای مراحل زیر تعیین میکند.(اگر n=1باشد آن گاه Select به طور مطلق، تنها ورودیش را به عنوان iامین عنصر کوچک برمی گرداند.)
n عنصرآرایه ورودی را بهn/5 گروه 5 عنصری تقسیم کنید و حداکثر یک گروه از n mod 5 عنصر باقیمانده ساخته میشود.
میانه هر یک از n/5گروه را ابتدا با مرتب ساز درجی عناصر هر گروه (که حداکثر 5 عنصر در هر یک وجود دارد)و سپس انتخاب میانه از لیست مرتب شده عناصر گروه پیدا کنید.
از Select به صورت بازگشتی برای پیدا کردن میانه x از n/5میانهای که در مرحله 2 پیدا شدند استفاده کنید.
آرایه ورودی را حول میانهٔ میانهها (یعنی x)با استفاده از نسخه تغییر یافته Partition تقسیم کنید. فرض کنید k یک واحد بیشتر از تعداد عناصر در طرف کم تر تقسیم بندی باشد، بنابراین k، x امین عنصر کوچک است و n-k عنصر در طرف بیشتر تقسیم بندی موجود است.
اگر i=k باشد، x را برگردانید در غیر این صورت اگر i<k باشد از Select به صورت بازگشتی برای پیدا کردن iامین عنصر کوچک در طرف کم تر استفاده کرده یا اگر i>k باشد، از آن برای پیدا کردن (i-k)امین عنصر کوچک در طرف بیشتر استفاده کنید.
برای تحلیل زمان اجرای Select، ابتدا یک حد پایین روی تعداد عناصر بزرگتر از عنصر تقسیم کنندهٔ x تعیین می کنیم. حداقل نصفی از میانههای پیدا شده در مرحله 2 بزرگتر از x یعنی میانهٔ میانهها هستند. بنابراین در حداقل نصف n/5گروه، 3 عنصر وجود دارند که از x بزرگترند، به جز برای گروهی که اگر5 به n قابل قسمت نباشد، کم تر از 5 عنصر دارد و گروهی که خود شامل x است. با منظور نکردن این دو گروه ثابت میشود که تعداد عناصر بزرگتر از x حداقل برابر است با
3(2-1/2n/5)
که این عبارت بزرگتر یا مساوی با 3n/10-6 است. به طور مشابه عناصری که کوچک تر از x هستند حداقل 3n/10-6 است. بنابراین در بدترین حالت، Select برای حداکثر 7n/10+6 عنصر در مرحلهٔ 5 به طور بازگشتی فراخوانی میشود.
توان آماری
توان یک آزمون آماری احتمال رد کردن فرض صفر اشتباه میباشد (احتمال آنکه تست آماری مرتکب خطای نوع دوم نشود). هر چه توان یک تست بیشتر باشد احتمال وقوع خطای نوع دوم کمتر خواهد بود.
محققان همیشه نگران این بوده اند که نکند فرضیه صفر را رد کنند در حالی که در واقع درست بوده است (تست آماری مرتکب خطای نوع یک شود) یا اینکه نتوانند فرضیه صفر را رد کنند در حالی که این روش های استفاده شده بوده اند که اثری واقعی داشتهاند (تست آماری مرتکب خطای نوع دو شود). توان آماری یک تست، احتمال آن است که منجر به این میشود که شما فرضیه صفر را رد کنید وقتی فرضیه در واقع غلط است. چون بیشتر تست های امری در شرایطی انجام میشوند که عامل اصلی(treatment)، حداقل کمی اثر روی نتیجه دارد، توان آماری به صورت احتمال اینکه آن تست "منجر به نتیجه گیری درستی در مورد فرضیه صفر میشود"، تعبیر میشود.
توان یک تست آماری عبارت است از: یک، منهای احتمال ایجاد خطای نوع دو. یا به عبارتی، احتمال اینکه شما از خطای نوع دو دوری میکنید.
در مطالعات با توان آماری بالا، خیلی کم پیش میاید که در تشخیص اثرات تمرین اشتباه کنند.
توان یک تست آماری، شامل عملکردِ: حساسیت، اندازه اثر در جمیعت آماری، و استاندارد های استفاده شده برای اندازه گیری فرضیه آماری است. - ساده ترین راه برای افزایش حساسیت یک تحقیق، افزایش تعداد آزمودنی هاست. - در مورد استاندارد، ساده تر آن است که فرضیه صفر را رد کنیم اگر سطح معناداری، ۰.۰۵ باشد تا ۰.۰۱ یا ۰.۰۰۱.
سه قدم برای تعین توان آماری: ۱- مشخص کردن حد، برای معنی دار بودن آماری. فرضیه چیست؟ سطح معناداری چقدر است؟
۲- حدس زدن اندازه اثر. انتظار دارد که درمان(treatment)، دارای اثری کم، زیاد، یا متوسط باشد؟
احتمالات
بطور ساده، احتمالات (به انگلیسی: 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
کاربردها
نظریه احتمال در زندگی روزمره در ارزیابی ریسک و در تجارت در بازار کالاها اعمال می شود. دولت ها به طور معمول روش های احتمالاتی را در تنظیم محیط زیست اعمال می کنند، که آن را تجزیه و تحلیل مسیر می نامند. یک مثال خوب اثر احتمال هر گونه درگیری گسترده در خاورمیانه بر قیمت نفت است، که اثرات موج واری روی اقتصاد کل جهان می گذارد. ارزیابی که توسط یک معامله گر کالا زمانیکه احتمال جنگ بیشترباشد، در مقابل حالتی که احتمال کمتری دارد، قیمت ها را بالا و پایین می فرستد و معامله گران دیگر را نیز از نظرات خود آگاه می کند. در واقع، احتمالات (در تجارت) به طور مستقل ارزیابی نمی شوند و لزوما عقلانی نیستند. تئوری های رفتار مالی برای توصیف اثر فکر گروهی در قیمت گذاری ، در سیاست، و در صلح و درگیری ظهور کردند.
می توان گفت که کشف روش های جدی برای سنجش و ترکیب ارزیابی های احتمال، عمیقا جامعه مدرن را تحت تاثیر قرار داده است. مثلا اکثر شهروندان اهمیت بیشتری به اینکه چگونه ارزیابی های احتمال وشانس ساخته می شوند، می دهند واینکه تاثیر آنها در تصمیم گیری ها بزرگتر و به ویژه در دموکراسی چگونه است.
یکی دیگر از کاربردهای قابل توجه نظریه احتمال در زندگی روزمره، قابلیت اطمینان می باشد. بسیاری از محصولات مصرفی، از جمله خودروها و لوازم الکترونیکی مصرفی، در طراحی خود به منظور کاهش احتمال خرابی(شکست) از نظریه قابلیت اطمینان استفاده می کنند. تولید کننده با توجه به احتمال خرابی یک محصول، آنرا گارانتی می کند.
علوم اجتماعی
نقش پایه و اساس را برای بیشتر علوم اجتماعی داراست. آزمونهای آماری فواصل اطمینان شیوههای رگرسیون (پس رفت)
توزیع احتمال
در نظریه احتمال و آمار تابع توزیع احتمال بیانگر احتمال هر یک از مقادیر متغیر تصادفی (در مورد متغیر گسسته) و یا احتمال قرار گرفتن متغیر در یک بازه مشخص (در مورد متغیر تصادفی پیوسته) میباشد. توزیع تجمعی احتمال یک متغیر تصادفی تابعی است از دامنهٔ آن متغیر بر بازهٔ 0,1. به طوری که احتمال رخدادن پیشامدهای با مقدار عددی کمتر از آن را نمایش میدهد.
روشهای آمارگیری
در آمار کاربردی، روشهای آمارگیری روشهایی برای نمونهبرداری از یک جامعه آماری هستند که به منظور بهبود میزان پاسخ و دقت پاسخ به آمارگیری تدوین میشوند. سنجههای اندازهگیری شده آماره نام دارند که به منظور استنباط آماری در مورد کل جامعه طراحی میشوند. گهگاه آمارههایی توصیفی نیز گردآوری میشوند. نظرسنجیها، پرسشنامهها، و سرشماریها در مورد وضعیت سلامت یا بازار مثالهایی از آمارگیری هستند. آمارگیری ابزار مهمی برای تحقیق در مورد جنبههای مختلف جامعه است و اطلاعات مهمی را در اختیار میگذارد؛ از جمله زمینههایی که آمارگیری در آن کاربر دارد به بازاریابی، روانشناسی، سلامت عمومی، و جامعهشناسی اشاره کرد.
داده
به طور کلی، میتوان همهٔ دانستهها، آگاهیها، داشتهها، آمارها، شناسهها، پیشینهها و پنداشتهها را داده یا دیتا (به انگلیسی: Data) نامید. انسان برای ثبت و درک مشترک هر واقعیت و پدیده از نشانههای ویژهٔ آن بهره گرفتهاست.
انسان برای نمایاندن دادهها نخست از نگاره و در ادامهٔ سیر تکاملی آن از حروف، شمارهها و نشانهها کمک گرفت. برای بازنمودن دادهها از این موارد کمکی یا ترکیبی از آنها استفاده میشود
در رایانه
به اعداد، حروف و علائم که جهت درک و فهم مشترک از انسانها یا رایانه سرچشمه میگیرند داده میگویند. دادهها معمولاً از سوی انسانها بصورت حروف، اعداد، علائم و در رایانه به صورت نمادهایی (همان رمزهای صفر و یک) قراردادی ارائه میشوند. اصطلاح داده یک عبارت نسبی است یعنی اگر موجب درک و فهم لازم و کامل دراین مرحله شدهاست به عنوان آگاهی یا اطلاعات از آن نام میبرند و چنانچه موجب درک و فهم کامل نگردد به عنوان همان داده به شمار میآیند و چون هدف نهایی آگاهی و اطلاعات است باید از سوی دستاندرکاران (انسان یا رایانه) دستکاری یا پردازش شوند. منظور از دستکاری یا پردازش دادهها انجام عملیاتی از قبیل جمع، تفریق، ضرب، تقسیم، مقایسه وغیرهاست.
دادهها مجموعهای از نمادها (برای انسان حروف، اعداد، علائم و برای رایانه رمزهای صفر و یک) هستند که حقایق را نشان میدهند و برای انسان از طریق رسانههای وی (بینایی، شنوایی، چشایی، بویایی، بساوایی) و برای رایانه از طریق لوازم ویژه (صفحه کلید موس و غیره) به دست میآیند.
دادهها امروزه فقط از سوی انسان یا رایانه پردازش میشوند یعنی کارهایی روی آنها صورت میگیرد. در پردازش دادهها (دادهپردازی) در رایانه ابتدا دادهها به رایانه وارد میشوند. این دادهها درابتدا ذخیره شده و روی آنها عملیاتی (جمع، تفریق، ضرب، تقسیم و...) صورت میگیرد. پس از این که این عملیات (پردازش) صورت گرفت معمولاً دادهها به یک رایانه دیگر یا دوباره به انسانها منتقل میشود. در اغلب گزارشها و یادداشتهای سازمانی، دادهها به چشم میخورند. برای نمونه، تاریخ و مقدار یک صورتحساب یا چک، جزئیات فهرست حقوق، تعداد وسایل نقلیهای که از نقطهٔ خاصی در کنار جاده گذشتهاند،... نمونههایی از دادهها هستند.
انواع دادهها از نظر ساختیافتگی
دادههای ساختیافته
دادههای نیمهساختیافته
دادههای زمانی
در بسیاری از کاربردهای مبتنی بر دادهها و اطلاعات ذخیرهسازی و بازیافت حالا ت و وضعیتهای سیستم در طی زمان اهمیت مییابد.
قضاوت
قضاوت در بافت حقوقی ، به معنی کشف حقیقت در نزاع چند طرف که در نهایت به ارائه حکمی از سوی نهاد متصدی قضاوت و لازم الاجراء از سوی حکومت برای پایان دادن به اختلاف میان آنها منجر می شود .
بیانیه
بیانیه متنی است که یک شخص یا گروه از آن برای بیان اصول، عقاید و اهداف خود به عموم استفاده میکند. رسمیت بیانیهها، با توجه به بیانکنندهٔ آنها و مطالب بیانشده، به دو دستهٔ رسمی و غیررسمی طبقهبندی میگردد.
استدلال
استدلال، ترکیب قانونمند قضیه(های) معلوم برای رسیدن به قضیه(های) تازه است. در استدلال، ذهن بین چند قضیه، ارتباط برقرار میکند تا از پیوند آنها، نتیجه زاده شود و بهاینترتیب نسبتی مشکوک و مبهم به نسبتی یقینی تبدیل شود.
انواع استدلال
تمثیل
تمثیل سرایت دادن حکم یک موضوع به موضوع دیگر به دلیل مشابهت آن دو به یکدیگر است.
استقرا
استقرا نوعی استدلال است که در آن ذهن از جزء به کل سیر میکند. یعنی چند مورد جزئی را مشاهده میکند و سپس یک حکم کلی میدهد. مثلا در چند مورد آب را حرارت میدهیم و میبینیم که در صد درجه سلسیوس میجوشد و از این نتیجه میگیریم که هر آبی در صد درجه سلسیوس میجوشد.
قیاس (استنتاج)
اما وقتی ذهن از قضیههای کلّی به نتیجههای جزئی میرسد و به عبارت مختصرتر از کلّ به جز میآید، آن را قیاس مینامند. مثال:
«۱. سقراط انسان است.
۲. هر انسان فانی است.
۳. پس سقراط فانی است.»
در استدلال قیاسی از حداقل دو قضیهٔ درست، ضرورتا و بدون هیچ تردیدی قضیهٔ درست دیگری به نام نتیجه به دست میآید.
حقیقت
حقیقت مفهوم و اصطلاحی است برای اشاره به اصل هر چیز استفاده میشود.
واژهشناسی
واژه حقیقت وامواژهای است که از واژه عربی حقیقة وارد فارسی شدهاست. معادل انگلیسی واژه حقیقت واژهٔ Truth میباشد.
تفاوت حقیقت و واقعیت
حقیقت شامل ذات هر چیزی بوده و غیر قابل تغییر است و به همین دلیل بر خلاف واقعیت امری است که لزوماً با برهانهای علمی قابل اثبات نیست. در بسیاری موارد حقیقت ( به دلیل اینکه از دسترس انسان به حیطه ذات به دور است )به نوع نگرش افراد بستگی پیدا میکند. بطور مثال واقعیت و حقیقت واقعه کربلا را میتوان به این دو صورت بیان کرد.
واقعیت: حسین و یارانش به سمت کوفه حرکت کردند، لشکریان یزید در محلی به نام کربلا بر آنها حمله کردند، و حسین کشته شد. و یزید پیروز این جنگ بود.
اما حقیقت میتواند این باشد:
در واقعه کربلا امام حسین و یاران با وفایش برای نجات دین اسلام تصمیم به هجرت به کوفه گرفتند. اما لشکریان یزید ملعون به آنان حمله کردند و در این واقعه امام حسین به شهادت رسید. و امام حسین توانست با نثار خون خود اسلام را زنده نگاه دارد و به حق او پیروز این میدان بود.
اگر در ریشهٔ واژگان حقیقت و واقعیت دقیق شویم، تفاوتهایی را مشاهده میکنیم. ریشهٔ کلمهٔ حقیقت، "حق" به معنای راستی و درستی است و ریشهٔ کلمهٔ واقعیت، "وَقَعَ" به معنای رویدادن و یا اتفاق افتادن است. حقیقت، اشاره به ماهیت راست و درست دارد و واقعیت اشاره به امور عینی و یا اموری که اتفاق میافتند.
یک نگرش افراطی حقیقت یک واقعه تاریخی را جز بیان عواطف و احساسات گوینده در رابطه با آن واقعه نمیداند و هدف آن جذب باور به حقیقت گفته شده است.
حقیقت و واقعیت در اندیشههای متفکران و فلاسفه
در یونان باستان، نوعی تفکر اسطورهای نسبت به مقولهٔ حقیقت و واقعیت وجود داشته که طی سیر تحول به مذهب و باورهای مذهبی تبدیل شده است. این مساله در هر تمدن دیگری نیز مشاهده میشود. تمدنهای بینالنهرین، هند و چین همگی چنین سیر تحولی را طی کردهاند.
تفکر اسطورهای، طی تکاملش به صورت مثالی افلاطونی رسید که گونهای تفکر مذهبی است. در اندیشههای مذهبی مانند سه مذهب زرتشتیت، مسیحیت و اسلام تمایز و جدایی واقعیت مادی و حقیقت وجود دارد.
دیدگاه عرفاً پیرامون حقیقت و واقعیت، شکل متکامل تفکرات دینی است.
آراء و اندیشههای متفکرین دوران مدرن و همچنین تحولاتی که در نوع نگاه انسانها در جامعهٔ مدرن نسبت به حقیقت حاصل شده، باعث شده است تا مسیر گسست از اندیشههای اسطورهای به اندیشههای دینی در دوران مدرن دچار واگشت و یا تغییر مسیر شود. یعنی تمایز و گسست حقیقت و واقعیت دوباره به اتحاد آن دو منجر شده است. در اصل، ظهور رئالیسم جدید و همچنین اومانیسم مدرن، نمایانگر گونهای بازگشت به اصول کلاسیک یونانیان است. بشر در دوران مدرن اعتقاد یافت که طی سالیان درازی، دچار خطا شده است، از این رو دوباره به تفکر یونانی رجعت کرد.
در اندیشههای ماتریالیستها و مارکسیستها از جمله فوئرباخ، مارکس و انگلس و پیروان آنها، مادهگرایی که خود یکی از ثمرات مدرنیته است، نمایشگر رجعت انسان به یکی انگاشتن حقیقت و واقعیت است. با این تفاوت که از نگاه ماتریالیستها، حقایق، قوانینی هستند که بر واقعیات حاکماند. به طور مثال، نیروی محرکهٔ تاریخ که بر وقایع تاریخی احاطه دارد، حقیقتی دربارهٔ جهان و هستی است.
اندیشههای فردریش ویلهلم نیچه، فیلسوف نامدار آلمانی دربارهٔ حقیقت از اهمیت بسیار بالایی برخوردار است. چون او، نوع نگاه انسان به حقیقت را دگرگون کرد و با وهمی خواندن حقیقت، به تبیین یک نگاه کاملاً نسبیگرایانه پرداخت. نسبیت حقیقت که با نیچه آغاز شد در نهایت به مکاتب و تفکراتی از جمله هرمنوتیک، مکتب فرانکفورت و پستمدرنیسم منجر شد.
اندیشههای نسبیگرایانهٔ نیچه در باب حقیقت و واقعیت به شکلی رادیکال در آراء متفکران پست مدرنی چون ژان فرانسوا لیوتار، ژاک دریدا، ژیل دلوز، میشل فوکو و ژان بودریار دوباره مطرح شد.
5:58 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 در برنامههای تعبیه شده و سیستمهای عامل؛ و بقیه برنامهها معمولاً برای نوشتن انواع دیگر برنامهها کاربرد دارند. روشهای مختلفی برای سنجش محبوبیت زبانها، هر یک متناسب یا یک ویژگی محوری متفاوت پیشنهاد شدهاست:
شمارش تعداد تبلیغات شغلی که از آن زبان نام میبرند.
تعداد کتابهای آموزشی و شرح دهندهٔ آن زبان که فروش رفتهاست.
تخمین تعداد خطوطی که در آن زبان نوشته شده اند- که ممکن است زبانهایی را که در جستجوها کمتر پیدا میشوند دست کم گرفته شوند.
شمارش ارجاعهای زبان(برای مثال، به اسم زبان) در موتورهای جستجوهای اینترنت.
طبقه بندیها هیچ برنامه غالبی برای دسته بندی زبانهای برنامه نویسی وجود ندارد. یک زبان مشخص معمولاً یک زبان اجدادی ندارد. زبانها معمولاً با ترکیب المانهای چند زبان پیشینه بوجود میآیند که هربار ایدههای جدید درگردشند. ایدههایی که در یک زبان ایجاد میشوند در یک خانواده از زبانهای مرتبط پخش میشوند، و سپس از بین خلاهای بین خانوادهها منتقل شده و در خانوادههای دیگر ظاهر میشوند.
این حقیقت که این دسته بندی ممکن است در راستای محورهای مختلف انجام شوند، این وظیفه را پیچیده تر میکند؛ برای مثال، جاوا هم یک زبان شیءگرا(چون به برنامه نویسی شیءگرا تشویق میکند) و زبان همزمان(چون ساختارهای داخلی برای اجرای چندین جریان موازی دارد) است. پایتون یک زبان اسکریپتی شیءگراست.
در نگاه کلی، زبانهای برنامه نویسی به مثالهای برنامه نویسی و یک دسته بندی بر اساس محدوده استفاده تقسیم میشوند. مثالها شامل برنامه نویسی رویهای، برنامه نویسی شیءگرا، برنامه نویسی کاربردی، وبرنامه نویسی منطقی؛ برخی زبانها ترکیب چند مثالند. یک زبان اسمبلی مثالی از یک مدل مستقیم متضمن معماری ماشین نیست. با توجه به هدف، زبانهای برنامه نویسی ممکن است همه منظوره باشند، زبانهای برنامه نویسی سیستمی، زبانهای اسکریپتی، زبانهای محدوده مشخص، زبانهای همزمان/ گسترده(و یا ترکیب اینها). برخی زبانهای همه منظوره تا حد زیادی برای اهداف آموزشی طراحی شدهاند.
یک زبان برنامه نویسی ممکن است با فاکتورهای غیر مرتبط به مثالهای برنامه نویسی دسته بندی شود. برای مثال، غالب زبانهای برنامه نویسی کلمات کلیدی زبان انگلیسی را استفاده میکنند، در حالیکه تعداد کمی این کار را نمیکنند. سایر زبانها ممکن است براساس داخلی بودن یا نبودن دسته بندی شوند.
زبان برنامه نویسی یک مکانیزم ساخت یافته برای تعریف دادهها، و عملیات یا تبدیلهایی که ممکن است بطور اتوماتیک روی آن داده انجام شوند، فراهم میکند. یک برنامه نویس از انتزاعات آماده در زبان استفاده میکند تا مفاهیم به کار رفته در محاسبات را بیان کند. این مفاهیم به عنوان یک مجموعه از سادهترین عناصر موجود بیان میشوند(مفاهیم ابتدایی نامیده میشوند).

زبانهای برنامه نویسی با غالب زبانهای انسانی تفاوتی دارد و آن این است که نیاز به بیان دقیق تر و کامل تری دارد. هنگام استفاده از زبانهای طبیعی برای ارتباط با دیگر انسانها، نویسندگان و گویندگان میتوانند مبهم باشند و اشتباهات کوچک داشته باشند، و همچنان انتظار داشته باشند که مخاطب آنها متوجه شده باشد. اگرچه، مجازا، رایانهها "دقیقاً آنچه که به آنها گفته شده را انجام میدهند." و نمیتوانند "بفهمند" که نویسنده دقیقاً چه کدی مد نظر نویسنده بودهاست] البته امروزه برنامههایی برای انجام این کار تولید شدهاند و تلاشهای بسیاری در این زمینه انجام شده ولی هنوز به نتیجهٔ رضایت بخشی نرسیده است[. ترکیب تعریف زبان، یک برنامه، و ورودی برنامه بطور کامل رفتار خروجی را به هنگام اجرای برنامه (در محدوده کنترل آن برنامه) مشخص میکند. برنامههای یک رایانه ممکن است در یک فرایند ناپیوسته بدون دخالت انسان اجرا شوند، یا یک کاربر ممکن است دستورات را در یک مرحله فعل و انفعال مفسر تایپ کند.در این حالت "دستور"ها همان برنامهها هستند، که اجرای آنها زنجیروار به هم مرتبطند.به زبانی که برای دستور دادن به برنامهای استفاده میشود، زبان اسکریپت میگویند. بسیاری از زبانها کنار گذاشته شدهاند، برای رفع نیازهای جدید جایگزین شدهاند، با برنامههای دیگر ترکیب شدهاند و در نهایت استعمال آنها متوقف شدهاست. با وجود اینکه تلاشهایی برای طراحی یک زبان رایانه" کامل" شدهاست که تمام اهداف را تحت پوشش قرار دهد، هیچ یک نتوانستند بطور کلی این جایگاه را پر کنند. نیاز به زبانهای رایانهای گسترده از گستردگی زمینههایی که زبانها استفاده میشوند، ناشی میشود:
محدوده برنامهها از متون بسیار کوچک نوشته شده توسط افراد عادی تا سیستمهای بسیار بزرگ نوشته شده توسط صدها برنامه نویس است
توانایی برنامه نویسها: از تازه کارهایی که بیش از هر چیز به سادگی نیاز دارند تا حرفهایهایی که با پیچیدگی قابل توجهی کنار میآیند.
برنامهها باید سرعت، اندازه و سادگی را بسته به سیستمها از ریزپردازندها تا ابر رایانهها متناسب نگه دارند.
برنامهها ممکن است یک بار نوشته شوند و تا نسلها تغییر نکنند، و یا ممکن است پیوسته اصلاح شوند.
در نهایت، برنامه نویسها ممکن است در علایق متفاوت باشند: آنها ممکن است به بیان مسائل با زبانی خاص خو گرفته باشند.
یک سیر رایج در گسترش زبانهای برنامه نویسی این است که قابلیت حل مسائلی با درجات انتزاعی بالاتری را اضافه کنند. زبانهای برنامه نویسی اولیه به سختافزار رایانه گره خورده بودند. همانطور که زبانهای برنامه نویسی جدید گسترش پیدا کردهاند، ویژگیهایی به برنامهها افزوده شده که به برنامه نویس اجازه دهد که ایدههایی که از ترجمه ساده به دستورات سختافزار دورتر هستند نیز استفاده کند. چون برنامه نویسها کمتر به پیچیدگی رایانه محدود شدهاند، برنامههای آنها میتواند محاسبات بیشتری با تلاش کمتر از سوی برنامه نویس انجام دهند. این به آنها این امکان را میدهد که کارایی بیشتردر واحد زمان داشته باشند. "پردازندههای زبان طبیعی" به عنوان راهی برای ازبین بردن نیاز به زبانهای اختصاصی برنامه نویسی پیشنهاد شدهاند. هرچند، این هدف دور است و فواید آن قابل بحث است. "ادسگر دیجسترا" موافق بود که استفاده از یک زبان رسمی برای جلوگیری از مقدمه سازی ساختارهای بی معنی واجب است، و زبان برنامه نویسی طبیعی را با عنوان "احمقانه" رد کرد، "آلن پرلیس" نیز مشابها این ایده را رد کرد. مطابق با متدولوژی نامتجانس استفاده شده توسط 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 در برنامههای تعبیه شده و سیستمهای عامل؛ و بقیه برنامهها معمولاً برای نوشتن انواع دیگر برنامهها کاربرد دارند. روشهای مختلفی برای سنجش محبوبیت زبانها، هر یک متناسب یا یک ویژگی محوری متفاوت پیشنهاد شدهاست:
شمارش تعداد تبلیغات شغلی که از آن زبان نام میبرند.
تعداد کتابهای آموزشی و شرح دهندهٔ آن زبان که فروش رفتهاست.
تخمین تعداد خطوطی که در آن زبان نوشته شده اند- که ممکن است زبانهایی را که در جستجوها کمتر پیدا میشوند دست کم گرفته شوند.
شمارش ارجاعهای زبان(برای مثال، به اسم زبان) در موتورهای جستجوهای اینترنت.
طبقه بندیها هیچ برنامه غالبی برای دسته بندی زبانهای برنامه نویسی وجود ندارد. یک زبان مشخص معمولاً یک زبان اجدادی ندارد. زبانها معمولاً با ترکیب المانهای چند زبان پیشینه بوجود میآیند که هربار ایدههای جدید درگردشند. ایدههایی که در یک زبان ایجاد میشوند در یک خانواده از زبانهای مرتبط پخش میشوند، و سپس از بین خلاهای بین خانوادهها منتقل شده و در خانوادههای دیگر ظاهر میشوند.
این حقیقت که این دسته بندی ممکن است در راستای محورهای مختلف انجام شوند، این وظیفه را پیچیده تر میکند؛ برای مثال، جاوا هم یک زبان شیءگرا(چون به برنامه نویسی شیءگرا تشویق میکند) و زبان همزمان(چون ساختارهای داخلی برای اجرای چندین جریان موازی دارد) است. پایتون یک زبان اسکریپتی شیءگراست.
در نگاه کلی، زبانهای برنامه نویسی به مثالهای برنامه نویسی و یک دسته بندی بر اساس محدوده استفاده تقسیم میشوند. مثالها شامل برنامه نویسی رویهای، برنامه نویسی شیءگرا، برنامه نویسی کاربردی، وبرنامه نویسی منطقی؛ برخی زبانها ترکیب چند مثالند. یک زبان اسمبلی مثالی از یک مدل مستقیم متضمن معماری ماشین نیست. با توجه به هدف، زبانهای برنامه نویسی ممکن است همه منظوره باشند، زبانهای برنامه نویسی سیستمی، زبانهای اسکریپتی، زبانهای محدوده مشخص، زبانهای همزمان/ گسترده(و یا ترکیب اینها). برخی زبانهای همه منظوره تا حد زیادی برای اهداف آموزشی طراحی شدهاند.
یک زبان برنامه نویسی ممکن است با فاکتورهای غیر مرتبط به مثالهای برنامه نویسی دسته بندی شود. برای مثال، غالب زبانهای برنامه نویسی کلمات کلیدی زبان انگلیسی را استفاده میکنند، در حالیکه تعداد کمی این کار را نمیکنند. سایر زبانها ممکن است براساس داخلی بودن یا نبودن دسته بندی شوند.
ساعت : 5:58 pm | نویسنده : admin
|
گرافیکسولوژی |
مطلب قبلی