Software Philosophy
3.46K subscribers
160 photos
41 videos
1.54K links
چکیده‌ای از مفاهیم به روز مهندسی نرم افزار برای مهندسین نرم‌افزار.
معماری نوین نرم‌افزار، تکنولوژی‌های برنامه نویسی جدید
Download Telegram
Forwarded from Software Philosophy
معماری‌های نوین نرم‌افزار برای حل مسائلی به وجود آمده‌اند که قبلا وجود نداشتند. برای مثال شبکه‌های اجتماعی که در آن میلیون‌ها لایک و کامنت در ثانیه را هندل می‌کنند و همیشه با بیلیون‌ها رکورد سر و کار دارند مسائلی است که جدید هستند و با معماری و ابزارهای قبل قابل حل نیستند. دیتابیس‌های 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
یکی از مباحثی که همیشه در تشکیل تیم‌های نرم‌افزاری مطرح است، انتخاب زبان برنامه‌نویسی و یا تکنولوژی‌های مورد استفاده است. مقایسه محصولات موفق و نا موفق نشان می‌دهد هیچکدام از آنها صرفا با یک تکنولوژی و یا یک زبان خاص نوشته نشده‌اند. برای مثال سیستم‌های موفق زیادی وجود دارند که با Java و یا C# نوشته شده‌اند. همچنین سیستم‌های بی کیفیت زیادی نیز وجود دارد که با Java و یا C# نوشته شده‌اند. این حقیقت نشان می‌دهد دلیل موفقیت یا شکست سیستم‌ها نمی‌تواند زبان برنامه‌نویسی باشد. مقاله زیر توضیح می‌دهد که چطور طرز فکر برنامه‌نویس‌ها موفقیت و یا شکست یک سیستم را رقم می‌زند.

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

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


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

___
با شدت گرفتن روند تغییرات در درخواست‌های مشتریان، نیازمندی‌های پروژه‌ها و مسائل مربوط به پشتیبانی محصولات در دهه‌های اخیر، بسیاری از شرکت ها پی بردند که هماهنگ شدن با بازار با استفاده از فرآیند های تجاری قدیمی امکان پذیر نیست. لذا بسیاری از توسعه دهندگان و مدیران محصولات به متدلوژی‌های جدید مانند Agile روی آوردند. در حال حاضر این متدلوژی با وجود نواقصی که به آن وارد است بیشترین طرفدار و بازدهی را به خصوص در میان شرکت های کامپیوتری داشته است.
اما لزوما استفاده از یک متدلوژی، روش یا ابزار موفق، دلیل بر موفق شدن ما نیست، لذا آشنایی با متدلوژی ها و رویکردهایی مانند Lean، Scrum یا Kanban و انتخاب بهترین روش بین آن ها با توجه به نوع محصول، مشتری و شرایط شرکتی که در آن مشغول به فعالیت هستیم یک ضرورت است.
مطالعه لینک زیر می تواند در انتخاب هوشمندانه‌تر این متدولوژی ها بسیار کمک کننده باشد.

https://realtimeboard.com/blog/how-to-choose-between-agile-lean-scrum-and-kanban-which-methodology-is-the-best/#.V18eTlUrLDe

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

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

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



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

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

