این مطلب یکی از مجموعه مقالات پرونده ویژه «آینده برنامهنویسی» است. برای دانلود کل پرونده ویژه اینجا کلیک کنید.
در دهه 1980، چالش اصلی در یادگیری برنامهنویسی در ارتباط با انتخاب بهترین زبان برنامهنویسی ممکن همچون سی، پاسکال، لیسپ یا فرترن بود. برنامهنویسان زمان زیادی صرف میکردند تا توضیح دهند دقیقاً چرا راه ویژه و انتخابی آنها در بهکارگیری if-then-else متناسب با درخواست رییس آنها است. امروزه این مبارزه شکل دیگری به خود گرفته و در ارتباط با ترکیب نحوی و ساختاری است که بهمراتب بزرگتر از گذشته شده است. به دلیل اینکه جهان در حال حرکت به سوی یک همگرایی در ارتباط با عرضه چند استاندارد ساده قرار دارد. امروزه تفاوت بین سمیکالنها، براکتها و این موارد جزیی در زبانهای سی، جاوا و جاوااسکریپت محسوس نیست.
مطلب پیشنهادی: زنان پدیدآورنده 9 زبان برنامهنویسی مهم
اما هنوز هم بحثهای جالبی در ارتباط با استفاده از آنها یا اینکه آیا باید یک براکت بسته شود یا خیر وجود دارد. اما بهدلیل وجود خودکارسازی مشکلاتی این چنینی بهطور خودکار برطرف میشوند. اگر تمایل ندارید از یک نوع داده خاص استفاده کنید، این موضوع فرصت خوبی در اختیار کامپیوتر قرار میدهد تا دقیقاً نوع دادهای مورد نیاز شما را حدس بزند. امروزه فعالیتهای جالبی در ارتباط با چهارچوبها در جریان است. اگر از استادی در دانشگاه جان هاپکینز در ارتباط با تدریس یک درس جدید بپرسید، چهارچوبها از تسلط مطلق برخوردار هستند. آیا Angular نسبت به Enber بهتر است یا Node.Js از هر دو آنها بهتر است؟ در گذشته مباحث مربوط به معماری و کشف معماریهای قدرتمند برای مهمترین بستههای نرمافزاری که زیربنای اینترنت را تشکیل میدادند، در جریان بود. مباحثی این چنینی در گذشته بازار گرمی داشتند. ماحصل این مباحث و وجود کلاسهای مختلف زمینهساز به وجود آمدن قدرتمندترین بستههای نرمافزاری شد که امروزه اینترنت بر مبنای آن کار میکند. در عصر حاضر چهارچوبها، زبانهای برنامهنویسی جدیدی هستند. آنها مکانی هستند که میتوانید، جدیدترین ایدهها، فلسفهها و کدنویسیهای مدرن را در آنها مشاهده کنید. هرچند بعضی از آنها چندان مورد توجه نیستند، اما تعداد دیگری در حال تبدیل شدن به اجزای اساسی برنامهنویسی هستند. چهارچوبها این روزها بازار بسیار داغتری نسبت به زبانهای برنامهنویسی دارند.
چهارچوب چیست؟
در دنیای برنامهنویسی یک چهارچوب نرمافزاری یک تجرید (انتزاع) است. تجرید به معنای یک تکنیک مدیریت پیچیدگیها در یک سیستم کامپیوتری است. تجرید به معنای تفکیک مباحث مربوط به هم و نگریستن به موضوعی جدای از مباحث وابسته به آن است. هدف از تجرید مدیریت پیچیدگی و پیشگیری از وابستگی اجزای سیستم به یکدیگر است. در سیستمهای کامپیوتری یک چهارچوب اغلب یک ساختار لایهبندی شده است که نشان میدهد چه نوع برنامههایی میتوانند یا بهتر است با استفاده از آن ساخته شوند و چگونه بهتر است با هم در ارتباط باشند. بعضی چهارچوبها در سیستمهای کامپیوتری برنامههای واقعی، واسطهای برنامهنویسی ویژه یا ابزارهایی برنامهنویسی برای استفاده از چهارچوبها دارند. در حالت کلی، یک چهارچوب جامعتر از یک پروتکل بوده و کاربردیتر از یک ساختار است.
کدنویسی، رشتهای به هم پیوسته از API
روزگاری بود که نوشتن و پیادهسازی استقرار یک برنامه کامپیوتری به معنای همه دانش شما از زبان برنامهنویسی و فشردهسازی حداکثری کدها بود. این سبک برنامهنویسی بر پایه به دست آوردن مهارتهای ویژه در ارتباط با اشارهگرها، توابع و محدوده متغیرها بود و کیفیت کدها به انجام درست این عوامل بستگی داشت. این روزها خودکارسازی بیشتری در ارتباط با این گروهها به وجود آمده است. اگر ارزشمندترین دستورات را کنار بگذارید، جای نگرانی نیست، کامپایلرها جایگزینهای آنها را ارائه میکنند. اگر اشارهگرهای معلق و سرگردان را حذف نکنید، Garbage collector به احتمال زیاد آنها را کشف خواهند کرد (Garbage Collection خود دنیایی بسیار گسترده دارند).
در عصر حاضر چهارچوبها، زبانهای برنامهنویسی جدیدی هستند. آنها مکانی هستند که میتوانید، جدیدترین ایدهها، فلسفهها و کدنویسیهای مدرن را در آنها مشاهده کنید. هرچند بعضی از آنها چندان مورد توجه نیستند، اما تعداد دیگری در حال تبدیل شدن به اجزای اساسی برنامهنویسی هستند.
به علاوه، کدنویسی این روزها متفاوتتر از گذشته شده است. بیشتر کدهای امروزی خطی طولانی از فراخوانی توابع هستند. گاه و بیگاه قالببندی مجدد روی دادههایی که بین فراخوانی توابع مورد استفاده قرار میگیرند به وجود میآید، اما این کارها معمولاً از طریق توابع دیگری انجام میشود. برای همین مهم است بدانید یک تابع چگونه رفتار میکند و چه کاری انجام میدهد. یک تابع چه ساختارهای دادهای را قبول میکند؟ الگوریتمها زمانی که دادهها رشد پیدا کنند، چگونه با آنها رفتار میکنند؟ پرسشهایی از این دست، امروزه در کانون توجه برنامهنویسی قرار دارد که عمدتاً در ارتباط با ترکیب نحوی یا زبان قرار دارد. در واقع، در حال حاضر یک سری ابزار وجود دارد که فراخوانی روتینها را در یک زبان نسبت به دیگری ساده میسازد. بهطور مثال، پیوند دادن ساده کتابخانههای سی به کدهای جاوا نمونهای از این موارد به شمار میرود. کافی است عبارتی همچون Calling C From Java Is Easy را در مرورگر خود وارد کنید تا هزاران سایت در این ارتباط در اختیار شما قرار گیرد. شناختن API موضوع مهمی است.
شانههای غولها ارزش ایستادن دارد
تصور کنید بهتازگی شیفته زبان Erlang (یک زبان برنامهنویسی همهمنظوره و همروند که توسط اریکسون ساخته شده و برای پشتیبانی و توسعه برنامههای توزیع شده مورد استفاده قرار میگیرد) یا زبان دیگری شدهاید و آن را انتخاب کردهاید. شما تصور میکنید زبان جدید بهترین پلتفرم برای نوشتن یک برنامه پایدار و خالی از اشکال است. این یک حس خوب است، اما سالها طول میکشد تا تمام کدهای جاوا یا PHP خود را داخل زبان جدیدی که انتخاب کردهاید، وارد کنید. مطمئن هستید، کد شما میتواند بهطرز چشمگیری بهتر شود، اما آیا این کار ارزش وقت اضافی را دارد؟ چهارچوبها اهرمی در اختیار ما قرار میدهند تا کارهای سخت را با استفاده از آنها انجام دهید. ما ممکن است معماری که آنها انتخاب میکنند را دوست نداشته باشیم، اما این احتمال وجود دارد که استدلال ما بیش از اندازه روی جزییات متمرکز شده باشد. اما ارزشمند است که شکایت کردن را کنار گذاشته و راهی را برای کنار آمدن با این تفاوتها پیدا کنیم.
موضوع اصلی دانستن معماری است نه ترکیب نحوی
زمانی که برنامهنویسی رشتهای متشکل از انواع API است، یادگیری خصیصههای یک زبان مزیت زیادی نخواهد داشت. بیشک میتوانید متخصص جاوا شوید و بدانید چگونه جاوا فیلدهای استاتیک را مقداردهی اولیه میکند، اما بهتر است بدانید چگونه با استفاده از اهرمهای قدرتمندی همچون Lucence یا JavaDB یا نمونههای دیگر، کدهای شما شعلهورتر خواهند شد. میتوانید ماههای زیادی را صرف بهینهسازی روتینهای کامپایلر Objective-C کنید، اما اطلاع و یادگیری جدیدترین APIs موجود در کتابخانه مرکزی اپل واقعاً کد شما را ترسناکتر خواهد کرد. بهتر است جزییات بیشتری را از خود چهارچوبها نسبت به ترکیب نحوی یک زبان به دست آورید و بدانید کدام یک از چهارچوبها استوارتر هستند. بیشتر کدهای ما زمان خود را صرف حلقهای داخلی از کتابخانهها میکنند. هر چند دریافت و اطلاع از جزییات یک زبان میتواند کمککننده باشد، اما دانستن اینکه چه چیزی در کتابخانهها رخ میدهد، بهطور چشمگیری اررزشمندتر است.
تسلط بر الگوریتمها
یادگیری یک زبان برنامهنویسی به شما کمک میکند تا با دادههایی که درون متغیرها پنهان شدهاند به تردستی بپردازید، اما فقط برای یک دوره زودگذر کاربرد دارد. مانع واقعی در ارتباط با استفاده از الگوریتمهای درست است. الگوریتمها معمولاً درون چهارچوبها تعریف و پیادهسازی میشوند. بیشتر برنامهنویسان دریافتهاند صرف زمان برای پیادهسازی مجدد الگوریتمها و ساختارهای دادهای کار خطرناکی بوده و زمانی که برای پیادهسازی مجدد آنها سپری میشود بهراستی وقت تلف کردن است. مطمئناً شما ممکن است با دستکاری الگوریتمها نیازهای فعلی خود را برطرف کنید، اما در مقابل شانس بروز اشتباهات اتفاقی را نیز به دست خواهید آورد. چهارچوبها سالها است مورد آزمایش و ارزیابی قرار گرفتهاند. سرمایهگذاریهای انجام شده روی آنها زیرساختهای مناسبی را در اختیار ما قرار داده است. روش درست در مطالعه دقیق چهارچوبها و یادگیری نحوه استفاده درست از آنها قرار دارد، بهطوری که بهترین مزیتها را برای کدهای شما به ارمغان آورند. اگر یک ساختار دادهای اشتباه را انتخاب کنید، در یک کار خطی گرفتار میشوید که نه تنها زمان زیادی را از شما میگیرد، بلکه بهجای استفاده از یک تابع صحیح و درست باید از یک نمونه درجه دومی که اندازه ورودی آن برابر با نوع دادهای انتخاب شده توسط شما است استفاده کنید. در نتیجه بدون هیچگونه زحمتی یک ویروس را در کدهای خود قرار دادهاید.
کامپایلرها و محیطهای توسعه یکپارچه هوشمند ترکیب نحوی دستورات شما را اصلاح میکنند
آیا من باید همیشه در این فکر باشم که یک سمیکالن را بعد از آخرین دستور در یک بلوک قرار دهم؟ آیا سمیکالن جداکننده یا خاتمهدهنه یک دستور است؟ طراحان زبانها زمان زیادی را صرف تجزیه و اجرای این گونه قوانین هدر دادهاند، اما در آخر چه شد؟ من به این موضوع اهمیت نمیدهم. نزدیک به یک دهه این مسئله مورد توجه من بود. (اگر تجربه کار با زبانهای قدیمی را داشته باشید، بهخوبی میدانید که استفاده نکردن از یک سمیکالن نه تنها توسط محیطهای برنامهنویسی اصلاح نمیشد، بلکه هیچ گونه اطلاع روشنی را نیز در اختیار برنامهنویس قرار نمیداد).
میتوانید متخصص جاوا شوید و بدانید چگونه جاوا فیلدهای استاتیک را مقداردهی اولیه میکند، اما بهتر است بدانید چگونه با استفاده از اهرمهای قدرتمندی همچون Lucence یا JavaDB یا نمونههای دیگر، کدهای شما شعلهورتر خواهند شد.
اکنون محیطهای توسعه یکپارچه اینکار را برای من انجام میدهند. آنها به طور مداوم پشت سرم من در حرکت هستند و به من میگویند در جایی اشتباهی مرتکب شدهام. به آنها اجازه میدهم بهجای من فکر کنند و من وقتم را به تعمق در پرسشهای بزرگتری اختصاص میدهم که در ارتباط با کدهایم قرار دارد. IDE دستیار برنامهنویسی بوده که بسیاری از جزییات را مورد توجه قرار میدهد. خودکارسازیهای نوین ما را از دردسرهای ترکیب نحوی نجات دادهاند. هرچند آنها توانایی انجام هر کاری را برای ما ندارند. ما هنوز به نقطهگذاری برای استقرار دستورات نیاز داریم. اما در بیشتر زمانها جزییات ریز درباره زبانها موضوع مهمی نیست. محیطهای توسعه یکپارچه همراه با چهارچوبها در این ارتباط به ما کمک میکنند، اما فقط در بخشی از جزییات کمککننده هستند.
آنها به ما یادآوری میکنند یک تابع در زمان فراخوانی به پارامترهایی نیاز دارد و بررسی میکنند که آیا نوعهای دادهای بهدرستی ارسال شدهاند یا خیر. بعد از آن تصمیم میگیریم کدام یک از توابع را باید مورد استفاده قرار دهیم و چگونه این توابع را به یکدیگر متصل کنیم. این نقطهای است که ذهن ما روی آن متمرکز میشود. زمانیکه ترکیب نحوی از اهمیت بالایی برخوردار نیست، متدها و توابع سطح بالا راهحلهای مناسبتری ارائه میکنند.
ترکیب نحوی در زبانهای تصویری در حال ناپدید شدن است
همانطور که برای سالها پیشبینی میشد، ترکیب نحوی در زبانهای بصری ناپدید میشود، این اتفاق بهآرامی رخ داده است و درباره همه زبانها صادق نیست. بعضی زبانهای برنامهنویسی همچون گذشته بهشدت شیوه متنی را دنبال کردهاند، اما بعضی از آنها در حال بصریتر شدن هستند. به این معنا که زبان کامپیوتری در قالب یک زیربنا قرار گرفته است. سازندگان GUI این بخش را سادهترین مکان برای پیادهسازی این موضوع دریافتهاند. میتوانید ابزارکهایی که در رابط کاربری قرار دارند را از صبح تا شب بدون نگرانی کشیده و رها کنید، جزییات در جعبههای بصری (ToolBox) قرار گرفتهاند. دشوار است که بگوییم زبانهای ویژوال در آینده به چه سمتی خواهند رفت، بهویژه آنکه آنها در زمینه تحقق بخشیدن به خلاقیت با شکست مواجه شدهاند. اما ابزارها هر زمان که فرصتی به دست آورند، در جهت بصریتر شدن رشد میکنند.
همانطور که برای سالها پیشبینی میشد، ترکیب نحوی در زبانهای بصری ناپدید میشود، این اتفاق بهآرامی رخ داده است و درباره همه زبانها صادق نیست. بعضی زبانهای برنامهنویسی همچون گذشته بهشدت شیوه متنی را دنبال کردهاند، اما بعضی از آنها در حال بصریتر شدن هستند.
در نتیجه، زبانها نسبتاً از قدرت یا اهمیت کمتری برخوردار خواهند بود. (شاید سادهترین مثالی که در این ارتباط میتوان به آن اشاره کرد، در ارتباط با منبع داده و بانکهایاطلاعاتی قرار دارد. کافی است روشهای ویژوالی و برنامهنویسی را که داتنت در ارتباط با شیء DataSet در اختیار برنامهنویسان قرار میدهد، مورد بررسی قرار دهید تا اهمیت این موضوع را بهخوبی متوجه شوید.)
کد قانون است!
زبانهای کامپیوتری تا حد زیادی اگنوستیک هستند. آنها به گونهای طراحی شدهاند که باز، قابل قبول و تقریباً بینهایت انعطافپذیر باشند. آنها بهگونهای طراحی شدهاند تا هر کاری را از آنها میخواهید، انجام دهند. مطمئناً گاهی شما به استفاده از یک سری از کاراکترهای خاص در ترکیب نحوی که استفاده میکنید نیاز دارید، اما آنها صرفاً کلیدی هستند. بعد از آن، عمدتاً If-then-else همراه با کمی بیت هوشمند مورد استفاده قرار میگیرد.
هنوز هم زبانها به شما کمک میکنند تا نتایجی که به آنها نیاز دارید را به همان روشی که در ذهن تجسم کردهاید در اختیار شما قرار دهند. اگر کاستیهایی وجود داشته باشد، آنها به گونهای طراحی شدهاند تا کدهای شما را تا حدی که امکان دارد از اشکال خالی کنند، نه اینکه شما را در انجام وظایفتان محدود کنند.
در نهایت چهارچوبها قدرت بلامنازع هستند
چهارچوبها قدرت نهفته هستند. آنها ابزاری هستند که معماران به کمکشان میتوانند تصمیم بگیرند چه چیزی مجاز و چه چیزی ممنوع است. اگر معمار نخواهد چیزی اتفاق افتد، فراخوانی تابع جادویی و جادوی API از دست میرود. اگر معمار ایدهای را دوست داشته باشد، معمولاً فراخوانیهای متعددی برای تابع همراه با ابزارهای پشتیبانیکننده از آن را در نظر خواهد گرفت.
اینجا است که لری لسیگ، استاد حقوق دانشگاه هاروارد، میگوید: «کد قانون است.» چهارچوبها قوانینی را اتخاذ میکنند که شما ملزم به رعایت آنها هستید و هنگامی که آنها را انتخاب کردید مجبورید مطابق با قوانین آنها زندگی کنید. بعضی پلتفرمهای وبلاگنویسی ارتباط با دیگران را از طریق AJAX تشویق میکنند و بعضی از آنها از آن پشتیبانی نمیکنند، این یک قانون است. به همین دلیل است که باید با دقت و بعد از بررسیهای لازم تصمیمگیری عاقلانه انجام دهید. این امر در نهایت به دلیل سلطهای است که چهارچوبها در هر بخشی از زندگی ما گذاشتهاند، حتی برای کسانی که برنامهنویس نیستند.
کلام آخر اینکه سعی کنید در انتخاب چهارچوبها دو اصل را مورد توجه قرار دهید؛ ابتدا شناخت و دوم تحلیل نیازمندها.
ماهنامه شبکه را از کجا تهیه کنیم؟
ماهنامه شبکه را میتوانید از کتابخانههای عمومی سراسر کشور و نیز از دکههای روزنامهفروشی تهیه نمائید.
ثبت اشتراک نسخه کاغذی ماهنامه شبکه
ثبت اشتراک نسخه آنلاین
کتاب الکترونیک +Network راهنمای شبکهها
- برای دانلود تنها کتاب کامل ترجمه فارسی +Network اینجا کلیک کنید.
کتاب الکترونیک دوره مقدماتی آموزش پایتون
- اگر قصد یادگیری برنامهنویسی را دارید ولی هیچ پیشزمینهای ندارید اینجا کلیک کنید.
نظر شما چیست؟