10 مقالۀ فنی که هر برنامه‌نویسی باید آن‌ها را بخواند

10 مقالۀ فنی که هر برنامه‌نویسی باید آن‌ها را بخواند

مقالات علمی همواره یکی از منابع مفید برای به‌روزرسانی دانش خود در حوزه‌های مختلف هستند و صنعت توسعهٔ نرم‌افزار نیز از این قاعده مستثنی نیست. در همین راستا، در این پست قصد داریم مقالات منتشر شده در حوزهٔ برنامه‌نویسی را معرفی کنیم که برخی از آن‌ها علیرغم قدیمی‌ بودنشان، کماکان ارزش مطالعه دارند!

Fundamental Concepts in Programming Languages
این مقاله توسط Christopher Strachey نوشته شده است و یکی از تأثیرگذارترین مجموعه‌های خلاصه‌ای از مقالات در تاریخ علم کامپیوتر است. در این مقاله به موضوعاتی همچون تعریف متغیر، تابع و اختصاص مقدار به آن‌ها و حتی مسائلی همچون Ad-hoc Polymorphism پرداخته شده است (Ad-hoc Polymorphism به معنای نوعی چندریختی است که در آن بسته به نوع آرگومان ورودی تابع، از میان چند نوع پیاده‌سازی ممکن برای تابع مدنظر، یک پیاده‌سازی توسط کامپایلر انتخاب می‌شود.) 

Why Functional Programming Matters
این مقاله توسط Reginald Braithwaite نوشته شده است و در آن به توصیف مزایای برنامه‌نویسی اصطلاحاً Functional (تابع‌گرا) پرداخته شده است (به طور خلاصه، برنامه‌نویسی تابع‌گرا یک شیوه از کدنویسی است که در آن به جای استفاده از ساختارهای مختلف زبان‌های برنامه‌نویسی همچون حلقه‌، دستورات شرطی و غیره، فقط توابع فراخوانی می‌شوند.) همچنین در این مقاله یکسری نمونه‌ سورس‌کد نیز برای بیان مزایای برنامه‌نویسی تابع‌گرا ذکر شده است.

An Axiomatic Basis for Computer Programming
این مقاله توسط C.A.R HOARE نوشته شده است. در اصل، این موضوع مورد بررسی قرار گرفته که وقتی یک برنامه، تابع و یا یک متد مجموعه‌ای از پارامترهای مطابق با پیش‌شرط‌های آن برنامه، تابع و یا متد را به‌عنوان ورودی دریافت می‌کند، تضمین می‌شود که پس از اجرای برنامه نیز نتیجهٔ (خروجی) خوبی حاصل شود. 

Time, Clocks, and the Ordering of Events in a Distributed System
این مقاله توسط Leslie Lamport نوشته شده است. مقالات ایشان سالیان زیادی جزو مقالات تأثیرگذار در حوزۀ محاسبات توزیع‌شده که به منزلهٔ رشته‌ای در علم کامپیوتر است که به مطالعۀ سیستم‌های توزیع‌شده می‌پردازد، بوده است. با این‌ حال، به نظر می‌رسد که این مقاله یکی از تأثیرگذارترین مقالات وی در دو شاخۀ مورد مطالعۀ سیستم‌های توزیع‌شده است که عبارتند از:
- نحوۀ ترتیب‌دهی به ایونت‌ها به‌ منظور اجرای آن‌ها در سیستم‌های توزیع‌شده
- رویکرد اصطلاحاً State Machine که یک روش برای دستیابی به تحمل خطا و همچنین پیاده‌سازی کنترل غیرمتمرکز روی سیستم‌های توزیع‌شده است.

On Understanding Types, Data Abstraction, and Polymorphism
این مقاله توسط Luca Cardelli و Peter Wegner نوشته شده است که حول مباحث انتزاع (Abstraction) در کدنویسی و چندریختی (Polymorphism) می‌چرخد.

Predicate Dispatch: A Unified Theory of Dispatch
این مقاله توسط Michael Ernst ،Craig Kaplan و Craig Chambers نوشته شده است و در آن به توضیح مفهوم Dispatching Functions پرداخته شده است. فرآیند Dispatching نه بر اساس مجموعه‌ای از قوانین استاتیک، بلکه بر اساس یک روند پیمایش در درخت تصمیم‌گیری انجام خواهد شد که در زمان کامپایل ساخته شده و به‌ طور مداوم توسعه داده می‌شود؛ به عبارت دیگر، فرآیند مذکور بر اساس مجموعه‌ای از شرایطی که قوانین توزیع توابع را شرح می‌دهند کنترل شده و با آن‌ها تطابق داده می‌شود.

