ظهور ، سقوط  و طلوع برنامه نويسی عملكردی (تركيب نرم افزار)

توجه: اين بخشی از "تركيب سری نرم افزار" (كه اكنون يك كتاب است!) در زمينه يادگيری برنامه نويسی كاربردی و تكنيک های نرم افزاری تركيبی در JavaScriptES6+ از ابتدا است. در ادامه با ما همراه باشيد.وقتی حدوداً 6 ساله بودم، زمان زيادی را با بهترين دوستم به بازی های رايانه ای سپری كردم. خانواده وی اتاقی پر از كامپيوتر داشتند. برای من، آنها مقاومت ناپذير بودند. سحرآميز. من ساعت های زيادی را صرف كاوش در تمام بازی ها كردم. يك روز از دوستم پرسيدم "چگونه يم بازی بسازیم؟"او نمی دانست، بنابراين ما از پدرش پرسيديم، كه دست خود را به بالای يك قفسه بلند رساند و كتاب بازی هایی را كه در Basic نوشته شده بود، پايين كشيد. بنابراين سفر من به برنامه نويسی آغاز شد. زمانی كه مدرسه دولتی به تدريس جبر روی آورد، من از قبل موضوع را به خوبی ميدانستم، زيرا برنامه نویسی اساساً جبر است. بر هر حال می تواند باشد.ظهور برنامه نویسی عملكردی(تابعی)در آغاز علوم كامپيوتر، قبل از اينكه بيشتر علوم رايانه در واقع در كامپيوتر انجام شود، دو دانشمند كامپيوتر بزرگ زندگی ميكردند: آلونزو چرچ(Alonzo Church) و آلن تورينگ(Alan Turing). آنها دو مدل جهانی مختلف، اما برابر با محاسبه توليد كردند. هر دو مدل می توانند هر چيزی را كه قابل محاسبه باشند را محاسبه كنند(از اين رو، "جهانی").آلونزو چرچ حساب لامبدا را اختراع كرد. حساب لامبدا يک مدل جهانی محاسبه بر اساس كاربرد تابع است. آلن تورينگ با ماشين تورينگ معروف و شناخته شده است. ماشين تورينگ يک مدل جهانی محاسبه است كه دستگاه نظری را تعريف میكند كه نمادها را روی يک نوار دستكاری ميكند.آنها با هم همكاری كردند تا نشان دهند كه حساب لامبدا و ماشين تورينگ از نظر عملكردی برابر هستند.حساب لامبدا همه چيز در مورد تركيب عملكرد است. تفكر از نظر تركيب عملكرد، روشی بسيار رسا و فصيح برای ساختن نرم افزار است. در اين متن، ما در مورد اهميت تركيب عملكرد در طراحی نرم افزار بحث خواهيم كرد.سه نكته مهم وجود دارد كه حساب لامبدا را خاص میكند: 1. توابع هميشه ناشناس. در JavaScript، سمت راستconst sum = (x , y) => x + yعبارت تابع ناشناس است(x , y) => x + y .2. توابع در حساب لامبدا فقط يك ورودی واحد را می پذيرند. آنها unary هستند. اگر به بيش از يک پارامتر نياز داشته باشيد، عملكرد يک ورودی را میگيرد و يک عملكرد جديد را كه بعدی را میگیرد، بر می گرداند. تابع n-ary (x , y) => x + yرا میتوان به صورت يک تابع unary مانند:x => y => x + yبيان كرد. اين تبديل از يک تابع n-ary به يک تابع unary به عنوان currying شناخته ميشود.3. توابع درجه يک، بدين معنی كه توابع می توانند به عنوان ورودی ساير توابع استفاده شوند و توابع می توانند توابع را برگردانند.اين ویژگی ها در كنار هم يک واژگان ساده و در حال رسا برای نوشتن نرم افزار با استفاده از توابع به عنوان واحد اصلی ايجاد میكنند. در جاوا اسكریپت، توابع ناشناس و توابع ناخواسته از ويژگی های اختياری هستند. در حالی كه جاوا اسكریپت از ویژگی های مهم حساب لامبدا پشتيبانی میكند، اما آنها را اجرا نمیكند.تركيب تابع كلاسيک از يک تابع خروجی میگيرد و از آن به عنوان ورودی تابع ديگر استفاده میكند. به عنوان مثال، تركيب:‌ f . gمی توان به صورت زير نوشت: compose2 = f => g => x => f(f(x))در اينجا نحوه استفاده از آن آورده شده است: double = n => n * 2 inc = n => n + 1 compose2 (double) (inc) (3)تابع compose2 تابع double را به عنوان اولين آرگومان، تابع inc را به عنوان دومين میگیرد و سپس تركيب اين دو تابع را به آرگومان 3 اعمال میكند. با نگاه كردن دوباره به امضای compose2، اِف(f) double است، جی(g) inc است و ايكس(X) 3 است. فراخوانی تابع، compose2() (ddouble) (inc) 3 ، در واقع سه فراخوانی مختلف تابع است: اولين double عبور میكند و عملكرد جدیدی را بر میگرداند.تابع برگشتی inc را میگیرد و يک تابع جدید را بر میگرداند.تابع برگشتی بعدی 3 را میگیرد و f(g(x)) را ارزيابی ميكند، كه اكنون double(inc(3)).ايكس(x) ارزيابی ميكند 3 را و به inc منتقل ميكند.تابع inc(3) را تا 4 ارزيابی ميكند.تابع double(4) را تا 8 ارزيابی ميكند.8 از تابع برگردانده ميشود.حساب لامبدا در طراحی نرم افزار بسيار تأثيرگذار بوده و قبل از حدود 1980، بسياری از آيكون های بسيار تأثيرگذار علوم كامپيوتر با استفاده از تركيب عملكرد، نرم افزار می ساختند. ليسپ در سال 1958 ايجاد شد و به شدت تحت تأثير حساب لامبدا قرار گرفت. امروزه، ليسپ دومين زبان قديمی است كه هنوز هم مورد استفاده عامه است.من از طريق AutoLISP با آن آشنا شدم: زبان اسكريپت نويسی مورد استفاده در محبوب ترين نرم افزار طراحی به كمک كامپيوتر (CAD) : اتوكد. اتوكد بسيار محبوب است. تقريباً همه برنامه های ديگر CAD از AutoLISP پشتيبانی می كنند تا بتوانند با آنها سازگار باشند. ليسپ به سه دليل در برنامه های درسی علوم كامپيوتر نيز زبان محبوب آموزش است: سادگی آن يادگيری نحو و معانی اصلی ليسپ را در طی يک روز آسان میكند.ليسپ همه چيز در موردتركيب عملكرد است و تركيب عملكرد روشی زيبا رباي ساختار برنامه ها است.بهترين كتاب متنی علوم كامپيوتر كه من میشناسم از ليسپ: ساختار و تفسير برنامه های رايانه ای استفاده می كندو سقوط برنامه نويسی عملكردی جایی بين سال های 1970 و 1980، نحوه ساخت اين نرم افزار تغيير شكل داده است.سقوط برنامه نويسی عملكردی(تابعی)جایی بين سال های 1970 و 1980، نحوه ساخت اين نرم افزار از رياضیات تجربی ساده دور شد و بع ليستی از دستورالعمل های خطی برای پيگيری كامپيوتر در زبان هایی مانند K&R C (1978) و مفسران كوچک BASIC كه با خانه اوليه ارسال میشد تبديل شد رايانه های دهه 1970 و اوايل دهه 1980.در سال 1972، آلن كی اسمال تاک (Alan Kay’s Smalltalk) رسميت يافت، و ايده شئ ها به عنوان واحد اتمی تركيب به دست آمد. ايده عالی اسمال تاک در مورد كپسوله سازی مؤلفه ها و ارسال پيام در دهه 80 و 90 توسط C++ و Java تبديل به ايده ای وحشتناک در مورد سلسله مراتب وراثت شده و روابطی برای استفاده مجدد از ویژگی هاست. حتی اگر اسمال تاک يک زبان OOP(شئ گرایی) كاربردی بود، هنگامی كه C++ و Java مشاركت ذهن را به دست گرفتند، برنامه نويسی كاربردی به حاشيه و دانشگاه منتقل شد: وسواس سعادتمندانه ترين افراد برنامه نويسان گيگ، استادان برج های پيچک خود و برخی از دانشجويان خوش شانس كه از وسواس تغذيه اجباری جاوا در دهه 1990 - 2010 نجات يافتند. برای بيشتر ما، ايجاد نرم افزار برای 30 سال كمی كاووس بود. روزگار تاريک ;)توجه: من كد گذاری را با بيسيک، پاسكال، سی پلاس پلاس و جاوا ياد گرفتم. من از AutoLISP برای دستكاری گرافيک های سه بعدی استفاده كردم. فقط AutoLISP كاربردی است. برای چندين سال اول فعاليت برنامه نويسی من، متوجه نشدم كه برنامه نويسی كاربردی يک گزينه عملی حارج از برنامه نويسی گرافيک بُرداری است.ظهور برنامه نویسی عملكردی(تابعی)حدوداً سال 2010 اتفاق بزرگی افتاد: جاوا اسكريپت منفجر شد.حدوداً قبل از سال 2006، جاوا اسكريپت به طور گسترده ای به عنوان يک زبان اسباب بازی در نظر گرفته می شد كه برای ايجاد انيميشن های زيبا در مرورگر وب استفاده میشود، ويژگی های قدرتمندی كه در آن پنهان شده است. يعنی مهم ترين ويژگی های حساب لامبدا. مردم زير سايه درباره اين چيز جالب جديد به نام "برنامه نویسی كاربردی" شروع به زمزمه كرد.تا سال 2015، ايده ساخت با تركيب عملكرد دوباره محبوب شد. برای ساده تر كردن آن، مشخصات جاوا اسكريپت اولين ارتقا عمده اساسی آن دهه را به خود اختصاص داده و توابع پيكانی(جهت دار) را به آن اضافه كرده است، كه ايجاد و خواندن توابع، عبارات و لامبدا را آسان تر می كند.توابع های پيكانی مانند سوخت موشک برای انفجار برنامه نويسی عملكردی در جاوا اسكريپت بود. امروزه به ندرت می توان يک برنامه بزرگ را مشاهده كرد كه از بسياری از تكنيک های برنامه نويسی كاربردی نكند.برنامه نويسی عملكردی(تابعی) هميشه زنده و خوب استعلی رغم اين زبان زدگی به زبان های معروف، برنامه نويسی كاربردی(تابعی) هميشه زنده و خوب بوده است. Lisp و SmallTalk از بزرگ ترين رقبای C در چشم انداز صنعتی دهه های 1980 و 1990 بودند. SmallTalk يک راه حل نرم افزاری محبوب در 500 شركت ثروتمند از جمله JPMorganChase بود و ليسپ در NASA JPL برای برنامه مريخ نوردان.ليسپ در پژوهشگاه استنفورد(SRI) برای تحقيقات هوش مصنوعی و تحقيقات بيوانفورماتيک مورد استفاده قرار گرفته و هست. (SRI جایی است كه فناوری پشتيبانی مجازی SIRI اپل توسعه يافته است). YCombinator، يكی از با نفوذترين شركت های سرمايه گذاری خطرناک در دره سيليكون، توسط Paul Graham، يكی از تأثيرگذاران جامعه ليسپ، تأسيس شد. سايت خبری معروف فناوری، Hacker News به زبان Ark، گويشی از ليسپ نوشته شده است.كلوژور(Clojure)، گويش ليسپ، توسط ريچ هيكی در سال 2007 ايجاد شد و به سرعت محبوبيت و استفاده در شركت های بزرگ فناوری از جمله آمازون، اپل و فيس بوک را به دست آورد.ارلنگ(Erlang) يک زبان برنامه نويسی كاربردی محبوب استكه در اريكسون برای استفاده در مراكز تلفنی توليد شده است. هنوز هم در شبكه های تلفن همراه توسط T-Mobile استفاده میشود. آمازون از Erlang برای فناوری های ابری از جمله SimpleDB و ElasticCompute Cloud (EC2) استفاده میكند.تمام آنچه گفته شد، به عنوان زبان استاندارد وب، جاوا اسكريپت محبوب ترين زبان برنامه نويسی در جهان است و جاوا اسكريپت تعداد بی سابقه ای از توسعه دهندگان را در معرض پارادايم برنامه نويسی كاربردی(تابعی) قرار داده است.اين مطالب ترجمه شده يک مقاله انگليسی است و صرفاً برای پروژه دانشگاه در سايت قرار داده شده است.