Software Philosophy
3.45K subscribers
160 photos
41 videos
1.54K links
چکیده‌ای از مفاهیم به روز مهندسی نرم افزار برای مهندسین نرم‌افزار.
معماری نوین نرم‌افزار، تکنولوژی‌های برنامه نویسی جدید
Download Telegram
Forwarded from Software Philosophy
در یک بازی شطرنج با محدودیت زمانی ۵ دقیقه (شطرنج سریع یا بلیتس)، بازیکنان در یک زمان کم تصمیم میگیرند و حرکت را انجام میدهد ولی در حالت بدون محدودیت زمانی بازیکنان به اندازه کافی وقت برای فکر کردن و تصمیم گرفتن را دارند. در نتیجه شطرنج سریع از لحاظ کیفیت قابل مقایسه با شطرنج بدون محدودیت زمانی نیست.
یک رابطه مستقیم بین کیفیت و زمان انجام کار وجود دارد. هرچه که زمان بیشتر باشد کیفیت کار نیز بیشتر است. این قاعده در پروژه‌های نرم‌افزاری نیز صادق است. اگر مدیر پروژه به هر دلیلی مدت زمان انجام پروژه را کم در نظر بگیرد ناخواسته از کیفیت برنامه کاسته میشود، و این عدم کیفیت در سایت مشتری خودش را نشان میدهد.

بروز خطا در سایت مشتری به مراتب اثر منفی بیشتری دارد تا دیر تحویل دادن یک پروژه با کیفیت عالی.

Managers jeopardize product quality by setting unreachable deadlines.

Workers kept under extreme time pressure will begin to sacrifice quality. They will push problems under the rug to be dealt with later or foisted off onto the product’s end user. They will deliver products that are unstable and not really complete. They will hate what they’re doing, but what other choice
do they have?

از کتاب:
Peopleware: Productive Projects and Teams (Tom DeMarco & Timothy Lister)


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

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



___
بالاخره jQuery 3.0 ریلیز شد. این نسخه از نسخه قبلی «سبک‌تر» و «سریع‌تر» است و Backward compatiblity نیز در آن در مد نظر قرار داده شده است. تمام workaround ها برای پشتیبانی نسخه‌های قدیمی IE حذف شده و تا حد امکان از امکانات جدید مرورگرهای پیشرفته استفاده شده. یکی از تغییرات مهم این نسخه تغییر jQuery.Differed برای سازگار شدن با استاندارد Promise/A+ است.

https://blog.jquery.com/2016/06/09/jquery-3-0-final-released

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

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



___
Forwarded from Software Philosophy
اگر دوستانی دارید که نه تنها برنامه نویس هستند، بلکه اعتقاد دارند «مهندس نرم‌افزار» هم هستند، آنها را به کانال @SoftwarePhilosophy دعوت کنید و این پیغام را برای آنها Forward کنید.
امکانات مورد انتظار در C# 7.0

مقاله زیر به طور خیلی خلاصه و مفید،‌ جذاب‌ترین امکاناتی را که قرار است به نسخه جدید سی‌شارپ اضافه شوند را توضیح می‌دهد. امکاناتی مانند Pattern Matching، Record Syntax، Tuple as return type و امکاناتی برای Null Safety در نسخه جدید این زبان،‌ برنامه‌نویسی را بسیار شیرین‌تر و البته Robust تر می‌کند. همچنین در این مقاله توضیح داده شده‌است که چگونه Record ها می‌توانند به پیاده‌سازی یک immutable class کمک کند.

https://www.dotnetcurry.com/csharp/1286/csharp-7-new-expected-features

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

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



___
مفاهیم Promise و Deffered Objects در برنامه‌نویسی جاوااسکریپت بسیار مهم و حیاتی هستند. این مفاهیم کمک می‌کنند روش برنامه نویسی async در این زبان استاندارد و یکسان شود. مقاله زیر این مفهوم را به طور خیلی خلاصه و مفید توضیح داده‌است و سه کتابخانه q.js, when.js و jQuery.js را از لحاظ performance برای پیاده سازی promise‌ مقایسه کرده‌است.

https://blog.mediumequalsmessage.com/promise-deferred-objects-in-javascript-pt1-theory-and-semantics

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

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



___
Forwarded from Iran .Net
تعریف کلید های shortcut برای نرم افزارهای تحت وب:

برای نرم افزار های سازمانی تحت وب یا موارد دیگر، لازم است تا امکانی را فراهم کنیم که کاربر بتواند با استفاده از یکسری از shortcut ها، کارش را تسریع کند (عینا مشابه برنامه دسکتاپ). تعریف shortcut ها مستلزم این می باشد که
1. بتوانیم یک توالی از دکمه ها را تشخیص دهیم. مثلا ترکیب alt+shift+3 می تواند یک shortcut برای باز کردن یک صفحه به خصوص و یا باز کردن یک modal باشد.
2. نکته دیگر این است که باید فارغ از element ایی که دارای focus می باشد، بتوانیم وقوع shortcut توسط کاربر را تشخیص دهیم.

کتابخانه های زیر این کار را به راحتی و زیبایی برای ما تسهیل کرده و انجام می دهند:

