Software Philosophy
3.46K subscribers
160 photos
41 videos
1.54K links
چکیده‌ای از مفاهیم به روز مهندسی نرم افزار برای مهندسین نرم‌افزار.
معماری نوین نرم‌افزار، تکنولوژی‌های برنامه نویسی جدید
Download Telegram
این مقاله توسط Igor Ostrovsky یکی از مغزهای متفکر برنامه نویسی موازی یا Parallel Programming در .Net نوشته شده است. او در این سری مقالات مفهوم مدل حافظه یا Memory Model را در زبان C# به صورت تئوری و عملی توضیح داده است. از آنجاییکه یکی از مهمترین مشکلات برنامه‌نویسی موازی مشکل Shared Memory‌ است، فهمیدن این مدل کمک بسیاری در نوشتن و دیباگ کردن کدهای Parallel می‌کند.

https://msdn.microsoft.com/en-us/magazine/jj863136.aspx

#مهران_داودی
لینکداین:
https://ir.linkedin.com/in/mehrandvd


کانال تلگرام:
@SoftwarePhilosophy


___
اگر با WPF کار می‌کنید، یکی از قویترین فریم‌ورکهای موجود برای ساخت نرم‌افزارهای بزرگ و با کیفیت Prism است. فریم‌ورک Prism با معماری MVVM طراحی شده‌است و در خیلی از مواقع به عنوان مرجعی برای یک معماری زیبا و کامل یک سیستم MVVM محسوب می‌شود. اگر می‌خواهید برنامه‌ای بنویسید که بر پایه XAML‌ کار می‌کند (مانند WPF، UWP، Xamarin و یا ...) حتما این فریم‌ورک را مطالعه کنید. در مورد این فریم‌ورک کتاب‌های زیادی نیز منتشر شده ‌است.

https://github.com/PrismLibrary/Prism

#مهران_داودی
لینکداین:
https://ir.linkedin.com/in/mehrandvd


کانال تلگرام:
@SoftwarePhilosophy


___
استفاده از Entity Framework Migration در تیم‌های نرم‌افزاری که چند نفر موازی روی مدل کار می‌کنند. این کار معمولا چالش‌هایی دارد که در این لینک این چالش‌ها مطرح شده است. برای مثال حالت‌هایی وجود دارد که دو برنامه‌نویس همزمان یک کلاس را تغییر داده و روی آن Migration درست می‌کنند. همچنین توضیح داده شده‌است که چطور می‌توان آنها را حل کرد.

https://msdn.microsoft.com/en-us/data/dn481501.aspx

#مهران_داودی
لینکداین:
https://ir.linkedin.com/in/mehrandvd


کانال تلگرام:
@SoftwarePhilosophy


___
معرفی CQRS به صورت خلاصه و مختصر توسط Dino Esposito، معمار نرم‌افزار مطرحی که مقالات زیادی در مورد معماری نرم‌افزار نوشته است. مفهوم CQRS یکی از مفاهیم جذاب و لبه تکنولوژی این روزهای دنیای معماری نرم‌افزار است. لینک زیر به طور خلاصه مفهوم جدا شدن پایپ‌لاین Read و Write در معماری‌های جدید نرم‌افزار را نشان می‌دهد. جدا شدن این پایپ‌لاین‌ها باعث می‌شود قدرت مانور و اعمال تغییرات روی عملیات خواندن و نوشتن در نرم‌افزارهای بزرگ بیشتر باشد.

https://msdn.microsoft.com/en-us/magazine/mt147237.aspx

#مهران_داودی
لینکداین:
https://ir.linkedin.com/in/mehrandvd


کانال تلگرام:
@SoftwarePhilosophy


___
آیا تا به حال لازم شده‌است که در یک پروژه همزمان چند DbContext داشته‌باشید؟ و یا اینکه DbContext های مختلف را در پروژه‌های مختلفی پخش کنید؟ در این صورت برای فعال کردن Migration روی این پروژه‌ها نیاز به تنظیمات خاصی دارید که در لینک زیر توضیح داده شده.

https://www.dotnet-tricks.com/Tutorial/entityframework/2VOa140214-Entity-Framework-6-Code-First-Migrations-with-Multiple-Data-Contexts.html

#مهران_داودی
لینکداین:
https://ir.linkedin.com/in/mehrandvd


