*** چرخی که برای ما نچرخد باید دوباره اختراع شود ***



سلام

امروز داشتم تبادلات یک سایت را از طریق مرورگر فایرفاکس بررسی می کردم که متوجه شدم یک اتصال ناخواسته و عجیب به نشانی mnh.winnermore.net و  mnh.winnerical.net انجام می شود! با کمی تحقیق در اینترنت متوجه شدم که این یک ویروس موذی است که در سیستم من نفوذ کرده و باعث کندی ارتباط با اینترنت و همچنین هجوم آگهی های مزاحم و ناجور به رایانه من شده است. در هر حال برای نابودی آن به این نشانی مراجعه کردم و الحمدلله مشکلم حل شد. شما هم می توانید با مراجعه به این سایت و دانلود نرم افزار unhackme.zip از http://www.greatis.com مشکل خود را حل کنید. البته اگر دوستان متوجه مشکلی در این نرم افزار شدند خواهشا در اینجا نظر دهند تا آن را اعلام کنیم.

باتشکر


مطلب زیر ترجمه یک مقاله از وب سایت Joel Spolsky است که بخاطر اهمیت مسئله برای برنامه نویسان کشور عزیزمان در اینجا ارائه می شود:

یکی از بدترین اشتباهات یک برنامه نویس  ، یک تیم نرم افزاری و یا شرکت نرم افزاری بزرگ در کسب و کارش این است که تصمیم بگیرد که کد را از پایه بازنویسی کند

NetScape ، Microsoft ، Borland نمونه هایی از شرکت های بزرگی هستند که در مقطعی این اشتباه را مرتکب شدند و به شدت ضربه خورده و سهم خود در بازار را کاملا یا به طور نسبی به رقیبان واگذار کردند .

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

 یک دلیل ظریف وجود دارد که برنامه نویسان همیشه دوست دارند کدهای موجود را دور بریزند و از اول شروع کنند . دلیلش این است که آنها فکر می کنند کد قدیمی افتضاح است .و جالب اینجاست که آنها در بیشتر مواقع اشتباه می کنند . اینکه آنها فکر می کنند کد قدیمی یک افتضاح است ، ناشی از یک قانون اصلی  برنامه نویسی است :

خواندن کد از نوشتن آن سخت تر است .

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

دلیل این افتضاح بودن چیست ؟

آنها می گویند " خوب ، به این تابع نگاه کن . دو صفحه است . هیچکدام از این کدها جایشان اینجا نیست . من نمی دونم نصف این فراخوانی API ها برای چیست " 

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

وقتی شما کدهایتان را دور میریزید و از اول شروع می کنید ، شما دارید تمام آن تجربه ، باگ های جمع آوری شده و سالها کار برنامه نویسی را و دانش کسب شده را دور می ریزید . 

شما دارید پیشرو بودن تان در بازار را دور می ریزید . شما دارید دو یا سه سال را به رقبایتان هدیه می کنید و باور کنید در دنیای برنامه نویسی این زمان طولانی است .

با ادامه دادن استفاده از یک نسخه قدیمی از کد برای چندین سال ( در زمان کار بر روی نسخه ی کاملاً جدید ) ، شما خود را در موقعیت خطرناکی قرار می دهید و قادر به هیچگونه تغییر استراتژیک یا واکنش به تقاضای امکانات جدید از طرف بازار نخواهید بود چون کد قابل توسعه ای ندارید . شاید کسب و کارتان را در این مدت تعطیل کنید

با نوشتن کدی که وجود دارد ؛ شما مقدار زیادی پول و سرمایه را هدر می دهید .

آیا گزینه ی دیگری وجوددارد ؟ به نظر می رسد که اتفاق نظر بر این است که کد قدیمی Netscape خیلی بد بود . خوب ؛ شاید بد بوده است اما می دانید ؟ بر روی تعداد خیلی زیادی از کامپیوترها در دنیا به خوبی کار می کرد .
وقتی یک برنامه نویس می گوید که کدش افتضاح است ( که همیشه هم  می گوید ) سه چیز باعث آن است :
اول ، وجود مشکلات معماری . کد به خوبی نوشته نشده است .این مشکلات را می توان  یکی یکی با جابجا کردن محتاطانه کدها ، refactor کردن ، تغییر interface ها و . حل کرد .می توان این تغییرات را توسط یک برنامه نویس انجام داد . حتی تغییرات نسبتا بزرگ در معماری را می توان بدون دور ریختن کد قدیمی انجام داد . جابجا کردن و  تمیزکاری کدها ، ساختن کلاسهای پایه درست و با معنی ، ساختن interfaceهای دقیق بین ماژول ها  همراه با احتیاط و بدون ایجاد کردن باگ های جدید .

دلیل دوم این است که کد ناکارآمد است . شایع بود که کد مربوط به رندر کردن در netscape کند است . اما این تنها بخش کوچکی از پروژه را تحت تاثیر قرار می داد. که می توان آن را بهبود داد یا بازنویسی کرد.لازم نیست که تمام پروژه را بازنویسی کنید .

دلیل سوم زشت بودن کد قدیمی است . برای مثال پروژه با این قرارداد شروع شده که متغیرها با زیرخط شروع شوند اما بعدا قرارداد به m_ تغییر کرده . که کد را زشت می کند . این مشکلات را می شود به راحتی با یک ماکرو حل کرد ونیازی به بازنویسی پروژه نیست .

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

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

------------

متن فوق برگرفته از این نشانی است.

ضمنا توصیه می کنم حتما  اینجا  و اینجا و اینجا را هم مطالعه فرمایید.


آخرین ارسال ها

آخرین جستجو ها


خبرهای فوری پلدشت تشریفات کسرا سرماي پاييز خرید اینترنتی Jessica egeffodda m111pm جدیدترین فایل های آموزشی nasymtebaran طراحی سایت در قزوین - آموزش سئو | لوکسی دیزاین