Searching...
فارسی
EnglishEnglish
EspañolSpanish
简体中文Chinese
FrançaisFrench
DeutschGerman
日本語Japanese
PortuguêsPortuguese
ItalianoItalian
한국어Korean
РусскийRussian
NederlandsDutch
العربيةArabic
PolskiPolish
हिन्दीHindi
Tiếng ViệtVietnamese
SvenskaSwedish
ΕλληνικάGreek
TürkçeTurkish
ไทยThai
ČeštinaCzech
RomânăRomanian
MagyarHungarian
УкраїнськаUkrainian
Bahasa IndonesiaIndonesian
DanskDanish
SuomiFinnish
БългарскиBulgarian
עבריתHebrew
NorskNorwegian
HrvatskiCroatian
CatalàCatalan
SlovenčinaSlovak
LietuviųLithuanian
SlovenščinaSlovenian
СрпскиSerbian
EestiEstonian
LatviešuLatvian
فارسیPersian
മലയാളംMalayalam
தமிழ்Tamil
اردوUrdu
More Joel on Software

More Joel on Software

Further Thoughts on Diverse and Occasionally Related Matters That Will Prove of Interest to Software Developers, Designers, and ... or Ill Luck, Work with Them in Some Capacity
توسط Joel Spolsky 2008 320 صفحات
4.05
546 امتیازها
گوش دادن
Try Full Access for 7 Days
Unlock listening & more!
Continue

نکات کلیدی

۱. یافتن و حفظ توسعه‌دهندگان برجسته نیازمند جذب فعال و ایجاد محیطی خاص است.

توسعه‌دهندگان نرم‌افزار عالی، و در واقع بهترین افراد در هر حوزه‌ای، به‌سادگی هرگز در بازار کار به‌صورت عمومی حضور ندارند.

جذب فعال است. از آنجا که توسعه‌دهندگان برتر به ندرت در جستجوی شغل در تابلوهای عمومی هستند، شرکت‌ها باید به‌صورت فعال به دنبال آن‌ها بگردند. این شامل حضور در کنفرانس‌های مرتبط، استفاده از فرصت‌های کارآموزی برای شناسایی استعدادها در مراحل اولیه و ایجاد جامعه‌ای پیرامون شرکت یا محصولات آن برای جذب افراد هم‌فکر می‌شود. نباید تنها به سایت‌های کاریابی عمومی و بزرگ که حجم زیادی از متقاضیان غیر واجد شرایط را جذب می‌کنند، اکتفا کرد.

محیط کار اهمیت دارد. فراتر از حقوق، توسعه‌دهندگان برجسته شرایط خاصی را می‌طلبند. آن‌ها به دفاتر خصوصی برای تمرکز، ابزارهای باکیفیت (مانند مانیتورها و صندلی‌ها)، محیط اجتماعی با همکاران باهوش و محترم و استقلال و خودمختاری قابل توجه در کارشان اهمیت می‌دهند. رفتار محترمانه و برخورد به‌عنوان «ستاره» برای جذب و نگه‌داشت آن‌ها حیاتی است.

پول در درجه دوم است. اگرچه پرداخت رقابتی برای عدالت لازم است، اما اغلب انگیزه اصلی استعدادهای برتر نیست. اگر توسعه‌دهندگان از حقوق شکایت کنند، معمولاً نشانه نارضایتی از جنبه‌های دیگر شغل مانند کمبود احترام، شرایط کاری نامناسب یا مشکلات سیاسی است. حقوق بالا به‌تنهایی نمی‌تواند جایگزین محیط نامطلوب شود.

۲. مدیریت مؤثر در نرم‌افزار بر هویت و اطلاعات مشترک استوار است، نه فقط دستورات یا مشوق‌ها.

هدف این است که با ایجاد هویت مشترک، افراد با اهدافی که می‌خواهید به آن‌ها برسید، هم‌راستا شوند.

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

