Software Philosophy – Telegram
Software Philosophy
3.45K subscribers
160 photos
41 videos
1.54K links
چکیده‌ای از مفاهیم به روز مهندسی نرم افزار برای مهندسین نرم‌افزار.
معماری نوین نرم‌افزار، تکنولوژی‌های برنامه نویسی جدید
Download Telegram
Forwarded from Software Philosophy
آیا واقعا الگوریتم ابزار مناسبی برای درک کاربر است!؟ الگوریتم‌ها محدودیت‌های زیادی دارند. آنها معمولا بر اساس «اطلاعات قبلی» ساخته شده‌اند. الگوریتم‌ها معمولا از اطلاعات محدودی استفاده می‌کنند، یعنی برای سادگی قسمت‌هایی از مساله حذف می‌شود تا حل آن ساده‌تر شود. ولی رفتار یک انسان حتی خیلی وقت‌ها شبیه رفتار قبل خودش نیست و تغییر می‌کند. اصولا رفتار انسان یک ویژگی منطقی نیست، ولی الگوریتم سعی در مدل کردن منطقی رفتار کاربران دارد.
مقاله زیر توضیح می‌دهد چگونه الگوریتم‌ها را «انسان‌وار» کنیم (Humanizing the Algorithms).

http://uxmag.com/articles/design-like-a-human-in-the-age-of-algorithms

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

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



___
#پست_مجدد این پست تا به حال بیش از ۱۱۰۰ بار مشاهده شده و به نظر میرسد برای خوانندگان جدید کانال جذاب باشد.
Forwarded from Software Philosophy
مفهوم delegate در زبان C# چه مشکلی را حل می‌کند؟ این مفهوم مشابه همان مفهوم Function Pointer یا اشاره‌گر به تابع در زبان‌هایی مانند C++ است. در حقیقت delegate ها می‌توانند یک تابع را در دل خود نگه‌ دارند و به صورت امن به آن اشاره کنند. شما اجازه دارید آنها را با هر تابعی که با امضای تعریف شده‌ در آنها تطابق دارد مقدار دهی کنید.
لینک زیر این مفهوم را با مثال توضیح می‌دهد.

http://www.c-sharpcorner.com/blogs/what-problem-does-delegates-solve-in-c-sharp

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

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



___
#پست_مجدد این پست تا به حال بیش از ۱۲۰۰ بار مشاهده شده و به نظر میرسد برای خوانندگان جدید کانال جذاب باشد.
Forwarded from Software Philosophy
آیا شما هم از آن دسته از برنامه نویس/توسعه دهندگان هستید که ترجیح می‌دهند به تنهایی کار کنند. جواب هر چه باشد شکی در این نیست که هیچ پروژه بزرگی بدون وجود یک تیم خوب، به نتیجه نرسیده است.
انتخاب افراد مناسب بخشی از فرآیند تیم سازی است، اما قسمت مهم در هدایت یک تیم، به کارگیری هر فرد در جایگاه مناسب است. تعریف های مختلف و متنوعی از پارامتر های یک تیم موفق وجود دارد که یکی از جالب ترین این تعاریف مدلBelbin است. بلبین معتقد است در هر تیم موفق (گروهی که برای رسیدن به یک هدف مشترک فعالیت می کنند) مجموعه ای از نقش ها باید وجود داشته باشد.
لینک زیر این نقشها و خصوصیات هر یک را شرح می دهد. شما تا کنون کدامیک از این نقش ها را در گروه خود ایفا کرده اید؟

http://www.belbin.com/about/belbin-team-roles/

#مهدی_نظری

لینکدین
https://ir.linkedin.com/in/mohammad-mahdi-nazari-90097b58

توییتر
https://twitter.com/ShamehdiN

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


___
Forwarded from Iran .Net
آشنایی با Parallel LINQ

یکی از قابلیت هایی که در نسخه 3.5 دات نت فریم ورک افزوده شد قابلیت LINQ بود که برای راحت تر و روان تر کردن کار با داده ها طراحی شده بود و کم و بیش همه با آن آشنا هستند.

