Software Philosophy
3.46K subscribers
160 photos
41 videos
1.54K links
چکیده‌ای از مفاهیم به روز مهندسی نرم افزار برای مهندسین نرم‌افزار.
معماری نوین نرم‌افزار، تکنولوژی‌های برنامه نویسی جدید
Download Telegram
اگر دوستانی دارید که نه تنها برنامه نویس هستند، بلکه اعتقاد دارند «مهندس نرم‌افزار» هم هستند، آنها را به کانال @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


___
تجربه کاربری یا UX یکی از مفاهیمی است که تاثیر زیادی در محبوب شدن یک محصول دارد. مفهوم DX یا Developer Experience نیز مفهوم جدیدی است که تجربه یک برنامه‌نویس هنگام استفاده از یک پلتفرم یا فریم‌ورک را بررسی می‌کند. چرا یک پلتفرم یا فریم‌ورک محبوب می‌شود و دیگری نه؟ این سوالی‌ است که عوامل زیادی در پاسخ دادن به آن موثر هستند. اینکه یک برنامه نویس هنگام کار با آن پلتفرم چه تجربه‌ای احساس می‌کند یکی از عوامل مهم موفقیت یک پلتفرم است. در مقاله زیر مفهوم جدیدی به نام Dotability‌ معرفی شده که می‌توان به وسیله آن کتابخانه‌ها و فریم‌ورک‌های مختلف را از لحاظ DX بررسی کرد.

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

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

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


___
نامگذاری در برنامه‌نویسی شاید یکی از مهمترین کارهایی باشد که یک برنامه‌نویس انجام می‌دهد. یک برنامه‌نویس با نامگذاری متغییر‌ها، کلاس‌ها، فایل‌ها و ... در حقیقت مفاهیم جدید خلق می‌کند که در آینده برنامه‌نویسان دیگر معنی آن را از روی «نام» آنها حدس خواهند زد!
فصل زیر از کتاب Framework Design Guidlines (که به FDG معروف است) به طور اختصاصی استانداردهای نامگذاری را که در طراحی .Net Framework استفاده شده‌است را شرح می‌دهد. این کتاب برای ساخت تمامی سیستم‌ها در مایکروسافت به عنوان یک مرجع استفاده می‌شود. به همین دلیل هم در سایت msdn به صورت رایگان و قابل دسترس برای همه وجود دارد و هم کتاب چاپی آن وجود دارد که بسیار محبوب است.

https://msdn.microsoft.com/en-us/library/ms229002%28v=vs.110%29.aspx

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

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


___
امکاناتی که در Java 8 اضافه شده بسیار جذاب و دوست داشتنی هستند. عمده این امکانات حول محور مفهوم Lambda Expression می‌چرخند که باعث می‌شوند برنامه‌نویسی با استفاده از مفاهیم Functional Programming بسیار لذت‌بخش‌تر شود. سایت زیر یک Cheat Sheet خیلی مختصر و مفید از مثال‌هایی است که می‌توانید در نسخه جدید جاوا از آنها استفاده کنید.

https://www.java8.org/

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

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


___
خواندن لاگ‌ها و فهمیدن آنها معمولا کار سخت و زمان‌بری است،‌ مخصوصا اگر این لاگ مربوط به فرایند بیلد یک سیستم در فرایند CI باشد. اخیرا Kirill Osenkov (یکی از برنامه‌نویسان کلیدی تیم دات‌نت) یک برنامه برای Visualization لاگ‌های MSBuild منتشر کرده‌است که خواندن این لاگ‌ها را بسیار راحت می‌کند. این برنامه لاگ‌ها را به صورت درختی نمایش‌ می‌دهد.

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

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

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


___
Forwarded from Iran .Net
روش Partitioned Table جهت افزایش کارایی SQL Server

پایگاه داده SQL Server روش های متعددی را به جهت Scale-Up کردن در اختیار ما قرار می دهد. یکی از این روش ها که برای بالابردن بهره وری و سرعت ذخیره و بازیابی داده ها استفاده می شود، استفاده از جداول خاصی به نام Partitioned Table ها می باشد. پیش از توضیح مطلب لازم به ذکر است که اساس این روش بر این فرضیه استوار است که یکی از مهمترین گلوگاه های کاراییِ پایگاه داده هارددیسک و مسائل مربوط به I/O می باشد. استفاده از این روش برای جداولی با تراکنش های بسیار بالا و با حجمی بیشتر از 50 گیگابایت توصیه می شود.

