کدنویسی کابویی

**کدنویسی کابویی** (به انگلیسی: Cowboy coding) یک نوع توسعه نرم‌افزاری است که برنامه‌نویسان به شکل خودمختار بر فرایند توسعه کنترل دارند. شامل زمان‌بندی پروژه، زبان برنامه‌نویسی، الگوریتم‌ها، ابزارها، چهارچوب‌های نرم‌افزاری و سبک کدنویسی.

یک کدنویس کابویی می‌تواند یک توسعه‌دهنده تنها یا عضوی از گروه توسعه‌دهندگان است که با فرایندها و نظم کمی کار می‌کنند. معمولاً زمانی اتفاق می‌افتد که کاربران تجاری مشارکت کمی داشته باشند یا مدیریت، مرزهایی تعیین کند که فقط جنبه‌های غیر فنی پروژه مانند اهداف هیئت مدیره، زمان‌بندی، چشم‌انداز و ظواهر («چه» کاری انجام دادن در برابر «چطور» انجام دادن) را تحت کنترل می‌گیرد.

از «کدنویسی کابویی» عمدتاً به عنوان یک کلمه تحقیرآمیز در برابر راهکارهای ساخت‌یافته‌تر توسعه نرم‌افزار استفاده می‌شود.

## اشکالات
در کدنویسی کابویی، نبود راهکارهای مرسوم مدیریت پروژه نرم‌افزاری می‌تواند (و نه الزاماً) نشانه‌ای برای کوچک بودن پروژه یا ذات تجربی آن باشد. پروژه‌های نرم‌افزاری با این مشخصات می‌تواند نشانه:

### نداشتن برنامه انتشار
عدم وجود تخمین زمانی یا برنامه اجرایی می‌تواند منجر به تأخیر در پروژه شود. ضرب‌الاجل‌های ناگهانی یا فشارها برای انتشار نرم‌افزار می‌تواند باعث استفاده از تکنیک‌های «سریع و کثیف» که بعدها نیازمندها بازنگری است می‌شود.

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

این موارد باعث می‌شود که زمان مورد نیاز برای یادگیری دست کم گرفته شده و باعث تأخیر در فرایند توسعه شود. کم‌هزینه بودن نیز می‌تواند در اهمیت ندادن به استانداردها مؤثر باشد که باعث ناخوانایی یا به وجود آمدن ناسازگاری کدهای منبع دچار اختلال در مفاهیم زبان و تأثیر در خروجی باشد.

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

### ناکامل بودن
بسیاری از مدل‌های توسعه نرم‌افزاری مانند برنامه‌نویسی افراطی، راهکارهای افزایشی را که باعث تنش‌هایی مثل این که برنامه باید در انتهای هر دوره زمانی قابلیت ارائه داشته باشد را در پیش می‌گیرند. پروژه‌های مدیریت‌نشده تست واحدهای کمی دارند و ناکامل بودن پروژه می‌تواند آن را غیرقابل استفاده کند. در این زمینه متدولوژی‌های چابک با کدنویسی کابویی مورد قیاس قرار می‌گیرد اما مدیریت پروژه چابک فرایندها، روندها، اندازه‌گیری‌ها، مدیریت پروژه و دیدگاه‌های شناخته‌شده‌ای دارد ولی کدنویسی کابویی هیچ‌کدام از این‌ها را ندارد.

## مزایا
* توسعه‌دهندگان، فضای کاری آزادانه‌ای دارند که منجر به تجارب، فراگیری‌ها و نتایج آزادانه‌ای شود.
* این روش به توسعه‌دهندگان اجازه می‌دهد که از مرزهای خسته‌کننده و ساخت‌یافته که باعث محدودیت‌ها و عیوب طراحی می‌شوند رها شوند.
* با توجه به این که بحث‌ها بر سر معماری، نوشتن ویژگی‌ها و بازبینی کدها همه زمان‌بر هستند، یک توسعه‌دهنده تنها (اگر کافی باشد) احتمالاً می‌تواند اپلیکیشن که خوب کار می‌کند را با کدنویسی کابویی سریع‌تر به سرانجام برساند. کارهایی مثل تحقیق یا نمونه‌سازی می‌تواند برای کیفیت کد و متدهای پیچیده‌تر مورد نیاز نباشد.
* با توجه به این که کدنویسی می‌تواند در زمان‌های آزاد برنامه‌نویس انجام شود، یک پروژه می‌تواند به بار بنشیند در حالی که امکانش در حالت عادی وجود ندارد.

## جستارهای وابسته
* هکر، فرهنگی که بر خلاقیت و استقلال برنامه‌نویس بنا شده‌است.
* کد میمونی، یک واژه تحقیرآمیز برای برنامه‌نویسانی که استخدام می‌شوند تا کدهای تکراری یا ساده بنویسند.
* خویش‌فرمایی

## منابع

* 
رده:فرهنگ مردمی برنامه‌نویسی رایانه‌ای
رده:فرهنگ مردمی مهندسی نرم‌افزار
رده:فلسفه‌های توسعه نرم‌افزار