برنامه نویس شدن یا کد نویس ماندن
چرا هر توسعه دهنده ای باید علم نظریه کامپیوتر ها رو داشته باشه ؟
مقاله زیر، مروریه بر نوشته Shalitha Suranga از وبسایت betterprogramming برای شما عزیزانم.
هر کسی میتونه یاد بگیره چطوری کد نویسی کنه. نظریه علوم کامپیوتر ها میتونه بهتون کمک کنه چطوری برنامه نویسی کنین.توسعه دهنده ها اغلب برنامه نویسی رو از دبیرستان، دانشگاه و یا اولین دوره کارورزیشون شروع می کنن.در همین حال برخی دیگه از توسعه دهنده ها، برنامه نویسی رو با آزمایش کردن تکنولوژی ها و فن آوری های مختلف و همچنین تماشا کردن دوره های آموزشی روی اینترنت یاد میگیرن که به این توسعه دهنده ها، توسعه دهنده های خودآموز هم میگن. بعضی توسعه دهنده های عاشق و پرشور هم از تمام مراحل بالا برای یادگیری استفاده می کنن.اونا قبل از اینکه وارد دانشکده برنامه نویسی بشن، برنامه نویسی رو شروع می کنن.بعدش هم مهارت هاشونو تو دانشگاه یا حین کارآموزی ارتقا میدن.
توسعه دهنده ها معمولا نظریه علوم کامپیوتر هارو تو دانشگاه باید پاس کنن، بعضی ها هم تو دوره کارورزی با این مفاهیم آشنا میشن. مبانی علوم کامپیوتر شامل موضوعاتی مثل ساختمان داده ها، الگوریتم ها، اصول شبکه ها، ریاضیات گسسته، هوش مصنوعی، گرافیک های کامپیوتری و الگو های طراحی یا دیزاین پترن ها رو شامل میشه.همونطور که اشاره کردم، همه برنامه نویسا از دانشگاه وارد این حوزه نمیشن و خیلی هاشون به صورت مستقیم وارد حوزه برنامه نویسی میشن بدون اینکه مبانی علوم کامپیوتر رو در بالا بهش اشاره کردم بلد باشن.بعضی وقتا هم تو اولین پوزیشن کاری که قرار میگیرن باید اونارو یاد بگیرن.
من وقتی که 13 سالم بود، برنامه نویسی رو با ویژوال بیسیک 6 شروع کردم. بعد تازه تو سن 15 سالگی تو کالج برنامه نویسی رو بهمون درس دادن. من بیشتر از صد تا نرم افزار رایگان در طول تحصیلم در کالج و قبل از ورود به دانشگاه نوشتم. (تفاوت کالج با دانشگاه تو اینه که، کالج ها وسعت کوچیکتری نسبت به دانشگا ها دارن. مثلا شما مدارک نهایتا کارشناسی میتونی از اونجا بگیری و اگه بخوای در مقاطع بالاتری تحصیل کنی مثل ارشد و دکتری باید بری دانشگاه). اون زمان تسلطی به مباحث نظریه کامپیوتر ها نداشتم فقط میدونستم چطوری باید کد نویسی کنم. وقتی اون رو تو دانشگاه یاد گرفتم به من کمک زیادی کرد که بتونم حرفم رو در درک مفاهیم مهندسی نرم افزار ارتقاء بدم. بتونم در سیستم های متن باز یا همون Open Source مشارکت داشته باشم.با توجه به تجربه من اگه اول این مفاهیم رو یاد بگیرین میتونه مزایای زیر رو براتون داشته باشه :
نظریه ها به شما کمک میکنه کد های بهینه تری بنویسین
با وجود سخت افزار های قوی، پرفورمنس یا کارایی (من سعی میکنم که خیلی از لغاتی که ما به صورت انگلیسی باهاش آشنا هستیم تا فارسی اون، ترجمه نکنم و صرفا از فانگلیش اون :دی استفاده کنم. منظور همون پرفورمنس) هنوز به عنوان یک فاکتور حیاتی در توسعه نرم افزار ها تلقی میشه. در گذشته به دلیل نبود سخت افزار های قوی، همه توسعه دهنده ها مجبور بودن کد های فوق بهینه ای بنویسن. یادتون نره، قدیما مردم فقط با یک حافظه 4 کیلوبایتی تونستن به ماه برن، اما الان وضعیت به طرز شگفت آوری متفاوته. الان ما فقط برای اجرای یه کد ادیتور جدید به 16 گیگ حافظه احتیاج داریم :دی.
به هرحال اگه ما ارتباط نزدیکی با سخت افزار داشته باشیم یا مثلا محصولمون توسط میلیون ها کاربر بخواد استفاده بشه، ما هنوزم نیاز داریم که کد های بهینه ای برای کامپیوتر های جدید بنویسیم. (جای دوری نریم همین دیجی کالا رو در نظر بگیرین. روزانه بیش از 4 میلیون بازدید کننده داره ). خب حالا اگه بخوایم کد های بهینه بنویسیم باید تسلط خوبی به مباحث ساختمان داده ها داشته باشیم، الگوریتم های سریع و مدیریت بهینه حافظه ها رو بلد باشیم.
نظریه ها،نقش کد نویس ها در مقابل برنامه نویس ها رو توضیح میدن
طبق نظر اکثر مردم، کلمه کدنویسی در واقع همون معنی کلمه برنامه نویسی رو میده. بذارین یه حقیقت پنهان و توضیح بدم. کد نویسی برنامه نویسی نیست. کد نویسی ها و برنامه نویس ها یک کار رو انجام نمیدن.کد نویس کسیه که میتونه با زبان های سطح بالا کار کنه و در نهایت برنامه هایی رو با این زبان ها ایجاد میکنه، تحویل کامپایلر ها و مفسر ها بده. در کد نویسی شما نیاز ندارین سخت افزار بلد باشین یا اینکه مثلا کامپیوتر ها چطوری کار می کنن. از طرفی دیگه برنامه نویس ها هم کد نویسی می کنن اما به صورت عمیق مفاهیم داخلی و پایه سخت افزار هارو میشناسن.یه برنامه نویس میتونه یه برنامه ی نرم افزاری کامل و با حداقل خطا رو تولید بکنه، به عبارت دیگه میشه گفت کد نویسی زیر مجموعه برنامه نویسیه. هر کسی که سینتکس یه زبان برنامه نویسی رو بلد باشه میتونه کد نویس باشه اما برای برنامه نویس بودن باید مفاهیم نظریه کامپیوتر مثل ساختمان داده و... رو خوب بلد باشین. هر برنامه نویسی میتونه کد نویس هم باشه اما لزوما هر کدنویسی برنامه نویس نیست.
نظریه ها کمک میکنن تخصصتون رو پیدا کنین
در زمینه نرم افزار، دو تا گزینه وجود داره : میتونین آچار فرانسه باشین که برای هر کاری استفاده بشین و یا میتونین تو یه زمینه خاص تخصص داشته باشین. توسعه دهنده ها میتونین در بیش از یک زمینه فعالیت کنن. به طورمثال فیلد مورد علاقه من Cloud Computing یا محاسبات ابری و Software Architecture یا همون معماری نرم افزاره.این روزا اکثر توسعه دهنده های مبتدی کار خودشون رو با طراحی در سمت Front شروع می کنن چون این روزا ترند بازاره وبعد از چند سال میشنوم که اکثر این توسعه دهنده ها با چیزی که دوست دارن کار نمی کنن.تمام مسیر های شغلی مدرن، در حال حاضر زیر شاخه ای از علوم کامپیوتره.مثل software engineering ، network engineering ، cloud computing ، mobile computing ، embedded system design، database design و.... اگه واقعا تو هر کدوم ازینا فیلد ها مبانی شون رو خوب یاد بگیرین، پیدا کردن چیزی که بهش علاقه دارین مثل یه کیکه :دی.
نظریه ها کمک میکنن شما مسئه ها رو راحت تر حل کنین
توسعه نرم افزار همیشه ساده نیست. توسعه دهنده ها اغلب به مشکل هایی بر میخورن که نیاز به یک راه حل کارا و قابل اعتماد داره. یک راه حل مهندسی نرم افزار کارا و درست وابسته به مهارت ها و تخصص های اعضای یک تیم توسعه ست.به طور مثال یه تیم میتونه راه حل ناکارآمدی رو ارائه بده در حالی که یه تیم دیگه برای حل همون مسئله راه حل مناسبی رو ارائه میده. دانش نظریه ها به توسعه دهنده ها کمک میکنه راه حل های بهتر، هوشمند و کوتاه تری رو ارائه بدن . مثلا تو پروژه معروف متن باز Git ، ذخیره کردن commit ها یه مشکل اساسی تلقی میشد که توسعه دهنده های اولیه Git ، اون رو با شیوه Hashing و tree data structure حل کردن. در واقع شاید هر کسی بتونه سوال های مصاحبه های شرکت های بزرگ فناوری رو جواب بده اما ارائه یک راه حل کارا و بهینه و هوشمند فقط با داشتن دانش نظریه ها ممکنه.
چالش های رقابتی آنلاین برنامه نویسی یکی از بهترین روش ها برای تست قدرت حل مسئله ست. شرکت های فناوری بزرگ از این چالش ها تو مصاحبه هاشون استفاده می کنن تا بهترین حلال مسائل رو پیدا کنن. اونا از داوطلبانشون در مصاحبه نمیخوان که برای بخشی از برنامه کد نویسی کنن، در عوض اونا قدرت حل مسئله رو در شرکت کننده ها با بررسی دانش نظریه هاشون تست می کنن.
نتیجه گیری :
نظریه علوم کامپیوتر ها برای ورود به توسعه نرم افزار اجباری نیست، اما داشتن اون میتونه برای شما مزیت حساب بشه. همین سناریو برای زبان های برنامه نویسی هم اتفاق میفته.بی شک هر توسعه دهنده ای میتونه با یکی از زبان های برنامه نویسی جدید شروع کنه، پایتون و جاوااسکریپت زبان های ساده ای برای شروع کار هستن، اما اگه با زبان C شروع کنین میتونه مزایایی رو برای شما داشته باشه که قصد دارم در موردش یه مقاله کامل بنویسم.
بعضی اوقات، شروع کردن توسعه نرم افزار با یادگیری نظریه ها نسبت به یادگیری کد نویسی در ابتدا سخت تره، اما این رو بدونین بدون دانش نظریه ها شما فقط یه کد نویس هستین نه برنامه نویس. به هر حال، این به خودتون بستگی داره که میخواین کد نویس باشین یا برنامه نویس. برنامه نویسی حل کردن مشکلات مهندسی نرم افزاره که با درک مفاهیم پایه کامپیوتر ها و از روش کد نویسی انجام میشه، بنابراین با نظریه ها شروع کنین اگه میخواین برنامه نویس بهتری باشین.