-
انتخاب های ما
-
خلاصهای از ملزومات و نقشهٔ راه ساخت و ساز محصول نرمافزاری
کامبیز اسدزاده ارسال شده توسط نوشته وبلاگ در علم و دانش،
سلام و درود،
این اواخر راجع به مشورت و راهنماییها خیلی ساده به قضیه نگاه میشه، همه فکر کردن کشکه و فقط با دونستن JS یا QML میشه محصول ساخت. البته این مثال JS و QML یک مثال هست و این مسئله در همهٔ ابزارها و حول محور حوزهٔ کامپیوتر و نرمافزار به چشم میخوره، هرچند روی داستان ساده هست اما حتی پشت این کارهای ساده کلی زمان باید صرف بشه. همین گرفتن یک دادهٔ ساده از سمت سرور و تجزیه کردنش سمت JS نیاز به یک دانش خوب در مورد معماری Apiداره، نیاز به آگاهی از استانداردهای Http داره، نیاز به تخصص کافی در ریز به ریز مسائل داره، نیاز به آگاهی لازم در مورد شبکه و نحوهٔ مدیریتش داره، نیاز به درک خوب راجع به کلاسهای شبکه و نحوهٔ مدیریت بستهها داره و صدها جور مسئلهٔ دیگه.
یا راهنمایی نکنیم یا میکنیم همه چیز رو ساده نشون ندیم!
به خصوص برای کسایی که سالها یه چیز دیگه خوندن و الآن قراره وارد این حوزه بشن.
قشنگ واقعیت رو باید به نمایش گذاشت، و اگرنه به اشتراک گذاری چهارتا UI خفن که بگین با QML هم میشه کاری نداره، سه سوته میشه اینها رو طراحی کرد.-
- 0 پاسخ
انتخاب شده توسط
کامبیز اسدزاده, -
-
آیا زبان برنامهنویسی ++C قابل جایگزین شدن است؟
کامبیز اسدزاده ارسال شده توسط نوشته وبلاگ در فناوری،
یک سوأل بسیار مهم و پر مخاطب در بارهٔ زبانبرنامهنویسی سیپلاسپلاس در سالهای اخیر این است که «آیا جایگزینی برای این زبان وجود دارد و یا قابل جایگزین است»؟
در بسیاری از پاسخها نشان از گزینههایی مانند Go، Rust و D دیده میشود که بهتر است نسبت به نظرات متخصصهای برنامهنویسی به این موضوع پرداخته شود، ابتدا باید در نظر گرفت که هر ابزاری میتواند جایگزینی داشته باشد اما شرایط و نحوهٔ استفادهٔ آن در رابطه با نیاز متفاوت است.-
-
- 0 پاسخ
انتخاب شده توسط
کامبیز اسدزاده, -
-
رونمایی از اولین درگاه پرداختِ ارزی توسط بایننس
کامبیز اسدزاده ارسال شده توسط نوشته وبلاگ در فناوری،
ما ایرانیها به خصوص توسعهدهندهها در حوزهٔ فناوری همیشه با مشکلاتی دست و پنجه نرم میکنیم، قطعاً میتوان در این باره توضیحات بسیار جامعی ارائه کرد، اما یکی از این مسائل بحث محدودیتهای شدید در پرداخت به شیوهٔ ارزی و بینالمللی است و به همین خاطر به سختی میشود به مشتریان خارج از کشور خدمات ارائه و هزینهای در قبال آن دریافت کرد بنابراین، معمولاً دسترسی به ارائهٔ خدمات در خارج از کشور امکانپذیر نیست.
با تفکرِ به این که، روزی خواهد رسید درگاههای پرداختیِ فعلی به شیوههای کاملاً مردمی بدون در نظر گرفتن موقعیت، قومیت و سیاستهای خارجی در اختیار همگان قرار خواهند گرفت و این یعنی آزادی در دنیای تجارت، به گونهای که با اهداف و شعار این بستر و ارزهای دیجیتالی همخوانی داشته و به نظر میرسد پیشبینیها در رابطه با شکل و قالب پولهای نسل جدید واقعاً به این سمت سوق پیدا کند.-
- 2 پاسخ
انتخاب شده توسط
کامبیز اسدزاده, -
-
قابلیتهای ممتاز و پیشرفتهٔ ++C در استانداردهای جدید
کامبیز اسدزاده ارسال شده توسط یک موضوع در برنامه نویسی در C و ++C،
اگر شما توسعه دهنده سیپلاسپلاس هستید، توصیه میکنیم این سری از مقالات را دنبال کنید زیرا در این تاپیک قصد داریم به آخرین تغییرات مرتبط با سیپلاسپلاس مدرن اشاره کنیم. بنابراین در بخش اول، مهمترین موارد منسوخ شده و اشکلات رفع شده و ویژگیهای سی++ را پوشش خواهیم داد.-
-
- 2 پاسخ
انتخاب شده توسط
کامبیز اسدزاده, -
-
معرفی و کار با فایلسیستمها در استاندارد C++17
کامبیز اسدزاده ارسال شده توسط یک موضوع در برنامه نویسی در C و ++C،
اگرچه که زبان برنامهنویسی سیپلاسپلاس به عنوان یک زبان بسیار قدرتمند و قدیمی شناخته شده است، اما کتابخانهٔ استاندارد و پیشفرض آن برخی از موارد واقعاً مهم را به تازگی تعبیه کرده است. ویژگیهایی که در زبانهایی مثل جاوا و یا سیشارپ داتنت سالهاست وجود دارند. به هر حال این ویژگیها در سی++ ۱۷ موجود شدهاند و این یک بهبود و پیشرفت بسیار خوب است. برای مثال ما الآن فایلسیستم استانداردی را در اختیار داریم.-
-
- 0 پاسخ
انتخاب شده توسط
کامبیز اسدزاده, -
-
معرفی و کاربرد صفتهای خاص در استاندارد ۱۷
کامبیز اسدزاده ارسال شده توسط یک موضوع در برنامه نویسی در C و ++C،
با سلام و درود،
همانطور که میدانید ویژگیهای اخیر در استانداردهای ۱۷ و ۲۰ بسیار عظیم و کاربردی هستند. هدف ما در مرجع آیاواستریم این است که با توجه به بهروزرسانیهای زبان سیپلاسپلاس مهمترین مواردی که نیاز است معرفی کنیم.
بنابراین در این بخش به یکی از کاربردیترین موارد مرتبط در استاندارد ۱۷ با عنوان صفتهای ویژه اشاره میشود که در ادامه به تعریف هر یک از آنها میپردازیم.-
-
- 0 پاسخ
انتخاب شده توسط
کامبیز اسدزاده, -
-
اکنون ++C سریعترین رشد را بین زبانهای برنامهنویسی دارد
کامبیز اسدزاده ارسال شده توسط نوشته وبلاگ در فناوری،
طبق شاخص محبوبیت طی چند سال گذشته، ++C با توجه به شاخص TIOBE در سپتامبر، سریعترین زبان در حال رشد در بسته برنامهنویسی است. این زبان در سالهای گذشته، محبوبیت سهم خود را در فراز و نشیبها داشته است. اما با مقیاسه با سالهای گذشته در حال حاضر رسماً سریعترین رشد را در بین تمامی زبانهای تحت پوشش اتوماسیون QA در شرکت Tobie را دارد.-
-
- 0 پاسخ
انتخاب شده توسط
کامبیز اسدزاده, -
-
سریعترین فریمورکهای وب!
کامبیز اسدزاده ارسال شده توسط نوشته وبلاگ در فناوری،
در این مقاله من قصد دارم به معرفی ده فریمورک برتر جهان در بازهٔ سالهای ۲۰۱۹ و ۲۰۲۰ اشاره کنم که در حوزهٔ صنعت وب کاربرد دارند. معمولاً در سایتها، وبلاگها و گروههای تلگرامی حرف از فریمورکهای شناخته شدهای مانند Asp.net core و یا Laravel به گوش میرسد. اما واقعیت این است که فریمورکهایی که در مورد آنها بحث میشود جایگاه خاصی در بین فریمورکهای قدرتمند و به عنوانی ناشناخته مانند Drogon، h2o، ulib و غیره ندارند!-
-
- 0 پاسخ
انتخاب شده توسط
کامبیز اسدزاده, -
-
کدام زبان برنامهنویسی را یاد بگیریم؟
کامبیز اسدزاده ارسال شده توسط یک مقاله در زبانهای برنامه نویسی،
سلام و درود خدمت دوستان عزیز،
همانطور که میدانید مهمترین و شاید بزرگترین سوال در حوزهی برنامهنویسی این است که من باید کدام زبان برنامهنویسی را انتخاب کنم؟!-
-
- 2 پاسخ
انتخاب شده توسط
کامبیز اسدزاده, -
-
چگونه با مشتریِ خود صحبت کنیم
کامبیز اسدزاده ارسال شده توسط یک مقاله در استارتاپی،
با سلام و درود،
همهی ما میدانیم که امروزه کسبوکارهای اینترنتی و وابسته به فناوریهای مبتنی بر نرمافزار، یکی از حوزههایی به شمار میرود که در چهارچوب خود میتوانند پیشرفت بسیار چشمگیری داشته باشند.-
-
- 0 پاسخ
انتخاب شده توسط
کامبیز اسدزاده, -
-
آیندهٔ توسعهٔ وب تحت فناوری WebAssembly
کامبیز اسدزاده ارسال شده توسط نوشته وبلاگ در فناوری،
وباسمبلی یا وَسم (Wasm، اغلب به طور مخفف) استانداردی باز است که یک قالب جدید دستورالعملهای باینری را معرفی میکند. این فناوری نوید این را میدهد که برنامهها با کارآیی (پرفرمنس) بومیِ خود در بستر وِب اجرا شوند. به عبارت سادهتر میتوان گفت، این فناوری امکان این را میدهد که کدهای نوشته شده با زبانهای سطح بالاتر مانند C و ++C یا Rust به ماژول Wasm کامپایل شوند که مستقیماً در مرورگرهای مدرن قابل اجرا هستند.-
-
- 2 پاسخ
انتخاب شده توسط
کامبیز اسدزاده, -
-
معرفی زبان ++C و مزیت آن نسبت به دیگر زبانهای برنامهنویسی
کامبیز اسدزاده ارسال شده توسط یک موضوع در برنامه نویسی در C و ++C،
با توجه به پیشرفت و توسعهی زبانهای برنامهنویسی، به ویژه ظهور زبانهای جدید که جهت حل مشکلات زبانهای موجود و یا با هدف ایجاد انقلاب و یا سهولت برنامهنویسی، یکی از سوألاتی که مدام به ذهن میآید این است که چه زبانی را باید انتخاب کرد که از لحاظ بُعد علمی، اقتصادی و فنی بهترین انتخاب باشد تا با یک خیال راحت به یادگیری آن بپردازیم.-
-
- 0 پاسخ
انتخاب شده توسط
کامبیز اسدزاده, -
-
مدیریت منابع در ++C و آشنایی با اصطلاحات مدرن
کامبیز اسدزاده ارسال شده توسط یک مقاله در زبان برنامهنویسی ++C،
اصطلاحاتی که بهتر است در مورد C++ مدرن بدانید!
داشتم به این فکر میکردم که برخی از مبتدیان برنامهنویسی به خصوص کسانی که به سراغ زبانهایی مثل سی++ میروند معمولاً مستقیم وارد کد نویسی میشوند و به این گمان که آغاز برنامهنویسی یعنی نوشتن یک کد با خروجی «سلام، دنیا»! دریغ از آن که بعضی از موارد مانند «معرفی کامپایلر و انواع آن» و حتی «ساختار برنامههای نوشته شده تحت سیپلاسپلاس» و یا حتی «مدیریت حافظه» را در نظر بگیرند! من معمولاً در مقالات و آموزشهای خودم به این اشاره میکنم که قبل از هر چیز باید با ساختار برنامههای نوشته شدهی یک زبان آشنا شد و سپس به بررسی موارد دیگر مانند نحو زبان و یا دیگر ویژگیهای آن.-
-
- 0 پاسخ
انتخاب شده توسط
کامبیز اسدزاده, -
-
چشمانداز فنی برای کیوت ۶
کامبیز اسدزاده ارسال شده توسط نوشته وبلاگ در برنامه نویسی،
این چشمانداز احتمالاً برای دوستداران کتابخانهی قدرتمند Qt و طرفدارانش جذاب باشد! بنابراین من سعی کردهام تا نتایج پست رسمی کیوت را در رابطه با چشمانداز فنی برای آیندهی کیوت نسخهی ۶ است در اختیار شما قرار دهم.-
-
- 6 پاسخ
-
-
پشت پردهٔ تحریمهای اپل و وضعیت کنونی اپلیکیشنهای ایرانی
کامبیز اسدزاده ارسال شده توسط نوشته وبلاگ در نرمافزار و اپلیکیشن،
مدتی است در مورد مسدود شدن اپلیکیشنهای ایرانی برای iOS از طرف شرکت اپل خبرهایی به گوش میرسد که در سایتها و پایگاههای خبری از سمت نویسندگان و افراد غیرفنی تجزیه تحلیل و روشهای دور زدن آنها ارائه میشود. واقعیت بر دلیل نوشتن این مقاله این است که این فرصت و مشکلات کنونی آبی گلآلود برای سودجویانی شده است که کاربران از آن بیخبرند! هر روز یک توسعهدهنده یک سایت جدید راهاندازی میکند و با ادعای ارائه بستری نامحدود اقدام به تبلیغات میکند. بنده نیز به عنوان توسعهدهنده وظیفهی خودم میدانم که یک بار برای همیشه توضیحات شفاف و روشنی را در اختیار کاربران iOS قرار دهم تا متوجه اصلِ موضوع باشند (بعد از آن تصمیم با خود شما).😉-
-
- 0 پاسخ
-
-
-
فایل
-
پر بازدیدترین موضوعات
-
سیپلاسپلاس مدرن معرفی زبان ++C و مزیت آن نسبت به دیگر زبانهای برنامهنویسی
توسط کامبیز اسدزاده، در برنامه نویسی در C و ++C
- جدید
- سیپلاسپلاس
- (و 9 مورد دیگر)
- 0 پاسخ
- 14,318 بازدید
-
آموزش نصب و راه اندازی کتابخانه در ++C
توسط کامبیز اسدزاده، در برنامه نویسی در C و ++C
- کتابخانه
- سیپلاسپلاس
- (و 6 مورد دیگر)
- 0 پاسخ
- 12,789 بازدید
-
سیستم مدیریت محتوا ساخت و توسعهٔ وبسایت توسط ++C
توسط کامبیز اسدزاده، در برنامه نویسی در C و ++C
- سیپلاسپلاس
- وبسایت
- (و 3 مورد دیگر)
- 13 پاسخ
- 8,131 بازدید
-
سیپلاسپلاس مدرن چرا و چگونه باید ++C را یاد بگیریم؟
توسط کامبیز اسدزاده، در برنامه نویسی در C و ++C
- 0 پاسخ
- 7,548 بازدید
-
معرفی و راهاندازی OpenCL
توسط کامبیز اسدزاده، در کتابخانهی OpenCL
- نصب
- اوپن سی اِل
- (و 2 مورد دیگر)
- 0 پاسخ
- 6,653 بازدید
-
- 0 پاسخ
- 6,604 بازدید
-
سیپلاسپلاس مدرن قابلیتهای ممتاز و پیشرفتهٔ ++C در استانداردهای جدید
توسط کامبیز اسدزاده، در برنامه نویسی در C و ++C
- 2 پاسخ
- 5,476 بازدید
-
- 0 پاسخ
- 3,860 بازدید
-
- 0 پاسخ
- 3,450 بازدید
-
- 0 پاسخ
- 3,060 بازدید
-
-
موضوع ها
-
سوال: نمایش دیتا با استفاده از LineSeries در qml
توسط zahra، در فناوری Qt Quick و QML
- در انتظار بهترین پاسخ
- 0 رای
- 1 پاسخ
-
- 0 رای
- 1 پاسخ
-
سیستم مدیریت محتوا ساخت و توسعهٔ وبسایت توسط ++C
توسط کامبیز اسدزاده، در برنامه نویسی در C و ++C
- سیپلاسپلاس
- وبسایت
- (و 3 مورد دیگر)
- 13 پاسخ
- 8,131 بازدید
-
سوال: نرمافزار آنلاین اندروید در کیوت
توسط Ali71321، در فناوری Qt Quick و QML
- در انتظار بهترین پاسخ
- 0 رای
- 17 پاسخ
-
سوال: حداقل نسخه اندروید
توسط Ali71321، در محیط توسعه Qt Creator
- در انتظار بهترین پاسخ
- android development kit
- android
- (و 2 مورد دیگر)
- 0 رای
- 1 پاسخ
-
- 0 رای
- 1 پاسخ
-
sql server Replication
توسط Ali71321، در پایگاه داده SQL Server
- sql server
- sql replication
- (و 3 مورد دیگر)
- 1 پاسخ
- 252 بازدید
-
مشاوره و گفتگو با موضوع (نحوهٔ ارتقاء مهارتهای شغلی)
توسط کامبیز اسدزاده، در پادکستهای آموزشی
- ارتقاء شغلی
- مشاوره
- (و 3 مورد دیگر)
- 0 پاسخ
- 76 بازدید
-
- 0 پاسخ
- 128 بازدید
-
- 0 پاسخ
- 96 بازدید
-
نوشتههای ویژه
-
فرق بین کامپایل استاتیک و داینامیک
توسط کامبیز اسدزاده
فرق بین کامپایل استاتیک و داینامیک قبل از اینکه فرق بین ایستا (استاتیک) - Static و پویا (داینامیک) - Dynamic را بدانیم لازم است در رابطه با چرخهٔ زندگی نوشتن یک برنامه و اجرای آن آشنا شویم. هر برنامه برای اولین بار توسط یک محیط توسعه (Editor) یا IDE توسط برنامهنویسان انتخاب و به صورت فایل متنی قابل ویرایش میباشد. سپس فایل متنی که شامل کدهای نوشته شده توسط برنامهنویس تحت زبان برنامهنویسی مانند C، C++ و غیره... میباشد توسط کامپایلر به کد شیء ای تبدیل میشود که ماشین بتواند آن را درک کرد- 0 دیدگاه
- 3,014 مشاهده
-
پشت پردهٔ تحریمهای اپل و وضعیت کنونی اپلیکیشنهای ایرانی
توسط کامبیز اسدزاده
مدتی است در مورد مسدود شدن اپلیکیشنهای ایرانی برای iOS از طرف شرکت اپل خبرهایی به گوش میرسد که در سایتها و پایگاههای خبری از سمت نویسندگان و افراد غیرفنی تجزیه تحلیل و روشهای دور زدن آنها ارائه میشود. واقعیت بر دلیل نوشتن این مقاله این است که این فرصت و مشکلات کنونی آبی گلآلود برای سودجویانی شده است که کاربران از آن بیخبرند! هر روز یک توسعهدهنده یک سایت جدید راهاندازی میکند و با ادعای ارائه بستری نامحدود اقدام به تبلیغات میکند. بنده نیز به عنوان توسعهدهنده وظیفهٔ خودم میدانم که- 0 دیدگاه
- 915 مشاهده
-
چشمانداز فنی برای کیوت ۶
توسط کامبیز اسدزاده
این چشمانداز احتمالاً برای دوستداران کتابخانهٔ قدرتمند Qt و طرفدارانش جذاب باشد! بنابراین من سعی کردهام تا نتایج پست رسمی کیوت را در رابطه با چشمانداز فنی برای آیندهٔ کیوت نسخهٔ ۶ است در اختیار شما قرار دهم. تقریباً ۷ سال پیش کیوت نسخهٔ ۵.۰ منتشر شد! از آن زمان بسیاری از چیزها در دنیای اطراف ما تغییر پیدا کرده است. و اکنون وقت آن رسیده است که چشمانداز جدیدی را از نسخهٔ جدیدتر تعریف کنیم. بنابراین در این پست ما به معرفی مهمترین مواردی که به کیوت ۶ مرتبط است را میپردازیم. به نق- 6 دیدگاه
- 2,174 مشاهده
-
آیندهٔ توسعهٔ وب تحت فناوری WebAssembly
توسط کامبیز اسدزاده
با توجه به محبوبیت صنعت وِب، سالهاست زبانهای برنامهنویسی در این زمینه پیشرفتها و کاربردهای چشمگیری را داشتهاند، از جمله جاوااسکریپت (JS) به عنوان یک زبان قابل اجرا در داخل مرورگر شناخته میشود. هرچند بسیار محبوب و کاربردی است، اما این زبان قطعاً مشکلات خودش را دارد که برخی از آنها عدم انعطافپذیر بودن، سرعت پایین اجرا و همچنین انواع غیر ایمن آن است که این باعث میشود برای محاسبات و کارهای پیچیده جوابگو نباشد. هرچند گزینههایی مانند CoffeeScript و TypeScript وجود دارند و نسبتا- 2 دیدگاه
- 1,922 مشاهده
-
از تلفن همراه تا سکوی گیت هاب!
توسط Max Base
سلام. عدم دسترسی به یک سیستم مناسب و با خبر نبودن از حساب کاربری گیت هاب خود یکی از مشکلاتی بود که در این چند ساله برنامه نویسان با آن روبرو بودند. چک کردن حساب ایمیل در تلفن همراه می توانست تا حدودی به این موضوع کمک کند. اما یک اپلیکیشن اختصاصی برای این مورد می تواند این امر را به بهترین شکل پوشش دهد. بعد از کارهایی که برروی اپلیکیشن رسمی شرکت گیت هاب برای پلتفرم iOS انجام شد و خوشبختانه بدون هیچ مشکلی در بزرگ رویداد و کنفرانس شرکت و مایکروسافت - GitHub Universe 2019 در تاریخ Nov- 0 دیدگاه
- 457 مشاهده
وبلاگهای سایت ما
-
سلام و درود،
این اواخر راجع به مشورت و راهنماییها خیلی ساده به قضیه نگاه میشه، همه فکر کردن کشکه و فقط با دونستن JS یا QML میشه محصول ساخت. البته این مثال JS و QML یک مثال هست و این مسئله در همهٔ ابزارها و حول محور حوزهٔ کامپیوتر و نرمافزار به چشم میخوره، هرچند روی داستان ساده هست اما حتی پشت این کارهای ساده کلی زمان باید صرف بشه. همین گرفتن یک دادهٔ ساده از سمت سرور و تجزیه کردنش سمت JS نیاز به یک دانش خوب در مورد معماری Apiداره، نیاز به آگاهی از استانداردهای Http داره، نیاز به تخصص کافی در ریز به ریز مسائل داره، نیاز به آگاهی لازم در مورد شبکه و نحوهٔ مدیریتش داره، نیاز به درک خوب راجع به کلاسهای شبکه و نحوهٔ مدیریت بستهها داره و صدها جور مسئلهٔ دیگه.
یا راهنمایی نکنیم یا میکنیم همه چیز رو ساده نشون ندیم!
به خصوص برای کسایی که سالها یه چیز دیگه خوندن و الآن قراره وارد این حوزه بشن.
قشنگ واقعیت رو باید به نمایش گذاشت، و اگرنه به اشتراک گذاری چهارتا UI خفن که بگین با QML هم میشه کاری نداره، سه سوته میشه اینها رو طراحی کرد.اگر کسی اطلاعات کافی و پایهٔ تخصصی نداشته باشه و همینطور متکی به یک ابزار یا زبان پیش بره چه اتفاق میافته؟ از نظر من قطعاً بهتون از نظر تجربی آسیب میزنه، ساخت یک محصول واقعاً به این سادگیها نیست که تو گروههای تلگرامی داریم راجع بهش صحبت میکنیم! قضیه خیلی پیچیدهتر از اینهاست. فراموش نکن در این حوزه اگه یک کار ساده رو سریع انجام میدیم یا به نتیجه میرسونیم دلیلش به خاطر سالها زمان و تلاشه، امکان نداره کسی حتی با ۲..۳ سال تجربه یک کار رو سریع بتونه صفر تا صد انجام بده و مشکلی نداشته باشه یا نتیجهٔ اون در سطح یک استاندارد معتبر باشه.
ساخت محصول اصول داره که اولین مرحلش شفافسازی و نقشهٔ توسعه و ایدهپردازی درسته، نباید مثل بعضی از مشتریها باشه که پشت تلفن زنگ میزنن میگن یه سایت میخوایم یا یه اپلیکیشن چند میگیری و بعدش شروع کنن به چک و چونه زدن و شما هم کیف کنی بگی که آره دیگه مشتری دارم!
شما تا زمانی که جزء به جزء محصول رو آگاه نباشید، یعنی تا زمانی که دقیق متوجه نشید نیاز چی هست و روش حلش رو متوجه نباشید منطقی نیست که واردش بشید. چون همین مرحلهٔ نیازسنجی به قدری مهمه که فرآیند مسیر و نقشهٔ توسعهٔ یک محصول رو نشونتون میده و اگه درست تشخیص ندین و ابزارها و راهکارها رو درست انتخاب نکنید بی برو برگرد با مشکل مواجه میشید.
مشکلاتش میتونه به این صورت باشه:
- سردرگمی
- عدم توانایی کالبدشکافی مسئله
- عدم توانایی حل مسئله
- عدم توانایی انتخاب یک روش یا ابزار صحیح و مناسب
- عدم تعامل شما با مشتری
- عدم رضایت شما از حقالزحمه
- عدم رضایت مشتری از نتیجهٔ کار
- عدم توانایی در پاسخدهی به اعضا و شرکای کلیدی دیگه در محصولات تجاری و بزرگ!
- و هزاران مسئلهٔ دیگه که همشون نتیجهٔ تشخیص نا درسته.
- در کنارش مهمترین خاصیتی که پیدا میکنه این خواهد بود در اوج نادانی احساس خواهد کرد که همه چیز دان هست! به قولی همه چیز گیگ!از نظر من حداقل مواردی که (به طور خیلی خیلی خلاصه و محدود) نیاز هست تا یک متخصص بتونه پاسخگوی تصمیمگیری نقشهٔ توسعهٔ یک محصول برای مشتری در ابعاد مختلف و سطوح متفاوت از حوزههای موجود در قالب اصولی باشه به صورت زیر هستند:
۱- آشنا مبانی کامپیوتر که امر طبیعیه (شامل درک و فهم مسائل و نحوهٔ حلشون متناسب با پلتفرم اجرایی محصول)
۲- آشنا به ساختار نوع محصول استاندارد در یک حوزه مثل: وب، آیاواس، اندروید یا دسکتاپهای مختلف مثل لینوکس، مک و ویندوز، اینترنت اشیاء و دیگر موارد.
۳- آشنا به فلسفهٔ بکاند و فرانتاند یا ترکیبی از این دو به همراه ابزارهای مناسب.
۴- آشنا به اصول طراحی UI/UX به عنوان یک نیاز و یک فاکتور مهم در ساخت محصولی که وابسته به عملکرد کاربر داره و در حوزهٔ فرانتاند مهم و کاربردی هست.
۵- آشنا به اصول SOLID و امثالش مهم هستند.
۶- آشنا اصول برنامهریزی ساخت بانک اطلاعاتی، اینکه از چه بانک اطلاعاتیای استفاده کنی و چرا؟
۷- آشنا به ارتباطات دادهای، جداول و ارتباط بین فیلدها، جدوال و روشهای درست تبادل اطلاعات مابینی دادهها.
۸- آشنا و تسلط کافی به یک محیط توسعه و ادغام ابزارها و محیط طراحی برای هدف.
۹- آشنا به معماری ساختار و رابطهای برنامهنویسی (Api)
۱۰- آشنا به استانداردهای Http، درک و مدیریت درخواست، پاسخها و ...
۱۱- آشنا به الگوهای طراحی برنامهنویسی (DP)
۱۲- آشنا به روشهای نگهداری و آزمایش نرمافزار و کدها به خصوص درک مبحث Fault tolerance.
۱۳- آشنا به روشهای اطمینانسازی و ایمنسازی پردازشهای داخلی نرمافزار برای جلوگیری یا دشوار سازی نفوز و خرابکاری
۱۴- آشنا به روشها و معماریهای احراز هویت و نحوهٔ ادغامش با نرمافزار مثل:JWT, OAuth, AWS و غیره...
۱۵- آشنا به نوع پارادایمهای زبان برنامهنویسی، در قالبهای (دستوری) Imperative و (اعلانی) Declarative مثل OOP، functional و دیگر موارد.
۱۶- آشنا به سبک معماری نرمافزاری (Microservice یا مثلاً Monolith) مزایا و معایبشون.
۱۷- آشنا به سبک معماری طراحی مانند MVC در طراحی بدنهٔ محصول.
۱۸- آشنا به سبک و الگوهای طراحی ساختاری در بکاند مانند Builder، Abstract، Factory و غیره.
۱۹- آشنا به ساختار یک زبان (در صورتی که میخواین جوابگوی مسائلِ پیش آمده باشید) کالبدشکافی زیرپوستی و عمیق یک زبان مهمه.
۲۰- آشنا و درک کامپایلرها و مفسرها، تفاوتها و شیوههای عملکردیشون نسبت به کدهای بهینه شده و عادی.
۲۱- آشنا و درک مدلهای مختلفی از سیستمهای توزیع شده مثل IaaS، PaaS، SaaS یا FaaS.
۲۲- آشنا به ابزارهای ساخت و فرآیند کاری اونها مثل CMake، NMake، QMake و غیره.
۲۳- آشنا به روشهای مدیریت وابستگیهای نرمافزار و ابزارهای لازم برای بستهبندی بهتر خروجی.
۲۴- آشنا به روشهای کدنویسی قابل آزمایش (Unit Test) و استفاده از ابزارهایی مثل CTest, GTest, Catch2 و غیره.
۲۵- آشنا به توسعهٔ آزمون محور (Test Driven- Development)
۲۶- آشنا به گامها و شرایط نسخهنگاری و مراحل توسعهٔ نرمافزار (SDP)
۲۷- آشنا به روشهای امنیت در کد و توسعه به شیوههای بررسی از طریق Fuzz-Test، Sanitizer، آنالیزرهای پویا و ایستا و غیره...
۲۸-آشنا به قوائد طراحی بر پایهٔ خدمات مبتدی بر معماری ابری برای خدمات پیامی، وبسرویسها، پردازش و غیره.
۲۹- در سطوح وب آشنا به مکانیزم شاخص بندی، فاکتورهای SEO و شیوههای درست بهبود صفحات وب.
۳۰- آشنا به روشهای به کار گیری و پیادهسازی ثبت کنندهٔ وقایع در دل محصول و روشهای بازخورد برای توسعهٔ بهتر به همراه مانیتورینگ، نظارت و تریسینگ.
۳۱- در شرایط لزوم آشنا به نحوهٔ به کار گیری و دلیل استفاده از فناوریهایی مثل Redis، Memcached و غیره.
۳۲- آشنا و درک صحیح از مفاهیم همزمانی (Concurrency) و روشهای به کار گیری آن نسبت به زبان برنامهنویسی و شرایط مناسب استفاده.
۳۳- آشنا به سبک و قوائد و ساختار زبانهای برنامهنویسی و فرآیند ساخت و ترجمه.
۳۴- و تا صدها گزینهٔ دیگه میتونم لیست کنم اینجا که اگه انتخابتون زبانهای نزدیک به سیستم باشه این داستان در ادامهٔ این توضیحات سر به فلک میکشه نمونش کامپایلرها خودشون شونصد جور مباحث دارند، پلتفرمها ومعماریهای پردازندهای هم در این زبانها مهمن و شما حتی تا عمق سیستمعامل و رابطهای اونها و نحوهٔ رفتارشون باید اطلاعات کافی داشته باشید که هر کدوم به نوبهٔ خودشون هزاران صفحه میشه راجع بهشون کتاب معرفی کرد.این لیست چیزی بود که به زبان بسیار بسیار ساده شده و خیلی خلاصه به ذهنم رسید تا بدانید همچین هم الکی نیست ای عزیزانی که فتواهای صد من یه غاز میدین و این مسائل رو حل شده میدونید!
در ادامه اصل ماجرا خیلی فراتر از اینها هم هست که بخوای حساب کتاب کنی میبینی باید هفت خان رستم رو فتح کنی تا در تمامی سطوح پاسخگو باشی، این امر شدنی هست اما زمانی که شما محدود به یک موضوع باشید قطعاً درک همهٔ مسائل محدود و ناتوان در اجرای آن خواهید شد.
* وقتی میگم آشنا قطعاً در حد حروف الفبا کافی نیست، باید در حد نیاز تسلط و درک کافی ازشون وجود داشته باشه.
* همهٔ اینها رو باید در کمترین زمان ممکن نسبت به یک مشتری، محصول و نیاز تشخیص بدین و انتخاب کنید، به این کار میگن ارزیابی محصول بر اساس دانستههای فنی که تماماً متکی بر دانش و تجربهٔ شماست. (کارشناسی پروژه دقیقاً همین موضوع است).
* برای بهتر شدن و حرفهای تر شدن هم باید فراتر از اینها پیش برید و در قالب «مثلث دانش» بهبودش بدهید.
* محصولات معتبر جهانی حاصلِ چنین نقشههای پیشبردی هستند و اصول تخصصی و مهندسی رو رعایت میکنن تا به یک درجهٔ کیفی موفق و زبان زد میرسند. شاید این مسائل از نظر یک برنامهنویس ساده و نه چندان با تجربه مهم نباشه، اما در سطح کیفی یک محصول نرمافزاری همهٔ این مسائل مهم تلقی میشوند.برای همین میگم گولِ توصیههای ساده و ظاهر چهارتا برنامه یا کیوت، داتنت و امثال این ابزارها رو نخورید، پشت همهٔ نیازهای یک محصول به فاکتورهای بسیاری باید توجه کنید. فردا بخواهید بدون آگاهی در این مسائل وارد پروژههایی بشید که به ظاهر ساده هستند یا باید دست به گریبان دیگران باشید و توی گروهها مدام سوأل پرسی کنید و یا باید بیخیال آن شوید؛ چون به هیچ یک از این فاکتورهای مورد نیاز توسعه توجه نکردین! پس این اصول رو به عنوان سر نخ مطالعه کنید تا بخش بزرگی از سرگردانیهای شما حل شود.
این مواردی که این جا اشاره کردم، همونطور که گفتم بخش بسیار کوچکی از دنیای نیازمندیهای ساخت و ساز و طراحی یک محصول واقعی در پیرامون نرمافزار و کامپیوتر هست، اما یک دلگرمی بدم به کسایی که با خودشون فکر میکنند چنین مسیر یا نقشهای از راه که قراره پیش بگیرند سخته و همهٔ ماجرا این نیست (جزئیات رو در کتابها، موقعیت و فرصتهای شغلی، شکستها، موفقیتها و آزمون و خطاها یاد خواهند گرفت) و نتیجهٔ اون میتونه مطابق همین حکایت زیر باشه:
نقل قولحکایت برنامهنویسان، ابزارها، تجربه و تخصصی که در بازار بی ارتباط با آن نیست!
یک روز موتور یک کشتی بزرگی خراب شد.
مهندسان زیادی تلاش کردند تا مشکل را حل کنند اما هیچکدام موفق نشدند!
سرانجام صاحبان کشتی تصمیم گرفتند مردی را که سالها تعمیر کار کشتی بود، بیاورند...وی با جعبه ابزار بزرگی آمد و بلافاصله مشغول بررسی دقیق موتور کشتی شد.
دو نفر از صاحبان کشتی نیز مشغول تماشای کار او بودند.
مرد از جعبه ابزارش آچار کوچکی بیرون آورد و با آن به آرامی ضربه ای به قسمتی از موتور زد، بلافاصله موتور شروع به کار کرد و درست شد.یک هفته بعد صورتحسابی ده هزار دلاری از آن مرد دریافت کردند، صاحب کشتی با عصبانیت فریاد زد:
او واقعا هیچ کاری نکرد!
ده هزار دلار برای چه می خواهد بگیرد؟بنابراین از آن مرد خواستند ریز صورتحساب را برایشان ارسال کند؟
مرد تعمیر کار نیز صورتحساب را اینطور برایشان فرستاد:ضربه زدن با آچار: ۲دلار
تشخیص اینکه ضربه به کجا باید زده شود: ۹۹۹۸ دلارو ذیل آن نیز نوشت:
تلاش کردن مهم است.
اما دانستن اینکه کجای زندگی باید تلاش کرد میتواند همه چیز را تغییر بدهد.- ادامه مطلب...
-
- 0 دیدگاه
-
یک سوأل بسیار مهم و پر مخاطب در بارهٔ زبانبرنامهنویسی سیپلاسپلاس در سالهای اخیر این است که «آیا جایگزینی برای این زبان وجود دارد و یا قابل جایگزین است»؟
در بسیاری از پاسخها نشان از گزینههایی مانند Go، Rust و D دیده میشود که بهتر است نسبت به نظرات متخصصهای برنامهنویسی به این موضوع پرداخته شود، ابتدا باید در نظر گرفت که هر ابزاری میتواند جایگزینی داشته باشد اما شرایط و نحوهٔ استفادهٔ آن در رابطه با نیاز متفاوت است.
اخیراً سوألات زیادی در این موضوع دیده شده است که میگویند، Rust یک زبان برنامهنویسی ایمن، سریع و سیستمیِ جایگزین برای سیپلاسپلاس است! اما آیا واقعاً اینگونه است یا صرفاً ما بر اساس احساسات و اشتیاق به بهروز شدن به این موضوع میپردازیم؟
پاسخ برای این سوأل به صورت زیر در مدلهای مختلف میتواند مطرح شود که نتیجهگیری و تصمیم از خلاصهٔ آن به عهدهٔ خودِ شماست.
من بر این باورم که زبانهای برنامهنویسی همه و همه در حال بهروز رسانی و بهتر شدن نسبت به نسخهها، استانداردها، و نسلهای گذشتهٔ خودشان هستند و به هیچ عنوان هیچ زبانی تا به امروز به طور جدی منسوخ شده اعلام نشده است.
برای درک این مطلب بهتر است ابتدا به واژهٔ «منسوخ شده» یا «Deprecated» بپردازیم، این واژه زمانی مورد استفاده قرار میگیرد که شرایط زیر بر آن حاکم باشد:
- گزینهٔ مورد نظر به طور رسمی از طرف سازنده، پشتیبان یا صاحب آن بد دانسته شده و رسماً کنار گذاشته شود.
- گزینهٔ مورد نظر بهروز رسانی نشود و آخرین بهروز رسانی آن نیز شامل مشکلاتی باشد که بعد از مدتها نیز حل نشده باشد.
- گزینهٔ مورد نظر دیگر مورد استفاده قرار نگیرد و کاربردی هم در بین رقبای خود نداشته باشد.
- گزینهٔ مورد نظر دیگر پشتیبانی نشود و به قولی مُرده باشد.
- گزینهٔ مورد نظر به علاوهٔ این که شامل این موارد میشود، باید دارای یک جایگزین مناسب و عالی باشد.
با توجه به این معیارها و با در نظر گرفتن رسالت هر یک ابزارها باید به آن توجه کرد که هر زبان یا ابزار برنامهنویسی خارج از این، در مرحلهٔ پیشرفت قرار گرفته است که آن نشان دهندهٔ زنده بودن و کاربردی بودن آن است.
از طرفی، زبانی مثل سیپلاسپلاس جایگزین نمیشود چرا که هیچ یک از دلایل و معیارهای بالا شامل حال آن نمیشود، اتفاقاً برعکس این زبان دارای ویژگیهای معیاری زیر است:
- این زبان به طور رسمی توسط کمیتهٔ استانداردسازی که متعلق به هیچ یک از شرکتهای غول صنعتی و یا خصوصی نمیباشد پشتیبانی میشود.
- این زبان به طور مداوم در حال بهروز رسانی است و کاربردهای چند-منظوره و همه جانبهٔ خود را داراست.
- این زبان از ویژگیهای از ویژگیهای بسیار خوب به همراه سریعترین بازدهیها را داراست.
- این زبان رقیبهای بسیاری دارد، اما هیچ کدام از آنها هنوز در عمل و دامنهٔ وسیعی موفق به نمایش عملکرد بهتری نبودهاند.
- این زبان همانند دیگر ابزارها دارای مشکلاتی است، اما با توجه به پوشش و پشتیبانی از ویژگی BC در روند استانداردسازی و بهروز رسانی به خوبی از پس آنها بر آمده است.
برای مثال، زبان جاوا یکی از بهترین زبانهای برنامهنویسی است و خیلی از شرکتها مانند گوگل در سیستمهای توزیع شده از آن استفاده میکنند. اما به معنای این نیست که به سرعت سی++ میرسد و در حد مقایسه با آن است. این زبان میتواند دهها و صدها برابر کندتر از سی++ باشد و این مربوط به طراحی، ساختار و مسائل مربوط به زبان است. از طرفی سیپلاسپلاس محبوب است زیرا که ویژگیهای زیر را دارد و طی سالهای بسیاری آن را ثابت کرده است:
- کارآیی (پرفرمنس) و سرعت فوقالعادهٔ این زبان، البته خیلی از زبانها ادعا میکنند که همچین ویژگیای را دارند که در عمل نتیجهٔ جالبی مشاهده نمیشود.
- ذاتِ چند-سکویی و چند-منظوره بودن آن، حداقل همهٔ سیستمها میتوانند کدهای سی++ را کامپایل و اجرا کنند.
- این زبان به راحتی میتواند با زبانها و فناوریهای دیگری ارتباط برقرار کرده و با آنها تعامل داشته باشد.
- این زبان به عنوان یکی از کممصرفترین زبانهای برنامهنویسی از نظر مصرف انرژی محسوب میشود.
- بسیاری از مهندسین این زبانها را به صورت مقطعی و بارها دیده و با آن آشنا هستند.
- کتابخانههای پیشفرض استاندارد STL و دیگر کتابخانههای سی++ بسیار قدرتمند و گسترده هستند.
- کتابخانههای نوع سوم (Third-Party) بسیار قدرتمند و بهروز هستند.
- اولویتهای سیستمهای یونیکس و حتی ویندوز اکثراً بر روی C و ++C است.
- بسیاری از وابستگیهای ایجاد شده در سالهای بسیار طولانی بر اساس سی و سی++ بوده و بازنگری و بازنویسی آنها مشروط بر این که رابطها باید بازنویسی شود بسیار سخت و کاری مشابه اختراع دوبارهٔ چرخ است.
- عملکرد تا حدی قابل پیشبینی است و میتواند آن را درک کرد، چیزی که در زبانهایی مانند جاوا، سیسارپ و گو نمیتواند پیشبینی کرد چرا که پیشبینی چرخهٔ GC دشوار است، هیچ رقیب جدیای در این باره در سطح سی++ وجود ندارد که مدیریت حافظه را برای شما در قالب یک RAII ارائه کند، هرچند در مورد Objective-C و Rust میتوان آنها را به صورت جداگانه مورد بررسی قرار داد و نه عین آن.
- پشتیبانی از پارادایم (سبک)های طراحی را سی++ به خوبی پشتیبانی میکند، برای مثال برنامهنویسی عمومی در زمان کامپایل را به خوبی ارائه میکند.
- پشتیبانی از برنامهنویسی سیستمی و سطح پایین در این زبان یک مزیتی دیگری است که در کنار تمامی ویژگیهای سطح بالای خود ارائه میکند.
- اما در این میان زبانهایی مثل Rust، Go، Swift و غیره ادعای جایگزینی را دارند اما ادعاهای فنی به تنهایی کافی نیستند، در دسترس بودن گسترده از جامعه به اندازهٔ کافی به همراه جامعهٔ معتمد به آن مهم است.
- علاوه بر ویژگیهای فنی زبان سی++، یک نقطه قوت بسیار مهم این زبان در بحث غیر فنی آن است، در واقع در پشت این زبان نه یک پیادهسازی محدودی وجود دارد و نه یک سازمان که در آینده در مورد آن تصمیم بگیرد و آن را کنترل کند. در حالی که تمامی زبانهای مطرح و ادعا کننده داخل یک چهارچوبی کنترل میشوند که به شدت آیندهٔ آنها را تیره و تار میکند. به طور کلی آزاد بودن یک ابزار و قدرت یک جامعه فارغ از جغرافیا، سازمان، نژاد و زبان یک قدرت بسیار خارقالعادهای را برای یک ابزار به ارمغان میآورد که به تنهایی بسیار اهمیت دارد.
- در این اواخر بسیاری از مهندسین به فکر بازنویسی بسیاری از موارد شدن و تحقیقات نشان میدهد ابزارهایی گرافیکی بسیار قدرتمند و سریع که اخیراً طراحی شدهاند، مانند وُلکان که با سی++ نوشته شده است زمانی میتوانند با راست و زبانهای دیگر امروزی بازنویسی شوند که یک سیستمعامل جدید با زبانهای جدید ساخته شود! بنابراین صرفاً میتوان یک نسخهٔ Wrapper یا همان (پوشنده) چرا که تقریباً همهٔ سیستمعاملهای مدرن امروزی با زبانهای سی و سی++ نوشته شدهاند. از طرفی تولید یک سیستمعامل بسیار پر خطر است و سرمایهگذاری کلان، زمان و هزینههای بسیاری را میطلبد و تا زمانی که چنین نرمافزارهایی تحت سلطهٔ زبانهایی مانند سی++ قرار گرفته باشند پادشاهی سیپلاسپلاس ادامه خواهد داشت.
نکتهٔ پایانی
من معتقدم هر ابزار و زبانهای برنامهنویسی جایگاه و شرایط استفادهٔ خودشان را شامل میشوند، دقیقاً مانند ابزارهای موجود در یک جعبهابزار بهتر است ابزارهای خود را طوری بچینید که در جای لازم از مناسبترین آنها استفاده کنید. با این حال زبانها و ابزارهای مانند سی یا سی++ طی سالها ثابت کردهاند که معمولاً در همهٔ حوزهها غالب هستند و میتواند هر کاری را که بخواهید با آنها انجام دهید و یا با یک جایگرین مناسب آن را مدیریت کنید و این بستگی به مهارت و انتخاب شخصی شما دارد.
مقالات مرتبط با این موضوع که میتواند به عنوان مکملی از پیش تعریف شده برای شما مفید باشد:
- ادامه مطلب...
-
- 0 دیدگاه
-
یک حرکت خوشحال کننده در آغاز سال ۲۰۲۱ با عنوان آزاد شدن خدمات گیتهاب برای کشور عزیزمان صورت گرفته است؛ ساعاتی پیش «نت فرایدمن»، مدیرعامل گیتهاب اعلام کرد که این شرکت مجوزی از دولت آمریکا دریافت کرده تا خدماتش را به توسعهدهندگان ایرانی ارائه دهد. این سرویسها میتواند در اختیار افراد یا سازمانها و به شکل رایگان یا اشتراکی قرار گیرد.
به قول مدیر عامل گیتهاب، همهٔ توسعهدهندهها باید در استفاده از گیتهاب آزاد باشند و مهم نیست که در کجا زندگی میکنند.
البته، با توجه به سوابق تحریمی پیشنهاد میشود در زمان استفاده از این خدمات، از مخازن کدهای خودتان نسخهٔ پشتیبان تهیه کنید تا در صورت اعمال محدودیت با مشکل خاصی مانند از دست دادن مخازن و یا عدم دسترسی به مخازن مواجه نشوید.
منبع خبر اصلی : https://github.blog/2021-01-05-advancing-developer-freedom-github-is-fully-available-in-iran/
- ادامه مطلب...
-
- 0 دیدگاه
-
هنگامیکه شما برای اولین بار از C به CPP مهاجرت می کنید، یا اصلا برنامه نویسی را قصد دارید با CPP شروع کنید، با مفاهیم متعددی روبرو خواهید شد که شاید برای شما جالب باشند که بدانید، این ایده ها چطور شکل گرفتند، چطور به CPP افزوده شدند و اهمیت آن ها در عمل (هنگام برنامه نویسی و توسعه نرم افزار) چیست. در این پست وبلاگی IOStream، به این خواهیم پرداخت که ایده Overloading و Template و Auto Deduction چطور از CPP سر در آوردند.
همانطور که شما ممکن است تجربه کرده باشید، هنگامیکه برنامه نویسی و توسعه نرم افزاری را با C شروع می کنید، برنامه شما چیزی بیش از یک مجموعه بی انتها از توابع و استراکچرها و متغیرها و اشاره گرها و ... نخواهند بود.
از همین روی شما مجبور هستید مبتنی بر ایده مهندسی نرم افزار و پارادیم برنامه نویسی ساخت یافته، برای هر کاری یک تابع منحصربفرد پیاده سازی کنید. این تابع باید از هر لحاظی از قبیل نام، نوع ورودی ها، نوع خروجی و حتی نوع عملکرد منحصربفرد باشد تا بتواند یک کار را به شکل صحیح کنترل کند که همین مسئله می تواند در پیاده سازی برخی نرم افزارها، انسان را در جهنم داغ و سوزان قرار بدهد. مثلا پیاده سازی یک برنامه محاسباتی مانند ماشین حساب که ممکن است با انواع داده های محاسباتی مانند عدد صحیح (Integer) و عدد اعشاری (Float) رو به رو شود.
از همین روی فرض کنید، ما قرار است یک عمل محاسباتی مانند جمع از برنامه ماشین حساب را پیاده سازی کنیم. برای اینکه برنامه به شکل صحیحی کار کند، باید عمل جمع یا همان Add برای انواع داده های موجود از قبیل عدد صحیح و اعشاری پیاده سازی شود. اگر شما این کار را انجام ندهید، برنامه شما به شکل صحیحی کار نخواهد کرد (یعنی نتایج اشتباه ممکن است برای ما تولید کند). در تصویر زیر، نمونه این برنامه و توابع مرتبط با آن پیاده سازی شده است:
#include <stdio.h> int AddInt(int arg_a, int arg_b) { return arg_a + arg_b; } float AddFloat(float arg_a, float arg_b) { return arg_a + arg_b; } double AddDouble(double arg_a, double arg_b) { return arg_a + arg_b; } int main(int argc, const char* argv[]) { int result_int = AddInt(1, 2); float result_float = AddFloat(10.02f, 21.23f); double result_double = AddDouble(9.0, 24.3); printf("Result Integer: %d", result_int); printf("Result Float: %f", result_float); printf("Result Double: %lf", result_double); return 0; }
به برنامه بالا دقت کنید. ما سه تا تابع Add با نام های منحصربفرد داریم که سه نوع داده مجزا را به عنوان ورودی دریافت می کنند، سه نوع نتیجه مجزا بازگشت می دهند، اگرچه پیاده سازی آن ها کاملا مشابه هم دیگر است و تفاوتی در پیاده سازی این سه تابع وجود ندارد.
ولی به هر صورت، اگر به خروجی دیزاسمبلی برنامه مشاهده کنید، دلیل این مسئله را متوجه خواهید شد که چرا هنگام برنامه نویسی با زبان C، به نام های منحصربفرد نیاز است، چون اگر توابع نام های مشابه با هم داشته باشند، لینکر نمی تواند به دلیل تداخل نام (Name Conflict)، آدرس آن ها را محاسبه یا اصطلاحا Resolve کند.
همانطور که در تصویر بالا خروجی دیزاسمبلی برنامه Add را مشاهده می کنید، اگر توابع نام مشابه داشتند، در هنگام فراخوانی (Call) تابع Add تداخل رخ می داد، چون دینامیک لودر سیستم عامل دقیقا نمی داند که کدام تابع را باید فراخوانی کند. برای همین نیاز است وقتی برنامه نوشته می شود، نام توابع در سطح کدهای اسمبلی و ماشین منحصر بفرد باشد.
به هر صورت، به نظر شما آیا راهی وجود دارد که ما پیاده سازی این نوع توابع را ساده تر کنیم یا حداقل بار نامگذاری آن ها را از روی دوش توسعه دهنده و برنامه نویس برداریم؟ بله امکان این کار وجود دارد. مهندسان CPP با افزودن ویژگی Overloading و Name Mangling یا همان بحث Decoration مشکل برنامه نویسان در پیاده سازی توابع با نام های منحصربفرد را حل کردند (البته کاربردهای دیگر هم دارد که فعلا برای بحث ما اهمیت ندارند).
ویژگی اورلودینگ در CPP به ما اجازه خواهد داد یک تابع با عنوان Add پیاده سازی کنیم که تفاوت آن ها فقط در نوع ورودی و نوع خروجی است. به عنوان مثال، در قسمت زیر، کد برنامه Add را مشاهده می کنید که با قواعد CPP بازنویسی شده است.
#include <iostream> int Add(int arg_a, int arg_b) { return arg_a + arg_b; } float Add(float arg_a, float arg_b) { return arg_a + arg_b; } double Add(double arg_a, double arg_b) { return arg_a + arg_b; } int main(int argc, const char* argv[]) { int result_int = Add(1, 2); float result_float = Add(10.02f, 21.23f); double result_double = Add(9.0, 24.3); std::cout << "Result Integer: " << result_int << std::endl; std::cout << "Result Float: " << result_float << std::endl; std::cout << "Result Double: " << result_double << std::endl; return 0; }
همانطور که مشاهده می کنید، ما اکنون سه تابع با نام Add داریم. ولی شاید سوال پرسیده شود که چطور لینکر متوجه تفاوت این توابع با یکدیگر می شود درحالیکه هر سه دارای یک نام واحد هستند. اینجاست که مسئله Name Mangling یا همان Decoration نام آبجکت ها در CPP مطرح می شود. اگر شما برنامه مذکور را دیزاسمبل کنید، متوجه تفاوت کد منبع (Source-code) و کد ماشین/اسمبلی (Machine/Assembly-code) خواهید شد.
همانطور که در خروجی دیزاسمبلی برنامه اکنون مشاهده می کنید، توابع اگرچه در سطح کد منبع دارای نام مشابه با یکدیگر بودند، اما بعد کامپایل نام آن ها به شکل بالا تبدیل می شود. به این شیوه نام گذاری Name Mangling یا Decoration گویند که قواعد خاصی در هر کامپایلر برای آن وجود دارد.
این ویژگی موجب می شود در ادامه لینکر بتواند تمیز بین انواع توابع Add شود. به عنوان مثال، تابع نامگذاری شده با عنوان j__?Add@YAHH@Z تابعی است که به نوعی از تابع Add اشاره دارد که ورودی هایی از نوع عدد صحیح دریافت می کند. این شیوه نامگذاری خلاصه موجب خواهد شد لینکر بتواند به سادگی بین توابع تمایز قائل شود.
با این حال هنوز یک مشکل باقی است، و آن هم تکرار مجدد یک پیاده سازی برای هر تابع است. به نظر شما آیا راهی وجود دارد که ما از پیاده سازی مجدد توابعی که ساختار مشابه برای انواع ورودی ها دارند، جلوگیری کنیم؟ باید بگوییم، بله. این امکان برای شما به عنوان توسعه دهنده CPP در نظر گرفته شده است.
ویژگی که اکنون به عنوان Templateها در مباحث Metaprogramming یا Generic Programming استفاده می شود، ایجاد شده است تا این مشکل را اساساً برای ما رفع کند. با استفاده از این ویژگی کافی است، طرح یا الگوی یک تابع را پیاده سازی کنید، تا در ادامه خود کامپایلر مبتنی بر ورودی هایی که به الگو عبور می دهید، در Backend، یک نمونه تابع Overload شده مبتنی بر آن الگو برای نوع داده شما ایجاد کند.
#include <iostream> template <typename Type> Type Add(Type arg_a, Type arg_b) { return arg_a + arg_b; } int main(int argc, const char* argv[]) { int result_int = Add(1, 2); float result_float = Add(10.02f, 21.23f); double result_double = Add(9.0, 24.3); std::cout << "Result Integer: " << result_int << std::endl; std::cout << "Result Float: " << result_float << std::endl; std::cout << "Result Double: " << result_double << std::endl; return 0; }
به عنوان مثال، در بالا تابع Add را مشاهده می کنید که نوع داده ورودی این تابع و حتی نوع خروجی آن مشخص نشده است و در قالب Typename به کامپایلر معرفی شده است. این یک الگو برای تابع Add است. کامپایلر اکنون می تواند مبتنی بر ورودی هایی که به تابع هنگام فراخوانی یا اصطلاحا Initialization عبور می دهیم، یک نمونه تابع Overload شده از آن الگو ایجاد کند و در ادامه آن را برای استفاده در محیط Runtime فراخوانی کند. حال اگر برنامه بالا را دیزاسمبل کنید، مشاهده خواهید کرد که کامپایلر از همان قاعده Overloading استفاده کرده است تا نمونه ای از تابع Add متناسب با نوع ورودی هایش ایجاد کند.
هنوز می توان برنامه نویسی با CPP را جذاب تر و البته ساده تر کرد، اما چطور؟ همانطور که در قطعه کد بالا مشاهده می کنید، هنوز ما باید خود تشخیص دهیم که نوع خروجی تابع قرار است به چه شکل باشد. این مورد خیلی مواقع مشکل ساز خواهد بود.
برای حل این مسئله، در CPP مبحثی در نظر گرفته شده است که آن را به عنوان Auto Deduction می شناسیم که سطح هوشمندی کامپایلر CPP را بالاتر می برد. در این ویژگی خود کامپایلر است که مشخص می کند نوع یک متغیر مبتنی بر خروجی که به آن تخصیص داده می شود، چیست. به عنوان مثال، شما می توانید برنامه بالا را به شکل زیر بازنویسی کنید:
#include <iostream> template <typename Type> auto Add(Type arg_a, Type arg_b) { return arg_a + arg_b; } int main(int argc, const char* argv[]) { auto result_int = Add(1, 2); auto result_float = Add(10.02f, 21.23f); auto result_double = Add(9.0, 24.3); std::cout << "Result Integer: " << result_int << std::endl; std::cout << "Result Float: " << result_float << std::endl; std::cout << "Result Double: " << result_double << std::endl; return 0; }
با استفاده از ویژگی Auto Deduction و کلیدواژه Auto در برنامه، خود کامپایلر در ادامه مشخص خواهد کرد که تابع Add چه نوع خروجی دارد و همچنین نوع متغیرها برای ذخیره سازی خروجی Add چه باید باشد. به عبارتی اکنون تابع Add هم Value و هم Data type را مشخص می کند که این موجب می شود برنامه نویسی با CPP خیلی ساده تر از گذشته شود. حال اگر به نمونه برنامه آخر نگاه کنید و آن را با نمونه C مقایسه کنید، متوجه خواهید شد که CPP چقدر کار را برای ما ساده تر کرده است.
در این پست به هر صورت، قصد داشتم به شما نشان دهم که نحوه تحول CPP به صورت گام به گام چطور بوده است و البته اینکه پشت هر ویژگی در CPP چه منطق کلی وجود دارد. امیدوارم این مقاله برای شما مفید بوده باشد. نمونه انگلیسی این مقاله را می توانید در این آدرس (لینک) مطالعه کنید.
میلاد کهساری الهادی
-
سلام.
عدم دسترسی به یک سیستم مناسب و با خبر نبودن از حساب کاربری گیت هاب خود یکی از مشکلاتی بود که در این چند ساله برنامه نویسان با آن روبرو بودند.
چک کردن حساب ایمیل در تلفن همراه می توانست تا حدودی به این موضوع کمک کند. اما یک اپلیکیشن اختصاصی برای این مورد می تواند این امر را به بهترین شکل پوشش دهد.
بعد از کارهایی که برروی اپلیکیشن رسمی شرکت گیت هاب برای پلتفرم iOS انجام شد و خوشبختانه بدون هیچ مشکلی در بزرگ رویداد و کنفرانس شرکت و مایکروسافت - GitHub Universe 2019 در تاریخ November 13-14, 2019 رونمایی شد. به عنوان یکی از اعضای شرکت این نوید را می دهم که نوبت به آن رسید تا اپلیکیشن برای اندروید نیز پیاده شود.
در حال حاضر این اپلیکیشن در حال توسعه است و هنوز رونمایی نشده است.
برای این اپلیکیشن میزان پشتیبانی API 21+ Android device در نظر گرفته شده است و خواهد توانست از نسخه Android 5.0 به بالا را پشتیبانی کند.
می توانید پیشنهادات و نظرات خود را نیز ایمیل کنید. Max [@] Asrez {.DOR.} com
Hi, I'm Max Base.
GitHub team did work on the official GitHub application for the iOS platform and fortunately unveiled at the big event and conference(GitHub Universe 2019 on November 13-14, 2019). As a member of the company, I have the promise that the app will launch for Android.
This app is currently under development and has not been unveiled yet.
This app is designed to support Android 21+ API and will support Android 5.0 or later.
You can also email your suggestions and comments. Max [@] Asrez {.DOR.} com
Best,
Max Base
با تشکر
- ادامه مطلب...
-
- 0 دیدگاه
-
پس از انتشار مقاله اختصاصی Intel در زمینه گرافیک مجتمع نسل جدید آن با نام Gen 11 و پس از آن جنجالی که با اولین بنچمارک در رزولوشن 1080p ادامه یافت، در تعطیلات نوروزی حسابی سر و صدایی به پا کرده است؛ این تراشه گرافیکی مجتمع در چند پلتفرم پردازشی CPU محور اینتل نصب خواهد شد و بد نیست بدانید که اولین نسل با نام Ice Lake شناخته خواهند شد.
اینتل به تازگی یک درایور جدید برای تراشه های گرافیکی خود در ویندوز 10 را منتشر کرده است که به همراه داشبورد و برنامه نرم افزاری جدیدی است که به تازگی اخبار آن را برای شما عزیزان پوشش داده بودیم؛ اما نکته ای که در این درایور به چشم می خورد، لو رفتن عمدی یا سهوی اسامی برخی از CPU و تراشه های گرافیکی داخلی است که اینتل به زودی معرفی خواهد کرد.
در این لیست 13 نوع تراشه با معماری جدید گرافیکی Gen11 به چشم می خورند که از نسل Ice Lake خواهند بود. گرافیک مجتمع Iris Plus Graphics 950 قوی ترین پردازشگر این نسل است که دارای 64 واحد EU خواهد بود. این تراشه گرافیکی در پردازنده های Core i7 و Core i9 نیز نصب خواهد شد. گرافیک دوم با نام Iris Plus Graphics 940 شناخته می شود که در پردازنده های Core i5 نیز مورد استفاده قرار می گیرند. Iris Plus Graphics 940 ها با همین تعداد واحد EU دارای فرکانس پایین تری هستند.
سپس Iris Plus 930 و Iris Plus 920 را شاهد هستیم که تعداد واحد های EU آنها نیز 48 و 32 عدد است. iGPUهای Gen11 همچنان در مدل های کلیدی GT1 و GT2 معرفی می شوند. برای اطلاعات بیشتر به زمان بیشتری نیاز داریم. شایان ذکر است که لیتوگرافی تولید در این نسل به 10 نانومتری کاهش یافته است.
- ادامه مطلب...
-
- 0 دیدگاه
-
- 4
نوشته - 0
دیدگاه - 3209
مشاهده
نوشتههای اخیر
دو هفته پیش، نشست ۲۰۱۸ سیپلاسپلاس آغاز شد. شرکت کنندهها مدالهای خودشان را دریافت کردند چرا که همه چیز با هماهنگی بسیار خوبی به پایان رسید. این رویداد به عنوان یکی از چندین رویداد مهم
C++
بشمار میرود که هرساله توسط حامیان و علاقهمندانش برگزار میشود.سخنان کلیدی
امسال در این رویداد سه یادداشت کلیدی وجود داشت، که با حضور Andrei Alexandrescu ،Lisa Lippincott و Nicolai Josuttis ارائه شد.
اولین سخنران Andrei Alexandrescu بود، او این کنفرانس را با افکار و اندیشههای خودش برای شروع آغاز کرد عنوان موضوع آن به بَد بودنِ کپی
constexpr
ازstatic if
اشاره میکرد. او یک سخنران سرگرم کننده است، بنابراین سخنرانی او بسیار طبیعی در مورد یادداشتهای خودش منعکس میشد. همچنین او به عنوان یک توسعهدهندهٔ ++C به نقاط بسیاری اشاره کرد که کمیتهٔ استاندارد سازی زبان حرفهای او را تایید میکرد.سخنران دوم Lisa Lippincott روز دوم را با یک سخنرانی آغاز کرد که دیدگاههای مختلفی در مورد محاسبات و منطق که در آن به کار میرود ارائه داد. زمانی که مُجری لیزا را دعوت کرد، میدانست که این موضوع به عنوان یک نکته مهم برای فکر کردن است، چیزی که همه نمیتوانند به طور مستقیم آن را درک کنند و به آن دسترسی پیدا کنند. اما این تلنگری برای نحوهٔ درک کُد از دیدگاه ریاضی و دیدگاه جدیدی بود.
سخنران سوم و آخر Nicolai Josuttis بود که در مورد، او اولین سخنران در نشست Hartmut Kaiser در سال ۲۰۱۴ بود. در آن سخنرانی بسیار خوب درخشیده، بنابراین در قسمت سوم نقصهایی را با جزئیات در مورد نقاط خشن ++C نشان داد. این سخنرانی بسیار صادقانه بود! چرا که بسیاری از جزئیات خشن بودن سیپلاسپلاس را عنوان کرد که همگی با آن موافق بودند.
مذاکرات، مسابقه و گفتگوهای چند دقیقهای
جلسات و رویدادهای مرتبط با ++C همیشه گفتگوهای بسیار خوبی دارد، و با یک مسیر مشخص که هدفش آوردن سخنرانان جدید با دیدگاههای جدید است برگزار میشود. بازخورد سخنرانها در این رویداد خوب بود چرا که به برخی از نکات در مورد چگونگی بهبودها اشاره کردند.
تصویر بالا مربوط به Hana Dusíková است که میتوان به آن بهترین نمره را داد. بهترین سخنرانی هم مربوط به Andrei Alexandrescu بود که دنبال شد. در اولین عصر این رویداد، امتحان (Quiz) برجستهترین مورد رویداد در آن روز بود. سازماندهی آن توسط Diego و اسپانسری آن توسط Conan است که برای چند سال اخیر حمایت شده است. به نظر میرسید که سوالات امتحانی این سال سختتر از سوالات رویداد قبلی در سال گذشته بوده است. اما بار دیگر این سرگرمی ترکیب بسیار خوبی با ترس از سی++ را داشت.
هر یک از سوالات امتحانی یک خروجی از کُد را تولید میکردند، که هر گروه باید برای کسب امتیاز آن را مینوشتند. ده نوع کُد امتحانی وجود داشت که تهیه کنندهٔ گزارش برای به تصویر کشیدن آنها زیاد خوب عمل نکرده است. بنابراین تصویر زیر مربوط به سوالات چالشی در مورد سیپلاسپلاس است:
گفتگوهای کوتاه در طی جلسات سیپلاسپلاس صورت میگیرد. اما در سالهای گذشته روش به گونهای تغییر یافته است که سوالات پرسیده شده باید با گفتگوها و سوالات دیگر رقایبت میکردند. با این حال این یک قالب و روش جالبی بود که نتیجهٔ موفقیت آمیزی را داشت. همهٔ شرکت کنندهها میتوانستند این سوالات رو ببینند و در مورد آنها تفکر کرده و پاسخ دهند.
-
نقل قول
نتیجه : این رویداد بیشتر به عنوان یک دورههمی و گفتگو در مورد رفتارهای خشن زبان سیپلاسپلاس و پاسخهای سرگرم کننده در مورد آنها را فراهم کرده است و به ویژگیهای جدید زبان در آن پرداخته نشده است.
نکته: شما میتوانید تصاویر ویدیویی مربوط به این رویداد را از کانال رسمی آن در یوتیوب دریافت کنید.
- ادامه مطلب...
-
- 0 دیدگاه
- 4
-
مقالات
-
- 2 دیدگاه
- 5,049 مشاهده
-
- دیدگاه توسط کامبیز اسدزاده
-
- 2 دیدگاه
- 13,227 مشاهده
-
- دیدگاه توسط کامبیز اسدزاده
-
- 0 دیدگاه
- 1,705 مشاهده
-
- نوشته شده توسط کامبیز اسدزاده
-
- 0 دیدگاه
- 990 مشاهده
-
- نوشته شده توسط کامبیز اسدزاده
-
- 0 دیدگاه
- 1,072 مشاهده
-
- نوشته شده توسط کامبیز اسدزاده
-
-
آمارهای کاربران
-
لیست گروه ها
-
چه کسانی آنلاین هستند؟ 0 کاربر, 0 مخفی, 9 مهمان (مشاهده لیست کامل)
در حال حاضر هیچ کاربر عضوی آنلاین نیست