https://dmauro.github.io/Keypress/

https://github.com/RobertWHurst/KeyboardJS

@irandotnet
زبان TypeScript در حال تبدیل شدن به یکی زبان‌های مهم نوشتن کدهای JavaScript تبدیل می‌شود. این زبان بر پایه زبان JavaScript ساخته شده و تقریبا از تمامی مفاهیم برنامه نویسی پیشرفته مانند class, interface, generic و ساختارهای دیگر پشتیبانی می‌کند.
لینک زیر به طور کاملا خلاصه، شما را در عرض چند دقیقه با مفاهیم اصلی این زبان آشنا می‌کند.

https://www.dotnetcurry.com/typescript/1287/typescript-quick-start-tutorial

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

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



___
Forwarded from الگوریتمستان
» Qt 5.7.0 released

نسخه‌ی رسمی و نهایی کتابخانه‌ی Qt 5.7 منتشر شد.

در این نسخه علاوه بر تغییرات و اضافه شدن امکانات جدید نسبت به نسخه‌ی قبلی (همانند Qt 3D و Qt Quick Controls 2) برخی امکانات پولی (مانند Qt Charts و Qt Data Visualization) رایگان شدند:
https://wiki.qt.io/New_Features_in_Qt_5.7

این نسخه از طریق پیوند زیر قابل دریافت است:
https://download.qt.io/official_releases/qt/5.7/5.7.0/

#برنامه_نویسی #cpp
@algorithmha
Forwarded from Software Philosophy
استفاده از منوها یا دکمه‌هایی که کلیک بر روی آن باعث Scroll در صفحه می‌شود اخیرا بسیار متداول شده‌است. برای نوشتن چنین سایت‌هایی باید از طریق کد جاوا‌ اسکریپت به اسکرول مرورگر دسترسی داشته‌باشید. یکی از کتابخانه‌هایی که برای این منظور می‌توان استفاده کرد Jump.js است. مقاله زیر نحوه استفاده از این کتابخانه را توضیح می‌دهد.

https://www.sitepoint.com/smooth-scrolling-vanilla-javascript/

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

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



___
یک بررسی کلی از معماری .NET Core از Rick Strahl. در این مقاله به بررسی معماری کلی نسخه جدید .Net پرداخته شده‌است. در این مقاله به برنامه بلند مدتی که برای همگرا شدن با تکنولوژی‌های Xamarin وجود دارد نیز اشاره شده‌است. در این مقاله اشاره شده که پروژه‌های .Net Core و Mono به سمتی می‌روند که ممکن است بعد از مدتی انقدر شبیه هم شوند که پیدا کردن تفاوت‌هایشان سخت باشد!
همچنین در این مقاله اشاره شده است که این تکنولوژی‌ها هنوز Bleeding Edge هستند و برای پروژه‌های Big Production زود است که از این تکنولوژی‌ها استفاده شود.

https://weblog.west-wind.com/posts/2016/Jun/13/ASPNET-Core-and-NET-Core-Overview

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

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



___
مفهوم Computer Vision یا «بینایی کامپیوتری» یکی از مباحث جذابی است که اخیرا در نرم‌افزارهای زیادی اثرات آن را می‌بینید. اینکه چگونه در یک عکس، اشیا تشخیص داده شوند و یا در یک فیلم، اشیا متحرک شناسایی شوند مفهومی کاملا پیشرفته است و علوم و تکنیک‌های زیادی در آن دخالت دارند.
مقاله جالب زیر یک دید کلی نسبت به این مفهوم را ترسیم کرده‌است، سپس مثال‌هایی را در زبان C# بیان کرده‌است.

https://www.c-sharpcorner.com/article/a-quick-introduction-to-computer-vision-using-c-sharp

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

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



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

https://www.sitepoint.com/implement-javas-equals-method-correctly/

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

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



___
Forwarded from Software Philosophy
عادت‌های خوب برنامه‌نویسی در هر زبان با زبان دیگر متفاوت است. یکی از نکاتی که در مورد عادت‌های برنامه‌نویسی مهم است، درک این مطلب است که هنگام استفاده از هر زبان یا تکنولوژی باید «مانند آن» فکر کنید و سعی نکنید عادت‌های قبلی خود را وارد زبان جدید کنید و یا طرز فکر قبلی خود را به زبان جدید تحمیل کنید. برای مثال اگر با زبان‌های شی‌گرا کار کرده‌اید، هنگام کار با یک زبان Functional سعی کنید مثل آن فکر کنید.
مقاله زیر توضیح می‌دهد چگونه برای کار با زبان‌های Functional مانند F# باید طرز فکر خود را تغییر دهید.

https://www.codeproject.com/Articles/462767/How-to-Think-Like-a-Functional-Programmer

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

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