کانال تلگرام:
@SoftwarePhilosophy


___
با ما در ارتباط باشید!
تا امروز فیدبک‌های خیلی خوبی از شما دوستان گرفتیم. بر اساس فیدبک‌های شما تصمیم گرفتیم که پست‌های این کانال را در سه دسته بندی پست کنیم:
۱) مطالب مهندسی و معماری نرم‌افزار و مدیریت تیم‌های نرم‌افزاری
۲) مطالب مربوط به آخرین تکنولوژی‌ها
۳) مطالب مربوط به تکنولوژی‌های مرسوم که در شرکت‌ها استفاده می‌شود.

هر هفته مطالبی که پست می‌شود شامل تمامی دسته‌های بالا خواهد بود. به این ترتیب اگر به یکی یا چندتا از دسته‌بندی‌ها علاقه دارید، هر هفته حتما چند پست مورد علاقه شما در این کانال «فلسفه نرم‌افزار» وجود دارد.

لطفا اگر نظر، پیشنهاد، انتقاد و یا هرگونه فیدبکی نسبت به این کانال دارید، در توئیتر بنویسید. مطمئن باشید ما آنها را می‌خوانیم. (در توئیتر @mehrandvd را منشن کنید و از هشتگ #SoftwarePhilosophy استفاده کنید)
وجود یک «لکه» یا Blob در کد برنامه شما یک نمونه ضد الگوی برنامه نویسی (Anti Pattern) محسوب می‌شود. یکی از علائمی که نشان می‌دهد برنامه شما لکه دارد، زمانی است که از این جمله استفاده می‌کنید: «این قسمت از کد، قلب سیستم است»
وقتی از این جمله استفاده می‌کنید، یعنی قسمتی از کد شما وجود دارد که در آن حجم زیادی از منطق برنامه شما نوشته شده‌است و شکسته نشده‌است. لکه‌ها تمایل به بزرگ شدن دارند،‌ یعنی خیلی وقت‌ها برای نوشتن یک کد جدید، احساس‌ می‌کنید باید آن را به «قلب سیستم» اضافه کنید. خیلی وقت‌ها علت این مشکل معماری بد و یا حتی «نبود معماری» است.

لینک زیر بیشتر در مورد این Anti Pattern توضیح داده است.

https://sourcemaking.com/antipatterns/the-blob

#مهران_داودی
لینکداین:
https://ir.linkedin.com/in/mehrandvd


کانال تلگرام:
@SoftwarePhilosophy


___
محصول Entity Framework 7 که به تازگی نام آن به Entity Framework Core 1 تغییر یافته به هیچ وجه نسخه بعدی Entity Framework 6 نیست. علت تغییر نام این محصول نیز به همین دلیل بوده‌است. هدف از تغییر نام واضح کردن این نکته بوده تا برنامه‌نویسان انتظارات اشتباه نداشته باشند.

در این محصول جدید علاوه بر امکانات جدیدی که اضافه شده‌است، امکاناتی قدیمی که دیگر در معماری نرم‌افزار نوین نمی‌گنجد «حذف» شده‌اند. برای مثال در محصول جدید دیگر خبری از ObjectContext نیست و فقط DbContext وجود دارد.


برای آگاهی از خلاصه‌ای از امکانات جدید و امکانات حذف شده،‌ می‌توانید لینک زیر را مطالعه کنید.

https://www.c-sharpcorner.com/article/new-features-of-entity-framework-7/

#مهران_داودی
لینکداین:
https://ir.linkedin.com/in/mehrandvd


کانال تلگرام:
@SoftwarePhilosophy


___
چهار چیزی که طراحان خوب به آن اهمیت می‌دهند:
۱. طراحان خوب به «انسانها» اهمیت می‌دهند. آنها انسانها و سطوح احساسی و معنوی انسانها را می‌فهمند.
2. طراحان خوب به «ساختن» اهمیت می‌دهند و از ساختن استقبال می‌کنند (مثلا ساخت مدل). حس خوب به ساختن باعث می‌شود چیزی که ساخته می‌شود نیز خوب باشد!
۳. طراحان خوب به «چرایی» اهمیت می‌دهند. طراحان در هنگام کار نیاز دارند تصمیم بگیرند. آنها شانسی تصمیم نمی‌گیرند، بلکه تصمیمات آگاهانه خود را بر اساس ریزترین چیزهایی که دیده‌اند می‌گیرند.
۴. طراحان خوب به صداقت اهمیت می‌دهند. آنها صداقت محض خود را وارد کار می‌کنند تا به این وسیله چیزهایی درست و معنی‌دار خلق کنند.

در لینک زیر هر کدام از این موارد به تفصیل توضیح داده شده‌اند. جالب است بدانید این مقاله در مورد طراحان UX است ولی من در ابتدا به آن اشاره‌ای نکردم. به نظر می‌رسد که موارد بالا برای هر کسی که احساس می‌کند در کارش چیزی طراحی می‌کند صادق است.

https://uxmag.com/articles/four-things-great-designers-care-about

#مهران_داودی
لینکداین:
https://ir.linkedin.com/in/mehrandvd


کانال تلگرام:
@SoftwarePhilosophy


___
قورباغه را دوباره اختراع نکنید!

در مهندسی نرم‌افزار، شناخت دقیق نیازمندیها و سپس ساخت محصولی مطابق نیازمندیها یکی از کارهای به ظاهر ساده ولی در عمل پیچیده است. مطلب زیر داستانی را تشریح می‌کند که در آن یک مهندس نرم‌افزار هنگام خلقت زمین پروژه طراحی «زنبور» را بر عهده گرفته‌است. ولی به دلایلی که در داستان توضیح داده شده اقدام به طراحی یک «وزغ» می‌کند که هیچ تناسبی با نیازمندیهای «زنبور» ندارد. این مهندس نرم‌افزار در حقیقت به جای خلق موجودی که نیازمندیهای زنبور را برآورده کند، یک حیوان جدید به نام وزغ خلق کرده که اتفاقا خدا قبلا آن را با نام «قورباغه» خلق کرده بوده!
اگر لینک زیر را کامل بخوانید ارتباط آن را با پروژه‌های نرم‌افزاری می‌بینید و خواهید دید که چگونه این خطا باعث شکست یک پروژه نرم‌افزاری می‌شود.


https://mehrandvd.me/2016/03/09/reinventing-the-frog/

#مهران_داودی
لینکداین:
https://ir.linkedin.com/in/mehrandvd


کانال تلگرام:
@SoftwarePhilosophy


___
یکی از ویژگی‌های جذابی که قرار است به C# 7.0 اضافه شود، مدل جدیدی در زبان است که امکان می‌دهد Tuple ها را بسیار راحت‌تر و کاراتر تعریف کرد. یکی از کاربردهای جالبی که این مدل دارد، امکان ساخت متدهایی است که بتوانند همزمان چند خروجی داشته باشند (بدون استفاده از out و ref یا برگرداندن آرایه)

در لینک زیر نحوه استفاده از این Syntax جدید توضیح داده شده‌است.

https://www.infoq.com/news/2016/04/CSharp-7

#مهران_داودی
لینکداین:
https://ir.linkedin.com/in/mehrandvd


کانال تلگرام:
@SoftwarePhilosophy


___
این کانال متعلق به یکی دوستانم است که بیشتر در مورد مطالب مربوط به امنیت فعالیت می‌کند. پیشنهاد می‌کنم عضو این کانال شوید. ما هم سعی می‌کنیم مطالبی از این کانال را که مرتبط با «فلسفه نرم‌افزار» است در اینجا به اشتراک بگذاریم.

https://telegram.me/GeekLinks

#مهران_داودی
لینکداین:
https://ir.linkedin.com/in/mehrandvd


کانال تلگرام:
@SoftwarePhilosophy


___
یکی از اخباری که در کنفرانس BUILD 2016 داده شد، انتشار Update 2 برای Visual Studio 2015 بود. یکی از امکانات جالبی که اضافه شده‌است، امکان Initialize Interactive است. همانطور می‌دانید در Visual Studio 2015 امکانی ایجاد شده بود به نام C# Interactive که پنجره‌ای است که می‌توانید یک قطعه کد را بدون اینکه نیاز به درست کردن فایل و یا درست کردن کلاس باشد به صورت اسکریپتی اجرا کنید. امکان جدیدی که اضافه شده‌است این اجازه را می‌دهد می‌توانید در ادیتور هر قطعه کدی را انتخاب کنید و روی آن راست کلیک کنید و Initialize Interactive‌ را بزنید تا به به طور خودکار در پنجره C# Interative اجرا شود.

https://blogs.msdn.microsoft.com/dotnet/2016/04/02/whats-new-for-c-and-vb-in-visual-studio/


#مهران_داودی
لینکداین:
https://ir.linkedin.com/in/mehrandvd


کانال تلگرام:
@SoftwarePhilosophy


___
اگر دوست دارید با تکنولوژی‌های محبوبی که در راه هستند یک پروژه بنویسید، مقاله زیر از Code Project را بخوانید. این مقاله به صورت قدم به قدم یک پروژه را ساخته‌است و از این تکنولوژی‌ها استفاده کرده‌است:
- فریم‌ورک Angular 2 (فریم ورک محبوب UI که توسط تیم گوگل در حال توسعه است)
- زبان TypeScript که زبانی محبوب برای کار با جاوااسکریپت می‌باشد و محبوبیت زیادی پیدا کرده‌است.
این مقاله نشان می‌دهد که چطور می‌توان این دو تکنولوژی را در Visual Studio 2015 ادغام کرد و از مزایای هر دو بهره برد.

https://www.codeproject.com/Articles/1087605/Angular-typescript-configuration-and-debugging-for

#مهران_داودی
لینکداین:
https://ir.linkedin.com/in/mehrandvd


کانال تلگرام:
@SoftwarePhilosophy


___
معماری نرم‌افزار مانند معماری ساختمان یک هنر است آیا تا به حال به فرق یک معمار و یک مهندس عمران فکر کرده‌اید؟ تمرکز مهندسان عمران معمولا بر ساخت سازه‌ها است. آنها فکر می‌کنند چطور سازه‌هایی مانند دیوار، در، پنجره و سایر اجزا را به طور صحیح بسازند. از طرف دیگر معمارها معمولا به اینها فکر نمی‌کنند! تمرکز اصلی آنها روی ساخت و معماری فضاهایی است که بین این اجزا به وجود می‌آید. در حقیقت مهندسین عمران به دیوارها فکر می‌کنند و معمارها به فضای بین دیوارها.
نکته جالب این است که انسان‌ها یا مشتریان در نهایت از فضا‌ها استفاده می‌کنند نه دیوارها! آنها پول خرج می‌کنند تا فضای زیبایی بخرند و به ندرت دیوارها را می‌بینند.
در مهندسی نرم‌افزار، ساخت دیوار مانند کد نویسی است. برنامه‌نویسان با کد نویسی در حقیقت در حال ساخت دیوارهایی هستند که این دیوارها مستقیما برای مشتری معنی ندارد. مشتریان امکاناتی را می‌بینند که توسط این کدها برای آنها خلق شده‌است. یکی از وظایف یک مهندس نرم‌افزار تمرکز بر فضاهای ایجاد شده برای مشتری است. اینکه این فضاها چقدر کارا و مفید طراحی شده‌اند.
توضیحات کامل مفهوم فضا و تاثیر آن بر مشتری را می‌توانید در لینک زیر بخوانید.


https://mehrandvd.me/2015/10/26/spaces-shape-your-software-architecture/

#مهران_داودی
لینکداین:
https://ir.linkedin.com/in/mehrandvd


کانال تلگرام:
@SoftwarePhilosophy


___
Forwarded from Software Philosophy
اگر دوستانی دارید که نه تنها برنامه نویس هستند، بلکه اعتقاد دارید «مهندس نرم‌افزار» هم هستند، آنها را به کانال @SoftwarePhilosophy دعوت کنید.
این پیغام را برای آنها Forward کنید.
مقاله زیر حاوی نکات بسیار جالبی در مورد یک UX موفق است. نکاتی ساده، اما کاربردی که رعایت آنها تاثیر مهمی روی محصول شما می‌گذارد.

https://uxmag.com/articles/the-best-enterprise-ux-is-the-one-you-never-see

#مهران_داودی
لینکداین:
https://ir.linkedin.com/in/mehrandvd


کانال تلگرام:
@SoftwarePhilosophy


___
ارتباط بین طراحان و برنامه نویسان

برای رسیدن به یک محصول خوب، طراحان و برنامه‌نویس‌ها باید رابطه بسیار خوبی با یکدیگر داشته باشند. نکات زیر کمک می‌کند بدانید چگونه می‌توانید در بهبود این روابط به تیم خود کمک کنید.

۱. ارتباط با ذهن باز: باید بدانید دنیای فکری یک برنامه نویس و یک طراح با هم بسیار فرق دارد. آموزش‌ها، تجربیات، سلیقه‌ها و مهارت‌هایی که آنها در ذهن خود دارند باعث می‌شود آنها دنیا را متفاوت ببینند. اصولا همین تفاوت است که باعث ارزش‌افزایی در تیم و محصول می‌شود، ولی اگر این تفاوت درست درک نشود ممکن است منجر به مشکلاتی در تیم شود.

۲. همیشه یک نماینده تیم برنامه‌نویسی را در جلسات نهایی برنامه‌ریزی داشته باشید.

۳. با اینکه معمولا نیازی نیست طراحان دانش برنامه‌نویسی و پیاده‌سازی ایده‌هایشان را داشته باشند، ولی داشتن این دانش کمک خیلی زیادی به شناسایی اشتباهات در مراحل اولیه می‌کند.

در لینک زیر نکات کامل‌تری برای بهبود این ارتباط نوشته شده‌است که در صورت علاقه می‌توانید مطالعه کنید.

https://uxmag.com/articles/the-relationship-between-designers-and-developers

#مهران_داودی
لینکداین:
https://ir.linkedin.com/in/mehrandvd


کانال تلگرام:
@SoftwarePhilosophy


___
حل مشکلات Json در یک استاندارد جدید به نام Hjson

همانطور که می‌دانید در چند سال اخیر استفاده از فرمت json برای فایل‌های کانفیگ بسیار رایج شده است. در این مورد یک توییت جالب همه را به چالش کشید: «خواهش می‌کنم از json برای کانفیگ فایل‌ها استفاده نکنید، تو json نمی‌شه کامنت نوشت و بدون کامنت مدیریت کانفیگ‌ها خیلی سخته». این نکته برای من خیلی جالب بود. به نظر می‌رسد فرمت json برای فایل‌هال کانفیگ چالش‌هایی دارد.

لینک زیر یک فرمت جدید رو که اسمش Human Json یا Hjson هست را معرفی کرده که نه تنها مشکل کامنت را ندارد، بلکه خیلی مشکلات دیگر که هنوز به آن فکر نشده بود را هم ندارد! جالبه که کتابخانه‌هایی هم برای این استاندارد نوشته شده که استفاده از اون رو در بیشتر زبان‌های محبوب مانند Java, C#, JavaScript, Mono, Ruby, Python, Noder.js, PHP, Go و زبانهای دیگر ساده می‌کند.

https://hjson.org/


#مهران_داودی
لینکداین:
https://ir.linkedin.com/in/mehrandvd


کانال تلگرام:
@SoftwarePhilosophy


___
افزونگی کد یک اشتباه برنامه نویسی نیست، یک بیماری معماری است. مهندسین نرم‌افزار همیشه تلاش می‌کنند تا «افزونگی کد» یا کدهای تکراری را کم کنند. در بسیاری از شرایط افزونگی کد به عنوان یک بی‌دقتی برنامه‌نویس محسوب می‌شود. برنامه‌نویسانی که به «نزدیک‌بینی کد» مبتلا هستند! یعنی در کدی که می‌نویسند گم می‌شوند و یادشان می‌رود که کجای کد هستند و چرا این کد را می‌نویسند و به طور کلی نمی‌توانند دورنمایی از کاری را که انجام می‌دهند در ذهن خود تجسم کنند.

ولی تجربه نشان می‌دهد بیشترین علت «افزونگی کد» برنامه‌نویسان نیستند! بلکه این مشکل بیشتر به خاطر «معماری بد نرم‌افزار» است. معمار نرم‌افزار کسی است که هنگام معماری باید «فضاهای» کد را طوری معماری کند تا احتمال به خطا افتادن برنامه‌نویسان کمتر شود.

لینک زیر توضیح می‌دهد که چگونه یک معماری بد باعث «رشد افزونگی کد» در نرم‌افزار می‌شود.


https://mehrandvd.me/2016/02/28/growing-redundancy-an-architectural-disease/

#مهران_داودی
لینکداین:
https://ir.linkedin.com/in/mehrandvd


کانال تلگرام:
@SoftwarePhilosophy


___