Software Philosophy
3.46K subscribers
160 photos
41 videos
1.54K links
چکیده‌ای از مفاهیم به روز مهندسی نرم افزار برای مهندسین نرم‌افزار.
معماری نوین نرم‌افزار، تکنولوژی‌های برنامه نویسی جدید
Download Telegram
Forwarded from Software Philosophy
ضد الگوی «کد مرده» یا Dead Code، یک Anti Pattern رایج در شرکت‌هایی است که مدت نسبتا زیادی سیستم تولید می‌کنند. اگر شما این جمله‌ها را می‌شنوید احتمالا شما هم دچار این ضد الگو شده‌اید:
- این کد رو دو نفر قبلا نوشند که سه سال پیش رفتند و پارسال یه نفر دیگه تلاش کرد یاد بگیره و مستند بنویسه براش و اون هم رفته. البته فک نکنم الان اصلا از این کد استفاده بشه، ولی محض احتیاط بهتره پاک نشه!
این نوع کدها غالبا پیچیدگی سیستم را به شدت بالا می‌برند و تغییرات آتی سیستم را بسیار سخت می‌کنند.
بسیاری از این کدها به این علت به وجود می‌آیند که در زمان تولید کدهای در حد R&D وارد کد عملیاتی شده و به مدیریت آن در آینده فکر نشده.


https://sourcemaking.com/antipatterns/lava-flow

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


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


___
مفهوم «Lambda Expression» یکی از مفاهیم جذابی است که از دنیای Functional Programming وارد زبان‌های شی‌گرا شده‌است. در نسخه Java 8 این امکان به زبان جاوا هم اضافه شده‌است. عبارات لامبدا باعث می‌شوند برنامه نویسی به شدت لذت‌بخش‌تر و کم‌خطا تر شوند. همچنین خوانایی کد می‌تواند با استفاده از لامبدا بسیار بهتر شود. مقاله زیر که به توضیح چگونگی استفاده از لامبدا در زبان جاوا پرداخته است، نشان می‌دهد چگونه برنامه نویسی با این مفهوم لذت‌بخش‌تر شده است.

https://mehrandvd.me/2015/09/10/tasty-lambdas-in-java-8/

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

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



___
Forwarded from Software Philosophy
اندیشه طراحی یا «Design Thinking» یک مفهوم جدید در طراحی نرم‌افزار است که توسط IBM معرفی شده‌است. این روش به فرایند تولید نرم‌افزار به دید خلق یک سرویس نگاه می‌کند، سرویسی که قرار است به مشتریان ارائه شود تا نیاز واقعی آنها را برطرف کند. این روش با روش Agile متفاوت دارد ولی از ویژگی‌های آن استفاده می‌کند. به نظر می‌رسد این روش محبوبیت خیلی زیادی به دست آورد و مطالعه آن واقعا لذت‌بخش است.

https://www.ibm.com/design/thinking/

ویدئوی زیر این روش را به اختصار شرح می‌دهد:


https://bit.ly/1WzM4dQ


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


کانال تلگرام:
@SoftwarePhilosophy
Forwarded from Software Philosophy
همیشه هر چیز خوبی، می‌تواند بد استفاده شود و نتیجه عکس دهد. این قضیه در مورد تکنولوژی هم صادق است. مقاله زیر توضیح می‌دهد که چه عادت‌های اشتباهی هنگام کار با LINQ می‌تواند شما را به اشتباه بیندازد و باعث ایجاد کد بد شود.
یکی از خطرناک‌ترین ویژگی‌های LINQ این است که وقتی با آن کار می‌کنید احساس می‌کنید خیلی باهوشید که غالبا باعث می‌شود کد احمقانه و پیچیده‌ای با آن بنویسید. فهمیدن مفهوم Provider ها نیز مسئله مهمی است که باید با آن آشنا باشید.
مقاله زیر این نکات را شرح می‌دهد.

https://mehrandvd.me/2016/03/28/linq-the-bad-parts/

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


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


___
Forwarded from Software Philosophy
اگر دوستانی دارید که نه تنها برنامه نویس هستند، بلکه اعتقاد دارید «مهندس نرم‌افزار» هم هستند، آنها را به کانال @SoftwarePhilosophy دعوت کنید.
این پیغام را برای آنها Forward کنید.
Forwarded from Software Philosophy
یکی از مباحث مهم در Exception Handling‌ در زبان Java، استفاده درست از انواع Checked Excections و Unchecked Exceptions است. مطلب زیر هر کدام از این نوع Exception ها و کاربرد آنها را توضیح می‌دهد. سپس «مزایا» و «معایب» هر یک را شرح می‌دهد.
در این مقاله تاکید شده‌است که در نرم‌افزار خود حتما یک رویکرد واحد را انتخاب کنید و از آن پیروی کنید. چرا که انتخاب دو رویکرد همزمان غالبا موجود پیچیدگی بیشتر می‌شود.