یکی از قابلیت های کمتر شناخته شده دات نت فریم ورک PLINQ یا Parallel LINQ می باشد که با سادگی به ما کمک می کند، پردازش های ما به طور موازی و همزمان صورت بگیرد و سرعت و بهره وری کد مان افزایش پیدا کند. برای بهره گیری از PLINQ تغییر چندانی در کد لازم نیست بدهیم و راه ورود به قلمرو PLINQ و اجرای موازی پردازش ها تنها و تنها استفاده از متد AsParallel می باشد. صدا زدن متد AsParallel بر روی داده (IEnumerable) به طور خودکار زمینه اجرای LINQ را به PLINQ تغییر خواهد داد.

همیشه اجرای موازی موجب افزایش کارایی نخواهد شد و حتی می تواند نتیجه ای برعکس داشته باشد. موتور اجرای PLINQ می تواند تا حدودی شرایط را ارزیابی کند و در صورت نیاز کد را به صورت Sequential و غیر موازی اجرا کند.
همچنین موتور PLINQ به طور پیشفرض به تعداد هسته های پردازنده Thread ایجاد خواهد کرد و هر Thread را بر روی یک هسته اجرا خواهد کرد. شما می توانید با استفاده از متد WithDegreeOfParallelism مشخص کنید و دستور دهید که به جای تنظیمات پیشفرض چه تعداد Thread باید ایجاد شود.

1. آشنایی مقدماتی با PLINQ:
http://www.codeproject.com/Articles/156980/Parallelism-in-NET-PLINQ

2. آشنایی با حنبه های فنی تر PLINQ:
https://msdn.microsoft.com/en-us/library/dd997425(v=vs.110).aspx

3. مثال هایی عملی و مباحث پیشرفته تر در کتاب آنلاین Albahari:
http://www.albahari.com/threading/part5.aspx#_PLINQ
#پست_مجدد این پست تا به حال بیش از ۱۳۰۰ بار مشاهده شده و به نظر میرسد برای خوانندگان جدید کانال جذاب باشد.
Forwarded from Software Philosophy
تجربه کاربری یا UX یکی از مفاهیمی است که تاثیر زیادی در محبوب شدن یک محصول دارد. مفهوم DX یا Developer Experience نیز مفهوم جدیدی است که تجربه یک برنامه‌نویس هنگام استفاده از یک پلتفرم یا فریم‌ورک را بررسی می‌کند. چرا یک پلتفرم یا فریم‌ورک محبوب می‌شود و دیگری نه؟ این سوالی‌ است که عوامل زیادی در پاسخ دادن به آن موثر هستند. اینکه یک برنامه نویس هنگام کار با آن پلتفرم چه تجربه‌ای احساس می‌کند یکی از عوامل مهم موفقیت یک پلتفرم است. در مقاله زیر مفهوم جدیدی به نام Dotability‌ معرفی شده که می‌توان به وسیله آن کتابخانه‌ها و فریم‌ورک‌های مختلف را از لحاظ DX بررسی کرد.

http://mehrandvd.me/2016/05/31/developer-experience-dotability/
http://mehrandvd.me/2016/05/31/developer-experience-dotability/

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

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


___
دیباگ کردن به سبک جغد‌ها

حتما تا به حال برنامه‌نویسی را دیده‌اید که ساعت‌ها «مانند جغد» به مانیتور زل زده و حتی به به کیبورد و ماوس دست نمی‌زند، ولی ادعا می‌کند در حال دیباگ کردن (پیدا کردن خطا) برنامه است!
در حقیقت او در حال انجام نوع خاصی از دیباگ به نام Owlly Debugging یا دیباگ کردن به سبک جغدها است.

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

http://mehrandvd.me/2016/08/30/owlly-debugging-debugging-like-owl/

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

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

