Google design + Microsoft design principles

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

نکته اصلی در مورد Google design این است که در واقع یکی از اهداف Google برای ایجاد استاندارد UI متحد الشکل شدن برنامه های تولیدی در موبایل و وب است. اینکه چقدر به هدفشان نزدیک شوند بستگی به استفاده از استاندارد ها توسط برنامه نویسان و طراحان دارد. کمپانی های مختلفی سعی در ارائه استاندارد برنامه نویسی و طراحی برای UI کرده اند. هر کدام در جایگاه خود قایل استفاده هستند. ولی در اولین نگاه به Google design به نظر من یکی از قویترین هاست. به این دلیل که خیلی خوب به بحث طراحی هنری هم پرداخته است.

من از اسناد Microsoft بیشتر استفاده میکردم. لینک دانلود یکی از اسنادی که معمولا همیشه کنارم بوده Guidelines for Windows Runtime apps و Microsoft design principles.

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

نگران trust level نباشید

البته اگر تا الان نگران بودید‍!

این موضوع در واقع در تمام برنامه های دات نتی وجود دارد. ولی من در مورد بحث وبسایت ها این مورد را بررسی کرده ام.

خود من به شخصه از زمانی که شروع به برنامه نویسی وب کردم همیشه چند آیتم را به صورت چک لیست در نظر داشتم وقتی سایت یا نرم افزاری را روی سروری نصب میکردم. یکی از این آیتم ها trust level هست.

مفهوم trust level در IIS همان طور که نامش میگوید، میزان دسترسی برنامه هاست شده روی IIS را تعیین میکند. به طور کلی دو دسته trust level داریم.

  • Full trust: وقتی IIS با این سطح تنظیم میشود برنامه client امکان استفاده از منابع موجودی که سیستم عامل در اختیار user تنظیم شده با process مربوط به سایت می گذارد، را دارد. در واقع خود IIS کاری برای بررسی و محدود کردن برنامه client انجام نخواهد داد و کار به سیستم عامل واگذار میشود.
  • Partial trust: این سطح خود به چند سطح زیر مجموعه تقسیم می شود. (که می توان level های خاص خودمان را هم ایجاد کنیم) و اگر هر کدام از آنها برای سایتی از طرف IIS تنظیم شده باشند خود IIS یک سری محدودیت هایی برای سایت client در نظر خواهد گرفت. مانند استفاده از reflection، نوشتن فایل،باز کردن دیالوگ هایی مانند انتخاب فایل و …

بعضی از دسترسی های بالا اگر به برنامه شما داده نشده باشند، در صورتی که از DI container یا library هایی که از code generation استفاده می کنند استفاده کنید به مشکل بر می خورید. مثلا قابلیت استفاده از ninject  را در محیطی که دسترسی به reflection ندارد از دست خواهید داد. (اگر Ninject طوری تنظیم شده باشد که با reflection کار کند)

خودم به طور وسواس گونه ای! به این موضوع اهمیت می دادم تا وقتی یک سوالی را در سایت stackoverflow دیدم. در واقع سوال این بود که برای medium trust برنامه نویسی کردن بیهوده است یا نه. جواب یکی از کارکنان مایکروسافت این مطلب را می راسند که مایکروسافت trust level های بغیر از full را deprecated اعلام کرده. یعنی در آینده از طرف مایکروسافت این نیاز وجود خواهد داشت که برنامه برای اجرا شدن باید full trust باشد. حتی کلی از تکنولوژی های در حال کار مایکروسافت پشتیبانی خود را از medium trust حذف خواهند کرد. تکنولوژیهایی مانند MVC، WebAPI، SignalR  و …

پس در واقع هاستینگ شما مجبور خواهد بود این امکان را به شما بدهد.

عادت خوب برنامه نویسی : اگر پروژه ای را شروع می کنید. از همان اول trust level پروژه را مشخص کنید تا در آینده و هنگام deploy کردن پروژه به مشکل بر نخورید. با این کار از همان ابتدا محدودیت های خود را خواهید فهمید. برای این کار در پروژه های asp.net در فایل web.config از تگ trust باید استفاده کنید. به صورت زیر:

 

هر چه قدر زودتر deploy کنید، بهتر!

بعضی وقتا توضیح دوباره واضحات ضرری ندارد!

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

 سناریویی را در نظر بگیرید. پروژه ای گرفته اید. نیازها را از مشتری دریافت کرده اید. الان در حال تولید امکانات اولیه مانند امنیت و بخش های مختلف هستید. بهترین حالت این است که در اولین فرصت نسخه ای را منتشر کنید. به چند دلیل

  • اولین انتشار یک پروژه همیشه مشکلات و نقاط کوری دارد. بهتر است زمانی که استرس ندارید این کار انجام دهید! هر چقدر دیرتر اولین انتشار صورت بگیرد امکان خطا و به تعویق افتار کار بیشتر خواهد شد.
  • انتشارهای بعدی (روی سرور یا هر نوع دیگری) به مراتب زمان کمتری خواهند برد. (منظور من خود فرایند انتشار است نه مدت زمانی که صرف تولید امکانات میکنید)
  • تا وقتی اولین انتشار را نداشته اید و انتشار ها را انجام نداده اید مشتری شما هیچ ایده ای نخواهد داشت که شما در حال کار بر روی چه موضوع ای هستید! به سادگی این احتمال به میان می آید که شما اصلا کار نمی کنید. وقتی نسخه ای تحویل به مشتری می شود ولو خیلی ناقص، شما و مشتری یک نقطه مشترک پیدا میکنید. و آن هم پروژه ی در حال کار است! .
  • انتشار سریع کارها یا لااقل تعهد به انتشار کارها در سریعترین زمان، شما را از over engineering به طور نسبی مصون میکند. (چیزی که خود من به شدت درگیرش هستم)

اینها فواید انتشار سریع پروژه برای من بود! قطعا تمام موارد پوشش داده نشده.

امیدوارم کمکی بکند!

چگونه برنامه نویس بشوم

برنامه نویسی از شغل هاییه که خیلی سر بسته هست. زیاد در موردش اطلاعات وجود نداره در بین کسانی که به این شغل مشغول نیستند.
برنامه نویس شدن در وهله اول به یک سری استعداد عمومی نیاز داره که من زیاد در موردشون نمیدونم. شاید به طور کلی باید استعداد بالای در ریاضی و منطق داشت. ولی واقعا باز به نظر من باید بیشتر استعداد ها رو کما بیش داشت برای این کار. البته در همه شغل ها هم همین طوره.

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

اول: علاقه علاقه علاقه!

اگر از اون دسته از ادمایی هستین که خیلی کنچکاوین که فلان دستگاه چطوری کار میکنه. یا همیشه به علاقه ساختن چیزی دارین. یا از کارهای روزمره و تکراری خیلی زود خسته میشین. به نظر من بهتره یه سری به دنیای کامپیوتر بزنین. اینجا کلی زمینه هست که شما میتونین بهشون بپردازین. 🙂

دوم: زبان انگلیسی

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

به خواندن ادامه دهید