تاریخ

یکی از اولین کتاب‌هایی که مستقلاً به علم اخلاق پرداخته است کتاب اخلاق نیکوماخوس اثر ارسطو است.
ارتباط اخلاق با علوم دیگر

جایگاه اخلاق در نقشهٔ علم، در انتهاست

دسته بندی علوم توسّط خواجه نصیر الدین طوسی در آغاز کتاب اخلاق ناصری، جایگاه علم اخلاق را در بین سایر علوم چنین آورده:






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







وابستگی

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






پیش درآمدی

علم اخلاق در فراهم آوردن مبادی علم حقوق و سیاست و تدبیر مُدُن نقش دارد. ارسطو، کتاب اخلاق نیکوماخوس اش را به عنوان مقدّمه‌ای برای کتاب سیاست مُدُنش نوشته

علم اخلاق بعضی از مبادی دو علم تدبیر منزل و سیاست مدن را نیز تأمین می‌کند.






شاخه‌های اخلاق

اخلاق به سه شاخهٔ کاملاً مجزا تقسیم می‌شود∗:

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

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






روش ایجاد و از بین بردن صفات اخلاقی

اخلاق در اسلام

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






توضیحات

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







درستکاری

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

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

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





فرااخلاق

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

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

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





فلسفه اخلاق

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

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






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

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

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






مسائل

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






خیر و شر

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

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

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






درست و نادرست

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

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

عده ای از متفکران فلسفه اخلاق معتقدند که درستی و نادرستی امری نسبی است. اینان استناد می کنند بر تأثیر زمان و مکان بر درستی و نادرستی امور و یا بستگی درستی امور به شرایط. اما این استنتاج غلط است؛ گزاره‌های مذکور به معنای نسبی بودن بنیان اخلاقیات نیست بلکه به این معناست که اصول بنیادین اخلاق در شرایط مختلف اعمال متفاوتی را ایجاب می کند. یعنی ما بنیاد محکمی برای اخلاق داریم که بر آن ساختمانی نسبی ساخته شده است.
5:55 pm
برنامه‌نویسی

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

برنامه‌نویسی کامپیوتر (که اغلب در انگلیسی programming یا coding گفته می‌شود) فرایند نوشتن، اشکال زدایی(debug) و نگهداری کد منبع (source code) برنامه کامپیوتر می‌باشد. این کد منبع با یک زبان برنامه نویسی نوشته شده است. این کد منبع ممکن است تغییر داده شده یک کد قبلی و یا یک کد کاملاً جدید باشد. هدف برنامه نویسی ساختن یک برنامه می‌باشد که یک رفتار خواسته شده را به نمایش بگذارد.






تاریخچه
موضوع دستگاه‌هایی که به دنباله‌ای از دستورالعمل‌های از قبل تعریف شده عمل می‌کند بر می‌گردد به Greek Mythology.

برنامه نویسی مدرن
اندازه گیری کاربرد زبان

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


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



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

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

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





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

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

نسل اول زبان ماشین - زبان صفرو یک
نسل دوم زبانهایی مانند اسمبلی -قابل فهم تر برای انسان
نسل سوم زبانهایی مانند کوبول و پی ال وان و... -دستورات قابل فهم تر برای انسان و نیاز به کمپایلرها
نسل چهارم مثل زبانهای اوراکل و فاکس پرو و اس کیو الها - نزدیک به محاوره‌های انسانی
نسل پنج زبانهایی مانند prolog , ops5 - تمرکز بر حل مسئله و استفاده از الگوریتمهای نوشته شده توسط

برنامه نویس

