- عنوان کتاب: Thinking Programs -Logical Modeling and Reasoning About Languages, Data, Computations, and Executions, 2nd ed
- نویسنده: Wolfgang Schreiner
- حوزه: مهندسی نرمافزار
- سال انتشار: 2026
- تعداد صفحه: 652
- زبان اصلی: انگلیسی
- نوع فایل: pdf
- حجم فایل: 5.49 مگابایت
این یک امتیاز بزرگ برای یک نویسنده است که فرصتی برای بازنگری کتابی که بیش از یک دهه پیش مفهومسازی شده و متعاقباً در مدت زمانی بیش از پنج سال به تفصیل شرح داده شده است، به او داده شود. با این حال، این امر همچنین تعهدی را برای بررسی جدی برخی از سؤالات اساسی، از جمله مهمترین آنها، ایجاد میکند: آیا موضوع اصلی هنوز مرتبط است؟ آیا ایدههای اساسی هنوز معتبر هستند؟ آیا سازماندهی هنوز کافی است؟ آیا باید مطالب قدیمی را کنار گذاشت و/یا مطالب جدیدی اضافه کرد؟ در مورد موضوع اصلی و ایدههای اساسی: من شخصاً مانند همیشه متقاعد شدهام که مسئله تفکر روشن در مورد برنامهها به همان اندازه همیشه مرتبط است. این امر همچنین و به ویژه در زمانی صادق است که کدهای کامپیوتری بیشتری به طور خودکار توسط ابزارهایی تولید میشوند که ادعا میشود “هوش مصنوعی” را در خود جای دادهاند. با این حال، در هسته خود، این ابزارها به اصول آماری متکی هستند که نمیتوانند تضمینهای دقیقی برای صحت ارائه دهند: اغلب نتایج خوب به نظر میرسند، اما گاهی اوقات حاوی خطاهای ظریفی هستند. در بدترین حالت، آنها کاملاً اشتباه هستند. در نهایت، هنوز هم به عهده ما انسانها به عنوان تجسم “هوش طبیعی” است که یک راه حل تولید شده به صورت خودکار را ارزیابی کنیم، کفایت آن را قضاوت کنیم و مشکلات آن را آشکار کنیم. بنابراین ما باید بتوانیم در مورد برنامهها، در یک چارچوب ذهنی مناسب مبتنی بر زبانی که برای بیان افکار ما کافی است، فکر کنیم. زبان منطق هنوز ابزار اصلی برای این منظور به نظر میرسد. در مورد سازماندهی و مطالب: بخش دوم کتاب با دقت طراحی شده است تا به زبان منطق، توالی زبانهای رسمی دیگر که به طور محکم ادغام شدهاند، بپردازد، که با زبانی برای تعیین انواع دادههای انتزاعی شروع میشود، به زبانی برای توصیف برنامههای متوالی ادامه مییابد و در نهایت به زبانی برای مدلسازی سیستمهای همزمان، همراه با روشهای مورد نیاز برای ارائه معانی دقیق به این زبانها و استدلال در مورد مصنوعات توصیف شده در این زبانها، ختم میشود. برای این منظور، بخش اول کتاب مبانی لازم، به ویژه منطق، نظریه مجموعهها و نظریه بازگشت را ارائه میدهد. بخش دوم به طور مداوم به این مبانی اشاره میکند. حتی اگر برخی از مطالب بنیادی در اولین خواندن نادیده گرفته شوند، در نهایت مبنایی برای درک نکات ظریفتر رسمیسازیهای بعدی زبان است. بنابراین من از ضربه زدن به هر بخشی از آن خودداری کردم. از طرف دیگر، با توجه به حجم مطالب موجود، من (عمدتاً) از اضافه کردن مطالب بیشتر طفره رفتم؛ هرگونه مزیتی که در عمیقتر شدن برخی از جنبههای ارائه وجود داشته باشد، با ضرر از دست دادن تمرکز بر پیامهای اصلی که کتاب سعی در انتقال آنها دارد، خنثی میشود. در نهایت، تصمیم گرفتم در این ویرایش جدید، بیشتر بر بهبود نه وسعت، بلکه کیفیت ارائه تمرکز کنم. خوشبختانه، با استفاده از بخش قابل توجهی از کتاب در تکرارهای متعدد دورههای خودم، بخش عمدهای از محتوای آن با بررسی، ارائه و بحث مکرر تأیید شده است. با این حال، با این فرآیند، کاستیهای متعددی نیز آشکار شده است که بیشتر آنها جزئی هستند، اما تعدادی از آنها نیز اهمیت بیشتری دارند. همچنین بازخوانی کل کتاب از ابتدا تا انتها با ذهنی تازه به آشکار شدن برخی کاستیها کمک کرده است. این ویرایش دوم، کاستیهای ویرایش اول را جبران میکند و بنابراین پیشرفت قابل توجهی را نشان میدهد. علاوه بر این، اگرچه از افزودن مطالب به مطالب اصلی (که به دلیل ماهیت ریاضی/منطقی خود، اساساً باید نمایانگر «حقایق ابدی» باشند) خودداری کردم، اما چندین مورد از «پیوستهای نرمافزاری» (که بیشتر وابسته به زمان هستند) را در انتهای هر فصل بهروزرسانی کردهام تا پیشرفتهای اخیر را در نظر بگیرم. به طور خاص، به ترتیب، ارائههایی از نرمافزارهای جدید و ویژگیهای جدید نرمافزار را که قبلاً در ویرایش اول مورد بحث قرار گرفته بود، اضافه کردهام.
It is a great privilege for an author to be offered the opportunity to revise a book that was conceptualized more than a decade ago and subsequently elaborated in a period of more than five years. However, it also poses the obligation to seriously consider some basic questions, among them most important: Is the core topic still relevant? Are the fundamental ideas still sound? Is the organization still adequate? Should old material be dropped and/or new material be added? As for the core topic and the fundamental ideas: I am personally convinced as ever that the question of clear thinking about programs is as relevant as ever. This is also and in particular true in a time when more and more computer code is automatically generated by tools that are claimed to embed “artificial intelligence”. However, at their core, these tools rely on statistical principles that can not provide hard correctness guarantees: often the results seem alright, but some times they contain subtle errors; in the worst case, they are complete blunder. It is ultimately still up to us human beings as embodiments of “natural intelligence” to evaluate an automatically generated solution, judge its adequacy, and unveil its problems. Thus we have to be able to think about programs, within a suitable mental framework based on a language that is adequate to express our thoughts. The language of logic still seems the primary tool for this purpose. As for the organization and the material: The second part of the book has been carefullydesignedtoelaborateinthelanguageoflogicasequenceoftightlyintegrated other formal languages, starting with a language of specifying abstract datatypes, proceeding to a language of describing sequential programs, and culminating in a language for modeling concurrent systems, along with the methods needed for giving these languages a precise semantics and for reasoning about the artifacts described in these languages. For this purpose, the first part of the book presents the necessary foundations, in particular logic, set theory, and recursion theory; to these foundations the second part continuously refers. Even if some of the foundational material may be skipped on first reading, it is ultimately the basis for understanding the finer points of the later language formalizations; thus I refrained from putting the axe to any part of it. On the other side, considering the volume of the material already present, I (mostly) shied away from adding even more; any benefit of going into more depth in some aspects of the presentation would be counterbalanced by the detriment of losing the focus on the main messages that the book tries to convey. Ultimately, I decided to mostly concentrate in this new edition on improving not the extent but the quality of the presentation. Fortunately, having used a significant portion of the book in multiple iterations of my own courses, much of its content has been validated by repeated inspection, presentation, and discussion. However, by this process also multiple deficiencies have come to light, most of a minor nature, but also a few with larger significance; also re-reading the whole book from front to back with a fresh mind has helped to reveal some shortcomings. This second edition amends the deficits of the first one and thus represents a considerable advancement. Furthermore, while I refrained from adding to the core material (which, by its mathematical/logical nature, should essentially represent “eternal truths”), I’ve updated several of the (more time dependent) “software appendices” at the end of each chapter to take recent developments into account. In particular, I’ve added presentations of new software respectively of new features of software that was already discussed in the first edition.
این کتاب را میتوانید از لینک زیر بصورت رایگان دانلود کنید:
Download: Thinking Programs





نظرات کاربران