حداقل مهارت های یک برنامه نویس دات نت!

لوگوی دات نتاین روزها آیکون ویژوال استادیو را در دسکتاپ خیلی ها می توان دید. اولین فکری که بعد از دیدن این آیکون در دسکتاپ طرف به فکر شما می رسد این است که او به احتمال زیاد برنامه نویس دات نت است. اما باید بدانید که برنامه نویس دات نت بودن فقط داشتن آیکون ویژوال استادیو بر روی دسکتاپ نیست. من یک نفر را می شناسم که ویژوال استادیو را فقط به اسم «سی شارپ» می شناسد و اصلاً نمی داند دات نت فریم ورک چیست و در حال حاضر هم برنامه های بانک اطلاعاتی می نویسد! برای اینکه یک نفر خود را برنامه نویس دات نت بداند، باید حداقل اطلاعاتی در مورد دات نت فریم ورک، کلاس های پایه آن، ابزارهای توسعه آن و زبان های برنامه نویسی آن بداند. هر کسی که در زمینه دات نت برنامه نویسی می کند و خود را توسعه دهنده دات نت می داند، باید حداقل مهارت های زیر را داشته باشد :

1 : دید شیء گرا داشته باشد و با قوانین Objected Oriented Programming به خوبی آشنا باشد. دات نت به صورت پیش فرض برنامه نویس را درگیر مباحث شیء گرایی می کند. به همین دلیل اگر کسی با شیء گرایی آشنایی نداشته باشد نمی تواند برنامه های خوبی بنویسد یا در دات نت پیشرفت کند. یک برنامه نویس دات نت باید بتواند برنامه خود را توسط کلاس ها و با استفاده از مفاهیم کپسوله سازی، ارث بری، چندریختی و اینترفیس ها بنویسد تا توسعه و تغییر آن در دراز مدت ساده و کم هزینه باشد. بر همین اساس او باید :

  • با namespace و scope کلاس ها آشنایی داشته باشد
  • تفاوت یک کلاس Partial و یک کلاس معمولی را بداند
  • مفهوم کلاس های abstract را درک کند و توانایی نوشتن interface را داشته باشد
  • بتواند با استفاده از کلمات کلیدی private، public، protected، internal و internal protected دسترسی به کلاس ها را کنترل کند
  • فرق کلاس و متد استاتیک و غیر استاتیک را بداند
  • با مفاهیم overload و override در تعریف متدها آشنایی داشته باشد

2 : با ویژگی های یکی از زبان های برنامه نویسی دات نت به خوبی آشنا باشد. دانستن ویژگی های یک زبان برنامه نویسی هم در تسریع کدنویسی و هم در استاندارد کد نوشتن به یک برنامه نویس کمک زیادی می کند. بر همین اساس او باید :

  • با تمام data typeهای یک زبان آشنا باشد و به موقع از آن ها استفاده کند
  • بتواند مفاهیم شیء گرایی را با استفاده از ویژگی های زبان پیاده سازی کند
  • با مفاهیم Boxing و Unboxing و Type Casting آشنا باشد
  • با روش های مستند سازی کد در آن زبان آشنا باشد

3معماری دات نت فریم ورک : با معماری دات نت فریم ورک آشنایی داشته باشد. یک برنامه نویس دات نت هر چقدر هم که خوب کد بنویسد، اگر نداند برنامه اش چطور و توسط چه عامل هایی اجرا و کنترل می شود یک جای کارش می لنگد! باید بداند دات نت فریم ورک شامل یک کتابخانه کلاس های پایه است که خود آن شامل رابط کاربری، کلاس های دسترسی به داده و اتصال به دیتابیس، الگوریتم های کدگذاری، ارتباطات شبکه و وب اپلیکیشن است که استفاده به جا از این کلاس ها، سرعت توسعه یک پروژه را افزایش می دهند. باید بداند برنامه های نوشته شده با دات نت در یک محیط زمان اجرا به نام CLR یا Common Language Runtime اجرا و مدیرت می شوند. باید بداند CLR وظیفه مدیریت حافظه و هندل کردن استثنا ها را نیز بر عهده دارد. بر همین اساس او باید :

  • مفهوم اسمبلی (Assembly) در دات نت را بداند
  • با ساختار فایل های اجرایی دات نت آشنا باشد
  • با کلاس های پایه دات نت آشنایی لازم را داشته باشد
  • با Garbage Collector و نحوه مدیریت حافظه در دات نت آشنا باشد
  • با قابلیت Reflection در دات نت آشنایی داشته باشد
  • بداند GAC چیست و چه کاری انجام می دهد

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

  • با پنجره های مختلف ویژوال استادیو و مفاهیم آن ها آشنایی کامل داشته باشد
  • بتواند یک پروژه موجود را کامپایل و اجرا کند
  • بتواند فایل های جدیدی را به پروژه اضافه کند
  • بتواند از Toolbox ویژوال استادیو کنترل های مورد نیاز خود را پیدا کند و کنترل های جدیدی را به آن اضافه کند
  • بتواند با ادیتور کد ویژوال استادیو کار کند و کدهای مورد نظر خود را پیدا کند
  • بتواند یک برنامه را با استفاده از ابزارهای ویژوال استادیو Debug کند (منوی Debug)
  • تفاوت میان اجرا در حالت Debug و اجرا در حالت Release را بداند
  • تفاوت ساختار پروژه های Windows Application، Console Application، Class Library، ASP.NET Web Application و ASP.NET Web Service Application را بداند
  • تفاوت Solution و Project را بداند و بتواند چند پروژه را در یک Solution مدیرت کند