اساس این روش بر این استوار است که داده های یک جدول به جای قرار گرفتن در یک فایل، در چندین فایل پراکنده می شود. مثلا می توانیم داده ها را با توجه به ماه های سال تقسیم بندی کنیم و به ازای هر ماه یک Partition ایجاد کنیم. در نتیجه به جای تحمیل بار سیستم به یک فایل بزرگ و البته کند، ما چندین فایل با سایز های بسیار کوچک تر مواجه خواهیم بود.

این موجب خواهد شد که سرعت I/O افزایش پیدا کند، داده های مربوط به Indexing کوچک تر شده جستجو سریع تر خواهد شد. همچنین چون فایل های هر Partition جداست، می توانیم هر Partition در دیسکی مجزا قرار دهیم.

لازم به ذکر است که این جداسازی در سطح Database Engine انجام می گیرد و ما در دستورات T-SQL فقط و فقط با یک جدولِ کلی کار خواهیم کرد. این مسئولیت SQL Server است که داده ها را با توجه به Partiton شان پیدا کرده و یا ذخیره می کند.
به همین جهت می توانیم با Entity Framework هم از جداول Partitioned استفاده کنیم، چون این جداسازی از لایه Application پنهان می باشد.

* این تکنیک در شرایطی بهتر است استفاده شود که کوئری های ما به گونه ای نوشته شده اند که فقط لازم است داده ها از یک یا تعداد کمی پارتیشن خوانده شوند. مثلا شرکتی را در نظر بگیرید که هر ماه تعداد زیادی تراکنش داشته و در هر ماه گزارش گیری و تسویه مالیِ سنگینی را بر روی داده های همان ماه انجام می دهد. در این صورت با گزاردن فایل های هر ماه بر روی یک Partiton جدا به سرعت بسیار بالایی دست پیدا خواهیم کرد.

https://www.mssqltips.com/sql-server-tip-category/65/partitioning/

https://www.brentozar.com/archive/2012/03/how-decide-if-should-use-table-partitioning/

ویزارد:
https://www.mssqltips.com/sqlservertip/2856/sql-server-partition-wizard/

@irandotnet
نحوه استفاده از الگوریتم‌های Hash در .net core نسبت به .net تفاوت‌های محسوسی کرده‌است. پیاده‌سازی و API مربوط به عملیات امنیتی در .net core مجددا طراحی شده‌اند. مقاله زیر به آزمایش و آموزش استفاده از این الگوریتم‌ها پرداخته است. جالب است که این آزمایش‌ها و آموزش‌ها روی Ubuntu انجام شده‌اند.

https://www.c-sharpcorner.com/article/hashing-passwords-in-net-core-with-tips

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

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


___
«شما می توانید عناوبن را خرید و فروش کنید، در یک دوره کوتاه مدت شرکت کنید و یک واژه به عنوان شغلی خود اضافه کنید. اما نمی توانید تجربه را بخرید. تنها می توانید آن را بیاموزید». این جملات بخشی از بلاگ “Agile is Dead” است که در سال 2014 توسط یکی از تئوریسین هایAgile نوشته است. خواندن این مطلب هم برای عاشقان این متد و هم برای دیگر دوستان خالی از لطف نیست.

https://pragdave.me/blog/2014/03/04/time-to-kill-agile

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

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

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



___
اگر تا به حال با ASP.NET Core RC1 کار می‌کردید و الان می‌خواهید با نسخه جدید یعنی RC2 کار کنید نیاز دارید به نسخه جدید مهاجرت کنید. مهاجرت به نسخه جدید معمولا از اینکه آن را از ابتدا نصب کنید سخت‌تر است. لینک زیر به صورت قدم به قدم مراحل مهاجرت به نسخه جدید و شروع توسعه سیستم با آن را توضیح داده‌است.

https://ievangelist.github.io/blog/migrating-to-rc2

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

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



___
Forwarded from Iran .Net
در مورد فرهنگ سازمانی، توسعه چابک و با کیفیت، ایجاد کشش های قوی بین تیم توسعه، سازمان و مشتری حرف های خوب و قشنگی می شود زد و با آن ها شعار داد. ما هم که مملکت شاعر مسلک و شعار زده ای هستیم و مستعد!

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

