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

در لینک زیر این ضد الگو بیشتر توضیح داده شده‌است.

https://sourcemaking.com/antipatterns/mushroom-management

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

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



___
برای شما که علاقه دارید (عجله دارید!) تا امکانات C# 7.0 را همین الان امتحان کنید، قبل از اینکه نسخه‌ نهایی آن منتشر شود، لینک زیر توضیح می‌دهد که چطور می‌توانید در Visual Studio 2015 و یا Visual Studio '15' (نسخه بعدی) نسخه جدید زبان C# را امتحان کنید. با توجه به اینکه کامپایلر جدید این زبان (Roslyn) دیگر Open Source شده، شما می‌توانید حتی آخرین نسخه‌ موجود را امتحان کنید.

https://www.c-sharpcorner.com/article/how-to-compile-test-C-Sharp-7-features/

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

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



___
Forwarded from فلسفه دیزاین
درس‌هایی درباره «دکمه‌ها»، خالص‌ترین نماینده یک طراحی

شاید تا حالا از این دید که درباره‌ش خواهیم گفت به دکمه‌ها نگاه نکرده باشید.
دکمه‌ها دوست داشتنی هستند. دکمه‌ها باعث «اعمال تغییرات» می‌شوند، دکمه‌ها شما رو به «مرحله بعدی» می‌برن و باعث «انجام» کارها می‌شوند.
دکمه‌ها بهترین نماینده زبان یک طراحی (Design Language) هستند و المان‌هایی که در اون‌ها استفاده میشه، می‌تونه پایه بخش‌های پیچیده‌تر طراحی باشه.
دکمه‌ها از سه بخش مهم رنگ، تایپوگرافی و آیکنوگرافی تشکیل شدند. این سه بخش می‌تونن پایه زبان طراحی و راهنمای بصری (Style Guide) باشن. دکمه‌ها حتی بحث «فاصله‌ها» رو هم با موارد مثل Padding و Margin به چالش می‌کشند. بُعد طراحی رو با سایه زیرشون و حس طراحی رو با گوشه‌های گرد و یا تیز‌شون مشخص می‌کنند.

پس دکمه‌ها یکی از مهم‌ترین بخش‌های یک طراحی هستند.
در این مقاله با Nathan Curtis، بنیانگذار موسسه تجربه کاربری Eight Shapes همراه می‌شیم تا ۱۲ درسی رو که ایشون درباره «دکمه‌ها» در طراحی سیستم‌ها آموختن، بخونیم.

https://medium.com/eightshapes-llc/buttons-in-design-systems-eac3acf7e23

#مفاهیم #دکمه #طراحی_سیستم #معرفی_مقاله #زبان_طراحی
@HamDesign هَم دیزاین
همیشه یکی از مراحل مهم در توسعه نرم‌افزار، مرحله Optimization است. در این مرحله معمولا کدها نوشته شده و حال نوبت رفع کندی‌هایی است که در برنامه وجود دارد. برای این کار باید ابتدا تشخیص دهید چه قسمت‌هایی از برنامه کند است، یا به طور دقیق‌تر چه متدهایی و یا دقیقا اجرای چه خط‌هایی باعث کند شدن برنامه شده‌است. به ابزارهایی که به شما کمک می‌کنند بتوانید نرم‌افزار خود را از این لحاظ بررسی کنید Performance Profiler می‌گویند. از نمونه ابزارهای قوی در این حوزه می‌توان به dotTrace و ANZ اشاره کرد. در خود Visual Studio نیز چنین ابزاری به نام Profiler وجود دارد که لینک زیر نحوه استفاده از آن را شرح داده‌است.

https://blogs.msdn.microsoft.com/visualstudioalm/2016/04/28/how-cpu-sampling-works/

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

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



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

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


@SoftwarePhilosophy


___
از جمله تکنولوژی‌های جذابی که این روز‌ها به عنوان تکنولوژی‌های آینده وب مطرح هستند Angular 2، TypeScript و ASP.NET Core برای ساخت برنامه‌های Cross-Platform هستند. یکی از جذابیت‌های این تکولوژی‌ها این است که تمامی آنها کاملا از ابتدا نوشته شده‌اند و با توجه به این که نیازی به پشتیبانی از نسخه‌های قبل ندارند معماری کاملا نوینی و مدرنی دارند.
این لینک به صورت قدم به قدم آموزش داده است که همین الان چطور می‌توانید با این تکنولوژی‌ها برنامه تولید کنید. بنابراین با خواندن این پست و انجام مراحل شما یک محصول کامل خواهید نوشت.