___
Forwarded from Software Philosophy
اگر دوستانی دارید که نه تنها برنامه نویس هستند، بلکه اعتقاد دارند «مهندس نرم‌افزار» هم هستند، آنها را به کانال @SoftwarePhilosophy دعوت کنید و این پیغام را برای آنها Forward کنید.
#پست_مجدد این پست تا به حال بیش از ۱۰۰۰ بار مشاهده شده و به نظر میرسد برای خوانندگان جدید کانال جذاب باشد.
Forwarded from Software Philosophy
پروژه اوپن-سورس شدن محصولات مایکروسافت از سال ۲۰۱۴ شروع شده‌است. پروژه‌های مهمی مانند .Net Framework، .Net Core، کامپایلر C# و بسیاری دیگر در GitHub توسعه داده می‌شوند. یکی از چیزهای جذابی که در این میان بسیار آموزنده است، مستنداتی است که در این پروژه‌ها اوپن-سورس شده. مستنداتی مانند «جلسات طراحی»، «Code Review» از این قبیل هستند. مطالعه این مستندات از این جهت جالب است که مثلا می‌توانید بفهمید چرا در زبان C# تصمیم گرفته‌شده است قابلیت X‌ اینطوری باشد و در جلسات چه گذشته. همچنین برای مثال می‌توانید ببینید که جلساتی که برای طراحی C# 7.0 برگزار می‌شود چگونه پیش می‌رود و کدام فیچرها در چه وضعیتی قرار دارند.
لینک زیر در مورد پروژه‌های اوپن-سورس مایکروسافت صحبت کرده و لینک‌های خوبی به مستندات طراحی آنها معرفی کرده است.

http://www.c-sharpcorner.com/article/a-deeper-look-into-open-source-net-development

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

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



___
اگر از فریم ورک AngularJS استفاده میکنید، حتما این سوال برایتان پیش آمده که فرق service با factory در چیست؟ چه موقع باید از service استفاده کرد و چه موقع از factory؟ در بیشتر مقالات موجود که به مقایسه ی service و factory پرداخته شده است، بیشتر به شباهت های این دو API اشاره شده و کمتر تفاوت های آنها مطرح شده است.
بطور خلاصه، می توان گفت که هر دو API، singleton هستند و فقط یک instance از آنها زمان runtime ایجاد میشود.
Service در angular فقط یک متد مانند یک constructor function است که زمان runtime یک بار با new صدا زده می شود.
با اینکه Factory می تواند مانند یک Service عمل کند اما با این حال یک روش دیگر برای Service نیست بلکه می تواند بسیار قوی تر و منعطف تر از service عمل کند. در واقع factory یک design pattern است که در نهایت یک Object برمیگرداند.
مقاله زیر مقایسه کاملی بین این دو API ارائه کرده و چند مثال از انعطاف پذیری و قابلیت بیشتر Factory آورده است.

https://toddmotto.com/factory-versus-service

#مریم_داودی

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

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

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

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

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

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



___
Forwarded from Iran .Net
ارزیابی و مانیتورینگ کارکرد سیستم

یکی از تفاوت های فرهنگیِ توسعه نرم افزار به نسبت گذشته آن می باشد که ارزیابی و تست نرم افزار یک مسئولیت همگانی است و همه اعضای تیم نسبت به تولید با کیفیت مسئول هستند و دغدغه دارند. دیگر فرایند تست، فرایند مجزایی از توسعه نرم افزار نیست بلکه ارتباط تنگاتنگی با هم دارند. یکی از مواردی که برای ارزیابی تیم توسعه و محصولات آن ها بررسی می شود آن است که "آیا همه اعضای تیم نسبت به تست و صحت نرم افزار مسئول هستند؟"

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

هر سیستم در لایه ها و سطوح مختلفی می تواند دچار مشکل و آسیب باشد. ما باید آن ها را بشناسیم و بر ابزارهای لازم برای ارزیابی هر سطحی از سیستم مسلط و آشنا باشیم.

1. آیا زیرساخت (اجزا شبکه، سوییچ ها، روتر ها، فایروال ها، کارایی هارد دیسک و پردازنده و ....) سیستم را می توانید مانیتور کنید؟

2. آیا می توانید و خود را مسئول می دانید که با بهره گیری از Performance Profiler ها کارایی نرم افزار را ارزیابی کرده و گلوگاه ها را شناسایی کنید؟ مثلا با استفاده JetBrains dotTrace

3. آیا می توانید و خود را مسئول می دانید که میزان بهره گیری از حافظه را با استفاده از Memory Profiler ها ارزیابی کنید؟ مثلا با استفاده از JetBrains dotMemory

