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

https://www.c-sharpcorner.com/article/managing-technical-debt-using-vsts

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

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



___
#پست_مجدد این پست تا به حال بیش از ۳۱۰۰ بار مشاهده شده و به نظر میرسد برای خوانندگان جدید کانال جذاب باشد.
Forwarded from Software Philosophy
اتفاقی که باید در وب می‌افتاد بالاخره افتاد! گوگل، مایکروسافت و موزیلا در یک تیم مشترک تصمیم گرفته‌اند تا بر روی یک باینری فرمت جدید برای وب کار کنند. این فرمت WebAssembly نام داره و تکنولوژی آن بر بستر C++ سوار شده همچنین گفته شده سرعت Decode در آن ۲۳ برابر سریعتر است.

https://techcrunch.com/2015/06/17/google-microsoft-mozilla-and-others-team-up-to-launch-webassembly-a-new-binary-format-for-the-web/


@SoftwarePhilosophy


___
زبان C++ کماکان یکی از قوی‌ترین زبان‌هایی است که تا به امروز ساخته شده است. خالق این زبان Bjarne Stroustrup اخیرا یک پیش‌نویس ارائه داده است که در آن در مورد اهداف نسخه بعدی یعنی C++ 17 صبحت کرده‌است. مهمترین اهداف طراحی در این نسخه عبارتند از:
• بهبود پشتیبانی از large-scale dependable software
• بهره‌مند شدن از ماژول‌های سطح بالاتر برای concurrency
• ساده سازی هسته زبان

لینک زیر مصاحبه‌ای است که با Stroustrup در مورد این پیش‌نویس انجام شده است.

https://www.infoq.com/news/2015/04/stroustrup-cpp17-interview

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

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


___
Forwarded from Software Philosophy
اگر دوستانی دارید که نه تنها برنامه نویس هستند، بلکه اعتقاد دارند «مهندس نرم‌افزار» هم هستند، آنها را به کانال @SoftwarePhilosophy دعوت کنید و این پیغام را برای آنها Forward کنید.
پیاده سازی Multi-Tenant Application و مدیریت داده‌های مشتریان مختلف در یک بانک اطلاعاتی، پیچیدگی‌های فراوانی دارد. در نسخه SQL Server 2016 امکانی به نام RLS (Row-Level Security) اضافه شده که این موضوع را بسیار ساده‌تر کرده است. لینک زیر توضیح می‌دهد که چگونه با استفاده از این امکان می‌توان امنیت داده‌ها را در سطح رکورد فراهم کرد. با استفاده از این قابلیت‌ می‌توان برنامه‌هایی برای چندین مشتری که اطلاعات آنها در یک بانک اطلاعاتی نگهداری می شوند، تولید کرد.

https://www.mssqltips.com/sqlservertip/4004/sql-server-2016-row-level-security-introduction

#محمدمحبتی

لینکدین :
https://www.linkedin.com/in/mohabbati

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


___
فلسفه Spacive Design جایگزینی برای Responsive Design

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

هنوز خیلی زود است که بتوان در مورد آینده طراحی UI/UX اظهار نظر کرد. ولی به نظر من یکی از آینده های محتمل برای طراحی UI/UX‌ نسل آینده نرم‌افزارها طراحی «فضاگرا» است. طراحی فضاگرا نوعی طراحی نرم‌افزار است که به آن این امکان را می‌دهد تا قسمت‌های مختلف خود را در فضای اطراف کاربر پخش کند. برای مثال فرض کنید هنگام کار با فیسبوک، تایم‌لاین را روی دیوار روبروی خود ببینید و نوتیفیکیشن‌ها رو روی ساعد خود ببینید. به این ترتیب نرم‌افزار فیسبوک توانسته در فضای اطراف شما مستقر شود.

https://mehrandvd.me/2016/07/12/hololens-spacive-design-new-era-uiux/

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

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


___
مفهوم Tow way bindig یکی از مهمترین امکاناتی است که فریم ورک AngularJS در اختیار برنامه‌نویسان قرار می‌دهد. این امکان به این صورت است که با تغییر view model، scope model نیز تغییر میکند و بلعکس. کاری که این فریم ورک برای ایجاد ارتباط بین view و scope model انجام میدهد به این صورت است که زمانیکه scop model تغییر می کند، به صورت خودکار $scope.$apply() صدا زده می شود که متعاقب آن $rootScope.$digest() فراخوانی میشود. با فراخوانی این سرویس، سیکل digest روی $scopeRoot شروع به کار کرده و تمام سرویس‌های $watch را اجرا می کند. سرویس $watch مقدار view Model را با scope model مقایسه و مقادیر جدید را جایگزین میکند.
مقاله زیر توضیحات کاملی درباره سرویس های $apply و $digest داده و چرخه وصل کردن view به scope را به طور کامل شرح داده است.

https://www.sitepoint.com/understanding-angulars-apply-digest

#مریم_داودی

لینکدین:
https://www.linkedin.com/in/maryam-davoudi-7913565a

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


