Сүм ба Зах

Given enough eyeballs, all bugs are shallow.
—Linus Torvalds
Creative brains are a valuable, limited resource. They shouldn't be wasted on re-inventing the wheel when there are so many fascinating new problems waiting out there.
—Eric S. Raymond
When you lose interest in a program, your last duty to it is to hand it off to a competent successor.
—Eric S. Raymond, Cathedral and the Bazaar: Musings on Linux and Open Source by an Accidental Revolutionary

Нээлттэй эхийг тууштай өмгөөлөгч Eric S.Raymond бээр Linux-ийн эцэг Linus Torvalds -аас үлгэр аван, өөрийн анхны нээлттэй эх бүхий програм болох Fetchmail-ийг жишээ болгон нээлттэй эхийн хөгжүүлэлт хийх явцдаа олсон сургамжуудаа бичсэн Сүм ба Зах(The Cathedral and the Bazaar) хэмээх өгүүллийг уншлаа. Нээлттэй хөгжүүлэлтийн учир ухааныг тайлбарласан анхны гэж болох энэ өгүүлэл аль 1997 онд бичигдсан байхад одоо л уншиж байгаа минь харамсалтай санагдлаа. Эх хэл дээрээ эль өгүүллийг орчуулж нийтийн хүртээл болгох хүсэл байвч, өөрийн хэлний чадварыг голдог тул(зөвхөн англи ч биш бас монгол), блогууд шигээ молхи толхи юм болчих вий гэсний учир, илүү чадвартай нэгэнд бүрэн орчуулгыг үлдээгээд, энд зөвхөн дараа эргэн харж байхын тул үндсэн зарчмуудыг тоймлон тэмдэглэхээр шийдлээ.

  1. Every good work of software starts by scratching a developer’s personal itch. -– Ихэнх сайн програмууд хөгжүүлэгчийн өөрийн хэрэгцээнээс үүдэлтэй байдаг.
  2. Good programmers know what to write. Great ones know what to rewrite (and reuse). -– Програм бичихээсээ өмнө бусад адил төстэй хэрэгсэлүүдийг судлаад боломжын нэг дээр нь суурилж ажлаа эхэл.
  3. “Plan to throw one away; you will, anyhow.’’ (Fred Brooks, The Mythical Man-Month, Chapter 11) -– Эхлээд хийсэн зүйл буруу байж болно, гэвч үүнээс илүү хийж болно гэдгийг ойлгоход туслана. Иймд шаардлагатай бол хийж байснаа хаяад шинээр эхлэхээс бүү шантар.
  4. If you have the right attitude, interesting problems will find you.
  5. When you lose interest in a program, your last duty to it is to hand it off to a competent successor.-– Дээрх хоёрын утга нь, аливаа хөгжүүлэлт хэн илүү хүсэл сонирхолтой хүний гарт явагдах ёстой.
  6. Treating your users as co-developers is your least-hassle route to rapid code improvement and effective debugging. -– Нээлттэй эхийн ертөнцөд хэрэглэгчид бол зүгээр товч дарж ажиллуулах жирийн хэрэглэгчид биш, харин кодыг тань сайжруулж, шалгах хамтран хөгжүүлэгчид юм.
  7. Release early. Release often. And listen to your customers. -– Аль болох түргэн, ойр ойрхон рилийз гарга, алдаа сэв байсан ч рилийзийг гаргах нь л чухал. Ингэснээр хэрэглэгчтэйгээ улам нягт байж, үргэлж алхаа нийлүүлж урагшлах болно.
  8. Given a large enough beta-tester and co-developer base, almost every problem will be characterized quickly and the fix obvious to someone. -– Олон хөгжүүлэгчид, олон тэстлэгчид байх тусам алдаа хурдан олдож хурдан засагдах болно. Алдааг нэг нь олж байхад, нэг нь ойлгож, нөгөө нэг нь засч л байдаг, нээлттэй эхийн ертөнцөд алдаа сэв гэдэг асуудал биш ээ гэж…
  9. Smart data structures and dumb code works a lot better than the other way around. -– Өгөгдлиийг ухаалгаар загварчилвал код хялбархан болно.
  10. If you treat your beta-testers as if they’re your most valuable resource, they will respond by becoming your most valuable resource. -– Тэстлэгчид тань алдааг олж өгөөд зогсохгүй, яаж засахыг ч заагаад өгнө.
  11. The next best thing to having good ideas is recognizing good ideas from your users. Sometimes the latter is better. -– Хэрэглэгчдээс гарах сайхан санааг тусгаж авах хэрэгтэй.
  12. Often, the most striking and innovative solutions come from realizing that your concept of the problem was wrong. -– Асуудлын талаарх ойлголтоо буруу байсныг мэдсэнээр сайн шийдэлийг олох нь элбэг байдаг.
  13. “Perfection (in design) is achieved not when there is nothing more to add, but rather when there is nothing more to take away.’’ -– Нэмэх зүйл байхгүй, мөн хасах ч юм үлдээгүй үед дизайн төгс болдог. Иймд онц хэрэггүй зүйлсийг хас.
  14. Any tool should be useful in the expected way, but a truly great tool lends itself to uses you never expected. -– Үнэхээр хэрэгтэй багаж яг санаснаар ажиллах ёстой, харин үнэхээр мундаг багаж бол хэзээ ч төсөөлж байгаагүй байдлаар ч хэрэглэх боломжыг олгодог.
  15. When writing gateway software of any kind, take pains to disturb the data stream as little as possible—and never throw away information unless the recipient forces you to! -– Дамжуулагч програм бичихдээ дамжуулж байгаа өгөгдлийг аль болох хөндөхгүй байхыг хичээ.
  16. When your language is nowhere near Turing-complete, syntactic sugar can be your friend. -– Уншаад ойлгохоор түлхүүр үг, нэршлийг сонго.
  17. A security system is only as secure as its secret. Beware of pseudo-secrets. -– Мэдээллийг боловсруулж байгаа систэм нь мэдээлэлтэйгээ адилхан нууц байх ёстой. Кодон дотроо нууцлалыг бүү хийж өг.
  18. To solve an interesting problem, start by finding a problem that is interesting to you. -– Ямар нэг сонирхолтой асуудал шийдмээр байвал, өөрөө юу сонирхож байгаагаа бод.
  19. Provided the development coordinator has a communications medium at least as good as the Internet, and knows how to lead without coercion, many heads are inevitably better than one. -– Холбоо харилцааны сайн орчин бүрдүүлж чадсан байхад уламжлалт төвлөрсөн архитектурчлалаас олон ургалч хөгжүүлэлтийн арга барил илүү.

Ер нь бодит зүйл дээр тулж бичсэн зүйл уншихад шингэцтэй, хэрэгтэй мэдлэг болж үлддэг гэж боддог. Миний энэ тэмдэглэл утга агуулгыг нь бүрэн илэрхийлж чадахгүй, тэгэхийг ч зориогүй тул, эх өгүүллийг нь уншихыг хүсье.

Эх сурвалжууд: