Software Philosophy
3.45K subscribers
160 photos
41 videos
1.54K links
چکیده‌ای از مفاهیم به روز مهندسی نرم افزار برای مهندسین نرم‌افزار.
معماری نوین نرم‌افزار، تکنولوژی‌های برنامه نویسی جدید
Download Telegram
تکنولوژی باعث می‌شود مدیران خیلی سریع گول نمودارها و اطلاعات زیباسازی شده را بخورند!
«تکنولوژی به شما تحلیل‌ها را می‌دهد، ولی استراتژی به شما نشان می‌دهد چطور از تحلیل‌ها استفاده کنید.» این جمله جالبی که در مقاله زیر از آن استفاده شده‌است.
سازمان‌های زیادی هستند که به واسطه استفاده زیاد از تکنولوژی توانایی تولید نمودارهای بسیار زیبایی از بیزنس خود را دارند، اما این نمودارها واقعا در تصمیم‌گیری‌ها کمک نمی‌کند و بیشتر خیال مدیران را راحت می‌کند که سازمان به تکنولوژی روز مجهز است.
در حقیقت فقط یک «استراتژی درست» می‌تواند نشان ‌دهد سازمان واقعا به چه اطلاعات و نمودارهایی نیاز دارد و نشان می‌دهد اگر مدیران این اطلاعات را در اختیار داشته باشند دقیقا قادر خواهند بود چه تصمیماتی را بهتر بگیرند.

«چگونه استراتژی (و نه تکنولوژی) عامل اصلی تحول دیجیتالی سازمان شماست» این عنوان مقاله‌ زیر است که توضیح می‌دهد چگونه استراتژی تاثیرگذاری زیادی در فرایند دیجیتالی شدن یک سازمان دارد.

https://datafloq.com/read/how-strategy-not-technology-driver-transformation/2105?ref=quuu&utm_content=buffer6b7ab&utm_medium=social&utm_source=linkedin.com&utm_campaign=buffer

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

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


___
تخمین یا برآورد هزینه نرم افزار همیشه یکی از دغدغه‌های اصلی شرکت‌های نرم افزار و برنامه نویسان بوده است. و مشتریان همیشه از قیمت ارائه شده توسط خالقان نرم افزار در تعجب بوده‌اند و گاهی آن‌ها را به ارائه قیمت‌های بدون معیار متهم کرده‌اند. مقاله زیر برخی از پارامترهای مهم در تخمین هزینه نرم افزارها (موبایل) را به زیبایی بررسی کرده است.

https://yalantis.com/blog/how-much-does-it-cost-to-develop-an-app/

#کاروان_جافی

لینکدین:
https://uk.linkedin.com/in/karvan-jafi-96897027

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


___
استفاده از تاریخ و زمان در زبان‌های برنامه‌نویسی همواره برای برنامه نویسان دردسر ساز بوده است. این مشکل به ویژه برای برنامه نویسان ایرانی مشهود است زیرا همیشه درگیر تبدیل تاریخ‌های میلادی و شمسی به یکدیگرند.
اما واقعا چرا مفهوم تاریخ در علم کامپیوتر و متعاقبا زبان‌های برنامه‌نویسی دردسر سازند؟
در مورد یک عدد عبارت ۱۰۰ تا بعد از ۳۰۰ چند می‌شود معنی دقیقی دارد و جواب ۴۰۰ است. ولی در مورد تاریخ عبارت «یک ماه» بعد از ۱۶ شهریور چه روزی است جواب دقیقی ندارد. آیا منظور از یک ماه ۳۰ روز است یا ۳۱ روز؟ با هر کدام از این فرضیه‌ها جواب ممکن است ۱۵ شهریور یا ۱۶ شهریور باشد.
مقاله زیر به صورت کامل‌تری پیچیدگی‌هایی را که تاریخ و زمان با خود به دنیای برنامه‌نویسی آورده‌اند را توضیح داده‌است.

