Software Philosophy
3.45K subscribers
160 photos
41 videos
1.54K links
چکیده‌ای از مفاهیم به روز مهندسی نرم افزار برای مهندسین نرم‌افزار.
معماری نوین نرم‌افزار، تکنولوژی‌های برنامه نویسی جدید
Download Telegram
تا امروز فیدبک‌های خیلی خوبی از شما دوستان گرفتیم. بر اساس فیدبک‌های شما تصمیم گرفتیم که پست‌های این کانال را در سه دسته بندی پست کنیم:
۱) مطالب مهندسی و معماری نرم‌افزار و مدیریت تیم‌های نرم‌افزاری
۲) مطالب مربوط به آخرین تکنولوژی‌ها
۳) مطالب مربوط به تکنولوژی‌های مرسوم که در شرکت‌ها استفاده می‌شود.

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

لطفا اگر نظر، پیشنهاد، انتقاد و یا هرگونه فیدبکی نسبت به این کانال دارید، در توئیتر بنویسید. مطمئن باشید ما آنها را می‌خوانیم. (در توئیتر @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


___
ضد الگوی «کد مرده» یا Dead Code، یک Anti Pattern رایج در شرکت‌هایی است که مدت نسبتا زیادی سیستم تولید می‌کنند. اگر شما این جمله‌ها را می‌شنوید احتمالا شما هم دچار این ضد الگو شده‌اید:
- این کد رو دو نفر قبلا نوشند که سه سال پیش رفتند و پارسال یه نفر دیگه تلاش کرد یاد بگیره و مستند بنویسه براش و اون هم رفته. البته فک نکنم الان اصلا از این کد استفاده بشه، ولی محض احتیاط بهتره پاک نشه!
این نوع کدها غالبا پیچیدگی سیستم را به شدت بالا می‌برند و تغییرات آتی سیستم را بسیار سخت می‌کنند.
بسیاری از این کدها به این علت به وجود می‌آیند که در زمان تولید کدهای در حد R&D وارد کد عملیاتی شده و به مدیریت آن در آینده فکر نشده.


https://sourcemaking.com/antipatterns/lava-flow

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


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


___
اندیشه طراحی یا «Design Thinking» یک مفهوم جدید در طراحی نرم‌افزار است که توسط IBM معرفی شده‌است. این روش به فرایند تولید نرم‌افزار به دید خلق یک سرویس نگاه می‌کند، سرویسی که قرار است به مشتریان ارائه شود تا نیاز واقعی آنها را برطرف کند. این روش با روش Agile متفاوت دارد ولی از ویژگی‌های آن استفاده می‌کند. به نظر می‌رسد این روش محبوبیت خیلی زیادی به دست آورد و مطالعه آن واقعا لذت‌بخش است.

https://www.ibm.com/design/thinking/

ویدئوی زیر این روش را به اختصار شرح می‌دهد:


https://bit.ly/1WzM4dQ


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


کانال تلگرام:
@SoftwarePhilosophy
در نسخه ASP.NET Core 1.0 RC2 چه اتفاقاتی خواهد افتاد؟ یکی از اتفاقات مهمی که در این نسخه می‌افتد، ادغام پروژه‌های ASP.NET Core و .Net Core است که قبلا مجزا بودند. این ادغام منجر به یکپارچگی CLI خواهد شد و از این به بعد به جای dnx, dnu, dnvm فقط کامند dotnet وجود خواهد داشت. این تغییرات تاثیر زیادی بر Runtime و Tooling دارد. برای مشاهده کامل‌تر این تغییرات و معماری جدید می‌توانید این پست Scott Hanselman را بخوانید.

https://www.hanselman.com/blog/AnUpdateOnASPNETCore10RC2.aspx

#صالح_یوسف‌نژاد

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


___
لینک زیر نشان می‌دهد که چگونه می‌توانید یک «بات»‌ بنویسید. «بات» برنامه‌ای است که مثلا در پشت یک سرویس مانند اسکایپ یا تلگرام قرار می‌‌گیرد و می‌تواند با چت کردن با شما، به نیازهای شما پاسخ دهد. در این لینک از زیرساخت جدیدی که توسط مایکروسافت به نام Microsoft Bot Framework معرفی شده استفاده شده‌است. جالب است بدانید برای نوشتن بات‌ها می‌توانید از زیرساخت‌هایی تحقیقاتی که توانایی درک متن را دارند استفاده کنید. این زیرساخت‌ها عمدتا در شاخه Microsoft Cognitive Services قرار دارند و به وسیله آنها می‌توانید متن و حتی عکس را تا حد زیادی درک کنید و به آنها پاسخ دهید.

https://www.c-sharpcorner.com/article/real-time-bot-project-using-microsoft-bot-framework/

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


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


___
یک API برای درک احساسات افراد در تصاویر! سرویس زیر که یکی از اجزای Microsoft Cognitive Science است به شما این امکان را می‌دهد تا با دادن یک عکس از گروهی از افراد به API به این اطلاعات دست پیدا کنید:
- مختصات صورت‌هایی که در عکس تشخیص داده شده‌است.
- میزان هر یک از احساسات در چهره: «خشم»، «ترس»، «خوشحالی»، «غم» و ...
همانطور که در لینک می‌بینید این اطلاعات به صورت JSON قابل استفاده هستند.

https://www.microsoft.com/cognitive-services/en-us/emotion-api

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


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


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

https://mehrandvd.me/2016/03/28/linq-the-bad-parts/

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


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


___