لطفا اگر نظر، پیشنهاد، انتقاد و یا هرگونه فیدبکی نسبت به این کانال دارید، در توئیتر بنویسید. مطمئن باشید ما آنها را می‌خوانیم. (در توئیتر https://twitter.com/mehrandvd را منشن کنید و از هشتگ #SoftwarePhilosophy استفاده کنید)
Forwarded from Software Philosophy
در مورد WebApi مطالب زیادی وجود دارد. ولی پست زیر با جزئیات خیلی زیادی کل چرخه پیغام‌های HTTP را در WebApi Pipeline به طور کاملا عملی بررسی کرده‌است. خواندن این مقاله می‌تواند خیلی به درک مفهوم Pipeline در این معماری‌ها کمک کند. نکته خوب این مقاله این است که در آن OWIN که یک معماری بسیار عالی برای استفاده و پیاده سازی WebApi است توضیح داده شده‌است. معماری OWIN کمک می‌کند بتوانید WebApi را مستقل از جایی که قرار است در آن Host شود طراحی کنید و برای مثال بتوانید آن را حتی در یک برنامه Console Application استفاده کنید.

https://www.c-sharpcorner.com/article/webapi-pipeline-revealed-a-true-practical-approach/

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

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



___
Forwarded from Iran .Net
با گسترش روز افزون استفاده از اپلیکشن های موبایل و یا وب اپلیکشن های تک صفحه ای مواجه هستیم. در این نوع از نرم افزار ها طبیعتا خبری از ارسال کوکی و Session نخواهد بود. پس چطور این نرم افزار ها در سمت سرور مورد تصدیق هویت و دسترسی قرار می گیرند!
در این جاست که با مفهوم Token و علی الخصوص JWT Token ها رو به رو خواهیم شد. این Token ها که جایگزین کوکی ها می شوند، مزایایی را برای ما به همراه خواهند آورد که با کوکی ها مقدور نبود. مزایایی مانند مقیاس پذیر شدن نرم افزار سمت سرور، عدم نیاز به ذخیره سازی Session های کاربران در حافظه یا پایگاه داده، Stateless بودن و سرعت بیشتر، استفاده از Claim ها و ....

در مقاله زیر به زبانی شیوا Token ها و تفاوت شان با کوکی ها توضیح داده شده است.

https://auth0.com/blog/2016/05/31/cookies-vs-tokens-definitive-guide
پروژه اوپن-سورس شدن محصولات مایکروسافت از سال ۲۰۱۴ شروع شده‌است. پروژه‌های مهمی مانند .Net Framework، .Net Core، کامپایلر C# و بسیاری دیگر در GitHub توسعه داده می‌شوند. یکی از چیزهای جذابی که در این میان بسیار آموزنده است، مستنداتی است که در این پروژه‌ها اوپن-سورس شده. مستنداتی مانند «جلسات طراحی»، «Code Review» از این قبیل هستند. مطالعه این مستندات از این جهت جالب است که مثلا می‌توانید بفهمید چرا در زبان C# تصمیم گرفته‌شده است قابلیت X‌ اینطوری باشد و در جلسات چه گذشته. همچنین برای مثال می‌توانید ببینید که جلساتی که برای طراحی C# 7.0 برگزار می‌شود چگونه پیش می‌رود و کدام فیچرها در چه وضعیتی قرار دارند.
لینک زیر در مورد پروژه‌های اوپن-سورس مایکروسافت صحبت کرده و لینک‌های خوبی به مستندات طراحی آنها معرفی کرده است.

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

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

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



___
Forwarded from Software Philosophy
یکی دیگر از موارد مهم در طراحی 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 Software Philosophy
به نظر می‌رسد که تکنولوژی آنقدرها هم که به نظر می‌رسد به موفقیت پروژه‌ها کمک نمی‌کند! برای مثال در کتاب «Peopleware: Productive Projects and Teams» عامل مهمتری را برای موفقیت یک پروژه معرفی کرده‌است: «اعتماد افراد به یکدیگر». در تیمی که افراد به یکدیگر اعتماد نداشته باشند ریسک خیلی بالایی متوجه پروژه می‌شود و آینده آن به شدت در خطر خواهد بود.

Better technology seemed unlikely to be much help. If a group of people who had to work together didn’t trust each other.

از کتاب
Peopleware: Productive Projects and Teams
نوشته:
Tom DeMarco & Timothy Lister


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

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



___
Forwarded from Software Philosophy
موقعیت‌های زیر را در نظر بگیرید:
۱) راننده‌ای که اگر به موقع به فرودگاه نرسد، پرواز را از دست می‌دهد.
۲) عابر پیاده‌ای که عجله دارد.
۳) خانم خانه‌داری که مهمان‌ها یک ساعت زودتر آمده‌اند و گرسنه هستند.
احتمالا هر یک از ما حالت مشابهی را تجربه کردیم که در آن یک محدودیت زمانی وجود دارد و ناخواسته قوانینی را که رعایت می‌کردیم، دیگر رعایت نمی‌کنیم.
۱) به احتمال زیاد دیگر به تابلو ورود ممنوع و یا حق تقدیم توجهی نمی‌کند .
۲) به چراغ قرمز توجه نمی‌کند و از پل عابر پیاده نیز استفاده نمی‌کند .
۳) از کیفیت غذا کاسته شده است.
برنامه‌نویس نیز از این قاعده مستثنی نیست. اگر تحت فشار زمان‌بندی پروژه باشد سریع‌تر کار میکند ولی به خاطر اینکه سر وقت بتواند پروژه را تحویل دهد قوانینی را نادیده می‌گیرد و در نتیجه از کیفیت کد کاسته می‌شود.

People under time pressure don’t work better—they just work
faster.

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

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

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



___
Forwarded from Software Philosophy
جملات زیر غالبا به مقدار زیاد شنیده می‌شوند:
• من صبح زود و قبل از اینکه کسی دیگری در شرکت باشد خیلی بهتر کار می‌کنم.
• در یک روز تعطیل می‌توانم به اندازه ۲ یا ۳ روز کاری،‌ کار انجام بدهم.
جملاتی از قبیل جملات بالا نشانه این هستند که محیط کاری مناسبی وجود ندارد. و مدیران با اتخاذ تصمیمات مناسب می‌توانند آرامش را به محیط کار برگردانند. ولی متاسفانه هیچ کس کاری انجام نمی‌دهد.

Staying late or arriving early or staying home to work in peace is a damning indictment of the office environment.
The amazing thing is not that it’s so often impossible to work in the workplace; the amazing thing is that everyone
knows it and nobody ever does anything about it.

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

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

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



___
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



___