https://chsakell.com/2016/01/01/cross-platform-single-page-applications-with-asp-net-5-angular-2-typescript/

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

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



___
معماری نرم‌افزاری و سخت‌افزاری سایت StackOverflow در سایت ۲۰۱۶. در این پست Nick Craver یکی از برنامه‌نویسان سایت StackOverflow حجم بالای ترافیک این سایت را توصیف کرده و توضیح می‌دهد که در معماری نرم‌افزاری که برای نوشتن این سایت استفاده شده از چه تکنولوژی‌های استفاده شده‌است. از آنجایی که این سایت یکی از محصولات موفق با بار ترافیک بالا است، تکنولوژی‌های استفاده شده در این سایت همیشه برای برنامه‌نویسان جذاب بوده است.

https://nickcraver.com/blog/2016/02/17/stack-overflow-the-architecture-2016-edition/

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

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



___
اگر می‌خواهید از Entity Framework Core روی SQLite استفاده کنید، لینک زیر محدودیت‌های EF Core را روی آنها توضیح داده‌است. البته بیشتر این محدودیت‌ها به دلیل پشتیبانی نکردن خود SQLite از این عملیات است. برای مثال شما می‌توانید برای رفع محدودیت‌های Migration در مورد این کارهای خاص از متد Sql(string) استفاده کنید.

https://ef.readthedocs.io/en/latest/providers/sqlite/limitations.html

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

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



___
پروژه Jil یک کتابخانه جذاب برای استفاده به عنوان JSON Serializer است. اگر تا به حال از کتابخانه‌هایی مانند NewtonSoft استفاده کرده‌اید و دغدغه Performance داشته‌اید این کتابخانه می‌تواند جایگزین مناسبی باشد. جالب است بدانید که کتابخانه‌ای است که برنامه‌نویسان سایت StackOverflow به دلیل Performance انتخاب کرده‌اند و در طراحی این سایت از آن استفاده کرده‌اند.

https://github.com/kevin-montrose/Jil

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

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



___
نسل جدید بازی‌ها و همچنین نرم‌افزارها در راه است. این نسل جدید بر پایه VR یا «واقعیت مجازی» بنا شده‌است. از آنجایی که این مفهوم هنوز خیلی جدید است خیلی مطالب هنوز در مورد آن دقیق و مشخص نشده است. از جمله این مفاهیم استانداردهای UX است که امروزه در محیط‌های دیگر خیلی به آن پرداخته شده‌است. واقعیت مجازی محیطی کاملا متفاوت با محیط‌های قبلی است و نیازمند باز طراحی این استانداردها است. لینک زیر استراتژی‌هایی را برای UX بهتر در بازی‌های کامپیوتری مبتنی بر VR ارائه داده‌است.

https://uxmag.com/articles/4-strategies-for-mastering-ux-in-virtual-reality-games

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

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



___
همیشه یکی از مهمترین کارهایی که باید توسط یک معمار نرم‌افزار انجام شود و معمولا هم اصلا انجام نمی‌شود(!) فکر کردن به نحوه انتقال به نسخه جدید است. در این فرایند معمولا با کلماتی مانند Deployment یا Migration سر و کار دارید. پست زیر توسط یکی از برنامه‌نویسان سایت StackOverflow نوشته‌شده است و توضیح می‌دهد فرایند Deployment این سایت در سال 2016 چگونه طراحی شده‌است. نحوه برخورد با سورس کدها، مراحلی که نیاز به یک انسان دارد، مدیریت Branch ها، Database Migration، مدیریت Translation ها و نکات بسیاری را برای یادگیری دارد.

https://nickcraver.com/blog/2016/05/03/stack-overflow-how-we-do-deployment-2016-edition/

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

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



