مهارت برنامهنویسی مستقل از زبان و تکنولوژیای است که استفاده میکنید!
اگر بیست سال پیش فردی تصمیم میگرفت برنامهنویسی بیاموزد، برای انتخاب زبان با گزینههای محدودی روبهرو بود. اما امروز حوزۀ توسعۀ نرمافزار به قدری گسترده شده که انتخاب راه برای شروع مسیر را سختتر کرده؛ بنابراین طبیعی به نظر میرسد که قبل از انتخاب، شروع به جستجو کنیم تا مناسبترین زبان یا فریمورک را انتخاب کنیم. در شروع مسیر یادگیری برنامهنویسی ممکن است با این سوالات مواجه شوید:
کدام زبان برنامهنویسی مناسبتر از بقیهاست؟ کدام تکنولوژی سریعتر از بقیه است؟ React بهتر است یا Angular؟ و سوالاتی از این جنس .
کافیست این سوالات را در گوگل جستجو کنید تا ببینید چه اندازه در سایتهایی مثل Stack Overflow و reddit بحث و جدل بر سر این مباحث مطرح است. البته که انتخاب زبان و تکنولوژی برای یک پروژه مهم است و قطعا سرعت یک فریم ورک در کارایی نرمافزار تاثیرگذار است، اما پرسیدن این نوع سوالات در چه موقعیتی اهمیت دارد؟ و چقدر به این جنس سوالات میتوان جواب قطعی داد؟
*
زبانها و تکنولوژیهای مختلف یا به دنبال حل مسائل متفاوتی بودهاند یا راهحلهای مختلفی برای حل یک مسئله را ارائه دادهاند. برای مثال فریمورک Spring طوری طراحی شده که توسعۀ سیستمهای بزرگ که از اجزا و سرویسهای متعددی تشکیل شده را آسانتر کند؛ فریمورک Django توسعۀ وب اپلیکیشنها را در زمان کوتاه ممکن میکند و زبانهای Nodejs و Golang با رویکردهای متفاوتی مسالهی Concurrency را حل میکنند. هرکدام از این زبانها و تکنولوژیها نقاط قوت و ضعفی دارند و لازمهی انتخاب زبان و تکنولوژی مناسب، داشتن تجربه و شناخت کامل نسبت به نیازمندیهای پروژه است. البته خیلی اوقات تصمیم نهایی انتخاب زبان و تکنولوژی مستقل از ویژگیهای فنی آنها گرفته میشود. به عنوان مثال زمانی که مجموعهای میخواهد تکنولوژیای را برای توسعۀ یک محصول انتخاب کند، وجود توسعهدهندههای با مهارت از سرعت آن تکنولوژی مهمتر است یا اطمینان از پشتیبانی خوب و مستمر از ویژگیهای جدید و منحصر بهفرد یک تکنولوژی در اولویت بالاتری قرار میگیرد.
نکتهای که باید مدنظر داشته باشید این است که تفاوت بین زبانها و فریمورکهای مختلف در شروع کار، به قدری جزئی است که سوال چه تکنولوژیای را انتخاب کنم اهمیت کمتری دارد و البته اکثر مواقع؛ خصوصا در شروع یادگیری، قبل از اینکه به نقاط ضعف یک زبان برخورد کنیم مشکل اساسی در کدی است که خودمان نوشتهایم، پس در شروع مسیر یادگیری بیش از حد درگیر نقاط قوت و ضعف زبانها و تکنولوژیها نشوید. به یاد داشته باشید؛ برنامهنویسی مجموعهای از مهارتهای انتزاعی است که برنامهنویس با استفاده از زبانها و تکنولوژیهای در دسترس، آنها را بکار میگیرد. مهارتهایی مثل:
- حل مسئله
حل مسئله اصلیترین مهارت یک برنامهنویس است. هر کسی روشهای مختلفی برای این کار دارد که در اثر تجربه به دست آورده. پیشنهاد میکنیم خودتان را با مسائلی که فکر میکنید اندکی از سطح توانایی شما بالاتر است به چالش بکشید، راهحلهای مختلف را امتحان کنید، عملکردتان را بررسی کنید، بازخورد بگیرید، راهحلهایتان را اصلاح کنید و این فرآیند را مداوم و پیوسته تکرار کنید!
- یادگیری، جستجو و منعطف بودن
جهان توسعۀ نرمافزار بسیار وسیع است و هیچوقت نمیتوان ادعا کرد که تمام جزییات آن را یاد گرفتهایم؛ به همین خاطر لازم است بدانید در هر مهارتی تا چه اندازه باید عمیق شد و برای پیادهسازی ایدهها و رفع مشکلها چطور باید در منابع مختلف جستجو کرد. از طرفی سرعت تغییرات در این رشته به قدری زیاد است که لازم است برنامهنویس همیشه خود را بهروز و در جریان تغییرات نگه دارد. علاوه بر این در شرایط مختلف و در تیمهای متفاوت، ممکن است تکنولوژیها عوض شوند. بنابراین باید نسبت به تغییرات در این حوزه، منعطف باشید و روی زبان خاصی تعصب نداشته باشید.
- شناخت معماری و الگوها
معماری یک نرمافزار نقشۀ انتزاعی اتصال اجزای مختلف نرمافزار در سطوح متفاوت است. همینطور الگوها (Patterns) راهحلهای مرسومی برای مسائلی هستند که در برنامهنویسی زیاد تکرار میشوند. برنامهنویس خوب باید معماری و الگوها را به درستی رعایت کند. به این معنی که کدی که مینویسد با دیگر اجزای نرمافزار به خوبی کار کند و بتوان در آینده اجزای جدیدی به آن متصل کرد و بقیۀ برنامهنویسها هم به درستی آن را درک کنند.
در دورههای برنامهنویسی رهنما کالج تلاش ما بر این است که بیشتر از همه مهارتهای انتزاعی را تمرین کنیم. زبانها و تکنولوژیهای هر دوره با توجه به نیازهای پروژه انتخاب میشوند و تمرکز اصلیمان بر مهارتهایی است که جدا از زبان و تکنولوژی در پروژه با کار تیمی و عملی یاد میگیریم.
مطلبی دیگر از این انتشارات
قانون مترقي رانندگان کامیون
مطلبی دیگر از این انتشارات
چند نکته، چند روایت
مطلبی دیگر از این انتشارات
زیارت شه عبدالعظیم و دیدن یار