___
کپی کردن کامل یک object معمولا یا از طریق Serialization‌ انجام می‌شود یا از طریق Reflection. همیشه Serialization محدودیت‌های خاص خود را دارد. برای مثال در XmlSerialization ارجاعات حلقه‌ای (Circular References) باعث مشکل می‌شوند. همچنین سرعت کپی از طریق سریالایزیشن نسبت به Reflection بسیار کمتر است. از طرفی سرعت کپی شدن از طریق Reflection هنوز نسبت به کپی دستی (manually copy functions) کمتر است.
مقاله جدید روش جدیدی را برای کپی اشیا از طریق Expression Trees در زبان C# ارائه داده‌است که هم قدرت Reflection را دارد و سرعت آن تقریبا برابر با روش «کپی دستی» است. خواندن این مقاله روشی که Expression Tree از آن استفاده می‌کند را بسیار خوب توضیح داده است و در مثال‌های عملی قدرت این ساختار را نمایش داده است.

https://www.codeproject.com/Articles/1111658/Fast-Deep-Copy-of-Objects-by-Expression-Trees-Csha

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

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


___
#پست_مجدد این پست تا به حال بیش از ۴۳۰۰ بار مشاهده شده و به نظر میرسد برای خوانندگان جدید کانال جذاب باشد.
Forwarded from Software Philosophy
یک پروژه برای تحلیل جهان هستی!
در حال حاضر ۱۲ ترابایت اطلاعات در یک دیتابیس به نام SkyServer ذخیره شده است که اطلاعات وضعیت کهشکان‌ها رو با جزئیات بالا نگه می‌داره و به روز می‌شه. این مقاله نشون می‌ده که چطور اطلاعات کهکشان‌ها در این دیتابیس ذخیره شده و معماری فیزیکی دیتابیس‌ها و سخت‌افزار آنها چطور طراحی شده.

https://blogs.technet.microsoft.com/dataplatforminsider/2016/03/10/mapping-the-universe-with-sql-server/


@SoftwarePhilosophy


___
عبارت Transpiler این روزها در دنیای مدرن برنامه‌نویسی زیاد استفاده می‌شود. عمل Transpiling در حقیقت تبدیل یک کد از یک زبان به یک زبان هم سطح دیگر است.
این در حالی است که مفهوم Compiling یک مفهوم کلی‌تر است و به معنی تبدیل یک زبان به هر چیز دیگری (مثل یک زبان نزدیک به ماشین یا زبان هم‌سطح) است. برای مثال عمل تبدیل یک کد TypeScript به JavaScript توسط یک Transpiler‌ انجام می‌شود. زیرا این دو زبان از لحاظ سطح انتزاع شبیه هم هستند. ولی عمل تبدیل کد C# به IL یا تبدیل کد C++ به binary code و یا تبدیل Java به byte code یک کامپایل محسوب می‌شود. زیرا این تبدیل به یک زبان نزدیک به ماشین است.
در لینک زیر می‌توانید این مفاهیم را با جزئیات بیشتری مطالعه کنید.

https://www.stevefenton.co.uk/2012/11/compiling-vs-transpiling

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

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


___
Forwarded from Iran .Net
"به خومان اهمیت بدهیم"
کسانی که در حوزه توسعه نرم افزار کار می کنند عموما از سبک زندگی مناسبی برخوردار نیستند. فشار کاری زیاد، انتظارات بالای سایرین از ما، رقابت شدید، نیاز به یادگیری مداوم و به روز ماندن، ساعت ها خیره شدن به مانیتور و فعالیت فیزیکی بسیار پایین، عدم تعامل موثر با سایرین و ... از ویژگی های "حرفه" ماست. این ها در کنار مشکلات جدی تر زندگی مانند مسائل مالی، رابطه و دغدغه های زندگی بسیار سنگین تر هم خواهند شد.
اسکات هنسلمن در وبلاگ اش راهکار هایی را که خودش برای حل این مسائل به کار بسته را به اشتراک گذاشته است.

https://www.hanselman.com/blog/SelfcareMattersPayYourselfFirst.aspx
عملگرهای null-conditional یکی از جذاب‌ترین امکاناتی است که به C# 6.0 اضافه شده‌اند. برای همه برنامه‌نویسان همیشه چک کردن مقدار null بسیار زمانگیر است و عموما خوانایی کد را نیز کم می‌کند. مخصوصا اگر قرار باشد برای عبارتی مانند
person.Children[2].FavoriteSinger.SendMessage("Hello")
بخواهید null بودن را چک کنید.
آیا person==null است؟ اگر نیست، آیا Children اصلا آیتم 2 دارد و null نیست، اگر نیست، خواننده محبوب دارد؟
برای بررسی درست و نوشتن یک کد Null Safe باید حداقل ۱۰ خط کد نوشته شود. اما با ویژگی جدیدی که در C# 6.0‌ اضافه شده می‌توانید از کد یک خطی زیر استفاده کنید:
Person?.Children?[2]?.FavoriteSinger?.SendMessage("Hello")

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

