تفاوت پلاگین ها و اسکریپت ابزارها . بخش دوم از سری مقالات آشنایی با مفاهیم اولیه زبان های برنامه نویسی و اسکریپت نویسی را با آقای سجاد ربیعی از مدرسین cmiVFX در ادامه خواهیم داشت . باعث افتخار هست که آقای سجاد ربیعی از فعالان حوزه انیمیشن و VFX و مدرس شرکت cmiVFX در نرم افزار هودینی در کنار ماست . امیدوارم دوستان نهایت استفاده را از این گنجینه ارزشمند داشته باشند .
آشنایی با مفاهیم اولیه زبان های برنامه نویسی و اسکریپت نویسی
قسمت ۲ :
-
تفاوت زبان های اسکریپت نویسی و برنامه نویسی
(Programming Languages vs Scripting Languages)
-
تفاوت پلاگین و اسکریپت ابزار ها
(Plug-ins vs Scripting Tools)
-
کاربرد زبان های برنامه نویسی و اسکریپت نویسی در صنعت انیمیشن و VFX
کانال مقالات استاد سجاد ربیعی در ImanVFX
آشنایی با مفاهیم زبان های برنامه نویسی و اسکریپت نویسی در انیمیشن و VFX قسمت ۱
آشنایی با مفاهیم اولیه زبان های برنامه نویسی و اسکریپت نویسی در انیمیشن و VFX قسمت ۲
آشنایی با مفاهیم اولیه زبان های برنامه نویسی و اسکریپت نویسی در انیمیشن و VFX قسمت ۳
آشنایی با مفاهیم اولیه زبان های برنامه نویسی و اسکریپت نویسی در انیمیشن و VFX قسمت ۴
آشنایی با مفهوم Physically Based Rendering در موتورهای رندر
تفاوت زبان های اسکریپت نویسی و برنامه نویسی,قسمت ۵ معرفی اسکریپت نویسی
تفاوت زبان های اسکریپت نویسی و برنامه نویسی,سجاد ربیعی قسمت ۶
تفاوت زبان های اسکریپت نویسی و برنامه نویسی,سجاد ربیعی قسمت ۷
تفاوت زبان های اسکریپت نویسی و برنامه نویسی,آشنایی با PyMEL – Python – API – PyQt
مروری بر مقاله قبلی
در قسمت اول این مقاله با انواع سیستم های اعداد نظیر دودویی ، هشتایی ، دهتایی و شانزده تایی که به ترتیب به آنها Hexadecimal , Decimal , Octave , Binary میگوییم کمی آشنا شدید و گفتیم کلیه سیستم های دیجیتال با سیستم Binary کار میکنند ، فقط چون نوشتن اعداد با این سیستم خیلی طولانی میشه و روند کار رو کند میکنه ، (مثلا عدد ۲۰۱۵ در سیستم دسیمال برابره با عدد ۱۱۱۱۱۰۱۱۱۱۱ در سیستم باینری ! ) ، معمولا از سیستم هگزادسیمال یا شانزده تایی نیز استفاده میکنند . مثلا دوستانی که با الکترونیک آشنا باشند می دانند که اگر بخواهیم برای میکروکنترل ها نظیر AVR برنامه بنویسیم ، برنامه ما همیشه به هگزادسیمال تبدیل میشه و این کدهای هگزا هستند که ما باید روی میکروکنترلر بریزیم.
با خواندن مقاله قبلی دیگه الان باید بدونید که این عددی که وقتی مک آدرس کارت شبکه رو میگیرید (MAC Address) نشون میده چیه :
FE80 A0E6 C46F 82DB 66FE
ادامه مقاله
خوب در مقاله قبلی گفتم نوشتن مستقیم برنامه با زبان ماشین کار بسیار سخت و شاید غیر ممکن باشه ، اینجاست که پای زبان های برنامه نویسی وسط میاد و وظیفه انها اینه که آنچه را که ما به زبان آدمیزاد نوشتیم را به زبان ماشین تبدیل کنه . ما زبان های برنامه نویسی زیادی داریم که شاید اسم بعضی را هم نشنیده باشیم ، ولی مهمترین زبان های برنامه نویسی عبارتند از :
۱٫ Assembly
2. C
3. ++C (سی پلاس پلاس)
۴٫ #C (سی شارپ)
۵٫ Basic
6. …
هر یک از این زبان ها معایب و مزایایی خاص خودشون رو دارند و حتی برخی از آنها در مصارفی خاص بیشتر کاربرد دارند ، مثلا بسیاری از برنامه های اداری و حسابداری رو با #C مینویسند بیشتر برنامه های ۳D ، موتور های رندر و برنامه های داینامیک و Simulation را با ++C مینویسند. در ادامه قصد دارم تا براتون مشخص کنم چه چیزی باعث تفاوت زبان های برنامه نویسی و حوزه کاربرد آنها میشه.
دسته بندی زبان های برنامه نویسی
۱٫ زبان های سطح پایین مثل Assembly
2. زبان های میانی مثل C و C++
2. زبان های سطح بالا مثل #C
هرچه زبان برنامه نویسی از لحاظ نوشتاری ، کد ، Syntax و ساختاری به زبان ماشین مثل Binary نزدیکتر باشد به آن زبان سطح پایین میگویند و بالعکس هرچه زبان مورد نظر به زبان انسان (عموما English !) نزدیکتر باشد به آن زبان سطح بالا می گویند.
بنابراین هر چه زبان برنامه نویسی سطح بالاتر باشد ، نوشتن برنامه با آن خیلی راحتتر می باشد ، در بخش زیر یه مثال براتون زدم ، در این مثال میخواهیم دو عدد را با هم جمع کنیم و نتیجه را در متغیری (یک مکان در حافظه) به اسم Result ذخیره کنیم. این برنامه را در هر دو زبان اسمبلی و C نوشتم تا مقایسه کنید .
برنامه جمع اعداد در اسمبلی
opr1 dw 1234h
opr2 dw 0002h
result dw 01 dup(?),’$’
mov ax,@data
mov ds,ax
mov ax,opr1
mov bx,opr2
clc
add ax,bx
mov di,offset result
mov [di], ax
mov ah,09h
mov dx,offset result
int 21h
mov ah,4ch
int 21h
end
برنامه جمع اعداد در C
int Result;
int A = 10;
int B = 12;
Result = A + B;
خوب نظرتون چیه ؟ در زبان اسمبلی مجبوریم ۱۷ خط کدی که اصلا هم ازش سر در نمیاریم برای یک عملیات جمع ساده بنویسیم ولی در زبان C فقط با نوشتن ۴ خط کد که بسیار هم واضحه تونستیم همون برنامه رو بنویسیم !
اما در اینصورت چه نیازی به استفاده از زبان های سطح پایینه ؟
خوب جواب اینه که به همون دلیل که زبان های سطح بالا به زبان انسان ها نزدیکتره و از زبان ماشین دورتره ، بنابراین سرعت اجرای این برنامه ها و نحوه دسترسی آنها به منابع سخت افزاری نظیر CPU و Ram بسیار کندتره !
شاید بتوان گفت برنامه هایی که با زبان های سطح پایین نوشته میشوند بیشتر از ده ها برابر سریعتر از برنامه هایی هستند که با زبان های سطح بالا نوشته می شوند.
حالا با دانستن این نکته اگر کمی فکر کنید متوجه میشید که در چه مواقعی ما مجبوریم از زبان های سطح پایین استفاده بکنیم ، هر گاه نرم افزاری که میخواهیم بنویسیم قراره خیلی سریع باشه و باید از منابع سخت افزاری مثل Ram و کارت گرافیک بیشترین استفاده رو بکنه باید از زبان های سطح پایین استفاده بکنیم و هرگاه هم که بخواهیم نرم افزاری بسازیم که قرار نیست اطلاعات زیادی را محاسبه کنه و سرعت اجرای آنها زیاد برامون مهم نیست از زبان های سطح بالا استفاده میکنیم ، چون بسیار راحتتر هستند.
قبل از ادامه این نکته رو بدونید که اگرچه زبان اسمبلی از بقیه سطح پایین تری دارد ولی باز چون نوشتن برنامه با آن بسیار سخت و طاقت فرساست ، برای نوشتن برنامه های بزرگ و گسترده که نیاز به نوشتم هزاران خط کد دارند از زبان های کمی سطح بالاتر مثل ++C استفاده میکنند.
حالا اجازه بدید چندتا مثال بزنم که برای دوستان ۳D کار جالبه
تقریبا تمامی برنامه های ۳D و کامپوزیت چه آنهایی که General هستند مثل Maya ، Max ، Houdini و چه آنهایی که روی یک بخش خاص تخصص دارند مثل Real Flow ، Mari و Nuke به دلیل اینکه سرعت در آنها بسیار حائز اهمیته و باید در بهینه ترین حالت ممکن از Ram سیستم ، Ram کارت گرافیک ، CPU و GPU استفاده بکنند ، از زبان برنامه نویسی ++C برای نوشتن آنها استفاده میکنند.
اما در برنامه های دیگری مثل نرم افزارهای حسابداری ، برنامه های مدریتی برای سازمان ها و از اینجور برنامه ها به دلیل اینکه قرار نیست پردازش سنگین و خاصی را انجام بدهند از سایر زبان های سطح بالاتر نظیر #C استفاده میکنند.
من شخصا یک برنامه کوچک در ارتباط با گرفتن رندر RealTime از یک مدل ساده با تکستچر و نور را با هر دو زبان C و #C نوشتم و نتیجه ای که گرفتم جالب بود ، برنامه ای که با C نوشته شده بود حدود ۱ ثانیه طول کشید تا load بشه و حدود ۲۰ مگابایت از رم سیستم رو اشغال کرد ولی همان برنامه با زبان #C در حدود ۲ ثانیه طول کشید تا بارگزاری یا load بشه و حدود ۳۰ مگابایت از رم سیستم رو اشغال کرد ! حالا حساب کنید اگر بخواهیم یک موتور رندر بنویسیم که قراره یک شهر را با کلی منبع نور و مخلفات رندر بگیره این اختلاف چه قدر میشه !
به همین دلیله که در معرفی ویژگی های (Features) برخی از نرم افزارها و ابزار ها مثل موتور رندر Arnold و حتی موتور های بازی مثل Unreal Engine میبینیم که نوشتند این برنامه با ++C نوشته شده است !
پاورقی !
شاید برای دوستان نا آشنا این سوال به وجود بیاد که چرا من در برخی جاها نوشتم C و در برخی جاها نوشتم ++C ، در حقیقت زبان ++C همان زبان C میباشد فقط با یکسری امکانات و ویژگی های اضافی که مهمترین آنها شی گرا بودن این زبانه که به این قابلیت Object Oriented میگویند. به همین دلیل امروزه دیگه کسی از زبان C استفاده نمیکنه و زبان C++ جایگزین آن شده است. راجب Object Oriented هم انشالا بعدا توضیح میدم.
خوب حالا که با انواع زبان های برنامه نویسی و دسته بندی آنها آشنا شدید ، اجازه بدید این مقاله رو زیاد طولانی نکنم و ادامه آن را در مقاله دیگری بنویسم ، احتمالا متوجه شدید که این مقاله نسبت به مقاله قبلی کمی به کار شما نزدیکتر شده و انشالا در مقاله بعدی خیلی زود میرسیم به بحث آشنایی با برنامه نویسی نرم افزار های سه بعدی مثل Maya و Max.
با تشکر
سجاد ربیعی
9 دیدگاه
سیامک سازگار
خیلی ممنون
رضا رفیعی
خیلی برام جالب بود این مطلبتون. یادمه ما بایدتوی دانشگاه زبان برنامه نویسی ++C رو به عنوان درس سه واحدی برنامه سازی پیشرفته میگذروندیم . اون موقع مرتب اعتراض داشتیم ک این زبان کاربردی نداره و باید بریم سراغ زبانهای جدید تر مثل #C . اما وقتی از دوتا از دوستانی که کار ساخت موتورهای بازی ایرانی رو به عهده داشتن شنیدم ک ++C در طراحی و نوشتن این برنامه هابسیار قدرتمندو توانمنده باورم نمی شد.واقعا این زبان خیلی خوبه و با قابلیتهای شی گرایی خیلی خیلی توی ساخت این نرم افزارا کمک می کنه. ممنون آقای ربیعی از مطلب جذابتون
سجاد ربیعی
بله دوست عزیز ، متاسفانه بسیاری از چیزهایی که در دانشگاه به ما آموزش میدهند ، دقیقا برای ما مشخص نمیکنند که چه کاربردی دارند و شاید ما فکر کنیم که این اطلاعات قدیمی هستند ، ولی اگر در دانشگاه ، اساتید خیلی دقیق و شفاف راجب این مطالب صحبت کنند و دانشجوها بدانند که این مطالب در بازار کار امروزی چقدر کاربرد دارند ، مسلما با دل و جون بیشتری در کلاسها حاضر میشوند.
مشکل دیگری که در آموزش برخی از علوم که کمی پیچیده هستند وجود دارد (مثل ریاضیات ، هندسه ، فیزیک و برنامه نویسی) این است که اساتید با زبانی سخت این مطالب را آموزش میدهند و این میشه که دانشجویان علاقه خود را راجب این علوم از دست میدهند و حتی بدتر از آن ، فکر میکنند که یادگیری این علوم بسیار پیچیده است و از توان آنها خارج است ، بالعکس اگر آموزش این علوم با مثال های عملی و کاربردی همراه باشه و از ادبیات ساده و روان برای آموزش استفاده بشود ، دانشجویان به یادگیری این دروس علاقه مند میشوند و اگر در هر کاری علاقه وجود داشته باشد ، یادگیری آن نباید زیاد سخت باشد.
یه اتفاق جالبی که در این رابطه برای من به وجود آمده و آن را شخصا تجربه کردم ، این است که برخی از دوستانی که من به آنها داینامیک و FX آموزش میدادم ، وقتی روز اول در رابط با برنامه نویسی با آنها صحبت میکردم ، بسیار ناراحت میشدند و میگفتند که استعداد یادگیری برنامه نویسی را ندارند ، ولی وقتی در کلاسها ، من نوشتن و آموزش برنامه نویسی را در قالب پروژه های گرافیکی و 3D جالب آموزش میدادم ، آنها بسیار لذت میبردند و بعد از مدتی خودشون به راحتی برنامه نویسی میکردند و نهایتا میگفتند که هرگز فکر نمیکردند برنامه نویسی اینقدر جذاب و شیرین باشه !
در رابط با برنامه نویسی موتور بازی هم بله ، دقیقا همینطوره ، چون در بازی های کامپیوتری باید از VGA و RAM در بهینه ترین حالت ممکن استفاده بشود ، عموما از زبان ++C برای نوشتن آن استفاده می کنند ، البته این بدان معنا نیست که با زبان #C نمیشود موتور بازی نوشت .
تقریبا تمامی موتور بازی های قدرتمند و بزرگ مانند Unreal Engine ، Cry Engine و Unity همه و همه با زبان ++C نوشته شده اند.
در ارتباط با شی گرا بودن زبان ++C باید عرض کنم که بله این یک مزیت این زبان محسوب میشود ، البته جالبه بدانید که ما حتی در زبان های اسکریپت نویسی نظیر Python میتوانیم به صورت شی گرا یا Object Oriented برنامه بنویسیم !
vahid
سلام بسیار ممنون از دانسته های مهم و در عین حال جالبی که در اختیار من و دوستان می گذارید. یک سوال : آیا امکان تبدیل سیستم های برنامه نویسی به همدیگر هست یا نه؟ یعنی آیا تا به امروز برنامه ای هم وجود دارد که بتواند یک سیستم برنامه نویسی مانند assembly را به C++ و یا بالعکس برگرداند. فقط جهت کنجکاوی پرسیدم. باز هم ممنون
سجاد ربیعی
سلام.
با تشکر از شما دوست گرامی
حقیقتا من با این دسته برنامه ها هرگز کار نکردم ولی ظاهرا چندتایی وجود دارند که برخی از زبان ها را میتونانند به یکدیگر تبدیل بکنند ، مثل C++ به C#
ولی حتی اگر هم بهترین آنها را پیدا بکنید باز برای پروژه های بزرگ که سرعت خیلی مهم است ، هرگز به درد نمیخورند، به این دلیل که ما در برنامه نویسی برنامه های بزرگ مثل موتور های رندر ، با بحث بهینه سازی یا Optimization روبرو هستیم ، بدین صورت که در کمترین تعداد خد کد بنویسیم و طوری بنویسیم که کمترین استفاده را از منابع سخت افزاری مثل Ram ببریم ، ولی برنامه هایی که به صورت اتوماتیک یکسری کارها میکنند مثل تبدیل زبان ها به یکدیگر ، همیشه تعداد زیادی کدهای اضافی تولید میکنند که حجم برنامه را بالا میبره !
ولی برای یادگیری انواع زبانها ممکنه این روش مناسب باشه.
nima
سلام به استاد ربیعی عزیز و خسته نباشید بابت زحمات فراوانتان.
فقط چند سوال که از شما به عنوان یک حرفه ای که در دنیای جلوه های ویژه کاری نبوده که نکرده باشید داشتم:
1_زبان C++ سطح بالاست یا متوسطه یا پایین؟ آخه هرجا و تو هر آموزشی زبان C++ رو تو سطوح مختلف تعریف میکنن!!
2_زبان هایی مثل MEL و Python از لحاظ سرعت اجرا فرقی باهم دارند تو مایا؟
3_زبان هایی مثل HScript و Python و VEX ایا از لحاظ سرعت اجرا فرق دارن تو هودینی؟
4_اگر از اول زبان C++ رو یاد بگیریم اگر چه سخت خواهد بود ولی واقعا به نظر شما دیگه نیازی به پایتون یا MEL یا Hscript یا VEX خواهد بود؟
ممنون.
سجاد ربیعی
سلام.
دوست عزیز یکسری از سوالاتی که پرسیدید را من در مقالات بعدی کاملا توضیح میدهم ، پس زیاد عجله نکنید !
فقط چون نمیخوام سوالاتتون را بی جواب بزارم ، کمی توضیح میدهم.
در مورد زبان C که من در مقاله خودم درموردش نوشته بودم و گفتم سطح میانیه . البته بیشتر زبان ها را در دو سطح دسته بندی میکنند ، سطح پایین و سطح بالا ، در این حالت زبان C نسبت به بقیه زبان سطح پایین محسوب میشه ولی چون نسبت به زبان اسمبلی خیلی راحتتره ، نمیشه آن را مثل اسمبلی در یک دسته قرار داد ، پس بهترین حالت اینه که بگیم سطح میانی !
2. بله ، زبان Python از MEL سریعتره و در برخی موارد میتونه ده برابر از MEL سریعتر باشه.
3. در هودینی زبان VEX از همه آنها سریعتره ، بعد از آن Expression ها یی از جنس Hscript و از همه کندتر Python !
4. یادگیری زبان C هیچ ربطی به زبان های اسکریپت نویسی مثل Python یا MEL نداره و دو مقوله جدا می باشند ، حتی اگر به C هم تسلط داشته باشید باز هم نیازه با Python یا MEL کار بکنید. ولی عموما یادگیری زبان C برای انیماتورها و کسانی که VFX کار میکنند الزام نیست ، چون خودش یک تخصص جداست و سالها زمان میبره تا کسی بتونه با آن پلاگین های بزرگ بنویسه ، این وظیفه بر عهده تیم Software Development می باشد نه کسایی که VFX کار میکنند.
Reza.Akhz
ممنون و بازم عالی بود.
اقای ربیعی، کد اسمبلی نوشتی و داغ دل ما رو تازه کردی. (3ترم برداشتن یک درس 3 واحدی)
برای کسانی مثل بنده که دانشجوی رشته کامپیوتر بودن (البته انصرافی ترم4) این توضیحات مرور خاطرات شیرین هستن. همچنان منتظر مباحث بعدی.
خسته نباشید و ممنون.
مصطفی
سلام و عرض ادب
تشکر بابت مطالب مفیدتون
خواستم بپرسم کلاس های حضوری برگزار میکنید؟