نکات کلیدی
۱. یافتن و حفظ توسعهدهندگان برجسته نیازمند جذب فعال و ایجاد محیطی خاص است.
توسعهدهندگان نرمافزار عالی، و در واقع بهترین افراد در هر حوزهای، بهسادگی هرگز در بازار کار بهصورت عمومی حضور ندارند.
جذب فعال است. از آنجا که توسعهدهندگان برتر به ندرت در جستجوی شغل در تابلوهای عمومی هستند، شرکتها باید بهصورت فعال به دنبال آنها بگردند. این شامل حضور در کنفرانسهای مرتبط، استفاده از فرصتهای کارآموزی برای شناسایی استعدادها در مراحل اولیه و ایجاد جامعهای پیرامون شرکت یا محصولات آن برای جذب افراد همفکر میشود. نباید تنها به سایتهای کاریابی عمومی و بزرگ که حجم زیادی از متقاضیان غیر واجد شرایط را جذب میکنند، اکتفا کرد.
محیط کار اهمیت دارد. فراتر از حقوق، توسعهدهندگان برجسته شرایط خاصی را میطلبند. آنها به دفاتر خصوصی برای تمرکز، ابزارهای باکیفیت (مانند مانیتورها و صندلیها)، محیط اجتماعی با همکاران باهوش و محترم و استقلال و خودمختاری قابل توجه در کارشان اهمیت میدهند. رفتار محترمانه و برخورد بهعنوان «ستاره» برای جذب و نگهداشت آنها حیاتی است.
پول در درجه دوم است. اگرچه پرداخت رقابتی برای عدالت لازم است، اما اغلب انگیزه اصلی استعدادهای برتر نیست. اگر توسعهدهندگان از حقوق شکایت کنند، معمولاً نشانه نارضایتی از جنبههای دیگر شغل مانند کمبود احترام، شرایط کاری نامناسب یا مشکلات سیاسی است. حقوق بالا بهتنهایی نمیتواند جایگزین محیط نامطلوب شود.
۲. مدیریت مؤثر در نرمافزار بر هویت و اطلاعات مشترک استوار است، نه فقط دستورات یا مشوقها.
هدف این است که با ایجاد هویت مشترک، افراد با اهدافی که میخواهید به آنها برسید، همراستا شوند.
دستور و کنترل شکست میخورد. مدیریت به سبک نظامی که در آن رهبران فقط دستور میدهند، در تیمهای فناوری پیشرفته کارآمد نیست. مدیران اغلب اطلاعات فنی دقیق را که اعضای تیم دارند، ندارند و این منجر به تصمیمات ضعیف میشود. این روش همچنین توسعهدهندگان باهوش و خودمختار را که ترجیح میدهند دلیل کارها را بفهمند، از خود میراند.
اقتصاد ۱۰۱ نتیجه معکوس دارد. مدیریت صرفاً از طریق مشوقهای مالی (مانند پاداش بر اساس معیارهای خاص) نتیجه معکوس میدهد. این کار انگیزه درونی را با انگیزه بیرونی ضعیفتر جایگزین میکند و افراد را به بازی با سیستم برای بهینهسازی معیار به جای نتیجه مطلوب تشویق میکند. این رویکرد مسئولیت مدیریت در ساخت سیستمهای مؤثر و آموزش افراد را نادیده میگیرد.
هویت و اطلاعات قدرت میبخشند. مؤثرترین روش، مدیریت هویت است که حس هدف مشترک و وفاداری در تیم (مانند خانواده) را تقویت میکند. مدیران باید اطلاعات لازم (مانند اهداف مالی و زمینه بازار) را به اشتراک بگذارند تا افراد بتوانند تصمیمات آگاهانهای بگیرند که با اهداف سازمان همراستا باشد، حتی وقتی شرایط تغییر میکند.
۳. پایه فنی قوی، شامل مفاهیم «سخت»، برای برنامهنویسان واقعاً توانمند ضروری است.
اشارهگرها و بازگشتپذیری نیازمند توانایی خاصی در استدلال، تفکر در انتزاعات و مهمتر از همه، دیدن مسئله در چندین سطح انتزاعی بهطور همزمان است.
دانشگاههای متمرکز بر جاوا ناکافیاند. دانشگاههایی که فقط روی جاوا و برنامهنویسی شیءگرا تمرکز دارند، ممکن است دانشجویان را از مهارتهای ضروری محروم کنند. مفاهیمی مانند اشارهگرها (که معمولاً در زبان C آموزش داده میشود) و بازگشتپذیری (برنامهنویسی تابعی) معمولاً بهعنوان مطالب سخت و حذفکننده دانشجو شناخته میشوند که توانایی ذهنی حیاتی را پرورش میدهند. بدون اینها، درک سیستمهای سطح پایین مانند سیستمعاملها یا انتزاعات سطح بالا مانند پردازش موازی دشوار میشود.
فراتر از نحو زبان. ارزش یادگیری زبانهایی مانند C یا Scheme فقط در دانستن آن زبانها نیست، بلکه در روشی است که مغز را آموزش میدهند. این زبانها برنامهنویسان را مجبور میکنند همزمان درباره مدیریت حافظه، عملکرد و سطوح مختلف انتزاع فکر کنند. این انعطافپذیری ذهنی برای طراحی معماری نرمافزار مقاوم و حل مسائل پیچیده حیاتی است.
تأثیر بر نوآوری. فقدان آشنایی با این مفاهیم بنیادی میتواند نوآوری را محدود کند. برای مثال، الگوریتم MapReduce که اساس مقیاسپذیری گوگل است، مستقیماً از مفاهیم برنامهنویسی تابعی (Map و Reduce) گرفته شده است. شرکتهایی که توسعهدهندگانشان این پیشزمینه را ندارند، ممکن است در اختراع یا حتی درک چنین الگوهایی دچار مشکل شوند.
۴. توسعه نرمافزار یک هنر است که از علوم کامپیوتر متمایز است و مهارتهای عملی و ارتباطی روشن میطلبد.
توانایی نوشتن واضح درباره موضوعات فنی تفاوت بین یک برنامهنویس منفرد و یک رهبر است.
علوم کامپیوتر در برابر توسعه. مدرک علوم کامپیوتر پایههای نظری را فراهم میکند اما بهطور خودکار توسعه نرمافزار را آموزش نمیدهد. دورههای عملی و برنامهنویسی فشرده برای کسب تجربه واقعی ضروریاند. بسیاری از دانشگاههای برتر بر نظریه تمرکز دارند و مهارتهای عملی را به جای دیگری واگذار میکنند.
اهمیت نوشتن. توانایی نوشتن و ارتباط واضح برای برنامهنویسان حیاتی است. این مهارت امکان تبلیغ (مانند لینوس توروالدز با لینوکس)، متقاعدسازی در سازمان، نوشتن مشخصات و مستندات روشن و همکاری مؤثر را فراهم میکند. برنامهنویسانی که خوب مینویسند، نفوذ بیشتری دارند و برای کسبوکار ارزشمندترند.
چالشهای درونسازمانی. بسیاری از مشاغل برنامهنویسی مربوط به «نرمافزار داخلی» در شرکتهای غیرنرمافزاری است. این نقشها ممکن است رضایتبخش نباشند زیرا:
- کار اغلب موقتی و نه زیباست.
- پروژهها پس از رسیدن به حد «کافی خوب» متوقف میشوند و فرصت صیقل دادن ندارند.
- برنامهنویسان ممکن است نسبت به کارکنان اصلی کسبوکار جایگاه پایینتری داشته باشند.
شرکتهای محصولمحور که نرمافزار هسته کسبوکارشان است، فرصتهای بیشتری برای افتخار به هنر و پیشرفت شغلی فراهم میکنند.
۵. طراحی موفق نرمافزار فراتر از قابلیت استفاده، شامل دینامیکهای اجتماعی و ارتباط عاطفی است.
نرمافزاری که کاری عالی انجام میدهد و مردم واقعاً میخواهند انجام دهند، ممکن است بهشدت غیرقابل استفاده باشد و با این حال موفق شود.
قابلیت استفاده لازم است اما کافی نیست. آسان کردن استفاده از نرمافزار مهم است اما تنها عامل موفقیت نیست. محصولاتی که نیاز قوی را برطرف میکنند یا ویژگیهای جذابی دارند، حتی با قابلیت استفاده ضعیف موفق میشوند (مانند نسخههای اولیه Napster یا پیامک). برعکس، نرمافزار بسیار قابل استفاده که مشکلی را حل نکند شکست میخورد.
طراحی رابط اجتماعی. برای نرمافزارهایی که تعامل انسان با انسان را تسهیل میکنند (شبکههای اجتماعی، انجمنها)، «رابط اجتماعی» حیاتی است. این شامل طراحی نحوه تأثیر نرمافزار بر رفتار کاربران و دینامیک جامعه است. هدف کمک به موفقیت جامعه است، حتی اگر به معنای محدود کردن کاربران فردی باشد (مثلاً پذیرش اسپم جعلی).
جذابیت عاطفی اهمیت دارد. نرمافزار عالی اغلب «نتهای بالا» را میزند که با کاربران از نظر عاطفی ارتباط برقرار میکند. این شامل:
- زیباییشناسی و زیبایی (مانند طراحی آیپاد)
- طنز و شخصیت (مانند متن وبسایت Winamp)
- احساس کنترل کاربران (مانند بازخورد چرخ اسکرول آیپاد)
این عناصر معمولاً نتیجه استعداد برترند و تیمهای متوسط به سختی میتوانند آنها را تکرار کنند، که مزیت رقابتی پایدار ایجاد میکند.
۶. حل مسائل دشوار و پیچیده جایی است که ارزش واقعی کسبوکار و مزیت رقابتی نهفته است.
بازار برای راهحلهای مسائل پیچیده پول میدهد، نه برای راهحلهای مسائل آسان.
ارزش از دشواری میآید. هر شغلی یک مسئله چالشبرانگیز و ناخوشایند دارد («گلآلودگی»). توانایی حل این مسائل دشوار همان چیزی است که بازار پاداش میدهد («طلایی»). کسبوکارهایی که فقط مسائل آسان را حل میکنند، با موانع ورود پایین و رقابت شدید مواجهاند.
سادگی همیشه ارزشمند نیست. در حالی که برنامههای ساده و آسان جذاباند، اگر پیچیدگی مهمی را برای کاربر یا کسبوکار حل نکنند، ممکن است ارزش عمیقی نداشته باشند. شرکتهایی که از همه جنبههای «پیچیده» اجتناب میکنند (مانند پشتیبانی از نرمافزار قابل نصب در محیطهای متنوع) ممکن است بازار و درآمد خود را محدود کنند.
طراحی بهعنوان مسئله پیچیده. خلق نرمافزار با طراحی زیبا و بسیار قابل استفاده خود چالشی دشوار است. این نیازمند استعداد و تلاش قابل توجه است و منبع مزیت رقابتی پایدار است که رقبا بهسختی میتوانند آن را کپی کنند، حتی اگر ظاهر ساده باشد. حل مداوم مسائل جدید و دشوار به کسبوکار امکان رشد و گسترش بازار میدهد.
۷. برنامهریزی واقعبینانه مبتنی بر داده برای مدیریت دامنه و عرضه محصولات موفق حیاتی است.
شما میخواهید وقت خود را صرف کارهایی کنید که بیشترین بازده را دارند. و نمیتوانید بفهمید بازده چقدر هزینه دارد مگر اینکه بدانید چقدر زمان میبرد.
توسعهدهندگان با برنامهریزی مقاومت میکنند. برنامهنویسان اغلب از ساخت برنامه زمانی خوششان نمیآید و آن را غیرواقعی یا کاری خستهکننده میدانند. اما برنامهها برای تصمیمگیری آگاهانه درباره اولویتبندی ویژگیها و تخصیص منابع ضروریاند. بدون برنامه، پروژهها معمولاً به تعویق میافتند.
برنامهریزی مبتنی بر شواهد (EBS). روشی قابل اعتماد شامل تقسیم کار به وظایف کوچک (کمتر از ۱۶ ساعت)، ثبت زمان واقعی صرف شده (شامل وقفهها) برای محاسبه «سرعت» فردی (برآورد/واقعی) و استفاده از این دادههای تاریخی در شبیهسازی مونتکارلو برای پیشبینی بازههای زمانی احتمالی عرضه با سطوح اطمینان است. این روش سوگیریهای برآورد فردی و عوامل غیرقابل پیشبینی را در نظر میگیرد.
برنامهها مجبور به حذف میشوند. یکی از مزایای کلیدی برنامهریزی واقعبینانه این است که نشان میدهد آیا ویژگیهای برنامهریزی شده بیش از زمان موجود است یا خیر. این امر به حذف ویژگیهای غیرضروری کمک میکند و اطمینان میدهد که مهمترین ویژگیها اولویت دارند و محصول زودتر عرضه میشود. ویژگیهایی که به دلیل فشار برنامه حذف میشوند معمولاً کماهمیتترینها هستند.
۸. بازسازی و بهبود کد موجود معمولاً بهتر از شروع از صفر است.
شرکتی ضعیفتر، شاید شرکتی که توسط مدیری از صنعت تحویل بستههای سریع اداره میشود، ممکن است تصمیم بگیرد کد را کنار بگذارد و از نو شروع کند.
بازنویسیها پرخطرند. شروع کد از ابتدا اغلب وقتی کد موجود نامرتب است یا برای هدف فعلی طراحی نشده وسوسهانگیز است. اما این معمولاً اشتباه است، زیرا دانش انباشته شده (از جمله رفع اشکالها) را دور میریزد و زمان بسیار بیشتری میبرد که اغلب به عرضه نمیرسد یا مشکلات جدید ایجاد میکند.
پاکسازی مؤثر است. رویکرد بهتر «پاکسازی» یا بازسازی کد موجود است. این شامل انجام تغییرات کوچک و منطقی برای بهبود ساختار داخلی، خوانایی و قابلیت نگهداری بدون افزودن ویژگی جدید یا شکستن عملکرد موجود است. این فرایند میتواند بهتدریج و قابل پیشبینی انجام شود.
مزایای بازسازی. پاکسازی کد، حتی خط به خط، افزودن ویژگیهای جدید را آسانتر میکند، احتمال ایجاد اشکال جدید را کاهش میدهد (زیرا منطق پیچیده بازنویسی نمیشود) و دانش ارزشمند و سختکسب شده در کد موجود را حفظ میکند. این مسیر کارآمدتر و کمریسکتری برای داشتن کد سالمتر است.
۹. قیمتگذاری نرمافزار نیازمند درک دینامیک بازار، ارزش مشتری و استراتژی بلندمدت است.
بزرگترین اشتباه شرکتهای نرمافزاری، قیمتگذاری بسیار پایین است که باعث میشود درآمد کافی نداشته باشند و ورشکست شوند. اشتباه بزرگتر، حتی بزرگتر از بزرگترین اشتباه، قیمتگذاری بسیار بالا است که باعث میشود مشتری کافی جذب نکنند و ورشکست شوند.
منحنی تقاضا نزولی است. بهطور کلی، هرچه قیمت بالاتر باشد، مشتریان کمتری خرید میکنند. هدف، حداکثر کردن
[پاسخ ناقص است]
آخرین بهروزرسانی::
نقد و بررسی
کتاب «بیشتر از جوئل درباره نرمافزار» مجموعهای از پستهای وبلاگی جوئل اسپولسکی است که به جنبههای مختلف توسعه نرمافزار و کسبوکار میپردازد. خوانندگان از طنازی، بینشهای عمیق و سبک نوشتاری روشن اسپولسکی استقبال میکنند. این کتاب نکات ارزشمندی درباره برنامهنویسی، مدیریت و صنعت نرمافزار ارائه میدهد. اگرچه برخی مطالب ممکن است قدیمی به نظر برسند، اما بسیاری از اصول مطرحشده همچنان کاربردی و مرتبط باقی ماندهاند. منتقدان کتاب را بهویژه برای فعالان حوزه توسعه نرمافزار و کارآفرینی، اثری لذتبخش و آموزنده توصیف کردهاند. هرچند برخی نقدها به تکرار مطالب پیشین و قدیمی بودن بخشهایی اشاره دارند، اما در مجموع کتاب بهخاطر خرد عملی و محتوای جذاب خود مورد استقبال قرار گرفته است.
Joel On Software Series
Similar Books