یک زبان برنامه نویسی یک زبان مصنوعی است که برای بیان محاسباتی که توسط یک ماشین (مخصوصا رایانه) قابل انجام است، طراحی شده‌است.زبان‌های برنامه نویسی برای ایجاد برنامه‌هایی به کار می‌روند که رفتار یک ماشین را مشخص می‌کنند، الگوریتم دقیق را بیان می‌کنند، و یا روشی برای ارتباط انسانند. بسیاری از زبان‌های برنامه نویسی تعدادی قالب از ویژگی‌های نوشته شده دستوری(syntax) و معناشناسی (semantics) دارند، چرا که رایانه‌ها دستورات دقیقاً مشخص نیاز دارند. برخی توسط سند خصوصیات (specification document) تعیین شده‌اند. (برای مثال یک استاندارد ISO)، در حالی که برخی دیگر دارای پیاده سازی غالبی می‌باشند.(مانند Perl) اولین زبان برنامه نویسی به قبل از اختراع رایانه باز می‌گردد، و برای هدایت رفتار ماشین‌هایی مانند دستگاه‌های نساجی اتوماتیک و نوازنده‌های پیانو به کار می‌رفت. هزاران زبان برنامه نویسی خلق شده‌اند، بیشتر در زمینهٔ رایانه، زمینه‌ای که هر ساله بسیاری دیگر ایجاد می‌شوند.


تقسیم‌بندی
زبان‌های برنامه نویسی را می‌توان از چهار دیدگاه متفاوت مورد بررسی قرار داده و تقسیم بندی کرد: الف)روش‌های برنامه نویسی ۱-زیر روالی ۲-ساخت یافته ۳-مدولار ۴-شئ گرا ب)نزدیکی به زبان ماشین ۱-سطح پایین ۲-سطح میانی ۳-سطح بالا ج)نوع ترجمه ۱-مفسری ۲-کامپایلری د)رابط برنامه نویسی ۱-مبتنی بر متن ۲-مبتنی بر گرافیک (ویژوال)



تعاریف

ویژگی‌هایی که غالباً برای تشکیل یک زبان برنامه نویسی مهم شمرده می‌شوند:

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





هدف: زبان‌های برنامه نویسی با زبان‌های طبیعی تفاوت دارند و آن اینکه زبان‌های طبیعی فقط برای فعل و انفعالات بین مردم به کار می‌روند، در حالیکه زبان‌های برنامه نویسی همچنین به انسانها اجازه می‌دهد که از طریق دستورات با ماشین‌ها ارتباط برقرار کنند. برخی زبان‌های برنامه نویسی بوسیله یک دستگاه استفاده می‌شوند تا دستگاه دیگری را کنترل کند. برای مثال برنامه‌های پست اسکریپت(post script) غالباً توسط برنامه دیگری برای کنترل یک چاپگر و یا نمایشگر ایجاد می‌شوند.
ساختارها: زبان‌های برنامه نویسی ممکن است ساختارهایی برای تعریف و تغییر داده ساختارها یا کنترل جریان اجرا داشته باشند.
توان بیانگر: نظریه محاسبات، زبان‌ها را بوسیله محاسباتی که توان بیان آنها را دارند طبقه بندی می‌کند. تمام زبان‌های "کامل تورینگ" می‌توانند مجموعه یکسانی از الگوریتم‌ها را پیاده سازی کنند.ANSI/ISO SQL و Charity مثال‌هایی هستند از زبان‌هایی که کامل تورینگ نیستند، ولی غالباً زبان برنامه نویسی نامیده می‌شوند.

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


کاربرد

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

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

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




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


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

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

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



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

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

نوع گذاری قوی مانع رخ دادن مشکل فوق می‌شود. تلاش برای انجام عملیات روی نوع نادرست متغیر منجر به رخ دادن خطا می‌شود. زبان‌هایی که نوع گذاری قوی دارند غالباً با نام "نوع-امن" و یا امن شناخته می‌شوند. تمام تعاریف جایگزین برای "ضعیف نوع گذاری شده" به زبان‌ها اشاره می‌کند، مثل 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 را نگه دارد، مانند چند برنامه جاوا سکریبت، در قسمتی از کد پرل خود و برای پشتیبانی از چندین زبان برنامه نویسی با تناسب متغیر در "مدرک اینجا" استفاده کند.
ساعت : 5:55 pm | نویسنده : admin | کاکاپو | مطلب قبلی
کاکاپو | next page | next page