<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>نوشته های امیر حسین میرزایی</title><link>https://virgool.ir/feed/@amir_mirzaei</link><description>توسعه دهنده اندروید -کد-قهوه-تکنولوژی-شطرنج -کنجکاوی-شاید هم ورزش-</description><language>fa</language><pubDate>2026-11-11 19:48:37</pubDate><image><url>https://files.virgool.ir/upload/users/23147/avatar/ahNpLh.png</url><title>امیر حسین میرزایی</title><link>https://virgool.ir/@amir_mirzaei</link></image><item><title>چرا من عاشق Flutter شدم ؟</title><link>https://virgool.ir/flutter-community/i-love-flutter-spwcvpighzla</link><description>  پنچ یا شش ماه قبل بود که با این فریم ورک توی وبگردی هایی که داشتم اشنا شدم عنوان این بود با زبان dart در flutter اپ cross platform طراحی کنید تعجب کردم  flutter ? dart ? اینا دیگه چی هستن چرا تا به الان اسمشونو نشنیده بودم ؟ چون منبع موثق بود تصمیم گرفتم یه امتحانی بکنم توی نگاه اول خیلی گیج کننده بود از جمله زمانیکه شما توی محیط native اندروید طولانی مدت کار کرده باشی و بهش عادت کرده باشی , ولی بعد از اینکه یه مدت با هاش کار کردم خیلی برام جذاب و رضایت بخش بود !توی این مطلب سعی میکنم چندین نکته ای که برام جذاب بود و باعث شده به اینده این زبان امیدوار باشم رو از منظر یک برنامه نویس اندروید که چندین سال تو محیط native  کار کرده و روش غیرتی هست ولی با این حال عاشق flutter شده رو براتون بنویسم.1-  اگر شما اندروید native کار کرده باشی میدونی چقدر ساختن یک UI زیبا در اندروید سخت , پر دردسر و پر چالش هست باید layout, drawable , style , costume view, .... بنویسی تا اینکه فقط یک صحفه , یک صحفه نسبتا زیبا داشته باشی و همین مسئله تبدیل به یکی از نقاط ضعف در اکثر اپ های اندروید شده ولی وقتی که با flutter شروع به کار میکنی تازه میفهمی طراحی UI یکی از لذت بخش ترین قسمت های نوشتن یک اپ هست و سخت ترین و پیچیده ترین طرح ها برات اسون میشه  طراحی UI توی flutter به وسیله تعداد زیادی component که تیم flutter توسعه داده صورت میگیره یک سری component های پایه هستن که اینجا حرف اصلی رو میزنن و هر شکل و شمایلی رو میشه با استفاده از این کامپوننت ها ساخت و به عنوان یک widget ازش استفاده کرد اهان صحبت از widget شد توی Flutter کلمه View معنی نداره و همه چی یک  widget هست حتی به عنوان مثال Padding خودش یک Widget پایه هست و نحوه چینش این widget  ها شبیه چینش درون XML لایه های اندروید هست و با قدرت و ابزار بیشتر به عنوان مثال کد زیر رو ببینید? از اینجا تصویر رو ببینید2- ابزار Hot Reload یه زمانی بود توی اندروید ما یه چیز ساده ای رو تغیر میدادیم و میخواستیم اپمون رو روی دستگاه لانچ کنیم و تغیرمون رو ببینیم بیشتر از 10-15 دقیقه زمان میبرد ولی با این امکان این عمل کمتر از 1-2 ثانیه زمان میبره به GIF  پایین توجه کنید? از اینجا تصویر رو ببینید3- یکی از جذابیت های دیگهflutter  برای اندروید کار ها استفاده از زبان Dart هست درباره dart هم بگم که یک زبان static هست و توسط گوگل توسعه پیدا کرده برای جایگزینی Java Script الان طرفدارای js حمله میکنند میگن JS رو مگه میشه جایگزین کرد؟! که باید خدمتشون عرض کنم من هم حرفشون رو قبول دارم ولی این کاری هست که گوگل ادعا کرده و میخواد در یک سطحی حداقل در بعضی از پلتفرم های خودش این کار رو انجام بده و از جمله اینکه در سمت سرور - کلاینت چندین پروژه بزرگ گوگل بر روی همین زبان توسعه پیدا کرده البته اونطور که من میدونم در نهایت dart تبدیل به js میشد و چیزی که میره سمت کلاینت یک سری کد JS هست البته نماند که برای همه این ها برنامه ریخته و باید دید که قراره تو اینده چی کار بکنه خوب از بحث اصلی دور شدیم میخواستم بگم که یکی از خوبی های این زبان این هست که خیلی به زبان Java نزدیک هستش و بسیار از نظر Syntax به ساختار جاوا شباهت داره و C base هست به طوری که در جایی میخوندم گفته شده بود که یک سری از کارمندای java کار گوگل در عرض یکی دو هفته در حد خیلی مطلوبی به این زبان مسلط شدند Dart ویژگی ها و برتری های دیگه هم داره از جمله سطح بالا بودنش - نحوه کامپایل شدنش و ..... که اگر دوست داشتید توی اینترنت مطالب زیادی در این باره هست4-  توی بنچ مارک ها و سایت ها اگر جستجو کنید می بینید که  dartنسبت به زبان های cross platform  دیگه در اکثر الگوریتم های تست سرعت بالاتری رو کسب کرده در نتیجه اپ هایی که به این وسیله توسعه داده میشوند به طور کلیperformance  بهتری دارند البته مهمترین دلیل فاحش بهتر بودن Performance در  Flutterبا فریم ورک های cross platform دیگر در این هست که Flutter موتور رندر (Render engine)  مخصوص به خودش رو نوشته و بر خلاف سایر cross platform ها از Bridge و OEM سیستم عامل ها یا واسط های دیگری برای نمایش المنت های UI و مدیریت ان ها استفاده نمی کنه و در حقیقت به نوعی به طور مستقیم با GPU ارتباط برقرار میکنه و تمام اشکال گرافیکی رو رسم میکنه این مسئله به غیر از افزایش performance این قابلیت رو ایجاد کرده UI شما در تمام سیستم عامل ها به یک شکل دیده بشه و توسعه UI به سیستم عامل بستگی نداشته (البته میتونید تعریف کنید که از کامپوننت های مربوط به خود OS استفاده بکند) به عنوان مثال توی Native اندروید شما برای اکثر ابزار هایی که برای طراحی material معرفی شده بخواید استفاده کنید محدودیت ساپورت از نسخه های قبلی رو دارید و در نتیجه اپ شما در سیستم عامل ها با نسخه های متفاوت به شکل متفاوتی دیده میشه ولی در flutter به این شکل نیست 5-  مهمترین مطلب دیگه اینکه flutter توسط یک تیم خیلی حرفه ای و زیر نظر Google که صاحب سیستم عامل اندروید هست در حال توسعه است و از طرف دیگرflutter  به صورت open source  در حال توسعه است که باعث میشه ابزار های خیلی زیادی براش نوشته بشه و توسعه خیلی خوبی داشته باشه یکی از مهمترین اخبار های release هفته گذشته این بود که قابلیت استفاده از کد های flutter بر روی وب و دسکتاپ در حال ازمایش هست باید دید که در اینده چه اخبار دیگه ای از این فریم ورک به گوش خواهد رسید اگر عمری و حوصله ای باقی بود ان شالله در یک یا چندین مطلب basic های این فریم ورک رو میخوام اموزش بدم اگر شما هم تجربه ای مربوط به این فریم ورک داشتید یا نظری دارید که میتونه به بهتر شدن این مطلب کمک بکنه خوشحال میشم در موردش بشنوم</description><category>امیر حسین میرزایی</category><author>امیر حسین میرزایی</author><pubDate>Sat, 15 Dec 2018 00:44:44 +0330</pubDate></item><item><title>ضعف کیفیت پروژه های نرم افزاری در ایران</title><link>https://virgool.ir/@amir_mirzaei/bad-software-engineering-in-iran-n4ltkbzsvxhl</link><description> یکی از مشکلاتی که به شخصه در اکثر شرکت های ایرانی دیدم و یا از دوستان  شنیده ام ضعف کیفیت پروژه های نرم افزاری است در نتیجه محصولاتی به وجود  آمده اند همراه با مشکلاتی از قبیل توسعه ناپذیری یا توسعه پذیری سخت -  هزینه ی بالای پشتیبانی - نارضایتی کاربر  که باعث اعمال هزینه زیادی به  شرکت های نرم افزاری شده اند .  به نظر من مهمترین دلایلی که باعث این اتفاق میشود در وهله اول مدیریت  نادرست است که سعی دارد به هرشکلی هزینه های پروژه را کاهش بدهد و در نتیجه  با استفاده از کمترین هزینه و یک تیم بی تجربه و کار نابلد پروژه خود را  توسعه می دهد مثال این قضیه اکثر پروژه هایی هستند که در دنیای فریلنسر ها  در حال توسعه هست (اگر دیدید در سایت های فریلنسری پروژه ای نظیر اسنپ را  با 1 میلیون تومن دارند انجام میدن اصلا تعجب نکنید ) در وهله ی دوم تیم  فنی با تجربه ای است که نمی تواند مزایای تحلیل های درستی  را که انجام  داده است در برابر هزینه هایی که این تحلیل به پروژه وارد میکند قرار بدهد (  یعنی کلا نمی تونه به مدیریت این ایده رو بده که یک تحلیل خوب ممکنه چقدر  در اینده باعث کاهش هزینه های پروژه بشه  به عنوان مثال بنده هر وقت جلسه  گذاشتیم تا اهمیت یک معماری خوب رو به مدیر پروژه توضیح بدم اخر جلسه  برداشتی که مدیر داشته این بوده معماری خوب = خوانایی بیشتر کد :| :) که  البته دلایل این قضیه هم برای خودش قصه ای دیگه هستش )    یکی از این موارد بر میگرده به ورژن 1 پروژه تپ سی که تیم تپسی رو مجبور  میکنه با صرف 3 ماه زمان پروژه رو برای ورژن 2 از اول بازنویسی بکنند که یکی از اعضای خوب تیم تپ سی در موردش نوشته و میتونید اینجا بخونیدش https://goo.gl/PTr1r9مواردی که ممکن هست باعث بهبود کیفیت پروژه نرم افزاری شما و کاهش هزینه های اتی پروژه بشود :تست نرم افزار قبل از انتشار عمومی :  در گزارشی که IBM  منتشر کرده هزینه رفع باگ بعد از انتشار نرم افزار 4  یا 5 برابر بیشتر از هزینه ای است که میتوانست قبل از انتشار عمومی صرف  تست و بررسی و رفع باگ بشود برای تست قسمتی از عمل تست بر میگرده به تست  هایی که خود توسعه دهنده میتونه انجام بده ولی قسمت اعظم تست به نظر من بر  عهده افرادی غیر از توسعه دهنده باید باشه حال از قبیل یک تیم  QC  یا   QAیا حتی مدیر محصول یا تمام کارمندان حاضر در یک پروژه و شاید لانچ نسخه  بتا از پروژه تجربه ثابت کرده برنامه نویس ها معمولا در پیدا کردن باگ در  پروژه خود ضعف دارند یا به عبارت دیگه کسی که خودش املا رو مینویسه غلط های  خودش نمی بینهتغیر مکرر خواسته ها : یکی از ویروس هایی که یک نرم افزار با کیفیت رو به گند میکشه و نابود  میکنه تغیر مکرر و بزرگ خواسته ها هست بگونه ای که تیم فنی تحلیل رو انجام  میده و شروع به توسعه پروژه میکنه ولی در حین توسعه خواسته های نرم افزار  مکررا تغیر میکنه به عنوان مثال یک سناریو بزرگ حذف یا اضافه میشه و این  عمل چندین بار تکرار میشه به طوری که در نهایت پروژه ای که به عمل می آد  چند صد کیلومتر از تحلیل اصلی فاصله گرفته نبود ساختار کنترل کیفیت : نبود ساختاری برای کنترل کیفیت پروژه در زمان توسعه ان باعث مشکلات  متفاوتی میشه به عنوان مثال بعضی از افراد تیم مسیر اشتباهی رو برای توسعه  پروژه انتخاب میکنند (به دلایل مختلفی از قبیل سو تفهام در فهم موضوع –  کمبود دانش در رابطه با  انجام موضوع  مربوطه و ... ) و این مسیر اشتباه  باید به وسیله ی یک لایه کنترل کیفیت در زمان توسعه و ابتدای انحراف تشخیص  داده بشه شاید در توسعه نرم افزار یک سرپرست فنی برای هر بخش با انجام code  review  و جلسات تصمیم گیری گروهی بتونه  این عمل رو انجام بدهپیچیده سازی بیش از حد مسئله : به نوعی عمل over engineering  که برنامه نویس سعی میکند به پیچیده ترین  حالت ممکن یک مسئله ساده را حل کنید به عنوان مثال استفاده از یک فریم ورک  و یا یک ابزار پیچیده برای انجام یک عمل ساده که دلیل این اتفاق ممکن است  به خاطر نبود تجربه کافی یا متوجه نشدن نیاز ها پروژه باشدداکیومنت سازی : عمل داکیومنت سازی تاثیر مستقیمی بر نگهداری کد ها خواهد داشت و جدا از  این مسئله باعث می شود که مراحل توسعه در ذهن توسعه دهنده ساختار یافته بشه  و درک توسعه دهنده از کاری که انجام میده بیشر بشه البته به نظرم نیازی  نیست که برای تمام مسائل یک پروژه داکیومنت تهییه بشود بلکه بیشتر قسمت های  پروژه باید self-document  باشه تجربه نوشت : سعی کنید ابتدای کار تحلیلتون رو به گونه ای انجام بدید که در حد منابع  موجود و نیاز های موجود بیشترین انعطاف و چالاکی را داشته باشد تا در مقابل  نیاز های اینده دچار مشکل نشود و با کمترین هزینه بتواند با نیاز های جدید  وفق پیدا کند...........اگر شما هم همچین موضوعی رو تجربه کرده اید یا می تونید این نوشته را بهتر کنید خوشحال میشم درموردش بشنوم</description><category>امیر حسین میرزایی</category><author>امیر حسین میرزایی</author><pubDate>Mon, 03 Dec 2018 00:12:41 +0330</pubDate></item></channel></rss>