جستجو در تالارهای گفتگو
در حال نمایش نتایج برای برچسب های 'برنامهنویسی'.
18 نتیجه پیدا شد
-
نگارش ۱.۳.۸
دنیای خود را چگونه با کیوت بسازیم!؟ با توجه به توسعهٔ روزافزون فناوری، دنیای نرمافزاری همگام با آن با سرعت بسیار زیادی در حال پیشرفت و توسعه است. ما برای رسیدن به این مسیر باید به فکر تولید و توسعهٔ محصول با کیفیت همراه با اقدامات کلیدی باشیم تا این محصول هماهنگ با استانداردهای جهانی باشد. برای این امر نیاز است تا این استانداردها را بررسی و در درون پروژههای خود مورد استفاده قرار دهیم. کیوت به عنوان یک چهارچوب قدرتمند یکی از بهترین و پیشتازترین ابزارهای موجود در دنیای برنامهنویسی است که با تمرکز بر روی مباحث تولید محصولی اساساً بر پایهٔ تجربهکاربری و رابطکاربریِ پیشرفته همراه با پشتیبانی از قدرتمندترین زبان برنامهنویسی، نتیجهای مطلوب را در مسیر توسعهٔ محصول نرمافزاری شما فراهم میکند. توجه داشته باشید برنامهنویسی صرفاً نوشتن کد منطقی و برقراری ارتباط با دادهها و حل مسائل مربوط به آن نیست! علاوه بر حل مشکل، برقراری ارتباط با احساسات کاربر و ایجاد یک تجربه و تعامل خوب بسیار مهم است. باید توجه داشت که زمان، هزینه، سرعت و کیفیت همه باهم مهم هستند و برای به حداکثر رساندن درجه کیفیت هر یک از این مولفهها باید از بهترین روشهای ممکن استفاده کرد که شامل مواردی همچون چند-سکویی، ابری، تجربهکاربری، رابطکاربری، رابطهای برنامهنویسی، کتابخانهها و غیره... میباشند و برای رسیدن به آنها کافی است یک زبان مهم و پایه همراه با چند زبان فرعی و فناوریهای مرتبط با یکدیگر را به عنوان ابزار در اختیار داشته باشیم. آخرین اعتبار تخفیفات ویژه به مناسبتهای اخیر به پایان رسیده است. نکتهٔ بسیار مهم: این کتاب به صورت رسمی در کتابخانهٔ ملی ثبت شده است، بنابراین هرگونه چاپ، تکثیر و به اشتراکگذاری این کتاب پیگیرد قانونی دارد. توجه: دریافت نسخههای بهروزرسانی شده تنها از این صفحه برای کسانی که حداقل یک بار آن را تهیه کردهاند امکانپذیر است. نوع این کتاب الکترونیکی است، بعد از پرداخت میتوانید بر روی دکمهٔ دریافت فایل در همین صفحه کلیک کرده و آن را دریافت نمایید. در صورتی که درگاه پرداختی با مشکل مواجه شده باشد، میتوانید به شماره کارت ۶۱۰۴۳۳۷۸۸۴۵۳۳۳۴۸ (بانک ملت) واریز و آن را به آدرس kambiz.ceo@gmail.com و یا شناسهٔ تلگرامی @Kambiz_Asadzadeh اطلاع دهید تا تأیید شود. در صورتی که از شما اطلاعات آدرس مکانی پرسیده شد، میتوانید آنها را وارد نکنید. * تمامی حقوق مادی و معنوی این کتاب متعلق به مولف و ناشر مولف (کامبیز اسدزاده) میباشد و هرگونه کپی برداری از آن پیگرد قانونی خواهد داشت. توجه : در داشتن هر گونه انتقاد و پیشنهاد در رابطه با این کتاب با آدرس شخصی نویسنده (kambiz.ceo@gmail.com) مکاتبه نمایید. نکته : این کتاب در روزهای خاص ممکن است شامل تخفیف قرار بگیرد. نکته دوم : کسانی که این کتاب را یک بار خریداری میکنند نسخهٔ بهروزرسانی شده آن را به صورت رایگان میتوانند دریافت کنند. برخی از درخواستها در کتاب مقدماتی به صورت زیر بودند: آموزش پیشرفته در رابطه با QML و آشنایی با آن آموزش برقراری ارتباط بین ++C و QML به صورت بکاند و فرانتاند آموزش کار با کنترلها و نحوهٔ سفارشی سازی پروژه آموزش برقراری ارتباط با پایگاه داده و فناوری های مرتبط با آن آموزش نحوهٔ پیکربندی کیتها، کامپایلر و ... آموزش نحوه توسعه برنامه بر روی بسترهای مختلف از جمله اندروید، آیاواس و ... و درخواستهای دیگر... بنابراین بر اساس این درخواستها و محتوایی که نیاز می باشد بعد از جلد مقدماتی با آنها آشنا باشید را در این نسخه فراهم کرده ایم. نکته از نظر من در رابطه با محتوا: کتابخانه کیوت شامل مباحث بسیار زیادی است که میتوان از هزاران صفحه محتوای آموزشی تولید کرد. اما در این محتوای آموزشی من تنها به مواردی اشاره کردهام که لازمهٔ کار هستند و در پروژهها میبایست اطلاعات لازم در رابطه با آنها داشته باشید. سرفصل ها و محتوا چه چیزهایی هستند؟ محتوای کتاب طبق آخرین استاندارد کتابخانه بر پایه نسخه ۵.۸ به بالا میباشد. محتوای آن به نسخه ۵.۹ و حتی ۵.۱۳ بهروزرسانی شده است. همچنین ویژگی های و موارد مهمی که در نسخه ۵.۹ و ۵.۱۰ موجود هستند در این کتاب به آنها اشاره شده است. سر فصلهای نهایی و تایید شده کتاب: فصل اول مقدمه بر زبان ++C برخی از قابلیتها ساختار برنامه در ++C کتابخانهها فرق بین C و ++C ویژگیهای معرفی شده در ++C ویرایشهای ۱۱ ٬ ۱۴ و ۱۷ کامپایلرهای ++C و وضعیت آنها ساختار اسناد ++C در پروژه کاربرد این زبان در کجاست؟ استانداردهای زبان مقدمه کیوت (Qt) معرفی کیوت (Qt) ۵.۹ آشنایی با محیط توسعه، نصب و راه اندازی همراه با پیکربندی کیت (Kit) در آن نصب و راه اندازی محیط Qt پیکربندی کیتها در macOS پیکربندی کیتها در Linux پیکربندی کیتها در Windows معرفی محیط توسعه کیوت کرِیتور (Qt Creator) نسخه 4 پیکربندی و تنظیمات مربوط به ساخت برای پلتفرمهای مختلف معرفی مجوز های Qt و نحوه استفاده از مناسبترین مجوز لوگوهای نشانگر ساخته شده با Qt پشتیبانی از انواع پلتفرمها پشتیبانی از انواع معماری ها شرایط و قوانین لازم جهت انتشار اپلیکیشن در فروشگاه iTunes یا همان (Apple Store) شرایط و قوانین لازم جهت انتشار اپلیکیشن در فروشگاهWindows Store شرایط و قوانین لازم جهت انتشار اپلیکیشن در فروشگاه Google Play شرایط و قوانین اختصاصی برنامه تحت Qt جهت انتشار و پذیرش در فروشگاه های مرتبط فصل دوم معرفی فناوری Qt Quick ویرایش 2 معرفی زبان کیو اِم اِل (QML) ویرایش 2 آشنایی با سبک - سینتَکس (Syntax) زبان QML روش اعلام یا اظهار یک شیء در QML اشیاء فرزند (Child-Object) در QML سبک و روش اعمال اظهار نظر (Comment) در QML صفت های اشیاء در QML پشتیبانی از جاوا اسکریپت (JavaScript) و ترکیب آن با QML روش استفاده از جاوا اسکریپت در سند QML روش های ترکیب ++C و استفاده از آن در سند QML فصل سوم معرفی انواع پروژه ها تحت فناوری کیوت کوئیک (Qt Quick) معرفی پروژه از نوع Qt Widget Application معرفی پروژه از نوع Qt Console Application معرفی پروژه از نوع Qt Quick Application معرفی پروژه از نوع Qt Quick Controls 2 Application معرفی پروژه از نوع Qt Quick Controls Application معرفی پروژه از نوع Qt Quick Canvas 3D Application معرفی پروژه از نوع Qt Quick Labs Controls Application آغاز ایجاد پروژه تحت C++ و Qt Quick ساده ترین برنامه معرفی کلاس QGuiApplication معرفی کلاس QQmlApplicationEngine معرفی کلاس QCoreApplication معرفی تابع exect در پروژه فصل چهارم انواع کنترل ها، منو ها و دیگر آبجکت ها معرفی انواع QML پایه در فناوری Qt Quick نوع date نوع color نوع font نوع matrix4x4 نوع point نوع quaternion نوع rect نوع size نوع vector2d نوع vector3d نوع vector4d معرفی انواع اشیاء QML در فناوری Qt Quick معرفی Accessible معرفی AnchorAnimation معرفی AnchorChanges معرفی AnchorImage معرفی AnimatedSprite معرفی Animation معرفی AnimationController معرفی Animator معرفی Behavior معرفی BorderImage معرفی Contex2D معرفی Canvas معرفی CanvasGradient معرفی CanvasImageData معرفی CanvasPixelArray معرفی CanvasColorAnimation معرفی Column معرفی DoubleValidator معرفی Drag معرفی DragEvent معرفی DropArea معرفی EnterKey معرفی Flickable معرفی Flipable معرفی Flow معرفی FocusScope معرفی FontLoader معرفی FontMeteric معرفی Gradient معرفی GridMesh معرفی GridView معرفی Image معرفی IntValidator معرفی Item معرفی ItemGraResult معرفی KeyEvent معرفی KeyNavigation معرفی Keys معرفی LayoutMirror معرفی ListView معرفی Loader معرفی MouseArea معرفی MouseEvent معرفی MultiPointTouchArea معرفی NumberAnimation معرفی OpacityAnimator معرفی ParallelAnimation معرفی GraphicInfo معرفی ParentAnimation معرفی ParentChange معرفی Path معرفی PathAnimation معرفی PathView معرفی PauseAnimation معرفی PropertyAction معرفی PropertyChanges معرفی Rectangle معرفی RegExpValidator معرفی Repeater معرفی Rotation معرفی RotationAnimation معرفی RotationAnimator معرفی Row معرفی Scale معرفی ScaleAnimator معرفی SecuentialAnimation معرفی ShaderEffect معرفی ShaderEffectSource معرفی Shortcut معرفی SmoothedAnimation معرفی SpringAnimation فصل پنجم معرفی انواع کنترل های 2 Qt Quick Controls کنترل AbstractButton کنترل ApplicationWindow کنترل BusyIndicator کنترل Button کنترل ButtonGroup کنترل CheckBox کنترل CheckDelegate کنترل ComboBox کنترل Container کنترل Control کنترل Dial کنترل Drawer کنترل Frame کنترل GroupBox کنترل ItemDelegate کنترل Label کنترل Menu کنترل MenuItem کنترل Page کنترل PageIndicator کنترل Pane کنترل Popup کنترل ProgressBar کنترل RadioButton کنترل RadioDelegate کنترل RangeSlider کنترل ScrollBar کنترل ScrollIndigator کنترل Slider کنترل SprinBox کنترل StackView کنترل SwipeDelegate کنترل SwipeView کنترل Switch کنترل SwitchDelegate کنترل TabBar کنترل TabButton کنترل TextArea کنترل TextField کنترل ToolBar کنترل ToolButton کنترل ToolTip کنترل Thumbler فصل ششم معرفی Qt Quick Dialog (دیالوگ های انتخاب رنگ، فایل، فونت و پیغام) معرفی Color Dialog معرفی Font Dialog معرفی File Dialog معرفی Message Dialog معرفی Qt Quick Layouts معرفی Column Layout معرفی Grid Layout معرفی Row Layout معرفی Stack Layout معرفی Qt Quick Control Styles (سبک و استایل نویسی کنترل ها – سفارشی سازی) واکنش گرایی و پاسخ دهی محتوای وب در اپلیکیشن با Qt WebEngine محتوای چند رسانه ای در کیوت QMultimedia محتوای چند رسانه ای در کیوت QMultimedia پخش صوت ظبط صدا در فایل پخش ویدیو کار با دوربین فصل هفتم معرفی و پیکربندی کار با بانک اطلاعاتی (دیتابیس) کار با بانک اطلاعاتی و ارتباط آن بین C++ و QML معرفی و کار با XML معرفی و کار با JSON معرفی و کار با QSetting سفارشی سازی فایل .pro پروژه فصل هشتم مقایسه انواع حالت های کامپایل Debug و Release نحوه افزودن دیگر کتابخانه های C++ در محیط Qt Creator و استفاده همراه با کتابخانه Qt فرق بین کامپایل استاتیک و داینامیک نحوه خروجی گرفتن / گسترش (Deployment) در Qt پیکربندی و انتشار برنامه در پلتفرم ویندوز (Windows) پیکربندی و انتشار برنامه در پلتفرم مک (macOS) پیکربندی و انتشار برنامه در پلتفرم لینوکس (Linux) پیکربندی و انتشار برنامه در پلتفرمهای iPhone و iPad (iOS) پیکربندی و انتشار برنامه در پلتفرم اندروید (Android) معرفی ابزار کیوبس (QBS) به روز رسانی کیوت بدون دریافت فایل نصبی آفلاین اهداف و چشمانداز فنی کیوت ۶ پیشنهادات و ملاحظات در عملکرد و کارآیی (جدید)﷼۶٬۵۰۰٬۰۰۰
-
قسمت اول بررسی استراکچرها در زبان C - فهمایش در سطح دیزاسمبلی
cdefender نوشته وبلاگ را ارسال کرد در برنامه نویسی
مقدمهای بر فهمایش دیزاسمبلی در این تحقیق تلاش بنده بر این بوده است که ساختار بلاکهای اسمبلی که کامپایلر MSVC و GNU و Clang برای استراکچرها زبان C در پلتفرم x86 تولید میکنند، مورد بررسی قرار بدهم. شایان ذکر است، خروجی MSVC با استفاده IDA Pro در محیط ویندوز و خروجی GCC و Clang در محیط لینوکس با استفاده از Ghidra مورد بررسی قرار گرفتهاند. استراکچری که دیزاسمبلی آن مورد بررسی قرار گرفته است، به شرح زیر است: تصویر 1: محتوای استراکچر مورد بررسی در تصویر 1، محتوای استراکچر نمایش داده شده است. این استراکچر شامل 6 عضو از انواع داده در زبان C میشود. در تصویر 2، نحوه استفاده از این استراکچر نمایش داده شده است. از قبیل اینکه چگونه اعضای این استراکچر که دارای نوع داده اشارهگر به کاراکتر هستند، مقداردهی و مورد فراخوانی قرار گرفتهاند: تصویر 2: نحوه استفاده از استراکچر در زبان C بعد از اینکه برنامه بالا نوشته شد، برنامه بالا را با فلگهای زیر توسط MSVC کامپایل کردم. در جدول 1 فلگهای پیشفرض که در MSVC تنظیم شده بود، آورده شده است: Debug Configuration Compiler Flags: /JMC /permissive- /ifcOutput "x64\Debug\" /GS /W3 /Zc:wchar_t /ZI /Gm- /Od /sdl /Fd"x64\Debug\vc143.pdb" /Zc:inline /fp:precise /D "_DEBUG" /D "_CONSOLE" /D "_UNICODE" /D "UNICODE" /errorReport:prompt /WX- /Zc:forScope /RTC1 /Gd /MDd /FC /Fa"x64\Debug\" /EHsc /nologo /Fo"x64\Debug\" /Fp"x64\Debug\Structs.pch" /diagnostics:column Release Configuration Compiler Flags: /permissive- /ifcOutput "x64\Release\" /GS /GL /W3 /Gy /Zc:wchar_t /Zi /Gm- /O2 /sdl /Fd"x64\Release\vc143.pdb" /Zc:inline /fp:precise /D "NDEBUG" /D "_CONSOLE" /D "_UNICODE" /D "UNICODE" /errorReport:prompt /WX- /Zc:forScope /Gd /Oi /MD /FC /Fa"x64\Release\" /EHsc /nologo /Fo"x64\Release\" /Fp"x64\Release\Structs.pch" /diagnostics:column جدول 1: فلگهای MSVC برای کامپایل برنامه برخی از فلگهایی که در مُد Debug و Release برای Visual Studio تعریف شدهاند، در ادامه مورد تشریح قرار گرفتهاند. این فلگ ها به صورت پیش فرض در مُدهای مختلف Visual Studio فعال هستند، با این حال فلگهای دیگر که به صورت سفارشی به منظور تاثیر آنها بر روی خروجی دیزاسمبلی مورد بررسی قرار خواهند گرفت، به صورت مجزا تشریح خواهند شد: فلگهای فعال در مُد دیباگ: فلگ JMC: فلگ Just My Code برای سادهتر کردن دیباگ برنامهها طراحی شده است و با تمرکز بر روی کد خود کاربر، کدهای مرتبط با سیستم و فریمورک را مخفی میکند. وقتی این ویژگی فعال است، پروسه دیباگ میتواند از کد غیرکاربری، مانند کتابخانههای سیستم یا فریمورکهای شخص ثالث عبور کند و این امر باعث میشود که مراحل پیمایش و درک جریان کد آسانتر شود. به عنوان مثال، هنگامیکه در حال دیباگ برنامه با استفاده از رویکرد Step-In هستیم، وارد توابع سیستمی و کتابخانههای جانبی نخواهیم شد. این امر در نهایت موجب میشود، رویکرد دیباگ محدود به کدهایی شود که خود برنامهنویس نوشته است. فلگ Permissive: فلگ Permissive به منظور حفظ مطابقت با قواعد نحوی و استانداردهای برنامهنویسی CPP است. وقتی این فلگ را تنظیم میکنید، کامپایلر اصول Compatibility را نادیده خواهد گرفت، و تلاش بر این خواهد شد که طبق استانداردهای جاری مطابقت نحوی (Syntax Conformance) و مطابقت معنایی (Semantic Conformance) برنامه را مورد بررسی قرار بدهد. به عنوان مثال، این گزینه اگر فعال باشد امکان استفاده از توابعی مانند strcpy به ما داده نخواهد شد، و شخص برنامهنویس باید از strcpy_s اضافه کند که نسخه ایمنسازی شده تابع مذکور است. فلگ GS: فلگ GS به عنوان یک ویژگی امنیتی برای شناسایی برخی از آسیبپذیریهای سرریز بافر استفاده میشود. وقتی فلگ GS فعال است، کامپایلر MSVC کد اضافی را به اجرایی تولید شده اضافه میکند تا در زمان اجرا بررسیهایی روی برخی از عملیاتهای بافر انجام دهد. فلگ GS به حفاظت در برابر سرریز بافرهای مبتنی بر Stack کمک میکند. این با افزودن یک کوکی امنیتی به نام Security Cookie به فریم Stack توابعی که از بافرهای لوکال استفاده میکنند، عمل میکند. این کوکی امنیتی به عنوان یک مقدار نگهبان عمل میکند و قبل از بازگشت تابع بررسی میشود تا اطمینان حاصل شود که فریم Stack دچار خرابی نشده است. این استفاده از فلگ GS در MSVC باعث ارائه یک لایه اضافی از امنیت برای شناسایی و کاهش آسیبپذیریهای سرریز بافر میشود. فلگ ZI: فلگ Zi امکان تولید اطلاعات دیباگینگ را فراهم میکند. هنگام استفاده از این فلگ، کامپایلر اطلاعات اضافی را در فایل اجرایی قرار میدهد که پروسه دیباگ را بهبود میبخشد. فلگ Zi به کامپایلر دستور میدهد تا یک فایل PDB تولید کند که شامل سمبولها و اطلاعات دیباگینگ درباره کد منبع است. این اطلاعات شامل نامهای تابع، نامهای متغیر، شماره خطوط و سایر جزئیاتی است که برای دیباگ و تجزیه و تحلیل برنامه در زمان اجرا مفید است. فایل PDB که با استفاده از فلگ Zi تولید میشود، میتواند توسط ابزارهای دیباگینگ مانند Visual Studio Debugger استفاده شود تا دیباگ سادهتری را فراهم کند. هنگامیکه یک باینری را در IDA Pro دیباگ می کنیم، اگر فایل PDB آن را به دیباگر بدهیم، خروجی با معناتری را به ما ارائه میدهد که صرفا آدرسهای خالی نیستند. فلگ Od: این فلگ برای غیرفعالسازی بهینهسازی استفاده میشود و به کامپایلر دستور میدهد که در طول فرآیند کامپایل، تمام بهینهسازیها را غیرفعال کند. زمانی که از فلگ Od استفاده میشود، کامپایلر کد اسمبلی بدون بهینهسازی تولید میکند که به کد منبع اصلی نزدیک است. این مورد در برخی حالتها مفید است، مانند زمانی که برنامه خود را در حالت دیباگ قرار میدهید و میخواهید کد تولید شده به صورت دقیق با کد منبع اصلی همخوانی داشته باشد تا دیباگ و پیمایش کد آسانتر باشد. غیرفعالسازی بهینهسازی با استفاده از فلگ Od منجر به اجرای کد با سرعت کمتر نسبت به کدهای بهینهسازی شده با سایر فلگهای بهینهسازی مانند O1، O2 یا Ox شود. با این حال، برای اهداف دیباگ میتواند مفید باشد زیرا کد تولید شده آسانتر قابل فهم است. شایان ذکر است، به طور پیشفرض، زمانی که کد منبع را بدون مشخص کردن هیچ فلگ بهینهسازی کامپایل میکنید، کامپایلر فرض میکند Od استفاده شده و بهینهسازی را غیرفعال میکند. اگر میخواهید بهینهسازی را فعال کنید، باید یکی از فلگهای بهینهسازی مانند O1، O2 یا Ox را مشخص کنید تا سطوح مختلف بهینهسازی را فعال کنید. فلگ Zc:inline: فلگ Zc برای کامپایلر توابع inline را بر اساس استاندارد زبان CPP فعال یا غیرفعال میکند. در زبان CPP، کلیدواژه "inline" برای نشان دادن به کامپایلر استفاده میشود که یک تابع باید در محل فراخوانی به صورت inline گسترش یابد، به جای اینکه به صورت یک تابع جداگانه فراخوانی شود. هنگامیکه این فلگ را استفاده می کنیم، تمامی توابعی که به صورت inline تعریف شده اند، در محل فراخوانی خود expand خواهند شد و پرشی به محلی دیگر از حافظه صورت نخواهد گرفت. در نتیجه به دلیل عدم استفاده از حافظه Stack و دستورات مرتبط با کار با پشته سرعت اجرای برنامه بهینه خواهد شد. اگر این فلگ در نظر گرفته نشده باشد، حتی با وجود واژه inline در امضا توابع، کامپایلر توابع مذکور را به صورت inline مورد پردازش قرار نخواهد داد. فلگ fp:precise: فلگ fp:precise در کامپایلر MSVC مدل اعداد ممیز شناور را کنترل میکند. به طور پیش فرض، MSVC از گزینه /fp:precise استفاده میکند که به معنای تولید کد توسط کامپایلری است که به طور دقیق از استاندارد IEEE 754 پیروی میکند. این گزینه کنترل دقیقی را برای حالت گردکردن فراهم میکند و تضمین میکند که نتایج میانی با دقت کامل محاسبه میشوند. فلگ /fp:precise به ویژه در مواردی که نیاز به رعایت دقیق استاندارد IEEE 754 وجود دارد، مانند برنامههای علمی یا محاسبات عددی که دقت و سازگاری بسیار مهم است، مفید است. این فلگ میتواند سازگاری و قابلیت حملونقل کدی که بر روی رفتار خاص اعداد ممیز شناور را بستگی دارد، حفظ کند. بنابراین، در مواردی که عملکرد اولویت اصلی است و رعایت دقیق استاندارد لازم نیست، میتوانید از مدلهای دیگر اعداد ممیز شناور ارائه شده توسط MSVC مانند /fp:fast یا /fp:strict استفاده کنید. فلگ Zc:forScope: این فلگ قوانین استاندارد CPP را برای متغیرهای حلقه for فعال میکند. به طور پیش فرض، MSVC از قوانین قدیمی استفاده میکند که متغیر حلقه for در خارج از محدوده حلقه قابل مشاهده است. این موضوع میتواند منجر به مشکلات و رفتارهای ناخواسته شود. زمانی که فلگ Zc:forScope فعال شود، قوانین MSVC برای متغیرهای حلقه for مطابق با استاندارد CPP اعمال میشود و قابلیت دید متغیر حلقه فقط در بدنه حلقه محدود میشود. فلگ RTC1: برای فعال کردن بررسیهای خطا در زمان اجرا استفاده میشود. این فلگ مخفف "Run-Time Error Checks Level 1" میباشد. وقتی این فلگ فعال شود، کامپایلر کد اضافی را در برنامه قرار میدهد تا بررسیهایی در زمان اجرا برای انواع مختلف خطاها انجام دهد، مانند بررسیهای سرریز بافر، متغیرهای نامقداردهی شده و استفاده نادرست از اشارهگرها از جمله این خطاها در برنامهنویسی هستند. فعال کردن فلگ RTC1 میتواند به شناسایی و تشخیص خطاهای برنامهنویسی که ممکن است منجر به رفتار تعریف نشده یا خرابی در زمان اجرا شوند، کمک کند. این فلگ هزینه اضافی را به اجرای برنامه اضافه میکند، زیرا بررسیهای زمان اجرا نیازمند کد و محاسبات اضافی هستند. با این حال، در مراحل توسعه و دیباگ، میتواند یک ابزار مفید باشد تا مشکلات احتمالی را در مراحل اولیه شناسایی و رفع کنید. فلگ Gd: این فلگ برای تعیین نحوه فراخوانی توابع C استفاده میشود. نحوه فراخوانی تعیین میکند که چگونه پارامترهای تابع منتقل میشوند و چگونه تابع با کد فراخواننده تعامل میکند. وقتی از پرچم /Gd استفاده میشود، نحوه فراخوانی پیشفرض را مشخص میکند که به عنوان نحوه فراخوانی cdecl شناخته میشود. در نحوه فراخوانی cdecl، پارامترهای تابع از راست به چپ روی Stack قرار میگیرند و فراخواننده مسئول پاکسازی Stack پس از بازگشت تابع است. این نحوه فراخوانی به طور معمول در برنامهنویسی به زبان C استفاده میشود. شایان ذکر است، به طور پیشفرض، MSVC از نحوه فراخوانی cdecl استفاده میکند، بنابراین استفاده از فلگ Gd ضروری نیست. با این حال، مشخص کردن صریح /Gd مطمئن میشود که نحوه فراخوانی پیشفرض استفاده میشود. فلگ MDd: فلگ MDd برای تنظیمات دیباگ و استفاده از کتابخانههای پیشفرض (CRT) استفاده میشود. این فلگ برای توسعه و دیباگ برنامهها استفاده میشود و به شما امکان میدهد تا از امکانات دیباگ موجود در برنامه استفاده کنید. وقتی از فلگ MDd استفاده میکنید، برنامه شما با استفاده از کتابخانههای پیشفرض (CRT) که به صورت دیباگ شده هستند، کامپایل میشود. فلگ FC: فلگ FC برای تعیین نام فایل منبع در خروجی کامپایلر استفاده میشود. این فلگ با اضافه کردن مسیر کامل فایل منبع به خروجی کامپایلر، به تولید پیامهای خطا و اخطار با اطلاعات بیشتر کمک میکند. هنگام استفاده از فلگ /FC، کامپایلر مسیر کامل فایل منبع را به همراه پیام خطا یا اخطار نمایش میدهد. این ویژگی مفید است زمانی که شما چندین فایل منبع در دایرکتوریهای مختلف دارید، زیرا به شما امکان میدهد به سرعت مکان خطا یا اخطار را تشخیص دهید. فلگ FA: فلگ FA برای کنترل تولید کد اسمبلی در فرآیند کامپایل استفاده میشود. این فلگ به شما امکان میدهد نوع و فرمت کد اسمبلی تولید شده را مشخص کنید. فلگ FA چندین گزینه دارد که رفتار تولید کد اسمبلی را تعیین میکنند. فلگ FA در هنگام فرآیند کامپایل، یک فایل اسمبلی (.asm) همراه با فایل آبجکت (.obj) تولید میکند. فایل لیستینگ کد اسمبلی شامل کد اسمبلی تولید شده متناظر با کد منبع است. فلگ Fa این گزینه را به ما اجازه میدهد نام و مکان سفارشی برای فایل لیستینگ اسمبلی مشخص کنید. شایان ذکر است، فلگ FAs همزمان فایل لیستینگ کد اسمبلی (.asm) و فایل لیستینگ کد ماشین (.cod) را در هنگام کامپایل تولید میکند. فایل لیستینگ کد ماشین شامل نمایش شمارهای از دستورات ماشین به صورت هگزادسیمال است. فلگ EHsc: این فلگ برای تعیین مدل برخورد با اکسپشنها در کد CPP استفاده میشود. این فلگ برای "Exception Handling (Standard C++)" استفاده میشود و براساس استاندارد CPP برخورد با اکسپشنها را فعال میکند. به طور پیش فرض، MSVC از فلگ EHs استفاده میکند که برخورد با اکسپشنهای CPP را فعال میکند اما از مشخصکردن نوع اکسپشن پشتیبانی نمیکند. هنگام استفاده از فلگ EHsc، رفتار EHs را توسعه میدهد تا شامل پشتیبانی از مشخصکردن نوع اکسپشن هم باشد. برخورد با اکسپشن یک مکانیزم در CPP است که به شما اجازه میدهد اکسپشنها را در طول اجرای برنامه کنترل و انتقال دهید. این مکانیزم روش ساختاری برای مقابله با شرایط استثنایی یا خطاهایی که در زمان اجرا ممکن است رخ دهند، فراهم میکند. این فلگ به هر صورت شرایطی را فراهم میکند که کامپایلر به صورت خودکار بتواند شرایط خاص را با استفاده از بلاکهای دستوری try-catch مبتنی بر استاندارد CPP مدیریت و کنترل کند. با این حال، فعالسازی این فلگ موجب میشود که مقداری بر روی کد Overhead آورده شود و Performance برنامه به خاطر کنترلهای اضافی که کامپایلر به باینری اضافه میکند، کاهش پیدا کند. فلگهای فعال در مُد Release: فلگ GL: این فلگ برای فعال کردن Global Optimization استفاده میشود. این بهینهسازی به کامپایلر امکان میدهد تا عملکرد و سرعت اجرای برنامه را بهبود بخشیده و حجم کد تولید شده را کاهش دهد. با استفاده از پرچم GL، کامپایلر MSVC بهینهسازیهایی را اعمال میکند که بهبود عملکرد برنامه را در مقیاس سراسر برنامه فراهم میکند. این بهینهسازیها میتوانند شامل تغییرات در ساختار دادهها، بهینهسازیهای ریاضی و منطقی، حذف Dead Code و ترتیب اجرای کدها باشند. با فعال کردن فلگ GL، میتوانید عملکرد برنامه خود را بهبود بخشیده و زمان اجرا را کاهش دهید. همچنین، حجم کد تولید شده نیز کاهش مییابد که میتواند منجر به افزایش سرعت بارگذاری و اجرای برنامه شود. به طور معمول، برای استفاده کامل از این بهینهسازی، باید فلگ LTCG را در مرحله لینک فعال کنید. این بهینهسازیها ممکن است باعث افزایش زمان کامپایل شود، اما عملکرد و سرعت اجرای برنامه را بهبود میبخشند. فلگ Gy: فلگ Gy برای فعال کردن Function Level Linking استفاده میشود. زمانی که در هنگام کامپایل از فلگ Gy استفاده میشود، کامپایلر را به تولید فایلهای آبجکت جداگانه برای هر تابع در کد مجبور میکند. این امر به پیوند کارآمدتر و کاهش حجم فایل اجرایی منجر میشود. با فعال کردن Function Level Linking با فلگ Gy، لینکر قادر است توابع بیاستفاده را از فایل اجرایی نهایی حذف کند و حجم کل باینری را کاهش دهد. این قابلیت به خصوص در پروژههای بزرگ که نه همه توابع استفاده میشوند و نه همه توابع فراخوانی میشوند، مفید است. فلگ Gm-: این فلگ به کامپایلر می گوید که تکنیم Incremental Compilation و همچنین استفاده از فایل های PCH را غیرفعال کند. این دو مورد موجب کامپایل برنامه با سرعت بالاتری می شوند اما در برخی شرایط غیرفعال کردن Incremental Compilation و ایجاد فایل .pch میتواند مفید باشد. این مورد مفید است زمانی که در پروژههای بزرگ کار میکنید و هزینه نگهداری و بهروزرسانی فایل .pch بیشتر از فواید Incremental Compilation سریع است. در حالت کلی، فلگهایی که در بالا آورده شدهاند به صورت پیشفرض در مُدهای Debug و Release در Visual Studio تعریف شدهاند. برنامه C که با رویکرد Structها نوشته شده است، در هر دو مُد مورد بررسی قرار گرفته است تا درک بهتری از ساختار باینری همچنین با فلگهای گوناگون کامپایلر به دست آورده شود. بررسی دیزاسمبلی x86 در ویندوز به منظور درک دیزاسمبلی ساختمان داده Struct در زبان برنامه نویسی C ابتدا خروجی تولید شده برای معماری x86 را در دو مُد Debug و Release مورد بررسی قرار خواهیم داد. بعد از بررسی خروجی دیزاسمبلی برای معماری x86، خروجی کامپایلر MSVC برای معماری x64 را مورد بررسی و ارزیابی قرار خواهیم داد. تصویر 3: کد منبع برنامه مورد بررسی همانطور که در جدول 1 آورده شده است، خروجی دیزاسمبلی کد منبع در تصویر 3 با فلگهای پیشفرض کامپایلر برای مُد Debug مورد بررسی قرار گرفته است. اولین نکتهای در تحلیل کد منبع نظر من را جلب کرد، نادیده گرفتن inline بودن تابع MyOperation بود. با اینکه این تابع را به صورت inline تعریف کرده بودم، و همچنین فلگ Zc:inline هم فعال بود، با این حال کامپایلر تصمیم گرفته است که این تابع را به صورت inline در محل فراخوانی خود گسترش ندهد. از همین روی در تابع main، یک دستور call داریم. وقتی این دستور فراخوانی میشود، آدرس 00C11A66 را در پشته قرار میدهد تا وقتی دستور ret فراخوانی شد، جریان اجرای باینری به مسیر صحیح خود بازگردد و ادامه اجرای برنامه را بعد از فراخوانی تابع ادامه بدهد. در تصویر 4، خروجی دیزاسمبلی اجرای این دستور در محیط Visual Studio نمایش داده شده است. وقتی دستور Call اجرا شده است، آدرس دستوربعد بر روی بالا پشته قرار گرفته است که با ارجاع به مقدار ESP-4 در پانل Memory میتوان مقداری که در بالای پشته قرار گرفته است، مشاهده کرد که این مقدار با رنگ آبی نمایش داده شده است. تصویر 4: خروجی اجرای دستور Call در دیباگر Visual Studio در ادامه همین مسئله در دیزاسمبلر IDA Pro مورد بررسی قرار گرفته است. وقتی باینری مذکور را در دیزاسمبلر IDA Pro باز کنیم، و وارد دیباگر این دیزاسمبلر شویم، موقعی که دستور Call فراخوانی شود، آدرس دستور بعدی را بر روی پشته قرار میدهد که دستور Ret بتواند فرایند اجرای باینری را به مسیر صحیح خود بازگرداند. در پانل Stack View این باینری مقداری که درون پشته قرار گرفته است، قابل نمایش است. تصویر 5: خروجی اجرای دستور Call در دیباگر IDA Pro در تصویر 5، دیزاسمبلی باینری را در مُد Release درون دیباگر IDA Pro مشاهده میکنیم. همانطور که در تصویر 5 قابل مشاهده است، وقتی دستور Call اجرا شده است، آدرس بعدی خود را درون پشته قرار داده است که بعد از اجرای دستورالعمل ret اجرای باینری بتواند به مسیر اجرایی خود بازگردد. بعد از اینکه وارد تابع MyOpertion شویم، خروجی دیزاسمبلی تعریف و مقداردهی Struct در زبان C قابل مشاهده است. در تصویر 6، دیزاسمبلی تابع MyOperation نمایش داده شده است: تصویر 6: خروجی دیزاسمبلی تابع MyOperation سه دستور اول اصطلاحا Prologue تابع MyOperation هستند. این سه دستور موجب ایجاد یک فریم جدید و ایجاد فضا برای ذخیرهسازی متغیرهای محلی تابع میشوند. دستور push ebp موجب ذخیره سازی فریم تابع قبلی بر روی پشته خواهد شد. دستور mov ebp, esp موجب شکل گیری یک فریم جدید برای تابع MyOperation خواهد شد. دستور sub esp, 66Ch موجب کم کردن مقدار 66C از پشته به منظور ذخیره سازی متغیرهای محلی درون تابع خواهد شد. به هر صورت، این دستورالعمل فضایی برای متغیرهای محلی و دادههای دیگری که توسط تابع نیاز است، در پشته اختصاص میدهد. در ادامه سه دستور PUSH داریم که به نظر می آید به این دلیل انجام میشوند که قبل از استفاده از رجیسترهای ebx، esi و edi مقادیر قبلی آنها بر روی پشته ذخیره شود تا در ادامه مقادیر آنها قابل بازیابی بانشد. دستور بعدی آدرس مؤثر [ebp-42Ch] را محاسبه کرده و در رجیستر EDI ذخیره میکند. دستور بعدی مقدار 10Bh (هگزادسیمال) را به رجیستر ECX منتقل میکند. مقدار درون رجیستر ECX به عنوان میزان تکرار برای دستور rep stos است که در گام بعد آورده شده است. دستور rep stos مقداری که درون EAX قرار دارد، به آدرسی که توسط EDI اشاره می کند، کپی خواهد کرد.-
- اسمبلی
- برنامهنویسی
-
(و 2 مورد دیگر)
برچسب زده شده با :
-
خلاصهای از ملزومات و نقشهٔ راه ساخت و ساز محصول نرمافزاری
کامبیز اسدزاده نوشته وبلاگ را ارسال کرد در علم و دانش
سلام و درود، این اواخر راجع به مشورت و راهنماییها خیلی ساده به قضیه نگاه میشه، همه فکر کردن کشکه و فقط با دونستن 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) و روشهای به کار گیری آن نسبت به زبان برنامهنویسی و شرایط مناسب استفاده. ۳۳- آشنا به سبک و قوائد و ساختار زبانهای برنامهنویسی و فرآیند ساخت و ترجمه. ۳۴- و تا صدها گزینهٔ دیگه میتونم لیست کنم اینجا که اگه انتخابتون زبانهای نزدیک به سیستم باشه این داستان در ادامهٔ این توضیحات سر به فلک میکشه نمونش کامپایلرها خودشون شونصد جور مباحث دارند، پلتفرمها ومعماریهای پردازندهای هم در این زبانها مهمن و شما حتی تا عمق سیستمعامل و رابطهای اونها و نحوهٔ رفتارشون باید اطلاعات کافی داشته باشید که هر کدوم به نوبهٔ خودشون هزاران صفحه میشه راجع بهشون کتاب معرفی کرد. این لیست چیزی بود که به زبان بسیار بسیار ساده شده و خیلی خلاصه به ذهنم رسید تا بدانید همچین هم الکی نیست ای عزیزانی که فتواهای صد من یه غاز میدین و این مسائل رو حل شده میدونید! در ادامه اصل ماجرا خیلی فراتر از اینها هم هست که بخوای حساب کتاب کنی میبینی باید هفت خان رستم رو فتح کنی تا در تمامی سطوح پاسخگو باشی، این امر شدنی هست اما زمانی که شما محدود به یک موضوع باشید قطعاً درک همهٔ مسائل محدود و ناتوان در اجرای آن خواهید شد. * وقتی میگم آشنا قطعاً در حد حروف الفبا کافی نیست، باید در حد نیاز تسلط و درک کافی ازشون وجود داشته باشه. * همهٔ اینها رو باید در کمترین زمان ممکن نسبت به یک مشتری، محصول و نیاز تشخیص بدین و انتخاب کنید، به این کار میگن ارزیابی محصول بر اساس دانستههای فنی که تماماً متکی بر دانش و تجربهٔ شماست. (کارشناسی پروژه دقیقاً همین موضوع است). * برای بهتر شدن و حرفهای تر شدن هم باید فراتر از اینها پیش برید و در قالب «مثلث دانش» بهبودش بدهید. * محصولات معتبر جهانی حاصلِ چنین نقشههای پیشبردی هستند و اصول تخصصی و مهندسی رو رعایت میکنن تا به یک درجهٔ کیفی موفق و زبان زد میرسند. شاید این مسائل از نظر یک برنامهنویس ساده و نه چندان با تجربه مهم نباشه، اما در سطح کیفی یک محصول نرمافزاری همهٔ این مسائل مهم تلقی میشوند. برای همین میگم گولِ توصیههای ساده و ظاهر چهارتا برنامه یا کیوت، داتنت و امثال این ابزارها رو نخورید، پشت همهٔ نیازهای یک محصول به فاکتورهای بسیاری باید توجه کنید. فردا بخواهید بدون آگاهی در این مسائل وارد پروژههایی بشید که به ظاهر ساده هستند یا باید دست به گریبان دیگران باشید و توی گروهها مدام سوأل پرسی کنید و یا باید بیخیال آن شوید؛ چون به هیچ یک از این فاکتورهای مورد نیاز توسعه توجه نکردین! پس این اصول رو به عنوان سر نخ مطالعه کنید تا بخش بزرگی از سرگردانیهای شما حل شود. این مواردی که این جا اشاره کردم، همونطور که گفتم بخش بسیار کوچکی از دنیای نیازمندیهای ساخت و ساز و طراحی یک محصول واقعی در پیرامون نرمافزار و کامپیوتر هست، اما یک دلگرمی بدم به کسایی که با خودشون فکر میکنند چنین مسیر یا نقشهای از راه که قراره پیش بگیرند سخته و همهٔ ماجرا این نیست (جزئیات رو در کتابها، موقعیت و فرصتهای شغلی، شکستها، موفقیتها و آزمون و خطاها یاد خواهند گرفت) و نتیجهٔ اون میتونه مطابق همین حکایت زیر باشه:- 2 دیدگاه
-
- پیشنهاد
- برنامهنویسی
-
(و 9 مورد دیگر)
برچسب زده شده با :
-
سلام، با پیشرفت فناوری های ابری کلی سوال پیش آمده برام، اولین سوال اینه میشه از فناوری ابری برای ذخیره داده های سی پلاس پلاس استفاده کرد؟ بنظر شما کدوم پایگاه داده بهتر و امن تر و سریع تره؟
- 1 پاسخ
-
- سوال
- برنامه سیپلاسپلاس
-
(و 2 مورد دیگر)
برچسب زده شده با :
-
یک سوأل بسیار مهم و پر مخاطب در بارهٔ زبانبرنامهنویسی سیپلاسپلاس در سالهای اخیر این است که «آیا جایگزینی برای این زبان وجود دارد و یا قابل جایگزین است»؟ در بسیاری از پاسخها نشان از گزینههایی مانند Go، Rust و D دیده میشود که بهتر است نسبت به نظرات متخصصهای برنامهنویسی به این موضوع پرداخته شود، ابتدا باید در نظر گرفت که هر ابزاری میتواند جایگزینی داشته باشد اما شرایط و نحوهٔ استفادهٔ آن در رابطه با نیاز متفاوت است. اخیراً سوألات زیادی در این موضوع دیده شده است که میگویند، Rust یک زبان برنامهنویسی ایمن، سریع و سیستمیِ جایگزین برای سیپلاسپلاس است! اما آیا واقعاً اینگونه است یا صرفاً ما بر اساس احساسات و اشتیاق به بهروز شدن به این موضوع میپردازیم؟ پاسخ برای این سوأل به صورت زیر در مدلهای مختلف میتواند مطرح شود که نتیجهگیری و تصمیم از خلاصهٔ آن به عهدهٔ خودِ شماست. من بر این باورم که زبانهای برنامهنویسی همه و همه در حال بهروز رسانی و بهتر شدن نسبت به نسخهها، استانداردها، و نسلهای گذشتهٔ خودشان هستند و به هیچ عنوان هیچ زبانی تا به امروز به طور جدی منسوخ شده اعلام نشده است. برای درک این مطلب بهتر است ابتدا به واژهٔ «منسوخ شده» یا «Deprecated» بپردازیم، این واژه زمانی مورد استفاده قرار میگیرد که شرایط زیر بر آن حاکم باشد: گزینهٔ مورد نظر به طور رسمی از طرف سازنده، پشتیبان یا صاحب آن بد دانسته شده و رسماً کنار گذاشته شود. گزینهٔ مورد نظر بهروز رسانی نشود و آخرین بهروز رسانی آن نیز شامل مشکلاتی باشد که بعد از مدتها نیز حل نشده باشد. گزینهٔ مورد نظر دیگر مورد استفاده قرار نگیرد و کاربردی هم در بین رقبای خود نداشته باشد. گزینهٔ مورد نظر دیگر پشتیبانی نشود و به قولی مُرده باشد. گزینهٔ مورد نظر به علاوهٔ این که شامل این موارد میشود، باید دارای یک جایگزین مناسب و عالی باشد. با توجه به این معیارها و با در نظر گرفتن رسالت هر یک ابزارها باید به آن توجه کرد که هر زبان یا ابزار برنامهنویسی خارج از این، در مرحلهٔ پیشرفت قرار گرفته است که آن نشان دهندهٔ زنده بودن و کاربردی بودن آن است. از طرفی، زبانی مثل سیپلاسپلاس جایگزین نمیشود چرا که هیچ یک از دلایل و معیارهای بالا شامل حال آن نمیشود، اتفاقاً برعکس این زبان دارای ویژگیهای معیاری زیر است: این زبان به طور رسمی توسط کمیتهٔ استانداردسازی که متعلق به هیچ یک از شرکتهای غول صنعتی و یا خصوصی نمیباشد پشتیبانی میشود. این زبان به طور مداوم در حال بهروز رسانی است و کاربردهای چند-منظوره و همه جانبهٔ خود را داراست. این زبان از ویژگیهای از ویژگیهای بسیار خوب به همراه سریعترین بازدهیها را داراست. این زبان رقیبهای بسیاری دارد، اما هیچ کدام از آنها هنوز در عمل و دامنهٔ وسیعی موفق به نمایش عملکرد بهتری نبودهاند. این زبان همانند دیگر ابزارها دارای مشکلاتی است، اما با توجه به پوشش و پشتیبانی از ویژگی BC در روند استانداردسازی و بهروز رسانی به خوبی از پس آنها بر آمده است. برای مثال، زبان جاوا یکی از بهترین زبانهای برنامهنویسی است و خیلی از شرکتها مانند گوگل در سیستمهای توزیع شده از آن استفاده میکنند. اما به معنای این نیست که به سرعت سی++ میرسد و در حد مقایسه با آن است. این زبان میتواند دهها و صدها برابر کندتر از سی++ باشد و این مربوط به طراحی، ساختار و مسائل مربوط به زبان است. از طرفی سیپلاسپلاس محبوب است زیرا که ویژگیهای زیر را دارد و طی سالهای بسیاری آن را ثابت کرده است: کارآیی (پرفرمنس) و سرعت فوقالعادهٔ این زبان، البته خیلی از زبانها ادعا میکنند که همچین ویژگیای را دارند که در عمل نتیجهٔ جالبی مشاهده نمیشود. ذاتِ چند-سکویی و چند-منظوره بودن آن، حداقل همهٔ سیستمها میتوانند کدهای سی++ را کامپایل و اجرا کنند. این زبان به راحتی میتواند با زبانها و فناوریهای دیگری ارتباط برقرار کرده و با آنها تعامل داشته باشد. این زبان به عنوان یکی از کممصرفترین زبانهای برنامهنویسی از نظر مصرف انرژی محسوب میشود. بسیاری از مهندسین این زبانها را به صورت مقطعی و بارها دیده و با آن آشنا هستند. کتابخانههای پیشفرض استاندارد STL و دیگر کتابخانههای سی++ بسیار قدرتمند و گسترده هستند. کتابخانههای نوع سوم (Third-Party) بسیار قدرتمند و بهروز هستند. اولویتهای سیستمهای یونیکس و حتی ویندوز اکثراً بر روی C و ++C است و بازنویسی آنها با زبانهای دیگر هزینهٔ بسیاری را به ارمغان میآورد. بسیاری از وابستگیهای ایجاد شده در سالهای بسیار طولانی بر اساس سی و سی++ بوده و بازنگری و بازنویسی آنها مشروط بر این که رابطها باید بازنویسی شود بسیار سخت و کاری مشابه اختراع دوبارهٔ چرخ است. عملکرد تا حدی قابل پیشبینی است و میتواند آن را درک کرد، چیزی که در زبانهایی مانند جاوا، سیشارپ و گو نمیتواند پیشبینی کرد چرا که پیشبینی چرخهٔ GC دشوار است، هیچ رقیب جدیای در این باره در سطح سی++ وجود ندارد که مدیریت حافظه را برای شما در قالب یک RAII ارائه کند، هرچند در مورد Objective-C و Rust میتوان آنها را به صورت جداگانه مورد بررسی قرار داد و نه عین آن. پشتیبانی از پارادایم (سبک)های طراحی را سی++ به خوبی پشتیبانی میکند، برای مثال برنامهنویسی عمومی در زمان کامپایل را به خوبی ارائه میکند. پشتیبانی از برنامهنویسی سیستمی و سطح پایین در این زبان یک مزیتی دیگری است که در کنار تمامی ویژگیهای سطح بالای خود ارائه میکند. اما در این میان زبانهایی مثل Rust، Go، Swift و غیره ادعای جایگزینی را دارند اما ادعاهای فنی به تنهایی کافی نیستند، در دسترس بودن گسترده از جامعه به اندازهٔ کافی به همراه جامعهٔ معتمد به آن مهم است. علاوه بر ویژگیهای فنی زبان سی++، یک نقطه قوت بسیار مهم این زبان در بحث غیر فنی آن است، در واقع در پشت این زبان نه یک پیادهسازی محدودی وجود دارد و نه یک سازمان که در آینده در مورد آن تصمیم بگیرد و آن را کنترل کند. در حالی که تمامی زبانهای مطرح و ادعا کننده داخل یک چهارچوبی کنترل میشوند که به شدت آیندهٔ آنها را تیره و تار میکند. به طور کلی آزاد بودن یک ابزار و قدرت یک جامعه فارغ از جغرافیا، سازمان، نژاد و زبان یک قدرت بسیار خارقالعادهای را برای یک ابزار به ارمغان میآورد که به تنهایی بسیار اهمیت دارد. در این اواخر بسیاری از مهندسین به فکر بازنویسی بسیاری از موارد شدن و تحقیقات نشان میدهد ابزارهایی گرافیکی بسیار قدرتمند و سریع که اخیراً طراحی شدهاند، مانند وُلکان که با سی++ نوشته شده است زمانی میتوانند با راست و زبانهای دیگر امروزی بازنویسی شوند که یک سیستمعامل جدید با زبانهای جدید ساخته شود! بنابراین صرفاً میتوان یک نسخهٔ Wrapper یا همان (پوشنده) چرا که تقریباً همهٔ سیستمعاملهای مدرن امروزی با زبانهای سی و سی++ نوشته شدهاند. از طرفی تولید یک سیستمعامل بسیار پر خطر است و سرمایهگذاری کلان، زمان و هزینههای بسیاری را میطلبد و تا زمانی که چنین نرمافزارهایی تحت سلطهٔ زبانهایی مانند سی++ قرار گرفته باشند پادشاهی سیپلاسپلاس ادامه خواهد داشت. نکتهٔ پایانی من معتقدم هر ابزار و زبانهای برنامهنویسی جایگاه و شرایط استفادهٔ خودشان را شامل میشوند، دقیقاً مانند ابزارهای موجود در یک جعبهابزار بهتر است ابزارهای خود را طوری بچینید که در جای لازم از مناسبترین آنها استفاده کنید. با این حال زبانها و ابزارهای مانند سی یا سی++ طی سالها ثابت کردهاند که معمولاً در همهٔ حوزهها غالب هستند و میتواند هر کاری را که بخواهید با آنها انجام دهید و یا با یک جایگرین مناسب آن را مدیریت کنید و این بستگی به مهارت و انتخاب شخصی شما دارد. همچنین صحبتهای اخیر کمیتهٔ استانداردسازی در رابطه با نحو ۲ از سیپلاسپلاس میتواند مفهوم خوبی در آیندهٔ این زبان باشد. مقالات مرتبط با این موضوع که میتواند به عنوان مکملی از پیش تعریف شده برای شما مفید باشد:
- 1 دیدگاه
-
- جایگزینی
- سیپلاسپلاس
-
(و 3 مورد دیگر)
برچسب زده شده با :
-
سلام و درود خدمت دوستان عزیز، همانطور که میدانید مهمترین و شاید بزرگترین سوال در حوزهٔ برنامهنویسی این است که من باید کدام زبان برنامهنویسی را انتخاب کنم؟! واقعیت امر این است که این سوال همیشه از سمت علاقهمندان مطرح شده است اما هیچگاه یک پاسخ اساسی در مورد آن ارائه نشده است. البته اساتید و برنامهنویسان حرفهای به خوبی میدانند که زبانهای برنامهنویسی به عنوان ابزارهای کمک کار ما کاربرد دارند و به هیچ عنوان نمیتوان یک زبان را به عنوان اولین و آخرین انتخاب در نظر گرفت، اما شناخت در مورد آنها کمک بسیاری در انتخاب ابزارهای مناسب خواهد کرد. در این پُست من قصد دارم در رابطه با انتخاب یک زبان برنامهنویسی بر اساس نیاز و علایق صحبت کنم تا شما عزیزان بتوانید به یک نتیجهٔ مطلوب برسید. بنابراین، قبل از هر چیز این بسیار مهم است که بدانیم یک زبان برنامهنویسی چیست! و چرا باید از آن استفاده کنیم؟! اجازه دهید نگاهی به دلیل استفاده از زبان برنامهنویسی داشته باشیم، چرا از زبان برنامهنویسی استفاده میکنیم؟ به برقراری ارتباط با یکدیگر فکر کنید، انسان برای برقراری ارتباط با همنوعان نیاز به ابزاری به نام زبان دارد که عناصر اساسی آن حروف است. برای مثال حروف خ-ا-ن-ه با ترکیب شدن به خانه تبدیل شده و شما میتوانید آن را درک کنید و این کدی است که شما توسط آن با جهان بیرون خود ارتباط برقرار میکنید. ممکن است کدهای شما توسط یک زبان دیگر مانند زبان انگلیسی ساخته شود، برای مثال h-o-m-e حرفی است که که نتیجهٔ آن Home خواهد بود. در کشور ما معمولاً زبان مادری هریک از ما فارسی، ترکی (آذربایجانی)، عربی، کردی، لُری و دیگر موارد هستند که به صورت بومی آن را فرا میگیریم و با تسلط بسیاری از آن استفاده کرده و منظور همنوعان خود را درک میکنیم. در بحث کامپیوتر، استفاده از زبان انسانی تا حدی کاربرد دارد که فقط خود انسان آن را درک خواهد کرد نه ماشین! چرا که زبان بومی و اصلی کامپیوتر (ماشین) ۰ و ۱ است نه کاراکتر و حرف! ماشینها برای برقراری ارتباط و درک منظور انسان از واحد ۰ و ۱ استفاده میکنند که مجموعهای از آنها به عنوان دستورالعملهای مشخصی برای کامپیوتر قابل درک است. مغز کامپیوتر یعنی واحد پردازشگر مرکزی (CPU) به عنوان پردازندهٔ مرکزی تمامی دادههای شما را در قالب ۰ و ۱ شناسایی میکند و آنها را درک خواهد کرد. بنابراین زبان بومی ماشین بر خلاف انتظار برای انسان بسیار دشوار است و اگر به فکر این باشید که بخواهید از طریق آن با کامپیوتر ارتباط برقرار کنید شما یک دیوانهٔ تمام عیار بشمار خواهید آمد! اجازه دهید منظورم را سادهتر کنم، کامپیوتر منظور شما را از home درک نخواهد کرد! اما اگر به آن بگویید 01101000 01101111 01101101 01100101 مسلماً خواهد فهمید که منظور شما از آن یعنی home است! حالا اگر منظور شما سلام دنیا باشد باید به کامپیوتر بگویید 01101000 01100101 01101100 01101100 01101111 00100000 01110111 01101111 01110010 01101100 01100100 و همینطور برای برقراری ارتباط بیشتر باید هزاران، میلیونها و میلیاردها ۰ و ۱ را با اصول زبان ماشین در کنار هم قرار دهید تا شاید بتوانید یک دستورالعمل ساده برای انجام یک کار را به آن انتقال دهید! احمقانست نه؟! وقت و زمان برای ما انسانها بسیار با ارزش است و مسلماً به هدر دادن آن به این روش هرچند دانش بسیار بالایی از مهندسی کامپیوتر میطلبد اما حتی اگر شما یک دانشمند هم باشید بکار گیری این روش دیوانگی محض است! ما که کامپیوتر نیستیم! ما انسانیم! ساختار کامپیوتر بسیار شبیه به ساختار انسان است، همانطور که خالق انسان، خداوند یکتا او را آفرید به آن نیز هوش و قدرتِ تفکر داد تا بتواند بر اساس آن رشد کرده و در مسیر پیشرفت قدم بردارد، انسان نیز از دانستههای خود برای ساختههایش استفاده میکند. کامپیوترها به عنوان ابزارهای ساخت دست بشر دارای ساختار بسیار ساده ولی در عین حال بسیار پیچیده هستند که انسان برای برنامهریزی آن نیاز به ابزارهایی دارد (ابزارهایی برای ایجاد دستورات قابل درک برای ماشین). ابزارهای برنامهریزی برای کامپیوتر همانطور که اشاره شد، کامپیوترها هیچ درکی از کدهایی که انسان مینویسد ندارند! بنابراین ما نیاز به ابزاری داریم تا منظور خود را برای درک کامپیوتر ارائه دهیم. حال آن ابزار میتواند یک مفسر (Interpreter) باشد یا یک کامپایلر (Compiler) ! هر دوی این ابزارها وظیفهٔ دریافت زبان سطح بالا (نزدیک به زبان انسان) و تبدیل (ترجمهٔ آن) به زبان ماشین است. با تفاوت اینکه مفسرها کدهای نوشته شده را خط به خط تفسیر کرده و آنها را برای پردازنده اجرا میکند، در حالی که کامپایلر تمامی کدها را به شیء و هر شیء را به کد باینری یکجا ترجمه کرده و هرجا که نیاز بود آنها توسط پردازنده اجرا میشوند. به بیان سادهتر فرض کنید قرار است به زبان روسی صحبت کنید، شما دو روش خواهید داشت: صحبت کردن به زبان روسی به صورت مستقیم استخدام یک مترجم، صحبت با مترجم و ترج گفتههای شما توسط مترجم به طرف مقابل برخی از مزایا و معایب کامپایلر و مفسر نسبت به یکدیگر نکته ۱: مفسرها کدهای نوشته شده را به صورت خط به خط تفسیر و ترجمه میکند اما کامپایلرها آنها را یکجا ترجمه میکند که دارای یک خروجی مانند یک فایل اجرایی است. نکته ۲: برنامهٔ تولید شده تحت کامپایلر توسط سخت افزار (ماشین واقعی) اجرا میشود در صورتی که برنامهٔ تولید شده با مفسر توسط نرمافزار (ماشین مجازی) اجرا میشود. نکته ۳: کامپایلرها عملیات بهینهسازی یا همان (Optimization) را در آخرین مرحله از کامپایل (ترجمه) انجام میدهند، در صورتی که مفسرها عملیات بهینه سازی را در زمان تبدیل انجام میدهند. نکته ۴: سرعت اجرای کدهای کامپایل شده بسیار بیشتر از کدهای تفسیر شده است. برای مثال اگر حلقهای را در نظر داشته باشید که قرار است ۱۰ بار اجرا شود، آن حلقه در حالت مفسر ۱۰ بار تفسیر شده و ۱۰ بار توسط پردازنده اجرا خواهد شد! در حالی که در حال کامپایل شده حلقه یک بار ترجمه میشود و نتیجهٔ آن یک بار توسط پردازنده در زمان نیاز اجرا میشود! این بسیار مهم است و در پردازشهای بسیار بزرگ سرعت برنامههای کامپایل شده به شدت بالاتر از تفسیر شدهها است. نکته ۵: کدهای تولید شده توسط مفسر سطح بالاتری نسبت به کدهای تولید شده توسط کامپایلر دارند در واقع آنها تقریباً قابل خواندن هستند اما کدهای تولید شده توسط کامپایلر غیر قابل خواندن است. نکته ۶: امنیت برنامههای کامپایل شده و همچنین دسترسی به منابع کد آنها از امنیت بیشتری نسبت به برنامههای تحت مفسر دارند. نکته ۷: برنامههای تفسیر شده وابستگی خاصی به سیستمعامل ندارند و در هر جایی که برنامهٔ تفسیر کننده موجود باشد اجرا خواهند شد، در صورتی که برنامههای کامپایل شده برای هر نوع سیستمعامل متفاوت باید مجدداً کامپایل شود که البته برای اجرای آن نیازی به نصب بودن کامپایلر بر روی سیستمعامل نیست. نکته ۸: کامپایلر کد برنامه را به صورت کامل به کُد ماشین ترجمه میکند، بنابراین زمان اجرای آن بسیار کم تر است و انتخاب بسیار خوبی برای دوستداران سرعت است. نکته ۹: استفاده از زبانهای مفسری برای توسعهدهندگان مبتدی آسانتر از نوع کامپایلری میباشد بنابراین یادگیری و استفاده از این نوع زبانها نسبتاً سریعتر و راحتتر از نوع کامپایلری است. فرایند توسعهٔ نرمافزار در این فرایند کامپایلر برنامه را میسازد سپس همه دستورات زبان را از نظر صحت تجزیه و تحلیل میکند و اگر دستوری غلط باشد، اخطار میدهد. در صورتی که خطایی وجود نداشته باشد همهٔ کدها را به کد ماشین تبدیل میکند که در نهایت فایلهای مختلفی را به برنامه اجرایی اضافه میکند و در نهایت برنامه را اجرا میکند. در حالی که مفسر برنامه را میسازد اما، فرایند افزودن فایل اجرایی به برنامه یا تولید کدهای ماشین وجود ندارد بلکه دستورات کد منبع خط به خط در حین زمان اجرا یا به اصطلاح Run-time اجرا میکند. کدام زبان در چه حوزهای کاربرد دارد؟ با توجه به تعاریف بالا نوبت آن رسیده است تا زبان برنامهنویسی مورد نظر خود را بر اساس نیاز و قابلیتهایی که آن در اختیار توسعهدهنده قرار میدهد انتخاب کرد. حوزههای کاربردی زبانهای برنامهنویسی متناسب با کاربرد و رسالت آنها مشخص میشود، به طور کلی زبانهای برنامهنویسی را بهتر است به دو دستهٔ اصلی و فرعی جدا کنیم. در دستهٔ اصلی زبانهایی که پایه و اساس کتابخانهها، نرمافزارهای عظیم، انجینها و همچنین خود زبانهای برنامهنویسی میباشند را زبان مادر و اصلی و تمامی زبانهایی که به عنوانی جهتِ مکمل سازی و یا محصول نوع سوم برای اهداف تجاری ساخته شدهاند را فرعی میگوییم. زبانهای اصلی و مادر: C و ++C زبانهای اصلی و فرعی: Python, Java, Delphi, C#, Swift, Objective-C, Php, Rust, JavaScript زبانهای مکمل رابط کاربری: JavaScript, CSS, Xaml, Xhtml, Html, QML زبانهای مکمل بسترهای بلاکچین: C++, Rust و Solidity درنظر داشته باشید کتابخانهها و برنامههای اساسی و پایه که بخش اعظمی از آنها توسط زبانهای سی++ و سی نوشته میشوند در صورت نیاز برای زبانهای دیگر نیز قابل استفاده هستند. به عنوان مثال سیستمعاملها، نرمافزارهای عظیم، انجینهای بازیسازی، کتابخانههای پرکاربرد و مهم همهٔ آنها توسط زبانهای اصلی توسعه یافتهاند اما در صورت نیاز میتواند از کتابخانههای نوشته شده توسط زبانهای اصلی در زبانهای فرعی نیز استفاده کرد. شاید اینطور به نظر برسد که اگر با زبانهای اصلی هر کاری میتوان انجام داد، پس چرا زبانهای دیگر را مورد استفاده قرار میدهیم؟! جواب سوال این است که زبانهای اصلی و مهم نیاز به دانش بسیار از لحاظ معماری سیستمعامل، کامپایلر و دیگر شاخههای علوم کامپیوتر هستند و نحوِ کُدنویسی در آنها نسبت به زبانهای دیگر مانند جاوا، پایتون، سیشارپ و غیره دشوارتر است. بنابراین ممکن است انتخاب اول برنامهنویسان مبتدی نباشند اما کاربرد آنها جنریک (عمومی) است. اشاره به کاربرد زبانهای محبوب در حوزههای مختلف: توسعهٔ زیرساختها: C, C++, Rust, Go توسعهٔ وبسایت: C++, Java, Php, JavaScript, C#, Ruby, Python توسعهٔ نرمافزارهای موبایل: , C++, Java, C#, Objective-C, Swift, JavaScript, Kotlin توسعهٔ نرمافزارهای دسکتاپ: C/C++, Java, Delphi, VB.Net, C#, JavaScript, Objective-C توسعهٔ نرمافزارهای اِمبِد: C/C++, Python توسعهی بازیهای کامپیوتری: ++C و #C توسعهٔ هوش مصنوعی: C++, Python, R, Prolog, Java, Haskell, AIML توسعهٔ رابطکاربری: JavaScript, QML, XAML نکتهٔ قابل توجهی از کاربرد زبانهای اصلی در این است که خود آنها وابستهٔ زبان برنامهنویسی و محدود بر یک حوزه نیستند و به اصطلاح زبان مادر بشمار میآیند که و در تمامی حوزهها کاربرد دارند. کاربرد در صنایع و حوزههای مختلف بر اساس ویژگیهایی که یک زبان برنامهنویسی ارائه میدهد بسیار مهم است. برای مثال Python, R, Prolog و غیره در حوزهٔ هوش مصنوعی و بیگ دیتا بسیار سادهتر به کمک توسعه دهندگان میآید. در توسعهٔ وبسایت زبانهای برنامهنویسی Node.JS, Php, C#, Asp.Net محبوبیت بیشتری دارند. اما میتوان با توجه به این پست وبسایتهای بسیار سریع و بهینهای را توسعه داد که بی شک نیاز به دانش بسیار بالایی دارد و بهتر است در اهداف خاص از آن استفاده شود. در حوزهٔ موبایل در پلتفرم iOS دو زبان Swift و Objective-C به عنوان زبان اصلی پلتفرمهای iOS, tvOS و watchOS به شمار میآیند. در حوزهٔ اندروید (Android) زبانهای Java و Kotlin به عنوان انتخابهای اول توسعهدهندگان مطرح میشند در صورتی که بسیاری از کتابخانههای اندروید تحت C و ++C توسعه یافته و حتی میتواند با استفاده از ++C اپلیکیشن و بازیهای بسیار سریعتری را تولید کرد. در حوزههای صنایع بازیسازی زبانهایی مانند #C نیز کاربرد دارند، اما ترجیح اول و اصلی در این حوزه بکارگیری ++C است چرا که هیچ زبانی به جز آن نهایت سرعت را ارائه نخواهد داد. آمارها و محبوبیتها سالانه طبق گزارش بسیاری از مراجع نمودارها و آمارهایی در رابطه با ایندکس شدن زبانهای برنامهنویسی ارائه میشود که نمونهای از آنها TIOBE است. متاسفانه باید گفت مقایسهٔ چنین مراجع بر اساس ویژگیهایی که در بالا توضیح دادیم صورت نمیگیرد و صرفاً بر اساس محبوبیت بین کاربران گزارش داده میشوند. برتری زبان نسب به زبان دیگر بر اساس چنین آمارهایی اشتباه بوده و توسط آن نمیتوان یک زبان را به عنوان انتخاب اول در نظر گرفت. همچنین اگر دقت کنید مقایسهٔ زبانهای برنامهنویسی اسکریپتی با کامپایلری و همچنین زبانهایی مانند SQL در بین آنها وجود دارد که از لحاظ منطقی درست نیست چرا که کاربرد زبانها با یکدیگر متفاوت بوده و ملاک آماری این مراجع فقط استقبال کاربران است. تعاریف و هِدایتهای اشتباه به سمت یک زبان برنامهنویسی متاسفانه مشاهده میشود که در بسیاری از گروهها و سایتهای برنامهنویسی چندین زبان برنامهنویسی را به عنوان بهترین انتخاب معرفی میکنند و دلیل انتخاب آنها را مشاهدهٔ رتبههای آن بر اساس ایندکسهای برخی از مراجع و یا طرفداری بعضی از شرکتها و تعصبات بی هدف است! باید در نظر داشته باشید قدرت و ویژگیهای یک زبان ربطی به محبوبیت آن ندارد. اگر احساس میکنید شرکتها تقاضای متخصص زبان برنامهنویسی خاصی را دارد که تکرار میشود به آن معنی نیست که زبانهای برنامهنویسی دیگر در حال منسوخ شدن یا کنار گذاشتن هستند. ارزش زبان ملاک برتری آن است نه محبوبیتش! به عنوان مثال اگر JavaScript رتبهٔ اول از نظر محبوبیت را دارد به آن معنا نیست که Php در حال منسوخ شدن است! هر زبانی کاربرد خودش را نسبت به اهداف و ویژگیهای خود دارد. آیا زبان ماشین منسوخ شده است؟! خیر! این چه سوالیه!!؟ چنین افکار بیهوده را از ذهن خود بیرون بریزید! تمامی زبانهای کامپایلری به جز نوعهای مفسری در نهایت کدهایشان توسط کامپایلر به زبان ماشین یعنی assembly تبدیل میکنند. مثال زیر کد ++C است: int main() { } خروجی آن به زبان ماشین (Assembly) در کامپایلر GCC به صورت زیر خواهد بود: main: push rbp mov rbp, rsp mov eax, 0 pop rbp ret انتخاب چند-سکویی پیشنهاد میشود یا خیر؟ لازم بذکر است که بدانید، ابزارهای چند-سکوی بسیاری وجود دارند که به شما اجازه میدهند بدون داشتن دانش آنچنانی در رابطه با زبانهای برنامهنویسی متعددِ مخصوص سکوهای هدف محصول خود را توسعه دهید. برخی از آنها عبارتند از Xamarin و یا React Native که متاسفانه به دلیل ساختار نامطلوب تبدیل کدهای نوشته شده نتیجهٔ نهایی آنها آنچنان خوب مانند محصولات واقعی زبان بومی نیستند چرا که کدهای آن مستقم به زبان ماشین ترجمه نمیشوند. اما این بسیار مهم است که بدانید ابزارهای بومی چند-سکویی واقعی انتخاب بهتری برای این امر بشمار میآیند که معروفترین آنها Qt است که به صورت بومی بدون اُفت کیفیت محصول نهایی به شما اجازهٔ توسعه محصول در سکوهای مختلف را میدهد که مسلماً دانش بسیار بالایی از سی++ را میطلبد. در نتیجه اگر به دنبال محصول با کیفیت در حوزهٔ چند-سکویی هستید باید دانش بالایی از ++C داشته باشید. نکته: در نظر داشته باشید زبانهای کامپایلری خود به دو دسته نیز تقسیم میشوند که برخی از آنها به صورت مستقیم کدهای نوشته شده را به کد ماشین ترجمه میکنند و برخی از آنها کد نوشته شده را به یک زبان میانی تبدیل و سپس آن را توسط برنامهٔ مجازی برای ماشین برنامهریزی مینمایند. بهتر است توجه داشته آنها مزایا و معایبی نیز خواهند داشت. زبانهای کامپایلری در دو دستهی بومی (Native) و مجازی (Virtual) کامپایل از نوع بومی روشی است که کدهای نوشته شده را به صورت مستقیم به کُد ماشین ترجمه میکند. کامپایل از نوع مجازی روشی است که کدهای نوشته شده را ابتدا به کُدمیانی (کدمشترک یا همان بایت کُد - Byte Code) در جاوا و زبان میانی (CIL) در Net. تبدیل میکند که خودِ آن شبیه به کُد ماشین است. در این فرایند کد مربوطه توسط کامپایلر مخصوص یعنی JIT (کامپایلری از نوع Just-In-Time) در زمان اجرا توسط سیستمعامل، به دستورالعملهای قابل فهم برای پردازنده تفسیر و اجرا میشود (که این فرایند شبیه به فرایند عملکرد اجرایی مفسرها است). زبانهای بومی (زبانهایی که کد آنها به کد ماشین به صورت مستقیم توسط کامپایلر قبل از اجرای آنها توسط سیستمعامل، ترجمه میشوند که به اصطلاح ahead-of-time (جلوتر از زمان) یا همان AOT نام دارد) مانند: C, C++, Rust, Haskell, Clean, Swift, Go, Fortran, D زبانهای مجازی (زبانهایی که کد آنها توسط یک رابط میانی به زبان مشترک ترجمه میشود) : Java و #C مزایا و معایب زبانهای کامپایلری از نوع کلاس بومی (Native) از سرعت بسیار بالایی برخوردار هستند (دلیل آن ترجمهٔ مستقیم کدها به کد ماشین است) در مقابل بزرگترین مزیتی که زبانهای نوع کلاس مجازی (Byte Code) دارند به خاطر وجود یک برنامهٔ واسط جهت شبیهسازی کدهای ترجمه شده به کد قابل فهم برای پردازنده، اجرا شدن آنها در هر پلتفرم بدون کامپایل مجدد امکان پذیر است که البته این ویژگی خود نیازمند نصب بودن JVM بر روی پلتفرم مربوطه میباشد. در نوع بومی برای اجرا در هر پلتفرم لازم است سورس کدها را برای پلتفرم مقصد کامپایل کنید که نیازی به وجود ماشین مجازی مانند JVM یا برنامهٔ خاصی ندارد. سریعترین زبان برنامهنویسی کدام است؟ شاید پاسخ به این سوال به گونهای تعصبی به نظر برسد، اما واقعیت این است که باید حقیقت را پذیرفت! با توجه به دلایلی که به نوع زبانهای کامپایلری آورده شده است مشخص است که سریعترین نوع زبانهای برنامهنویسی باید در دستهٔ شاخهٔ کامپایلری و کلاس Native قرار گرفته باشند چرا که در این مبحث زبانها کامپایلری (مجازی) و مفسری حرفی برای گفتن ندارند. جهت تثبیت آن مستنداتی از بنچمارکها در این بخش آورده شدهاست. حقیقت این است ++C در بدترین حالت ممکن بدون بهینهسازی کدها و فلگهای خاص حداقل ۲ تا ۴ برابر سریعتر از زبانهای کامپایلری دیگر است! تلخترین حقیقت نیز این خواهد بود که ++C حداقل ۱۰۰ تا ۲۰۰ برابر سریعتر از زبانهای مفسری است! با توجه به تجربیات شخصی در صورتی که نوع کامپایلر Clang باشد سرعت کدها به چند برابر از این نیز خواهد رسید! همچنین باید در نظر بگیرید اگر کدهای شما خارج از اصول استاندارد زبان باشد ممکن است نتایج آن به تساوی و حتی پایینترین حالت ممکن برسد. سخن آخر، برای انتخاب زبان برنامهنویسی و به دست آوردن مهارت در آن و در نهایت تبدیل دانش به یک محصول نرمافزاری، بهتر است بر اساس نوع (کامپایلری یا مفسری بودن)، اهمیت سرعت، ویژگیهای آن و کاربردش در حوزههای مختلف تصمیم بگیرید نه بر اساس تعصب و علاقه. دقت کنید که زبانهای برنامهنویسی ابزارهای برنامهنویسی بوده و هرچقدر جعبه ابزار شما کامل باشد توانایی و مهارت شما در توسعهٔ حوزههای مختلف بیشتر خواهد بود. در صورتی که میخواهید در رابطه با انواع روشهای کامپایل و تفاوتهای کامپایل Native، Cross Compile و JIT آشنا شوید، پیشنها میشود مقاله زیر را مطالعه فرمایید.
-
آموزش زبان برنامهنویسی سوئیفت - جلسه اول مواردی که در این جلسه یاد خواهید گرفت: مقدمه زبان برنامهنویسی سوئیفت ، نوشتن اولین دستور و معرفی متغییرها با سلام و عرض ادب خدمت شما دوستان عزیز و همراهان خوب همیشگی وبسایت آیوٌ اِسترِیم. در خدمت شما هستیم با یک دورهٔ جذاب برنامهنویسی به زبان سوئیفت! علاقهمندان زیادی به توسعهٔ محصولات و نرمافزارهای شرکت اَپل وجود دارن و از این رو با مسائلی دست به گریبان هستند که یکی از آنها؛ نبود آموزش کامل و به بیانی ساده است! مورد دوم هم که خیلی واضح هست،تَحریمه! که به جز اینکه قِشر کمدرآمد جامعه از پس خرید آنها بر نمیآیند، شامل تحریمهای دیگر هم میشود. و خیلیها بخاطر علاقه به یادگیری نمیتوانند شروع کنند به توسعهٔ محصولات نرمافزاری شگفتاَنگیز! از این رو تنها یک راه وجود داره و آن هم استفاده از نسخهٔ هَکشدهٔ سیستم عامل مَک هستش که به شما امکان استفاده از امکانات یک سیستمعامل مَک واقعی را میدهد! البته هدف این نیست که بگوییم استفاده از این روش خوب هست! بلکه برای آن دسته از عزیزانی که توانایی خریدن محصولات اَپل رو ندارند گفتیم که در غیر اینصورت اگه توانایی خرید دارید که بهترین راهش همین است که بخرید و لذت یک سیستمعامل متفاوت و جدید را داشته باشید :). خُب، اصل مطلب! اینکه در این دورهٔ آموزشی چه چیزهایی را یاد خواهید گرفت، فقط و فقط سه چیز است؛ مقدمات یادگیری Syntax ( سِینتَکس) زبان و کدنویسی مقدماتی یادگیری رابطکاربری ( User Interface ) ایجاد یک پروژهٔ ساده ماشینحساب و بعد از این مباحث هم کُلیت کار دستتان میآید و به راحتی میتوانید از منابعی مُعتبر، دانش و مهارت خودتان را بالا ببرید. زبان برنامهنویسی سوئیفت ( Swift ) چیست ؟ سوئیفت یک زبان برنامهنویسی از نوع کامپایلری برای توسعه محصولات نرمافزاری macOS , iOS , watchOS و tvOS است که توسط شرکت اَپل ساخته شده. قبل از این از زبان برنامهنویسی Objective-C برای توسعه محصولات برای موارد ذِکر شده استفاده میشد که بعد از آن این زبان جایش را به سوئیفت داد اما همچنان از Objective-C هم استفاده میشود. هدف در اینجا آموزش زبان است و شما میتوانید برای توضیحات بیشتر به مرجع این زبان، اینجا مراجعه کنید. شروع کدنویسی برای شروع کدنویسی به زبانبرنامهنویسی سوئیفت میتونید از یک برنامه موبایل هم حتی استفاده کنید! البته تنها در بخش مقدماتی. نام این نرمافزار موبایلی Sedona Swift Compiler است که میتوانید از فروشگاه Play دانلود و نصب کنید. یا از نرمافزاری ساده بر روی ویندوز خود کُدنویسی را شروع کنید که این کار برای سیستمعام لینوکس هم صِدق میکند که با نصب یک بسته میتوانید در لینوکس هم کُدنویسی با این زبان شیرین و ساده را شروع کنید. یا در نهایت اگر سیستمعامل مک دارید که چه بهتر و اگر ندارید از نسخهٔ هکشدهٔ آن استفاده کنید که عرض کردیم در مواقعی که واقعا چارهای ندارید!( الخصوص برای بخش رابط کاربری ( User Interface ) ). اولین چیز در هر زبان برنامهنویسی که آموزش داده میشود؛ سلام جهان! ( !Hello World ) همیشگی است?!. پس این کُد ساده را ببینید که این پیغام را به راحتی در کنسول چاپ میکند: print("Hello World!") به همین سادگی که مشاهده کردید، با استفاده از متد print پیغام Hello World را چاپ کردیم. اگر این دستور رو اجرا کنید، با همین پیغام در کنسول ویرایشگر خود مواجه میشوید. پس در نتیجه، این تابع برای چاپ مقادیر در سوئیفت هست. شاید دقت کرده باشید که سِمیکالُن نذاشتیم! سوئیفت این اجازه رو میدهد که بدون گذاشتن سِمیکالُن برنامهی خودتان را اجرا کنید که البته بگذارید هم مسئلهای پیش نمیآید، مگر در موقعی که چندین دستور در یک خط داشته باشید که آن موقع واجب میشود و باید حتما بگذارید، وگرنه کامپایلر اخطار خواهد داد! تابع print یک تابع سراسری در سوئیفت است که چندین آرگومانت دریافت میکند و اساس کار آن، چاپ اطلاعاتی است که به آن میدهیم. و چندین آرگومانتهای پیشفرض هم دریافت میکند که میتوانیم بسته به نیاز از آنها استفاده کنیم. در اولین آرگومانت، ما میتوانیم تا هر چند مقدار یا همان آیتمها، به آن بدهیم و در خروجی نمایش دهیم. به این شکل که میبینید: print("www.iostream.ir", "www.fanoox.com", item3, item4, ...) در آرگومانت دوم، که separator است، میتوانیم مشخص کنیم که اگر اطلاعات زیادی میخواهیم به خروجی ارسال و یا همان نمایش دهیم، در بین هر کدام از این اطلاعات، چه نمادی/علامتی قرار گیرد؟. که ما میتونیم اون نماد/علامت رو در بین دو "" ( دابل کوتیشن ) مشخص کنیم. به عنوان مثال: print("www.iostream.ir", "www.fanoox.com", separator : " :)) ") // Output the ==> www.iostream.ir :)) www.fanoox.com همانطور که مشاهده کردید، میتوانیم از هر نماد/علامتی که نیاز داشتیم در بین انبوهی از دادهها استفاده کنیم. در آرگومانت سوم، میتوانیم مشخص کنیم که اطلاعات در خط بعدی ( New line ) چاپ شوند یا در همان خط فعلی نمایش داده شوند! که به صورت زیر است: print("www.iostream.ir", terminator : "") print("www.fanoox.com") /*Output the => www.iostream.ir www.fanoox.com that not of include is new line */ در حالت پیشفرض تابع به صورت "terminator : "\n است که به معنی " در در پایان چاپ اطلاعات، اطلاعات دیگر را که بعد از این مقادیر چاپشده میآیند را چاپ کن ". برای تعریف متغییر در سوئیفت به دو صورت میتوانید عمل کنید: تعریف بدون تعیین نوع تعریف با تعیین نوع همچنین ما دو نوع متغییر داریم: متغییری که مقدارش میتواند در ادامهٔ برنامه تغییر کند متغییری که مقدارش فقط در هنگام تعریف مشخص و قابل تغییر در سراسر برنامه نیست ( ثابتها ) برای تعریف متغییر بدون نوع به این صورت عمل میکنیم: var website_name = "www.iostream.ir" print(website_name) // or print("The website name is \(website_name)") همانطور که مشاهده میکنید تعریف یک متغییر که همواره مقدارش تغییر کنید با کلمهٔ کلید var تعریف میشود و بعد از آن نام و مقدار آن میآید. در این حالت کامپایلر به صورت ضمنی خودش از روی مقدار، نوع متغییر را متوجه میشود و اگر شما این دستور را بنویسید: var website_name = "www.iostream.ir" print(type(of : website_name )) // or print("Type is => \(type(of : website_name )") // Result => String به شما مقدار String یا همان رشتهای را نمایش میدهد. اما در حالت تعیین نوع برای متغییر به این صورت است: var website_name : String = "www.iostream.ir" print(webiste_name) // or print("The website_name is \(website_name)") که شما صراحتا ( دستی ) نوع را مشخص کردید و کامپایلر در اینجا و در ادامهٔ برنامهٔ مقدار غیری از String ( رشته ) را قبول نمیکند. همانطور که مشاهده میکنید، برای تعریف نوع برای متغییر باید از دو کالُن ( : ) استفاده کنید و سپس حرف اول نوع متغییر را بزرگ بنویسم ( البته در این زبان ) مانند؛ Int و سپس با گذاشتن علامت انتساب ( = ) مقدار مورد نظر خود را به آن اختصاص دهیم. نکتهای دیگری که وجود دارد در چاپ کردن مقادیر است که شما میتوانید با دو روش فوق که ذکر شده است، مقادیر را چاپ کنید که یکی بصورت آیتم به آیتم یعنی print( item1, item2, item3 , ...) و تا هر چند آیتم را که حاوی مقادیر هستند به خروجی بفرستید و نمایش دهید و اما در حالت دوم باید Syntax متفاوتی استفاده کنید و آن هم ادغام رشته با مقادیر متغییرهاست! که مثالش را بالا برای شما عزیزان زدهام و مقادیر متغییرها باید بین دو پرانتز و قبل پرانتز از یک بکاسلش رو به عقب استفاده کنید!. و اما برویم به سراغ ثابتها! از اسم این متغییرها واضح است که یک بار تعریف میشوند و مقدار ثابتی دریافت میکنند و در ادامهٔ برنامه و یا رَوند پروژه هیج تغییری نمیکنند و در طول برنامه یا پروژه مقادیرشان ثابت است! بیاید با یک مثال شروع کنیم؛ ثابتها در سوئیفت با کلمهٔ کلید let تعریف میشوند و همانند متغییرها شامل نام و نوع هم هستند: let _website_name = "www.iostream.ir" _webiste_name = "iostream.ir" // Error , beacuse it's a constant print(_website_name) // or print("The website name => \(_website_name)") همانطور که میبینید، تغییر دادن مقادیر ثابتها باعث بروز خطا میشود و اجازهٔ چنین کاری به شما داده نخواهد شد. برای تعریف با تعیین نوع هم به این شکل میتوایند عمل میکنید: let _number : Int = 20 _number = 40 // Error , beacuse it's a constant print(_number) // or print("The number => \(_number)") امیدواریم این جلسه مورد رضایت شما عزیزان قرار گرفته باشد.
-
با سلام خدمت دوستان خواستم بدونم ، بهترین محیط و یا IDE جهت کد نویسی و پردازش های علمی چیست؟
- 2 پاسخ
-
- پایتون
- برنامهنویسی
-
(و 1 مورد دیگر)
برچسب زده شده با :
-
سلام و درود، مدتی است از سرویسهای کاوهنگار جهت استفاده در پروژههای خودم استفاده میکنم و مطمئنم یکی از بهترین سرویسدهندههای ایرانی در زمینهٔ پیام کوتاه است. متأسفانه همانطور که میدانید بسیاری از سرویسدهندهها در ایران به خاطر عدم شناخت دقیق از اهمیت و کاربرد سی++ هیچ حرکتی در توسعهٔ سرویسهای خود در رابطه با سی++ را نمیکنند. بنابراین، جدیداً تصمیم گرفتم کیتهای توسعه در قالب رابطهای برنامهنویسی مورد نیاز رو برای این چنین شرکت و سرویسها آن ارائه کنم. معرفی سرویس پیام کوتاه کاوهنگار کاوه نگار با ارائه وبسرویس پیامک و تماس صوتی پیشرفته برای توسعه دهندگان ،امکان ارسال و دریافت پیامک و برقراری تماس اینترنتی را در اغلب سرویس های نرم افزاری مهیا می کند. اهمیت وجود این سرویس در زبانهایی مانند C و ++C همانطور که میدانید با توجه به اهمیت این زبانها و به خصوص پشتیبانی از کتابخانههای بسیار مدرن در توسعهٔ اپلیکیشنها و وبها کاربرد بسیاری دارند که شاید در کشور ما آنچنان با آنها آشنا نیستیم. بنابراین وجود سرویسهای ارسال پیامک در قالب زبان سیپلاسپلاس میتواند کمک بسیار بزرگی به توسعهدهندگان و علاقهمندان آن در حوزههای توسعهٔ نرمافزار و انواع برنامههای موبایل و وب کمک کند. ساختار اولیه خروجی سرویس کاوهنگار به صورت زیر است: { "return": { "status":404, "message":"متد تعریف نشده است" }, "entries": { null } } در صورتی که مقادیر ارسالی صحیح و مطابق با اطلاعات کاربری موجود در کاوهنگار باشد نتیجهٔ برگشتی آن به صورت زیر خواهد بود: { "return": { "status": 200, "message": "تایید شد" }, "entries": [ { "messageid": 8792343, "message": "خدمات پیام کوتاه کاوه نگار", "status": 1, "statustext": "در صف ارسال", "sender": "10004346", "receptor": "0914XXXXXXX", "date": 1356619709, "cost": 120 } ] } نمونهٔ اولیه که توسعه داده شده، با مفهوم اولیه جهت ارسال پیام کوتاه بر اساس کلید و شمارههای ارسالی آماده شده که کد نمونهٔ آن به صورت زیر خواهد بود. #include <iostream> #include <Kavenegar> int main() { //! Your Api Key std::string apiKey {"Your Api-Key"}; //! Kavenegar Default Sender Number std::string senderLine {"10004346"}; Kavenegar::KavenegarApi api(MethodType ,"10004346",apiKey); //ToDo.. try catch exception handling. api.send("09140000000","Hi!"); std::cout << "Result : " << api.getResult(); //JSon Output return 0; } نکته: نمونهٔ ساخته شده کامل و با تمام جزئیات موجود در کاوهنگار تکمیل و توسعه داده خواهد شد. لینک مربوط به کیت توسعه در گیتهاب. جهت استفاده از این نمونه توجه داشته باشید که جهت اجرای وبسرویس آن نیاز به نصب Curl و RapidJson خواهید داشت.
-
معرفی سیاههی تغییرات (Change Log) سیاههی تغییرات (changelog یا CHANGELOG) اشاره به یک سیاهه یا تاریخچهی تغییراتی دارد که در یک پروژه همانند یک وبسایت اینترنتی یا یک پروژه نرمافزاری اعمال میشوند. یک پروندهی سیاههی تغییرات شامل یک لیستی است از تغییرات قابل توجه برای هر نسخه از یک پروژه. این تغییرات عموماً به عنوان اصلاحات باگها، قابلیتهای جدید و ... در این سیاهه نوشته میشوند. برخی از پروژههای متنباز فایل سیاههی تغییرات را در دایرکتوری سطح بالای کدهای منبع پروژه خود قرار میدهند. هرچند که قرارداد متعارف نامگذاری این فایل ChangeLog است، این فایل گاهی اوقات به صورت CHANGES یا HISTORY هم نامگذاری میشود (باید توجه داشت که NEWS فایل متفاوتی است که تغییرات بوقوع پیوسته از یک نسخه به نسخه دیگر در آن نوشته میشود، نه تغییراتی که از یک کامیت به کامیتی دیگر اتفاق افتادهاند). برخی از نگهدارندههای پروژهها پسوند .txt را هم به انتهای این فایل اضافه میکنند. برخی از سیستمهای نسخهبندی قادر به تولید کردن اطلاعاتی هستند که مناسب قرارگرفتن در یک فایل سیاههی تغییرات است. چرا باید از سیاههی تغییرات جهت حفظ تغییرات استفاده شود؟ برای اینکه کاربران و مشارکت کنندگان به راحتی بدانند که دقیقاً چه تغییرات قابل توجهی بین هر نسخهی انتشار یافته و دیگر نسخهها ایجاد شده است، بهتر است از این اصول پیروی شود. چه کسانی به سیاههی تغییرات نیاز دارند؟ چه مصرفکنندگان و چه توسعهدهندگان، کاربران نهایی نرمافزار، انسانهایی هستند که به آنچه در نرمافزار تغییر پیدا میکند اهمیت میدهند؛ هنگامی که نرمافزار تغییر پیدا میکند، مردم میخواهند بدانند که چرا و چطور این تغییرات اعمال شده است. بنابراین استفاده از این قالب علاوه بر ارائهی ارزشی در بحث تجربهکاربری، در روند توسعه اهمیت بسیاری دارد. چطور میتوانم یک سیاههی تغییرات خوب ایجاد کنم؟ راهنمای اصول سیاههی تغییرات برای انسانها هستند نه ماشین. برای هر کدام از نسخهها باید یک مدخل وجود داشته باشد. انواع مشابه تغییرات باید دستهبندی شوند. نسخهها و بخشها باید پیوند پذیر باشند. آخرین نسخه اول میآید. تاریخ عرضهی هر کدام از نسخهها، نمایش داده میشود. از استاندارد و اصول نسخهبندی معنایی استفاده و آن را رعایت کنید. انواع تغییرات Added برای امکانات جدید. Changed برای تغییر در عملکرد موجود. Deprecated برای امکاناتی که به زودی حذف میشوند. Removed برای امکانات حذف شده. Fixed برای هر نوع رفع خطا. Security در صورت وجود هرگونه آسیبپذیری امنیتی. برای ردیابی تغییرات آتی یک بخش با عنوان Unreleased در بالا نگهدارید، این کار دو هدف دارد: مردم میتوانند ببیند که در نسخههای آینده چه تغییراتی را میتوان انتظار داشت. در زمان انتشار، میتوانید تغییرات بخش Unreleased را به بخش نسخهی جدید منتقل کنید. آیا استانداردی برای سیاههی تغییرات وجود دارد؟ حقیقتاً خیر، هرچند سبکی از گنو و همچنین بخشی از فایل خبر گنو به این مورد اشاره دارند، اما اینها ناکافی میباشند. نام فایل سیاههی تغییرات چه باید باشد؟ میتوانید آن را CHANGELOG.md بنامید. برخی از پروژهها از HISTORY، NEWS و یا RELEASES استفاده میکنند. هرچند مهم نیست که نام فایل نهایی این روند چه چیزی باشد، اما طوری باید باشد که کاربر متوجه هدف فایل تغییرات باشد. یک مثال از قالب صحیح از سیاههی تغییرات # Changelog All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] ## [1.0.0] - 2017-06-20 ### Added - New visual identity by [@tylerfortune8](https://github.com/tylerfortune8). - Version navigation. - Links to latest released version in previous versions. - "Why keep a changelog?" section. - "Who needs a changelog?" section. - "How do I make a changelog?" section. - "Frequently Asked Questions" section. - New "Guiding Principles" sub-section to "How do I make a changelog?". - Simplified and Traditional Chinese translations from [@tianshuo](https://github.com/tianshuo). - German translation from [@mpbzh](https://github.com/mpbzh) & [@Art4](https://github.com/Art4). - Italian translation from [@azkidenz](https://github.com/azkidenz). - Swedish translation from [@magol](https://github.com/magol). - Turkish translation from [@karalamalar](https://github.com/karalamalar). - French translation from [@zapashcanon](https://github.com/zapashcanon). - Brazilian Portugese translation from [@Webysther](https://github.com/Webysther). - Polish translation from [@amielucha](https://github.com/amielucha) & [@m-aciek](https://github.com/m-aciek). - Russian translation from [@aishek](https://github.com/aishek). - Czech translation from [@h4vry](https://github.com/h4vry). - Slovak translation from [@jkostolansky](https://github.com/jkostolansky). - Korean translation from [@pierceh89](https://github.com/pierceh89). - Croatian translation from [@porx](https://github.com/porx). - Persian translation from [@Hameds](https://github.com/Hameds). - Ukrainian translation from [@osadchyi-s](https://github.com/osadchyi-s). ### Changed - Start using "changelog" over "change log" since it's the common usage. - Start versioning based on the current English version at 0.3.0 to help translation authors keep things up-to-date. - Rewrite "What makes unicorns cry?" section. - Rewrite "Ignoring Deprecations" sub-section to clarify the ideal scenario. - Improve "Commit log diffs" sub-section to further argument against them. - Merge "Why can’t people just use a git log diff?" with "Commit log diffs" - Fix typos in Simplified Chinese and Traditional Chinese translations. - Fix typos in Brazilian Portuguese translation. - Fix typos in Turkish translation. - Fix typos in Czech translation. - Fix typos in Swedish translation. - Improve phrasing in French translation. - Fix phrasing and spelling in German translation. ### Removed - Section about "changelog" vs "CHANGELOG". ## [0.3.0] - 2015-12-03 ### Added - RU translation from [@aishek](https://github.com/aishek). - pt-BR translation from [@tallesl](https://github.com/tallesl). - es-ES translation from [@ZeliosAriex](https://github.com/ZeliosAriex). ## [0.2.0] - 2015-10-06 ### Changed - Remove exclusionary mentions of "open source" since this project can benefit both "open" and "closed" source projects equally. ## [0.1.0] - 2015-10-06 ### Added - Answer "Should you ever rewrite a change log?". ### Changed - Improve argument against commit logs. - Start following [SemVer](https://semver.org) properly. ## [0.0.8] - 2015-02-17 ### Changed - Update year to match in every README example. - Reluctantly stop making fun of Brits only, since most of the world writes dates in a strange way. ### Fixed - Fix typos in recent README changes. - Update outdated unreleased diff link. ## [0.0.7] - 2015-02-16 ### Added - Link, and make it obvious that date format is ISO 8601. ### Changed - Clarified the section on "Is there a standard change log format?". ### Fixed - Fix Markdown links to tag comparison URL with footnote-style links. ## [0.0.6] - 2014-12-12 ### Added - README section on "yanked" releases. ## [0.0.5] - 2014-08-09 ### Added - Markdown links to version tags on release headings. - Unreleased section to gather unreleased changes and encourage note keeping prior to releases. ## [0.0.4] - 2014-08-09 ### Added - Better explanation of the difference between the file ("CHANGELOG") and its function "the change log". ### Changed - Refer to a "change log" instead of a "CHANGELOG" throughout the site to differentiate between the file and the purpose of the file — the logging of changes. ### Removed - Remove empty sections from CHANGELOG, they occupy too much space and create too much noise in the file. People will have to assume that the missing sections were intentionally left out because they contained no notable changes. ## [0.0.3] - 2014-08-09 ### Added - "Why should I care?" section mentioning The Changelog podcast. ## [0.0.2] - 2014-07-10 ### Added - Explanation of the recommended reverse chronological release ordering. ## [0.0.1] - 2014-05-31 ### Added - This CHANGELOG file to hopefully serve as an evolving example of a standardized open source project CHANGELOG. - CNAME file to enable GitHub Pages custom domain - README now contains answers to common questions about CHANGELOGs - Good examples and basic guidelines, including proper date formatting. - Counter-examples: "What makes unicorns cry?" [Unreleased]: https://github.com/olivierlacan/keep-a-changelog/compare/v1.0.0...HEAD [1.0.0]: https://github.com/olivierlacan/keep-a-changelog/compare/v0.3.0...v1.0.0 [0.3.0]: https://github.com/olivierlacan/keep-a-changelog/compare/v0.2.0...v0.3.0 [0.2.0]: https://github.com/olivierlacan/keep-a-changelog/compare/v0.1.0...v0.2.0 [0.1.0]: https://github.com/olivierlacan/keep-a-changelog/compare/v0.0.8...v0.1.0 [0.0.8]: https://github.com/olivierlacan/keep-a-changelog/compare/v0.0.7...v0.0.8 [0.0.7]: https://github.com/olivierlacan/keep-a-changelog/compare/v0.0.6...v0.0.7 [0.0.6]: https://github.com/olivierlacan/keep-a-changelog/compare/v0.0.5...v0.0.6 [0.0.5]: https://github.com/olivierlacan/keep-a-changelog/compare/v0.0.4...v0.0.5 [0.0.4]: https://github.com/olivierlacan/keep-a-changelog/compare/v0.0.3...v0.0.4 [0.0.3]: https://github.com/olivierlacan/keep-a-changelog/compare/v0.0.2...v0.0.3 [0.0.2]: https://github.com/olivierlacan/keep-a-changelog/compare/v0.0.1...v0.0.2 [0.0.1]: https://github.com/olivierlacan/keep-a-changelog/releases/tag/v0.0.1
-
- سیاههی تغییرات
- change log
-
(و 3 مورد دیگر)
برچسب زده شده با :
-
با سلام، معمولاً یکی از سوألهایی که در ذهن افراد بلندپرواز رجوع میکند این است که من میخواهم سیستمعامل بنویسم! ? از لحاظ تجربیِ من و نظرات اساتید و افراد حرفهای، تولید و توسعهٔ سیستمعامل یکی از پیچیدهترین و مشکلترین کارهای برنامهنویسی در این حوزه است. تولید و توسعهٔ چنین محصولی زمان و دانش بسیار بالایی در زمینههای مختلف علوم کامپیوتر را میطلبد که من در این پست به برخی از آنها اشاره میکنم. اختراع چرخ از اول ممکن است در بعضی از موارد اختراع یک محصول از اول کار منطقی باشد، اما در بسیاری از آنها هم ساخت و توسعهٔ آن از اول از جنبهٔ اقتصادی و حتی علمی قابل توجیح نمیباشد؛ ساخت و تولید سیستمعامل میتواند به عنوان یکی از عواملِ پیشرفت کشوری در حوزهٔ فناوری و اهمیت آن به عنوان یک محصول بومی بسیار موثر باشد، اما همه چیز در اینجا خلاصه نمیشود بنابراین تولید و توسعهٔ چنین محصولاتی باید با مهارت و انگیزههای بسیار حساب کتاب شدهای پیاده سازی شود. بلند پروازی و حماقت تنها نکتهای که موجب شد من این پست را ایجاد کنم، اشاره به اهمیت بلند پروازی در حرفهای شدن و کسب مهارتهای فوق پیشرفته است! این که شما بلند پرواز هستید بسیار خوب است. اما باید این را در نظر داشته باشید بعضی از بلند پروازیهایی که بدون تحقیقات فنی ایجاد میشوند حماقتی بیش نیستند. برای مثال باید در نظر داشته باشید تولید و توسعهٔ سیستمعامل هیچ شباهتی به یک نرمافزار سادهای با عملِ CRUD نیست و نویسندهٔ سیستمعامل حتی یک برنامهنویس متوسط به بالا محسوب نمیشود! چرا که توسعهدهندهٔ سیستمعامل باید به عنوان واقعی یک مهندس کاملِ کامپیوتر به تمام ویژگیهای آن باشد (برنامهنویس کاملاً حرفهای با کولهباری از تجربههای خفن و دانش خوب در رابطه با الگوریتمها و قالبهای طراحی و غیره...). اگر شما یک برنامهنویس تازهکار هستید و در ابتدای کار به سراغ چنین بلندپروازی آمدهاید پیشنهاد میشود در حد آشنایی با این موارد که در ادامه آمده است قانع باشید و تا زمانی که به این سطح از دانش و تجربه نرسیدهاید حتی به فکر نوشتن چنین محصولی نباشید (این کار برای بررسی و آزمایش جهت ارتقاء مهارتهای خود توصیه میشود) اما اگر خارج از آن باشد حماقتی بیش نخواهد بود ? من افراد بسیار زیادی را میشناسم که با هدف تولید سیستمعامل بومی قدم برداشتهاند اما در نهایت وارد یک دامنهٔ وسیعی از پیچیدگی افتادهاند که آنها را منصرف کرده است. بخشهای اصلی سیستمعامل هسته (کرنِل) کرنل به عنوان قلب سیستمعامل محسب میشود، اولین برنامهای است که در آغاز به کار کامپیوتر اجرا میشود، و مدیریت منابع کامپیوتر و همچنین مدیریت درخواستها از طرف برنامههای سیستمی و کاربردی را به عهده میگیرد. برنامههای سیستمی برنامههای سیستمی در بالاترین بخش کرنِل اجرا میشود. این نوع برنامهها به عنوان انجام کارهای مهم و مفید نیستند، بلکه برنامههایی هستند که لازم است برای اتصال هسته به برنامههای کاربر و دستگاههای جانبی استفاده شوند. درایورهای دستگاهها، فایلسیستمها، برنامههای شبکه، و نرمافزارهای سیستمی مانند مباحث مدیریت دیسک که همهٔ آنها مثالهایی از برنامههای سیستمی هستند. برنامههای کاربردی این نوع برنامهها بخشی از برنامههای سیستمعامل نیستند. برنامههایی همچون مرورگری اینترنت، مدیا پلیر و برنامههایی از این قبیل به عنوان برنامههای عامیانهای هستند که بعدها میتواند در کنار سیستمعامل آنها را قرار داد. چه چیزهایی را باید بدانیم؟ علوم پایه و اولیه کامپیوتر تئوری برنامهنویسی کامپیوتر و روشهای بهتر زبانهای برنامهنوسی سطحپایین و سطحبالا توسعهٔ سیستمعامل مانند توسعهٔ نرمافزار یا وب یا اپلیکیشن نیست، این نوع محصول چیزی نیست که شما بتوانید به این راحتی به آن بپردازید و یاد بگیرید. قبل از اینکه وارد این مبحث شوید نیاز است شما یک پایهٔ پایدار و منطقی از یک علوم رایانه را ایجاد کنید. خلاصهای از حداقل مواردی که قبل از ورود به این حوزه لازم است بررسی سیستمعاملهای موجود به خصوص، منابع سکوهای یونیکس و لینوکس را بررسی و مورد مطالعه قرار دهید. در نظر داشته باشید که سیستمعامل خود به عنوان یک محصول بسیار مهم و کامل مانند یک درخت محسوب میشود که ریشهٔ آن مهمترین بخش آن است (هسته یا کرنل). آشنایی با علوم کامپیوتر پایه آشنایی کامل با کامپایلر آشنایی کامل و حرفهای با زبانهای C و ++C آشنایی با لینوکس و یونیکس آشنایی با قالبهای اجرایی، قالبهایی مانند elf و exe آشنایی با پلتفرم به خصوص مطالعات عمیق در رابطه با معماری و ساختار پردازندهٔ مورد نظر محیط توسعهٔ مناسب (جهت برنامهنویسی) که به دو گزینهٔ ویندوز و لینوکس است که بیشتر محیط لینوکس و ابزارهای GNU و کامپایلر GCC و Clang میباشد که در مقابل در ویندوز از کمپایلر MSVC میتوان استفاده کرد. در اختیار داشتن ابزارهای آزمایش مانند شبیهسازهایی همچون VirtualBox و VMWare نیاز است. داشتن اطلاعات کافی در حوزهٔ سختافزار و شبکه (درک و فهم در رابطه با سختافزارها و نحوهٔ عملکرد آنها) یکی از موارد بسیار مهمی است که قبل از توسعهٔ سیستمعامل باید به آنها توجه کرد. و موارد دیگر که در توسعهٔ سیستمعامل بسیار مهم هستند. با توجه به اینکه شما برای توسعهٔ چنین محصولی بر روی پلتفرم x86 و زبان C تصمیم گرفته باشید میتوانید مراحل زیر را در نظر بگیرید: انتخاب بارگذار کنندهٔ بوت سیستمعامل (بوتلودِر) که در اینجا گزینهٔ پیشنهادی Grub است. پیاده سازی نقطهٔ ورودی کد C به زبان اسمبلی یا همان (Entry Point) تولید و توسعهٔ یک لاگر (جهت دیباگینگ) ساده مانند printf مقداردهی اولیه (Initialization) پردازنده (ساخت جدول GDT، برنامهریزی PIC و PIT و ...) پیاده سازی یک چهارچوب کامل از مدیریت حافظه پیاده سازی یک چهارچوب کامل از مدیریت حافظهی مجازی پیاده سازی زمانبندی پردازنده پیاده سازی موارد مورد نیازی که در مهندسی نرمافزار آمده است مانند spinlock پیاده سازی فایلسیستمها پیاده سازی رابطهای برنامهنویسی API پیاده سازی رابطهایی مانند Shell در نهایت برنامهنویسی جانبی جهت توسعه و تکامل سیستمعامل توضیحاتی که به آنها اشاره شد تنها بخشی از هزاران موردی است که باید در طراحی سیستمعامل در نظر داشت که مسلماً افراد حرفهای در این حوزه خود به خوبی میدانند چه مباحثی برای توجه به آنها نیاز است. برخی از منابع جهت طراحی و توسعهٔ سیستمعامل OSDev.org Index page https://www.irantux.org/html/ https://www.kernel.org/ http://www.minix3.org/ بلند پروازی کنید، اما حماقت نکنید ?
-
سلام، این تاپیک صرفاً جهت بازبینی و رقابت بین کدهای نوشته شده توسط شما است، شما میتوانید سَبکِ تمیزنویسی (استایلِ) کدهای خود را برای معرفی به دیگران در این بخش به اشتراک بگذارید. کدهایی که از لحاظ خوانایی و پاکی و فاقد باگهای احتمالی هستند امتیاز مثبت و کدهایی که فاقد آن باشند امتیاز منفی خواهند گرفت.
-
- برنامهنویسی
- تمیزنویسی
-
(و 2 مورد دیگر)
برچسب زده شده با :
-
ما به شما پیشنهاد میکنیم که دربارهٔ انتقال ایمن اطلاعات توسط JSon Web Token بیشتر بدانید. یک وبتوکت از نوع جیسان (JWT) یک استاندارد باز از (RFC7519) میباشد که که یک روش جمع و جور و خود مختار را برای ایمنی اطلاعات بین ترنسفر اطلاعات در JSon را تعریف میکند. این اطلاعات به عنوان اطلاعات مورد اعتماد قابل تایید میباشند زیرا آنها امضای دیجیتالی شدهاند. تراکنشهای مربوط به JWT را میتوان با استفاده از یک کلید مخفی عمومی/خصوصی امضا کرد. ساختار وبتوکن جیسان چکونه است؟ Header Payload Signature هدر یا عنوان (Header) معمولاً شامل دو قسمت است: نوع توکن، که JWT است، و الگوریتم هَش کننده که استفاده میشود. مانند الگوریتمهای HMAC ،SHA256 و یا RSA. برای مثال: { "alg": "HS256", "typ": "JWT" } سپس، این جیسان که از نوع Base64-URL کد نگاری شده است قسمت اول JWT را تشکیل میدهد. بخش دوم Payload قسمت دوم توکن ها، payload است که اظهارات را در برمیگیرد. اظهارات ثبت شده (Registered claims): اینها مجموعهای از اظهارات از پیش تعریف شده است که اجباری در به کار گیری آنها نیست، اما توصیه میشود تا مجموعهٔ مفیدی را ارائه دهد. اظهارات عمومی(Public claims): اینها میتوانند توسط کسانی که از JWT استفاده میکنند تعریف کنند. اما برای جلوگیری از برخورد بهتر است تعریف شوند. اظهارات خصوصی(Private claims): این اظهارات سفارشی ایجاد شده برای به اشتراک گذاشتن اطلاعات بین طرفین است که توافق بر روی استفاده از آنها میباشد نه اظهارات ثبت شده یا عمومی. یک مثال از payload به صورت زیر نشان داده شده است: { "sub": "1234567890", "name": "John Doe", "admin": true } امضاء برای ایجاد بخش امضاء شما باید هدر کُد شده را جهت امضا شدن دریافت کنید که شامل payload رمزینه شده، یک کد خاص و الگوریتم مشخص شدهای میباشد. HMACSHA256( base64UrlEncode(header) + "." + base64UrlEncode(payload), secret) سپس، شما باید همهٔ اینها را باهم دیگر ترکیب کنید. نمونهٔ زیر یک JWT را نشان میدهد که حاوی هدر قبلی و payload رمز شده است که در نهایت آن با یک رمز ویژه امضاء شده است. اگر شما میخواهید تا با JWT بیبشتر آشنا شوید و این مفاهیم را در عمل اجرا کنید، میتوانید از jwt.io استفاده کنید.
-
- برنامهنویسی
- jwt
- (و 4 مورد دیگر)
-
با سلام، با توجه به درخواستهای مکرر از کاربران و اساتید محترم، نیاز جامعهی برنامهنویسی به معرفی محصولات و قابلیتهای یک زبان در قالب یک محصول قابل لمس و دیداری احساس میشد. بنابراین این بخش با هدف این که توسعهدهندگان بومی بتوانند محصولات و پروژههای خود را برای معرفی از جنبههای فنی و همچنین تجاری مطرح نمایند ایجاد شده است. هدف این است که شما توسعهدهندهی محترم بتوانید برای کسب نظر از تجربیات اساتید برای توسعه هرچه بهتر پروژهی خود و همچنین معرفی محصول نوشته شدهی خود اقدام کنید. در صورتی که محصول شما تحت زبان و استانداردهای ویژهای تولید شده است میتوانید آن را برای همگان نشان دهید تا بتوانند نمونهی واقعی یک محصول را در آن حوزه مشاهده نمایند. اهداف کلی معرفی محصولات نوشته شده توسط زبانهای مختلف (این کار باعث میشود توسعهدهندگان قابلیتهای یک زبان را در پروژه واقعی مشاهده کنند) هر چند ممکن است پروژههای کوچکی معرفی شود اما اینکه با یک زبان واقعاً چه کارهایی میتوان انجام داد بسیار مهم است. امکان نظر سنجی و کسب نظرات اساتید و افراد با تجربه برای بهبود هرچه بهتر پروژه شما امکان بررسی و ارسال نظر و امتیاز به پروژه شما جهت کسب امتیاز مهارتی و تجربی امکان بررسی پروژه و رزومههای واقعی شما توسط کارفرمایان و اساتید معتبر امکان ایجاد محیط رقابتی برای بهبود مهارتهای تخصصی و شخصی در توسعهدهندگان و در نهایت بهبود مهارتهای جامعهی برنامهنویسی نمونه قالب معرفی پروژه به صورت زیر میباشد: عنوان پروژه توضیحات در رابطه با کاربرد پروژه معرفی زبان برنامهنویسی بَکاِند معرفی زبان یا فناوریهای به کار گرفته شده در بخش فرانتاِند کتابخانهها و فریموُرکهای استفاده شده نوع پروژه (رایگان یا تجاری) تعداد توسعه دهندگان یا تیم حق چاپ و تکثیر (شخصی یا حقوقی) چند قطعه تصویر استاندارد از محیط محصول مثال: با سلام، عنوان: پروژهی جِنسیس (Genesis) توضیحات: این پروژه یک موتور برنامهنویسی چندسکویی در قالب یک چهارچوب تخصصی میباشد که در توسعه هرچه سریعتر محصولات و طراحی و همچنین مستقر سازی آنها بر روی پلتفرمهای مختلف کمک بسیاری میکند. زبانها و فناوریهای استفاده شده: زبان برنامهنویسی ++C فریم وُرک و کتابخانهها: کتابخانهی OpenSSL، LibCurl، STL ابزارهای ساخت: qmake، qbs و cmake نوع پروژه: تجاری (انحصاری شرکتِ Dotwaves LLC) نویسندگان: کامبیز اسدزده حق چاپ و تکثیر: شرکت داتویوز *دوستان میتوانند نظرات و پیشنهادات خود را در رابطه با این پروژه اعلام کنند.
-
- محصولات
- برنامهنویسی
-
(و 4 مورد دیگر)
برچسب زده شده با :
-
با سلام، با توجه به سوالات مکرر برخی از کاربران و خصوصاً دانشجویان جدید، تصمیم گرفته شد تا توضیحاتی دربارهٔ نحوهٔ یادگیری برنامهنویسی با سیپلاسپلاس بیان شود. قبل از هر چیز لازم است بدانید، سیپلاسپلاس یک زبان برنامهنویسی کاملاً تخصصی مهندسی است. بنابراین یادگیری آن طبیعتاً نیاز به تلاش، تحمل و پشتکار کافی در مقابل چالشهای آن خواهد داشت. مقدمه در حال حاضر بیش از سه دهه است که از ساخت و معرفی زبان برنامهنویسی ++C میگذرد. در رابطه با آن که هدف از ایجاد این زبان چه چیزی بوده و مزایای آن نسبت به زبانهای دیگر چه چیزی است (چرا موتور مخفی جهان مدرن امروزی است) را میتوانید در این مقاله مطالعه کنید. اما بسیاری از افراد علاقهمند به زبانهای برنامهنویسی تمایل بسیاری دارند تا در برنامهنویسی با این زبان به درجه مطلوب و درواقع (حرفهای) برسند. قبل از هر چیز باید مواردی را در نظر داشته باشیم که یاد گیری زبانهای برنامهنویسی به خودی خود کافی نیست! مخصوصاً زبانهای C و ++C مستلزم پیشنیازهای تخصصی بسیاری هستند که در روند تولید، توسعه، تجزیه و تحلیل لایههای مختلف مهم است. آیا زبان سیپلاسپلاس در حال توسعه است؟ به جرأت میتوانم بگویم که سیپلاسپلاس به عنوان پیشتاز زبانهای برنامهنویسی با سرعت بسیار زیادی در حال گسترش و توسعهٔ خود است. بهتر است بدانید این زبان از شیوهٔ نسخهنگاری معمولی بهره نمیبرند، بلکه از «استاندارد» (ISO/IEC) که کمیتهٔ استانداردسازی آن را تأیید و نهایی میکند بهره میبرد. بنابراین، بر اساس استانداردی پیش میرود که پیشنویسهها و بهبودهای آن تماماً با حفظ (پشتیبانی از عقبگرد) قابل توجه است. همانطور که در تصویر مربوطه میبینید، سیپلاسپلاس در آخرین بهروز رسانی، به نقشهٔ توسعهٔ خود در سالهای بعد نیز اشاره کرده است که در قالب استانداردهای ۲۳، ۲۶ و ۲۹ از الآن یاد شدهاند. چیزی که در هیچ زبانی در وضعیت فعلی به صورت نقشهٔ راه از توسعه آنها نمیتوان دید! این خود یک نکتهٔ بسیار مثبت است که تیم (کمیته) استانداردسازی این زبان کاملاً این اطمینان را میدهد که این زبان نسبت به نیاز و آینده در حال به روز بوده، است و خواهد بود. لازم است بدانید، استانداردهای فعلی، ۱۷ و ۲۰ و بعد ۲۳ به عنوان یک نسل انقلابی و جهش یافته از سیپلاسپلاس یاد میشوند، اگر شما تجربهٔ نوینی از برنامهنویسی را میطلبید، بهتر است به استاندارد ۲۰ خوشآمدگویی کنید که در کنار کارآیی بسیار عالی، یک نحو و سبک بسیار ساده و روان در اختیار توسعهدهنده قرار میدهد. در ادامه ما به سوالاتی که معمولاً توسط تازهکاران پرسیده شده است پاسخ دادهایم: ابعاد علمی و اقتصادی کار با ++C در ایران متاسفانه اکثر ما ملتی هستیم، تَنبَل و حاضر برای لُقمهٔ آماده! بنابراین بازار کار در ایران به گونهای است که بیشتر شرکتها و افراد توسعه دهنده به سراغ زبانهای سادهتر و در دسترستر (بی دردسر) میروند. غافل از آن که یک برنامهٔ تولید شده توسط سی++ بسیار سریع، جذاب، قدرتمند و انعطافپذیرتر است. همهٔ بحث در اینجا تمام نمیشود، چرا که شاید در سالهای اخیر وضعیت تقریباً فرق کرده و به کمک اطلاع رسانیهای اساتید و دوستان حرفهای، ما در این زمینه این اطلاعرسانی به خوبی صورت گرفته و توسعه دهندهها از قابلیتها پنهان این زبان آگاه شدهاند و میدانند که سیپلاسپلاس به عنوان یک زبان بسیار کاربردی در زمینههای مختلف جایگاه ویژهای دارد. شرکتها و گروههای برنامهنویسی بسیاری به دنبال برنامهنویسهای سی++ هستند که این امر نشان دهندهٔ این است که نسبت به سالهای گذشته پیشرفت و آگاهی جامعهٔ برنامهنویسی در این حوزه منطقیتر و بهتر شده است. من بارها در مورد بحث محدودیتهای سختافزاری، مشکلات و محدودیتهای پیش و روی قانون مور، مسائل مربوط به انرژی سبز و غیره صحبت کردهام. و اکنون زمان آن رسیده است که بیشتر در این باره فکر کنید که واقعاً چه ابزارهایی آیندهٔ بهتر و موثرتری در پیشرفت صنایع خواهند داشت. بنابراین، بهتر است قبل از هرچیز در نظر داشته باشید که هدف از این تاپیک، این نیست که اثبات کنیم یک زبان نسبت به زبان دیگر برتری دارد. هدف اصلی من این است به واقعیتهایی اشاره کنم که غیر منطقی نیستند. چرا که واقعاً کارفرمایانی وجود دارند که نیازمند به برنامهنویسانی هستند که تخصص خوبی در زبانهای برنامهنویسی دیگری مانند ++C دارند. همه چیز در زبانهای سطحبالاتر خلاصه نشده است! توجه داشته باشید که هدف از این توضیحات چنین نیست که بعد از خواندن این مطالب زبان برنامهنویسی مورد علاقهٔ خود را کنار گذاشته و به سمت سی++ بروید، خیر! یا مقصود آن نیست که با دیدن و شنیدن پیچ و خمهای آن از یادگیری آن منصرف شوید. من بارها گفتهام، تمامی زبانها به عنوان ابزارهای کاری شما در یک جعبهٔ ابزار هستند و هر زبانی حوزهٔ کاربردی خودش را دارد. بنابراین قبل از اینکه شما تصمیم بگیرید که چه زبانی را یاد خواهید گرفت باید حوزهٔ کاری وعلاقهٔ خودتان را مشخص کنید سپس وارد تحقیق و بحث و نظر خواهی راجع به آن زبان نمایید. مقایسهٔ زبان طبق این قانون کاملاً کار اشتباه و بچهگانه است و به هیچ عنوان در مورد یک زبان برنامهنویسی گاردِ تعصبی نگیرید. متاسفانه به خاطر تفکرات اشتباه و معرفیهای غیر منطقی و غیرعلمی برنامهنویسان کشور ما که ممکن است حتی خودِ شما هم چنین تصور کنید، در رابطه با سایر زبانها مانند سی++ بسیاری از کارفرمایان نیازمند چنین برنامهنویسانی هستند که در کشور ما واقعاً نیاز است. توجه داشته باشید که انتخاب درست این نیست که چون همه سراغ زبانهای پر مخاطبتری میروند و چون تمامی آگهیها استخدامی مرتبط با آنها است پس فقط باید آنها را یاد گرفت! خیر چنین تفکری اشتباه است و ضربهٔ بسیار بزرگی در صنعت و دانش آیندهٔ جامعهٔ تخصصی هر کشوری که به این شکل پیش میرود خواهد زد، چرا که ما باید طبق مسیر و سرعتی که دنیا در حال جهش است، خود را هماهنگ و بهروز کنیم. نکاتی در این میان وجود دارد که باید به آنها اشاره کرد: متاسفانه در کشور ما بسیاری از برنامهنویسان چه مبتدی چه حرفهای اینطور تصور میکنند که تولید محصول نرمافزاری یعنی برنامهنویسی یک نرمافزار که قرار است به بانک اطلاعاتی متصل شده و کارهایی مانند ثبت و ویرایش اطلاعات و در نهایت گزارش گیری و دیگر عملیات ممکن را انجام دهد! این تفکر به شدت اشتباه است! الآن دیگر سیستم نرمافزاری، معماریها و سبک و سیاقهای ساختوساز فرق کرده است. مبتنی بودن بر خدمات متمرکز، غیرمتمرکز و دیگر فناوریها بسیار مهم است. توجه کنید که بزرگترین و معروفترین فناوریها مطرح جهانی معمولاً به واسطهٔ این زبان طراحی میشوند، مانند، سیستمعاملها، نرمافزارها، زیرساختها و حتی بلاکچین و بیتکوین که خالی از لطف نیستند. بسیاری از بانکها و شرکتهای صنعتی و اقتصادی مهم کشور نیازمند برنامهنویسان سی++ هستند تا بتوانند در بحث بانکی برای توسعه دستگاههای پرداخت مانند Pos و ATM از این زبان و برنامهنویسان بهره ببرند. در صنایع بزرگ خودرو سازی و دیگر موارد نرمافزارهای مورد نیاز است تا با سرعت بسیار و بدون محدودی پلتفرمی پاسخگوی یک چرخهٔ تولید باشند تا بتواند زیرساختها و رابطهای یک شرکت بزرگ را مدیریت و آن را بهینه کند. در بسیاری از حوزههای صنعتی کشور شرکتهای غولپیکر در زمینهٔ تولیدات انبوه و سنگین که توسط ماشینآلات صورت میگیرد به دنبال برنامهنویسان سی و سی++ هستند که ممکن است به صورت معرف یا آشنا با آنها مواجه و استخدام شوید. شرکتهای سختافزاری و استارتآپهایی که در حوزهٔ الکترونیک و سختافزار فعالیت میکنند به دنبال برنامهنویسیان سی++ هستند تا بتوانند در حوزهٔ کاری خود اهداف خود را توسعه و شما را به عنوان مهرهای مفید پیش ببرند. شرکتهای توسعهدهندهٔ موبایل و خطوط تولیدی تلفنهای همراه داخلی گسترش یافته و به شدت نیازمند برنامهنویسان سی++ هستند که برخی از آنها مبادلات بینالمللی نیز دارند. در بخش حوزهٔ شهر سازی، مدیرت شهر و همچنین راهداری شرکتهایی هستند که برای تولید سیستمهای مدیریتی مانند مدیریت راهها و ترددهای خودرو و یا مدیریت ترافیک و موارد این چنینی به دنبال برنامهنویسان سی++ هستند. بسیاری از شرکتها و حتی تیمهای توسعه بر روی پلتفرمهای iOS و Android به صورت تخصصی سفارشی سازی و حتی ساخت و توسعهٔ اپلیکیشنهای ایرانی تمرکز دارند که جدیداً به لطف آگاهی از فریموُرکهایی مانند Qt به سمت این حوزه آمده و نیازمند سی++ کاران هستند. شرکتهای بازیسازی کشور ما که این سالها با پیشرفتهای خوبی مواجه شدهاند به دنبال برنامهنویسان سی++ هستند که بتوانند در این صنعت برای فرهنگسازی و توسعه صنعت بازی سازی جلو بروند. بسیاری از شرکتهای پنهان وجود دارد که به صورت بسیار مخفیانه در صنایع سهبعدی و پیشرفته در حال فعالیت هستند که محصولات خود را نه در ایران بلکه در خارج از آن آمریکا و دیگر کشورهای اروپایی به فروش میرسانند که به سفارش آنها بوده است. با دید سطحی به این مسائل نباید نگاه کنید، اگر آگهیهای استخدامی نمیبینید به خاطر این است که این زبان کار کُن می خواهد نه تَنبل! بنابراین شما باید به سراغ آن بروید چرا که بسیاری از شرکتهای بینالمللی فعالیتهای بزرگی انجام میدهند که هیچوقت از آنها خبر ندارید و به صورت کاملاً سفارشی و حساسیت کامل به دنبال برنامهنویسان این زبان هستند (چون میدانند یک سی++ کار هدفمند و با دید بازتری به توسعه نگاه میکند). چنین شرکتها معمولاً استخدام را به صورت رابطهای انجام میدهند و تعداشان هم کم نیست. ما میدانیم که شاید شما با دیدگاه اینکه حتماً باید نرمافزارهای کاربردی تولید کنید به قضیه نگاه میکنید، خوشبختانه فریمورک کیوت به قدری قدرتمند و پُخته شده است که میتوان هر محصول کاربردی در هر زمینهای را تولید کرد که از کارایی بسیار بهتری نسبت به دات نت بهرهمند است. در حوزهٔ امنیت، شبکه و موارد این چنینی شرکتهای بزرگ و Ispها نیازمند این زبان هستند. البته دلایل بسیاری وجود دارد که موجب میشود شرکتها از روی ناچاری به سراغ برنامهنویسان دیگر بروند، که من شخصاً آن را تجربه کرده ام ! در بسیاری از پروژهها که به عنوان مشاور فنی در آنها شرکت کرده بودیم متوجه آن شدیم شرکتها به خاطر عدم وجود برنامهنویس سی++ برای ادامهٔ چرخهٔ تولید خود مجبوراً سراغ برنامهنویسهای دیگر زبانها میروند. این امر به خاطر این است که واقعاً درصد تعداد برنامهنویسان این زبان نسبت به زبانهای دیگر به خاطر (راحت طلبی) و شاید عدم آگاهی از این زبان دور هستند. یکی از نکتههایی که اخیراً جالب بوده است، آن است که شما به واسطهٔ سیپلاسپلاس میتوانید حتی وبسایتهای مورد نیاز خود را بسازید! یک سیستم چند-منظوره طراحی کنید که در حوزههای قابل استفاده باشد. برخی از هماهنگیهایی که این زبان خود را به بهروز رسانیهای بسیار سریع در فناوری وفق داده است، پشتیبانی از ساختارهای چند-سکویی و کاملاً بومی با کارآیی بالا است که در حوزههای موبایل، دسکتاپ و وب میتوانید آن را مورد استفاده قرار دهید. از فناوریهای مربوط به فریمورکهای طراحی گرفته، تا امکان ساختوساز در قالب وباسمبلی، بلاکچین و دیگر موارد. یک نکتهٔ بسیار مهم که طی این سالها تجربه کردهام، این است که خیلی از شرکتها و خدمات دهندهها با این که در جریان مزایای این زبان هستند، مجبوراً به خاطر عدم وجود متخصص کافی از ابزارهای دیگر برای توسعهٔ کار خود استفاده میکنند. هرچند مشکلات این زبان تا به الآن شفاف شده است، اما بهروز رسانیها و توسعههای پی در پی آن موجب بهبودهای بسیار چشمگیری در آن نیز شدهاست. برخی از سوالاتی که علاقهمندان به این حوزه میپرسند در ادامه آمده است: من یک دانشجو هستم و رشتهٔ تحصیلی من کامپیوتر است، به برنامهنویسی با ++C علاقه دارم از کجا باید شروع کنم؟ اگر شما به قصدِ حرفهای شدن دنبال یادگیری این زبان هستید، همانطور که اشارهای شد مباحث پیش نیاز برای یادگیری این زبان مهم هستند و برای درک هرچه بیشتر این زبان بهتر است دانش خوبی در زمینهٔ تجزیه و تحلیل رفتار کامپایلر داشته باشید. علاوه بر این برای آشنایی با کامپایلر رفتار سیستمعامل و واکنشهای کامپایلری در سیستمعاملهای متفاوت بسیار مهم است. به عنوان مثال کامپایلر GCC بر روی ایستگاههای یونیکس تعبیه شده و برای خود قوانین و استانداردهایی را دارد. در کنار آن کامپایلر MSVC نوعی کامپایلر اختصاصی تحت ویندوز است که متناسب با ساختار و معماری ویندوز رفتار میکند. در نگاه اول آشنایی با آنها شاید الزامی به نظر نرسد، چرا که شما صرفاً به سمت یادگیری زبان، نحو (سینتکس)، ویژگیها، کتابخانهٔ پیشفرض و هستهٔ آن میپردازید. اما در بُعد ساخت و ساز یک محصول عالی اطلاعات شما در زمینههای مختلف لازم است کافی باشد. من یک دانشجو هستم اما متاسفانه رشتهٔ تحصیلی من کامپیوتر نیست، به برنامهنویسی با ++C علاقه دارم از کجا باید شروع کنم؟ این کار کمی دشوار است، در مرحلهٔ اول پیشنهاد ما این است که سراغ زبانهای برنامهنویسی دیگری بروید که نیازی نداشته باشد شما درگیر درک کامپایلر یا رفتارهای سیستمعاملی شوید. اما به هر حال اگر شما به هر نحوی میخواهید این زبان را یاد بگیرید چارهٔ کار تلاش مستمر و حوصله است. متاسفانه سیپلاسپلاس ذاتی مرموز دارد و آن این است که اگر بتوانید به آن مسلط شوید یک زبان با وفا و قدرتمندی خواهد بود که در هر زمینهای به نیازهای شما پاسخگو خواهد شد. اما اگر به هر دلیلی نتوانید با این زبان دوست شوید به طور بسیار مرموزی اعصابتان را به هم خواهد ریخت ? که البته طبیعی است چون سی++ تحت کامپایلرهای خود دستِ برنامهنویس را آزاد گذاشته و شما هستید که انتخاب میکنید کُد شما به چه شیوهای با توجه به هدف چگونه عمل کند. چقدر زمان لازم است تا من این زبان برنامهنویسی را یاد بگیرم؟ با توجه به ساختار زبان و رفتارهای کامپایلر میتوان گفت به قدری دامنهٔ سی++ گسترده است که تنها راه حل ممکن برای رسیدن به یک وضعیت مطلوب از دانش مرتبط با آن باید زمان مشخصی در نظر گرفته شود. ممکن است شما بتوانید در بازهٔ ۱ الی ۳ ماه مباحث مقدماتی این زبان را درک کنید. اما توجه داشته باشید پیشنیازات آن نیز نیازمند تحقیق، تجربه عملی و نتیجهگیری تئوری و علمی هستند. با توجه به اینکه شما (سریع، هوشمند با گیرایی بالا باشید) میتوانید در کمتر از ۶ ماه به یک پایداری تقریباً قابل قبول در حد مقدماتی این زبان برسید. استاندارد زبان را درک کنید و نحوهٔ برقراری ارتباط با کتابخانههای پیشفرض STL و غیره را تجربه کنید. برای کسب دانش و افزایش آن به میزان متوسط و به بالا نیازمند تلاش بسیار بیشتری خواهید بود که باید در قالب پروژههای عملی و واقعی صورت گیرد. متاسفانه سی++ به دلیل گسترده بودن چنان پیچیدگیهایی را دارد که تنها میتوان در موقع برنامهنویسی به صورت عملی (بر روی پروژههای واقعی) آن را تجربه کرد. آیا ارزش دارد من این زبان را یاد بگیرم؟ فرصت من کم است و میخواهم سریعاً به درآمدزایی برسم در همین ابتدا به شما میگویم که اگر صرفاً به درآمدزایی سریع فکر میکنید، سیپلاسپلاس گزینهٔ مناسبی برای این رویا نیست! اگر شما به عنوان یک برنامهنویس متوسط و به بالا به این زبان تسلط دارید، و حداقل میتوانید با یکی از کتابخانههای خوب آن ارتباط برقرار کنید، وقت آن است که با کتابخانههای قدرتمند این زبان وارد عمل شوید. کتابخانههایی مانند Boost، Poco، Qt و غیره از سری کتابخانههایی میباشد که امکانات بسیاری را در اختیار شما علاقهمندان این زبان قرار میدهند تا بتوانید در کمترین زمان ممکن به نیازهای خود دسترسی داشته و آن را پیاده سازی کنید. همهٔ آنها در ساخت و توسعهٔ محصول به شما کمک میکنند. فراموش نکنید که بارها گفتهام به زبانها، کتابخانهها و فناوریها به عنوان ابزار در داخل جعبهابزار خود بنگرید. توجه داشته باشید که لازمهٔ طراحی و توسعه یک محصول مفید (قابل قبول) در قالب MVP (کمینه محصول پذیرفتنی) مستلزم داشتن دانش طراحی محصول نیز میباشد. اما همه چیز اینگونه خلاصه نشده است و شما برای اینکه بتوانید یک محصول واقعاً قابل قبول را پیاده سازی کنید مسلماً باید آن را مجهز به قابلیتهای دیگری مانند منابع ذخیره داده و یا سرویسها و ماژولهایی کنید که بتواند به عنوان یک محصول کاربردی روی آن حساب کرد. آیا صرفاً با دانستن زبانهای برنامهنویسی و تسلط بر آن میتواند یک محصول استاندارد و سطح جهانی را به طور کامل تولید کرد؟ نظر من قطعاً خیر است! اگر شما واقعاً با دیدگاه یک سازنده، یک تولید کننده و مهندس تمام عیار در ذهن خود رویا پروری میکنید، در این صورت باید بدانید همه چیز در زبان خلاصه نمیشود! از نظر من حداقل مواردی که (به طور خیلی خیلی خلاصه و محدود) نیاز است تا یک متخصص بتواند پاسخگوی تصمیمگیری نقشهٔ توسعهٔ یک محصول برای مشتری در ابعاد مختلف و سطوح متفاوت از حوزههای موجود در قالب اصولی باشد به صورت زیر است که فرد یا یک تیم باید به آنها اشراف کافی داشته باشد: ۱- آشنا مبانی کامپیوتر که امر طبیعی (شامل درک و فهم مسائل و نحوهٔ حلشون متناسب با پلتفرم اجرایی محصول) ۲- آشنا به ساختار نوع محصول استاندارد در یک حوزه مثل: وب، آیاواس، اندروید یا دسکتاپهای مختلف مثل لینوکس، مک و ویندوز، اینترنت اشیاء و دیگر موارد. ۳- آشنا به فلسفهٔ بکاند و فرانتاند یا ترکیبی از این دو به همراه ابزارهای مناسب. ۴- آشنا به اصول طراحی 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) و روشهای به کار گیری آن نسبت به زبان برنامهنویسی و شرایط مناسب استفاده. ۳۳- آشنا به سبک و قوائد و ساختار زبانهای برنامهنویسی و فرآیند ساخت و ترجمه. ۳۴- و تا صدها گزینهٔ دیگر که میتوان در این بخش لیست کرد که اگر انتخاب شما زبانهای نزدیک به سیستم باشد این داستان در ادامهٔ این توضیحات سر به فلک خواهد کشید. با توجه به این موارد اگر بخواهید محصولی را بسازید که طبق استاندارد آن را توسعه و تولید کنید که در بستر سیپلاسپلاس شکل میگیرد، باید ابزارها و موارد پیشنهادی زیر را در اختیار داشته باشید و کار با آنها را تا حد نیاز بدانید: یک محیط توسعه یکپارچهٔ نرمافزار مانند Qt Creator، Xcode یا Visual Studio (پیشنهاد ما Qt Creator است) این محیط به عنوان IDE نیز یاد میشود. پلتفرم توسعه (سیستمعاملی) که قرار است محیط توسعهٔ یکپارچه خود را بر روی آن نصب و شروع به برنامهنویسی کنید را مشخص نمایید. اگر شما کاربر ویندوز هستید باید محیط توسعهٔ یکپارچهٔ شما مجهز به کامپایلر MSVC و یا نسخهٔ پورت شدهٔ GCC یعنی MinGW باشد. اگر شما کاربر مکاواِس هستید به صورت پیشفرض با نصب محیط توسعه کامپایلر Clang بر روی آن تعبیه خواهد شد. البته میتوانید به صورت سفارشی از کامپایلر GCC نیز استفاده کنید. در صورتی که کاربر لینوکس هستید کامپایلر GCC به صورت پیشفرض بر روی محیط توسعهی شما تعبیه خواهد شد. آشنا به دستورات ترمینال و یا کنسول در سیستمعاملهای لینوکس، مک و ویندوز در ساخت و سازهای دستوری مفید هستند و نیاز است آنها را بدانید. آشنا به Git و دستورات مربوط به آن در نگهداری و به اشتراکگذاری مخازن پروژه میتواند برای شما سودمند باشد. بر اساس پیشنها جهت محیط توسعه کتابخانهٔ Qt نیز پیشنهاد میشود (دلیل آن این است که این کتابخانه به شما کمک میکند تا بتوانید رابط کاربری نرمافزار (محصول) خود را پیاده سازی کنید). اگر هدف شما طراحی یک محصول استانداردی است که از شکل و ظاهر آنچنانی برخوردارد نیست بهتر است از ماژولهای پیشفرض Qt مانند Qt Widget برای طراحی آن استفاده کنید. این کار بسیار ساده است و نیازی برای داشتن دانش در رابطه با حوزههای JavaScript و QML ندارد. البته میتوانید با ترکیب CSS طراحی رابط کاربری برنامهٔ خود را بهبود ببخشید. بعد از این موارد نیاز است که شما هدف توسعهٔ خود را مشخص کنید، اینکه میخواهید توسعه دهندهٔ چه پلتفرمی باشید؟ تولید کننده برنامههای دسکتاپ بر روی ویندوز؟ یا لینوکس و مک؟ یا همهٔ آنها؟ خوشبختانه با توجه به قابلیتهای ذاتی سی++ و کیوت شما میتوانید برنامهٔ خود را تنها با داشتن محیط توسعهٔ خود بر روی پلتفرم مورد نظر خود کامپایل و خروجی بگیرید (البته به شرط اینکه از سرویسهای اختصاصی سیستمعاملی) استفاده نکرده باشید. البته دقت کنید اگر شما توسعهدهندهٔ اختصاصی برای فقط یک سیستمعامل خواهید بود، در این صورت نیازی به یادگیری مفاهیم یا رابطهای اختصاصی برنامهنویسی یک پلتفرم دیگر نخواهید بود. اگر مشتاق آن هستید که برای پلتفرمهای موبایل مانند آیاواس یا اندروید برنامه تولید کنید، موضوع کمی گستردهتر خواهد شد و حتماً باید ملزوماتی که در ابتدای مقاله به آن اشاره شده است را در نظر داشته باشید. برای مثال تولید یک نرمافزار iOS مستلزم آن است که شما علاوه بر داشتن دانش سی++ در رابطه با معماری و ساختار و همچنین قوانین، قوائد و ساختار نرمافزارهای مرتبط با اپل راداشته باشید. در Android نیز این چنین است. اگر شما تازه کار هستید پیشنهاد میکنیم هدف خود را فعلاً محدود بر یک پلتفرم خاص کنید، حتماً نیاز نیست اطلاعات خود را کامل و سپس اقدام کنید. برای مثال توسعه محصول بر روی ویندوز برای آغاز کار بسیار مناسب است و شما صرفاً بر روی این پلتفرم متمرکز خواهید بود. در نهایت شما محصول خود را با آزمایش وخطاهای بسیاری میتوانید تولید و با توجه به مستنداتی که در همین مرجع ارائه شده اس مستقر و برای کاربر نهایی ارائه کنید. برای اینکه بدانید مزایای این زبان در چیست و چه کتابخانههایی میتوانند مفید باشد و برخی از سوالات احتمالی که ممکن است به ذهن شما برسد این بخش را مطالعه کنید. برای نحوهٔ شروع کار با Qt این بخش را مطالعه کنید. جهت نحوهٔ نصب و راه اندازی محیط توسعه این بخش را مطالعه کنید. منابع فارسی یا زبان اصلی؟ پاسخ این سوأل بدون شک راحت است! زبان انگلیسی، زبان علم است، بنابراین هر آنچه که شما در زبانهای بومی و غیر انگلیسی مطالبه میکنید، ممکن است با محدودیتهای شدیدی مواجه شوید. بنابراین برای یادگیری محتوای علمی به شدت توصیه میشود به کمک مراجع انگلیسی آن را بیاموزید! من زبانم ضعیف هست، آیا باید به زبان انگلیسی تسلط کافی داشه باشم تا بتوانم زبانهای برنامهنویسی را یاد بگیرم؟ این یکی از سوألهای بسیار پر تکرار است که بارها با آن مواجه میشویم! در پاسخ باید صادقانه بگویم، شما به حداقلهای زبان انگلیسی واقعاً نیاز دارید! در حد این که متنهای عادی را بخوانید، آنها را متوجه باشید و بر اساس نگارش معنای صحیح جمله و واژهها را درک کنید. رفته رفته به آن عادت خواهید کرد و در آن نیز حرفهای خواهید شد. اما فراموش نکنید که زبانآموزی در کنار برنامهنویسی از لزومات است. در مورد واژههای تخصصی هم نگران نباشید، معمولاً واژههایی که معنای آنها را مابین جملات و کتابها نمیدانید، در مراجع و یا پانویسهای آنها تعریف میکنند. بسیاری از واژهها در قالب یک روش، مفهوم یا اصطلاح عنوان میشوند و شما باید به دنبال تعریف کامل آن باشید. به عنوان مثل، اصطلاح RAII در سیپلاسپلاس که به برخی از آنها در این بخش اشاره کردهام. من سن پایینی ندارم، آیا برای شروع کردن برای یادگیری سیپلاسپلاس دیر است؟ شاید من تجربهٔ سنیِ کافی، نسبت به کسانی که این سوأل را میپرسند نداشته باشم، اما نسبت به تجربهای که در مهندسی کامپیوتر و به خصوص ساختوساز و توسعهٔ محصولات نرمافزاری دارم، میتوانم به جرأت بگویم که این یک دغدغهٔ ذهنیای به حساب میآید که شاید در قالب و جنسِ ترسِ بیهوده از دست دادن زمان را به خود بگیرید. اما واقعیت آن است، تا زمانی که شما شروع نکنید، بله نمیتوانید! اما نکتهای که مد نظرم است بدانید، این است که در انتخاب زبانها، به خصوصی یادگیری سیپلاسپلاس، بهتر است بخشی از هدف و استعدادی که به آن دارید را هدف قرار دهید، (هدف مشخص و شفافی داشته باشید) چون خاصیت این زبان در چند-منظوره بودن آن است، و ممکن است شما را وسوسهٔ خود در همهٔ جوانب کند! که این باعث میشود شما هرگز به یک نقطهٔ شروع نرسید. به عنوان مثال، برای شروع بهتر است یک حوزه را انتخاب کنید و پیشبرورید، مانند: برنامهنویسی و طراحی اپلیکیشن در سیستمعامل ویندوز. یا برنامهنویسی در حوزهٔ موبایل، وب، بازیسازی، امبدها (سیستمهای درونسازی شده) و غیره... این بستگی به سلیقهٔ شما و نوع نیازی که در بازار میبینید خواهد داشت. در زیر منابعی را معرفی میکنم که به رایگان یا با کمترین هزینه میتوانید به آنها دسترسی داشته باشید: منابع استاندارد و رسمی زبان سیپلاسپلاس: https://en.cppreference.com https://isocpp.org برای یادگیری در سطوح مقدماتی وبسایتهای زیر پیشنهادات مناسبی هستند: https://www.geeksforgeeks.org/references-in-c http://www.cplusplus.com/reference https://www.tutorialspoint.com/cplusplus/cpp_references.htm https://www.learncpp.com در صورتی که میخواهید در حالت بسیار ساده، تصویری و در قالب برگههای تقلب به ویژگیهای زبان و کتابخانههای آن بپردازید، وبسایت زیر یک نمونه بسیار مناسب است: https://hackingcpp.com توجه کنید که خیلی از مباحث در وبسایتها ذکر نمیشود، نیاز است بعضی از کتابها را در نظر بگیرید و آنها را عمیقاً مطالعه کنید، بنابراین برای مطالعه به ترتیب سطح مقدماتی و پیشرفته را در زیر عنوان میکنم: Beginning C++ Programming Beginning C++20 A Tour of C++ The C++ Programming Language C++ Primer Programming: Principles and Practice Using C++ کتابهای معرفی شده به استانداردهای ۱۱، ۱۴، ۱۷ و ۲۰ اشاره میکنند. کتابهای پیشنهادی برای سطح پیشرفته: Effective C++ Professional C++ C++ Templates: The Complete Guide – Second Edition Modern C++ Programming Cookbook Hands-On System Programming with C++۱۷ C++ High Performance Optimized C++ در صورتی که نیاز به کسب دانش بیشتر در حوزهٔ سطح پایین، سختافزار، معماری و ساختارهای نرمافزاری دارید کتابهای زیر بسیار مفید هستند: Computer Organization & Design RISC-V / ARM / MIPS / x86 Software Architecture with C++ در صورتی که تجربیات و نوشتههای خودم رو در این باره نیاز دارید به صورت زیر دستهبندی کردم که به ترتیب پیشنهاد میکنم مطالعشون کنید: اگر به دنبال مشاورهها، منابع یا مقالات و توصیههای فارسی یا انگلیسی من هستید، پیشنهاد میکنم در همین وبسایت، یوتیوب، گیتهاب و یا کانال تلگرامی من ملحق بشید. من هر جا که باشم، با شناسهٔ KambizAsadzadeh اگر در حد توانم باشد شما را راهنمایی خواهم کرد.
-
ششمین ماراتون برنامهنویسی تلفن همراه کشور در تاریخ ۱۵ تا ۱۷ شهریورماه سال جاری در محل دانشگاه صنعتی شریف برگزار میشود. این رویداد باهدف « شناسایی تیمهای برنامهنویسی برجسته کشور، شناسایی ایدههای بکر و خلاقانه و ورود این تیمها به بازار کار» برگزار میشود . مهلت ثبتنام در این رویداد تا ۳۱ مردادماه ۱۳۹۷ است. این رویداد از معتبرترین مسابقات برنامهنویسی تلفن همراه کشور است و از سال ۱۳۹۲ تاکنون ۵ دوره این مسابقات در سطح کشور برگزارشده و تیمهای برنامهنویسی متعددی را وارد بازار کار کرده است. در این مسابقات، تیمهای برنامهنویسی ۴۸ ساعت فرصت دارند تا نسخه اولیه یک برنامه تلفن همراه در حوزههای مشخصشده توسط کمیته ارتباط با صنعت مسابقه را به تیم داوری تحویل دهند. در کل این مدت، تیمها در محل برگزاری رویداد قرنطینه هستند و تیمهای داوری و مشاور بهصورت کامل بر نحوه عملکرد تیمها نظارت میکنند. در انتها، تیمهای برتر با نظر داورها به مرحله نهایی راه پیدا میکنند و فرصت دارند تا مجددا برنامه خود را برای داوران ارایه دهند. ثبتنام در این رویداد رایگان و ظرفیت آن محدود است، اما اولویت با تیمهایی است که زودتر ثبتنام کرده باشند. ثبتنام بهصورت اینترنتی و از طریق سایت اختصاصی مسابقات انجام خواهد پذیرفت. تیم داوری از اساتید برتر دانشگاه صنعتی شریف و با مدیریت جناب آقای دکتر ربیعی (مدیر آزمایشگاه و مدیر گروه فناوری اطلاعات دانشگاه صنعتی شریف) هستند. سه تیم اول جوایز نقدی دریافت خواهند کرد. گروهها در قالب تیمهای ۲ الی ۴ نفره خواهند بود. همچنین مدتزمان ماراتون ۴۸ ساعت است و گروهها با حضور در محل مسابقه، امکان خروج از محل تا پایان مدتزمان ماراتون را نخواهند داشت. البته تامین محل استراحت، وعدههای غذایی، میان وعدهها و اینترنت پرسرعت بر عهده برگزارکننده ماراتون است. جهت ثبتنام و کسب اطلاعات بیشتر میتوانید به سایت ششمین ماراتون برنامهنویسی تلفن همراه کشور مراجعه کنید.
-
- دانشگاه شریف
- رویداد
-
(و 3 مورد دیگر)
برچسب زده شده با :
-
ساده ترین تعریفی که میشه گفت: اینترنت اشیاء (Internet of Things) به طیف گستردهای از وسایلی که در اطرافمون وجود دارن و این قابلیت رو دارن که به شبکه اینترنت متصل بشن و توسط اپلیکیشنهای موجود در تلفنهای هوشمند و تبلتها کنترل و مدیریت بشن، اینترنت اشیا گفته میشه! اما اینترنت اشیاء فقط به این موارد ختم نمیشه. فواید IoT اونقدر زیاده که حتی میتونه به روند نزولی مرگ و میرها منجر بشه! بریم تا چند مثال کوچیک از این فناوری بزرگ داشته باشیم. ? یک یخچال هوشمند در نظر بگیرید. این یخچال با توجه به سنسورها و پردازندههایی که درونش نصب هست میتونه یک سری هشدارهایی رو منتقل کنه! مثلا میتونه در زمانی که دربش بازه، فیلتر آبش نیاز به تعویض داره، ماده غذایی داخل یخچال کمه و یا حتی زمانی که یک ماده غذیی چرب و خطرناکی خریداری بشه هشدار بده! اما این یخچال هنوز به دنیای شبکه متصل نیست? حالا یک یخچال IoT در نظر بگیرین. این یخچال با توجه به این که به دنیای شبکه متصل میتونه برای قیمت غذا های پایین جستجو کنه، اگه فیلتر آبش نیاز به تعویض داشت سفارش بده و یا مواد غذایی که در روزها یا هفتههای آینده مورد نیازه رو پیشبینی کنه، سفارش بده و داخل سایتهای مختلف برای قیمتها به جستجو بپردازه. مثالی از یک خودرو IoT: میتونیم این خودرو رو از راه دور راه اندازی و به اون مکانی که حضور داریم کنترل و هدایت کنیم! یا اگر تصادفی صورت گرفت خود خودرو به پلیس زنگ بزنه! کاربرد اینترنت اشیا اونقدر زیاد هست که در روند بهبود بازده تولید کارخونهها، مانیتور و کنترل کردن سلامت افراد یک جامعه کمک کنه. اما این نکته رو هم باید در نظر گرفت که در اینترنت اشیا هم محدودیتهایی وجود داره. ? و اما ساختار کلی اینترنت اشیاء چگونه است؟ تجهیزات: شامل قطعات سخت افزاری (سنسور ها و عملگرها) شبکه: شبکهها و یا کانال های ارتباطی شامل : شبکههای سلولی، شبکههای بی سیم ابر: ذخیره سازی دادها و امینت اطلاعات برنامههای کاربردی: سیستمهای تحلیلی، تراکنشی روند کلی تبادل اطلاعات در اینترنت اشیا به این صورت هست: مرحله اول تجهیزات و سنسورها: به این صورت که سنسورها میان دادهها و اطلاعات از اشیا مورد نظر اندازهگیری میکنن و بعد اونها رو به مرحله بعد برای پردازش منتقل میکنن. توی پردازش محلی یک سری برد وجود داره که یک سلسه مراحلی جهت پردازش بر روی اطلاعات اولیه که سنسورها دریافت کردن رو انجام میدن و نتایج ذخیره میکنن. مرحله بعد شبکه (Network) : اطلاعات پردازش شده توسط شبکهها موجود به اینترنت فرستاده میشه و در مرحله بعد این اطلاعات به فضای ابری (cloud) منتقل میشن و روی اونها پردازشهایی صورت میگیره و برای مدت طولانی این اطلاعات ذخیره سازی میشن. در ادامه و تکمیل این موضوع به مزایا و معایب هر کدوم از این پروتکلهای زیر و همینطور معرفی برد آردوینو و رسبری پای و معایب و مزایای هر کدوم، و همینطور پر استفادهترین زبانهای برنامه نویسی در صنعت (IoT) میپردازیم. شبکه و اینترنت (IoT Gateway) پرتکل های مهم در اینترنت اشیا؟! COAP☆ MQTT☆ HTTP☆ XMPP☆ امیدوارم مفید بوده باشه?
-
- iot
- اینترنت اشیاء
-
(و 3 مورد دیگر)
برچسب زده شده با :
-
بهترین ویرایشگر برنامه نویسی برای ویندوز و مک در سال ۲۰۱۸
کامبیز اسدزاده نوشته وبلاگ را ارسال کرد در ابزارها
بهترین ویرایشگر کدنویسی، بهترین اسلحه مخفی یک برنامهنویس است. مثل یک چاقوی سوئیسی که میتواند بهترین دوست یک سرباز تنها، در عملیات نفوذ باشد. دوست شما کیست؟ بهترین ویرایشگر کد، بهترین دوست برنامهنویس است. پیشرفت روزافزون صنعت تکنولوژی و سرعت تحولات آن در سالهای اخیر شگفتیهای زیادی را خلق کرده و با رشد هوش مصنوعی و عرضهی انواع دستگاههای هوشمند بسیاری از رؤیاهای انسان تحققیافته است. برای ساختن و پرداختن به بسیاری از ایدهها دیگر نیاز به فعالیتهای مشقتبار و پیچیده نیست. با تهیه مقداری لوازم مکانیکی و بردهای دیجیتال و کمی سررشته از مکانیک و الکترونیک هرکسی در خانه میتواند ابداعات جالبی در زندگی خود داشته باشد؛ اما جانمایه تحقق این تخیلات در زندگی روزمره ما، دانشی به نام برنامهنویسی است. حالا هرکسی میتواند با صرف کمی وقت و تدبیر برنامههایی هرچند ساده طراحی کند. آنها را با قطعات و بردهای آماده همراه کند و به این قطعات جان ببخشد. هرچند اگر بخواهد میتواند در نوشتن این کدها چنان تبحر پیدا کند که آن را تبدیل به یک شغل دائم و پردرآمد کند. سرعت پیشرفت تکنولوژی برای برنامه نویسان حرفهای هم میطلبد که با سرعت و دقت بیشتری کدهای جادویی خود را خلق کنند تا در بازار پررقابت فناوری برگ برندهای داشته باشند. اهمیت این موضوع باعث رونق بسیار، در بازار و صنعت طراحی زبانهای سطح بالا شده است. نقطه مشترک این علاقهمندان و آن فداییان برنامهنویسی، ابزاری است به نام ادیتور یا ویرایشگر متن. ادیتور ها هستند که باقدرت و سرعت و هوشمندی خود دستورات و ایدههای برنامه نویسان را تبدیل به کدهای تمیز و مرتبی میکنند که کارآمد و باارزش هستند. آنها مبتدیان را راهنمایی میکنند و حرفهایها را یاری میبخشند که با اطمینان و سرعت بیشتری کدهای خود را وارد کنند. ادیتور ها در همان گام اول با همه برنامهنویسها همراه میشوند ولی تنها برنامه نویسان حرفهای هستند که میدانند بودن یا نبودن یک سمبل مانند. در انتهای یک کد چقدر مسئله بزرگی است. حال گشتن و نیافتن این مسئله، در میان هزاران خط کد میتواند عمر کیبورد و مانیتور را زیر مشت و لگد برنامهنویس، کوتاه کند. ادیتور های قدرتمند همچون خدمتگزارانی مهربان در کنار این مردان خشمگین هستند تا به آنها کمک کنند هرگز دچار چنین مشکلاتی نشوند، ایدهای ناب خود را بیرون بریزند شکوه زندگی یک برنامهنویس را تجربه کنند. زبان برنامهنویسی و زبان نشانهگذاری زبانهای برنامهنویسی آن دسته از زبانهایی هستند که برنامه نویسان بهوسیله آنها الگوریتمهای خود را برای ماشین قابلفهم میکنند. زبانهای مطرح مانند جاوا یا زبان سی پلاس پلاس از این دسته هستند. زبانهای نشانهگذاری Markup Language آن دسته از زبانهای هستند که متن و نشانههای معنیدار را باهم ترکیب میکنند و در آنها الگوریتمی دیده نمیشود، مانند زبان HTML یا XML. ویرایشگر متن یا ادیتور کد نرمافزارهایی هستند که برای ویراستاری متون و کدهای زبانهای برنامهنویسی با توجه به شیوهنامه یا نحو زبان (Syntax) استفاده میشوند؛ لیست بهترین ویرایشگر برنامهنویسی در ویندوز و مک در مورد آنها است. از آنسو نرمافزارهای محیط یکپارچه توسعه نرمافزار (Integrated Development Environment) از قدرت و توانمندی بیشتری برخوردار است. از امکانات مهم IDE میتوان به ویرایشگری کدها، کامپایل کردن و دیباگ کردن برنامهها اشاره کرد. وجه دیگر این نوع نرمافزارها رابط کاربری گرافیکی، برای سهولت در برنامهنویسی است. ویژوال استودیو(Microsoft Visual Studio) و اکلیپس (Eclipse) از دسته IDE مطرح هستند. همیشه برای برنامهنویسی نیازی به استفاده از IDE نیست. این کار را میتوان با استفاده از نرمافزارهای ساده؛ ولی قدرتمند مثل ویرایشگر کد انجام داد، همانند نوشتن برنامهای برای یک برد اپنسورس مثل آردوینو (Arduino). همین نوع ویرایشگر کدها که در لیست بهترین ویرایشگر٬ها معرفی میشوند در طراحی خود این توانایی را دارند که با اضافه کردن پلاگینها، مرزها را بشکنند و به برنامههای IDE نزدیک شوند. ویرایشگرهای کد به دلیل راحتی نرمافزار در نصب، اجرای روان، انعطافپذیری، توانایی در ارتقاء و همچنین گستره پشتیبانی از زبانهای مطرح در یک ادیتور متن سبک و کمحجم، امروزه بسیار موردتوجه هستند. همیشه برای برنامهنویسی نیازی به استفاده از IDE نیست. این کار را میتوان با استفاده از نرمافزارهای ساده؛ ولی قدرتمند مثل ویرایشگر کد انجام داد، همانند نوشتن برنامهای برای یک برد اپنسورس مثل آردوینو (Arduino). همین نوع ویرایشگر کدها که در لیست بهترین ویرایشگر٬ها معرفی میشوند در طراحی خود این توانایی را دارند که با اضافه کردن پلاگینها، مرزها را بشکنند و به برنامههای IDE نزدیک شوند. ویرایشگرهای کد به دلیل راحتی نرمافزار در نصب، اجرای روان، انعطافپذیری، توانایی در ارتقاء و همچنین گستره پشتیبانی از زبانهای مطرح در یک ادیتور متن سبک و کمحجم، امروزه بسیار موردتوجه هستند. لیست بهترین ویرایشگر برنامهنویسی برای مک و ویندوز شناخت ادیتورها و امکانات آنها، تجزیه و تحلیل، سرعت، هوشمندی و انعطافپذیری آنها به شما کمک میکند، همانند یک تکاور زبده برای هر عملیات برنامهنویسی حتی بدون وجود IDE آماده باشید. سبک بودن، قابلیت نصب روی انواع سیستمعاملها، حتی پرتابل بودن این ادیتورها از مزیتهای تاکتیکی است که هر برنامهنویس حرفهای به اهمیت آن اعتراف دارد و جویای حال و احوال لیست بهترین ویرایشگر برنامهنویسی نیز خواهد بود. ویرایشگر نوتپد پلاس پلاس(Notepad plus plus) نوت پد پلاس پلاس قدرتمند و مملو از امکانات ریزودرشت برای سرعت بخشیدن به کارها با دقت بالاست. این ادیتور متن و ویرایشگر کد برنامهنویسی یک پسرعمو هم در ویندوز دارد. هرچند که با حضور ++Notepad در ویندوز کمتر کسی پای مجلس نوتپد قدیمی مینشیند. نوتپد پلاس پلاس رایگان و اپنسورس است. علاوه بر آن رابط کاربری خوبی هم دارد. یکی از جذابترین بخشهای این ادیتور، خاصیت تب ویرایشی (Tabbed Editing) است. شما میتوانید همزمان و بهراحتی با چند فایل مختلف در یک پنجره کار کنید. npp در ویرایش متون HTML بیشتر شهره است؛ ولی با کد نویسی در زبانهای دیگر، هیچگاه پشیمان نخواهید شد. نوت پد بهصورت استاندارد کدهای شما در زبانهای مختلف رنگی میکند تا بهتر و راحتتر آنها را تشخیص دهید. اگر این کار شمارا راضی نمیکند، قابلیت سفارشی کردن هم در این ادیتور مهیا است. npp در حین کدنویسی، پا به پای شما با کدها همراه است. علاوه بر اینکه به شما پیشنهادی برای تایپ سریع میدهد بهمحض واردکردن کدهای اشتباه براساس شیوه کدنویسی با برجسته کردن اشتباهات، چیزی کم نمیگذارد. نوتپد در هنگام نصب چند پلاگین کاربردی و مفید با خود به همراه دارد و البته میتواند از مخزن پلاگین در ادیتور به پلاگینهای جدید نیز دسترسی داشته باشید. npp حقیقتا شایسته چنین جایگاهی، در لیست بهترین ویرایشگر برنامهنویسی سال ۲۰۱۸ است. ویژگیهای برجسته: Notepad plus plus برای ویندوز (Windows) ساختهشده است؛ اما علاقهمندان به آن میتوانند در مکاواس ۱۰ (Mac OS X) و لینوکس (Linux) و یونیکس (Unix) هم آن را تجربه کنند. نوتپد پلاس پلاس نرمافزاری سبک است و بهآسانی نصب میشود. پلاگینهای زیادی را میشود به آن اضافه کرد و با ماکرونویسی میتوانید از امکانات موجود هم فراتر بروید. از قابلیت Tabbed Editing پشتیبانی میکند. قابلیت ساخت بوکمارک Bookmark برای نشانهگذاری دارد. با دراگ و دراپ کردن فایلها به محیط نرمافزار میتوانید آنها را باز کنید. پشتیبانی از قابلیت فولاسکرین هوشمندی در تشخیص صحت شیوه کدنویسی قابلیت یکپارچهسازی مداوم (Compiler Integration) در پروژه که با هر تغییر کد پروژه دوباره Build میشود تا همه کدهای قبلی و جدید باهم هماهنگ باشند. پشتیبانی از قابلیت FTP توانایی چک کردن لغات و مقایسه فایلها توانایی Code folding که باعث میشود کدها در بلوکهایی بهصورت فشرده قرار بگیرند تا سرعت و مدیریت کدها بهتر شود. تنظیم منوی برنامه به زبان فارسی رایگان و متنباز است نکاتی برای ارتقاء و بهبود: ویرایش فایل از طریق HTTP, SSH و WebDav بهطور پیشفرض پشتیبانی نمیشود. برای نصب روی مکاواس ۱۰ نیاز به نرمافزار wine دارید که البته برای اجرای دیگر نرمافزراهای ویندوز روی مک و لینوکس نیز لازم است. نتیجه: تجربه این ویرایشگر در زبانهای PHP،HTML،CSS و JavaScript فوقالعاده جذاب است. کمتر ادیتور سورس کدی در لیست بهترین ویرایشگر برنامهنویسی، دقت نوتپد++ در تذکر به اشتباهات کدنویسی را دارد و در بازههای زمانی کوتاه و بهسرعت در حال ارتقاء امکانات ادیتوری خود است. ویرایشگر سابلایم تکست (Sublime Text) سابلایم تکست ادیتور دیگری از دسته سبک وزنها باقدرت ویرایش بالا در لیست بهترین ویرایشگر برنامهنویسی است. این ادیتور با سی++ و پایتون نوشتهشده است. انعطافپذیری بسیار خوبی در سفارشی کردن دارد و به برنامهنویس کمک میکند با سرعت و کارایی بالا کدنویسی کند. در سابلایم تکست با متدهای جالبی از ویرایش برمیخورید که در کمتر نرمافزار ویرایشی دیگر دیده میشود. اسنیپتها (Snippets) بخش جذاب دیگری از تجربه کار در سابلایم تکست است. بهعبارتدیگر سابلایم تکست به برنامهنویس این قابلیت را میدهد هر جا الگویی را دید حتی در ویرایش، از سابلایم بتواند برای اجرای سریع آن استفاده کند. این کار به قوی شدن فکر برنامهنویس کمک خوبی میکند و درعینحال باعث میشود مهاجرت به نرمافزارهای دیگر هم سخت شود. جعبهفرمانهای (Command Palette) سابلایم، مثل یک خدمتکار مفید در اختیار شماست تا با کیبورد اکثر کارها را در Sublime Text مدیریت کنید. کار با کیبورد هم یکی از مهمترین مهارتهای یک برنامهنویس است. سابلایم تکست از نظر گرافیک صفحه کاربری و تم زمینه سیاه که محبوب برنامه نویسان است چیزی کم نمیگذارد و در لیست بهترین ویرایشگر برنامهنویسی سال ۲۰۱۸ جایگاهی کمترین از این، برای آن منصفانه نیست. ویژگیهای برجسته: قابلیت ویرایش هوشمند همزمان چند خط قابلاستفاده در سیستمعاملهای Windows، macOS، Linux قابلیت چند سکویی قابلیت ارائه سریع لیست فایل موجود در یک فولدر و ورود به آن رابط کاربری محبوب انعطافپذیری و سفارشی شدن بالا با نصب پلاگین توانایی پشتیبانی از فریمورک OpenFL و زبان برنامهنویسی Haxe حمایت از توابع وردپرس تشخیص قدرتمند خطاهای زبان برنامهنویسی و برجسته کردن آنها با نصب بسته مخصوص هر زبان نکاتی برای ارتقاء و بهبود: حمایت کم از زبانهای راستنویس حمایت کم در لینوکس رایگان فقط در حالت Trial تأکید شدید برای کار با کیبورد به مذاق همه شیرین نیست نتیجه: این ویرایشگر اعتیادآور است. این ویرایشگر یکی از بهترینها برای زبان HTML و PHP است. هرچند ویرایشگرهای دیگر هم در این زمینه خوب کار میکنند؛ ولی سابلایم با خلاقیتهایش به برنامهنویس در کدنویسی سمت کلاینت و سرور طعم دیگری دارد. ویرایشگر اتم (Atom) اتم یک ویرایشگر متن ساده و راحت است. ازنظر ظاهری شبیه سابلایم تکست است ولی اغلب برنامه نویسان با آن بیشتر اخت میشوند و ارتباط بهتری برقرار میکنند. برای نصب قالب هم انتخابهای زیادی برای Atom وجود دارد. این ویرایشگر که با node.js طراحیشده چند سکویی و اپنسورس است. قابلیت ویژه اتم توانایی هک هسته آن توسط کاربران برای کارایی بیشتراست. اتم با بخش مدیریت پکیج خود بهراحتی میتواند فراتر از ویرایشگر متن عمل کند. Atom توسط گیتهاب توسعهیافته است. این یک مزیت عمده است چراکه گیتهاب باهدف افزایش کارایی و کارآمدی توسعهدهندگان خلقشده است و رزومه موفق آن نیازی به تائید ندارد. اتم در اتصال به گیتهاب نیز بهخوبی عمل میکند. ویرایشگر سورس کد اتم در مجموعه ابزارهای خود یک جستجوگر فازی جذاب هم دارد که شیوه کارش ترکیب دو متد جستجوگر کلمات و غلطگیر املایی است، از همین رو به جستجوگر فازی معروف شده است. ویژگیهای برجسته: سادگی و جذابیت در طراحی رابط کاربری پشتیبانی از جعبهفرمان همانند سابلایم تکست ابزارهای ویژه برای توسعه مدیریت مجتمع برای پشتیبانی از پلاگینها شیوه سفارشیسازی ساده و سهل در رابط کاربری جامعه فعال پشتیبانی در گیتهاب برای رفع مشکلات قابلیت چند سکویی تشخیص شیوه کدنویسی زبانهای برنامهنویس مختلف رایگان و متنباز قابلیت جستجوی فازی نکاتی برای ارتقاء و بهبود: در مقایسه با دیگر ویرایشگرهای متن کند است مدیریت سخت فایلهای بزرگ نتیجه: اتم توسط توسعهدهندهها برای توسعهدهندهها ساختهشده است. وجود یک جامعه خوب و فعال که به پشتیبانی از این ویرایشگر مشغول هستند، یک مزیت استراتژیک بسیار خوب برای هر نرمافزاری است. این علاقه و تلاش به علت قابلیت اپنسورس عمیق و کامل این نرمافزار است که باعث شده در میان دیگر ویرایشگرها، درعینحال سادگی در لیست بهترین ویرایشگر برنامهنویسی گردوخاکی به پا کند. چنانکه نام اتم به٬عنوان رقیبی تازهنفس، برای رقابت با IDE ها مطرح است. پس با اتم هرروز میتوانید منتظر شنیدن خبرهای خوب و جالبی در مورد Atom و ابزارهای جدیدش باشید. ویرایشگر کدا (Coda) ویرایشگر Coda با بانک کد و قالب پروپیمان خود، سرعت و بهرهوری را برای کاربران یککاسه کرده است. کار اصلی این ویرایشگر طراحی سایت است. با مجموعه امکانات پیادهسازی شده در کدا حتی برای مبتدیان نیز برنامهنویسی میتواند مفرح و درعینحال مفید و کارآمد باشد. ادیتور کدا، از سال ۲۰۰۷ بهصورت یک ویرایشگر متن ساده وارد عرصه برنامهنویسی شد و امروز یکی از بهترین نرمافزارهای تکاملیافته در سیستمعامل مک به شمار میرود. شاید بتوان گفت نمونه قابلمقایسه آن در ویندوز نرمافزار Adobe dreamweaver است. در بخشهای مختلف طراحی وب، از طراحی ظاهری وبسایت گرفته تا پیادهسازی کدهای سمت سرور و حتی پشتیبانی از قابلیت FTP همگی در ویرایشگر کدا بهخوبی کار میکنند که نتیجه آن محبوبیت بالای این ادیتور در لیست بهترین ویرایشگر برنامهنویسی سال است. وجود کتابخانههای غنی در نرمافزار Coda کار با آن را راحت و آسان کرده است. ویرایشگر کدا در بخش طراحی رابط کاربری سایت تا جایی پیشرفته که بهصورت دراگ و دراپ میتوانید اجزای سایت خود را طراحی کنید. این باعث شده که طیف گستردهای از برنامه نویسان از مبتدی تا حرفهای این نرمافزار را بهعنوان انتخاب اول خود به همراه داشته باشند. البته کدا مخصوص سیستمعامل مک است و از ورژن OS X 10.7.5 به بعد قابلاستفاده در آن است. ویژگیهای برجسته: استفاده از رابط کاربری انقلابی مک به نام Leopard تکمیل خودکار کدها ویرایش بلوکی و رنگآمیزی کدها برحسب زبان قابلیت دراگ و دراپ برای ساخت اجزا وبسایت مدیریت FTP قابلیت سفارشی کردن رابط کاربری کتابخانه کد برای زبانهای مختلف پشتیبانی از MySQL نکاتی برای ارتقاء و بهبود: عدم پشتیبانی در دیگر سیستمها بهجز مک کرش کردن هرازگاهی در ارتباطات شبکه قیمت بالا در مقایسه نسبت به دیگر ویرایشگرها تنها هفت روز رایگان است و باید خریداری شود نتیجه: کدا در طراحی وب، کامل و خوب است. هر آنچه شما ابزار و کد بخواهید در آن یکجا جمع شده است. با توجه به قیمت و ویژگیهای که دارد در مک و لیست بهترین ویرایشگر برنامهنویسی جزو بهترینها است. با نصب آن هیچوقت هم از امکانات جدید و بروزرسانی های آن بیخبر نخواهید بود. ویرایشگر تکست میت (TextMate) تکست میت یکی از دیگر ویرایشگرهای شهره در سیستمعامل مک است. البته بیشتر برای کار با برنامهنویسی در زبان روبی و فریمورک روبی آن ریلز استفاده میشود. در کل TextMate یک ویرایشگر عالی برای توسعهدهندگان زبانهای مدرن برنامهنویسی است. ویژگیهای برجسته: قابلیت جستجو و جایگزینی جعبه تاریخچه قابلیت انتخاب و تایپ سریع ستونی در میان متون تکمیل خودکار کد پشتیبانی از بلوکبندی کدها مناسب برای پروژههای تیمی پشتیبانی بیش از ۵۰ زبان برنامهنویسی قابلیت رنگآمیزی کدها پشتیبانی Xcode قابلیت کار با FTP رایگان قابلیت فرورفتگی خودکار در کدها نکاتی برای ارتقاء و بهبود: رابط کاربری نهچندان دلچسب پشتیبانی نکردن از قابلیت فولاسکرین تنها در سیستمعامل مک کار میکند نتیجه: جای تعجب نیست که در میان ادیتورهای ارزان در مک، این ادیتور بهترین گزینه باشد. شاید برای کسانی که در ویندوز ویرایشگرهای رایگان و قدرتمندی را میشناسند عجیب باشد؛ ولی معمولاً در مکینتاش هرچقدر پول بدهید، آش میخورید. این را هم فراموش نکنیم که تکست میت از برندگان جایزه طراحی اپل در سال ۲۰۰۶ بوده است پس شایسته حضور در لیست بهترین ویرایشگر برنامهنویسی نیز هست. ویرایشگر Text Wrangler ویرایشگر ساده اما قدرتمند Text Wrangler که از بهترین ابزارها برای مدیریت یونیکس و سرور است. رابط کاربری هوشمند و مجموعهای از ابزارهای قدرتمند برای ویرایش و جستجو متن و کدها است. این ویرایشگر با Xcod همکاری میکند و با پشتیبانی از AppleScript جایگاه خوبی برای خود در لیست بهترین ویرایشگر برنامهنویسی دستوپا کرده است. فایل خروجی این نرمافزار را میتوانید در استاندارد یونیکد برای یونیکس و داس و مک تهیه کنید. ویژگیهای برجسته: عملکرد مطلوب در ویرایش فایلهای بزرگ قابلیت استفاده از ماکرو و نصب پلاگین پشتیبانی از قابلیت FTP پشتیبانی از SSH برای ویرایش فایل از راه دور مقایسه همزمان دو سند رنگآمیزی بر اساس شیوه کدنویسی زبانهای برنامهنویسی بلوک کردن و خاصیت تا شوندگی در کدها و متنها کامل کردن خودکار کدها چک املا کلمات رایگان پشتیبانی از ۴۴ زبان برنامهنویسی از HTML, JavaScript, Perl, Python, VBScript تا SQL نکاتی برای ارتقاء و بهبود: عدم پشتیبانی از HTTP و WebDav ناسازگار با مکینتاش G4 تنها از زبان انگلیسی پشتیبانی میکند عدم پشتیبانی برای ویرایش گروهی نتیجه: ویرایشگر Text Wrangler باوجود چند محدودیت، قدرتمند و رایگان است ولی اگر شمارا راضی نمیکند با صرف مبلغی میتوانید به ادیتور که از آن الهام گرفتهشده است، یعنی BBEdit دست پیدا کنید که ادیتور بسیار خوبی در سیستمهای مک است. ویرایشگر جی ادیت (jEdit) این محصول قدرتمند از آن جاوا نیرو گرفته است که برنامهنویسان حرفهای با آغوش باز پذیرای آن هستند. نفوذ امنیت، ذاتی جاوا در رگ و پی این نرمافزار باعث شده است که فایل بایت ساختهشده توسط آن، عرق هکرها را برای رمزگشایی درآورد. هزاران پلاگین و ماکرو که برای این ادیتور ساختهشدهاند، نشان میدهد که در قلب برنامه نویسان جای گرفته است. همین پلاگینها باعث شده که jEdit مرزهای ویرایشگری را بشکند و به قلمرو IDE راه پیدا کند و البته به لیست بهترین ویرایشگر برنامهنویسی سال ۲۰۱۸. ویژگیهای برجسته: ایجاد تورفتگی خودکار در متن بلوکه بندی کد و ایجاد خاصیت تا شوندگی متنها موتور قدرتمند برای اجرای عبارات باقاعده (regular expressions) قابلیت چک املا لغات پشتیبانی از قابلیت FTP پشتیبانی از یونیکد و UTF8 حجم کم در ابتدا و قابل توسعه با پلاگینها قابل استفاده در ویندوز، مک، یونیکس رایگان پشتیبانی بیش از 200 زبان برنامهنویسی نکاتی برای ارتقاء و بهبود: زمان بارگیری آن کمی طولانی است قابلاستفاده به روی ویندوز، مک، یونیکس عدم پشتیبانی برای ویرایش گروهی عدم پشتیبانی از فایلهای بزرگ عدم پشتیبانی از SSH برای مدیریت فایل از راه دور نتیجه: انتخاب مناسبی برای کسانی که میخواهند ادیتوری پیشرفته و امن داشته باشند. بههرحال جاوایی بودن آن ممکن است گاهی شمارا معطل کند ولی باوجود ویژگیهای خاصی که دارد، این کندی بارگذاری بهراحتی قابلچشمپوشی است. از آن میتوان بهعنوان یک ویرایشگر متن رایگان و با کدنویسی تمیز و امن که آینده خوبی دارد، نام برد. ویرایشگر Araneae ویرایشگر ساده و مفیدی از دنیای ویندوز که قدرت و تجربه لذتبخش برنامهنویسی را برای شما به ارمغان میآورد. در عین سادگی برای کاربر حرفهای نیز ابزار مناسبی در خود دارد و بعد از نصب، بدون هیچ پلاگین اضافهای میتوانید به برنامهنویسی در زبانهای HTML, CSS, XHTML, PHP بپردازید. ویژگیهای برجسته: رنگآمیزی کدها قابلیت جالب دراگ و دراپ برای تصاویر جستجو و ویرایش سریع پیشنمایش از مرورگر حتی بدون نیاز به سیو (Save) فایل حمایت از تبهای چندگانه ویرایشی رایگان نکاتی برای ارتقاء و بهبود: عدم پشتیبانی از پلاگین و ماکرو خارجی نتیجه: ویرایشگر Araneae بسیار مناسب برای فعالیتهای طراحی وبسایت است که با استفاده از آخرین تکنولوژیهای وب، شما را در کارتان موفق میکند. این نرمافزار میتواند یک رقیب جدی برای دیگر ادیتورها در لیست بهترین ویرایشگر برنامهنویسی و رفیق خوبی برای برنامه نویسان PHP باشد. ویرایشگر Visual Studio Code از نام آن پیداست که برادر کوچکتر ویژوال استودیو IDE مطرح دنیای برنامهنویسی است. محصولی از مایکروسافت که در سیستمعاملی Mac OS X و لینوکس هم کار میکند. بزرگترین ویژگی این ادیتور، تجربه ویرایش کدنویسی باحال و هوای ویژوال استودیو ایجاد میکند بدون اینکه نیاز باشد نسخه کامل IDE ویژوال استودیو را با حجمی حدود 3 گیگ به روی یک سیستم معمولی پیاده کرده و مرارتها بکشید. این ادیتور سبک و کارآمد است و منصفانه نیست، تمام انتظاراتی که از برادر بزرگتر داریم از Visual Studio Code نیز بخواهید. ویژگیهای برجسته: پشتیبانی از ۳۰ زبان برنامهنویسی و صدالبته ASP.NET و #C زمان نصب کم و روال ساده در اجرا قابلیت مقایسه دو فایل رنگآمیزی کدها افزونههای فراوان وجود نسخه پرتابل قابلیت ارتباط با گیتهاب و استفاده از امکانات آن رایگان نکاتی برای ارتقاء و بهبود: عدم پشتیبانی خوب از افزونهها نتیجه: این ویرایشگر عالی فضای بسیار کمی را اشغال میکند. هر برنامهنویس دلداده #C بر اهمیت وجود این ادیتور سورس کد، در لیست بهترین ویرایشگر برنامهنویسی واقف است. این ویرایشگر فوقالعاده محبوب به شما فرصت عالی تجربه زبانهای ASP.NET و #C را میدهد تا با لذت و آرامش بیشتری در استفاده از آنها ماهر شوید و بتوانید در آینده با فراغ بال، برادر بزرگتر را ملاقات کنید. ویرایشگر UltraEdit ویرایشگر UltraEdit محصول شرکت رایانهای IDM Computer Solutions یک ویرایشگر محبوب در نزد هکرها، برنامهنویسان و توسعهدهندگان و البته لیست بهترین ویرایشگر برنامهنویسی است. ادیتور اولترا ادیت در پشتیبانی از زبانهای مطرح خوب عمل میکند، همچنان که تیم پشتیبانی نرمافزار از سال ۱۹۹۴ برای بهبود و اجرای پیشنهادها و انتقادهای کاربران این ادیتور، خوب عمل کرده است. ادیتور UltraEdit در سیستمعاملهای ویندوز، مک و لینوکس نیز در دسترس است. ویژگیهای برجسته: قابلیت انتخاب چندگانه و ویرایش همزمان رنگآمیزی کدها و هشدار اصلاح کد قابلیت Ftp قابلیت ویرایشگر HEX قابلیت املای کلمات قابلیت رمز سازی و رمزگشایی قابلیت ویرایش فایلهای باینری پشتیبانی از فایلهای بزرگ پشتیبانی از SSH نکاتی برای ارتقاء و بهبود: قیمت بالا نتیجه: قیمت این نرمافزار گران است ولی ویژگیهای زیادی را پشتیبانی میکند که در برنامهنویسی بسیار مفید هستند. برای مقایسه عادلانهتر ازنظر قیمت در مقایسه با ویژگیهای ارائهشده در دیگر نرمافزارهای هم قیمت چندان هم گران نیست ازاینجهت یکی از بهترین نرمافزارهای تجاری است که میشود از آن نام برد. هیچوقت از داشتن ادیتور سورس کد پشیمان نمیشوید و هر زمان نیز به ابزاری سریع و کارآمد نیاز داشته باشید، بهراحتی در اختیار شماست. این لیست نیز بهترین ویرایشگرهای کدنویسی را که امسال بیشترین توجه را در نزد برنامهنویسان جلب کردهاند، برای انتخاب سریعتر و بهتر شما، جمع کرده است. هرکدام را که به طبع شما نزدیکتر است انتخاب کنید و با تمرین در آن چالاکی خود را در برنامهنویسی، به رقبا نشان دهید.