توسعه دهندگان برنامه های مبتنی بر دیتابیس باید :

  • بر روی مفاهیم و نحوه پیاده سازی دیتابیس و رابطه های میان جدول های اطلاعاتی و زبان SQL تسلط داشته باشد
  • با معماری ADO.NET و کلاس های پایه آن آشنا باشد
  • بداند ORM چیست و چه مشکلاتی را حل می کند
  • حداقل با یکی از ORMهای دات نت مثل LINQ to SQL، NHibernate یا Entity Framework آشنا باشد
  • با DataSet و نحوه استفاده ازکنترل های مربوط به دیتابیس مثل DataGrid آشنا باشد
  • با ساختار فایل های XML آشنایی داشته باشد و بتواند یک فایل XML را پردازش کند

توسعه دهندگان برنامه های مبتنی بر وب (ASP.NET) باید :

  • تفاوت های عمومی یک برنامه دسکتاپ و یک برنامه تحت وب را بداند
  • بداند PostBack چیست و چه کاربردهایی دارد
  • بداند متدهای استاندارد POST و GET در ASP.NET چگونه پیاده سازی شده اند
  • با ViewState آشنایی داشته باشد، وظیفه آن را بداند و بداند چه مواقعی کاربرد دارند
  • با ساختار فایل web.config آشنایی لازم را داشته باشد
  • تفاوت میان کنترل های تحت سرور و کنترل های HTML و تحت کلاینت را بداند
  • با زبان جاوا اسکریپت آشنایی لازم را داشته باشد
  • Lifetime یک برنامه ASP.NET را درک کند
  • با کوکی ها آشنا باشد و بتواند از آن ها استفاده کند
  • بتواند با استفاده از Session یک سیستم لاگین طراحی کند
  • بتواند تفاوت یک وب سرویس و یک وب اپلیکیشن را توضیح دهد

farasun.wordpress.com

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

یک محیط سفارشی شده; تمام چیزی که یک برنامه نویس می خواهد!

داشتن تمرکز برای افرادی که به اصطلاح Knowledge Worker هستند، مثل نویسندگان یا برنامه نویسان، بسیار مهم است. این تمرکز در محیط های شلوغ و پر استرس و محیطی که فرد در آن احساس راحتی نکند به دست نمی آید. یک برنامه نویس به عنوان فردی که از دانش و قدرت تفکرش برای انجام کارها استفاده می کند، برای انجام وظیفه خود به نحو مطلوب و با بازدهی بالا نیاز به یک محیط سفارشی (=Customize) شده دارد. منظورم از محیط سفارشی شده، محیطی است که فرد برنامه نویس در آن احساس راحتی کند، تمرکز کافی داشته باشد و بتواند در آن بر اساس سلیقه خودش تغییر ایجاد کند.

برنامه نویس در گوگل

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

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

شرکت موزیلا

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

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

برنامه نویسان مایکروسافت

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

شرکت گوگل

پ.ن : برای نمونه شما یکی از کارکنان توییتر را فالو کنید، متوجه می شوید که این ها یا در حال آبجو خوردن هستن و یا در حال پارتی گرفتن! من نمیدونم اینا کی کار میکنن!

farasun.wordpress.com

Subcribe to Farasun feedمشترک فراسان شويد