کسانی که از کار با رایانه هدف خاصی را دنبال میکنند و حوزه فعالیتهای آنها محدود به زمینه خاصی است، تکلیفشان در به کارگیری ابزارها و انتخاب نرمافزارهای مورد نیاز تاحدی مشخص است، اما دنیای برنامهنویسی و زبانهای مربوطه برخلاف دوران اولیه اختراع رایانه، آنقدر وسیع و گسترده شده است که ورود بدون آگاهی به این دنیا ممکن است موجب سردرگمی گردد و فرد پس از گذشت مدت زمان طولانی مجددا به نقطهای بازگردد که راه را از آن شروع کرده است.
مسلما در پی این گشت و گذار، تجربهای نسبی کسب کرده است و دانشی فراگرفته است؛ اما شاید به دلیل کمبود آگاهی و نداشتن نقشه مسیر نتواند دانش خود را در عمل به کار گیرد. واقعا خصوصیات یک زبان خوب چیست و آیا زبانی وجود دارد که همه این خصوصیات را یکجا داشته باشد؟
سادگی
زبانهای سطح پایین از خصوصیت سادگی بیبهرهاند. مسلما یک انسان نمیتواند بسادگی با رایانه با استفاده از یک زبان سطح پایین ارتباط برقرار کند. اصولا دلیل به وجود آمدن زبانهای سطح بالا نیز همین بوده است.
مکانیزمهای طراحی زبانهای سطح بالا باید حتیالامکان بدون عیب و ساده باشد تا شخص بتواند براحتی به وسیله آن با رایانه ارتباط برقرار کرده و آنچه را که در ذهن دارد بسادگی به زبانی قابل تبدیل به زبان رایانه بیان کند.
یک زبان برنامهسازی، چارچوبی مفهومی را برای فکر کردن راجع به الگوریتمها و همچنین ابزارهایی را برای بیان آن الگوریتمها تدارک میبیند. یک زبان برنامهنویسی باید قبل از نوشتن کد، به برنامهنویس کمک کند. باید مجموعهای از مفاهیم واضح، ساده و یکپارچه را تدارک ببیند که برای طراحی الگوریتم، مورد استفاده قرار گیرند.
خوانایی
یکی از مهمترین ویژگیهای یک زبان که باید به آن توجه شود، خوانایی برنامههای آن زبان است. فرض کنید شخصی به زبانی همچون اسمبلی برنامهای مینویسد و آن را در اختیار شخص دیگری آشنا به این زبان قرار میدهد. در صورتی که این فرد تجربه و تسلط کافی به این زبان نداشته باشد، نمیتواند منطق برنامه و طریقه کار آن را درک کند. در صورتی هم که شخص بینش کافی در این زمینه را داشته باشد و بر کدهای این زبان تسلط داشته باشد ممکن است پس از مدت زمان نسبتا زیادی و با زحمت به منطق برنامه پی ببرد. البته توجه داشته باشید که صحبت ما در اینجا برنامهای با مقدار متوسط کد است. کدهای با حجم کم و اندازههای کوچک توسط افراد کمتجربهتر هم قابل درک هستند و درک کدهای یک برنامه بزرگ حتی برای با تجربهترین افراد در این زمینه نیز با زحمت فراوان همراه بوده و گاهی مستلزم روزها و ماهها زمان است. این یکی از بزرگترین مشکلات یک زبان برنامهنویسی سطح پایین با قابلیت خوانایی کم است که گاهی حتی نویسنده برنامه را نیز با مشکل روبهرو میکند. بسیار اتفاق میافتد که شخص برنامهنویس، پس از گذشت مدت زمانی، هنگامی که به برنامه خود رجوع میکند در درک نوشتههای خود نیز دچار مشکل میشود و باید زمانی را صرف به خاطر آوردن منطق برنامه خود کند. معمولا برای کم کردن چنین مشکلی، برنامهنویس ناچار است برای قطعه به قطعه و گاهی خط به خط برنامه خود توضیحاتی به زبان خود بنویسد تا بعد از رجوع به آن بتواند دلیل استفاده از آن دستور یا قطعه کد را درک کند.
اما تلاش زبانهای سطح بالا بر این بوده است که تا حد امکان خوانایی برنامه را افزایش داده و درک آن را ساده کنند. این کار با نزدیک کردن زبان برنامهنویسی به زبان گفتار تا حد زیادی انجام میشود. اما تمامی مشکلات آن را حل نمیکند. به هر حال برای آنکه این مشکل به حداقل ممکن برسد باید زبانی را انتخاب کرد که قابلیت خوانایی آن بالا باشد. این یکی از عاملهایی است که علاوه بر نوشتن و درک برنامه، آزمایش، اصلاح آن را نیز تحت تاثیر قرار میدهد.
بسیاری از زبانها ساختارهای نحوی دارند که دو جمله تقریبا مشابه، معانی مختلفی دارند و در نتیجه قابلیت خوانایی آنها پایین خواهد بود. طراحی یک زبان باید طوری باشد که ساختارهایی با معانی مختلف، با هم فرق داشته باشند. یعنی تفاوتهای معنایی باید منعکس کننده تفاوتهای نحوی باشند. اکثر زبانهای برنامهسازی جدید سعی کردهاند تا حد امکان این قاعده را رعایت کنند.
محیط کار
امروزه یک محیط کار توانمند از شاخصترین ویژگیهای یک زبان بهشمار میرود. ساختار تکنیکی یک زبان برنامهسازی فقط یک جنبه از آن زبان است که کاربردش را تحت تاثیر قرار میدهد. یک محیط برنامهنویسی قدرتمند، ممکن است کاربردش را نسبت به یک زبان برنامهنویسی که قدرت تکنیکی بالاتری دارد و محیط برنامهنویسی آن ضعیف است، بیشتر کند.
عوامل و فاکتورهای زیادی را میتوان به عنوان خصوصیات یک محیط برنامهنویسی خوب در نظر گرفت.
قابلیت بازرسی و تست برنامه یکی از مهمترین ویژگیهای یک محیط برنامهنویسی خوب است. برنامهای که بدون اشکال باشد هنوز نوشته نشده است! هر برنامهای کم یا زیاد، اشکال دارد و محیط برنامهنویسی خوب باید به برنامهنویس امکان اجرای گامبهگام،تست، اشکالیابی و اشکالزدایی برنامه را بدهد.
امکانات ویرایشی و تکمیل کد، پیشنهاد دستورات و توابع ممکن، امکان دستیابی سریع به هر قسمت از متن برنامه، کمک به ساختار کد برای بالا بردن خوانایی آن و تسهیل اشکالزدایی برنامه، مستندسازی و… از دیگر امکاناتی است که وجود آن در یک محیط کار برنامهنویسی موجب افزایش کارایی و سهولت کار برنامهنویس خواهد شد.
سرعت
در زبانهای برنامهنویسی یکی سرعت اجرای برنامههای تولید شده و دیگری سرعت کامپایل برنامه مطرح است.
وقتی زبانی برای آموزش به کار گرفته میشود، سرعت ترجمه مهمتر از سرعت اجرا است. معمولا برنامههای دانشجویان چندین بار ترجمه میشوند ولی کمتر اجرا میشوند بنابراین مهم است که کامپایلر سرعت قابلقبولی داشته باشد. برای ساخت برنامههای کاربردی که ترجمه یک بار انجام میشود و برنامه چندین بار اجرا میشود، سرعت کامپایل آنقدر مهم نبوده و در مرکز توجه قرار ندارد. اگر تشخیص عیبها ساده باشد و کاربر بتواند بر توسعه و نگهداری برنامه کنترل داشته باشد، چنانچه در اجرای میلیونها دستور در ثانیه، اندکی تاخیر ایجاد شود قابل تحمل است.
قابلیت حمل
یک معیار مهم برای بسیاری از پروژههای برنامهنویسی، قابلیت انتقال یک برنامه از یک سیستم رایانهای به سیستم دیگر است. زبانی که به ماشین خاصی وابسته نباشد، برنامههای نوشته شده در آن زبان، از ماشینی به ماشین دیگر قابل حمل است. زبانی مثل C++، تعاریف استانداردی دارد که میتوان برنامههای قابل حمل تولید کرد.
وابستگی به سیستم عامل
اگر یک زبان به سیستم عامل خاصی وابسته باشد یک عیب برای آن زبان محسوب میشود. این مساله از دو جنبه قابل بررسی است. یکی آن که خود زبان به سیستم عامل وابسته نباشد و دیگر آن که برنامه تولیدی آن بتواند روی سیستم عاملهای گوناگون اجرا شود.
زبانی مثل++ C زبانی است که کامپایلرهای مختلفی برای آن در سیستم عاملهای گوناگون طراحی شده است.
هر کس که به نحوی این زبان آشنا باشد میتواند در هر سیستم عاملی، برنامه نوشته و با استفاده از کامپایلر مخصوص آن سیستم عامل برنامه خود را کامپایل و اجرا کند، اما برنامه کامپایل شده معمولا در سیستم عاملهای دیگر قابل اجرا نیست و تنها راهحل برای این مساله آن است که برنامه نوشته شده با کامپایلر دیگری برای سیستم عامل دیگر مجددا کامپایل شده و فایل اجرایی مخصوص آن ایجاد شود. زبانی مثل# C زبانی است که هم کامپایلر آن و هم برنامههای اجرایی آن مخصوص ویندوز است و از این نظر محدودیت دارد، اما زبانی مثل جاوا، با توجه به این که کامپایلر آن کد میانی یا کد ماشین مجازی تولید میکند، برنامههای اجرایی آن مستقیما بدون نیاز به کامپایل مجدد روی سیستم عاملهای دیگر قابل اجراست. البته پیش از این نیز گفتیم که نرمافزار ماشین مجازی جاوا برای سیستم عاملهای مختلف متفاوت است، اما زمانی که این نرمافزار نصب شود دیگر مشکل انتقال فایلهای اجرایی از یک سیستم عامل به دیگری در میان نخواهد بود.
گستره کاربرد
پشتیبانی از گستره وسیعتر کاربرد، از خصوصیات دیگر زبانهای برنامهنویسی است که امتیاز بیشتری به آن میدهد. یک زبان ممکن است تنها برای هدف و کاربرد خاصی جوابگو باشد و زبان دیگری بتواند زمینههای گوناگونی ازجمله سختافزار، برنامههای کاربردی، گرافیکی، پایگاه داده، برنامههای تحت وب، برنامههای قابل اجرا روی تلفنهای همراه، برنامههای بزرگ سازمانی، برنامههای تحت شبکه و… را پوشش دهد. یک زبان خوب خصوصیات بسیار دیگری نیز دارد که از حوصله این بحث خارج است. در پایان یادآور میشویم که زبانی وجود ندارد که در همه این خصوصیات برتر باشد. بنابراین زبانی یک زبان خوب به شمار میرود که به معیارهای گفته شده نزدیکتر بوده و از همه مهمتر پاسخگوی نیاز و پوششدهنده هدف کاربر خود باشد.