بر اساس تعاریف جدید برنامهنویسی سطح پائین و برنامهنویسی سیستم یکی نیستند و این دو مفهوم به اشتباه یکسان فرض شدهاند.
ترکیب دو ایدهی برنامهنویسی سطح پائین (کار با جزئیات سختافزاری و پیادهسازی ماشین) و طراحی سیستم (ساخت و مدیریت یک مجموعهی پیچیده از مؤلفههای مرتبط) به نظر غیرضروری میرسد؛ اما این قضیه تا چه اندازه صحیح است؟ و از تعریف مجدد سیستمها به چه نتیجهای میتوان رسید؟
برای درک تکامل اصطلاح برنامهنویسی سیستم بازگشت به منشأ سیستمهای کامپیوتری مدرن ضروری است. دقیقا مشخص نیست چه کسی این عبارت را اختراع کرده است اما بر اساس پژوهشها تلاشهای جدی برای تعریف سیستمهای کامپیوتری تقریبا از اوایل دههی ۷۰ آغاز شده است. در مقالهای با نام زبانهای برنامهنویسی سیستم به این تعریف اشاره شده است:
یک برنامهی سیستمی مجموعهای یکپارچه از برنامههای فرعی یا زیربرنامه است، زیربرنامهها یک مجموعهی یکپارچه و بزرگتر از مجموعه اجزا را تشکیل میدهند که اندازه و پیچیدگی آن فراتر از یک حد مشخص است. از نمونههای متداول میتوان به سیستمهایی برای برنامهنویسی چندگانه، ترجمه، شبیهسازی، مدیریت اطلاعات و اشتراکگذاری زمانی اشاره کرد. فهرست زیر مشخصات برنامههای سیستمی را ارائه میدهد که بعضی از آنها را میتوان در برنامههای غیرسیستمی هم پیدا کرد و البته ممکن است یک سیستم مشخص تمام این ویژگیها را به صورت یکجا نداشته باشد:
۱. مسئلهی قابل حل ماهیت گستردهای دارد و شامل تعداد زیادی مسائل فرعی و متنوع است.
۲. از برنامهی سیستمی برای پشتیبانی از برنامههای کاربردی و نرمافزاری دیگر استفاده میشود اما درعینحال میتواند بستهی کاملی از برنامهها هم باشد.
۳. برنامهی سیستمی برای تولید پیوسته طراحی شده است نه به عنوان راهحلی یک جا برای حل یک مشکل در برنامهها
۴. برنامهی سیستمی از نظر تعداد و انواع ویژگیهای تحت پشتیبانی به صورت پیوسته در حال تکامل است.
۵. یک برنامهی سیستمی به یک ساختار یا برنامهی مشخص داخل و میان ماژولها (برای مثال برقراری ارتباط) نیاز دارد و معمولا توسط بیش از یک شخص یا گروهی از اشخاص طراحی و پیادهسازی میشود.
این تعریف تا حدودی قابل قبول است. سیستمهای کامپیوتری معمولا دارای مقیاس گسترده و کاربرد طولانی هستند و به مرور زمان تغییر میکنند. البته با این که این تعریف بیشتر توصیفی است اما چشمانداز اصلی آن جداسازی زبانهای سطح پائین از زبانهای سیستمی است (برای مثال مقایسهی اسمبلی با فرترن).
هدف از زبان برنامهنویسی سیستم فراهم کردن زبانی است که بتوان بدون نگرانی در مورد دستکاری بیتها از آن استفاده کرد و درعینحال به کدی دست یافت که عملکرد آن از کدهای دستی بهتر باشد. چنین زبانی باید اختصار و خوانایی زبانهای سطح بالا را با بازدهی فضا و زمان و دسترسی به امکانات سیستمعامل و ماشین زبان اسمبلر را ترکیب کند. زمان طراحی، نوشتن و اشکالزدایی باید بدون تحمیل سربار بر منابع سیستمی به حداقل برسند. پژوهشگرهای CMU زبانی به نام BLISS (زبانی برای برنامهنویسی سیستم) را منتشر کردهاند که به این صورت تعریف میشود:
BLISS یک زبان پیادهسازی است، البته با توجه به این که هدف تمام زبانهای کامپیوتری پیادهسازی است، این تعریف کمی مبهم است. اما در واقع مفهوم عمومی این اصطلاح مدنظر است یعنی زبانهای سطح بالایی که بیشتر بر یک برنامهی مشخص مثل نوشتن سیستمهای بزرگ نرمافزاری تولیدی برای یک ماشین مشخص تأکید میکنند.
مؤلفان، زبان پیاده سازی را بالاتر از اسمبلی و پائینتر از زبان طراحی میدانند
زبانهای هدفمند مثل کامپایلر، کامپایلرها در این دسته قرار نمیگیرند و البته وما مستقل از ماشین هم نیستند. در این تعریف بر اصطلاح پیادهسازی تأکید میشود و از کلماتی مثل طراحی و مستندسازی استفاده نشده است؛ بنابراین از یک زبان پیادهسازی انتظار نمیرود که طراحی یک سیستم بزرگ یا مستندسازی آن را توصیف کند. مفاهیمی مثل استقلال ماشین، توصیف مشابهی از طراحی و پیادهسازی، خودمستندسازی و مفاهیم دیگر دارند و معیارهایی برای ارزیابی زبانهای مختلف هستند.
در اینجا مؤلفان، زبان پیادهسازی را بالاتر از اسمبلی و پائینتر زبان طراحی میدانند. بر اساس پژوهشهای قبلی، طراحی و پیاده سازی سیستم هرکدام زبان مجزایی دارند. آخرین مدخل مربوط به برنامهنویسی سیستم را میتوان در یک متن آموزشی در مورد یادگیری برنامهنویسی سیستم مشاهده کرد که در ۱۹۷۲ نوشته شده است.
میتوان کامپیوتر را مثل جانداری درنظر گرفت که از تمام دستورات اطاعت میکند. بر اساس یک تصور دیگر، کامپیوترها انسانهایی هستند که از ف ساخته شدهاند یا برعکس، انسانها کامپیوترهایی هستند که از گوشت و خون تشکیل شدهاند. با این حال، با نگاهی دقیقتر به کامپیوترها میتوان به این نتیجه رسید که اساسا کامپیوترها ماشینهایی تابع دستورالعملهای مشخص و ابتدایی هستند.
در اولین روزهای اختراع کامپیوتر، مردم با دستورالعملهای ابتدایی بین دو حالت On و Off با کامپیوتر ارتباط برقرار میکردند. خیلی زود مردم به دنبال دستورالعملهای پیچیدهتر رفتند. برای مثال میخواستند خروجی این مسأله را در کامپیوتر ببینند: X=30*Y؛ با توجه به این که Y=10 در نتیجه X کدام است؟ کامپیوترهای کنونی بدون برنامههای سیستمی قادر به درک چنین زبانی نیستند.
مبانی برنامهنویسی سیستم
برنامههای سیستمی (برای مثال کامپایلرها، لودرها، پردازندههای ماکرو، سیستمهای عامل) برای تطبیق بهتر کامپیوترها با نیازهای کاربران توسعه یافتند. علاوه بر این مردم به دنبال کمک یا دستیارهایی برای آمادهسازی برنامههای خود بودند. این تعریف یادآوری میکند سیستمها در خدمت مردم هستند حتی اگر صرفا زیرساختهایی باشند که ارتباط مستقیمی با کاربرها ندارند.
در دههی ۷۰ و ۸۰ اغلب پژوهشگرها برنامهنویسی سیستم را نقطهی مقابل برنامهنویسی اسمبلی میدانستند. در آن دوره ابزار خوبی برای ساخت سیستمها وجود نداشت (البته هیچ اطمینانی از وجود Lisp در میان این زبانها وجود ندارد هیچ کدام از منابع به Lisp اشاره نکردهاند، با این حال ماشینهای Lisp وجود داشتند).
در اواسط دههی ۹۰، با ظهور زبانهای اسکریپتنویسی داینامیک تغییرات عمدهای در زبانهای برنامهنویسی رخ داد. بهبود سیستمهای اسکریپتنویسی مثل Bash، زبانهایی مثل پرل (۱۹۸۷)، Tcl ، پایتون (۱۹۹۰)، Ruby ، PHP و جاوا اسکریپت (۱۹۹۵) به توسعهی برنامهنویسی کمک کرد. این تغییرات در مقالهی تأثیرگذار اوسترهاوت با عنوان اسکریپت نویسی: برنامهنویسی سطح بالای قرن بیستویک (۱۹۹۸) به اوج خود رسیدند. به موج حاصل از این تغییرات دوگانگی اوسترهاوت بین زبانهای برنامهنویسی سیستمی و زبانهای اسکریپتنویسی گفته میشود.
زبانهای اسکریپتنویسی برای وظایفی متفاوت با زبانهای برنامهنویسی سیستمی طراحی شدهاند و همین مسأله ریشهی تفاوتهای بنیادی این دو زبان است. زبانهای برنامهنویسی سیستمی برای تولید ساختارهای دادهای و الگوریتمها از ابتداییترین عناصر کامپیوتری مثل کلمات حافظه طراحی شدهاند.
در مقابل، زبانهای اسکریپتنویسی برای چسباندن طراحی شدهاند: مجموعهای از مؤلفههای قدرتمند دارند و در اصل برای اتصال این مؤلفهها با یکدیگر در نظر گرفته شدهاند. زبانهای برنامهنویسی برای کمک به مدیریت پیچیدگی، Strongly Typed یا وابستهی زیاد به نوع هستند؛ مفهومی که در مقابل Weakly Typed یا وابسته کم به نوع قرار میگیرد. به این معنی که باید نوع متغیرها، ورودیها و خروجیها توابع و. دقیقا تعیین شوند و کامپایلر پیش از اجرای کدها و رسیدن به مرحلهی اجرای Runtime و بیلد، این مورد را بررسی میکند. در حالیکه زبانهای اسکریپتنویسی Typeless (بدون نوع) هستند. برای مثال میتوان از تعریف متغیر بدون نوع در آنها استفاده کرد و کامپایلر تمام کارها را برعهده دارد. از اینرو برای سادهسازی روابط بین مؤلفهها و توسعهی سریع برنامهها از آنها استفاده میشود. گرایشهای جدید از جمله ماشینهای سریعتر، زبانهای اسکریپتنویسی بهتر، اهمیت فزایندهی واسطههای کاربری گرافیکی و معماریهای مؤلفهای و رشد اینترنت به شدت کاربرد زبانهای اسکریپتنویسی را بالابردهاند.
در سطح تخصصی اوسترهاوت اسکریپتنویسی و سیستم را در راستای محورهای Type Safety (ایمنی نوع) و دستورالعمل به ازای هر عبارت مقایسه کرده است. Type Safety یا ایمنی نوع به قابلیت یا ویژگی یک زبان برنامهنویسی برای جلوگیری یا کاهش رخ دادن Type Errors یا خطاهای ناشی از عدم تطابق نوع گفته میشود. برای مثال تعریف متغیری از نوع اعشاری و به کارگیری آن به جای اعداد صحیح، منجر به وقوع یک Type Error میشود. اوسترهاوت در سطح طراحی بر نقشهای جدید هر کلاس زبانی تأکید میکند: برنامهنویسی سیستم برای ساخت مؤلفهها و اسکریپتنویسی برای چسباندن آنها به یکدیگر درنظر گرفته میشوند.
مقایسهی زبانهای برنامهنویسی بر اساس سطح و درجهی Typing آنها (زبانهای سطح بالاتر دستورالعملهای ماشین بیشتری را برای هر عبارت زبانی اجرای میکنند) زبانهای برنامهنویسی سیستم مثل C از نوع قوی و سطح متوسط هستند (۵ تا ۱۰ دستورالعمل به ازای هر عبارت). زبانهای اسکریپتنویسی مثل Tcl از نوع ضعیف و سطح بالا هستند (۱۰۰ تا ۱۰۰۰ دستورالعمل به ازای هر عبارت).
تقریبا در همین زمان بود که زبانهای موسوم به Garbage Collected به محبوبیت رسیدند. Garbage Collection، زبالهروبی یا بازیافت حافظه، نوعی مدیریت حافظهی خودکار است. در طی این فرآیند فضایی از حافظهی کامپیوتر که قبلا درگیر نگهداری دادهی موردنیاز یک برنامهی کامپیوتری بوده است و اکنون آن برنامه دیگر نیازی به این داده ندارد، آزاد میشود و برای ذخیره و نگهداری دادهی جدید مورد استفاده قرار میگیرد.
در این دهه جاوا و #C به غولهای برنامهنویسی که امروزه میشناسیم تبدیل شدند. با این حال این دو زبان از ابتدا در گروه زبانهای برنامهنویسی سیستمی قرار نگرفتند و از آنها برای طراحی تعداد زیادی از بزرگترین سیستمهای نرمافزاری دنیا استفاده شده است. اوسترهاوت به طور آشکار توضیح میدهد که در دنیای اینترنت کنونی از جاوا برای برنامهنویسی سیستم استفاده میشود.
از دههی گذشته مرز بین زبانهای اسکریپتنویسی و زبانهای برنامهنویسی سیستمی در حال محو شدن است. شرکتهایی مثل Dropbox توانستند سیستمهای مقیاسپذیر و بزرگی را روی پایتون توسعه دهند. از جاوا اسکریپت برای تبدیل UI-های پیچیده و بلادرنگ (Real-Time) در میلیاردها صفحهی وب استفاده شده است. طبقهبندی تدریجی در پایتون، جاوا اسکریپت و دیگر زبانهای اسکریپتنویسی شدت پیدا کرد و به این صورت گذار از کد اولیه به کد تولید تنها با اضافه کردن اطلاعات نوع ایستا امکانپذیر شد.
درعینحال منابع انبوه مهندسی برای زبانهای ایستا (مثل جاوا اسکریپت) و زبانهای پویا (مثل LuaJIT از Lua یا V8 جاوا اسکریپت و PyPy پایتون) وارد کامپایلرهای JIT شدند و آنها را به رقیب عملکردی سیستمهای زبانهای برنامهنویسی سیستمی (C++، C) تبدیل کردند. سیستمهای توزیعشده و بزرگی مثل اسپارک در اسکالا نوشته شدند. زبانهای برنامهنویسی جدید مثل جولیا و سویفت هم محدودیتهایی را برای زبانهای زبالهروب (Garbage Collector) به وجود آوردند.
هیئتی به نام برنامهنویسی سیستم در سال ۲۰۱۴ و بعد از آن، شامل بزرگترین مغزهای زبانهای برنامهنویسی کنونی از جمله بیجارن استروستراپ (خالق ++C)، روب پایک (خالق Go)، آندری آلکساندرسکو (توسعهدهندهی D) و نیکو ماتساکیس (توسعهدهندهی Rust). زبان برنامهنویسی سیستم در سال ۲۰۱۴ را این گونه توصیف میکنند:
رابطهی برنامهنویسی سیستم با عملکرد بالا چیست؟ با محدودیتهای منابع و کنترل سختافزاری چطور؟ یا زیرساخت ابری؟ بهطورکلی به نظر میرسد زبانهایی مثل C ،C++ ،Rust و D از نظر سطح انتزاع و خلاصه بودن از ماشین متمایز میشوند. این زبانها جزئیات سختافزار مثل تخصیص حافظه یا قالب و مدیریت دقیق منابع را نمایش میدهند.
یک تعریف دیگر هم برای آن وجود دارد: در صورت روبهرو شدن با مشکل بازدهی یا بهینهسازی چه مقدار آزادی برای حل آن دارید؟ در زبانهای برنامهنویسی سطح پائین با کنترل دقیق جزئیات ماشین میتوانید هر مشکلی را حل کنید. میتوانید دستورالعمل را بر کل آرایهها اعمال کنید و ساختار دادهای بهدستآمده را در کش (Cache) ذخیره کنید. همانطور که انواع ایستا مثل جمع اعداد صحیح با اطمینان بیشتری اجرا میشوند زبانهای برنامهنویسی سطح پائین هم اجرای مطمئنتر دارند بهطوریکه کدها همانطور که تعریف میشوند اجرا میشوند.
در مقابل، بهینهسازی زبانهای تفسیر شده بسیار پیچیده است. بهراحتی نمیتوان از اجرای قابلانتظار کد توسط Runtime اطمینان حاصل کرد. همین مسئله در کامپایلرهای موازی خودکار هم وجود دارد (Vectorizaiton یا برنامهنویسی آرایهای یک مدل برنامهنویسی نیست. بلکه مانند نوشتن یک واسطه در پایتون است، برای مثال انتظار دارید یک تابع در صورت فراخوانی خروجی int (صحیح) تولید کند).
اغلب به برنامهنویسی سطح پائین، برنامهنویسی سیستم میگویند (با اشاره به جزئیات ماشین)؛ اما معنی سیستم چیست؟ با بازگشت به تعریف ۱۹۷۲ میتوان گفت:
۱.مسئلهی قابل حل، ماهیت گستردهای دارد و شامل تعداد زیادی مسائل فرعی و متنوع است.
۲. از برنامهی سیستمی برای پشتیبانی از برنامههای کاربردی و نرمافزاری دیگر استفاده میشود اما درعینحال میتواند بستهی کاملی از برنامهها هم باشد.
۳. برنامهی سیستمی برای تولید پیوسته طراحی شده است نه به عنوان راهحلی یک جا برای حل مشکلی در برنامهها.
۴. برنامهی سیستمی از نظر تعداد و انواع ویژگیهای تحت پشتیبانی به صورت پیوسته در حال تکامل است.
۵. یک برنامهی سیستمی به یک ساختار یا برنامهی مشخص داخل و میان ماژولها (برای مثال برقراری ارتباط) نیاز دارد و معمولا توسط بیش از یک شخص یا گروهی از اشخاص طراحی و پیادهسازی میشود.
به نظر میرسد این گزینهها بیشتر به مشکلات مهندسی نرمافزار اشاره دارند (پیمانهای بودن، قابلیت استفادهی مجدد، تکامل کد) تا مشکلات عملکردی سطح پائین. این یعنی هر زبان برنامهنویسی که حل این مشکلات را در اولویت قرار دهد یک زبان برنامهنویسی سیستمی است! البته این گزینهها برای تعریف یک زبان برنامهنویسی سیستمی کافی نیستند؛ بنابراین میتوان گفت زبانهای برنامهنویسی پویا یا داینامیک از زبانهای سیستمی دور هستند.
اما مفهوم دقیق این تعریف چیست: زبانهای تابعی مثل Ocaml و Haskell بیشتر از زبانهای سطح پائین مثل C یا ++C به سیستم وابسته هستند. هنگام آموزش برنامهنویسی باید اصول برنامهنویسی تابعی مثل ارزش ثبات، تأثیر سیستمهای نوع غنی در بهبود طراحی واسطه و استفاده از توابع مرتبه بالاتر را درنظر گرفت. مدارس باید برنامهنویسی سیستم و سطح پائین را آموزش دهند.
بنابراین آیا تفاوتی بین برنامهنویسی سیستم و مهندسی نرمافزار وجود دارد؟ پاسخ منفی است اما مشکل اینجاست که مهندسی نرمافزار و برنامهنویسی سطح پائین اغلب اوقات به صورت مجزا تدریس میشوند. با این حال اغلب کلاسهای مهندسی نرمافزار معمولا بر شعار نوشتن واسطهها و تستهای مناسب جاوا متمرکز هستند، به همین دلیل لازم است روش طراحی سیستم با توجه به محدودیتهای زیاد منابع آموزش داده شود.
بهتر است به جای عبارت برنامهنویسی سیستم از برنامهنویسی سطح پائین استفاده شود
شاید به این دلیل برنامهنویسی سطح پائین را سیستم مینامند که جذابترین سیستمهای نرمافزاری از نوع سطح پائین هستند (برای مثال، پایگاه دادهها، شبکهها، سیستمهای عامل و.). از آنجا که سیستمهای سطح پائین محدودیتهای زیادی دارند، برای طراحی آنها نیاز به تفکر خلاق است.
در قدم بعدی، برنامهنویس زبان سطح پائین باید به این سؤال پاسخ دهد که کدام ایدههای طراحی سیستم را میتوان برای کار با سختافزار مدرن تطبیق داد. انجمن Rust در این رابطه عملکرد نوآورانهای داشته است، این انجمن چگونگی پیادهسازی اصول برنامهنویسی تابعی یا طراحی نرمافزاری بر مسائل سطح پائین را بررسی میکند (برای مثال مسائلی مثل قراردادها، کنترل خطا یا امنیت حافظه).
به طور خلاصه بهتر است بهجای عبارت برنامهنویسی سیستم از برنامهنویسی سطح پائین استفاده کرد. اهمیت طراحی سیستمهای کامپیوتری به عنوان یک رشته یا زمینه به خاطر نام آن نیست؛ بنابراین جداسازی این دو مفهوم، طراحی زبان برنامهنویسی را شفاف میکند و دیدگاههای مشترکی را نسبت به این دو حوزه به وجود میآورد: چگونه میتوان سیستمی را حول محور ماشین یا برعکس طراحی کرد؟
منبع WILLCRICHTON
آیا محبوبترین زبانهای برنامهنویسی، براساس شاخصها و مولفههای درستی انتخاب میشوند؟ آیا روشهای سنجش محبوبترین زبانهای برنامهنویسی قابل اعتماد هستند؟
معمولا متخصصان نرمافزار، برای اطلاع از محبوبترین زبانهای برنامهنویسی، به سراغ نمودارهای معتبر TIOBE میروند. از طریق این نمودارها، میتوانند متوجه شوند که محبوبترین زبانهای برنامه نویسی در جهان کدام موارد هستند.
نمودارهای معتبر و مفید TIOBE و اطلاعات ارائهشده در مورد محبوبیت زبانهای برنامهنویسی در این نمودارها، نشان میدهد که در طول زمان، و از زمانهای پیشتر، زبانهای برنامهنویسی جاوا و زبان برنامهنویسی C، پادشاهان زبانهای برنامهنویسی و محبوبترین زبانها بودهاند.
اما لحظهای صبر کنید و خیلی سریع نتیجهگیری نکنید. نمودارها و شاخصهای ارائهشدهی PYPL، بهعنوان رقیب نمودارهای TIOBE، نتایج دیگری را نشان میدهد. براساس نمودارهای PYPL، زبانهای برنامهنویسی Python و Java، جزو محبوبترین زبانهای برنامهنویسی و در اصل پادشاهان اصلی زبانهای برنامهنویسی هستند. براساس نمودارهای PYPL، زبان C، که بهشکل شگفتانگیزی با زبان برنامهنویسی C ++ توسعه یافته است، از محبوبیت کمتری برخوردار است و در قسمتهای پایینتر فهرست رتبهبندی محبوبیت زبانهای برنامهنویسی قرار دارد. شاید برای شما هم این سوال پیش بیاید؛ واقعا کدام نتایج درست هستند و کدام نمودار، اطلاعات درستی را ارائه میدهد؟
یکی از موضوعات مهمی که باید به آن توجه داشته باشیم آن است که هر کدام از نمودارها، برای انتخاب محبوبترین زبانهای برنامه نویسی، شاخصها و مولفههای متفاوتی را در نظر میگیرند. البته، یکی از نقاط مشترک در متدولوژی هر دو نمودار این است که عملکرد هر دو در اندازهگیری کثرت زبانهای برنامهنویسی بحثبرانگیز است. TIOBE، کمیت جستجوهای انجامشده در موتور جستجو را بهعنوان مقیاسی برای سنجش درنظر میگیرد. در حالیکه PYPL، به فراوانی جستجوها، و اینکه چند وقت یکبار جستجو شدهاند، اهمیت نشان میدهد و آن را در سنجش خود مورد توجه قرار میدهد.
باید بگوییم که هر دو شاخص اندازهگیری، مولفههای خوبی را برای سنجش در نظر نمیگیرند. بیشک باتوجه به در دسترس بودن منابع آنلاین، میزان جستجو در موتورهای جستجو، نمیتواند بهعنوان یکی از شاخصهای مهم درنظر گرفته شود و روشی قدیمی بهحساب میآید. ممکن است همچنان میلیونها صفحهی وب در مورد یک زبان محبوب ولی قدیمی و شاید مرده، اطلاعاتی را ارائه دهند؛ همانطور که سایتهای زامبی (سایتهایی که به دلایلی، موفق به بهروزرسانی محتوای خود نمیشوند) بسیاری وجود دارد و یا پستهای بلاگهایی که سالها خوانده نشدهاند.
میزان فراوانی جستجوی محتوای آموزشی بهعنوان شاخصی مهم برای محبوبیت یک زبان برنامهنویسی، معیار درستی محسوب نمیشود. زبانهای برنامهنویسی در محیطهای آموزشی، بهوفور به دانشجویان تدریس میشود، و لذا میزان فراوانی جستجوها برای فایلهای آموزشی شاخص درستی برای ارزیابی نیست، و میتواند اطلاعات بسیار متناقضی ارائه بدهد. این مقیاس اندازهگیری، در اصل شاخص معنیداری نیست که بتوان واقعا، میزان محبوبیت زبانهای برنامهنویسی را از روی آن مشخص کرد. در نهایت نمیتوان با این اطلاعات معلوم کرد که کدام زبانهای برنامهنویسی واقعا توسط فراگیران زبانهای برنامهنویسی در عمل مورد استفاده قرار میگیرند.
هنگامی که با دقت بیشتری به اعداد توجه کنید، با مسائل عجیبتری نیز مواجه خواهید شد. با توجه به نمودارهای TIOBE، زبان برنامهنویسی C، در عرض ۵ ماه، از کمترین امتیاز خود، به جایگاه زبان برنامهنویسی سال (Programming Language Of The Year) رسید. بهنظر میرسد که زبان C در سیستمهای نهفته (امبدد)، دوباره ظهور کرده است. اما، علت بروز چنین نتایجی در اندازهگیریها، میتواند مربوط به روشهای ناقص و مصنوعی سنجش باشد.
بیشترین آمار متناقض، مربوط به زبانهای برنامهنویسی Objective-C و Swift است، که برای نوشتن اپلیکیشنهای محلی در سیستم عامل iOS بهکار برده میشوند. بهنظر میرسد که در مجموع، اخیرا محبوبیت زبانهای برنامهنویسی برای پلتفرمهای چندسکویی (cross-platform) مانند Xamarin و React Native کاهش یافته است. اپل در حدود چهار سال، به سمت استفاده از زبان برنامهنویسی Swift متمایل بود، و بهنظر میرسد زبان برنامهنویسی فوقالعادهای است. با این حال، زبان Objective-C هنوز بسیار محبوبتر است و بهصورت گستردهای مورد استفاده قرار میگیرد. وقتی نگاهی به افرادی میاندازیم که با اپلیکیشنهای IOS/tvOS/watchOS سروکار دارند یا با بسیاری از توسعهدهندگان iOS صحبت میکنیم؛ متوجه میشویم بعید است که برنامهنویسی، از زبان Objective-C به زبان Swift تغییر وضعیت نداده باشند.
اما همهی این حکایتها و قصهها، نمیتوانند جای آمار و دادهها را بگیرند. اگر میبینیم که شاخصهای سنجش محبوبیت، نتایجی متفاوت با تجارب شخصی برنامهنویسان اراده میدهند، میتوانیم اینطور نتیجهگیری کنیم که تعصبات شخصی و سوگیریهای فردی هم میتواند باعث ارائهی نتایج نادرست شود. البته یک مقیاس اندازهگیری دیگری نیز برای سنجش محبوبیت زبانهای برنامهنویسی وجود دارد. اگر به گزارش سالانهی GitHub در مورد ۱۵ زبان برنامهنویسی محبوب در پلتفرم توجه کنید؛ متوجه میشوید که نتایج این گزارش، به نتایج ارائهشده توسط تجربهی فردی برنامهنویسان بازار بسیار نزدیک است، و با نتایج ارائهشده از نمودارهای TIOBE و PYPL تفاوتهایی دارد.
طبق گزارش GitHub، در سالهای ۲۰۱۶ و ۲۰۱۷، محبوبترین زبان برنامهنویسی در جهان، با فاصله قابل توجهی از بقیهی زبانها، زبان Javascript بوده است. پایتون در مقام دوم، جاوا در مقام سوم و Ruby در مقام چهارم نمودار قرار دارند. این نتایج، در مقایسه با نمودار TIOBE، تفاوت فاحشی را نشان میدهد. در نمودار TIOBE، ابتدا زبانهای برنامهنویسی جاوا و C محبوبترین زبانها معرفی شدند؛ و سپس با فاصلهی زیاد پایتون و C ++ قرار دارند، جاوا اسکریپت در رتبهی هشتم ایستاده است. همچنین با توجه به نمودارهای PYPL، محبوبیت زبانهای برنامهنویسی بهترتیب بدین صورت گزارش شده است: پایتون، جاوا در ابتدای نمودار و با فاصلهی زیاد، جاوا اسکریپت و PHP قرار دارند.
روشن است که آمار و ارقام گیتهاب، نمایانگر کل این حوزه نیست؛ اندازهی نمونه بسیار بزرگ است و تنها به پروژه های متن باز میپردازد. اما بهنظر میرسد که GitHub، تنها سیستم سنجشی است که زبان Swift را محبوبتر از Objective-C میداند. همین مساله باعث میشود که نتایج آن متقاعدکننده بهنظر برسد؛ اما باز هم بهدلیل متن باز بودن آن، نتایج ارائهشدهی از طریق این سیستم را نمیتوان قطعی در نظر گرفت.
آمار ارائهشده، بسیار مهم هستند. فراتر از بحث کنجکاوی و سرگرمکننده بودن آنها، اطلاعات مهمی را در اختیار قرار میدهند. با اینکه موضوع محبوبیت زبانهای برنامهنویسی، در کل موضوعی چندان مهم و خاص نیست، ولی بیاهمیت هم نیست. بررسی محبوبیت زبانهای برنامهنویسی، تعیین میکنند که چه زبانهایی بیشتر مورد توجه قرار دارند. این موضوع برای افرادی که تمایل دارند زبان برنامهنویسی را دنبال کنند، اهمیت پیدا میکند و در نتیجه افرادی که وارد حوزههای آموزش زبانهای برنامهنویسی میشوند، میتوانند زبانی را آموزش ببینند که محبوبتر است و میتواند زمینهی اشتغال را برای آنها فراهم کند. بنابراین وقتی سه روش مختلف، نتایج متفاوتی را ارائه میدهند، شرایط زیاد جالب نیست و کمی ناراحتکننده بهنظر میرسد.
منبع TECHCRUNCH
برای مقاصد و کاربردهای گوناگون کاربران و متخصصان، زبانهای برنامهنویسی مختلفی وجود دارد که در زمینههای گوناگون و حتی مصرف برق، با هم تفاوت دارند.
کیفیت خروجی زبانهای برنامهنویسی، بسته به نوع آنها و حتی مهارت برنامهنویس، با هم تفاوت دارد. مصرف برق، یکی دیگر از فاکتورهای دخیل در کارایی سیستمعاملها است که برخی اوقات، دستکم گرفته میشود. اکنون این سؤال ایجاد میشود که آیا مصرف انرژی، نشاندهندهی کیفیت یک زبان برنامهنویسی هست یا خیر؟
گروهی متشکل از محققان ۳ دانشگاه مختلف در پرتقال، سال گذشتهی میلادی تحقیقی را برای پاسخ به سؤال فوق انجام دادند که منجر به مقالهای بهنام Energy Efficiency Across Programming Languages شد. آنها آزمایش خود را روی ۱۰ مسئلهی نرمافزاری بین ۲۷ زبان برنامهنویسی انجام دادند و در حین اجرای نرمافزار حاصل، مقدار مصرف برق هریک از آنها را بررسی کردند. بهعلاوه، سرعت و مقدار اشغال حافظهی رم نیز مورد بررسی قرار گرفت.
محققان پروژهی تحقیقاتی، ۱۰ مسئلهی آزمایشی را در سرویس Computer Language
سرویس مورد استفاده، قبلا بهنام The Great Computer Language Shootout شناخته میشد. محققان اعتقاد دارند استفاده از سرویس
پیادهسازی انواع مختلف بنچمارک، برای آزمایش کارایی و مصرف برق، حیاتی بود. درواقع، نتایج آزمایشها بسته به نوع تست، تغییر میکرد و باید گسترهای جامع مورد آزمایش قرار میگرفت. بهعنوان مثال، زبان برنامهنویسی C از لحاظ کلی، سریعترین زبان با مصرف بهینهی برق بود، اما در آزمایشی شامل اسکن پایگاه دادهی DNA برای یافتن ژنتیک خاص، زبان Rust نتایج بهتری داشت و C در رتبهی سوم مصرف انرژی قرار گرفت.
در همان آزمایش DNA، انتخاب بهترین زبان، به معیارهای آزمایش نیز بستگی داشت. در معیار سرعت، C پس از Rust در رتبهی دوم قرار گرفت، اما در معیار اشغال حافظهی رم، Rust سقوطی ۹ پلهای داشت. زبان فورترن، در بررسی براساس معیار مصرف انرژی، رتبهی دوم را داشت، اما با مرتب کردن نتایج براساس زمان مورد نیاز برای اجرای فرایند،۶ پله سقوط کرد.
جدول کامل مقایسهی زبانهای برنامهنویسی براساس زمان، انرژی و اشغال حافظهی رم
محققان در مقالهی خود تأکید کردند که با دقت از راهنمای استاندارد سرویس CLBG در انتخاب نسخهی کامپایلر برنامهها و روندهای بهینهسازی، پیروی کردند. مصرف برق هر آزمایش نیز توسط ابزاری از
سختافزار و سیستمعامل همهی زبانها در آزمایش، یکسان بود
فاکتور دیگری که برای بهینهسازی نتایج تنظیم شد،
زبان Lisp، بهطور میانگین ۲.۲۷ برابر C انرژی مصرف میکند (۱۳۱.۳۴ ژول). بهعلاوه، در مقایسه با پاسکال، ۲.۴۴ برابر برای اجرای یک برنامه، زمان نیاز دارد (۴۹۲۶.۹۹ میلی ثانیه) و همچنین، ۱.۹۲ برابر حافظهی رم نیاز دارد (۱۲۶.۶۴ مگابیت).
محققان، نتایج را بین زبانهای کامپایل شده و تفسیر شده هم بررسی کردند. بهعلاوه، دستهبندی مجزایی هم برای زبانهای اجرا شده در ماشینهای مجازی، در مقاله افزوده شد. دستهبندیهای دیگر در مقاله، شامل مقایسهی پاردایمهای مختلف برنامهنویسی همچون انواع شیٔگرا و اسکریپتی میشود.
مقایسهی زمان و انرژی مصرفی
مقالهی منتشر شده، بهطور جدی با نظریهی تأثیر سرعت بر کاهش مصرف انرژی مخالفت کرد. در متن مقاله آمده بود که محاسبهی انرژی مصرفی، فرمولی فیزیکی شبیه به E=T*P نیست که انرژی را به زمان وابسته کند. بخشی از دلیل تناقض نیز، مصرف انرژی بهصورت غیرمنظم است. درواقع، نرخ ثابتی برای مصرف انرژی یک زبان برنامهنویسی، وجود ندارد. درنتیحه، نتایج تحقیق مذکور میتواند یافتههای محققان پیشین و نظریههای آنها پیرامون تأثیر سرعت بر مصرف انرژی را تحت تأثیر قرار دهد.
در یکی از آزمایشهای صورت گرفته، برنامهی نوشته شده در زبان Chapel، نسبت به برنامهای به زبان پاسکال، ۵۵ درصد زمان کمتری برای اجرا نیاز داشت. درحالیکه برنامهی زبان پاسکال، انرژی کمتری (به میزان ۱۰ درصد) مصرف کرد. درنهایت با وجود آن که بسیاری، هنوز سرعت را با مصرف انرژی مرتبط میدانند، محققان مذکور در مقالهی خود بهروشنی اعلام کردند که یک زبان برنامهنویسی سریعتر، وما مصرف انرژی کمتری ندارد».
سرعت بیشتر وما بهمعنای مصرف پایینتر انرژی نیست
پاسخ دادن به سؤال این بخش، دشواریهای زیادی دارد، چرا که مصرف انرژی، به فاکتورهای بسیار متعددی وابسته میشود که از آن میان میتوان به کامپایلر و حتی کتابخانههای مورد استفاده اشاره کرد. محققان در بخش مهم دیگری از مقالهی خود، منبع مصرف انرژی برنامهها را نیز بررسی کردند. آنها میگویند که اکثر برق مصرفی (حدود ۸۸ درصد) توسط CPU مصرف میشود و ارتباطی هم به کامپایل شدن، تفسیر شدن یا اجرا روی ماشینهای مجازی ندارد. البته، برنامههای تفسیر شده، نتایج متفاوتی را در شرایط مختلف نشان دادند و بازهی تنوع آنها از ۸۱.۵۷ درصد تا ۹۲.۹ درصد، تفاوت داشت.
مقایسه براساس اشغال حافظهی رم
نتیجهی مهم دیگر در تحقیقات مذکور، وابستگی اوج استفاده از DRAM را به انرژی مصرفی، نقض کرد. بههرحال، با وجود تمامی یافتههای بالا، پاسخی تقریبا مثبت به سؤال این بخش داده میشود. در مقالهی منتشر شده برای این تحقیق میخوانیم:
۵ زبان برنامهنویسی اول براساس مصرف انرژی، در دستهبندی براساس زمان اجرای برنامهها نیز با تفاوتهایی جزئی در همان رتبهها قرار میگیرند.
از میان ۱۰ مسئلهی آزمایشی انجام شده، در ۹ عدد از آنها، بالاترین امتیاز از لحاظ سرعت و بازدهی، از زبانهایی بهدست آمد که بین ۳ مورد برتر از لحاظ مصرف انرژی قرار داشتند. در بخش دیگری از مقاله گفته شد:
باور عمومی بر آن است که ۳ زبان برتر برنامهنویسی یعنی C و ++C و Rust، بهبهترین نحو بهینهسازی شده و بازدهی بالایی دارند. دادههای ما در تحقیقات نیز همین باور عمومی را تصدیق میکنند.
با وجود گفتههای بالا، وقتی زبانهای برنامهنویسی دیگر را طبق فاکتورهای سرعت و مصرف انرژی مرتب کنیم، نتایج برابری مشاهده نمیشود. تنها ۴ زبان، رتبهبندی برابری در فهرست زمان و مصرف انرژی داشتند (OCaml، Haskel، Racket و Python).
دستهبندی براساس پارادایمهای برنامهنویسی
یکی از نتایج جالب و مهم آزمایشها، دربارهی زبانهای برنامهنویسی کامپایل شده بود. آن زبانها، همیشه در بازدهی انرژی و سرعت، بالاتر از سایر تصور میشوند. نتایج مقاله نیز تاحدودی آن تصورات را تأیید کرد. بهطور میانگین، زبانهای کامپایل شده، ۱۲۰ ژول انرژی برای اجرای راهکارهای نرمافزاری مصرف کردند، درحالیکه زبانهای اجرا شده روی ماشین مجازی یا تفسیری، بهترتیب ۵۷۶ و ۲۳۶۵ ژول انرژی نیاز داشتند.
در مقایسهی زمانهای اجرای برنامهها، زبانهای کامپایل شده باز هم نتایج مثبتی نشان دادند. در نتایج آن بخش گفته شد که زبانهای کامپایل شده بهصورت میانگین ۵۱۰۳ میلیثانیه زمان نیاز داشتند. درحالیکه، زبانهای اجرا شده روی ماشین های مجازی عدد ۲۰۶۲۳ میلیثانیه را برای زمان نشان دادند و همین مقدار، برای زبانهای تفسیری به ۸۷۶۱۴ میلیثانیه رسید. درنهایت، ۴ عدد از ۵ زبان برتر هر ۲ دستهبندی زبانهای کامپایل شده بودند و تنها جاوا، مثال نقض فهرستها بود.
زبانهای کامپایل شده هم از لحاظ زمان و هم انرژی، بازدهی بیشتری داشتند
در میان زبانهای برنامهنویسی با کمترین سرعت، ۵ زبان کند فهرست، نمونههای تفسیری یعنی Lua، Python، Perl، Ruby و Typexcript بودند. بهعلاوه، زبانهای با بیشترین نرخ مصرف انرژی نیز از همان نوع بودند: Perl، Python، Ruby، JRuby و Lua. البته، در نوعی از برنامهنویسی که عبارتها بهصورت سادهسازی شده در زبانهای تفسیری استفاده شدند، ۳ عدد از آنها، Typescript، JavaScript و PHP در میان برترین زبانهای با بازدهی انرژی بالا قرار داشتند.
زبانهای کامپایل شده، در مقایسهی میزان اشغال فضای رم، مانند زمان و مصرف انرژی، بالاترین رتبهها را به خود اختصاص دادند. بهصورت میانگین، آن زبانها به ۱۲۵ مگابیت
از لحاظ پارادایمهای برنامهنویسی، زبانهای دستوری (Imperative) به ۱۱۶ مگابیت حافظهی رم نیاز دارند. زبانهای شیٔگرا همان آزمایشها را با ۲۴۹ مگابیت، زبانهای تابعی با ۲۵۱ مگابیت و زبانهای اسکریپتی با ۴۲۱ مگابیت حافظهی رم، انجام میدهند. درواقع، زبانهای دستوری در دستهبندیهای دیگر همچون سرعت و مصرف انرژی نیز رتبههای بهتری را بهخود اختصاص دادند.
در مقایسهی پارادایمهای برنامهنویسی، فاکتورهای متعددی باید مورد بررسی قرار گیرند. کاملا مشخص است که پارادایمها و حتی زبانهای هر پاردایم، تأثیرات متفاوتی روی مصرف انرژی، زمان و حافظهی مورد نیاز دارند. بههمین دلیل، اینکه کدام فاکتور برای نتیجه مهمتر باشد، به برنامهنویس و پروژهی در دست اجرای او بستگی دارد.
برخی از پروژههای نرمافزاری، نیازمند درنظرگرفتن همزمان ۲ یا چند فاکتور هستند. بهعنوان مثال، شاید انرژی و زمان اجرا، در پروژهای اهمیت بالا داشته باشد. در چنان موردی، C بهترین گزینه خواهد بود چون در هر ۲ بخش، در صدر جدل قرار دارد. در نمونهای دیگر که زمان درکنار مصرف کمتر حافظهی رم، هدف شما باشد، زبانهای C، Pascal و Go انتخابهای مناسبی هستند. اگر هر ۳ مورد بالا یعنی زمان، انرژی و حافظهی رم برای شما اهمیت دارند، باز هم محققان همان ۳ زبان فوق را پیشنهاد میدهند.
در پایان مقاله، محققان اعلام کردند که در بررسیهای آتی، تأثیر گذر زمان بر اشغال حافظهی رم را بررسی خواهند کرد. نتایج کامل تحقیقات انجام شده، در لینک منبع موجود است و علاقهمندان میتوانند برای بررسیهای عمیقتر، از آن استفاده کنند. بهعنوان مثال، توسعهدهندههای حوزهی
درنهایت، مقالهی منتشر شده هم برنامهنویسان را با ابهام رها میکند. محققان میگویند که اگر بهدنبال یک پاسخ ثابت و نسخهای نهایی برای انتخاب زبان برنامهنویسی هستید، به پاسخ نخواهید رسید. آنها میگویند با وجود اینکه نتایح، برخی زبانها را از لحاظ سرعت و مصرف انرژی بالاتر از سایر قرار میدهند، هیچگاه نمیتوان زبانی را کاملا بهتر از زبان دیگر دانست. درنهایت باید بدانیم که موقعیت و شرایطی که زبان در آن استفاده میشود، جنبهای حیاتی در بازدهی مصرف انرژی آن دارد.
منبع THENEWSTACK
پایتون امسال نیز مانند دو سال اخیر، محبوبترین زبان برنامهنویسی سال لقب گرفت. جاوا، سی، سی پلاس پلاس و R به ترتیب جایگاههای بعدی را کسب کردند.
پایتون در آخرین رتبهبندی سالانه محبوبترین زبانهای برنامهنویسی از سوی IEEE (مؤسسه مهندسان برق و الکترونیک) مجددا به رتبه اول دست پیدا کرده است.
نظرسنجی و رتبهبندیهایی از این قبیل به کاربران و توسعهدهندگان کمک کرده تا متوجه محبوبیت زبانهای برنامهنویسی و ترندهای آن شده و بهدنبال یادگیری یا کار در حوزههای محبوبتر روند.
IEEE Spectrum (مجلهای از مؤسسه IEEE) پایتون را از سال ۲۰۱۷ در صدر فهرست خود قرار داده و سال گذشته این زبان بالاتر از C++ به این مقام دست یافت. در این رتبهدهی به زبان اول نمره ۱۰۰ اعطا شده و تمام زبانهای دیگر به نسبت آن نمره دریافت میکنند. سال گذشته سیپلاسپلاس نمره ۹۹.۷، جاوا ۹۷.۵ و سی ۹۶.۷ را کسب کردند.
انتشار نتایج ششمین رتبهبندی سالانه IEEE نشان از افزایش فاصله پایتون با سایر رقبا دارد. امسال پایتون نمره ۱۰۰، جاوا ۹۶.۳ و سی ۹۴.۴ را کسب کردهاند. سیپلاسپلاس شاهد لغزش بوده و با امتیاز ۸۷.۵ در رتبه چهارم قرار گرفته و رتبه پنجم هم به زبان محاسبات آماری R با امتیاز ۸۱.۵ تعلق گرفتهاست.
طبق اعلام IEEE، پایتون به دلیل داشتن تعداد زیادی کتابخانه تخصصی مخصوصا برای توسعهدهندگان فعال در حوزه هوش مصنوعی، توانسته به این جایگاه دست یابد.
برای مثال میتوان به کتابخانه Keras پایتون اشاره کرد که رابطهایی برای TensorFlow (توسعهدادهشده از سوی گوگل)، جعبه ابزار شناختی مایکروسافت (CNTK) و یادگیری عمیق Theano دارد.
حوزه دیگری که از زمان ظهور پایتون در سال ۱۹۹۱ به وجود آمده، میکروکنترلرهای رایانههای کوچک ارزانقیمت مانند رزبریپای و آدافروت است.
رتبه خوب متلب نشاندهنده اهمیت این زبان در مهندسی سختافزار است. تصویر: Spectrum IEEE
پنج زبان بعدی این رتبهبندی به ترتیب جاوااسکریپت، سیشارپ مایکروسافت، متلب، سوییفت اپل و گو گوگل هستند.
طبق اعلام مجله IEEE Spectrum این رتبهبندی براساس یازده آمار از هشت منبع شامل CareerBuilder، گوگل، گیتهاب، هکر نیوز، IEEE، ردیت، Stack Overflow و توییتر است.
Tiobe، که شاخص رتبهبندی زبانهای برنامهنویسی مخصوص به خودش را دارد، نتایج مربوط به شهریور ۹۸ (سپتامبر ۲۰۱۹) خود را منتشر کرد. ده زبان برتر این سیستم رتبهبندی که براساس چندین موتور جستوجو کار میکند، از این قرار است: جاوا، سی، پایتون، سیپلاسپلاس، سیشارپ، ویژوال بیسیک داتنت، جاوااسکریپت، SQL، PHP و آبجکتیو سی.
نکته مهم این رتبهبندی تغییر رتبه PHP و خارج شدن آن از لیست ده زبان برتر است که PHP از سال ۲۰۰۱ در آن حضور داشتهاست.
تحلیلگران Tiobe میگویند:
زبان php از ابتدا ویژوال بیسیک طراحی وب بود: یادگیری آسان، اجرای آسان. اما غالبا از سوی طراحان وب با پیشزمینه کمی از مهندسی نرمافزار مورد استفاده قرار میگرفت. افول php به دلیل حفرههای امنیتی راحتالاستفاده آن است.
این تحلیلگران همچنین اشاره کردند که فیسبوک، که ابتدا با زبان PHP ساخته شده بود، جایگزین PHP یعنی Hack را در سال ۲۰۱۴ معرفی کرد و از آن پس استفاده از جاوااسکریپت، تایپاسکریپت و پایتون رونق بسیار فراوانی یافت.
شهریور ۹۸ | شهریور ۹۷ | تغییر رتبه | زبان برنامهنویسی | محبوبیت | تغییر |
---|---|---|---|---|---|
۱ | ۱ | بدون تغییر |
Java | ۱۶.۶۶۱% | -۰.۷۸% |
۲ | ۲ | بدون تغییر |
C | ۱۵.۲۰۵% | -۰.۲۴% |
۳ | ۳ | بدون تغییر |
Python | ۹.۸۷۴% | +۲.۲۲% |
۴ | ۴ | بدون تغییر |
C++ | ۵.۶۳۵% | -۱.۷۶% |
۵ | ۶ | + | C# | ۳.۳۹۹% | +۰.۱۰% |
۶ | ۵ | - | Visual Basic .NET | ۳.۲۹۱% | -۲.۰۲% |
۷ | ۸ | + | JavaScript | ۲.۱۲۸% | -۰.۰۰% |
۸ | ۹ | + | SQL | ۱.۹۴۴% | -۰.۱۲% |
۹ | ۷ | - | PHP | ۱.۸۶۳% | -۰.۹۱% |
۱۰ | ۱۰ | بدون تغییر |
Objective-C | ۱.۸۴۰% | +۰.۳۳% |
۱۱ | ۳۴ | + | Groovy | ۱.۵۰۲% | +۱.۲۰% |
۱۲ | ۱۴ | + | Assembly language | ۱.۳۷۸% | +۰.۱۵% |
۱۳ | ۱۱ | - | Delphi/Object Pascal | ۱.۳۳۵% | +۰.۰۴% |
۱۴ | ۱۶ | + | Go | ۱.۲۲۰% | +۰.۱۴% |
۱۵ | ۱۲ | - | Ruby | ۱.۲۱۱% | -۰.۰۸% |
۱۶ | ۱۵ | - | Swift | ۱.۱۰۰% | -۰.۱۲% |
۱۷ | ۲۰ | + | Visual Basic | ۱.۰۸۴% | +۰.۴۰% |
۱۸ | ۱۳ | - | MATLAB | ۱.۰۶۲% | -۰.۲۱% |
۱۹ | ۱۸ | - | R | ۱.۰۴۹% | +۰.۰۳% |
۲۰ | ۱۷ | - | Perl | ۱.۰۴۹% | -۰.۰۲% |
جدول: Tiobe
نظر شما درباره این رتبهبندیها چیست؟ شما از کدام یک از زبانهای معرفی شده در این دو رتبهبندی استفاده میکنید؟ چه زبانهایی میتوانند در آینده محبوبتر و مطرحتر شوند؟ نظرات خود را با ما و سایر کاربران زومیت به اشتراک بگذارید.
منبع ZDNET
زبان برنامهنویسی پایتون کاربردهای گستردهای دارد و برنامهنویسان حرفهای در سازمانهای بزرگی مانند گوگل، اسپاتیفای، پیکسار و حتی آژانس اطلاعات مرکزی از آن استفاده میکنند.
خیدو فانروسوم، دانشمند علوم رایانه هلندی تصمیم گرفت در دسامبر ۱۹۸۹ در تعطیلات کریسمس روی پروژهای شخصی کار کند. او که از کموکاستیهای دیگر زبانهای برنامهنویسی رایانه خسته شده بود، دست به کار شد و زبان برنامهنویسی خودش را ساخت. فانروسوم برای ساخت زبان برنامهنویسیاش سه اصل ساده و ابتدایی داشت:
فانروسوم برای انتخاب نام زبان برنامهنویسی خود از گروه کمدی انگلیسی بهنام مونتی پایتون (Monty Python) الهام گرفت و نام آن را پایتون گذاشت. همچنین نام package repository این زبان برنامهنویسی از نام یکی از قسمتهای کمدی محبوب فانروسوم، یعنی چیزشاپ (Cheese Shop)، انتخاب شده است.
تقریبا سی سال بعد از اختراع فانروسوم، این زبان برنامهنویسی محبوب شد و تعداد جستوجوهای پایتون در گوگل از تعداد جستوجوهای کیم کارداشیان، ستارهی هالیوودی پیشی گرفت. تعداد پرسوجوها دربارهی زبان برنامهنویسی پایتون تا سال ۲۰۱۰ بیش از سه برابر شده بود؛ درحالیکه نمودار تعداد پرسوجوی دیگر زبان برنامههای نویسی معمولا با گذشت زمان، یکنواخت یا حتی نزولی است.
براساس گزارش انجمن برنامهنویسی اِستَک اُوِرفِلو (Stack Overflow)، زبان پایتون نهتنها میان توسعهدهندگان حرفهای محبوبیت پیدا کرده؛ بلکه مردم عادی نیز به آن علاقهمند شده بودند. وبگاه کُدِکادِمی (Codecademy)، یکی از وبگاههای شناختهشده در زمینهی آموزش زبانهای برنامهنویسی نیز اعلام کرده پایتون یکی از زبانهای محبوبی است که کاربران برای یادگرفتن آن به این وبگاه مراجعه میکنند.
زبان برنامهنویسی پایتون باعث شده بسیاری از افراد سردرگم در دنیای برنامهنویسی راه خود را پیدا کنند. پایتونیستها (طرفداران پایتون) با کمک یکدیگر بیش از ۱۴۵هزار بستهی نرمافزاری به Cheese Shop پایتون اضافه کردهاند که موضوعات مختلفی از نجوم تا توسعهی بازی را پوشش میدهد.
فانروسوم، مخترع زبان برنامهنویسی پایتون، از محبوبیت نرمافزار خود لذت میبُرد؛ اما فشار نظارتی و لقبی که به او داده بودند، یعنی دیکتاتور خیرخواه جاویدان» باعث شد از مدیریت زبانی که اختراع کرده کنار بکشد. او از این موضوع وحشت داشت که به بُت زندگی مردم تبدیل شود و دراینباره گفت:
من مشهوربودن را دوست ندارم و احساس راحتی نمیکنم؛ حتی گاهی اوقات احساس میکنم هر حرفی که میزنم یا هر کاری که انجام میدهم، بیشازاندازه به آن توجه میشود.
درنهایت، او در ۱۲جولای سال جاری، پایتونیستها را در مدیریت پایتون تنها گذاشت.
پایتون زبان کاملی نیست و درمقایسهبا سایر زبانهای برنامهنویسی بهرهوری و قابلیتهای تخصصی کمتری دارد. بهعنوان مثال، C و ++C زبانهای سطح پایینتری هستند که به کاربر کنترل بیشتری روی پردازندهی رایانه میدهند. زبان برنامهنویسی جاوا در ساخت اپلیکشینهای بزرگ و پیچیده بهکار گرفته میشود و جاوا اسکریپت برای ساخت اپلیکیشنهای تحت وب مناسب است. زبانهای برنامهنویسی دیگری نیز وجود دارند که هرکدام برای هدفی خاص استفاده میشوند.
بااینحال، سینتکس پایتون یا نحوهی نوشتن آن بهاندازهای ساده است که یادگیری آن را آسان میکند. همچنین، وجود بستههای نرمافزاری شخص ثالث، پایتون را به زبانی همهمنظوره تبدیل کرده که تطبیقپذیری آن با استفادهی گستردهی و کاربران زیاد آن ثابت شده است. برای نمونه، آژانس اطلاعات مرکزی از زبان برنامهنویسی پایتون برای هککردن، شرکت فیلمسازی پیکسار از آن برای ساخت فیلم، گوگل برای کرالکردن صفحات وبسایت و اسپاتیفای در سیستم پیشنهاد آهنگ به کاربران خود از پایتون بهره گرفته است.
یکی از بستههای نرمافزاری کاربردی و جذاب پایتون برای پایتونیستها در Cheese Shop، هوش مصنوعی است. کاربران به کمک این زبان میتوانند شبکههایی عصبی بسازند که از ارتباطات مغز برای پیداکردن الگوی بین دادههای حجیم استفاده میکند. فانروسوم میگوید پایتون به زبان برنامهنویسی محبوب محققان هوش مصنوعی تبدیل و بستههای نرمافزاری زیادی برای آن ساخته شده است.
البته همهی پایتونیستها تا این اندازه جاهطلب نیستند. زک سیمز، رئیس وبگاه Codecademy معتقد است بسیاری از بازدیدکنندگان وبسایت دنبال مهارتهایی هستند که در کارهای غیرفنی به آنها کمک کند. بهعنوان مثال، بازاریابان از پایتون برای ساخت مدلهای آماری استفاده میکنند که میزان تأثیرگذاری پویش تبلیغاتی را اندازهگیری میکند. دانشجویان برای بررسی درستی توزیع نمرهها از پایتون بهره میگیرند و حتی رومهنگاران بهمنظور جمعآوری دادههای مدنظرشان با پایتون برنامهنویسی میکنند. پایتون همچنین برای کاربران حرفهای صفحهگسترده (Spreadsheets) دردسترس است.
استفاده از این زبان برنامهنویسی بسیار گسترده شده است؛ بهطوریکه حتی سیتیگروپ (Citigroup)، یکی از بانکهای آمریکایی، دورهی پایتون برای تحلیلگران کارآموز برگزار میکند. وبسایت کاریابی eFinancialCareers نیز گزارش داده تعداد متقاضیان مربی پایتون در سالهای ۲۰۱۵ تا ۲۰۱۸ بیش از چهار برابر شده است. بااینحال، برخی تحلیلگران از افزایش محبوبیت این زبان ابراز نگرانی کردهاند. سیزر برا، مشاور شرکت Bain & Company، دربارهی محبوبیت زبان پایتون هشدار داده و گفته است:
ترسناکترین موضوع در فراگیرشدن یک ابزار این است که شخصی نحوهی استفاده از آن را یاد گرفته؛ اما نمیداند از درون چگونه کار میکند. شخصی که کار با پایتون را به تازگی یاد گرفته است، بدون نظارت فردی حرفهای به نتایج دقیقی دست پیدا نخواهد کرد.
یکی از راهحلها برای ازبینبردن مشکل کاربران تقریبا تازهکار این است که تمام جوانب زبان برنامهنویسی به آنها آموزش داده شود. پایتون محبوبترین زبان مقدماتی در دانشگاههای آمریکا در سال ۲۰۱۴ بوده است؛ اما فقط در رشتههای علوم، فناوری، مهندسی و ریاضی آموزش داده میشود. یکی از راهحلهای کاربردی این است که علوم رایانه از دوران ابتدایی مدرسه به دانشآموزان آموزش داده شود. هادی پرتوی، رئیس بنیاد Code.org میگوید:
۴۰درصد مدارس آمریکا درحالحاضر چنین درسهایی برای دانشآموزان دارند؛ درحالیکه در سال ۲۰۱۳، تنها ۱۰درصد آنها برنامهنویسی را به دانشآموزان یاد میدادند. حدود دوسوم کودکان ده تا دوازدهساله در وبگاه Code.org حساب کاربری دارند. اگر پیشرفتکردن و خودکارشدن کارها بههمین ترتیب ادامه پیدا کند، شاید ۹۰درصد والدین آمریکایی خواستار آموزش علوم یارانه به فرزندانشان شوند.
اینکه پایتون تا چه اندازه رشد میکند، هنوز معلوم نیست. زبانهای برنامهنویسی بسیار محبوبی در گذشته وجود داشتهاند که امروزه چندان طرفدار ندارند و به حاشیه رفتهاند. در سال ۱۹۶۰، زبان برنامهنویسی فورترن (Fortran) در کل دنیا محبوب شده بود و به کارآموزان آموزش داده میشد. بیسیک (Basic) و پاسکال (Pascal) نیز از دیگر زبانهایی هستند که روزگاری در اوج محبوبیت بودهاند. هادی پرتوی نیز زبان جاوا اسکریپت را بهعنوان زبان اصلی سایت Code.org انتخاب کرده است؛ زیرا انتخاب استاندارد برای انیمیشنسازی صفحات وب است.
هیچ زبان برنامهنویسی نمیتواند به شکل همهمنظوره استفاده شود و تعیین محدوده و تخصص برای هرکدام از آنها ضروری است. بااینحال، نمیتوان این حقیقت را انکار کرد که خیدو فانروسوم زبانی را اختراع کرد که همیشه در یاد برنامهنویسان خواهد ماند.
منبع ECONOMIST
غولفناوری در یک سری ویدئو آموزشی که در سایت یوتیوب قرار داده است قصد آموزش رایگان زبان برنامهنویسی پایتون به علاقهمندان برنامهنویسی را دارد.
مایکروسافت یک دوره آموزشی ۴۴ قسمتی بهنام پایتون برای تازهواردها (Python for Beginners) در
البته باید گفته شود این دوره کاملا مناسب برای تازهواردها نیست و بهعنوان پیشنیاز ممکن است لازم باشد پیش از شروع کمی با برنامهنویسی به زبانهای دیگر مانند JavaScript آشنایی داشته باشید؛ یا حداقل با زبان برنامهنویسی دیداری اسکرچ (Scratch) که توسط ام آیتی عرضه شده است و مناسب کودکان و نوجوانان است آشنا شده باشید.
ممکن است بهعنوان پیشنیاز، احتیاج به آشنایی مختصری با زبانهای برنامهنویسی دیگر مانند JavaScript داشته باشید
با این حال این دوره ممکن است مشوق خوبی برای ایدههای کوچک و بزرگ ساخت اپلیکیشنهای
تمرکز این دوره آموزشی روی نسخهی ۳ و بالاتر پایتون است؛ ولی طبق گفتههای مایکروسافت این دوره با این حال مناسب کاربران نسخههای ۲ به بالاتر پایتون نیز هست.
مایکروسافت برای این دورهی آموزشی خود صفحهای در گیتهاب راهاندازی کرده که دارای منابع اضافه آموزشی برای دوره است. این صفحه شامل اسلایدها و نمونه کد است که میتواند به دانشآموزان در یادگیری بهتر پایتون کمک کند.
دورهی آموزشی پایتون برای تازهواردها توسط کریستفر هریسون (Christopher Harrison) یکی از مدیران برنامه ارشد مایکروسافت و سوزان ایباخ (Susan Ibach) یکی از مدیران توسعهدهندهی تجاری مایکروسافت در واحد هوشمصنوعی بازیها ارائه میشود.
دلایل بسیار زیادی وجود دارد که مایکروسافت قصد دارد افراد بیشتری با پایتون کار کنند. البته همین حالا نیز به دلیل سادگی این زبان برنامهنویسی، افراد زیادی مشغول به استفاده از آن هستند. در کنار این موضوع وجود کتابخانههای زیاد این زبان به توسعهدهندگان کمک میکند که بتوانند بهطور مثال بهوسیلهی فریمورکهایی مانند تنسرفلو (TensorFlow) شرکت
در کنار این موضوع مایکروسافت در حال ارائهی پشتیبانی بهتر برای زبان پایتون در ویرایشگر محبوب خود یعنی ویژوال استودیو کد (Visual Studio Code) یا با اختصار VS Code است؛ تا به توسعهدهندگان اجازه دهد که کد خود را بهکمک ویژوال استودیو کد بهصورتهای مختلفی مانند روی کامپیوتر محلی خود، ماشین از راهدور، فناوری کنتینرها یا توسط
مایکروسافت صاحب افزونهی پایتون برای ویژوال استودیو کد است که یکی از محبوبترین افزونهها در کل فروشگاه افزونه برای توسعهدهندگان ویژوال استودیو کد بهشمار میرود. خود ویرایشگر ویژوال استودیو کد توانسته است یکی از محبوبترین ویرایشگرهای متن در بین توسعهدهندگان شود و بهدلیل اینکه بخشی از تمرکز این ویرایشگر روی هوشمصنوعی قرار دارد، مایکروسافت ویرایشگر خود را در توزیع محبوب پایتون آنادا قرار داده است.
با این حال مزیت اصلی این است که مایکروسافت میتواند جامعه توسعهدهندگان پایتون را بهکمک سیستم خدمات ابری خود یعنی آژور برای ساخت اپلیکیشنهای هوشمصنوعی گسترش دهد. هماکنون نیز در سیستم خدمات ابری آژور مایکروسافت قسمتی بهعنوان
از مزیتهای دورهی جدید ارائه شده توسط مایکروسافت میتوان به بخشهای شروع سریع اشاره کرد که بهعنوان مثال در یکی از این بخشها نحوهی تشخیص چهره انسان در تصاویر بهکمک API چهره آژور برای پایتون آموزش داده میشود.
یکی دیگر از بخشهای آموزش این دوره بهشما نحوه استفاده از REST API دید کامپیوتر را آموزش خواهد داد. هردو این موارد جزو خدمات شناختی مایکروسافت است.
منبع ZDNET
گویش برنامه نویسی جاوا (JAVA) در 23 مه 1995 (برابر با 2 خرداد ماه 1374) از سوی جیمز گاسلینگ (James Gosling) پباده سازی شدهاست.
تا جایی که به جاوا مربوط میگردد، همگی چیز از اوایل ده سال 1990 ابتدا شد، یعنی وقتی که کمپانی سان مایکروسیستمز (Sun Microsystems) استارت به گسترش ورژن بهتری از ++C کرد که بتواند به سادگی پرتابل شود، برای اشخاص مبتدی و تازه کار مناسب باشد و به رئیس خود کار خاطر بپردازد. پژوهش ها این موسسه سبب به رفتار یک گویش به طور کاملً نو شد که اسم آن از بین آبادیها اسم پیشنهادی در اتاق گردهمایی معرفیش تعیین شد. امروزه لوگوی جاوا به طور فنجان قهوهای که از آن بخار میدمد، به علامت جهانی برنامهنویسی تبدیل شدهاست. در واقع دیگر کسی نمیداند که رابطه برنامهنویسها با کافئین سابقخیس میباشد؛ یا این که ارتباطشان با جاوا که امروزه مترادف و هم معنی با قهوه میباشد.
دراین نوشته به بازنگری بی نقص و جامع این لهجه برنامهنویسی، خصوصیتها، مزایا، معایب، بازار فعالیت، کتابخانهها، کاربردها و هر آنچه که ممکن میباشد در خصوص جاوا بخواهید بدانید می پردازیم.
جاوا چه میباشد؟
جاوا یک گویش برنامهنویسی چندمنظوره و شیگرا میباشد که تا حدودی متعددی به C و ++C شباهت داراست؛ البته به کارگیری از آن سهل وآسانخیس میباشد و قابلیت و امکان ایجاد برنامههایی قادر با آن موجود هست. ولی تعریفی که کمپانی سان مایکروسیستمز در سال 2000 ارائه نموده است، شاید از تعریف و تمجید فوق گویاتر باشد:
جاوا لهجه رایانهای بی آلایش، شیگرا، مطلوب کانال، تفسیرشدنی، مستحکم، امن، بدون معماری، پرتابل، با تلاش بالا، چندنخی و دینامیک میباشد.
بهدنبال هرکدام از مختصات فوق را به نحوه مستقلای گزینه باز نگری قرار می دهیم:
جاوا یک لهجه بی آلایش میباشد
جاوا در بالا بر پایه ی گویشهای C و ++C و با حذف بعضی خصوصیتهایی که امکان سردرگم کننده داشتند مدلسازی شد. از گزاره این خصوصیتها میقدرت به اشارهگرها، پیادهسازی چندباره وراثت و لود بیش تر از حد عملگرها اشاره نمود که در جاوا حذف شدند. یکی خصوصیتهایی که در C++/C وجود نداشت؛ البته جزو خصوصیتهای اساسی جاوا به شمار میاید، قابلیت و امکان بازیافت خاطر (garbage-collection) میباشد که به صورت خود کار شی ءها و آرایههای بی استعمال را حذف میکند.
جاوا یک لهجه شیگرا میباشد
تمرکز شیگرایی جاوا موجب شدهاست که توسعه و گسترشدهندگانی که از این لهجه استعمال می کنند، از آن برای حل یک مورد استعمال نمایند و خیر سروکله زدن با آن برای رفع محدودیتهای زمینه. این شرایط موجب تمایز در بین جاوا و C شدهاست. برای مثال در صورتیکه میخواهید برنامهای برای یک اکانت بانکی بنویسید، در جاوا فقط می بایست به ذخیرهسازی شی اکانت بانکی بپردازید؛ البته در C می بایست موقعیت اکانت (تراز اکانت) و رفتارهایی مانند واریز یا این که برداشت را به صورت جداگانه برنامهنویسی فرمایید.
جاوا یک گویش مبنی بر کانال میباشد
کتابخانه پهناور کانال در جاوا منجر شدهاست که قابلیت و امکان عمل با پروتکل در اختیار گرفتن انتقال/پروتکل وب (TCP/IP) و پروتکلهای کانال مانند HTTP (پروتکل انتقال ابرمتن) و FTP (پروتکل انتقال پوشه) معمولیخیس شود و همینطور وظیفه تولید اتصالهای کانال آسودهخیس گشته میباشد. به علاوه برنامههای جاوا میتوانند از روش کانال TCP/IP، از روش URLها، به اشیاء دسترسی داشته باشند و این دسترسی به به عبارتی آسانی دسترسی روی سیستم فولدر محلی میباشد.
جاوا یک لهجه تعبیروتفسیر شدهاست
یک برنامه جاوا در حین اجرا به صورت غیر بدون واسطه از روش یک ماشین مجازی (که بازنمایی قابل انعطافافزاری از یک پلتفرم خیالی میباشد) و گوشه و کنار روزگار اجرای مربوط به آن با واسطه روی یک پلتفرم زیرساخت (مانند ویندوز یا این که لینوکس) اجرا میشود. این ماشین مجازی بایتکدها (راهبردها و دادههای دارای ربط) را از روش تعبیر و تفسیر به راهبردهای یگانه پلتفرم ترجمه می کند. مراد از تعبیروتفسیر، کار شناسایی مضمون راهبردها و بعد گزینش راهبردهای یگانه پلتفرم برای اجرا میباشد. درپی ماشین مجازی این راهبردهای یگانه پلتفرم را اجرا مینماید. این خصوصیت تفسیری بودن جاوا سبب شدهاست که خطایابی برنامههای جاوا سهلخیس شود، زیرا اکثر زمان ها داده ها در حین کامپایل در بنا شده در فضا اجرا وجود دارا هستند. تفسیری بودن جاوا همینطور قابلیت و امکان به تأخیر پرتاب کردن لینک و پیوند دربین قطعات متفاوت برنامه جاوا تا زمانه اجرا را مهیا ساخته میباشد و این موضوع موجب ارتقاء سرعت بسط برنامه میگردد.
جاوا یک لهجه مستحکم میباشد
برنامههای جاوا بایستی قابل اعتماد باشند، چون هم در نرم افزارهای مصرفی و هم مأموریتهای حیاتی به کار گیری می گردند که از پخشکنندههای بلوری تا ناوبری خودرو یا این که سیستمهای در دست گرفتن هوایی را دربرگیرنده میگردد. خصوصیتهای لهجه جاوا که سبب استحکام آن می شوند، مشتمل بر اعلانها، بازبینی مجدد دسته داده، یک توشه در طول کامپایل و توشه دیگر در حین اجرا (برای دوری از عدم تطبیق ورژنها)، آرایههای حقیقی وواقعی با بازبینی اتوماتیک کرانها و ترک اشارهگرها میباشد.
جنبه دیگری که موجب استحکام جاوا می شود، این میباشد که رینگها به جای عبارتهای عدد درست که در آن 0 برابر اشتباه» و مقادیر غیر صفر برابر با صحیح» میباشند، می بایست توسط عبارتهای بولی در اختیار گرفتن شوند. به عنوان مثال برخلاف C، در جاوا رینگهایی مانند عبارت تحت
++while (x) x
مجاز نیستند؛ چون این رینگ ممکن میباشد در جایی که انتظار میرود متوقف نشود. به جای آن می بایست عبارتهای بولی صریحی مانند ذیل
;++while (x!= 10) x
استعمال شود، یعنی رینگ تاهنگامیکه x برابر با 10 شود، اجرا خواهد شد.
جاوا یک لهجه امن میباشد
برنامههای جاوا در دور و برهای کانالبندی گردیده/ توزیع یافته آیتم به کارگیری قرار می گیرند. ازآنجاکه برنامههای جاوا میتوانند روی پلتفرمهای متعدد کانال اجرا شوند، امن ساختن این پلتفرمها در قبال کدهای مخرب که موجب توسعه ویروسها، سرقت داده ها کارتهای بانکی یا این که اجرای اعمال خرابکارانه میگردند، امری دارای اهمیت میباشد. خصوصیتهایی که موجب استحکام لهجه جاوا میگردند دربرگیرنده ترک اشارهگرها می باشند که به یاروهمدم خصوصیتهای امنیتی مانند نوع امن sandbox جاوا و کدگذاری کلید همگانی عمل مینمایند. این دو مدل از خصوصیتها در کنار هم از تأثیر ویروسها و دیگر کدهای خطرناک روی پلتفرمهای مشکوک خودداری می نمایند. جاوا از دید تئوریک امن میباشد؛ ولی در کار زخمپذیریهای امنیتی مختلفی شناسایی و آیتم سوءاستفاده قرار گرفته میباشد. در سود در حینهای گذشته، کمپانی سان مایکروسیستمز و اکنون کمپانی اوراکل همواره مبادرت به تکثیر بهروزرسانیهای امنیتی برای جاوا مینمایند.
جاوا یک گویش سوای معماری میباشد
کانالها موجب اتصال پلتفرمهایی با معماری متعدد ریزپردازندهها و سیستمهای استدلال میشوند. نمیاقتدار انتظار داشت که جاوا راهبردهای یگانه پلتفرم را تولید نماید و انتظار داشته باشد کهاین راهبردها از سوی تمامی گونه های پلتفرمهایی که بخشی از کانال میباشند ادراک شود. در ازای جاوا راهبردهای بایتکد غیر وابسته از پلتفرم ساخت مینماید که تعبیر آن برای هر پلتفرم (از روش پیادهسازی JVM) سهل وآسان میباشد.
جاوا یک لهجه پرتابل میباشد
عدم تعلق به معماری موجب پرتابل شدن جاوا شدهاست. با این حالا پرتابل بودن جاوا چیزی بالاتر از جدا بودن راهبردهای بایتکدها از پلتفرم میباشد. مثلا در حیث بگیرید که اندازه گونه عدد درست روی پلتفرمهای گوناگون یکسان خواهد بود. برای مثال یک جور عدد درست 32 بیتی، صرفلحاظ از این که روی پلتفرمهای با رجیسترهای 16 بیتی، 32 بیتی یا این که 64 بیتی پردازش شود؛ در هر درحال حاضر به طور نشانهدار بوده و 32 بیت از یاد را اشغال مینماید. کتابخانههای جاوا نیز به پرتابل بودن آن امداد میکنند. این کتابخانهها در مورد ها ضروری، گونه های دادهای را ارائه میکنند که به روشی تا حد قابلیت و امکان پرتابل، کد جاوا را به امکانهای یگانه پلتفرم متصل میسازد.
جاوا یک لهجه با تلاش بالا میباشد
خصوصیت تفسیری بودن جاوا موجب شدهاست کارایی بالایی داشته باشد که در اکثر موردها بیشتراز حد کفایت میباشد. جاوا در خصوص نرم افزارهای با سعی بسیار بالا از کامپایل درجا (just-in-time) به کارگیری میکند یعنی راهبردهای بایتکد تعبیروتفسیر گردیده را محاسبه میکند و دستورهای تعبیر گردیده با بسامد بالا را به راهبردهای یگانه پلتفرم کامپایل مینماید. سعیهای بعدی برای تعبیر این راهبردهای بایتکد موجب اجرای به عبارتی راهبردهای یگانه پلتفرم میگردد و بنابراین سعی قابل انعطافافزار را افزایش می بخشد.
جاوا یک لهجه یکسری نخی (multithread) میباشد
جاوا برای افزایش عملکرد برنامههایی که تعدادی وظیفه را به یک باره اجرا مینمایند، از مضمون اجرای تعدادی نخی پشتیبانی میکند. برای مثال برنامهای که رابط گرافیکی استفاده کننده (GUI) را رئیس می کند و در همین درحال حاضر درانتظار محل ورود از یک اتصال کانال میباشد، از نخ (thread) دیگری به جای نخ GUI برای این انتظار به کارگیری مینماید. به این ترتیب رابط گرافیکی برنامه همچنان پاسخگو میباشد. ابتکارهای همگامسازی جاوا به نخها اذن می دهد که دادهها را سوای هیچ تأثیر مخربی میان خویش مبادله نمایند.
جاوا یک لهجه پویا (دینامیک) میباشد
به جهت رابطههای متقابل فی مابین کد برنامه و کتابخانهها که در طول اجرا به طور دینامیک فیس میپذیرند، نیازی به تولید پیوند صریح میان آنها نیست. در فیض هنگامی که یک برنامه یا این که یکی کتابخانههای آن تکامل می یابد (مثلا باگ تصحیح می شود یا این که تلاش بهبود مییابد) گسترشدهنده صرفا بایستی برنامه یا این که کتابخانه بهروزرسانی گردیده را منتشر سازد. با این که خلق و خوی دینامیک جاوا موجب شدهاست به کد کمتری هنگام تغییر و تحول کد نیاز باشد؛ البته این طریق نشر میتواند موجب تداخلهایی نیز بشود. برای مثال یک توسعه و گسترشدهنده ممکن میباشد یک گونه کلاس را از یک کتابخانه حذف نماید یا این که اسم آن را تغییر تحول دهد. زمانی شرکتی کتابخانه آپ تو دیت گردیده را منتشر مینماید، برنامههای جانور که به آن گونه کلاس متعلق میباشند از فعالیت می افتند. برای حل این خلل جاوا از دسته رابط (interface type) پشتیبانی میکند که مانند تعامل در بین دو طرف میباشد.
با دقت به خصوصیتهای فوق متوجه میشویم که جاوا علاوه بر نوعی لهجه، یک پلتفرم برنامهنویسی نیز به حساب می آید. این پلتفرم از دو بخش مهم تشکیل یافته میباشد که مشتمل بر ماشین مجازی جاوا و اطراف اجرایی جاوا میباشد.
ریشههای پیدایش جاوا
جاوا از سوی تیمی در کمپانی سان مایکروسیستمز به رهبری جیمز گاسلینگ پیشرفته و در سال 1995 منتشر شد. این لهجه متعاقباً از سوی کمپانی اوراکل خریداری شدهاست.
انگیزه اصلی خالقان جاوا این بوده که زبانی را تولید نمایند که بتوانند آن را روی کاربردهای مصرفی اجرا نمایند. این طراحان میتوانستهاند دنیایی را تصور نمایند که در آن کدها روی یخچال فریزر یا این که دستگاه توستر اجرا می شوند، یعنی آن چه که امروز به اسم وب شی ءها میشناسیم. ما صرفا در طی سالهای اخیر دستگاههایی ساختهایم که چنین قابلیت و امکانهایی داشته باشند و از این رو بایستی اظهار کرد کهاین طراحان نخستین بسیار از روزگار خویش جلوتر بودهاند. انگیزه پباده سازی این لهجه سبب ساز به چنین معماری برای آن شدهاست. یک کدام از شعارهای مهم لهجه برنامه جاوا چنین میباشد: یک توشه بنویس، تمامی جا اجرا کن». به بیان دیگر شما با جاوا میتوانید کدی بنویسید که آن را برای اجرای روی هر دسته دستگاهی کامپایل نمائید.
البته نکته جذاب این میباشد که جاوا به جهت این خصوصیت خویش دوستداشتنی نشده میباشد؛ بلکه از مزیت فناوری نوظهوری که در به عبارتی نصفههای ده سال 90 میلادی ظهور یافت و رخ عالم را دگرگون ایجاد فایده گرفت؛ خواسته ما فناوری اینترنت میباشد. جاوا این قابلیت و امکان را داشت که با آن می شد برنامههایی به اسم applet نوشت. این اپلتها برنامههای کوچکی بودند که میشد باطن مرورگرهای اینترنت آنهارا اجرا کرد. با رویش خیرهکننده اینترنت جاوا نیز سوار این موج شد و به یک گویش برنامهنویسی بسیار دوست داستنی تبدیل شد. به این ترتیب علیرغم این که قصد اول طراحان این گویش چیز دیگری بود؛ البته اکثری از اینترنت نرم افزارها به گویش جاوا نوشته شدند.
حقیقت این میباشد که طراحان اول گویش برنامهنویسی تا حدود متعددی ذیل تأثیر گویشهایی مانند C و ++C بودهاند و جاوا نیز شباهتهای فرمان زبانی متعددی با این لهجهها دارااست. خالقان جاوا از این لهجهها تحت عنوان مثالای برای انجام امور به کار گیری کردند و از این رو خصوصیتهای خاصی وجود داشتند که طراحان جاوا قصد نداشتند در جاوا آنانرا پیادهسازی نمایند، زیرا پیش از اینً اثبات گردیده بود که در C و C++ موجب بروز مشکلاتی می گردند.
ورژنهای متفاوت جاوا
کمپانی سان مایکروسیستمز، کیت گسترش قابل انعطافافزاری (JDK) شماره 1.0 جاوا را در سال 1995 منتشر نموده است. این JDK ابتدا برای گسترش نرم افزارهای دسکتاپ و اَپلت (applet) گزینه به کار گیری قرار گرفت. متعاقباً جاوا برنامهنویسی دستگاههای گوشی و سرورهای تجاری را نیز درین کیت میسر ایجاد. ذخیرهسازی تمامی کتابخانهها در یک JDK منفرد منجر گردیده کهاین کیت بسیار پهناورخیس از حد مطلوب برای توزیع شود. ولی می بایست این نکته را در لحاظ داشته باشید که توزیع قابل انعطافافزارها در ده سال 1990 بوسیله CD های اندازه کوچک و یا این که از روش سرعتهای تحت کانال رخ میگرفته میباشد. ازآنجاکه اکثر وقت ها بسطدهندگان به همگی API ها نیاز نداشتند (یک گسترشدهنده نرم افزارهای دسکتاپ به تدریج به API های سرورهای تجاری نیاز پیدا میکند) کمپانی Sun این ایراد توزیع را با تقسیم جاوا به سه ورژن حل کرد. این ورژنها نهایتاً به اسم JAVA SE، JAVA EE و JAVA ME نامیده شدند که درپی هرکدام را توضیح دادهایم.
پلتفرم جاوا، ورژن استاندارد (Java SE)- این ورژن از جاوا برای گسترش نرم افزارهای سمت کلاینت که روی رایانههای رومیزی اجرا میگردند، و اپلتها که روی مرورگرهای اینترنت اجرا میشوند، پباده سازی شدهاست.
پلتفرم جاوا ورژن انترپرایز (Java EE)- این ورژن از جاوا بر مبنای JAVA SE پباده سازی گردیده و به صورت انحصاری برای بسط نرم افزارهای سرور با گرایش سازمانی به کار گیری می گردد. نرم افزارهای سمت سرور دربرگیرنده سرولتها (Servlet) میشود که برنامههای جاوای شبیه اپلت می باشند؛ ولی به جای کلاینت روی سرور اجرا میشوند. سرولتها از API Java EE Servlet به کارگیری مینمایند.
پلتفرم جاوا، ورژن میکرو (Java ME) – این ورژن از جاوا بر مبنای JAVA SE پباده سازی شدهاست. این پلتفرم برای توسعه و گسترش میدلتها (MIDlet) استعمال میگردد که برنامههای جاوایی می باشند که روی دستگاههای اطلاعاتی تلفن همراه اجرا می شوند. ایکسلت (Xlet) ها نیز برنامههای جاوایی می باشند که روی دستگاههای مونتاژی اجرا می شوند.
JAVA SE پلتفرم اصلی جاوا میباشد و پلتفرمهای دیگر بر مبنای آن پباده سازی گردیدهاند.
مروری بر پلتفرم جاوا
جاوا هم یک گویش برنامهنویسی و هم پلتفرمی برای اجرای کد جاوای کامپایل شدهاست. این پلتفرم به صورت عمده مشتمل بر JVM میباشد؛ البته دور و اطراف اجرایی را نیز مشتمل بر می گردد که از اجرای JVM روی پلتفرمهای زیرساختی مستقر پشتیبانی می کند. JVM خویش مشتمل بر تعدادی جزء برای بار گذاری، تأیید و اجرای کد جاوا میباشد. در تصویر پایین نحوه اجرای یک کد جاوا روی این پلتفرم را مشاهده می کنید.
JVM دربرگیرنده یک مولفه (کامپوننت) classloader، verifier بایتکد و یک مفسر و کامپایلر در جا برای بار گذاری، تأیید و اجرای یک پوشه کلاس میباشد.
در بخش فوقانی نمودار فوق یکسری از فولدرهای کلاس برنامه را مشاهده می کنید که یکی آن ها به اسم پوشه کلاس اصلی نامیده شدهاست. برنامه جاوا دستکم بایستی یک پوشه کلاس اصلی داشته باشد که اولیه کلاسی میباشد که بار گذاری، تأیید و اجرا خواهد شد.
JVM لود کلاس را به مولفه classloader میسپارد. Classloader فولدرهای کلاس را از منابع متعدد مانند سیستمهای فولدر، کانالها و فولدرهای فشرده بار گذاری می کند. این مولفه، JVM را از مسائل و خطاها مربوط به بار گذاری کلاس بر حذر می دارد.
یک پوشه کلاس لود گردیده در خاطر محافظت می شود و به طور یک شی ساخت گردیده از کلاس Class اکران می یابد. هنگام بار گذاری، bytecode verifier راهبردهای متعدد بایتکد را بازنگری می کند تا مطمئن شود که دارای اعتبار میباشند و امنیت را به مخاطره نمیاندازند.
چنانچه بایتکد فولدر کلاس دارای اعتبار نباشد، JVM خاتمه مییابد. در غیر این فیس مولفه مفسر آن، بایتکد را یک به یک به راهبردها تعبیروتفسیر می کند. دراین فرآیند تعبیر و تفسیر، راهبردهای بایتکد شناسایی گردیده و راهبردهای ساکن هم اندازه آن ها اجرا می شوند.
بعضی توالیهای راهبردهای بایتکد بیش از سایر موردها تکرار می شوند. هنگامی مفسر این حالت را تشخیص می دهد، کامپایلر درجای JVM به اسم JIT این توالیهای بایتکد را به کد ساکن کامپایل مینماید تا سریعخیس اجرا شوند.
در حین اجرا، مفسر معمولاً با درخواستی برای اجرای بایتکد فولدر کلاس دیگر مواجه می گردد که بدین برنامه یا این که یک کتابخانه وابستگی دارااست. در چنین مواقعی classloader فولدر کلاس را لود مینماید و bytecode verifier بایتکد پوشه کلاس لود گردیده را پیش از اجرا تأیید مینماید. همینطور در حین اجرا نیز راهبردهای بایتکد ممکن میباشد از JVM بخواهند که یک فولدر را گشوده نماید، چیزی را روی کاغذ اکران دهد، صدایی تولید نماید یا این که وظیفه دیگری انجام دهد که مستم همیاری با پلتفرم مستقر میباشد. درین موردها JVM با استعمال از رابط ساکن جاوا (JNI) که یک پل فناوری برای تعامل با پلتفرم ساکن برای اجرای وظایف میباشد این فعالیت را انجام می دهد.
گونه دینامیک یا این که دسته استاتیک
جاوا یک گویش برنامهنویسی با دسته استاتیک میباشد در حالی که لهجههای برنامهنویسی دیگری مانند روبی (Ruby)، پایتون (Python)، و جاوا اسکریپت لهجههایی از دسته دینامیک محسوب میگردند. اکثر اشخاص به مشاجره تفاوت در بین لهجههای با جور استاتیک و دینامیک عشق و علاقهمند می باشند.
دسته دینامیک
در حالتیکه تا به امروز تجربه عملی برنامهنویسی داشته باشید، با مضمون متغیر آشنا میباشید. در گویشهای با گونه دینامیک مانند روبی یا این که جاوا اسکریپت میاقتدار متغیری را سوای این که دسته داده ذخیره گردیدهاش معلوم باشد، اعلان کرد. این متغیر از دسته دینامیک میباشد و مقدار آن میتواند هر چیزی مانند یکی، پاراگراف و یا این که غیره باشد.
دسته استاتیک
وقتی که با دادهها در لهجههای از مدل استاتیک مانند جاوا راز و فعالیت داریم، می بایست در طول اعلان متغیر دقیقاً معین کنیم که متغیر چه گونه دادهای را محافظت خواهد کرد. برای مثال این متغیر دربردارنده عدد خواهد بود یا این که متغیر دیگر متن را ذخیره میکند و متغیر سوم دربردارنده مورخ خواهد بود. این بدان مضمون میباشد که یک گویش از جور استاتیک ساختار بیشتری را مشتمل بر می گردد. برخی از اشکال خطاهایی که برنامهنویسها مرتکب می شوند، بوسیله ابزارهایی که جاوا در چنگ ما قرار می دهد، حتی پیش از اجرای برنامه، قابل تشخیص میباشند. با این هم اکنون در صورتیکه که در لهجههای از گونه دینامیکی مانند روبی یا این که پایتون برنامهنویسی فرمائید، چنین خطاهایی تا روزگار اجرای برنامه و مواجهه با از عمل افتادن برنامه قابل تشخیص نخواهند بود.
براین اساس در گویشهای برنامهنویسی از گونه استاتیک یک لایه مازاد از کدنویسی موجود است که می بایست اشکال تمامی متغیرها از پیشین گزینه فکر قرار گرفته و مشخص و معلوم شود. به این ترتیب یادگیری لهجههای از جور دینامیک برای اشخاصی که اولی لهجه برنامهنویسیشان از دسته استاتیک بوده میباشد، بسیار سهل وآسانخیس از مسیر مع آن خواهد بود.
چه لهجههایی از جاوا مشتق گردیدهاند؟
بعضی گویشها مانند اسکالا (Scala) و گرووی (Groovy) وجود داراهستند که برای اجرا روی JVM پباده سازی گردیدهاند و یا این که لهجههایی می باشند که برای اجرا روی فضا جاوا پیشرفتهاند. همینطور ممکن میباشد بعضا اشخاص داعیه نمایند که لهجه C# تا حدود متعددی پایین تأثیر جاوا پیشرفته میباشد. گویش سی شارپ مایکروسافت بعداز جاوا گسترش یافت و به صورت مختص به مقدار متعددی از جاوا الهام گرفته میباشد. سی شارپ موجب بعضی بهبودها در جاوا نیز شدهاست و از این رو این دو گویش به صورت متقابل بر هم تأثیرگذار بودهاند.
جاوا چه تفاوتی با جاوا اسکریپت دارااست؟
هیچ ارتباط فنی در میان جاوا و جاوا اسکریپت نیست. جاوا اسکریپت از سوی نت اسکیپ (Netscape) در ده سال 90 میلادی پیشرفته میباشد و در بالا LiveScript نامیده می شد. وقتی که نت اسکیپ رویت کرد هیچ کس از LiveScript به کارگیری نمینماید و جاوا محبوبیت روزافزونی دارااست، اسم آن را به جاوا اسکریپت تغییر و تحول اعطا کرد تا بتوانند از این موج محبوبیت جاوا سودمند شوند. در واقع این ایده برنده بود و جاوا اسکریپت نیز دوست داستنی شد؛ البته از منظر فنی هیچ ارتباطای دربین این دو نیست و فقطً دارنده تشابه اسمی میباشند. شاید فقط مشابهت فنی فی مابین جاوا و جاوا اسکریپت را دراین بدانیم که هر دو آن ها امر زبانشان را از گویش برنامهنویسی C گرفتهاند. به همین ادله در شرایطی که با جاوا آشنا باشید، دراین حالت یادگیری جاوا اسکریپت سهل خواهد بود و برعکس.
ابزار ساخت بازی Game Builder توسط گوگل معرفی شد. با استفاده از آن خواهید توانست بدون نیاز به داشتن دانش برنامهنویسی، از طریق درگ اند دراپ عناصر مختلف، بازیهای ویدیویی جذاب درست کنید
توسعهدهندگان بازیهای ویدیویی با چالشهای زیادی رو به رو هستند. دلیل این موضوع، نبود راهی مشخص به منظور ساخت یک بازی جدید برای راضی نگه داشتن تمامی گیمرها است. حتی برای بازیهای بسیار محبوب و دارای امتیازهای بالا نیز همیشه معترضانی پیدا خواهد شد. این دسته از گیمرهای سختپسند باید توسعه بازی موبایل اختصاصی خود را آغاز کنند!
مشکل این روش، نیاز به یادگیری برنامهنویسی و سپس کار با ابزارهای ساخت بازی حرفهای است. گیمرها، اعم از سختپسند یا غیر سختگیر، دوست دارند وقت آزاد خود را به وسیله اجرای یک بازی پر کنند و تمایلی به یادگیری برنامهنویسی ندارند. Area 120 متعلق به گوگل، ابزار ساخت بازی Game Builder را برای این گیمرها ایجاد کرده است. با استفاده از آن بدون نیاز به داشتن دانش برنامهنویسی و کار با ابزارهای حرفهای ساخت بازیهای ویدیویی قادر خواهید بود از طریق درگ اند دراپ عناصر مختلف، یک بازی جدید برای خود ایجاد کنید!
در ابزار ساخت بازی Game Builder علاوه بر امکان ساخت دنیای منحصربهفرد بازی ویدیویی خود، میتوانید نحوه تعامل گیمر با عناصر مختلف که معمولا از طریق کدنویسی مشخص میشود را نیز تعیین کنید. این ابزار بازیسازی از طریق طرح یک سری پرسش، به گزینههای ایدهآل شما برای یک بازی ویدیویی خوب پی میبرد.
آن دسته از کاربرانی که با زبان برنامهنویسی جاوااسکریپت آشنایی دارند، قادر خواهند بود به وسیله کدنویسی قسمتهایی از بازی، آن را حرفهایتر کرده و دقیقا به شکل دلخواه در بیاورند. خوشبختانه ابزار ساخت بازی Game Builder رایگان است. برای استفاده از این بازیساز به وب سایت Steampowered مراجعه کنید.
منبع :ubergizmo
اپل به تازگی استارتاپ کانادایی Buddybuild» را تصاحب کرده که در زمینه ابزارهای توسعه نرم افزار برای برنامه نویسان تخصص دارد. این خرید اپل به توسعه دهندگان اپلیکیشن های اپ استور کمک می کند که راحت تر برنامه های خود را توسعه دهند.
خبر این خرید اپل دیروز اعلام شده البته در حال حاضر مبلغی که اپل برای خرید استارتاپ مذکور پرداخته، مشخص نشده. قرار است کارمندان استارتاپ کانادایی به گروه مهندسان Xcode بپیوندد. Xcode مجموعه ای از ابزارهای توسعه نرم افزار است که برنامه نویسان می توانند با استفاده از آن برای محصولات اپل، از جمله آیفون، کامپیوترهای مک و اپل واچ اپلیکیشن تولید کنند.
بر اساس اطلاعات پروفایل لینکدین Buddybuild در سال 2015 در ونکووِر تأسیس شده و 40 کارمند در آن مشغول به کار بوده اند. این استارتاپ اخیراً به ارزشی معادل 7.6 میلیون دلار دست یافته بود.
کمپانی یاد شده در بیانیه خود اعلام کرده بود: ما همیشه به این که یک شرکت کانادایی هستیم افتخار می کنیم و از حضور در ونکووِر خرسندیم،؛ [شهری که] میزبان توسعه دهندگان و مهندسان با استعداد است».
بر اساس ادعای پیشین این استارتاپ، Buddybuild تنها پلتفرم یکپارچه موبایل را ساخته است. بدین ترتیب ابزار آنها برای تیم های برنامه نویسان، تغییر کدها در پروژه های بزرگ را بسیار ساده می کند.
با این حال برنامه نویسانی که از ابزارهای نرم افزای این کمپانی برای ساخت اپ های اندروید استفاده می کردند، پس از 10 اسفند ماه سال جاری قادر به استفاده از آن نخواهند بود.
همچنین مسئولان این کمپانی در بیانیه ای اعلام کرده اند که از این پس مشتری جدیدی را برای خدمات خود نخواهند پذیرفت و خدمات به مشتریان رایگان نیز از 10 اسفند ماه پایان خواهد یافت.
اپل ادعا می کند که همواره تلاش کرده توسعه دهندگان نرم افزارهای مبتنی بر سخت افزارهای خود را راضی نگه دارند. به نظر می رسد تصاحب استارتاپ یاد شده، کمپانی ساکن کوپرتینو را به این هدف نزدیک تر نماید.
پیشنهاد می کنیم اگر در مورد خریدهای احتمالی آتی اپل کنجکاو هستید، مطلب دیجیاتو در مورد لیست خرید های آتی اپل را مطالعه نمایید.
تیم کوک اخیرا در جریان سخنرانی برای دانشجویان به اهمیت یادگیری برنامه نویسی و اثرات مخرب شبکه های اجتماعی پرداخته است.
در سال های اخیر شبکه های اجتماعی از فیسبوک و توییتر گرفته تا اینستاگرام چنان تاثیر عمیقی را بر زندگی کاربران داشته اند که حتی
روز گذشته تیم کوک، مدیرعامل اپل نیز طی سخنرانی برای داشجویان Harlow College بریتانیا به این مساله اشاره کرد:
من بچه ندارم اما برای برادزاده ام محدودیت هایی قائل شده ام و ترجیح می دهم او در شبکه های اجتماعی حضور نداشته باشد.
برادرزاده کوک به زودی 13 ساله می شود و مدیرعامل اپل اعلام کرده که پس از پردخت هزینه های دانشگاه او قصد دارد داراییش را صرف امور خیریه کند.
به هر حال سن قانونی برای افتتاح حساب در فیسبوک 13 سال است و باید دید این نوجوان خود چه تصمیمی دارد. هرچند بسیاری عقیده دارند که تعداد کاربران زیر 13 سال این شبکه اجتماعی بالغ بر 7.5 میلیون نفر است.
البته کوک تنها کسی نیست که شبکه های اجتماعی را به باد انتقاد می گیرد و سال گذشته حتی پاپ فرانسیس نیز خواستار دوری از زندگی غیر واقعی شد که در شبکه های اجتماعی به تصویر کشیده می شود.
کوک در بخش دیگری از سخنرانی خود تاکید کرد که اگر قرار است بین یادگیری یک زبان خارجی یا برنامه نویسی یکی را انتخاب کنید بهتر است گزینه دوم را دنبال کنید:
می دانم که ممکن است برخی با نظر من موافق نباشند اما برنامه نویسی زبانی جهانی است که می توانید از طریق آن با 7 میلیارد نفر صحبت کنید.
او عقیده دارد که در حال حاضر برابری جنسیتی در موسسه های آموزش علوم کامپیوتر وجود ندارد اما با آموزش برنامه نویسی در سنین پایین می توان به این مهم دست پیدا کرد.
بر اساس گزارش موسسه Redmonk زبان برنامه نویسی سوئیفت اپل برای اولین بار توانسته در آخرین سه ماهه جاری میلادی، به لیست 10 زبان برتر برنامه نویسی راه یابد.
موسسه مذکور که در زمینه تحلیل های مرتبط با توسعه دهندگان نرم افزار فعالیت می کند، از سال 2011 تاکنون در دوره های 3 ماهه اقدام به انتشار لیست زبان های برنامه نویسی محبوب می نماید. بر اساس گزارش این موسسه زبان سوئیفت از ابتدای معرفی تاکنون بیشترین میزان رشد استفاده در بین برنامه نویسان را داشته است.
بنا بر این گزارش، پیشرفت یاد شده برای زبانی که تنها حدود 4 سال از معرفی آن می گذرد، چشمگیر است. در رده بندی اخیر سوئیفت موفق شده نزدیک به زبان شیء گرای آبجکتیو-سی قرار بگیرد. البته جلو زدن از این زبان برای سوئیفت کار مشکلی است، ولی در آینده، چندان هم دور از ذهن به نظر نمی رسد.
محور افقی میزان محبوبیت زبان ها در GitHub و محور عمودی میزان محبوبیت در Stack Overflow را نشان می دهد. برای مشاهده نمودار در اندازه بزرگتر روی آن کلیک کنید.
موسسه Redmonk اطلاعات آماری خود را از کاربران وبسایت های محبوب توسعه دهندگان GitHub و Stack Overflow تهیه کرده. در واقع اطلاعات کدها از GitHub و اطلاعات مرتبط با بحث های برنامه نویسان از Overflow به دست آمده و از ترکیب این موارد، آمار مذکور حاصل شده است.
البته در عین حال Redmonk اشاره کرده که این روش نشان دهنده اطلاعات آماری دقیقی از استفاده فعلی از زبان های برنامه نویسی نیست. ولی می تواند ارتباط بین بحث های مرتبط با زبان های برنامه نویسی و میزان استفاده از آنها را نشان دهد و میزان پتانسیل آینده پذیرفته شدن آنها (از سوی برنامه نویسان) را نمایان کند.
به عبارت دیگر ممکن است میزان استفاده از زبان های برنامه نویسی متفاوت با این رتبه بندی باشد، ولی آمار به دست آمده از GitHub و Stack Overflow می تواند به ما نشان دهد که برنامه نویسان در حال گرایش به سمت کدام زبان ها هستند. در ادامه می توانید لیست ده زبان برنامه نویسی برتر را مشاهده نمایید:
1- جاوا اسکریپت
2- جاوا
3- پایتون
4- PHP
5- #C
6- ++C
7- CSS
8- Ruby
9- C
10- سوئیفت مشترکاً با آبجکتیو-سی
در این جلسه از آموزش میخواهیم از برنامهی اکلیپس یا به عبارتی از IDE اکلیپس برای نوشتن برنامههای جاوا استفاده کنیم. IDE مخفف: Integrated Development Environment است. در واقع IDE ها تمام ابزارهای مورد نیاز برای برنامه نویسان را به طور منظم فراهم میکنند تا برنامه نویسان فقط روی نوشتن و طراحی برنامه تمرکز کنند و خود را درگیر مسائل جزئی مثل کامپایل کردن برنامه نکنند.
برای هریک از زبانهای برنامه نویسی، IDE های بسیار زیادی وجود دارد و میتوان با همهی آنها برنامه را به درستی نوشت و اجرا کرد. اما از میان تمام IDE ها معمولا همیشه یک IDE از بقیه سرتر و بهتر است. به عنوان مثال برای زبان برنامه نویسی #C (سی شارپ) بهترین IDE، ویژوآل استودیو است. برای زبان جاوا هم IDE های زیادی وجود دارد که معروفترین و محبوبترین آنها عبارت اند از:
اکلیپس یک IDE اُپن سورس (Open Source) و مبتنی بر پلاگین (Plug-in)، و بسیار مناسب برای تولید برنامههای مدرن جاوا (JavaEE) است. زیرا از آنجایی که جاوا ای ای مجموعهای از تکنولوژی ها است، بنابراین پلاگینهای مختلفی برای تکنولوژیهای مختلف تولید شده است و به راحتی میتوان آنها را از اینترنت دانلود و به اکلیپس اضافه کرد. ممکن است در ذهن شما این سوال بهوجود بیاید که پلاگین چیست!؟ پلاگینها (افزونهها) برنامههای کوچکی هستند که توسط شرکتهای مختلف تولید میشوند و با نصب آنها روی یک برنامه، میتوان قابلیتهای جدیدی را به آن برنامه اضافه کرد. به عنوان مثال، ADT یکی از پلاگینهای معروف برای توسعهی اندروید روی اکلیپس است. متاسفانه اکلیپس دارای باگهای فراوانی است و علت آن هم هسته اکلیپس نیست، بلکه باگهایی است که در پلاگینهای آن موجود است. بنابراین تا میتوان باید سعی کرد از پلاگینهایی که توسط شرکتهای معتبر تولید شدهاند استفاده کرد.
نت بینز یک IDE حرفهای و به اصطلاح همه فن حریف است. این IDE توسط شرکت اوراکل نوشته شده است و میتوان به جز جاوا، برای زبانهای برنامهنویسی دیگری هم مثل: PHP, C++, Groovy و . نیز استفاده کرد. در این IDE هم مانند اکلیپس میتوان پلاگینهایی را اضافه کرد. اما بسیاری از سرویسها به صورت داخلی در این IDE پیادهسازی شدهاند. به عنوان مثال وب سرور Apache Tomcat (آپاچی تامکت) به صورت داخلی در این IDE پیادهسازی شده است و دیگر نیازی نیست تا به صورت جدا گانه این وب سرور را دانلود و نصب کنیم. اما یکی از ویژگیهای مهم این IDE، این است که ابزارهای بسیار حرفهای برای طراحی رابط گرافیکی کاربر دارد و یکی از مشکلات بزرگ برنامه نویسان جاوا را حل کرده است.
آخرین IDEای که در مورد آن صحبت میکنیم، Jetbrains Intellij Idea است، که معنی "تند مغزها؛ ایده هوشمند" را دارد. این IDE یکی از بهترین ویرایشگرها برای زبان برنامه نویسی جاوا است که دارای هوش فوق العادهای است. اما با توجه به تجربیات شخصی و مطالعاتی که بنده در این زمینه داشتم، این IDE اصلا مناسب برای برنامههای مدرن جاوا (JavaEE) نیست و صرفا برای برنامه نویسی جاوا نسخهی استاندارد آن و برنامه نویسی وب در جاوا میتوان از آن استفاده کرد. همچنین این IDE همانند اکلیپس و نت بینز امکان اضافه کردن پلاگین را دارد.
باتوجه به بررسیهای فوق، ما برای این دورهی آموزشی، بهترین، محبوبترین و سادهترین IDE، یعنی اکلیپس را انتخاب میکنیم. در ادامهی این آموزش، ما نحوهی دانلود این IDE را آموزش میدهیم.
برای دانلود اکلیپس باید به سایت اکلیپس مراجعه کنید. بعد از وارد شدن به سایت اکلیپس، با نمایی مشابه تصویر زیر مواجه میشوید:
همانطور که در تصویر فوق با یک بیضی سبز رنگ مشخص شده است، بر روی دکمه DOWNLOAD کلیک کنید تا وارد صفحهی زیر شوید:
بعد از اینکه روی دکمه DOWNLOAD کلیک کردید، کمی صفحه را به پایین اسکرول کنید. همانطور که در تصویر فوق مشاهده می کنید، گزینهای که با یک مستطیل قرمز رنگ مشخص شده را انتخاب کنید تا وارد صفحهی زیر شوید:
دوباره به همان صورتی که در تصویر فوق، با یک مستطیل قرمز رنگ مشخص شده است، نوع سیستم عامل خودتان را انتخاب کنید تا وارد صفحهی زیر شوید:
همانطور که در تصویر فوق با یک بیضی سبز رنگ مشخص شده است، بر روی دکمهی دانلود کنید تا وارد صفخهی زیر شوید:
در صفحه فوق، کمی منتظر بمانید تا دانلود شروع شود. پیشنهاد میشود که از نرم افزارهای مدیریت دانلود مثل IDM برای دانلود استفاده کنید.
در جلسهی بعدی ما نحوهی استفاده از اکلیپس را آموزش میدهیم.
تهیه شده درزومیت
در سری مطالب آموزش جاوا قصد داریم شما کاربران زومیت را با این زبان برنامهنویسی آشنا کنیم. قبل از شروع ابتدا کمی در مورد این دوره آموزشی صحبت میکنیم، تا شما متوجه شوید که در این دوره قرار است که چه چیزهایی یاد بگیرید. لطفا در ادامه همراه زومیت باشید تا با این دوره آموزشی آشنا شوید.
ما در این دوره آموزشی، زبان برنامه نویسی جاوا را از ابتدا و از صفر آموزش میدهیم. یعنی این دوره آموزشی هیچ پیش نیازی ندارد. تمرکز ما در این دوره روی نسخه استاندارد جاوا، یعنی Java SE است. جاوا زبانی بسیار گسترده و دارای تکنولوژیهای بسیار زیادی است. ما در این دوره آموزشی قرار هست وارد این دنیای بزرگ شویم و مقدمات جاوا و در کل برنامه نویسی را یاد بگیریم.
ابتدا در مورد تاریخچه جاوا، ویژگیها و بازار کار این زبان برنامه نویسی در ایران و خارج از کشور صحبت میکنیم.
نکته: توجه داشته باشید که مفاهیم ابتدایی بسیار مهم هستند و شما باید این مفاهیم را یاد بگیرید. تصور کنید روزی شما به یک برنامه نویس حرفهای جاوا تبدیل شدهاید. اما نمیدانید که جاوا در چه سالی بوجود آمده و توسط چه کسی ساخته شده و اصلا هدف از ساخت جاوا چه بوده!؟ بنابراین چند آموزش ابتدایی این دوره آموزشی که خیلی وارد مبحث کد نوشتن نمیشوند را به خوبی یاد بگیرید و سَر سَری از این مطالب عبور نکنید.
سپس در مورد متغیرها، کلاس و متُد و نحوه به کارگیری آنها در جاوا صحبت میکنیم. بعد با حلقههای تکرار، دستورات شرطی آشنا میشویم و کم کم وارد مفاهیم پیشرفتهتری مثل برنامه نویسی شی گرا میشویم. شی گرایی مبحث بسیار گستردهای است و ما در این دوره آموزشی، شی گرایی را به طور کامل یاد میگیریم و درک میکنیم.
تا اینجای کار ما با برنامه نویسی آشنا شدهایم و از اینجا به بعد وارد مفاهیم سختتر برنامه نویسی، مثل کنترل خطا و استثناها در برنامه، برنامه نویسی چند نخی، آشنایی با سیستم فایل، جنریکها، کاراکترها و رشتهها، اَنوتیشِن و . میشویم و بعد در آخر هم نگاهی گذرا به مفاهیم گرافیک در جاوا خواهیم داشت.
سخن آخر اینکه، برنامه نویسی هم مانند هر کاره دیگری نیاز به علاقه، پشت کار و اراده ای محکم و پولادین دارد. اگر میخواهید در این رشته موفق شوید، از همین ابتدای کار، این دوره آموزشی را با شور و شوق آغاز کنید. اگر با اراده و با گذشتن از کارهای غیر ضروری و وقت گذاشتن روزانه (در ابتدای کار حدودا دو ساعت در روز) برنامه نویسی را شروع کنید، مطمئنا در پایان این دوره آموزشی به یک برنامه نویس Java SE کار حرفهای تبدیل میشوید و آماده برای ورود به دنیای JavaEE هستید.
ما برای تالیف این دوره آموزشی از منابع مختلفی استفاده کردهایم. اما منبع اصلی ما کتاب "چگونه با جاوا برنامه بنویسیم" از دایتل است که بسیار منبع خوب و کاملی برای شروع است و میتوانید آن را از این لینک دانلود کنید. ما نسخه اصلی این کتاب و در زومیت برای دانلود قرار دادهایم تا شما بتوانید در کناره آموزشهای زومیت، از این کتاب برای تمرین بیشتر استفاده کنید. البته تمام فصلهای این کتاب جزو بودجهبندی آموزشهای زومیت نیستند، اما بیشتر فصلها را شامل میشود.
سایر منابعی که ما برای این دوره آموزشی استفاده کردهایم:
طی روزهای پیش رو با آموزش جاوا از زومیت همراه ما باشید.
تهیه شده درزومیت
درباره این سایت