https://mehrandvd.me/2016/07/26/datetime-complexities-programming-languages/

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

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


___
Forwarded from Software Philosophy
اگر دوستانی دارید که نه تنها برنامه نویس هستند، بلکه اعتقاد دارند «مهندس نرم‌افزار» هم هستند، آنها را به کانال @SoftwarePhilosophy دعوت کنید و این پیغام را برای آنها Forward کنید.
#پست_مجدد این پست تا به حال بیش از ۱۴۰۰ بار مشاهده شده و به نظر میرسد برای خوانندگان جدید کانال جذاب باشد.
Forwarded from Software Philosophy
در کنفرانس BUILD 2016 امکان اجرای کامندهای Bash و باینری‌های Ubuntu Linux روی ویندوز ۱۰ نمایش داده شد. طبق مطالب گفته شده در کنفرانس که توسط Kevin Gall ارائه شد، این کامندها مستقیما روی سیستم عامل اجرا خواهد شد و ماشین مجازی (VM) در میان نخواهد بود.
کامندهای Bash ابزاری معادل Command یا PowerShell در سیستم عامل لینوکس است که بسیار قدرتمند و محبوب است. لینک توضیحات بیشتری را در مورد این قابلیت می‌دهد.

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

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


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


___
فریم‌ورک Aurelia یکی از فریم‌ورک‌هایی است که به نظر می‌رسد آینده خیلی خوبی در بازار داشته باشد. معماری این فریم‌ورک بسیار با رویکردهای جدید معماری فریم‌ورک‌های کلاینت‌ساید تطابق دارد. یکی از نقاط قوت این فریم‌ورک نسبت به Angular 2 سر راست بودن مفاهیم در آن و خوانایی بسیار زیاد Binding Syntax در آن است.
مقاله زیر از Aurelia HUB کمک می‌کند در زمان بسیار کوتاهی یک برنامه To Do List با این زیرساخت بنویسید و با امکانات قدرتمند و در عین حال ساده آن آشنا شوید.

https://aurelia.io/hub.html#/doc/article/aurelia/framework/latest/quick-start/6

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

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


___
Forwarded from Iran .Net
اصولا معماری صحیح، تفکیک شده، تمیز و قابل مدیریت و قابل نگهداری مسائل و انتزاعاتی را وارد پروژه می کند که ممکن است تاثیری منفی در سرعت و کارایی (Performance) پروژه داشته باشد. چرا که معماری و چیدن لایه ها و ماژول ها و کلاس های مختلف و کوچک، متد های کوتاه و تک منطوره نیاز به تبادل اطلاعات در سیستم را زیاد خواهد کرد. مثلا برای کاری که در یک ساختار کثیف همه اش در یک متد و پشت سر هم انجام می شد، در یک معماری اصولی ممکن هست لازم به ساخت کلاس های متنوع و چرخش داده ها در بین متد های گوناگون داشته باشیم. این به معنی کاهش کارایی نرم افزار می باشد.

اما نکته آنجاست که در مهندسی نرم افزار توصیه بر ساخت نرم افزارهایی است که قابل نگهداری و قابل توسعه باشند. ما نرم افزارهایی نیاز داریم که تیم مان بتواند به راحتی با آن ها کار کند و نه نرم افزارهایی که کار با آن ها به سختی خواندن کتیبه های هخامنشی باشد. در واقع قربانی کردن معماری، خوانایی و ماژولاریتیِ نرم افزار به بهانه افزایش کارایی می تواند منشایی شیطانی در طول عمر پروژه شود.

یکی از ساده ترین مصداق های این موضوع انتخاب بین Entity Framework، ADO.NET و Dapper می باشد. همه ما می دانیم که قطعا Entity Framework از دیگر روش ها کارایی پایین تری خواهد داشت، حتی با به کار بستن ترفند های خاصِ خودش. پس انتخاب Entity Framework چه مزیتی خواهد داشت؟