https://tutorials.jenkov.com/java-exception-handling/checked-or-unchecked-exceptions.html

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

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



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

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

#مهدی_نظری

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

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

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


___
Forwarded from Software Philosophy
مفهوم Pattern Matchning یکی از مفاهیمی است که قدرت بسیار زیادی به زبان‌های Functional مانند Haskell داده است. این مفهوم را با Regex اشتباه نگیرید! این یک مفهوم زبان می‌باشد و ارتباط چندانی با Regex ندارد.
از آنجایی که مدتیست امکانات زبان‌های Functional بسیار مورد علاقه طراحان زبان‌های شی‌گرا مانند C# شده است بد نیست با این مفهوم آشنا شوید. پس از اضافه شده مفهوم Lambda Expressions در C# 3.0 امکان پیاده‌سازی بسیاری از مفاهیم پیچیده مهیا شده است.
جالب است بدانید که Pattern Matching یکی از جنجال‌برانگیز‌ترین امکاناتی است که قرار است به C# 7.0 اضافه شود.

لینک زیر به طور مختصر ایده را در زبان سی‌شارپ توضیح می‌دهد. همچنین لینک Specification دقیق که توسط طراحان زبان در حال نگارش است را ارائه داده است. به این ترتیب می‌توانید ببینید مثلا همین امروز پیش‌نویس این استاندارد در چه وضعیتی است!

https://www.infoq.com/news/2014/08/Pattern-Matching

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

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


___
طراحی تایم‌لاین در برنامه‌های وب یکی از روش‌های جذاب نمایش اتفاقات زمانی است. برای مدتی فیسبوک نیز از این مفهوم برای نمایش صفحات استفاده می‌کرد. مقاله زیر نحوه پیاده سازی مفهوم تایم‌لاین را با استفاده از CSS و JavaScript را آموزش داده است. شیوه آموزشی که در این مقاله به کار برده شده بسیار جالب است و کاملا به صورت قدم به قدم امکانات را به کنترل اضافه کرده تا فهم برنامه‌نویسی آن ساده شود.

https://webdesign.tutsplus.com/tutorials/building-a-vertical-timeline-with-css-and-a-touch-of-javascript--cms-26528

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

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



___
استفاده از Batch Insert و Batch Update در عملیات دیتابیسی نقش مهمی در Performance عملیات با تعداد سطر بالا دارد. هنگام استفاده از EntityFramework به صورت پیش‌فرض از این عملیات پشتیبانی نمی‌شود. پروژه EntityFramework.Extended یکی از پروژه‌هایی است که این قابلیت را به EF اضافه می‌کند. این پروژه قابلیت‌های زیر را به EF اضافه می‌کند:

- Batch Update and Delete
- Future Queries
- Query Result Cache
- Audit Log

https://github.com/loresoft/EntityFramework.Extended

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

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



___
Forwarded from Software Philosophy
ضد الگو یا Anti Pattern «روح‌های سرگردان» یکی از مواردی است که باعث دردسر در نرم‌افزارها می‌شود. این ضد الگو وقتی اتفاق می‌افتد که در کد، کلاس‌های بی‌موردی که تقریبا هیچ مسئولیتی ندارند به وجود باید. به عبارتی بیش از حد مورد نیاز همه چیز abstract شده است. یکی شایع‌ترین علت‌های بروز این ضد الگو افرادی در پروژه هستند که دانش فرایندی بالا و دانش شی‌گرایی کم دارند. معمولا افرادی که یا در شی‌گرایی و Object Oriented جدید هستند و این دنیا برایشان خیلی جذاب است به شدت عاشق ساخت «کلاس‌های روح سرگردان» می‌شوند! نبود نقش تخصصی معمار نرم‌افزار در تیم نیز یکی دیگر از دلایل این ضد الگو است.

https://sourcemaking.com/antipatterns/poltergeists

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

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


___
Forwarded from Software Philosophy
همیشه مبحث DateTime در زبان‌های برنامه‌نویسی چالش برانگیز بوده‌است. مخصوصا اگر پای Calendar های مختلف و TimeZone های متفاوت در میان باشد. یکی از کتابخانه‌های بسیار محبوب در Java، کتابخانه JodaTime می‌باشد که این مفاهیم را کامل پوشش داده‌است. در Java 8 مفهوم DataTime بطور کامل بازنویسی شده‌است است و طبق JSR-310 به JDK اضافه شده‌است. یکی از سوالاتی که برای خیلی‌ها پیش آمده بود این بود که اگر JodaTime خوب و موفق بود، چرا خودش به JDK اضافه نشده. در پست زیر Stephen Colebourne که برنامه نویس اصلی هر دو پروژه بوده توضیح داده علت این طراحی مجدد چه بوده است.