___
Forwarded from Software Philosophy
بهترین UX برای یک برنامه، UXی است که دیده نمی‌شود! هر چه تجربه کاربری یک برنامه بهتر طراحی شده باشد، باعث می‌شود کاربر احساس راحتی بیشتری کند و اصلا احساس نکند چیزی وجود دارد! برای این منظور باید اصولی را در طراحی برنامه رعایت کرد.
- طراحی باید طوری باشد که همه چیز آشنا به نظر برسد!
- تمیز بودن و خلوت بودن به اندازه کاربردی بودن مهم است.
- رعایت اصل سادگی کمک بزرگی به طراحی روان‌تر می‌کند.
لینک زیر مواردی را که برای رسیدن به یک UX که دیده نشود لازم است را توضیح می‌دهد.

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

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

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



___
Forwarded from فلسفه دیزاین
تفاوت‌های طراح ارشد و طراح تازه‌کار

در جامعه کاری که ما در اون قرار داریم، خیلی وقت‌ها تفاوت بین ادو مفهوم طراح ارشد (Senior Designer) و طراح تازه‌کار (Junior Designer) خیلی مشخص نیست و تعیین‌شون بعضا بواسطه تجربه و گاهی هم از طریق سمت‌هایی که در شرکت‌ها داده میشه، انجام می‌پذیره.

با در نظر گرفتن این موضوع که اخیرا مفهوم طراح، شکلی کلی‌تر به خودش گرفته و به طوری تغییر (و به دید من بهبود) پیدا کرده که معرف شخصی‌ست با نوع متفاوتی از تفکر در فهم یک مسئله و پیدا کردن راه حل اون. طراحان بسیاری هستند که علیرغم داشتن تجربه زیاد، اختیارات بالا و تاثیرگذاری در محصولات سازمان و همینطور تبحر استفاده از ابزارهای متنوع، همچنان تغییری در روند و نحوه تفکر اون‌ها برای طراحی محصولات ایجاد نشده.

در ادامه با یه مقاله دیگه از Julie Zhou همراه باشید تا تفاوت‌های جالبی رو که ایشون بین طراحان ارشد و تازه‌کار قائل هستند، باهم مرور کنیم.

https://medium.com/the-year-of-the-looking-glass/junior-designers-vs-senior-designers-fbe483d3b51e

#معرفی_مقاله #مفاهیم
@HamDesign هَم دیزاین
Forwarded from Software Philosophy
چطور برنامه‌نویسی موازی را برای مادربزرگتان توضیح دهید!؟

برنامه نویسی موازی (Parallel Programming) و برنامه نویسی ناهمگام (Asynchronous Programming) مفاهیم نسبتا جدیدی در دنیای برنامه‌نویسی هستند که برای اغلب برنامه‌نویسان جدید است. همه در مورد آن شنیده‌انم ولی اغلب واضح نیست که دقیقا چیست و چرا سخت است. یک مفهوم پایه برای درک این مفاهیم پایه Thread یا نخ است. نخ‌ها مفاهیمی هستند که وظیفه انجام کارها روی CPU را دارند. در دنیای ما انسان‌ها کسانی هستند که کار انجام می‌دهند. مقاله زیر مفهوم «نخ» را به «انسان» شبیه دیده‌است و سعی کرده‌است مفاهیم پیچیده دنیای برنامه‌نویسی را با مفاهیم ساده‌ دنیای ما انسان‌ها توضیح دهد.

https://mehrandvd.me/2016/04/18/parallel-programming-grandmother/


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

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



___
فریم‌ورک Bootstrap به عنوان یکی از محبوب‌ترین فریم‌ورک‌های CSS شناخته می‌شود. این فریم‌ورک به حدی محبوب شده‌است که آشنایی با آن در بسیاری از جلسات مصاحبه فنی برای موقعیت Front-End Developer حیاتی است.
لینک زیر سوالات متداولی که در جلسات مصاحبه با نیرو‌های جدید در مورد این فریم‌ورک پرسیده می‌شود مطرح شده‌اند.

https://www.c-sharpcorner.com/article/top-bootstrap-interview-questions-and-answers

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

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



___
پروژه یا محصول؟ مدیر پروژه یا مدیر محصول؟

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

شما در حال توسعه کدام یک هستید؟ محصول یا پروژه؟

https://www.brainmates.com.au/brainrants/project-manager-vs-product-manager

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

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

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



___
Forwarded from Iran .Net
انتشار نسخه نهایی aspnet core 1


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

البته هنوز signalR به این نسخه از aspnet اضافه نشده است.

https://blogs.msdn.microsoft.com/webdev/2016/06/27/announcing-asp-net-core-1-0/
تایپ پیش‌فرض Entity Framework برای نوع تاریخ در دیتابیس datetime است. این تایپ توانایی نگهداری زمانهایی بیشتر از «1/1/1753» را دارد. از طرفی در زبان C# مقدار پیش‌فرض برای DateTime مقدار «1/1/0001» می‌باشد. به همین دلیل اگر یک Property از این نوع داشته باشید هنگام ذخیره در دیتابیس خطا رخ می‌دهد. برای رفع این مشکل یا باید نوع این ستون را به datetime2 تغییر دهید و یا از نوع Nullable یا «DateTime?» استفاده کنید.

لینک زیر این مشکل را به طور خلاصه و فقط در چند خط توضیح می‌دهد.

https://codemeek.blogspot.com/2013/07/resolve-entity-framework-error.html

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

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



___