اقتصاد ۱۰۱ نتیجه معکوس دارد. مدیریت صرفاً از طریق مشوق‌های مالی (مانند پاداش بر اساس معیارهای خاص) نتیجه معکوس می‌دهد. این کار انگیزه درونی را با انگیزه بیرونی ضعیف‌تر جایگزین می‌کند و افراد را به بازی با سیستم برای بهینه‌سازی معیار به جای نتیجه مطلوب تشویق می‌کند. این رویکرد مسئولیت مدیریت در ساخت سیستم‌های مؤثر و آموزش افراد را نادیده می‌گیرد.

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

۳. پایه فنی قوی، شامل مفاهیم «سخت»، برای برنامه‌نویسان واقعاً توانمند ضروری است.

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

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

فراتر از نحو زبان. ارزش یادگیری زبان‌هایی مانند C یا Scheme فقط در دانستن آن زبان‌ها نیست، بلکه در روشی است که مغز را آموزش می‌دهند. این زبان‌ها برنامه‌نویسان را مجبور می‌کنند همزمان درباره مدیریت حافظه، عملکرد و سطوح مختلف انتزاع فکر کنند. این انعطاف‌پذیری ذهنی برای طراحی معماری نرم‌افزار مقاوم و حل مسائل پیچیده حیاتی است.

تأثیر بر نوآوری. فقدان آشنایی با این مفاهیم بنیادی می‌تواند نوآوری را محدود کند. برای مثال، الگوریتم MapReduce که اساس مقیاس‌پذیری گوگل است، مستقیماً از مفاهیم برنامه‌نویسی تابعی (Map و Reduce) گرفته شده است. شرکت‌هایی که توسعه‌دهندگانشان این پیش‌زمینه را ندارند، ممکن است در اختراع یا حتی درک چنین الگوهایی دچار مشکل شوند.

۴. توسعه نرم‌افزار یک هنر است که از علوم کامپیوتر متمایز است و مهارت‌های عملی و ارتباطی روشن می‌طلبد.

توانایی نوشتن واضح درباره موضوعات فنی تفاوت بین یک برنامه‌نویس منفرد و یک رهبر است.

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

اهمیت نوشتن. توانایی نوشتن و ارتباط واضح برای برنامه‌نویسان حیاتی است. این مهارت امکان تبلیغ (مانند لینوس توروالدز با لینوکس)، متقاعدسازی در سازمان، نوشتن مشخصات و مستندات روشن و همکاری مؤثر را فراهم می‌کند. برنامه‌نویسانی که خوب می‌نویسند، نفوذ بیشتری دارند و برای کسب‌وکار ارزشمندترند.

چالش‌های درون‌سازمانی. بسیاری از مشاغل برنامه‌نویسی مربوط به «نرم‌افزار داخلی» در شرکت‌های غیرنرم‌افزاری است. این نقش‌ها ممکن است رضایت‌بخش نباشند زیرا:

  • کار اغلب موقتی و نه زیباست.
  • پروژه‌ها پس از رسیدن به حد «کافی خوب» متوقف می‌شوند و فرصت صیقل دادن ندارند.
  • برنامه‌نویسان ممکن است نسبت به کارکنان اصلی کسب‌وکار جایگاه پایین‌تری داشته باشند.
    شرکت‌های محصول‌محور که نرم‌افزار هسته کسب‌وکارشان است، فرصت‌های بیشتری برای افتخار به هنر و پیشرفت شغلی فراهم می‌کنند.

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

نرم‌افزاری که کاری عالی انجام می‌دهد و مردم واقعاً می‌خواهند انجام دهند، ممکن است به‌شدت غیرقابل استفاده باشد و با این حال موفق شود.

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

طراحی رابط اجتماعی. برای نرم‌افزارهایی که تعامل انسان با انسان را تسهیل می‌کنند (شبکه‌های اجتماعی، انجمن‌ها)، «رابط اجتماعی» حیاتی است. این شامل طراحی نحوه تأثیر نرم‌افزار بر رفتار کاربران و دینامیک جامعه است. هدف کمک به موفقیت جامعه است، حتی اگر به معنای محدود کردن کاربران فردی باشد (مثلاً پذیرش اسپم جعلی).