به‌ طور خلاصه، در فرآیند Dispatching، برنامۀ شما می‌تواند یک تابع اصلی و چندین تابع فرعی داشته باشد که تابع اصلی به‌ منظور تعیین اولویت، تعیین بهترین ترتیب برای اجرای توابع، ایجاد دستورالعمل‌ها و کنترل روند اجرای برنامه تعریف می‌شود.

Equal Rights for Functional Objects or, The More Things Change, The More They Are the Same
این مقاله توسط Henry G.Baker نوشته شده است. نکتۀ مهم در پیاده‌سازی با زبان‌های Clojure و ClojureScript، مفهوم Equiv در آن‌ها است که در این مقاله مفهومی معادل آن یعنی اپراتور Egal معرفی شده است. با فراگیر شدن استفاده از آبجکت‌های به‌ اصطلاح Immutable (تغییرناپذیر) در برنامه‌نویسی، پرداختن به مفهوم برابری در Clojure که به معنای برابری در مقادیر آن‌ها بوده، تسهیل شده است و این در حالی است که اگر آبجکت‌ها و متغیرها تغییرپذیر باشند، برابری معنایی نخواهد داشت!

Organizing Programs Without Classes
این مقاله توسط David Ungar ،Craig Chambers ،Bay-wei Chang و Urs Hölzle نوشته شده است و در آن به بزرگ‌ترین عیب زبان جاوااسکریپت یعنی تمایل این زبان به فریمورک‌ها و لایبرری‌های متنوع و همچنین مزیت آن که قابلیت ارث‌بری از پروتوتایپ‌های این زبان به‌منظور پیاده‌سازی ارث‌بری‌های مبتنی بر کلاس است، پرداخته شده است.

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

Dynamo: Amazon’s Highly Available Key-value Store
این مقاله توسط Giuseppe DeCandia، Deniz Hastorun و Madan Jampani و چند تن از نویسندگان دیگر نوشته شده است. کمتر اتفاق می‌افتد که در مقاله‌ای به توصیف یک سیستم فعال در تولید محصول به‌ منظور تأثیرگذاری بر وضعیت تحقیق در آن صنعت و در نتیجۀ آن بر علم کامپیوتر پرداخته شود. اغلب تفکراتی که در مقالات توصیف می‌شوند، تئوریک هستند اما این در حالی است که سیستم‌های دنیای واقعی چیزی فرای مباحث تئوریک هستند که فقط در کتاب‌ها و مقالات یافت می‌شوند.

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

Out of the Tar Pit
این مقاله توسط Ben Moseley و Peter Marks نوشته شده است. بدیهی است که پیچیدگی برنامۀ اکثر دولوپرها ناشی از استفاده از متغیرها و یا آبجکت‌های تغییرپذیر است. با این فرض، در این مقاله نویسندگان ایدۀ Functional Relational Programming (برنامه‌نویسی تابع‌گرای رابطه‌ای) را مطرح کرده‌اند. این نوع برنامه‌نویسی موجب کاهش استفاده از متغیرهای تغییرپذیر و تمایل هرچه بیشتر دولوپرها به استفاده از روابط در برنامه‌ها و پس از آن هم استفاده از این روابط در نوع زبان برنامه‌نویسی Declarative (تشریحی) یا به عبارتی به‌کارگیری روابط در توابع Pure (توابعی که خود دولوپر آن‌ها را تعریف‌ می‌کند) می‌شود.

Recursive Functions of Symbolic Expressions and Their Computation by Machine
این مقاله توسط John McCarthy نوشته شده است و یک مقالۀ پایه‌ای برای معرفی زبان برنامه‌نویسی LISP است. لازم به ذکر است که این مقاله جزو ده مقالۀ ذکر شده در لیست فوق نیست اما مطالعۀ آن خالی از لطف نخواهد بود!

آیا به غیر از مقالات فوق، مقاله، رساله، آموزش و یا کتاب دیگری می‌شناسید که بتواند برای علاقمندان به برنامه‌نویسی و توسعهٔ نرم‌افزار مفید واقع گردد؟ نظرات، دیدگاه‌ها و تجربیات خود را با دیگر کاربران سکان آکادمی به اشتراک بگذارید.

منبع


اکرم امراه‌نژاد