https://msdn.microsoft.com/en-us/library/dn986595.aspx

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

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


___
یکی از مهمترین قسمت های برنامه نویسی خطا یابی یا همان debugging است. در گذشته برای خطا یابی از دستور print() استفاده می شد که بسیار زمان بر و طاقت فرسا بود. امروزه ابزارهایی برای debug طراحی شده که با ساده کردن خطا یابی باعث سرعت بیشتر برنامه نویسی شده اند. آشنایی و استفاده از این ابزارها لذت برنامه نویسی را برای شما صد چندان می کند.
در Visual Studio هفت ابزار برای خطا یابی وجود دارد.
• DataTip
• Autos Window
• Local Window
• Watch Windows
• QuickWatch dialog
• Parallel Watch Windows
• Immediate Window
مقاله زیر به روشی مناسب این 7 ابزار را معرفی کرده و شرح داده است.

https://blogs.msdn.microsoft.com/visualstudioalm/2016/07/15/7-ways-to-look-at-the-values-of-variables-while-debugging-in-visual-studio

#مریم_داودی

لینکدین:
https://www.linkedin.com/in/maryam-davoudi-7913565a

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


___
آینده زبان C# به چه سمتی می‌رود؟ این زبان از نسخه ۳ به بعد، در هر نسخه خود امکانات جدیدی را به دنیای برنامه‌نویسی شی‌گرای مدرن معرفی کرد. از زمانی که کامپایلر Roslyn به صورت اوپن-سورس معرفی شد و همچنین پلتفرم Xamarin به صورت رایگان در اختیار برنامه‌نویسان قرار گرفت، اتفاقات جالب زیر محقق شده‌است:
• You can write C# in any editor you want
• C# is open source now
• C# runs on Windows, Mac, and Linux
• C# can be used to build Windows client apps, Windows Store apps, iOS apps, and Android aps and can also be used to build backend and middle-tier frameworks and libraries.
• Supports all IDEs and editors
• All the linters and analysis tools
• All the fixing and refactoring and code generation tools
• All the scripting and all the REPLs

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

https://www.c-sharpcorner.com/article/what-is-the-future-of-C-Sharp

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

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


___
#پست_مجدد این پست تا به حال بیش از ۲۷۰۰ بار مشاهده شده و به نظر میرسد برای خوانندگان جدید کانال جذاب باشد.
Forwarded from Software Philosophy
برای افرادی که برنامه نویسی IoT علاقه دارند، Raspberry Pi 3 یک سخت افزار هیجان انگیز به حساب می‌آید. مهمترین ویژگی این مدل نسبت به مدل‌های قبلی وجود Builtin WiFi در آن می‌باشد. در این مقاله از Scott Hanselman‌ نشان داده شده که چطور با استفاده از زبان JavaScript و VS Code می‌توان روی این سخت‌افزار کد نوشت.

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


@SoftwarePhilosophy


___
هرم شیطان یا Pyramid of Doom یک مشکل معروف در دنیای برنامه‌نویسی است. این مشکل معمولا وقتی پیش می‌آید که برنامه‌نویس مجبور است تعداد زیادی if تو در تو بنویسد، در این صورت با رعایت تو رفتگی‌های کد، کد شما از دور یک هرم خیلی بزرگ به نظر می‌رسد. یک نمونه متداول چک کردن مقادیر null به وسیله if های تو در تو است. این هرم هنگام استفاده از callback های متوالی نیز پیش می‌آید. در برنامه نویسی به زبان JavaScript حتما این هرم را در کدها دیده‌اید. لینک زیر نحوه تشکیل این هرم در کد را نشان می‌دهد و برای رفع آن در برخی حالت‌ها راه حل هایی ارائه داده است.

https://en.wikipedia.org/wiki/Pyramid_of_doom_(programming)

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

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


___
اگر ایده‌هایی در سر دارید و می‌خواهید یک استارتاپ شکل دهید، باید بتوانید در مورد آن حرف بزنید! باید بتوانید ایده خود را به بقیه (از جمله سرمایه‌گذاران) توضیح دهید. شما معمولا فقط دو دقیقه فرصت دارید تا ایده خود را توضیح دهید. چه بخواهید، چه نخواهید معمولا بعد از ۲ دقیقه شنیده نمی‌شوید.
نصیحت یک سرمایه‌گذار به موسسین استارتاپ‌ها: «هر چه بیشتر حرف بزنید، احتمال بیشتری وجود دارد چیزی بگویید که مخاطبتان خوشش نیاید، پس کمتر حرف زدن بهتر است!»
مقاله زیر نکاتی بسیار مهم را توضیح داده که هنگام ارائه دو دقیقه‌ای خود باید در نظر داشته باشید.

https://medium.com/the-startup-magazine-collection/what-to-include-in-your-2-minute-startup-pitch-b166f529f388?ref=quuu#.wp67z53jl

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

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


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