جذابیت عاطفی اهمیت دارد. نرم‌افزار عالی اغلب «نت‌های بالا» را می‌زند که با کاربران از نظر عاطفی ارتباط برقرار می‌کند. این شامل:

  • زیبایی‌شناسی و زیبایی (مانند طراحی آی‌پاد)
  • طنز و شخصیت (مانند متن وب‌سایت Winamp)
  • احساس کنترل کاربران (مانند بازخورد چرخ اسکرول آی‌پاد)
    این عناصر معمولاً نتیجه استعداد برترند و تیم‌های متوسط به سختی می‌توانند آن‌ها را تکرار کنند، که مزیت رقابتی پایدار ایجاد می‌کند.

۶. حل مسائل دشوار و پیچیده جایی است که ارزش واقعی کسب‌وکار و مزیت رقابتی نهفته است.

بازار برای راه‌حل‌های مسائل پیچیده پول می‌دهد، نه برای راه‌حل‌های مسائل آسان.

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

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

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

۷. برنامه‌ریزی واقع‌بینانه مبتنی بر داده برای مدیریت دامنه و عرضه محصولات موفق حیاتی است.

شما می‌خواهید وقت خود را صرف کارهایی کنید که بیشترین بازده را دارند. و نمی‌توانید بفهمید بازده چقدر هزینه دارد مگر اینکه بدانید چقدر زمان می‌برد.

توسعه‌دهندگان با برنامه‌ریزی مقاومت می‌کنند. برنامه‌نویسان اغلب از ساخت برنامه زمانی خوششان نمی‌آید و آن را غیرواقعی یا کاری خسته‌کننده می‌دانند. اما برنامه‌ها برای تصمیم‌گیری آگاهانه درباره اولویت‌بندی ویژگی‌ها و تخصیص منابع ضروری‌اند. بدون برنامه، پروژه‌ها معمولاً به تعویق می‌افتند.

برنامه‌ریزی مبتنی بر شواهد (EBS). روشی قابل اعتماد شامل تقسیم کار به وظایف کوچک (کمتر از ۱۶ ساعت)، ثبت زمان واقعی صرف شده (شامل وقفه‌ها) برای محاسبه «سرعت» فردی (برآورد/واقعی) و استفاده از این داده‌های تاریخی در شبیه‌سازی مونت‌کارلو برای پیش‌بینی بازه‌های زمانی احتمالی عرضه با سطوح اطمینان است. این روش سوگیری‌های برآورد فردی و عوامل غیرقابل پیش‌بینی را در نظر می‌گیرد.

برنامه‌ها مجبور به حذف می‌شوند. یکی از مزایای کلیدی برنامه‌ریزی واقع‌بینانه این است که نشان می‌دهد آیا ویژگی‌های برنامه‌ریزی شده بیش از زمان موجود است یا خیر. این امر به حذف ویژگی‌های غیرضروری کمک می‌کند و اطمینان می‌دهد که مهم‌ترین ویژگی‌ها اولویت دارند و محصول زودتر عرضه می‌شود. ویژگی‌هایی که به دلیل فشار برنامه حذف می‌شوند معمولاً کم‌اهمیت‌ترین‌ها هستند.

۸. بازسازی و بهبود کد موجود معمولاً بهتر از شروع از صفر است.

شرکتی ضعیف‌تر، شاید شرکتی که توسط مدیری از صنعت تحویل بسته‌های سریع اداره می‌شود، ممکن است تصمیم بگیرد کد را کنار بگذارد و از نو شروع کند.

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

پاک‌سازی مؤثر است. رویکرد بهتر «پاک‌سازی» یا بازسازی کد موجود است. این شامل انجام تغییرات کوچک و منطقی برای بهبود ساختار داخلی، خوانایی و قابلیت نگهداری بدون افزودن ویژگی جدید یا شکستن عملکرد موجود است. این فرایند می‌تواند به‌تدریج و قابل پیش‌بینی انجام شود.

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