اینکه چگونه چابک شویم، چگونه محیط کاری فراهم کنیم تا رضایت حداکثری کارکنان مان را جذب کنیم و بتوانیم با ایجاد حب و علاقه در کارکنان، فرهنگی را به وجود بیاوریم که همه سازمان به گونه ای یکپارچه خود را بپندارد و اهداف سازمان همان اهداف نفرات شود، کار دشواری است. مایکروسافت از معدود شرکت هایی است که چابکی یا Agility در سطح Enterprise پیاده سازی کرده است و معتقد است برای دستیابی به این اهداف، یکی از ضروریات معماری داخلی ساختمان و اجزا و امکانات موجود در محیط می باشد.
در ساختمان های 16 و 17 مقر Redmond که تیم های Cloud و Enterprise مایکروسافت قرار گرفته اند، معماری به غایت مدرنی به کار گرفته شده که می توانید تصاویر و توضیحات و چرایی ها را در مطلب زیر ببینید.

دقت کنید که در محیط کار مدرن مایکروسافت، یکی از اهداف سرعت در گردش اطلاعات و همکاری حداکثری می باشد. به همین خاطر محیط کار آن ها Office Free یا بدون اتاق می باشد و تیم های مختلف در محیط های بزرگی به نام "همسایگی و Neigboorhoods" در کنار هم قرار گرفته اند. همچنین مدیران و کارکنان تفاوتی در امکانات و فاصله فیزیکیِ محلِ کارشان با سایرین ندارند و همه کنار هم کار می کنند.

https://news.microsoft.com/stories/b16/
Forwarded from Software Philosophy
شرکت اوراکل اعلام کرد زمان ارائه Java 9 تا سال ۲۰۱۷ به تعویق انداخته شده‌است. علت این تصمیم پروژه Jigsaw اعلام شده‌است. هدف پروژه Jigsaw ماژولار کردن و شکستن JRE به Interoperable Components است. به این ترتیب با انجام این پروژه هر برنامه می‌تواند JRE شخصی‌سازی شده‌تری داشته باشد که در نتیجه می‌توان برنامه‌های جاوا را به راحتی به قطعات کوچک محساباتی Scale‌ کرد که منجر به بهبود سرعت و امنیت می‌شود. در این زمینه Mark Reinhold‌ معمار ارشد پلتفرم جاوا در شرکت اوراکل گفته است که برنامه‌نویسان علاقه بسیار زیادی به این رویکرد از طریق فیدبک‌ها ارائه داده‌اند.

https://blog.takipi.com/jigsaw-delays-push-java-9-launch-date-to-2017/

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

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



___
Forwarded from Software Philosophy
ضد الگوی ‌Blind Developer یا «برنامه نویس کور» یک ضد الگوی شایع در تیم‌های نرم‌افزاری است که معمولا از زبان معمار نرم‌افزار با این جمله تشریح می‌شود: «هیچوقت به برنامه‌نویس اجازه ندهید با مشتری صحبت کند». این مفهوم به این دلیل به وجود آمده که معمولا افراد غیر برنامه‌نویس بهتر نیازمندی کاربر را درک می‌کنند. البته این واقعیت اغلب صادق است ولی نکته‌ای که به آن توجه نشده‌است تغییرات است. تغییرات در نیازمندی باعث افزایش هزینه توسعه می‌شود. در جریان نبودن برنامه‌نویسان از بیزنس معمولا باعث می‌شود این تغییرات هزینه بسیار بیشتری داشته باشد. همچنین باعث می‌شود بسیاری از ریسک‌ها خیلی دیر و حتی هنگام تحویل محصول نمایان شوند.

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

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

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

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



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

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

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

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



___
Forwarded from Software Philosophy
همیشه یکی از مهمترین کارهایی که باید توسط یک معمار نرم‌افزار انجام شود و معمولا هم اصلا انجام نمی‌شود(!) فکر کردن به نحوه انتقال به نسخه جدید است. در این فرایند معمولا با کلماتی مانند 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



___
ساخت یک لیست Generic متشکل از Anonymous Type، آیا تا به حال به این فکر کرده‌اید که چگونه می‌تواند چنین کاری انجام داد؟ البته این کار اگر انجام شود احتمالا نشانه یک طراحی اشتباه است. ولی جالب است که این سوال در StackOverflow‌ مطرح شده‌بود و یکی از طراحان زبان C# (Kirill Osenkov) این کار را نشدنی دانسته بود. سپس از طرف چند نفر جواب جالبی برای این کار ارائه شد که به تکنیک Casting By Example شناخته می‌شود. بعد از این اتفاق Osenkov این روش را در بلاگ خود شرح داده‌است.

https://kirillosenkov.blogspot.fr/2008/01/how-to-create-generic-list-of-anonymous.html

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

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



___
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 کنید.