___
اگر در حال توسعه نرم‌افزار هستید و با مفهوم Source Control آشنایی ندارید، حتما یک جای کار خیلی مشکل دارد! امروزه مفاهیم و ابزارهای سورس کنترل انقدر زیاد و متداول شده‌اند که اگر به آن عادت کنید، دیگر حتی بدون آنها نمی‌توانید یک پروژه شخصی در خانه بنویسید.
لینک زیر که توسط تیم git (یکی از محبوب‌ترین ابزارهای سورس کنترل) نوشته شده‌است، مفاهیم پایه‌ای را توضیح می‌دهد.

https://www.atlassian.com/git/tutorials/what-is-version-control

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

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



___
ضد الگو یا Anti-Pattern‌ فقط در مرحله طراحی و یا برنامه‌نویسی به وجود نمی‌آید. در مرحله طراحی UI‌ هم ضد الگو وجود دارد. یکی از متدوال‌ترین ضدالگوهایی که در این لایه وجود دارد، پورت کردن یک برنامه از پلتفرم‌های دیگر است. برای مثال برنامه‌ای که برای iOS نوشته شده است را با همان ساختار وارد Android کرد. استفاده از پلتفرم‌های Cross-Platform معمولا این مشکل را دارند، چون سعی می‌کنند دقیقا یک کد را روی هر دو پلتفرم اجرا کنند. اما هر پلتفرم استانداردهای UI مختص خود را دارند. برای مثال در اندروید تب‌ها در بالا نمایش داده می‌شوند و در iOS تب‌ها در پایین لیست می‌شوند.

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

https://www.sitepoint.com/android-design-anti-patterns-pitfalls/

#افشین_علیزاده
لینکدین:
https://ir.linkedin.com/in/afshinalizadehbehjati

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


___
معماری‌های نوین نرم‌افزار برای حل مسائلی به وجود آمده‌اند که قبلا وجود نداشتند. برای مثال شبکه‌های اجتماعی که در آن میلیون‌ها لایک و کامنت در ثانیه را هندل می‌کنند و همیشه با بیلیون‌ها رکورد سر و کار دارند مسائلی است که جدید هستند و با معماری و ابزارهای قبل قابل حل نیستند. دیتابیس‌های NoSql و PolyGlot ابزارهای جدیدی هستند که در معماری‌های جدید از آنها استفاده می‌شود. مقاله زیر از Dino Esposito معمار با سابقه نرم‌افزار، توضیح می‌دهد که چگونه با استفاده از Historical CRUD و Event Sourcing می‌توان راه‌حلی برای این گونه مسائل ارائه داد.

https://msdn.microsoft.com/en-us/magazine/mt703431

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

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


___
Forwarded from Software Philosophy
اگر دوستانی دارید که نه تنها برنامه نویس هستند، بلکه اعتقاد دارید «مهندس نرم‌افزار» هم هستند، آنها را به کانال @SoftwarePhilosophy دعوت کنید.
این پیغام را برای آنها Forward کنید.
یکی از مهمترین بخش یک برنامه موبایل UI‌ آن است. یک برنامه موبایل هرچند دارای تحلیل و طراحی قوی و برنامه‌نویسی خوبی باشد بدون یک UI‌ خوب نمیتواند کاربر را جذب کند. ایجاد یک UI‌ قوی فقط با آگاهی از ویژگی‌هایی که سیستم عامل گوشی پشتیبانی میکند حاصل نمی‌شود. یک طراح خوب باید نقاط قوت و ضعف هر یک از تکنیک‌های استفاده شده در UI را بداند و در جای درست از آنها استفاده کند. مثلا دو روش برای Zoom کردن وجود دارد:
۱) Double-tap
۲) Pinch and Spread (با استفاده از دو انگشت و با دور یا نزدیک کردن دو انگشت به یکدیگر)
که هر کدام مزایا و معایب خود را دارند.

در پست زیر تکنیک‌های مختلف UI در برنامه‌های اندرویدی را بررسی کرده است.

https://unitid.nl/androidpatterns/

#افشین_علیزاده
لینکدین:
https://ir.linkedin.com/in/afshinalizadehbehjati

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



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

https://www.c-sharpcorner.com/article/is-json-overridden-xml/

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

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