https://blog.joda.org/2009/11/why-jsr-310-isn-joda-time_4941.html

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

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



___
Forwarded from Iran .Net
همانطور که مطلع هستید نسخه نهایی SQL Server 2016 منتشر شده است و در صورتی که در برنامه Visual Studio Dev Essentials عضو باشید می توانید به طور رایگان نسخه ای معادل با نسخه Enterprise را دریافت کنید. به این نسخه Developer Edition گفته می شود.
یکی از قابلیت های جدید و جذاب این نسخه Temporal Table می باشد.
این قابلیت کمک می کند که تمامی تغییراتی که در داده های یک جدول حادث می شود، در جدولی جداگانه به نام History Table ذخیره شود. در این جدول همچنین زمانِ تغییرات و مدت زمانی که یک داده Valid بوده است به طور خودکار ضبط می شوند.
از این ویژگی می توانید به جهت Auditing و مانیتورینگ تغییرات استفاده کنید و یا به مدیران کمک کنیم که با تحلیل نحوه تغییرات داده ها در طول زمان تصمیم گیری های بهتری داشته باشند.

1. آشنایی با Temporal Tables
https://msdn.microsoft.com/en-us/library/dn935015.aspx
2. نگاهی دقیق تر و آشنایی با محدودیت ها
https://www.mssqltips.com/sqlservertip/3680/introduction-to-sql-server-2016-temporal-tables/

این ویژگی از لحاظ ماهوی به قابلیت Change Data Tracking یا CDC اشتراکاتی دارد. این قابلیت هم در پست های قبلی معرفی شده بود.

@irandotnet
اگر با زبان Python کار می‌کنید، حتما اسم فریم‌ورک‌های Django, Flask و Pyramid را شنیده‌اید و با آنها کار کرده‌اید. فریم‌ورک Django معروف‌ترین این فریم‌ورک‌هاست و معمولا در پروژه‌های بزرگ از آن استفاده می‌شود. فریم‌ورک Pyramid بسیار منعطف طراحی شده و از می‌توان از آن در پروژه‌های کوچک به راحتی استفاده کرد. از طرفی از آن در پروژه‌های بزرگی مانند Dropbox استفاده شده. فریم‌ورک Flask یک فریم‌ورک خوش‌دست است که کمک می‌کند بتوان برنامه‌های کوچک را با آن بسیار سریع ساخت.
مقاله زیر این سه فریم‌ورک را با جزئیات بیشتری مقایسه کرده‌است.

https://www.airpair.com/python/posts/django-flask-pyramid

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

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



___
Forwarded from Software Philosophy
ضد الگو یا Anti Pattern «چکش طلایی» موردی است که در بسیاری از راه‌حل‌ها دیده می‌شود. این ضد الگو از این ایده آمده است: «من یک چکش دارم، پس همه چیز برای من مثل یک میخ است»
وقتی از یک ابزار استفاده می‌کنیم به آن عادت می‌کنیم و سعی می‌کنیم از آن به بعد همه مسائل را با آن حل کنیم. مثلا این ایده که همه کارها را باید با دیتابیس انجام داد، یا هر پروژه‌ای را باید با این زبان خاص نوشت. یکی از دلایل این ضد الگو موفقیت‌های قبلی در استفاده از یک تکنولوژی است. البته این ضد الگو استثناهایی هم دارد. برای مثال ممکن است شرکت برنامه‌ریزی بلند مدتی داشته باشد و در این برنامه‌ریزی یک فریم‌ورک نرم‌افزاری با یک معماری و تکنولوژی خاص خلق کرده باشد. در این صورت این این فریم‌ورک طوری طراحی شده که بتواند یک طیف خاص از مسائل را با هزینه کمتر حل کند.
لینک زیر این ضد الگو را با جزئیات بیشتری توضیح داده‌است.

https://sourcemaking.com/antipatterns/golden-hammer

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

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