در پاسخ به این سوال باید گفت که در پروژه های مهم از هیچ کدام از این روش ها به تنهایی استفاده نمی شود و پروژه باید ملغمه ای از این ها باشد. در مقاله ای که در این پست به شما معرفی می کنم، نگارنده پس از بررسی این سه فریم ورک عنوان می کند که ما تصمیم گرفتیم برای توسعه سریع تر، حفظ ساختارِ تمیز، افزایش خوانایی و مدیریت راحت تر تغییرات از Entity Framework استفاده کنیم و فقط در مواقع خاص و جاهایی که حس می کردیم با استفاده از Dapper به کاراییِ بسیار بسیار بهتری می رسیم، از Dapper استفاده کرده ایم.

پس بیش از سرعت به ساختار نرم افزار اهمیت دهیم و پس از شکل گرفتن استخوان بندی نرم افزار با بررسی و انجام بنچ مارک مناطق کند و گلوگاه های اصلی را پیدا خواهیم کرد و تغییرشان خواهیم داد. در ضمن برای بالا بردن سرعت و کارایی نرم افزار می توان در تامین سخت افزارهای بهتر هزینه کرد. در صورتی که معماری ناثواب را به هیچ طریقی نمی توان ترمیم کرد.

https://www.exceptionnotfound.net/dapper-vs-entity-framework-vs-ado-net-performance-benchmarking/
#پست_مجدد این پست تا به حال بیش از ۱۲۰۰ بار مشاهده شده و به نظر میرسد برای خوانندگان جدید کانال جذاب باشد.
Forwarded from Software Philosophy
برنامه نویسی کپی-پیست یا Cut&Paste Programming یک نمونه ضد الگوی برنامه نویسی (Anti Pattern) محسوب می‌شود. یکی از علائم آن استفاده از این جملات است:
-من این باگ رو قبلا درست کرده بودم، چرا هنوز هست!؟
-وااو... شما چقدر سریع کار می‌کنید، تو این سه هفته ۴۰۰.۰۰۰ خط حد نوشتید.

معمولا وقتی این اتفاق می‌افتد که تنها هدف آماده کردن نرم‌افزار و تحویل سریع آن به مشتری است. در این حالت برنامه‌نویس اصلا به ساختار و معماری و Reuseablity فکر نمی‌کند.

https://sourcemaking.com/antipatterns/cut-and-paste-programming

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


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


___
اگر می‌خواهید بیشتر در این مورد بدانید در لینک زیر توضیحات کاملی در این مورد داده شده.
#پست_مجدد این پست تا به حال بیش از ۱۲۰۰ بار مشاهده شده و به نظر میرسد برای خوانندگان جدید کانال جذاب باشد.
Forwarded from Software Philosophy
این مقاله توسط 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


___
این روزها نوشتن «بات» به یکی از کارهای هیجان انگیز تبدیل شده و بات‌های زیادی در بستر‌های مختلف ارتباطی در حال ظهور هستند. نوشتن یک بات کامل و پیشرفته معمولن نیاز به حجم زیادی از برنامه نویسی دارد. مخصوصا اگر قرار باشد تا حدود زیادی قدرت تشخیص زبان را داشته باشد و فقط محدود به یک سری کلمات از پیش تعریف شده نباشد. همچنین این که یک بات قابلت کار بر روی بسترهای ارتباطی مختلفی مانند اسکایپ، تلگرام، فیسبوک و غیره را نیز دارا باشد.
لینک زیر نحوه‌ی برنامه نویسی با فریم ورک جدید مایکروسافت برای نوشتن بات (Microsoft Bot Framework) را توضیح داده‌است.
این بات در ادامه توانایی اتصال به سرویس‌های هوش مصنوعی Microsoft Research مانند «تشخیص گفتار» و «تشخیص عکس» را نیز دارد.

https://www.microsoft.com/en-gb/developers/articles/week05july16/an-introduction-to-the-microsoft-bot-framework

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

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