___
یکی دیگر از موارد مهم در طراحی UI‌ برنامه‌های موبایل توجه به Landscape و یا Portrait بودن است. که هر کدام از این حالت‌ها ویژگی‌های خاص خود را دارند که طراح میتواند به خوبی از این ویژگی‌ها استفاده کند.
مثلا برنامه‌ای را در نظر بگیرد که برای بورس نوشته شده است. در حالت Portrait یک گرید نمایش داده میشود که شاخص بورس در هفته جاری را نشان میدهد. یک UI معمولی همین گرید را در حالت Landscape نمایش میدهد ولی یک UI خوب یک نمودار میله‌ای را نمایش میدهد.

در پست زیر Patternهای مختلفی را که برنامه‌های مختلف در نمایش Landscape استفاده کرده‌اند را بررسی کرده است.

https://www.smashingmagazine.com/2012/08/designing-device-orientation-portrait-landscape/

#افشین_علیزاده
لینکدین:
https://ir.linkedin.com/in/afshinalizadehbehjati

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



___
Forwarded from Iran .Net
مفهوم Coupling:

یکی از اتفاقات بد که کم و بیش در هر پروژه ای به مرور پیش می آید، Coupling می باشد. جلوگیری از وقوع Coupling انرژی زیادی را از تیم توسعه خواهد گرفت و کار دشواری است. تیم ها و نفرات تازه کار از Coupling رنج می برند بدون آنکه از آن اطلاعی داشته باشند.
مفهوم Coupling به این معنا است که کلاس های مختلف، متد های مختلف، ماژول های مختلف تا چه میزان در هم تنیده و به هم وابسته اند. تنیدگی کد ها موجب می شود، تا هر تغییری در هر قسمتی، باعث بروز رفتارهای ناصحیح، از کار افتادگی و عدم کامپایل بخش هایی از برنامه شود که فکرش را هم نمی کنید.
وجود Coupling در نرم افزار ها موجب می شود تا هنگام تغییری در متد مربوط به کاربران، قسمتی از کد مربوط به انبارداری کامپایل نشود و یا قسمتی در سیستم سفارشات دچار خطای Run Time شود. 
به تعبیری وجود Coupling موجب می شود هر تغییری در سیستم موجب اثری به نام Ripple Effect و یا تغییرات موجی در نرم افزار شما شود. در نتیجه تغییر در سیستم های Coupled پر هزینه بوده و با عواقب غیرقابل پیشبینی رو به رو خواهد شد. همچنین گسترش این سیستم ها با دشواری مواجه خواهد بود.

* اگر کد شما دارای Coupling و وابستگی کمی باشد، به کد شما
Loosely Coupled گفته می شود، که نشان دهنده هنر مهندسی شما است.
* اگر کد شما دارای Coupling و وابستگی بالایی باشد، به کد شما Tightly Coupled گفته می شود.
Forwarded from Software Philosophy
یکی از مباحثی که همیشه در تشکیل تیم‌های نرم‌افزاری مطرح است، انتخاب زبان برنامه‌نویسی و یا تکنولوژی‌های مورد استفاده است. مقایسه محصولات موفق و نا موفق نشان می‌دهد هیچکدام از آنها صرفا با یک تکنولوژی و یا یک زبان خاص نوشته نشده‌اند. برای مثال سیستم‌های موفق زیادی وجود دارند که با Java و یا C# نوشته شده‌اند. همچنین سیستم‌های بی کیفیت زیادی نیز وجود دارد که با Java و یا C# نوشته شده‌اند. این حقیقت نشان می‌دهد دلیل موفقیت یا شکست سیستم‌ها نمی‌تواند زبان برنامه‌نویسی باشد. مقاله زیر توضیح می‌دهد که چطور طرز فکر برنامه‌نویس‌ها موفقیت و یا شکست یک سیستم را رقم می‌زند.

https://mehrandvd.me/2015/10/15/software-quality-comes-from-people-not-languages/

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


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

___
اگر در دنیای کامپیوتر و نرم‌افزار زندگی می‌کنید، حتما لینک‌ها و صفحه‌های زیادی در طول روز می‌بینید که دوست دارید بخوانید ولی فرصت مطالعه آن‌ها را ندارید. در پست زیر Scott Hanselman توضیح داده است که چگونه «بعدا بخوانید!» یا «Read it Later!». در این پست ابزارهایی معرفی شده‌است که بتوانید با آنها مطالب نخوانده خود را بهتر مدیریت کنید و بتوانید آن‌ها را به زمانی موکول کنید که فرصت دارید.

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

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

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



___