___
نوشتن برنامه‌های REPL یا Read-Evaluate-Print-Loop در زبان‌های برنامه‌نویسی کار ساده‌ای نیست. برای نوشتن این برنامه‌ها نیاز به کتابخانه‌ای است که بتواند یک string حاوی قطعه کدی از آن زبان (مثلا Java یا C#) را ترجمه و اجرا کند. معمولا در هر زبان برنامه نویسی کتابخانه‌هایی وجود دارد که کمک می‌کنند بتوان رشته‌های حاوی یک برنامه از همان زبان را ترجمه و اجرا کرد.
مقاله زیر نشان می‌دهد که چطور می‌توان با استفاده از کامپایلر خود زبان C#، رشته‌های حاوی کدهای سی‌شارپ یا csx را کامپایل و اجرا کرد و در نهایت یک برنامه REPL را فقط با چند خط نوشت.

https://blogs.msdn.microsoft.com/cdndevs/2015/12/01/adding-c-scripting-to-your-development-arsenal-part-1/

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

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



___
Forwarded from Software Philosophy
ساخت انیمیشن با JavaScript یکی از کارهای جذاب این روزهای دنیای وب است. بازی سه بعدی زیر که در وب اجرا می‌شود توسط کتابخانه ThreeJs نوشته شده‌است. کمی بازی کردن با آن به شما نشان می‌دهد که قدرت این کتابخانه چقدر بالاست. جالبی این بازی این است که نه تنها تمام سورس آن روی اینترنت است بلکه نویسنده آن نحوه نوشتن این بازی را کاملا در لینک زیر توضیح داده و شما با خواندن آن به راحتی می‌توانید مجددا این بازی را خودتان بنویسید.

لینک خود بازی:

https://tympanus.net/Tutorials/TheAviator/

لینک توضیح سورس:

https://tympanus.net/codrops/2016/04/26/the-aviator-animating-basic-3d-scene-threejs/


https://tympanus.net/Tutorials/TheAviator/

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

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



___
نسل جدید فریم‌ورک‌های JavaScript برای ساخت برنامه‌های SPA در راه هستند. فریم‌ورک‌های Angular 2.0، React و Aurelia فریم‌ورک‌های نسل بعدی هستند که عمدتا بر پایه ES6 نوشته‌شده‌اند. فریم‌ورک Angular 2.0 نسخه جدید این فریم‌ورک محبوب است هنوز قبل از ریلیز بیشترین طرفدار را دارد. این فریم‌ورک توسط گوگل و مایکروسافت پشتیبانی می‌شود. فریم‌ورک React که توسط فیسبوک پشتیبانی می‌شود بسیار قوی است ولی ذاتا هدف آن انجام تمام وظایف یک SPA نیست و بیشتر روی HTML Rendering تمرکز دارد.
فریم‌ورک Aurelia نسخه بعدی Durandal است که قبلا رقیب کمتر شناخته شده Angular بود. خالق این فریم‌ورک قبلا در تیم Angular 2.0 بود که بعدها به دلایلی تصمیم گرفت از این تیم جدا شود و فریم ورک رویای خود را خلق کند. یکی از مزایای این فریم‌ورک Syntax بسیار ساده و روان آن است که تقریبا در هر مقایسه‌ای به آن اشاره شده‌است.
مقاله زیر این فریم‌ورک‌ها را با جزئیات بیشتری با هم مقایسه کرده‌است.

https://blog.ae.be/comparing-angular-aurelia-react-js-framework/

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

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



___
اگر دوستانی دارید که نه تنها برنامه نویس هستند، بلکه اعتقاد دارند «مهندس نرم‌افزار» هم هستند، آنها را به کانال @SoftwarePhilosophy دعوت کنید و این پیغام را برای آنها Forward کنید.
Forwarded from Software Philosophy
تا امروز فیدبک‌های خیلی خوبی از شما دوستان گرفتیم. بر اساس فیدبک‌های شما تصمیم گرفتیم که پست‌های این کانال را در سه دسته بندی پست کنیم:
۱) مطالب مهندسی و معماری نرم‌افزار و مدیریت تیم‌های نرم‌افزاری
۲) مطالب مربوط به آخرین تکنولوژی‌ها
۳) مطالب مربوط به تکنولوژی‌های مرسوم که در شرکت‌ها استفاده می‌شود.

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

لطفا اگر نظر، پیشنهاد، انتقاد و یا هرگونه فیدبکی نسبت به این کانال دارید، در توئیتر بنویسید. مطمئن باشید ما آنها را می‌خوانیم. (در توئیتر https://twitter.com/mehrandvd را منشن کنید و از هشتگ #SoftwarePhilosophy استفاده کنید)
مورد توافق‌ترین تعریفی که در ارتباط با مدیریت محصول وجود دارد، تعریفی بسیار ساده و قابل درک است: «ارائه محصولی درست به شیوه ای درست به مشتری». اما مدیریت محصول کماکان یکی از سخترین شرح وظایف‌هایی است که می‌توان در هر سازمان تصور کرد. این ابهام در چیستی و چگونگی مدیریت محصول در شرکت های نرم افزاری که تجربه‌ای درست در داشتن مدیر محصول ندارند بسیار بیشتر است.

لینک زیر می تواند یک شروع خوب برای آشنا شدن با این مفهوم باشد.

https://medium.com/@joshelman/a-product-managers-job-63c09a43d0ec#.i6pcfk9wa


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

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

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


___