4. آیا برای ارزیابی مکانیک دقیق رسیدگی به هر رکوئست از Glimpse یا MiniProfiler استفاده می کنید؟

5. آیا با نحوه بررسی SQL Query Execution Plan ها آشنایی دارید؟ آیا می توانید کارایی SQL Server را با استفاده از SQL Profiler یا ابزارهای دیگر (Redgate Monitor) بررسی کنید؟

6. آیا سازمان به شما فرصت بهره گیری از این نرم افزار ها را می دهد و این ها را به الزام توسعه نرم افزار تبدیل کرده است؟

* آشنایی بیشتر با نرم افزارهای ارزیابی و مانیتورینگ سیستم ها:

https://www.infoq.com/articles/dotnet-performance-monitoring-optimization
خیلی وقت ها متدهایی نوشته می شود که تعداد زیادی پارامتر دارد ولی هنگام صدا زدن این متدها ممکن است لازم باشد چند پارامتر خاص آن پر شود و نه همه... اینجاست که مجبورید علاوه بر پارامترهای لازم، پارامترهای غیر لازم را نیز ذکر کرده و به ازای آنها مقدار null پاس دهید... البته اگر با امکانات معرفی شده در C# 4 آشنایی نداشته باشید.
از C# 4 به بعد می توانید از امکانات زیر استفاده کنید.
1. Optional Parameter: شما می توانید به یک پارامتر Default value بدهید و هنگام استفاده از متد در صورتی که نیاز به آن پارامتر ندارید، هیچ آرگومانی به ازای آن پارامتر ننوسید.
2. Nullable Parameter: شما می توانید با nullable کردن یک پارامتر، مقدار null را بعنوان default value به پارامتر اختصاص دهید.
3. Named Argument: شما می توانید هنگام اختصاص مقدار به پارامتر (مشخص کردن آرگومان)، نام پارامتر را نوشته و به این صورت نیازی به رعایت ترتیب پارامترها و ... نداشته باشید.
مقاله زیر توضیح کاملی از این امکانات به همراه مثالهای ساده ارائه کرده است.

http://codebetter.com/2011/01/11/c-in-depth-optional-parameters-and-named-arguments-2

#مریم_داودی

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

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

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

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

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

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

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



___
در زبان SQL، درک منطق اجرای یک کوئری برای خطایابی و نوشتن کد بهینه از اهمیت بالایی برخوردار است. شاید تا‌کنون برای شما هم پیش آمده است که در هنگام نوشتن یک کوئری، از اینکه کوئری بر خلاف انتظارتان عمل می کند دچار سردرگمی شده باشید. مثلا اینکه چرا با وجود اینکه‌alias ‌ها را درSELECT Clause تعریف کرده اید، درWHERE Clause ‌ نمی‌توانید از آنها استفاده کنید.
درSQL ، کوئری به ترتیبی که دستورات آن نوشته می‌شود اجرا نمی‌شود، بلکه به ترتیب زیر است:
۱) FROM clause
۲) WHERE clause
۳) GROUP BY clause
۴) HAVING clause
۵) SELECT clause
۶) ORDER BY clause
۷) TOP
در طراحی زبان SQL، مِلاکِ ترتیب اجرای دستورات کوئری، شبیه بودن به زبان انگلیسی بوده است. فرض کنید که به شما گفته می‌شود :"برو از قفسه سوم کتابخانه، کتاب قمارباز را بیاور!". در این مثال مهم‌ترین بخش محل است، پس شما اول به کتابخانه می‌روید (FROM)، بعد قفسه‌های دیگر را فیلتر می کنید و نگاهتان در قفسه سوم به دنبال کتاب مورد نظر می‌گردد(WHERE) ‌و تازه در این قسمت کتابی که می‌خواهید را بیرون می‌کشید‌‌‌(SELECT) و به شخصی که آن را درخواست کرده می دهید.
در مقاله زیر درباره‌ی Logical Query Processing بیشتر بخوانید.

http://sqlmag.com/sql-server/logical-query-processing-what-it-and-what-it-means-you

#زهره_مرادی

لینکدین:
https://ir.linkedin.com/in/zohre-moradi

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

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