حالت تاریک
پیوست الف — منابع
تنها دلیلی که توانستیم در این کتاب این همه مسیر را پوشش دهیم این بود که بسیاری از موضوعاتمان را از ارتفاع بالا نگاه کردیم. اگر پوشش عمیقی که شایسته بود میدادیم، کتاب ده برابر طولانیتر میشد.
کتاب را با پیشنهاد این آغاز کردیم که برنامهنویسان عملگرا باید همیشه در حال یادگیری باشند. در این پیوست منابعی را فهرست کردهایم که ممکن است در این فرایند به شما کمک کنند.
در بخش انجمنهای حرفهای، جزئیات IEEE و ACM را میدهیم. توصیه میکنیم برنامهنویسان عملگرا به یکی (یا هر دو) از این انجمنها بپیوندند. سپس در ساختن یک کتابخانه، نشریات، کتابها و وبسایتهایی را برجسته میکنیم که بهنظرمان اطلاعات باکیفیت و مرتبط دارند (یا صرفاً سرگرمکنندهاند).
در سراسر کتاب به منابع نرمافزاری زیادی اشاره کردیم که از طریق اینترنت در دسترساند. در بخش منابع اینترنتی، نشانیهای این منابع را همراه با توضیح کوتاهی از هر کدام فهرست میکنیم. با این حال، ماهیت وب این است که بسیاری از این پیوندها احتمالاً تا زمانی که این کتاب را میخوانید منقضی شدهاند. میتوانید یکی از موتورهای جستجوی متعدد را برای پیوند بهروزتر امتحان کنید، یا به وبسایت ما در www.pragmaticprogrammer.com بروید و بخش پیوندهایمان را ببینید.
سرانجام، این پیوست شامل کتابنامهٔ کتاب است.
انجمنهای حرفهای
دو انجمن حرفهای درجهٔ یک برای برنامهنویسان وجود دارد: Association for Computing Machinery (ACM)¹ و IEEE Computer Society.² توصیه میکنیم همهٔ برنامهنویسان به یکی (یا هر دو) از این انجمنها تعلق داشته باشند. علاوه بر این، توسعهدهندگانی که خارج از ایالات متحده هستند ممکن است بخواهند به انجمنهای ملی خود بپیوندند، مانند BCS در بریتانیا.
عضویت در یک انجمن حرفهای مزایای بسیاری دارد. کنفرانسها و جلسات محلی فرصتهای عالی برای ملاقات با افراد همعلاقه میدهند، و گروههای علاقهٔ ویژه و کمیتههای فنی به شما امکان میدهند در تعیین استانداردها و راهنماهایی که در سراسر جهان استفاده میشوند مشارکت کنید. از نشریاتشان هم بسیار بهره میبرید، از بحثهای سطح بالا دربارهٔ رویهٔ صنعت تا نظریهٔ محاسباتی سطح پایین.
¹ ACM Member Services, PO Box 11414, New York, NY 10286, USA. www.acm.org
² 1730 Massachusetts Avenue NW, Washington, DC 20036-1992, USA. www.computer.org
ساختن یک کتابخانه
ما طرفدار خواندن جدی هستیم. همانطور که در سبد دانش شما (صفحهٔ ۱۲) یادداشت کردیم، یک برنامهنویس خوب همیشه در حال یادگیری است. بهروز ماندن با کتابها و نشریات میتواند کمک کند. در اینجا برخی از آنهایی که دوست داریم آمده است.
نشریات
اگر مثل ما باشید، مجلات و نشریات قدیمی را نگه میدارید تا آنقدر انباشته شوند که پایینترینها به ورقهای الماس تبدیل شوند. این یعنی ارزش دارد نسبتاً گزینشی باشید. در اینجا چند نشریهای که میخوانیم.
IEEE Computer. برای اعضای IEEE Computer Society ارسال میشود؛ Computer تمرکز عملی دارد اما از نظریه نمیترسد. برخی شمارهها حول یک موضوع سازماندهی شدهاند، در حالی که برخی دیگر صرفاً مجموعهای از مقالات جالباند. این مجله نسبت سیگنال به نویز خوبی دارد.
IEEE Software. انتشار دوماههٔ دیگری از IEEE Computer Society که به متخصصان نرمافزار هدف دارد.
Communications of the ACM. مجلهٔ اصلی که همهٔ اعضای ACM دریافت میکنند؛ CACM دههها استاندارد صنعت بوده و احتمالاً بیش از هر منبع دیگری مقالات بنیادین منتشر کرده است.
SIGPLAN. تولیدشده توسط ACM Special Interest Group on Programming Languages، SIGPLAN افزودنی اختیاری به عضویت ACM شماست. اغلب برای انتشار مشخصات زبانها استفاده میشود، همراه با مقالاتی برای هر کسی که دوست دارد عمیق به برنامهنویسی نگاه کند.
Dr. Dobbs Journal. مجلهٔ ماهانهای که با اشتراک و در دکههای خبری در دسترس است؛ Dr. Dobbs عجیبوغریب است، اما مقالاتی از سطح عملی بیتبهبیت تا نظریهٔ سنگین دارد.
The Perl Journal. اگر Perl را دوست دارید، احتمالاً باید به The Perl Journal (www.tpj.com) مشترک شوید.
Software Development Magazine. مجلهٔ ماهانهای با تمرکز بر مسائل کلی مدیریت پروژه و توسعهٔ نرمافزار.
روزنامههای تجاری هفتگی
چند روزنامهٔ هفتگی برای توسعهدهندگان و مدیرانشان منتشر میشود. این روزنامهها عمدتاً مجموعهای از بیانیههای مطبوعاتی شرکتها هستند که بهصورت مقاله پوشانده شدهاند. با این حال، محتوا هنوز ارزشمند است — به شما امکان میدهد از آنچه میگذرد مطلع بمانید، از اعلام محصولات جدید عقب نمانید، و اتحادهای صنعتی را همانطور که شکل میگیرند و میشکنند دنبال کنید. اما انتظار پوشش فنی عمیق زیادی نداشته باشید.
کتابها
کتابهای محاسباتی میتوانند گران باشند، اما با انتخاب دقیق سرمایهگذاری ارزشمندیاند. ممکن است بخواهید عناوین Pragmatic Bookshelf ما را در http://pragmaticprogrammer.com ببینید. علاوه بر این، در اینجا دستهای از بسیاری کتابهای دیگری که دوست داریم.
تحلیل و طراحی
Object-Oriented Software Construction, 2nd Edition. کتاب حماسی Bertrand Meyer دربارهٔ اصول توسعهٔ شیگرا، همه در حدود ۱۳۰۰ صفحه [Mey97b].
Design Patterns. الگوی طراحی راهی برای حل یک کلاس خاص از مسائل در سطحی بالاتر از اصطلاح زبان برنامهنویسی را توصیف میکند. این کتاب اکنون کلاسیک [GHJV95] از Gang of Four، ۲۳ الگوی طراحی پایه از جمله Proxy، Visitor و Singleton را شرح میدهد.
Analysis Patterns. گنجینهای از الگوهای معماری سطح بالا گرفتهشده از پروژههای واقعی متنوع و تقطیرشده در قالب کتاب. راهی نسبتاً سریع برای بهدست آوردن بینش سالها تجربهٔ مدلسازی [Fow96].
تیمها و پروژهها
The Mythical Man Month. کلاسیک Fred Brooks دربارهٔ خطرات سازماندهی تیمهای پروژه، اخیراً بهروز شده [Bro95].
Dynamics of Software Development. مجموعهای از مقالات کوتاه دربارهٔ ساخت نرمافزار در تیمهای بزرگ، با تمرکز بر دینامیک بین اعضای تیم و بین تیم و بقیهٔ جهان [McC95].
Surviving Object-Oriented Projects: A Manager's Guide. «گزارشهای از خط مقدمه» Alistair Cockburn بسیاری از خطرات و دامهای مدیریت یک پروژهٔ OO — بهویژه اولین پروژهتان — را نشان میدهد. آقای Cockburn نکات و تکنیکهایی برای عبور از رایجترین مشکلات ارائه میدهد [Coc97b].
محیطهای خاص
Unix. W. Richard Stevens چندین کتاب عالی دارد از جمله Advanced Programming in the Unix Environment و کتابهای Unix Network Programming [Ste92, Ste98, Ste99].
Windows. Win32 System Services Marshall Brain [Bra95] مرجع مختصری برای APIهای سطح پایین است. Programming Windows Charles Petzold [Pet98] کتاب مقدس توسعهٔ GUI ویندوز است.
C++. بهمحض اینکه خود را در یک پروژهٔ C++ یافتید، نه راه بروید بلکه بدویید به کتابفروشی و Effective C++ Scott Meyer و احتمالاً More Effective C++ [Mey97a, Mey96] را بگیرید. برای ساخت سیستمهای با اندازهٔ قابلتوجه، به Large-Scale C++ Software Design John Lakos [Lak96] نیاز دارید. برای تکنیکهای پیشرفته، به Advanced C++ Programming Styles and Idioms Jim Coplien [Cop92] رجوع کنید.
علاوه بر این، مجموعهٔ Nutshell O'Reilly (www.ora.com) بررسیهای سریع و جامعی از موضوعات و زبانهای متفرقه مانند perl، yacc، sendmail، درونویندوز و عبارات باقاعده ارائه میدهد.
وب
یافتن محتوای خوب در وب سخت است. در اینجا چند پیوندی که حداقل هفتهای یکبار بررسی میکنیم.
Slashdot. با شعار «اخبار برای نردها. چیزهایی که اهمیت دارند»، Slashdot یکی از خانههای اینترنتی جامعهٔ Linux است. علاوه بر بهروزرسانیهای منظم اخبار Linux، سایت اطلاعاتی دربارهٔ فناوریهای جالب و مسائلی که بر توسعهدهندگان اثر میگذارند ارائه میدهد. www.slashdot.org
Cetus Links. هزاران پیوند در موضوعات شیگرا. www.cetus-links.org
WikiWikiWeb. Portland Pattern Repository و بحث الگوها. نه فقط منبعی عالی، بلکه آزمایشی جالب در ویرایش جمعی ایدهها. www.c2.com
منابع اینترنتی
پیوندهای زیر به منابعی در اینترنت اشاره دارند. در زمان نگارش معتبر بودند، اما (با توجه به ماهیت شبکه) ممکن است تا زمان خواندن شما منقضی شده باشند. در این صورت میتوانید جستجوی عمومی برای نام فایلها انجام دهید، یا به وبسایت Pragmatic Programmer (www.pragmaticprogrammer.com) بیایید و پیوندهای ما را دنبال کنید.
ویرایشگرها
Emacs و vi تنها ویرایشگرهای چندسکویی نیستند، اما آزادانه در دسترس و پراستفادهاند. مرور سریعی از مجلهای مانند Dr. Dobbs چند جایگزین تجاری نشان میدهد.
Emacs
هم Emacs و هم XEmacs روی سکوهای Unix و Windows در دسترساند.
[ URL 1] ویرایشگر Emacs www.gnu.org نهایت ویرایشگرهای بزرگ، حاوی هر ویژگیای که هر ویرایشگری داشته است؛ Emacs منحنی یادگیری تقریباً عمودی دارد، اما وقتی آن را مسلط شوید سخاوتمندانه پاداش میدهد. همچنین خوانندهٔ ایمیل و اخبار، دفترچهٔ آدرس، تقویم و دفتر خاطرات، بازی ماجراجویی و غیره عالی میسازد.
[ URL 2] ویرایشگر XEmacs www.xemacs.org چند سال پیش از Emacs اصلی منشعب شد؛ گفته میشود XEmacs درونساخت تمیزتر و رابط کاربری زیباتری دارد.
vi
حداقل ۱۵ کلون مختلف vi وجود دارد. از میان آنها، vim احتمالاً به بیشترین سکوها پورت شده و بنابراین اگر خود را در محیطهای بسیار متفاوت مییابید انتخاب خوبی برای ویرایشگر است.
[ URL 3] ویرایشگر Vimftp://ftp.fu-berlin.de/misc/editors/vim از مستندات: «بهبودهای زیادی نسبت به vi دارد: undo چندسطحی، چند پنجره و بافر، برجستهسازی نحو، ویرایش خط فرمان، تکمیل نام فایل، راهنمای آنلاین، انتخاب بصری و غیره.»
[ URL 4] ویرایشگر elvis elvis.the-little-red-haired-girl.org کلون پیشرفتهٔ vi با پشتیبانی از X.
[ URL 5] Emacs Viper Modehttp://www.cs.sunysb.edu/~kifer/emacs.html Viper مجموعهای از ماکروهاست که Emacs را شبیه vi میکند. برخی ممکن است در حکمت تبدیل بزرگترین ویرایشگر جهان به شبیهساز ویرایشگری که قوتش فشردگی است تردید کنند. دیگران میگویند بهترین هر دو جهان را ترکیب میکند.
کامپایلرها، زبانها و ابزارهای توسعه
[ URL 6] کامپایلر GNU C/C++ www.fsf.org/software/gcc/gcc.html یکی از محبوبترین کامپایلرهای C و C++ روی کرهٔ زمین. Objective-C را هم پشتیبانی میکند. (در زمان نگارش، پروژهٔ egcs که قبلاً از gcc جدا شده بود در حال ادغام مجدد بود.)
[ URL 7] زبان Java از Sun java.sun.com خانهٔ Java، شامل SDKهای قابل دانلود، مستندات، آموزشها، اخبار و بیشتر.
[ URL 8] صفحهٔ اصلی زبان Perl www.perl.com O'Reilly این مجموعه منابع مرتبط با Perl را میزبانی میکند.
[ URL 9] زبان Python www.python.org زبان برنامهنویسی شیگرا Python تفسیرشده و تعاملی است، با نحوی کمی عجیب و پیروان گسترده و وفادار.
[ URL 10] SmallEiffel SmallEiffel.loria.fr کامپایلر GNU Eiffel روی هر ماشینی که کامپایلر ANSI C و محیط اجرای Posix دارد اجرا میشود.
[ URL 11] ISE Eiffel www.eiffel.com Interactive Software Engineering مبدع Design by Contract است و کامپایلر تجاری Eiffel و ابزارهای مرتبط میفروشد.
[ URL 12] Sather www.icsi.berkeley.edu/~sather زبان آزمایشی که از Eiffel بیرون آمد. هدفش پشتیبانی از توابع مرتبهٔ بالاتر و انتزاع تکرار بهاندازهٔ Common Lisp، CLU یا Scheme و کارایی بهاندازهٔ C، C++ یا Fortran است.
[ URL 13] VisualWorks www.cincom.com خانهٔ محیط Smalltalk VisualWorks. نسخههای غیرتجاری برای Windows و Linux بهصورت رایگان در دسترساند.
[ URL 14] محیط زبان Squeak squeak.cs.uiuc.edu Squeak پیادهسازی آزاد و قابلحمل Smalltalk-80 است که با خودش نوشته شده؛ میتواند خروجی کد C برای کارایی بالاتر تولید کند.
[ URL 15] زبان برنامهنویسی TOM www.gerbil.org/tom زبانی بسیار پویا با ریشه در Objective-C.
[ URL 16] پروژهٔ Beowulf www.beowulf.org پروژهای که رایانههای پرکارایی از خوشههای شبکهای جعبههای ارزان Linux میسازد.
[ URL 17] iContract — ابزار Design by Contract برای Java www.reliable-systems.com رسمیت Design by Contract شامل پیششرطها، پسشرطها و ناوردیها، بهصورت پیشپردازنده برای Java پیادهسازی شده. وراثت را رعایت میکند، کوانتیفایرهای وجودی را پیاده میکند و بیشتر.
[ URL 18] Nana — ثبت وقایع و Assertion برای C و C++ www.gnu.org/software/nana/nana.html پشتیبانی بهبودیافته برای بررسی assertion و ثبت وقایع در C و C++. همچنین مقداری پشتیبانی برای Design by Contract فراهم میکند.
[ URL 19] DDD — دیباگر نمایش دادهhttp://www.gnu.org/software/ddd/ رابط گرافیکی آزاد برای دیباگرهای Unix.
[ URL 20] Refactoring Browser John Brant st-www.cs.uiuc.edu/users/brant/Refactory مرورگر refactoring محبوب برای Smalltalk.
[ URL 21] تولیدکنندهٔ مستندات DOC++ www.zib.de/Visual/software/doc++/index.html DOC++ سیستم مستندسازی برای C/C++ و Java است که هم خروجی LATEX و هم HTML برای مرور آنلاین پیشرفتهٔ مستندات شما مستقیماً از هدر C++ یا فایلهای کلاس Java تولید میکند.
[ URL 22] xUnit — چارچوب آزمون واحد www.XProgramming.com مفهومی ساده اما قدرتمند؛ چارچوب آزمون واحد xUnit بستر یکنواختی برای آزمون نرمافزار نوشتهشده به زبانهای گوناگون فراهم میکند.
[ URL 23] زبان Tcl www.scriptics.com Tcl («زبان فرمان ابزار») زبان اسکریپتنویسی است که برای جاسازی آسان در برنامه طراحی شده.
[ URL 24] Expect — خودکارسازی تعامل با برنامهها expect.nist.gov افزونهای ساختهشده روی Tcl [URL 23]؛ expect به شما امکان میدهد تعامل با برنامهها را اسکریپت کنید. علاوه بر کمک به نوشتن فایلهای فرمان که (مثلاً) فایل از سرورهای دور میگیرند یا قدرت پوستهتان را گسترش میدهند، expect هنگام انجام آزمون رگرسیون مفید است. نسخهٔ گرافیکی expectk به شما امکان میدهد برنامههای غیر-GUI را با رابط پنجرهای بپوشانید.
[ URL 25] T Spaces www.almaden.ibm.com/cs/TSpaces از صفحهٔ وبشان: «T Spaces بافر ارتباط شبکه با قابلیتهای پایگاه داده است. ارتباط بین برنامهها و دستگاهها در شبکهای از رایانهها و سیستمعاملهای ناهمگن را ممکن میسازد. T Spaces خدمات ارتباط گروهی، خدمات پایگاه داده، خدمات انتقال فایل مبتنی بر URL و خدمات اعلان رویداد ارائه میدهد.»
[ URL 26] javaCC — کامپایلر-کامپایلر Java www.webgain.com/products/java_cc تولیدکنندهٔ parser که بهطور نزدیک به زبان Java متصل است.
[ URL 27] تولیدکنندهٔ Parser bison www.gnu.org/software/bison/bison.html bison مشخصات گرامر ورودی را میگیرد و از آن کد منبع C یک parser مناسب تولید میکند.
[ URL 28] SWIG — تولیدکنندهٔ سادهٔ Wrapper و Interface www.swig.org SWIG ابزار توسعهٔ نرمافزار است که برنامههای نوشتهشده به C، C++ و Objective-C را با زبانهای برنامهنویسی سطح بالای گوناگون مانند Perl، Python و Tcl/Tk و همچنین Java، Eiffel و Guile وصل میکند.
[ URL 29] Object Management Group, Inc. www.omg.org OMG متولی مشخصات گوناگون برای تولید سیستمهای توزیعشدهٔ مبتنی بر شی است. کارشان شامل Common Object Request Broker Architecture (CORBA) و Internet Inter-ORB Protocol (IIOP) است. ترکیب این مشخصات امکان ارتباط اشیاء با یکدیگر را میدهد، حتی اگر به زبانهای مختلف نوشته شده و روی انواع مختلف رایانه اجرا شوند.
ابزارهای Unix زیر DOS
[ URL 30] ابزارهای توسعهٔ UWIN www.gtlinc.com/uwin.html Global Technologies, Inc., Old Bridge, NJ بستهٔ UWIN کتابخانههای پیوند پویا (DLL) ویندوز را فراهم میکند که بخش بزرگی از رابط کتابخانهٔ سطح C یونیکس را شبیهسازی میکنند. با این رابط، GTL تعداد زیادی ابزار خط فرمان یونیکس را به ویندوز پورت کرده است. همچنین [URL 31] را ببینید.
[ URL 31] ابزارهای Cygnus Cygwin sourceware.cygnus.com/cygwin/ Cygnus Solutions, Sunnyvale, CA بستهٔ Cygnus نیز رابط کتابخانهٔ C یونیکس را شبیهسازی میکند و مجموعهٔ گستردهای از ابزارهای خط فرمان یونیکس را زیر سیستمعامل ویندوز فراهم میسازد.
[ URL 32] Perl Power Tools www.perl.com/pub/language/ppt/ پروژهای برای پیادهسازی مجدد مجموعهٔ فرمان کلاسیک یونیکس در Perl، که فرمانها را روی همهٔ سکوهایی که Perl را پشتیبانی میکنند (و آن سکوها زیادند) در دسترس میگذارد.
ابزارهای کنترل کد منبع
[ URL 33] RCS — Revision Control System www.cs.purdue.edu/homes/trinkle/RCS/ سیستم کنترل کد منبع GNU برای Unix و Windows NT.
[ URL 34] CVS — Concurrent Version System www.cvshome.com سیستم کنترل کد منبع آزاد برای Unix و Windows NT. RCS را با پشتیبانی از مدل کلاینت-سرور و دسترسی همزمان به فایلها گسترش میدهد.
[ URL 35] Aegis — مدیریت پیکربندی مبتنی بر تراکنشhttp://www.canb.auug.org.au/~millerp/aegis.html ابزار کنترل نسخهٔ فرایندمحور که استانداردهای پروژه (مانند تأیید اینکه کد check-inشده آزمونها را میگذراند) را تحمیل میکند.
[ URL 36] ClearCase www.rational.com کنترل نسخه، مدیریت فضای کاری و ساخت، کنترل فرایند.
[ URL 37] MKS Source Integrity www.mks.com کنترل نسخه و مدیریت پیکربندی. برخی نسخهها ویژگیهایی دارند که به توسعهدهندگان دور امکان میدهند همزمان روی همان فایلها کار کنند (شبیه CVS).
[ URL 38] PVCS Configuration Management www.merant.com سیستم کنترل کد منبع، بسیار محبوب برای سیستمهای ویندوز.
[ URL 39] Visual SourceSafe www.microsoft.com سیستم کنترل نسخه که با ابزارهای توسعهٔ بصری مایکروسافت یکپارچه میشود.
[ URL 40] Perforce www.perforce.com سیستم مدیریت پیکربندی نرمافزار کلاینت-سرور.
ابزارهای دیگر
[ URL 41] WinZip — ابزار بایگانی برای ویندوز www.winzip.com Nico Mak Computing, Inc., Mansfield, CT ابزار بایگانی فایل مبتنی بر ویندوز. هر دو قالب zip و tar را پشتیبانی میکند.
[ URL 42] Z Shell sunsite.auc.dk/zsh پوستهای طراحیشده برای استفادهٔ تعاملی، اگرچه زبان اسکریپتنویسی قدرتمندی هم هست. بسیاری از ویژگیهای مفید bash، ksh و tcsh در zsh گنجانده شد؛ ویژگیهای اصیل زیادی هم اضافه شد.
[ URL 43] کلاینت SMB آزاد برای سیستمهای Unix samba.anu.edu.au/pub/samba/ Samba به شما امکان میدهد فایلها و منابع دیگر را بین سیستمهای Unix و ویندوز به اشتراک بگذارید. Samba شامل موارد زیر است:
- سرور SMB، برای ارائهٔ خدمات فایل و چاپ به سبک Windows NT و LAN Manager به کلاینتهای SMB مانند Windows 95، Warp Server، smbfs و دیگران.
- nameserver Netbios که از جمله پشتیبانی مرور را میدهد. Samba در صورت تمایل میتواند مرورگر اصلی LAN شما باشد.
- کلاینت SMB شبیه ftp که به شما امکان میدهد به منابع PC (دیسکها و چاپگرها) از Unix، Netware و سیستمعاملهای دیگر دسترسی داشته باشید.
مقالات و نشریات
[ URL 44] comp.object FAQ www.cyberdyne-object-sys.com/oofaq2 FAQ قابلتوجه و منظم برای گروه خبری comp.object.
[ URL 45] eXtreme Programming www.XProgramming.com از وبسایت: «در XP، از ترکیب بسیار سبکوزن روشها برای ساخت تیمی استفاده میکنیم که میتواند بهسرعت نرمافزاری بسیار قابلاعتماد، کارآمد و با فاکتورگیری خوب تولید کند. بسیاری از روشهای XP در پروژهٔ Chrysler C3 ایجاد و آزموده شدند؛ سیستم حقوق و دستمزد بسیار موفقی که در Smalltalk پیادهسازی شده است.»
[ URL 46] صفحهٔ اصلی Alistair Cockburn members.aol.com/acockburn بهدنبال «Structuring Use Cases with Goals» و قالبهای use case بگردید.
[ URL 47] صفحهٔ اصلی Martin Fowler ourworld.compuserve.com/homepages/martin_fowler نویسندهٔ Analysis Patterns و همنویسندهٔ UML Distilled و Refactoring: Improving the Design of Existing Code. صفحهٔ اصلی Martin Fowler دربارهٔ کتابها و کارش با UML بحث میکند.
[ URL 48] صفحهٔ اصلی Robert C. Martin www.objectmentor.com مقالات مقدماتی خوب دربارهٔ تکنیکهای شیگرا، از جمله تحلیل وابستگی و معیارها.
[ URL 49] Aspect-Oriented Programming www.parc.xerox.com/csl/projects/aop/ رویکردی برای افزودن قابلیت به کد، هم بهصورت متعامد و هم اعلانی.
[ URL 50] مشخصات JavaSpaces java.sun.com/products/javaspaces سیستمی شبیه Linda برای Java که پایداری توزیعشده و الگوریتمهای توزیعشده را پشتیبانی میکند.
[ URL 51] کد منبع Netscape www.mozilla.org کد منبع توسعهٔ مرورگر Netscape.
[ URL 52] The Jargon File www.jargon.org Eric S. Raymond تعاریف بسیاری از اصطلاحات رایج (و نهچندان رایج) صنعت رایانه، همراه با مقدار خوبی از فولکلور.
[ URL 53] مقالات Eric S. Raymond www.tuxedo.org/~esr مقالات Eric دربارهٔ The Cathedral and the Bazaar و Homesteading the Noosphere که مبنای روانشناختی-اجتماعی و پیامدهای جنبش Open Source را شرح میدهند.
[ URL 54] محیط دسکتاپ K www.kde.org از صفحهٔ وبشان: «KDE محیط دسکتاپ گرافیکی قدرتمندی برای ایستگاههای کاری Unix است. KDE پروژهای اینترنتی است و در هر معنایی واقعاً باز است.»
[ URL 55] برنامهٔ دستکاری تصویر GNU www.gimp.org Gimp برنامهای آزاد توزیعشده برای ایجاد، ترکیب و روتوش تصویر است.
[ URL 56] پروژهٔ Demeter www.ccs.neu.edu/research/demeter پژوهش متمرکز بر آسانتر کردن نگهداری و تکامل نرمافزار با استفاده از Adaptive Programming.
متفرقه
[ URL 57] پروژهٔ GNU www.gnu.org Free Software Foundation, Boston, MA Free Software Foundation یک مؤسسهٔ خیریهٔ معاف از مالیات است که برای پروژهٔ GNU وجوه جمع میکند. هدف پروژهٔ GNU تولید یک سیستم کامل، آزاد و شبیه یونیکس است. بسیاری از ابزارهایی که در این مسیر توسعه دادهاند به استانداردهای صنعت تبدیل شدهاند.
[ URL 58] اطلاعات وبسرور www.netcraft.com/survey/servers.html پیوند به صفحات اصلی بیش از ۵۰ وبسرور مختلف. برخی محصولات تجاریاند، در حالی که برخی دیگر آزادانه در دسترساند.
کتابنامه
[Bak72] F. T. Baker. مدیریت تیم برنامهنویس ارشد در برنامهنویسی تولیدی. IBM Systems Journal، ۱۱(۱):۵۶–۷۳، ۱۹۷۲.
[BBM96] V. Basili, L. Briand, and W. L. Melo. اعتبارسنجی معیارهای طراحی شیگرا بهعنوان شاخصهای کیفیت. IEEE Transactions on Software Engineering، ۲۲(۱۰):۷۵۱–۷۶۱، اکتبر ۱۹۹۶.
[Ber96] Albert J. Bernstein. Dinosaur Brains: Dealing with All Those Impossible People at Work. Ballantine Books, New York, NY, 1996.
[Bra95] Marshall Brain. Win32 System Services. Prentice Hall, Englewood Cliffs, NJ, 1995.
[Bro95] Frederick P. Brooks, Jr. The Mythical Man Month: Essays on Software Engineering. Addison-Wesley, Reading, MA, anniversary edition, 1995.
[CG90] N. Carriero and D. Gelenter. How to Write Parallel Programs: A First Course. MIT Press, Cambridge, MA, 1990.
[Cla04] Mike Clark. Pragmatic Project Automation. The Pragmatic Programmers, LLC, Raleigh, NC, and Dallas, TX, 2004.
[CN91] Brad J. Cox and Andrex J. Novobilski. Object-Oriented Programming, An Evolutionary Approach. Addison-Wesley, Reading, MA, 1991.
[Coc97a] Alistair Cockburn. اهداف و use caseها. Journal of Object Oriented Programming، ۹(۷):۳۵–۴۰، سپتامبر ۱۹۹۷.
[Coc97b] Alistair Cockburn. Surviving Object-Oriented Projects: A Manager's Guide. Addison Wesley Longman, Reading, MA, 1997.
[Cop92] James O. Coplien. Advanced C++ Programming Styles and Idioms. Addison-Wesley, Reading, MA, 1992.
[DL99] Tom Demarco and Timothy Lister. Peopleware: Productive Projects and Teams. Dorset House, New York, NY, second edition, 1999.
[FBB 99] Martin Fowler, Kent Beck, John Brant, William Opdyke, and Don Roberts. Refactoring: Improving the Design of Existing Code. Addison Wesley Longman, Reading, MA, 1999.
[Fow96] Martin Fowler. Analysis Patterns: Reusable Object Models. Addison Wesley Longman, Reading, MA, 1996.
[FS99] Martin Fowler and Kendall Scott. UML Distilled: Applying the Standard Object Modeling Language. Addison Wesley Longman, Reading, MA, second edition, 1999.
[GHJV95] Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides. Design Patterns: Elements of Reusable Object-Oriented Software. Addison-Wesley, Reading, MA, 1995.
[Gla99a] Robert L. Glass. بازرسیها — یافتههایی شگفتانگیز. Communications of the ACM، ۴۲(۴):۱۷–۱۹، آوریل ۱۹۹۹.
[Gla99b] Robert L. Glass. واقعیتهای بازده فناوری نرمافزار. Communications of the ACM، ۴۲(۲):۷۴–۷۹، فوریه ۱۹۹۹.
[Hol78] Michael Holt. Math Puzzles and Games. Dorset Press, New York, NY, 1978.
[HT03] Andy Hunt and Dave Thomas. Pragmatic Unit Testing In Java with JUnit. The Pragmatic Programmers, LLC, Raleigh, NC, and Dallas, TX, 2003.
[Jac94] Ivar Jacobson. Object-Oriented Software Engineering: A Use-Case Driven Approach. Addison-Wesley, Reading, MA, 1994.
[KLM 97] Gregor Kiczales, John Lamping, Anurag Mendhekar, Chris Maeda, Cristina Videira Lopes, Jean-Marc Loingtier, and John Irwin. برنامهنویسی جنبهمحور. در European Conference on Object-Oriented Programming (ECOOP)، volume LNCS 1241. Springer-Verlag, June 1997.
[Knu97a] Donald Ervin Knuth. The Art of Computer Programming: Fundamental Algorithms, volume 1. Addison Wesley Longman, Reading, MA, third edition, 1997.
[Knu97b] Donald Ervin Knuth. The Art of Computer Programming: Seminumerical Algorithms, volume 2. Addison Wesley Longman, Reading, MA, third edition, 1997.
[Knu98] Donald Ervin Knuth. The Art of Computer Programming: Sorting and Searching, volume 3. Addison Wesley Longman, Reading, MA, second edition, 1998.
[KP99] Brian W. Kernighan and Rob Pike. The Practice of Programming. Addison Wesley Longman, Reading, MA, 1999.
[Kru98] Philippe Kruchten. The Rational Unified Process: An Introduction. Addison Wesley Longman, Reading, MA, 1998.
[Lak96] John Lakos. Large-Scale C++ Software Design. Addison Wesley Longman, Reading, MA, 1996.
[LH89] Karl J. Lieberherr and Ian Holland. تضمین سبک خوب برای برنامههای شیگرا. IEEE Software، صفحات ۳۸–۴۸، سپتامبر ۱۹۸۹.
[Lis88] Barbara Liskov. انتزاع داده و سلسلهمراتب. SIGPLAN Notices، ۲۳(۵)، مه ۱۹۸۸.
[LMB92] John R. Levine, Tony Mason, and Doug Brown. Lex and Yacc. O'Reilly & Associates, Inc., Sebastopol, CA, second edition, 1992.
[McC95] Jim McCarthy. Dynamics of Software Development. Microsoft Press, Redmond, WA, 1995.
[Mey96] Scott Meyers. More Effective C++: 35 New Ways to Improve Your Programs and Designs. Addison-Wesley, Reading, MA, 1996.
[Mey97a] Scott Meyers. Effective C++: 50 Specific Ways to Improve Your Programs and Designs. Addison Wesley Longman, Reading, MA, second edition, 1997.
[Mey97b] Bertrand Meyer. Object-Oriented Software Construction. Prentice Hall, Englewood Cliffs, NJ, second edition, 1997.
[Pet98] Charles Petzold. Programming Windows, The Definitive Guide to the Win32 API. Microsoft Press, Redmond, WA, fifth edition, 1998.
[Sch95] Bruce Schneier. Applied Cryptography: Protocols, Algorithms, and Source Code in C. John Wiley & Sons, New York, NY, second edition, 1995.
[Sed83] Robert Sedgewick. Algorithms. Addison-Wesley, Reading, MA, 1983.
[Sed92] Robert Sedgewick. Algorithms in C++. Addison-Wesley, Reading, MA, 1992.
[SF96] Robert Sedgewick and Phillipe Flajolet. An Introduction to the Analysis of Algorithms. Addison-Wesley, Reading, MA, 1996.
[Ste92] W. Richard Stevens. Advanced Programming in the Unix Environment. Addison-Wesley, Reading, MA, 1992.
[Ste98] W. Richard Stevens. Unix Network Programming, Volume 1: Networking APIs: Sockets and Xti. Prentice Hall, Englewood Cliffs, NJ, second edition, 1998.
[Ste99] W. Richard Stevens. Unix Network Programming, Volume 2: Interprocess Communications. Prentice Hall, Englewood Cliffs, NJ, second edition, 1999.
[Str35] James Ridley Stroop. مطالعات تداخل در واکنشهای کلامی سریال. Journal of Experimental Psychology، ۱۸:۶۴۳–۶۶۲، ۱۹۳۵.
[TFH04] Dave Thomas, Chad Fowler, and Andy Hunt. Programming Ruby, The Pragmatic Programmers' Guide. The Pragmatic Programmers, LLC, Raleigh, NC, and Dallas, TX, 2004.
[TH03] Dave Thomas and Andy Hunt. Pragmatic Version Control Using CVS. The Pragmatic Programmers, LLC, Raleigh, NC, and Dallas, TX, 2003.
[WK82] James Q. Wilson and George Kelling. پلیس و امنیت محله. The Atlantic Monthly، ۲۴۹(۳):۲۹–۳۸، مارس ۱۹۸۲.
[YC86] Edward Yourdon and Larry L. Constantine. Structured Design: Fundamentals of a Discipline of Computer Program and Systems Design. Prentice Hall, Englewood Cliffs, NJ, second edition, 1986.
[You95] Edward Yourdon. وقتی نرمافزار بهاندازهٔ کافی خوب بهترین است. IEEE Software، مه ۱۹۹۵.