۹. قیمت‌گذاری نرم‌افزار نیازمند درک دینامیک بازار، ارزش مشتری و استراتژی بلندمدت است.

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

منحنی تقاضا نزولی است. به‌طور کلی، هرچه قیمت بالاتر باشد، مشتریان کمتری خرید می‌کنند. هدف، حداکثر کردن
[پاسخ ناقص است]

آخرین به‌روزرسانی::

Want to read the full book?

نقد و بررسی

4.05 از 5
میانگین از 546 امتیازات از Goodreads و Amazon.

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

Your rating:
4.46
30 امتیازها

درباره نویسنده

جوئل اسپولسکی، توسعه‌دهنده‌ی نرم‌افزار، نویسنده و کارآفرینی برجسته است. او یکی از بنیان‌گذاران شرکت Fog Creek Software و وب‌سایت Stack Overflow به شمار می‌رود و به‌واسطه‌ی وبلاگ تأثیرگذار خود با عنوان «Joel on Software» شناخته شده است. سبک نگارش اسپولسکی به دلیل وضوح، طنز و توانایی‌اش در توضیح مفاهیم پیچیده به زبان ساده، بسیار مورد تحسین قرار گرفته است. او از تجربه‌ی گسترده‌اش در صنعت نرم‌افزار، از جمله دوران فعالیتش در مایکروسافت، بهره می‌برد تا دیدگاه‌هایی ارزشمند درباره‌ی برنامه‌نویسی، مدیریت و استراتژی‌های کسب‌وکار ارائه دهد. کتاب‌های اسپولسکی، از جمله «More Joel on Software»، مجموعه‌ای از پست‌های محبوب وبلاگ او هستند که مشاوره‌های عملی و ایده‌های تأمل‌برانگیزی را برای حرفه‌ای‌های نرم‌افزار و کارآفرینان فراهم می‌کنند. آثار او تأثیر قابل‌توجهی بر جامعه‌ی توسعه‌دهندگان نرم‌افزار داشته و او را به چهره‌ای محترم در این حوزه تبدیل کرده است.

Listen
Now playing
More Joel on Software
0:00
-0:00
Now playing
More Joel on Software
0:00
-0:00
1x
Voice
Speed
Dan
Andrew
Michelle
Lauren
1.0×
+
200 words per minute
Queue
Home
Swipe
Library
Get App
Create a free account to unlock:
Recommendations: Personalized for you
Requests: Request new book summaries
Bookmarks: Save your favorite books
History: Revisit books later
Ratings: Rate books & see your ratings
200,000+ readers
Try Full Access for 7 Days
Listen, bookmark, and more
Compare Features Free Pro
📖 Read Summaries
All summaries are free to read in 40 languages
🎧 Listen to Summaries
Listen to unlimited summaries in 40 languages
❤️ Unlimited Bookmarks
Free users are limited to 4
📜 Unlimited History
Free users are limited to 4
📥 Unlimited Downloads
Free users are limited to 1
Risk-Free Timeline
Today: Get Instant Access
Listen to full summaries of 73,530 books. That's 12,000+ hours of audio!
Day 4: Trial Reminder
We'll send you a notification that your trial is ending soon.
Day 7: Your subscription begins
You'll be charged on Aug 3,
cancel anytime before.
Consume 2.8x More Books
2.8x more books Listening Reading
Our users love us
200,000+ readers
"...I can 10x the number of books I can read..."
"...exceptionally accurate, engaging, and beautifully presented..."
"...better than any amazon review when I'm making a book-buying decision..."
Save 62%
Yearly
$119.88 $44.99/year
$3.75/mo
Monthly
$9.99/mo
Start a 7-Day Free Trial
7 days free, then $44.99/year. Cancel anytime.
Scanner
Find a barcode to scan

Settings
General
Widget
Loading...