___
برنامه ریزی امکانات در Entity Framework Core 1.1 احتمالا برای کسانی که در حال حاضر از نسخه 1.0 این محصول استفاده می‌کنند جذاب باشد. هنوز امکانات زیادی وجود دارد که نسل جدید این ORM اضافه نشده‌است. در مقاله زیر توضیح داده شده است که نسخه بعدی شامل چه امکاناتی است و چه امکاناتی در دستور کار نسخه بعدی نیست.

https://blogs.msdn.microsoft.com/dotnet/2016/07/29/entity-framework-core-1-1-plans/

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

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


___
#پست_مجدد این پست تا به حال بیش از ۱۱۰۰ بار مشاهده شده و به نظر میرسد برای خوانندگان جدید کانال جذاب باشد.
Forwarded from Software Philosophy
محصول 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


___
اصطلاح Dev Ops این روزها با رقابتی‌تر شدن نرم‌افزارها بسیار بیشتر به گوش می‌خورد. فرایندها و ابزارهایی که به تولید کنندگان نرم‌افزار کمک می‌کند محصولات خود را با کیفیت بالا و با سرعت بالاتر تولید کنند و به دست مشتریان برسانند. مقاله زیر پایپلاین ریلیز را برای محصولات موبایلی توضیح داده است. همچنین در این مقاله توضیح داده‌است که چطور این پایپلاین توسط TFS پیاده‌سازی می‌شود. یکی از قسمت‌های جالب این مقاله معرفی Xamarin Test Cloud است که به وسیله آن یک برنامه موبایل روی تمامی گوشی‌های موجود بازار تست می‌شود و نتیجه تست به برنامه نویس گزارش داده می‌شود. به این ترتیب بدون اینکه لازم باشد گوشی‌های مختلف داشته باشید، نتیجه اجرای برنامه خود را روی تمامی مدل‌های گوشی خواهید داشت.

https://msdn.microsoft.com/magazine/mt767694

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

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


___
#پست_مجدد این پست تا به حال بیش از ۱۰۰۰ بار مشاهده شده و به نظر میرسد برای خوانندگان جدید کانال جذاب باشد.
Forwarded from Software Philosophy
چهار چیزی که طراحان خوب به آن اهمیت می‌دهند:
۱. طراحان خوب به «انسانها» اهمیت می‌دهند. آنها انسانها و سطوح احساسی و معنوی انسانها را می‌فهمند.
2. طراحان خوب به «ساختن» اهمیت می‌دهند و از ساختن استقبال می‌کنند (مثلا ساخت مدل). حس خوب به ساختن باعث می‌شود چیزی که ساخته می‌شود نیز خوب باشد!
۳. طراحان خوب به «چرایی» اهمیت می‌دهند. طراحان در هنگام کار نیاز دارند تصمیم بگیرند. آنها شانسی تصمیم نمی‌گیرند، بلکه تصمیمات آگاهانه خود را بر اساس ریزترین چیزهایی که دیده‌اند می‌گیرند.
۴. طراحان خوب به صداقت اهمیت می‌دهند. آنها صداقت محض خود را وارد کار می‌کنند تا به این وسیله چیزهایی درست و معنی‌دار خلق کنند.

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

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

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


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


___
فریم‌ورک Nancy یک فریم‌ورک کوچک و جمع و جور برای پیاده‌سازی Web API است. این فریم‌ورک با الهام‌گیری از فریم‌ورک Sinatra در Ruby نوشته شده‌است. نسخه ۱.۴.۳ آن در حال حاضر نسخه stable تحت .NET است. نسخه جدید این فریم‌ورک تحت عنوان Nancy 2.0 بر پایه .NET Core در حال توسعه است و نسخه بتای آن آماده آزمایش است. در مقاله زیر، اسکات هانسلمن نشان داده چطور می‌توان از Nancy روی Kestrel و Owin استفاده کرد.

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

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

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

___
#پست_مجدد این پست تا به حال بیش از ۱۳۰۰ بار مشاهده شده و به نظر میرسد برای خوانندگان جدید کانال جذاب باشد.