پایتون یا متلب کدام بهتر است؟ – راهنمای جامع


زبانهای برنامهنویسی، یکی از اساسیترین بخشهای «علم کامپیوتر» (Computer Science) محسوب میشوند. به عبارت دیگر، یکی از مهمترین ابزارهای در دسترس برنامهنویسان و توسعهدهندگان برای پیشبرد اهداف مرتبط با «خودکارسازی وظایف» (Task Automation) و توسعه برنامههای کاربردی هستند. همچنین، زبانهای برنامهنویسی ابزاری حیاتی جهت رسیدن به اهداف کلان سازمانی در صنایع و شرکتهای تجاری به شمار میآیند. انتخاب پایتون یا متلب به عنوان زبان برنامهنویسی مقصد (به ویژه برای افرادی که آشنایی کافی با مفاهیم برنامهنویسی ندارند و به نوعی، تازهواردان عرصه برنامهنویسی محسوب میشوند)، سؤالی است که ذهن بسیاری از فعالان و علاقهمندان به حوزه برنامهنویسی را به خود معطوف کرده است.
انتخاب بهترین زبان برنامهنویسی برای افراد مختلف، معمولا فرایندی بسیار گیجکننده است. در این مطلب، برای اینکه مشخص شود کدام یک از زبانهای برنامهنویسی پایتون یا متلب انتخاب مناسبتری برای برنامهنویسان و توسعهدهندگان محسوب میشود، ویژگیهای کلیدی و همچنین، مزایا و معایب هر کدام از این دو زبان برنامهنویسی با یکدیگر مقایسه خواهند شد. علاوه بر این، جهت سهولت انتخاب زبان پایتون یا متلب برای برنامهنویسان مبتدی، ویژگیهایی نظیر سادگی یادگیری، آینده شغلی و گستره دامنه کاربرد این دو زبان برنامهنویسی نیز با یکدیگر مقایسه خواهند شد.
- مقاله پیشنهادی: طراحی سایت با پایتون — از صفر تا صد و پروژه محور
برای اینکه بتوان یکی از زبانهای برنامهنویسی پایتون یا متلب را برای مقاصد یادگیری یا برنامهنویسی یک پروژه نرمافزاری انتخاب کرد (و انتخاب هوشمندانهای داشت)، نیاز است تا ابتدا ویژگیهای این دو زبان برنامهنویسی برای کاربر، برنامهنویس یا توسعهدهنده مشخص شود. همچنین، نیازمندیها و ویژگیهای منحصر به فرد یک پروژه نرمافزاری مانند نیاز به محاسبات علمی سنگین، «واسط کاربری گرافیکی» (Graphical User Interface)، نیاز به پشتیبانی از ساختارهای دادهای مختلف و سایر موارد، میتواند برنامهنویس و توسعهدهنده را به سمت انتخاب یکی از زبانهای پایتون یا متلب سوق دهد.
معمولا زبانی برای برنامهنویسی یک پروژه نرمافزاری خاص مناسب است که ویژگیهای آن بیشترین تطابق را با نیازمندیهای پروژه داشته باشد؛ ویژگیهایی نظیر سرعت اجرای کدها، قابلیت اجرای برنامههای نوشته شده در پلتفرمهای مختلف، «چرخه توسعه نرمافزار» (Software Development Cycle)، میزان زمان لازم برای توسعه یک برنامه کاربردی، تنوع ابزارها و کتابخانههای برنامهنویسی و سایر موارد، از جمله فاکتورهای تأثیرگذار در انتخاب پایتون یا متلب جهت توسعه یک پروژه نرمافزاری خواهند بود.
با این حال، برای کسانی که تجربهای در توسعه برنامههای کاربردی ندارند ولی علاقهمند به یادگیری برنامهنویسی هستند، ویژگیهایی نظیر سادگی یادگیری، نحوه طراحی «قواعد دستوری» (Syntax) و سایر موارد، نقش به مراتب پررنگتری در انتخاب پایتون یا متلب ایفا خواهد کرد. به عبارت دیگر، ویژگیهایی نظیر سادگی یادگیری قواعد دستوری و نزدیک بودن آنها به «زبان طبیعی» (Natural Language)، درآمد سالانه مورد انتظار برای برنامهنویسان هر یک از زبانهای پایتون یا متلب و موقعیت شغلی آینده آنها، میتوانند عوامل مؤثرتری در انتخاب یکی از زبانهای پایتون یا متلب برای این دسته از برنامهنویسان محسوب شود.
در ادامه و برای مقایسه و انتخاب یکی از زبانهای پایتون یا متلب برای کد نویسی، بررسی اجمالی از هر دو زبان برنامهنویسی ارائه خواهد شد. سپس، برای اینکه کاربران و برنامهنویسان مبتدی، انتخاب بهتر و هوشمندانهتری میان زبان پایتون یا متلب داشته باشند، ویژگیها، موقعیتهای کاری و آینده شغلی دو زبان بررسی خواهد شد. نکته کلیدی در انتخاب یکی از زبانهای پایتون یا متلب به عنوان زبان مقصد (جهت توسعه برنامههای کاربردی)، سهولت یادگیری این دو زبان است. همچنین، دامنه کاربردی یک پروژه برنامهنویسی («علم داده» (Data Science)، «یادگیری ماشین» (Machine learning)، «برنامهنویسی سیستمی» (System Programming)، «محاسبات علمی» (Scientific Computation) و سایر موارد)، میتواند نقش مهمی در تعیین پایتون یا متلب به عنوان زبان برنامهنویسی مقصد برای کاربران مختلف داشته باشد.
بنابراین به طور کلی، جهت مقایسه و انتخاب یکی از زبانهای پایتون یا متلب برای کد نویسی، این دو زبان در سطح قواعد دستوری، ویژگیهای ساختاری، عملکرد، سرعت اجرای برنامهها و سایر موارد مورد بررسی قرار گرفته میشوند. همچنین، میزان محبوبیت این دو زبان در میان جامعه برنامهنویسی، درآمد مورد انتظار هر یک از آنها و موقعیتهای شغلی موجود برای هر کدام از این دو زبان بررسی خواهد شد.
پایتون یا متلب
«زبان برنامهنویسی متلب» (MATLAB Programming Language)، یک «محیط محاسبات عددی چندالگویی» (Multi-paradigm Numerical Computing Environment) و یک «زبان برنامهنویسی انحصاری» (Proprietary Programming Language) توسعه داده شده به وسیله شرکت MathWorks است. نام متلب به زبان انگلیسی (MATLAB)، از عبارت MATrix LABoratory گرفته شده است.
زبان برنامهنویسی متلب، امکاناتی نظیر «دستکاری ماتریسی» (Matrix Manipulation)، «ترسیم» (Plotting) توابع و دادهها، پیادهسازی الگوریتمها، ساختن «واسط کاربری» (User Interface) و تعامل با برنامههای نوشته شده به دیگر زبانهای برنامهنویسی نظیر C ،C++ ،C#، جاوا، Fortran و پایتون را در اختیار برنامهنویسان و توسعهدهندگان قرار میدهد.
اگرچه متلب، از ابتدا برای مقاصد محاسبات علمی و عددی توسعه داده شده بود، برخی از «تولباکسهای» (Toolbox) موجود در متلب، امکان استفاده از قابلیتهای «محاسبات نمادین» (Symbolic Computing) یا جبر کامپیوتری را از طریق موتور محاسبات جبری MuPAD، در اختیار برنامهنویسان و توسعهدهندگان قرار میدهند.
همچنین، بستههای نرامافزاری و برنامهنویسی دیگر نظیر تولباکس Simulink، امکاناتی نظیر «شبیهسازی چند دامنه گرافیکی» (Graphical Multi-Domain Simulation) و «طراحی مبتنی بر مدل» (Model-based Design) را از «سیستمهای تعبیهشده و پویا» (Dynamic and Embedded Systems) برای برنامهنویسان و توسعهدهندگان فراهم میآورند.
متلب، یک زبان برنامهنویسی و محیطی بهینهسازی شده برای طراحی و پیادهسازی «تحلیل تکراری» (Iterative Analysis) و محاسبات علمی ارائه میدهد که امکان محاسبات ریاضی روی ساختارهای دادهای ماتریس و آرایه را برای برنامهنویسان و توسعهدهندگان فراهم میآورد. تولباکسهای متلب توسط توسعهدهندگان حرفهای پیادهسازی، تست و مستندسازی شدهاند.
همچنین، زبان متلب به برنامهنویس و توسعهدهنده اجازه میدهد تا عملکرد الگوریتمهای مختلف را روی دادههای خود ارزیابی کند. همچنین، کاربران قادرند برنامههای تولید شده را با پارامترهای مختلف ارزیابی کنند و در صورتی که نتایج دلخواه آنها حاصل شد، زبان متلب، برنامه متناظر را برای خودکارسازی وظایف در اختیار آنها قرار میدهد. بنابراین، به کاربران، برنامهنویسان و توسعهدهندگان برنامههای کاربردی توصیه میشود در صورتی قصد دارند برای کاربردهایی نظیر «تحلیل داده» (Data Analysis)، توسعه الگوریتمها و ساختن مدلهای محاسبات علمی کد نویسی کنند، بهتر است که زبان برنامهنویسی متلب را (از میان پایتون یا متلب) انتخاب کنند.
یکی از ویژگیهای مهم زبان برنامهنویسی متلب، به ویژه در محاسبات علمی، امکان مقیاسپذیری بالای کدهای متلب هنگام اجرا است؛ کدهای نوشته شده به زبان متلب را میتوان توسط «سیستمهای محاسبات خوشهای» (Cluster Computing System)، «واحدهای پردازش گرافیکی» (Graphical Processing Units | GPUs) و «سیستمهای محاسبات ابری» (Cloud Computing Systems)، با کمترین تغییرات ممکن، اجرا کرد. به عبارت دیگر، استفاده از زبان برنامهنویسی متلب، نیاز به دوبارهنویسی کدهای نوشته شده را (برای اجرا در سیستمهای محاسباتی مختلف) به حداقل میرساند؛ به عنوان نمونه، برای پردازش و تحلیل حجم عظیمی از دادهها در متلب و اجرای برنامه نوشته شده در یک سیستم محاسباتی دیگر، نیازی به یادگیری برنامهنویسی «کلان داده» (Big Data) و تکنیکهای مقابله با کمبود حافظه اجرایی وجود ندارد.
ویژگی دیگر این زبان برنامهنویسی، قابلیت اجرای کدهای متلب در «سیستمهای تعبیه شده» (Embedded Systems) است. به عبارت دیگر، این امکان برای برنامهنویسان و توسعهدهندگان سیستمهای تعبیه شده فراهم شده است تا به طور خودکار، کدهای نوشته شده در زبان برنامهنویسی متلب را به کدهای معادل در زبانهای دیگر نظیر C ،C++ ،HDL و یا کدهای «کودا» (CUDA) تبدیل و آنها را در «پردازندههای تعبیه شده» (Embedded Processors) یا FPGA/ASIC اجرا کرد. همچنین، تولباکس Simulink امکان طراحی مبتنی بر مدل را برای برنامهنویسان و توسعهدهندگان سیستمی فراهم میآورد؛ از این تولباکس و مدلهای طراحی شده، جهت شبیهسازی چنددامنه، تولید خودکار کد و آزمون و صحتسنجی سیستمهای تعبیه شده استفاده میشود.
بنابراین، در صورتی که توسعهدهندگان یا برنامهنویسان قصد تولید سیستمهای محاسبات علمی مقیاس پذیر را دارند، به آنها توصیه میشود که زبان متلب را از میان زبانهای پایتون یا متلب برای کد نویسی انتخاب کنند. از سوی دیگر، برنامهنویسی سیستمهای تعبیه شده یکی از نقاط قوت زبان برنامهنویسی متلب محسوب میشود و در این زمینه توصیه میشود که زبان متلب برای کد نویسی سیستمهای تعبیه شده مورد استفاده قرار بگیرد.
«زبان برنامهنویسی پایتون» (Python programming Language)، یکی از زبانهای برنامهنویسی سطح بالا محسوب میشود که از نوعهای دادهای پویا استفاده میکند؛ یعنی، نوع دادهای متغیرها، در زمان اجرا و به طور خودکار، توسط «مفسر» (Interpreter) مشخص میشوند (معمولا، مشخص شدن نوع دادهای متغیرها در زمان اجرا و بر حسب مقادیر آنها انجام میپذیرد). زبان برنامه نویسی پایتون، جزء زبانهای برنامهنویسی همه منظوره محسوب میشود.
توسعه ابتدایی زبان پایتون، در یک مؤسسه تحقیقاتی در کشور هلند آغاز شد. انگیزه اصلی توسعه زبان برنامهنویسی پایتون، توسعه یک زبان برنامهنویسی «سطح بالا» (High Level) بود که قادر به پوشاندن شکاف میان زبانهای C و «محیطهای اسکریپتینگ» (Scripting Environment) نظیر Shell باشد. قواعد دستوری زبان پایتون با الهام از زبانهایی نظیر Algol68، پاسکال و ABC شکل گرفته است و جزء زبانهای برنامهنویسی محسوب میشود که خوانایی بسیار بالایی در طراحی قواعد دستوری و نوشتن کدهای دستوری از خود نشان میدهند.
زبان پایتون در ابتدا، برای ساختن «ابزارهای مدیریت سیستم» (System Administration Utilities) توسعه داده شده بود؛ یکی از زبانهای اصلی جامعه برنامهنویسی هنگام توسعه زبان برنامهنویسی پایتون، زبان C بود، با این حال، توسعه برنامههای مدیریت سیستم توسط زبان C کار بسیار دشواری بود و برای برطرف کردن چنین نقیصهای، توسعه زبان برنامهنویسی پایتون در دستور کار قرار گرفت.
هم اکنون، زبان پایتون برای توسعه دامنه وسیعی از برنامههای کاربردی نظیر برنامههای کاربردی تحت وب (Web Development) و Desktop مورد استفاده قرار میگیرد. زبان پایتون بدون شک، به عنوان زبان برنامهنویسی مرجع برای توسعه کاربردهای «هوش مصنوعی» (Artificial Intelligence)، «یادگیری ماشین» (Machine Learning) و «علم داده» (Data Science) مورد استفاده قرار میگیرد. بنابراین در صورتی که قرار است از یکی از زبانهای پایتون یا متلب برای توسعه برنامههای کاربردی، در حوزههای یادگیری ماشین یا علم داده استفاده شود، زبان پایتون بهترین انتخاب خواهد خواهد بود.
با این حال، در صورتی که قرار است یکی از زبانهای پایتون یا متلب برای توسعه برنامههای کاربردی در کاربردهایی نظیر «بینایی کامپیوتر» (Computer Vision)، «پردازش سیگنال» (Signal Processing)، «پردازش تصویر» (Image Processing) و «سیستمهای کنترلی» (Control Systems) مورد استفاده قرار بگیرد، توصیه میشود که زبان برنامهنویسی متلب انتخاب شود.
بنابراین، بسته به نوع برنامه کاربردی در حال توسعه و کتابخانه و ابزارهای مورد نیاز برای پیادهسازی آن، ممکن است یکی از زبانهای پایتون یا متلب جهت توسعه برنامههای کاربردی مناسب باشد. همچنین، برای برنامهنویسان مبتدی، ممکن است فاکتورهایی نظیر سهولت یادگیری، سرعت اجرا و «چرخه توسعه سریع» (Rapid Production Cycle)، نقش پررنگتری در انتخاب زبان پایتون یا متلب به عنوان زبان برنامهنویسی مقصد برای یادگیری، داشته باشند.
به عنوان نمونه، در صورتی که برنامهنویس قصد دارد از یکی از زبانهای پایتون یا متلب برای تولید «برنامههای کاربردی تحت وب» (Web Applications) استفاده کند، حتما باید به سراغ یادگیری زبان پایتون برود. با این حال، در صورتی که هدف توسعه برنامههای محاسبات علمی مقیاسپذیر باشد، زبان برنامهنویسی پایتون بهترین انتخاب، از میان زبانهای پایتون یا متلب خواهد بود.
در ادامه، به بررسی اجمالی ویژگیهای مؤثر در انتخاب پایتون یا متلب پرداخته خواهد شد. شناسایی ویژگیهای کلیدی زبانهای برنامهنویسی پایتون و متلب میتواند نقش مهمی در انتخاب پایتون یا متلب به عنوان زبان برنامهنویسی مقصد برای یادگیری و یا زبان برنامهنویسی پیشفرض برای کد نویسی یک پروژه داشته باشد.
زبان برنامهنویسی پایتون
زبان پایتون به یکی از محبوبترین زبانهای برنامهنویسی همه منظوره و سطح بالا در چند سال اخیر تبدیل شده است. زبان برنامهنویسی پایتون اولین بار در سال 1991 توسط Guido van Rossum معرفی شد. از ابتدای توسعه و شکلگیری، پدیدآورندگان زبان برنامهنویسی پایتون، فلسفه طراحی سطح بالا و شیءگرا، را به عنوان رویکرد اصلی در طراحی و توسعه این زبان برنامهنویسی در نظر گرفتند. ساختار زبان پایتون و رویکرد شیءگرا در طراحی آن، به برنامهنویسان و توسعهدهندگان کمک میکند تا کدهای واضح و منطقی جهت توسعه پروژههای برنامهنویسی در ابعاد کوچک یا بزرگ تولید کنند.
زبان پایتون از مکانیزمهای خودکار مدیریت حافظه به نام Garbage Collection پشتیبانی میکند. همچنین، زبان پایتون، از چندین «الگوی» (Paradigm) برنامهنویسی پشتیبانی میکند. به عبارت دیگر، زبان پایتون علاوه بر پشتیبانی از الگوی برنامهنویسی شیءگرا، از الگوهای دیگری نظیر «برنامهنویسی تابعی» (Functional Programming) و «برنامهنویسی رویهای» (Procedural Programming) نیز تبعیت میکند. زبان پایتون یک زبان برنامهنویسی تمام عیار محسوب میشود؛ دلیل این امر، گستردگی «کتابخانهها» (Libraries) و بستههای (Packages) برنامهنویسی توسعه داده شده برای این زبان است.
فلسفه طراحی، کد نویسی و قواعد دستوری زبان پایتون به قدری منطقی، ساده و ساختیافته در نظر گرفته شده است که از دید بسیاری از توسعهدهندگان و برنامهنویسان، این زبان در زمره «خواناترین» (Readable) زبانهای برنامهنویسی قرار گرفته است. طراحی منطقی مؤلفههای این زبان، سادگی کد نویسی برنامههای کاربردی و ساخت یافته بودن قواعد دستوری و بلاکهای برنامه در زبان پایتون سبب شده است تا کد نویسی، «اشکالزدایی» (Debugging) و «بهکاراندازی» (Deploy) کدهای زبان پایتون در پلتفرمهای مختلف، ساده تر از دیگر زبانهای برنامهنویسی همرده باشد. به همین دلیل، یادگیری زبان پایتون برای برنامهنویسان مبتدی بسیار آسان است و به این دسته از برنامهنویسان توصیه میشود که برای یادگیری برنامهنویسی، پایتون را از میان زبانهای پایتون یا متلب انتخاب کنند.
از آنجایی که زبان پایتون، از «مفسر» (Interpreter) برای اجرای کدها و دستورات خود استفاده میکند، دستورات و کدهای نوشته شده، به صورت خط به خط خوانده و در زبان پایتون اجرا میشوند. طبیعت «همه منظوره» (General Purposes) زبان پایتون سبب شده است تا از یک سو، برای کد نویسی در دامنه وسیعی از برنامههای کاربردی قابل استفاده باشد و از سوی دیگر، برنامهنویسان و توسعهدهندگان این امکان را داشته باشند تا از این زبان، برای مقاصد برنامهنویسی عمومی (توسعه برنامههای کاربردی) و اسکریپتینگ (خودکارسازی وظایف مختلف) استفاده کنند.
ویژگی دیگر زبان پایتون، سادگی توسعه و اجرای برنامههای کاربردی است؛ سرعت اجرای کدها در زبان پایتون، مطلوب و چرخه توسعه نرمافزار در آن، بسیار سریع است. ویژگی مهم زبان پایتون، مقیاسپذیری بسیار خوب آن است؛ به همین دلیل، از این زبان برای تولید برنامههای کاربردی تحت وب مقیاسپذیر استفاده میشود.
پلتفرمهای معروف تحت وب نظیر یوتیوب، Reddit، اینستاگرام، Pinterest و SurveyMonkey، توسط زبان برنامهنویسی پایتون توسعه داده شدهاند. همچنین، زبان پایتون، یکی از نخستین فناوریهایی بود که توسط شرکت گوگل و جهت توسعه موتور جستجو به کار گرفته شد.
از زبان پایتون در حوزههای کاربردی مختلفی نظیر «تحلیل داده» (Data Analysis)، «تحلیل علمی» (Scientific Analysis)، یادگیری ماشین، ساختن برنامههای کاربردی، ساختن بازیهای ویدئویی دوبُعدی و سهبُعدی، توسعه برنامههای کاربردی تحت وب و سایر موارد استفاده میشود.
بسیاری از شرکتهای «استارتآپ» (Startup) در حوزه فناوری، جهت ارائه سرویسهای خود از زبان پایتون، به عنوان پلتفرم BacK-End استفاده میکنند. بنابراین، به کسانی که قصد دارند برای آینده شغلی خود به شرکتهای استارتآپ بپیوندند، توصیه میشود که زبان برنامهنویسی پایتون را یاد بگیرند.
تیمهای توسعه زبان برنامهنویسی پایتون و جامعه برنامهنویسی، از طریق ارائه بستهها و کتابخانههای استاندارد و «شخص ثالث» (Third-Party) متنوع و پرکاربرد، پشتیبانی بسیار مناسبی از این زبان برنامهنویسی انجام میدهند. بنابراین، به کسانی که به دنبال مشاغل پر درآمد در حوزه برنامهنویسی و توسعه برنامههای کاربردی هستند و تمایل دارند که در حوزههای مختلف کاربردی (نظیر مدلسازی هوشمند، علم داده، توسعه وب، برنامههای Desktop و سایر موارد) کد نویسی کنند، توصیه میشود که زبان پایتون را از میان زبانهای پایتون یا متلب یاد بگیرند.
- مقاله پیشنهادی: طراحی سایت با پایتون — از صفر تا صد و پروژه محور
پیش از اینکه قادر به توسعه برنامههای کاربردی در زبان پایتون باشید، لازم است تا ابتدا زبان پایتون را روی سیستم عامل مقصد خود نصب کنید. کاربران و مخاطبان این مطلب میتوانند آموزش جامع نصب پایتون در سیستمهای عامل مختلف را در اینجا مطالعه کنند. همچنین، مجموعهای از آموزشهای مرتبط با یادگیری پایتون و نصب نسخه 2 و 3 پایتون در سیستمهای عامل ویندوز، لینوکس و مک نیز در اینجا گردآوری شده است.
برای انتخاب هوشمندانه یکی از زبانهای پایتون یا متلب (جهت یادگیری قواعد برنامهنویسی یا تولید برنامههای کاربردی)، توجه به ویژگیهای کلیدی، مزایا و معایب این دو زبان بسیار مهم است. همچنین، دامنه کاربردی برنامهای که قرار است توسعه داده شود، نقش مهمی در پررنگتر کردن انتخاب یکی از زبانهای پایتون یا متلب خواهد داشت. در ادامه، مهمترین مزایا و معایب زبان پایتون شرح داده خواهد شد.
مزایای زبان برنامهنویسی پایتون
در ادامه، مهمترین مزایای پایتون جهت توسعه برنامههای کاربردی مورد بررسی قرار میگیرد:
- زبان پایتون از چندی الگوی برنامهنویسی پشتیبانی میکند. به عبارت دیگر، در زبان پایتون، علاوه بر برنامهنویسی شیءگرا، از الگوهای برنامهنویسی دیگر نظیر برنامهنویسی «تابعی» (Functional)، «رویهای» (Procedural) و «ساختاری» (Structural) نیز پشتیبانی میشود.
- تعریف و استفاده از «کلاسها» (Classes) و «اشیاء» (Objects)، به دلیل پشتیبانی از ویژگیهای شیءگرایی در زبان پایتون، بسیار ساده است.
- یکی از مهمترین ویژگیهای زبان پایتون، پویا بودن آن است، در زبانهای پویا، هنگام کد نویسی، نیازی به تعریف نوع دادهای متغیرها وجود ندارد و نوع آنها، در زمان اجرا و به طور خودکار، توسط مفسر مشخص میشود.
- قابلیت خوانایی و اشکالزدایی کدها در زبان پایتون بسیار بالاست و یادگیری آن به برنامهنویسان مبتدی توصیه میشود. به طور کلی، کد نویسی در زبان پایتون بسیار ساده است.
- سادگی نگهداری و «تطبیق» (Port) کدهای پایتون برای تمامی پلتفرمها (استفاده از کدهای پایتون نوشته شده در یک پلتفرم روی یک پلتفرم دیگر)، یکی از ویژگیهای مهم این زبان محسوب میشود.
- کتابخانههای استاندارد زبان پایتون بسیار غنی هستند. ازهمه مهمتر، کتابخانههای استاندارد پایتون در تمامی پلتفرمهای موجود، نظیر ویندوز، لینوکس، مک و سایر موارد، با یکدیگر مطابقت دارند.
- در زبان برنامهنویسی پایتون، از فرآیندهای خودکار مدیریت حافظه به نام Garbage Collection پشتیبانی میشود.
- رایگان بودن زبان پایتون، یکی از ویژگی مهم آن محسوب میشود. استفاده از زبان پایتون برای تولید برنامههای کاربردی (حتی برنامههای کاربردی تجاری) و یا توزیع کدهای برنامههای نوشته شده به این زبان در سطح اینترنت رایگان است.
- زبان پایتون، انتخاب بسیار مناسبی برای توسعه «برنامههای کاربردی تحت شبکه» (Network Applications) است؛ به عبارت دیگر، در کاربردهای شبکهای که نیاز به بهکارگیری پروتکلهای مختلفی جهت توسعه برنامهکاربردی احساس میشود، بهتر است که از زبان پایتون استفاده شود.
- زبان برنامهنویسی پایتون، زبان بسیار ایدهآلی برای «نمونهسازی» (Prototyping) و «تست کردن» (Testing) برنامههای کاربردی توسعه داده شده و یا اضافه کردن قابلیتهای جدید به نرمافزارهای از پیش توسعه داده شده به شمار میآید. دلیل این امر، چرخه بسیار سریع توسعه برنامههای کاربردی در زبان پایتون است.
- زبان پایتون از جمله پلتفرمهای برنامهنویسی منبع باز است و به شکل منظم و ساختیافتهای توسط تیمهای توسعه «بنیاد نرمافزاری پایتون» (Python Software Foundation) و جامعه برنامهنویسی پشتیبانی میشود.
- زبان برنامهنویسی پایتون، با برخوردار بودن از کتابخانههایی نظیر Keras ،TensorFlow ،SciKit-Learn و سایر موارد زبان مرجع برای کاربردهای هوش مصنوعی و یادگیری ماشین محسوب میشود.
معایب زبان برنامهنویسی پایتون
در ادامه، معایب مهم زبان پایتون مورد بررسی قرار میگیرد:
- در کاربردهایی که محاسبات بسیار پیچیدهای در آنها انجام میشود و سرعت اجرای برنامهکاربردی و عملکرد بهینه آنها در سناربوهای جهان واقعی از اولویت بسیار بالایی برخوردار است، توصیه میشود از زبانهای برنامهنویسی دیگری غیر از پایتون برای کد نویسی استفاده شود. به بیان سادهتر، زبان برنامهنویسی پایتون، برای توسعه پلتفرمهای «محاسبات همراه» (Mobile Computing) مناسب نیست.
- سرعت اجرای کدها در زبان پایتون، به دلیل استفاده از مفسر، پایینتر از دیگر زبانهای برنامهنویسی، به ویژه زبانهای مبتنی بر کامپایلر است.
- زبان پایتون، روی پردازندههای چند هستهای و سیستمهای چند پردازندهای خوب عمل نمیکند.
- یکی از مهمترین نقاط ضعف زبان پایتون، لایه دسترسی به «پایگاه داده» (Database) است.
- نخکشی یا Threading تکنیکی است که در برخی از زبانهای برنامهنویسی مفسر، جهت افزایش سرعت اجرای کدها استفاده میشود. به دلیل وجود «قفل مفسر سراسری» (Global Interpreter Lock) در مفسر پایتون، قابلیت نخکشی یا Threading این زبان بسیار ضعیف است.
- زبان برنامهنویسی پایتون از ابزارهای لازم برای پیادهسازی و توسعه «نرمافزارهای سازمانی» (Enterprise Solutions) برخوردار نیست.
- به دلیل ماهیت پویا بودن زبان پایتون و بر خلاف زبانهای برنامهنویسی کامپایلری، خطاها در زمان اجرا نمایان خواهند شد (Run-time Errors).
زبان برنامهنویسی متلب
زبان برنامهنویسی متلب، یک زبان برنامهنویسی «با عملکرد بالا» (High Performance) برای «محاسبات فنی» (Technical Computing) و علمی محسوب میشود. یکی از ویژگیهای مهم زبان برنامهنویسی متلب، یکپارچهسازی «محاسبات» (Computation)، «مصورسازی» (Visualization) و برنامهنویسی در یک محیط «آسان برای استفاده» (Easy-to-Use) است؛ در این محیط، مسائل و راه حلهای آنها به وسیله مفاهیم و نشانهگذاریهای آشنای ریاضیاتی نمایش داده میشوند.
مهمترین کاربردهای زبان برنامهنویسی متلب عبارتست از:
- کاربردهای مرتبط با ریاضیات و محاسبات.
- تولید و توسعه الگوریتم.
- مدلسازی، شبینهسازی و «نمونهسازی» (Prototyping).
- تحلیل داده، کاوش داده و مصورسازی داده.
- تولید نمودارهای گرافیکی علمی و مهندسی.
- تولید و توسعه برنامههای کاربردی (نظیر ساختن «واسط گرافیکی کاربری» (Graphical User Interfaces | GUIs)).
متلب یک «سیستم تعاملی» (Interactive Systems) محسوب میشود که ساختار دادهای پایهای آن «آرایه» (Array) است. چنین ساختار دادهای در متلب، این زبان را قادر میسازد تا بسیاری از مسائل محاسباتی، به ویژه مسائلی که در فرم «ماتریس» (Matrix) یا «بردار» (Vector) هستند را در مدت بسیار کوتاهتری نسبت به زبانهای برنامهنویسی دیگر نظیر C یا Fortran حل کند؛ این دسته از زبانها، «زبانهای اسکالر غیرتعاملی» (Scalar Non-Interactive Languages) هستند.
زبان برنامهنویسی متلب، در ابتدا برای ایجاد سهولت دسترسی به برنامههای محاسبات ماتریسی نظیر EISPACK و LINPACK پدید آمد (دو کتابخانه معروف برای محاسبات ماتریسی). در چند سال اخیر، متلب به زبان مرجع برای آموزش مسائل ریاضی، مهندسی و علمی تبدیل شده است. همچنین زبان متلب، ابزار مورد علاقه صنایع، سازمانها و شرکتهای تجاری برای تحقیق، توسعه و تحلیل علمی محسوب میشود.
از زبان متلب در حوزههای کاربردی مختلفی نظیر تحلیل و مصورسازی داده، پیادهسازی سیستمهای محاسبات علمی، پردازش تصویر و سیگنال، مدلسازی چند دامنه و پویا، «بهینهسازی» (Optimization)، سیستمهای کنترل و سایر موارد استفاده میشود. بنابراین، به کسانی که به دنبال حرفه و آینده شغلی مناسب در حوزه تحقیق، توسعه و پیادهسازی سیستمهای محاسبات علمی دقیق هستند، توصیه میشود که زبان متلب را، از میان زبانهای پایتون یا متلب یاد بگیرند.
زبان برنامهنویسی متلب، از مجموعهای از «ابزارهای کاربرد-ویژه» (Application-Specific) به نام «تولباکس» (Toolbox) تشکیل شده است. تولباکسها جذابترین ویژگیهای زبان برنامهنویسی متلب برای برنامهنویسان و توسعهدهنگان محسوب میشوند که امکان استفاده از فناوریهایی نظیر «یادگیری ماشین» (Machine Learning) را در برنامههای کاربردی فراهم میکنند.
تولباکسها، مجموعهای جامع از توابع متلب هستند (فایلهای M.) که اجازه حل کلاس خاصی از مسائل را به کاربران و برنامهنویسان میدهند. مهمترین تولباکسهای توسعه داده شده برای زبان متلب عبارتند از:
- تولباکس پردازش سیگنال.
- تولباکس سیستمهای کنترل.
- تولباکس «شبکههای عصبی مصنوعی» (Artificial Neural Networks).
- تولباکس «بهینهسازی» (Optimization).
- تولباکس «منطق فازی» (Fuzzy Logic).
- تولباکس شبیهسازی.
- تولباکس «موجکها» (Wavelets).
- تولباکس «تحلیل متن» (Text Analytics).
- تولباکس یادگیری ماشین.
سیستم زبان برنامهنویسی متلب از پنج بخش اصلی تشکیل شده است:
زبان متلب
یک زبان سطح بالا برای انجام محاسبات مبتنی بر ماتریس و آرایه است که ویژگیهایی نظیر برنامهنویسی تابعی، ساختارهای دادهای، پردازش ورودی و خروجی و برنامهنویسی شیءگرا را در اختیار برنامهنویس و توسعهدهنده قرار میدهد. زبان متلب، اجازه توسعه برنامهها در مقیاس کوچک (توسعه سریع برنامههای کوچک) و مقیاس بزرگ (توسعه برنامههای کاربردی بزرگ و پیچیده) را فراهم میکند.
محیط کاری متلب
مجموعهای از ابزارها و امکاناتی است که در اختیار برنامهنویس یا کاربر متلب قرار گرفته شده است؛ از جمله این ابزارها، میتوان به قابلیت مدیریت متغیرهای «فضای کاری» (Workspace) در متلب و «ورود» (Import) و «صدور» (Export) دادهها اشاره کرد. همچنین، ابزارهای توسعه، مدیریت و «اشکالزدایی» (Debugging) برنامههای متلب، از جمله امکانات موجود در محیط کاری متلب هستند.
سیستم گرافیکی و ترسیم داده متلب
سیستم گرافیکی و ترسیم داده متلب شامل دستورات سطح بالایی است که امکان مصورسازی دوبُعدی و سهبُعدی دادهها، پردازش تصویر، انیمیشن و ترسیم نمودارها را برای کاربران فراهم میکنند. همچنین، دستورات سطح پایینی نیز وجود دارند که امکان سفارشیسازی ظاهر نمودارها و تولید واسط گرافیکی کاربری برای برنامههای کاربردی را فراهم میکنند.
کتابخانه توابع ریاضیاتی متلب
در این کتابخانه، مجموعه گستردهای از الگوریتمهای محاسباتی پیشرفته نظیر توابع معکوس ماتریس، مقادیر ویژه ماتریس، توابع Bessel و «تبدیل فوریه سریع» (Fast Fourier Transforms) و الگوریتمهای محاسباتی ساده نظیر جمع، سینوس، کسینوس و سایر موارد تعریف شده است.
واسط برنامهنویسی کاربردی متلب
کتابخانهای است که به برنامهنویس و توسعهدهنده اجازه میدهد تا برنامههایی به زبان C یا Fortran (و سایر موارد) بنویسند. این برنامهها قادرند با زبان متلب تعامل داشته باشند. در این کتابخانه، امکاناتی برای فراخوانی «روالها» (Routines) از متلب (که به آن پیوند پویا (Dynamic Linking) گفته میشود)، فراخوانی متلب به عنوان یک موتور محاسباتی و خواندن یا نوشتن فایلهای MAT. لحاظ شده است.
مزایای زبان برنامهنویسی متلب
در ادامه، مهمترین مزایای متلب جهت توسعه برنامههای کاربردی مورد بررسی قرار میگیرد:
- برخلاف دیگر زبانهای برنامهنویسی «منبع باز» (Open Source)، زبان متلب به صورت انحصاری توسط شرکت MathWorks توسعه داده شده است. تمامی کتابخانهها و تولباکسهای پیادهسازی شده در متلب، توسط برنامهنویسان حرفهای و تیمهای توسعه با تجربه توسعه یافتهاند. از سوی دیگر، امکانات و قابلیتهای متلب، به طور پیوسته توسط مهندسان شرکت MathWorks آزمون و ارزیابی میشوند تا عملکرد بهینه آنها در تمامی شرایط تضمین شود. همچنین، هر شش ماه یکبار نسخه جدیدی از نرمافزار متلب عرضه میشود. بنابراین، پشتیبانی ارائه شده توسط شرکت MathWorks از نرمافزار متلب، یکی از نقاط قوت این زبان برنامهنویسی محسوب میشود.
- مجموعه کاملی از مستندات برنامهنویسی برای توابع، کتابخانهها، تولباکسها و تمامی قابلیتهای ارائه شده در متلب، برای کاربران و برنامهنویسان ارائه شده است؛ به طوری که به اعتقاد بسیاری از برنامهنویسان و توسعهدهندگان، بهترین منبع آموزشی زبان برنامهنویسی متلب، مستندات ارائه شده توسط MathWorks در نرمافزار متلب است.
- تعداد کاربران متعهد به استفاده و برنامهنویسی در متلب بسیار زیاد است. بسیاری از این کاربران، یا در دانشگاهها مشغول به تحصیل و پژوهش هستند و یا در شرکتهایی فعالیت دارند که بودجه کافی برای خرید حق استفاده از متلب را دارند.
- یادگیری زبان متلب برای برنامهنویسان مبتدی نسبتا راحت است؛ از این جهت که، هنگام خرید متلب، تمامی ابزارها و کتابخانههای لازم برای کد نویسی و توسعه برنامههای کاربردی در اختیار کاربر قرار داده میشود. در حالی که در زبان پایتون، برای دسترسی به قابلیتهایی فراتر از امکانات کتابخانههای استاندارد پایتون، نیاز است تا کتابخانههای اضافی توسط کاربر نصب و آمادهسازی شوند؛ چنین کاری ممکن است برای برنامهنویسان مبتدی سخت باشد.
- یکی از تولباکسهای کلیدی متلب، Simulink نام دارد؛ کیفیت و امکانات ارائه شده توسط این تولباکس به قدری بالاست که تاکنون جایگزین مناسبی برای آن در دیگر زبانهای برنامهنویسی ارائه نشده است.
- توابع و کتابخانههای استاندارد متلب، به ویژه برای محاسبات علمی و محاسبات مبتنی بر ماتریس و آرایه، بسیار جامع هستند.
- زبان برنامهنویسی متلب، برای مقاصد پیادهسازی سیستمهای شبیهسازی، محاسبات علمی، محاسبات مبتنی بر ماتریس و آرایه و سایر موارد، در میان دیگر زبانهای برنامهنویسی بیهمتا است.
- مهمترین زبان برنامهنویسی برای محققین شاغل در حوزه پردازش سیگنال محسوب میشود.
معایب زبان برنامهنویسی متلب
در ادامه، معایب مهم زبان متلب مورد بررسی قرار میگیرد:
- یکی از مهمترین معایب زبان برنامهنویسی متلب، هزینهبر بودن آن است. علاوه بر هزینه ابتدایی برای خرید نرمافزار متلب، برای استفاده از ماژولها، بستهها و تولباکسهای اضافی، کاربران و برنامهنویسان باید هزینههای مازاد پرداخت کنند. معمولا تنها مؤسسات آموزشی و شرکتهای بزرگ قادر به خرید مجوز استفاده از نرمافزار متلب و تولباکسهای آن هستند.
- مشکل دیگر زبان متلب، تبدیل کدهای آن به کدهای زبانهای برنامهنویسی دیگر است (Cross Compiling). این کار معمولا بسیار مشکل است و رفع خطاهای احتمالی، دانش بسیار عمیقی از زبان برنامهنویسی متلب را میطلبد.
- در کاربردهایی که مسأله توسط نمایش ماتریسی و عددی قابل مدلسازی نباشد و یا مدلسازی مسأله در قالب ماتریسی و عددی بسیار سخت باشد، استفاده از زبان برنامهنویسی متلب برای حل مسأله چالش برانگیز خواهد بود.
- فاقد اکوسیستم پویا و منبع باز جهت توسعه قابلیتهای جدید یا بهبود امکانات موجود است.
- الگوریتمهای توسعه داده شده در زبان برنامهنویسی متلب، الگوریتمهای انحصاری پیادهسازی شده توسط شرکت MathWorks هستند. به عبارت دیگر، کاربران قادر به مشاهده و تست کدهای منبع توابع و کتابخانههای متلب نیستند.
- «قابلیت حمل یا انتقال» (Portability) زبان متلب، به دلیل محدودیتهای اعمال شده توسط شرکت MathWorks، پایینتر از پایتون است.
- طبیعت انحصاری بودن زبان متلب، کار برنامهنویسان و توسعهدهندگان شخص ثالث را برای برای گسترش قابلیتها و امکانات متلب مشکل میکند.
درآمد سالانه و آینده شغلی برنامهنویسان کدام زبان بهتر است، پایتون یا متلب؟
با توجه به گستردگی زبانهای برنامهنویسی، انتخاب یکی از این زبانهای برنامهنویسی پایتون یا متلب برای یادگیری قواعد کد نویسی و یا برنامهنویسی یک پروژهنرمافزاری، معمولا بسیار سخت است. مقایسه آمار مرتبط با درآمد سالانه برنامهنویسان پایتون و متلب و همچنین بررسی آینده شغلی هر کدام از این زبانها نشان میدهد که دو فاکتور درآمد سالانه و آینده شغلی، عوامل بسیار مهمی در تشویق کاربران و برنامهنویسان مبتدی به یادگیری یکی از این زبانها محسوب میشوند. از سوی دیگر، یکی از فاکتورهایی که برنامهنویسان و توسعهدهندگان حرفهای، هنگام مهاجرت از زبانهای دیگر به یکی از زبانهای پایتون یا متلب در نظر میگیرند، درآمد سالانه برنامهنویسان این دو زبان و همچنین آینده شغلی آنها است.
بنابراین، برای مقایسه موقعیت شغلی هر کدام از زبانهای پایتون یا متلب و متوسط درآمد سالانه برنامهنویسان آنها، زبانهای متلب و پایتون در دو مرحله مورد بررسی قرار گرفته میشوند:
- در مرحله اول، متوسط درآمد سالانه برنامهنویسان زبانهای پایتون و متلب مورد بررسی قرار گرفته میشود.
- در مرحله بعد، بازار کاری هر دو زبان بررسی میشود تا میزان تقاضا (در بازار کار) برای برنامهنویسان هر کدام از زبانهای پایتون یا متلب مشخص شود.
درآمد مورد انتظار برنامهنویسان پایتون و متلب
در چند سال اخیر، و بر اساس آمار ارائه شده از منابع مختلف، زبان پایتون رشد بیسابقهای را تجربه کرده است؛ به شکلی که هم اکنون، یکی از محبوبترین زبانهای برنامهنویسی در میان توسعهدهندگان و جامعه برنامهنویسی است. از جمله دلایل محبوبیت بالای زبان پایتون در میان برنامهنویسان و توسعهدهندگان، میتوان به مواردی نظیر گستردگی کتابخانه های برنامهنویسی و طبیعت همه منظوره بودن زبان پایتون اشاره کرد. این دلایل سبب شدهاند تا پایتون، به انتخابی ایدهآل برای کد نویسی در دامنه وسیعی از کاربردها نظیر یادگیری ماشین، هوش مصنوعی، علم داده، توسعه وب و سایر موارد تبدیل شود.
- مقاله پیشنهادی: طراحی سایت با پایتون — از صفر تا صد و پروژه محور
با استناد به گزارشهای منتشر شده توسط وبسایت Stack Overflow، توسعه دهندگان پایتون در سطح جهان، به طور میانگین چیزی حدود 56 هزار دلار در سال درآمد دارند. با این حال، متوسط درآمد سالانه توسعهدهندگان پایتون در کشور آمریکا به مراتب بالاتر از متوسط جهانی گزارش شده است. با توجه به گزارشات منتشر شده توسط وبسایت Indeed، متوسط درآمد سالانه توسعهدهندگان پایتون در کشور آمریکا، چیزی حدود 114 هزار دلار آمریکا تخمین زده شده است.
با توجه به آمار به دست آمده از وبسایت Glassdoor، بازار شغلی زبان پایتون، یکی از رقابتیترین و فعالترین بازارهای شغلی از نظر متوسط درآمد سالانه محسوب میشود. با استناد به آمار وبسایت Glassdoor، متوسط درآمد سالانه یک برنامهنویس پایتون چیزی در حدود 92 هزار دلار در سال گزارش شده است. با این حال، متوسط درآمد سالانه برنامهنویسانی که در برخی از حوزههای خاص، نظیر یادگیری ماشین، کلان داده و علم داده، فعالیت دارند، به رقم 137 هزار دلار در سال نیز میرسد.
تقاضای بالا برای برنامهنویسان پایتون در شرکتهایی نظیر گوگل، فیسبوک، Dropbox و سایر موارد، سبب شده است تا برنامهنویسان و توسعهدهندگان پایتون از میانگین حقوق پایه و پیشینه حقوق بالاتری نسبت به برخی از زبانهای برنامهنویسی پرتقاضا نظیر جاوا، سیشارپ و جاوا اسکریپت برخوردار باشند. با این حال، درآمد برنامهنویسان پایتون، بسته به شهرهایی که برنامهنویسان در آن استخدام میشوند، متفاوت خواهد بود.
موقعیتهای شغلی برنامهنویسان و توسعهدهندگان متلب، با توجه به دامنه کاربردی محدود این زبان، نسبت به زبان پایتون کمتر است. با این حال، با استناد به گزارشات منتشر شده توسط وبسایت محبوب Indeed، متوسط درآمد سالانه گزارش شده برای این دسته از برنامهنویسان بسیار بالا است.
با توجه به گزارشهای منتشر شده توسط وبسایت Stack Overflow، دانشمندان داده مسلط به متلب، به طور میانگین چیزی حدود 86 هزار دلار در سال درآمد دارند. همچنین، بیشینه درآمد سالانه این دسته از برنامهنویسان، حداقل 110 هزار دلار در سال گرازش شده است. برنامهنویسان سیستمی مسلط به زبان متلب نیز، به طور میانگین چیزی حدود 84 هزار دلار در سال درآمد دارند. همچنین، بیشینه درآمد سالانه این دسته از برنامهنویسان، حداقل 106 هزار دلار در سال گرازش شده است. در نهایت، درآمد متوسط سالانه توسعه دهندگان Full-Stack مسلط به زبان متلب، چیزی حدود 84 هزار دلار در سال گزارش شده است. بیشینه درآمد سالانه این دسته از برنامهنویسان نیز، حداقل 116 هزار دلار در سال گزارش شده است. برای تمامی موارد فوق، حداقل سابقه کاری برابر با پنج سال در نظر گرفته شده است.
اطلاعات نمایش داده شده در شکل بالا نیز توسط وبسایت ZipRecruiter جمعآوری شده است. اطلاعاتی که تا اینجا نمایش داده شده است نشان میدهد که بازار شغلی زبان متلب، یک بازار رقابتی و فعال از نظر متوسط درآمد سالانه محسوب میشود و از این حیث، توانایی رقابت با زبان پایتون را دارد. با این حال، همانطور که پیش از این نیز اشاره شد، با توجه به دامنه کاربردی محدود این زبان، تعداد موقعیتهای شغلی آن از زبان پایتون کمتر است.
تقاضا برای برنامهنویسان کدام زبان بیشتر است، پایتون یا متلب؟
هماکنون استفاده از زبان پایتون در صنعت و فناوری، به شکل بیسابقهای در حال رشد است و بسیاری از شرکتهای بزرگ فعال در حوزه فناوری از پایتون برای توسعه برنامههای کاربردی و فناوریهای نوآورانه استفاده میکنند.
همانطور که پیش از این نیز اشاره شد، زبان پایتون به دلیل ویژگیهایی نظیر همه منظوره بودن، سادگی یادگیری و قابلیت به کارگیری آن در دامنه وسیعی از کاربردها نظیر توسعه تحت وب، هوش مصنوعی، یادگیری ماشین، تحلیل داده و سایر موارد، یکی از پرتقاضاترین زبانهای برنامه نویسی محسوب میشود.
با استناد به آمار منتشر شده از وبسایت معتبر Indeed، در ماه سپتامبر 2019، چیزی حدود 76 هزار فرصت شغلی مرتبط با زبان برنامهنویسی پایتون لیست شده است.
تعداد شغلهای لیست شده | 76275 شغل مرتبط با زبان برنامهنویسی پایتون | ||||
نوع شغلهای لیست شده و تعداد | |||||
تمام وقت | قراردادی | کارآموزی | موقت | پاره وقت | کمیسیونی |
72354 | 2492 | 2269 | 1379 | 1186 | 268 |
تعداد شغلها بر اساس متوسط درآمد سالانه | |||||
بیش از 80 هزار | بیش از 95 هزار | بیش از 105 هزار | بیش از 115 هزار | بیش از 130 هزار | بیش از 140 هزار |
63473 | 52771 | 42257 | 30390 | 13891 | 1289 |
مکانهای پرتقاضا و تعداد شغلهای لیست شده در آنها | |||||
نیویورک | سیاتل | سانفرانسیسکو | شیکاگو | بوستون | آستین (تگزاس) |
4913 | 4289 | 3380 | 1981 | 1930 | 1849 |
مهمترین شرکتهای متقاضی و تعداد شغلهای لیست شده در آنها | |||||
آمازون | Deloitte | اپل | Booz Allen Hamilton | اوراکل | گوگل |
4662 | 915 | 900 | 824 | 719 | 633 |
بنابراین، از نظر موقعیتهای شغلی، زبان پایتون یکی از بهترین زبانهای برنامهنویسی جهان در حال حاضر است.
زبان متلب، زبان مرجع تولید برنامههای علمی محسوب میشود. از آنجایی که بسیاری از شرکتهای بزرگ فناوری، برنامهنویسیهای مرتبط با تحقیق ، توسعه و پیادهسازی سیستمهای محاسبات علمی را با استفاده از زبان برنامهنویسی متلب انجام میدهند، انتظار میرود که روند استخدام برنامهنویسان و توسعهدهنگان متلب تا سالهای آینده نیز ادامه پیدا کند.
با استناد به آمار منتشر شده از وبسایت معتبر Indeed، در ماه سپتامبر 2019، چیزی حدود 12 هزار فرصت شغلی مرتبط با زبان برنامهنویسی متلب لیست شده است.
تعداد شغلهای لیست شده | 12191 شغل مرتبط با زبان برنامهنویسی متلب | ||||
نوع شغلهای لیست شده و تعداد | |||||
تمام وقت | قراردادی | کارآموزی | موقت | پاره وقت | کمیسیونی |
11409 | 219 | 754 | 405 | 270 | 53 |
تعداد شغلها بر اساس متوسط درآمد سالانه | |||||
بیش از 70 هزار | بیش از 85 هزار | بیش از 95 هزار | بیش از 100 هزار | بیش از 115 هزار | بیش از 125 هزار |
9366 | 7509 | 5669 | 4648 | 2059 | 318 |
مکانهای پرتقاضا و تعداد شغلهای لیست شده در آنها | |||||
آلاباما | نیویورک | سیاتل | سان دیگو | کالیفرنیا | ماساچوست |
335 | 308 | 262 | 228 | 205 | 196 |
مهمترین شرکتهای متقاضی و تعداد شغلهای لیست شده در آنها | |||||
Raytheon | Lockheed Martin | Northrop Grumman | Amazon | MathWorks | اپل |
477 | 450 | 404 | 288 | 213 | 183 |
بنابراین همانطور که در جداول بالا نیز قابل مشاهده است، فرصتهای شغلی لیست شده برای زبان پایتون، به مراتب بیشتر از زبان متلب است. در نتیجه، در حال حاضر تقاضا برای برنامهنویسان پایتون بیشتر از برنامهنویسان متلب است. دلیل این امر، محدودتر بودن دامنه کاربردی زبان متلب است. با این حال، انتخاب هر یک از زبانهای پایتون یا متلب برای یادگیری کد نویسی و یا توسعه برنامههای کاربردی، آینده شغلی موفقی را برای برنامهنویسان و توسعهدهندگان رقم خواهد زد.
مقایسه محبوبیت پایتون و متلب
شاخص TIOBE، یکی از مهمترین و شناخته شدهترین شاخصهای رتبهبندی زبانهای برنامهنویسی دنیا محسوب میشود. «شاخص جامعه برنامهنویسی» (Programming Community Index)، توسط وبسایت TIOBE تهیه شده است و به طور منظم و بر اساس اطلاعات جمعآوری شده در هر ماه، بهروزرسانی میشود. شاخص جامعه برنامهنویسی یا TIOBE، محبوبیت زبانهای برنامهنویسی را در میان جامعه برنامهنویسی نشان میدهد. این شاخص، اطلاعات لازم برای سنجش محبوبیت زبانهای برنامهنویسی را از منابع مختلفی نظیر نظرات جامعه برنامهنویسان خبره در سطح جهان، آموزشهای آنلاین موجود از زبانهای برنامهنویسی و دیگر منابع اینترنتی جمعآوری میکند. سپس، اطلاعات جمعآوری شده تحلیل و محبوبیت نسبی زبانهای برنامهنویسی سنجیده میشوند. در نهایت، زبانهای برنامهنویسی بر اساس معیارهای تعریف شده امتیازدهی و بر اساس محبوبیت رتبهبندی میشوند.
در شاخص جامعه برنامهنویسی یا TIOBE، علاوه بر منابع اطلاعاتی ذکر شده، از دادههای مرتبط با موتورهای جستجوی محبوب نظیر گوگل، یاهو، بینگ، ویکیپدیا، آمازون، یوتیوب و سایر موارد نیز برای سنجش میزان محبوبیت زبانهای برنامهنویسی و رتبهبندی آنها استفاده میشود. شایان توجه است که این شاخص، بهترین زبانهای برنامهنویسی را رتبهبندی نمیکند، بلکه فقط محبوبیت زبانهای برنامهنویسی را بر اساس نظرات برنامهنویسان و اطلاعات عمومی موجود در سطح اینترنت مشخص میکند.
با بررسی اجمالی جدول بالا مشخص میشود که محبوبیت زبان برنامهنویسی پایتون بسیار بالاتر از زبان متلب است. در چند سال اخیر، محبوبیت زبان برنامهنویسی پایتون روند رو به رشدی را تجربه کرده است و به یکی از زبانهای پرطرفدار در میان توسعهدهندگان و جامعه برنامهنویسان دنیا تبدیل شده است.
همانطور که در جدول و نمودار بالا مشخص است، محبوبیت زبان پایتون از ابتدای سال 2014 تا به امروز روند رو به رشدی به خود گرفته است. نرخ رشد زبان پایتون در چند سال اخیر به قدری بوده است که زبان پایتون را، از نظر محبوبیت، در یک قدمی زبانهای معروف و شناخته شدهای نظیر C و جاوا قرار داده است. در سمت مقابل، محبوبیت زبان متلب در چند سال اخیر، به ویژه در دو سال اخیر، روند نزولی به خود گرفته است.
برای توجیه چنین آماری، دو دلیل عمده را میتوان متصور شد:
- همانطور که پیش از این نیز اشاره شد، زبان متلب دامنه کاربردی محدودتری نسبت به زبانهای چند منظوره نظیر پایتون دارد. این عامل سبب شده است تا تقاضا برای برنامهنویسان متلب و به تبع آن، محبوبیت این زبان کاهش پیدا کند. همچنین، روند رو به رشد استخدام برنامهنویسان Full-Stack در چند سال اخیر سبب شده است تا تقاضای صنایع، سازمانها و شرکتهای تجاری برای این دسته از برنامهنویسان به شدت افزایش یابد (تقاضا برای برنامهنویسان Full-Stack مسلط به زبانهای همه منظوره، به مراتب بیشتر از زبانهای برنامهنویسی با دامنه کاربردی محدود است).
- پیش از اینکه ساختارهای دادهای زبان پایتون به بلوغ کنونی خود برسند و کتابخانههای گسترده و قدرتمندی برای یادگیری ماشین و هوش مصنوعی معرفی شوند، زبان برنامهنویسی متلب به عنوان زبان مرجع برای توسعه برنامههای کاربردی در حوزههای یادگیری ماشین، هوش مصنوعی و محاسبات علمی محسوب میشد. با اینکه زبان متلب هنوز به عنوان زبان مرجع برای توسعه سیستمهای محاسبات علمی محسوب میشود، اما بسیاری از برنامهنویسان فعال در حوزه یادگیری ماشین و هوش مصنوعی به سمت استفاده از زبان پایتون جهت کد نویسی سیستمهای هوشمند مهاجرت کردهاند.
جدول زیر، رتبه محبوبیت زبانهای برنامهنویسی را بر اساس شاخص IEEE Spectrum نشان میدهد. این شاخص، زبانهای برنامهنویسی را براساس معیارهای مرتبط با حوزه مهندسی کامپیوتر، برق و الکترونیک میسنجد. معیارهایی نظیر محبوبیت زبانهای برنامهنویسی در میان جامعه برنامهنویسان سیستمهای هوش مصنوعی، یادگیری ماشین و محاسبات مهندسی و تعداد پروژههای مهندسی انجام شده توسط زبانهای مختلف، از جمله معیارهایی هستند که برای رتبهبندی محبوبیت زبانهای برنامهنویسی مورد استفاده قرار گرفته میشوند.
در این رتبهبندی نیز زبان پایتون توانسته است رتبه اول را به خود اختصاص دهد. نکته قابل توجه در این جدول، قرار گرفتن زبان متلب در رتبه 8 است؛ بنا بر اظهار نظر گردآورندگان و پدید آورندگان این شاخص، اهمیت بالای زبان متلب در «مهندسی سختافزار» (Hardware Engineering)، دلیل رتبه بالای متلب در این جدول بوده است.
جدول زیر، محبوبترین زبانهای برنامهنویسی را بر اساس شاخص PYPL نشان میدهد.
نمودار زیر نیز، نرخ رشد محبوبیت زبانهای برنامهنویسی مختلف را با توجه به شاخص PYPL نشان میدهد. همانطور که در جدول بالا و شکل زیر مشهود است، نه تنها زبان پایتون، به عنوان محبوبترین زبان برنامهنویسی شناخته شده است، بلکه نرخ رشد به مراتب بالاتری را نسبت به زبان متلب به خود اختصاص داده است.
مقایسه ساختاری پایتون و متلب
در این بخش، دو زبان پایتون و متلب بر اساس ویژگیهای ساختاری نظیر قواعد دستوری و سایر مواد مقایسه میشوند. این مقایسه با هدف تسهیل کردن فرایند انتخاب یکی از زبانهای پایتون یا متلب برای کاربران (جهت یادگیری قواعد کد نویسی و یا توسعه برنامههای کاربردی)، به ویژه برای برنامهنویسان مبتدی و یا توسعهدهندگانی که قصد مهاجرت به یکی از این زبانها را دارند، انجام میشود..
مقایسه پایتون و متلب برا اساس قواعد دستوری و امکانات برنامهنویسی
در این بخش، مقایسه میان پایتون و متلب، بر اساس تفاوتهای موجود میان قواعد دستوری آنها در تعریف توابع، نوعهای دادهای و سایر موارد بررسی قرار میگیرد. مقایسه امکانات و قابلیتهای مرتبط با قواعد دستوری و روشهای کد نویسی در زبانهای پایتون و متلب، به برنامهنویسان اجازه میدهد تا به شکل هوشمندانهتری، یکی از زبانهای پایتون یا متلب را برای یادگیری قواعد کد نویسی (و یا توسعه برنامههای کاربردی) انتخاب کنند.
پیش از اینکه به مقایسه ساختار پایتون و متلب بپردازیم، ذکر این نکته خالی از لطف نیست که زبان برنامهنویسی متلب، یکی از محیطهای برنامهنویسی قدرتمند برای حل مسائل عددی به شمار میآید. برای حل مجموعهای از مسائل خاص، زبان متلب ابزار بسیار قدرتمندی خواهد بود. با این حال، برای بسیاری از مسائل دیگر، نمیتوان از زبان متلب استفاده کرد.
به عنوان نمونه، نمیتوان از زبان متلب برای طراحی و توسعه یک واسط کاربری گرافیکی بسیار پیچیده استفاده کرد. زبان متلب برای کد نویسی موتور وبلاگها و مدیریت محتوای آنها مناسب نیست. از زبان متلب نمیتوان برای نوشتن یک «سرویس تحت وب» (Web Service) استفاده کرد. با این حال، طبیعت همه منظوره بودن زبان پایتون، به توسعهدهندگان و برنامهنویسان مسلط به این زبان اجازه میدهد تا بتوانند برای برنامهنویسی دامنه وسیعی از برنامههای کاربردی از پایتون استفاده کنند.
یکی از نقاط قوت اصلی زبان برنامهنویسی متلب، موتور تعریف، دستکاری و نمایش مبتنی بر ماتریس آن است. بیشتر دادههایی که برای مدلسازی در متلب مورد استفاده قرار میگیرند، دادههای ماتریسی هستند. زبان متلب، مجموعه کاملی از توابع را برای دستکاری و مصورسازی نوعهای داده ماتریس در اختیار کاربران و برنامهنویسان قرار میدهد. کتابخانههای استاندارد پایتون، امکانات مناسبی برای تعریف، دستکاری و نمایش نوعهای داده ماتریس ندارد. با این حال، کتابخانههای برنامهنویسی (معادل تولباکسها در متلب) بسیار قدرتمند برای زبان پایتون عرضه شدهاند که امکان تعریف، دستکاری و نمایش دادههای ماتریسی را برای کاربران و برنامهنویسان پایتون فراهم میکنند:
- کتابخانه Numpy (موتور تعریف دادههای ماتریسی و انجام عملیات روی آنها)
- کتابخانه Scipy (ابزار لازم برای دستکاری ماتریسی)
- کتابخانه Matplotlib (رسم نمودار و نمایش دادههای ماتریسی)
در ادامه، برخی از تفاوتهای ساختاری میان متلب و پایتون مورد بررسی قرار میگیرد:
- همانند متلب، زبان پایتون یک زبان مفسری است. به عبارت دیگر، در این زبانها «کامپایلر» (Compiler) وجود ندارد.
- کدهای زبان پایتون روی هر سیستمی که مفسر پایتون در آن نصب شده باشد قابل اجرا است. در حالی که کدهای نوشته شده به زبان متلب، تنها در صورتی نرمافزار گران قیمت متلب روی سیستم نصب شده باشد قابل اجرا خواهند بود.
- زبان پایتون مانند زبان متلب، از نوعهای داده پویا استفاده میکند. به عبارت دیگر، هر متغیر قادر است مقادیر مرتبط با هر نوع داده را در خود نگهداری کند:
1 # Python
2 a = 5 # a number
3 a = [1, 2, 3] # a list
4 a = 'text' # a string
1 % Python
2 a = 5 % a number
3 a = [1, 2, 3] % a list
4 a = 'text' % a string
- برخلاف متلب که یک زبان از نوع Weakly Typed است، زبان پایتون، جزء زبانهای Strongly Typed محسوب میشود؛ یعنی، به عنوان نمونه، کاربر قادر به جمع کردن یک مقدار صحیح با یک مقدار رشته نخواهد بود.
1 % Matlab
2 a = 'text'
3 b = a + 5 % [121 106 125 121]
1 # Python
2 a = 'text'
3 b = a + 5 # TypeError: Can't convert 'int' object to str implicitly
- بر خلاف زبان متلب، در پایتون هر فایل Py. میتواند برای تعریف تعداد دلخواهی از توابع مورد استفاده قرار بگیرد. در حالی که در متلب، هر فایل M. تنها برای تعریف یک تابع مورد استفاده قرار میگیرد.
- زمان لازم برای شروع اولیه و راهاندازی زبان برنامهنویسی متلب بسیار زیاد است؛ در حالی که راهاندازی زبان پایتون بسیار سریع است و زمان کمی میطلبد.
- کدهای پایتون به صورت رایگان در اختیار عموم کاربران، برنامهنویسان و توسعهدهندگان قرار گرفته شده است. در حالی که کدهای توابع و قابلیتهای تعبیه شده در متلب، در اختیار کاربران، برنامهنویسان و توسعهدهندگان این زبان قرار گرفته نشده است.
- تعریف توابع در دو زبان متلب و پایتون کاملا متفاوت از یکدیگر است. در پایتون برای تعریف تابع از کلمه کلیدی def استفاده میشود، در حالی که در متلب از کلمه کلیدی function برای چنین کاری استفاده میشود. در پایتون، از کلمه کلیدی return برای نمایش مقدار خروجی تابع استفاده میشود.
1 # Python
2 def abs(number):
3 if number > 0:
4 return number
5 else:
6 return -number
1 % Matlab
2 function [out] = abs(number)
3 if number > 0
4 out = number
5 else
6 out = -number
7 end
8 en
- اندیس آرایهها در متلب از 1 (یک) شروع میشود. در حالی که اندیس آرایهها در زبان پایتون، مانند دیگر زبانهای برنامهنویسی مرسوم، از صفر شروع میشود.
- در زبان متلب، برای مشخص کردن پایان یک بلاک دستوری از کلمه کلیدی end استفاده میشود. در حالی که در پایتون از «قواعد تورفتگی یا دندانهگذاری» (Indentation Rules) برای مشخص کردن پایان یک بلاک دستوری استفاده میشود.
در ادامه، تفاوت میان قواعد دستوری دو زبان پایتون و متلب نمایش داده شده است:
تعریف متغیرهای عددی:
1# numeric variables
2
3# are double precision by default
4
5a = 5.0
1% numeric variables
2
3% are double precision by default
4
5a = 5.0;
مقداردهی تکراری متغیرها:
1# repeat which assigns values to array elements
2
3# arrays are known as "lists" in Python
4# array indexes start at 0 in Python
5
6# structures are defined by indentation, no 'end'
7
8A = [] # initialize array A
9for i in range(1,11):
10 A.append(i)
11 print(A[i-1])
1% array indexes start at 1 in Matlab
2
3% indentation is for readability only
4
5for i=1:10
6
7 A(i) = i;
8
9end
10A % display contents of A
چاپ کردن مقادیر متغیرها در خروجی:
1# repeat which prints a series of
2
3# values
4
5for i in range(0,11,2):
6 print(i)
1for i=0:2:10
2
3 fprintf(' %i \n', i)
4
5end
مقدار دهی ماتریس همانی (Identity Matrix):
1# initialize an identity matrix
2
3# import the numpy library for matrix operations
4
5import numpy as np
6
7B = np.identity(3)
1% MATLAB has built-in functions for
2
3% common array initializations
4
5B = eye(100);
تعریف و مقدار دهی آرایه:
1# declare and initialize an array,
2# known as a list in Python
3
4C = [1, 2, 3]
1C = [1, 2, 3]; % or C = [1 2 3];
مقدار دهی و چاپ آرایه:
1# initialize and print an array
2# array name = arange(start,stop,step)
3
4import numpy as np
5C = np.arange(2,10,2)
6print(C)
1% array name = [start:increment:end];
2
3C = [2:2:8] % leave off ; to display value
چاپ عناصر آرایه:
1# print an array element on screen
2# array indexes start at 0
3
4print(C[1])
5
6# prints 4 using C from above table cell
7# note square brackets C[1]
1% array indexes start at 1
2
3C(2)
4
5% prints 4 using C from above table cell
6% note parentheses C(2)
تعریف و مقدار دهی آرایه (مثالی دیگر):
1# declare and initialize an array
2
3# with fixed interval between values
4
5import numpy as np
6C = np.linspace(2,8,4)
7
8# third param is optional and = # points
9
10# between and including 1st two points
11
12# if third param left off, default
13
14# is 50 points
1 C = linspace(2,8,4);
2
3% third param is optional and = # points
4
5% between and including 1st two points
6
7% if third param left off, default
8
9% is 100 points
مقدار دهی آرایه دوبُعدی:
1# initialize a 2D array
2
3D = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
1% these three examples accomplish the
2
3% same thing
4
5D = [1 2 3; 4 5 6; 7 8 9];
6
7D = [1:3; 4:6; 7:9];
8
9D = [1 2 3
10
11 4 5 6
12
13 7 8 9];
چاپ عناصر آرایه دوبُعدی:
1# print element of 2D array
2# array indexes start at 0
3print(D[1][1]) # row 2, column 2
4
5# prints 5 using D from above table cell
1% array indexes start at 1
2
3D(2,2) % row 2, column 2
4% prints 5 using D from above table cell
چاپ عناصر یک زیر آرایه از آرایه دوبُعدی:
1# print selected sub array of 2D array
2# e.g., print rows 1 to 2 of column 1
3
4for i in range(0,2):
5 print(D[i][0])
1D(1:2,1) % rows 1 to 2 of column 1
چاپ عناصر ستونی آرایه دوبُعدی:
1# print all rows of column 1 of 2D
2
3# array
4
5
6import numpy as np
7D = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
8Dsub = D[0:,0:1]
9print(Dsub)
1D(:,1) % all rows, column 1
عبارات منطقی:
1# logical expression
2
3a = 1
4b = 2
5if a == 1 or b == 3:
6 print('a = 2 or b = 3')
1a = 1
2
3b = 2;
4
5if a == 1 || b == 3
6
7 fprintf('a = 2 or b = 3 \n');
8
9end
ساختار if:
1# if structure
2
3if a == 1 and b != 3:
4 print('a=1 and b not 3');
5 print('OK?')
1if a == 1 && b ~= 3
2
3 fprintf('a=1 and b not 3 \n');
4
5 fprintf('OK? \n');
6
7end
ساختار if-else:
1# if, else structure
2
3if a != 1:
4 print('a is not 1')
5elif b != 3:
6 print('b is not 3')
7else:
8 print('huh?')
1a ~= 1
2
3 fprintf('a is not 1 \n')
4elseif b ~= 3
5
6 fprintf('b is not 3 \n')
7
8else
9
10 fprintf('huh? \n')
11
12end
ساختار switch:
1# switch structure
2
3# Python doesn't have a switch structure
4
5# any switch structure can be
6# written as an if-else structure
7
8# switch structures may be quicker to
9# read and write for applications such as menus
1switch menuChoice
2
3 case 1
4
5 % can do any actions in a case, e.g.,
6 % call a user-defined function
7
8 myMenuFunc01();
9 case 2
10
11 myMenuFunc02();
12
13 case 3
14
15 myMenuFunc03();
16
17 otherwise
18
19 fprintf('invalid selection, try again')
20
21end
تعریف و فراخوانی توابع:
1# program which calls a user-defined function
2
3# define function, here I chose name myfunc
4
5def myfunc(x,y):
6 return x**y # ** is exponentiation operator
7
8# call function
9
10z = myfunc(2,3)
11print(z)
12# prints 8 for this input
1% main program and function definition must
2
3% be in separate files and function file
4
5% must have same name as function name
6
7z = myfunc(2,3)
8
9% prints 8 for this input
10
11----- LISTING OF FILE myfunc.m ------
12
13function returnValue = myfunc(x,y)
14
15 returnValue = x^y; % ^ is exponentiation operator
16
17 % function is a keyword
18 % returnValue is arbitrary variable name
دستکاری ماتریسی:
1# matrix multiplication
2
3import numpy as np
4
5A = np.matrix( ((2,3), (3, 5)) )
6B = np.matrix( ((1,2), (5, -1)) )
7
8C = A * B
9print(C)
1A = [2,3; 3,5];
2
3B = [1,2; 5,-1];
4
5
6C = A * B
رسم نمودار توابع:
1# plotting
2
3import numpy as np
4import matplotlib.pyplot as plt
5x = np.linspace(0,2*np.pi,100)
6y = np.sin(x)
7plt.plot(x,y)
8plt.ylabel('sin(x)')
9plt.xlabel('x')
10plt.show()
1x = linspace(0,2*pi,100);
2y = sin(x);
3plot(x,y)
4ylabel('sin(x)')
5xlabel('x')
مقایسه پایتون و متلب از لحاظ عملکرد و سرعت اجرای برنامهها
در زبانهای برنامهنویسی، سرعت یک مفهوم نسبی و انتزاعی است و بهتر است برای مقایسه زبانهای برنامهنویسی، عملکرد آنها در اجرای برنامههای خاص سنجیده شود (توابع یا برنامههای خاصی که با هدف سنجش عملکرد زبانهای برنامهنویسی توسعه داده شدهاند و از قابلیتهای برنامهنویسی یکسان برای کد نویسی آنها استفاده شده است).
برای مقایسه دقیق میان عملکرد زبانهای پایتون و متلب، سرعت اجرای برنامههای نوشته شده به این دو زبان جهت حل مسائل محاسبات علمی، به عنوان معیار ارزیابی در نظر گرفته شده است. برای چنین کاری، توسعهدهندگان پایتون و متلب، برنامهای برای حل معادله «لاپلاس» (Laplace) به دو زبان پایتون و متلب معرفی کردهاند. برای حل این معادله، از یک ماتریس عددی با اندازه 500x500 استفاده شده است. همچنین، تعداد تکرارهای لازم برای رسیدن به جواب نهایی برابر با 100 در نظر گرفته شده است. کدهای لازم برای حل معادله عددی لاپلاس در زبانهای پایتون و متلب در ادامه آمده است. همچنین در ادامه، خلاصهای از نتایج مقایسه پایتون یا متلب بر اساس سرعت آنها در اجرای برنامه حل معادله عددی لاپلاس نمایش داده شده است.
کدهای پایتون لازم برای حل معادله عددی لاپلاس:
1import numpy
2
3class Grid:
4 """A simple grid class that stores the details and solution of the
5 computational grid."""
6 def __init__(self, nx=10, ny=10, xmin=0.0, xmax=1.0,
7 ymin=0.0, ymax=1.0):
8 self.xmin, self.xmax, self.ymin, self.ymax = xmin, xmax, ymin, ymax
9 self.dx = float(xmax-xmin)/(nx-1)
10 self.dy = float(ymax-ymin)/(ny-1)
11 self.u = numpy.zeros((nx, ny), 'd')
12 # used to compute the change in solution in some of the methods.
13 self.old_u = self.u.copy()
14
15 def setBCFunc(self, func):
16 """Sets the BC given a function of two variables."""
17 xmin, ymin = self.xmin, self.ymin
18 xmax, ymax = self.xmax, self.ymax
19 x = numpy.arange(xmin, xmax + self.dx*0.5, self.dx)
20 y = numpy.arange(ymin, ymax + self.dy*0.5, self.dy)
21 self.u[0 ,:] = func(xmin,y)
22 self.u[-1,:] = func(xmax,y)
23 self.u[:, 0] = func(x,ymin)
24 self.u[:,-1] = func(x,ymax)
25
26 def computeError(self):
27 """Computes absolute error using an L2 norm for the solution.
28 This requires that self.u and self.old_u must be appropriately
29 setup."""
30 v = (self.u - self.old_u).flat
31 return numpy.sqrt(numpy.dot(v,v))
32
33
34class LaplaceSolver:
35 """A simple Laplacian solver that can use different schemes to
36 solve the problem."""
37 def __init__(self, grid, stepper='numeric'):
38 self.grid = grid
39 self.setTimeStepper(stepper)
40
41 def slowTimeStep(self, dt=0.0):
42 """Takes a time step using straight forward Python loops."""
43 g = self.grid
44 nx, ny = g.u.shape
45 dx2, dy2 = g.dx**2, g.dy**2
46 dnr_inv = 0.5/(dx2 + dy2)
47 u = g.u
48
49 err = 0.0
50 for i in range(1, nx-1):
51 for j in range(1, ny-1):
52 tmp = u[i,j]
53 u[i,j] = ((u[i-1, j] + u[i+1, j])*dy2 +
54 (u[i, j-1] + u[i, j+1])*dx2)*dnr_inv
55 diff = u[i,j] - tmp
56 err += diff*diff
57
58 return numpy.sqrt(err)
59
60 def setTimeStepper(self, stepper='numeric'):
61 """Sets the time step scheme to be used while solving given a
62 string which should be one of ['slow', 'numeric', 'blitz',
63 'inline', 'fastinline', 'fortran']."""
64 if stepper == 'slow':
65 self.timeStep = self.slowTimeStep
66 # ...
67 else:
68 self.timeStep = self.numericTimeStep
69
70 def solve(self, n_iter=0, eps=1.0e-16):
71 err = self.timeStep()
72 count = 1
73
74 while err > eps:
75 if n_iter and count >= n_iter:
76 return err
77 err = self.timeStep()
78 count = count + 1
79
80 return count
81
82
83Using NumPy
84
85
86 def numericTimeStep(self, dt=0.0):
87 """Takes a time step using a NumPy expression."""
88 g = self.grid
89 dx2, dy2 = g.dx**2, g.dy**2
90 dnr_inv = 0.5/(dx2 + dy2)
91 u = g.u
92 g.old_u = u.copy() # needed to compute the error.
93
94 # The actual iteration
95 u[1:-1, 1:-1] = ((u[0:-2, 1:-1] + u[2:, 1:-1])*dy2 +
96 (u[1:-1,0:-2] + u[1:-1, 2:])*dx2)*dnr_inv
97
98 return g.computeError()
99
100
کدهای متلب لازم برای حل معادله عددی لاپلاس:
1xmin = 0;
2xmax = 1;
3ymin = 0;
4ymax = 1;
5
6nx = 200;
7ny = nx;
8
9dx = (xmax - xmin) / (nx - 1);
10dy = (ymax - ymin) / (ny - 1);
11
12x = xmin:dx:xmax;
13y = ymin:dy:ymax;
14
15n_iter = 100;
16eps = 1e-16;
17
18u = zeros(nx,ny);
19u(1,:) = xmin^2 - y.^2;
20u(end,:) = xmax^2 - y.^2;
21u(:,1) = x.'.^2 - ymin^2;
22u(:,end) = x.'.^2 - ymax^2;
23err = Inf;
24count = 0;
25while err > eps && count < n_iter
26 count = count + 1;
27 dx2 = dx^2;
28 dy2 = dy^2;
29 dnr_inv = 0.5 / (dx2 + dy2);
30 u_old = u;
31 u(2:end-1, 2:end-1) = ((u(1:end-2, 2:end-1) + u(3:end, 2:end-1))*dy2 + (u(2:end-1,1:end-2) + u(2:end-1, 3:end))*dx2)*dnr_inv;
32 v = (u - u_old);
33 err = sqrt(v(:).'*v(:));
34end
نتایج حاصل از مقایسه سرعت اجرای این برنامه در زبانهای متلب و پایتون (نسخههای مختلف آن و به کمک کتابخانههای برنامهنویسی) در ادامه آمده است:
زبان استفاده شده برای حل معادله عددی لاپلاس | زمان محاسباتی لازم (ثانیه) |
Python | 1500 |
Python + Psyco | 1138 |
Python + NumPy | 29٫۳ |
Matlab | 29 |
Octave | 60 |
همانطور که در جدول بالا مشاهده میشود، عملکرد زبان متلب در مقایسه با زبان پایتون (کدهای خالص پایتون و بدون استفاده از کتابخانههای برنامهنویسی)، به مراتب بهتر است و در مدت زمان بسیار کوتاهتری قادر به پیدا کردن جواب معادله عددی لاپلاس است. با این حال، زمانی که از کتابخانه Numpy برای حل مسأله عددی لاپلاس استفاده میشود، عملکرد تقریبا مشابهی حاصل میشود.
جمعبندی
زبانهای متلب و پایتون، مزایا و معایب مخصوص به خود را دارند. هر دو زبان، جزء زبانهای برنامهنویسی موفق در بازار هستند. زبان متلب، زبان مرجع برای انجام محاسبات علمی و تولید سیستمهای محاسبات پیچیده، مدلسازی و موارد مشابه است. زبان پایتون نیز یک زبان همه منظوره است که برای پیادهسازی دامنه وسیعی از برنامههای کاربردی میتواند مورد استفاده قرار بگیرد. با این حال، زبان پایتون هم اکنون به عنوان زبان برنامهنویسی مرجع در حوزههای یادگیری ماشین و هوش مصنوعی محسوب میشود.
ساختارهای داده زبان برنامهنویسی متلب به برنامهنویسان و توسعهدهندگان اجازه میدهد تا بسیاری از مسائل فنی و محاسباتی را (که غالبا در فرم ماتریس و ارایه قابل نمایش هستند) حل کنند. زبان متلب، زبان اصلی توسعه برنامههای کاربردی در دانشگاهها، مؤسسات تحقیقاتی و شرکتهای تحقیق و توسعه محسوب میشود.
زبان پایتون نیز در چند سال اخیر به یکی از پرتقاضاترین، پراستفادهترین و محبوبترین زبانهای برنامهنویسی در جهان تبدیل شده است. این زبان، به زبان برنامهنویسی مرجع افراد شاغل در حوزه علوم کامپیوتر، به ویژه شاخههای یادگیری ماشین و هوش مصنوعی تبدیل شده است. همچنین، فرایند یادگیری ساده زبان پایتون، این زبان را به یکی از زبانهای مورد علاقه برنامهنویسان مبتدی تبدیل کرده است.
در ادامه جمعبندی این مطلب، مقایسه پهلو به پهلو از ویژگیها و خصوصیات این دو زبان برنامهنویسی آمده است:
پارامترهای مقایسه | پایتون | متلب |
دستهبندی کلی | یک زبان برنامهنویسی سطح بالا و همه منظوره محسوب میشود. | یک زبان برنامهنویسی با عملکرد بالا برای مقاصد محاسبات علمی محسوب میشود. |
موارد استفاده | به عنوان یک زبان همه منظوره، برای دامنه وسیعی از کاربردها (توسعه وب، هوش مصنوعی، واسط کاربری و سایر موارد) استفاده میشود. | برای انجام عملیات مرتبط با دستکاری ماتریسی، ترسیم دادهها و توابع و تولید واسط کاربری ساده مورد استفاده قرار میگیرد. |
مزایا | پشتیبانی گسترده از کتابخانههای مختلف.
جامعه برنامهنویسی فعال و گسترده. | امکان اجرا و تست سریع برنامههای کاربردی را، بدون نیاز به کامپایلر، به کاربران و برنامهنویسان میدهد. |
عملکرد | به دلیل وجود مفسر، سرعت اجرای برنامهها نسبت به زبانهای دیگر کمتر است. | انجام محاسبات علمی با عملکرد و سرعت بالا، مناسب برای محاسبات جبر خطی و ماتریسی، سرعت بالا در اجرای توابع آماری |
پشتیبانی برنامهنویسی | کتابخانههای استاندارد و خارجی پایتون بسیار گسترده هستند. | کتابخانههای استاندارد متلب، ویژگیهای برنامهنویسی زیادی را در اختیار کاربران و برنامهنویسان قرار نمیدهد. |
قدمت | در سال 1991 توسط بنیاد نرمافزاری پایتون ارائه شد. | برای اولین بار، در سال 1970 وارد بازار شد. |
سیستمهای تعبیه شده | در این زبان، یک سیستم تولید کد جامع برای سیستمهای تعبیه شده وجود ندارد. | در زبان متلب، امکان تولید کدهای سریع، خوانا و قابل حمل C یا C++ برای استفاده در سیستمهای تعبیه شده وجود دارد. |
مجموعه آموزشهای مرتبط با زبان برنامهنویسی پایتون که در مجله فرادرس تهیه شدهاند و برای عموم مخاطبان و خوانندگان در دسترس قرار گرفتهاند، در اینجا گردآوری شدهاند. در صورتی که تمایل دارید با زبان برنامهنویسی پایتون و نحوه کدنویسی در این زبان آشنا شوید، توصیه میشود که آموزشهای ارائه شده در این مطب را مطالعه کنید.
اگر نوشته بالا برای شما مفید بوده است، آموزشهای زیر نیز به شما پیشنهاد میشوند:
- مجموعه آموزشهای برنامهنویسی پایتون Python
- گنجینه آموزشهای برنامه نویسی پایتون (Python)
- مجموعه آموزشهای برنامهنویسی
- پایتون یا جاوا اسکریپت کدام بهتر است؟ -- راهنمای جامع
- پایتون یا سی شارپ کدام بهتر است؟ -- راهنمای جامع
- پایتون یا جاوا کدام بهتر است؟ — راهنمای جامع
- طراحی سایت با پایتون — از صفر تا صد و پروژه محور
- ترفندهای برنامه نویسی در پایتون — از صفر تا صد
- آموزش پایتون (Python) — مجموعه مقالات جامع وبلاگ فرادرس
^^
سلام . برای شبیه سازی الگوریتم های رمزنگاری و اینترنت اشیا متلب بهتره یا پایتون؟ متشکر
Proprietary Programming Language یعنی زبان برنامهنویسی انحصاری، نه اختصاصی. خیلی فرق میکنن!
با سلام و احترام؛
صمیمانه از همراهی شما با مجله فرادرس و ارائه بازخورد سپاسگزاریم.
این مورد اصلاح شد.
برای شما آرزوی سلامتی و موفقیت داریم.
با سلام
چگونه میتوان کدهای پایتون را به کدهای متلب تبدیل کرد
سلام
کدهای مربوط به متلب (لاپلاس) رو ران گرفتم کمتر از یک ثانیه جواب داد!