· تا حالا از خودتون پرسیدین که چرا باید این چیزای پیچیده رو یاد بگیریم درحالی که کاربرد اونا رو در روزمره نمیبینیم؟
· چرا الگوریتم و ساختمان داده برای شرکت های بزرگ و به اصطلاح غول تکنولوژی مهم تر از زبان برنامه نویسی و فریم ورک هاست؟
· چرا در مصاحبه این شرکت ها سوالات چالش برانگیزی داده میشه که نیاز به خلاقیت بالا دارن؟
خیلی از برنامه نویس های تازه کار قید یادگیری ساختمان داده و الگوریتم رو بخاطر پیچیدگی شون میزنن چون فکر میکنن کاربردی ندارن، حتی ممکنه شما با بعضی برنامه نویسی ها با چند سال سابقه کار هم مواجه بشین که انواع جست و جو رو بلد نباشه! اما سوال مهم اینجاست که چرا شرکت های بزرگ و غول عصر ارتباطات مثل Google و Facebook توی مصاحبه هاشون بجای تمرکز روی زبان های برنامه نویسی و فریم ورک ها، روی دانش ساختمان داده و طراحی الگوریتم فرد مصاحبه شونده تمرکز میکنن؟
از یک مثال ساده شروع کنیم: شما برای پیدا کردن یک صفحه خاص از یک کتاب، کل صفحات رو بررسی نمی کنین، بلکه با توجه به ترتیبی که شماره صفحه ها دارن، یک صفحه رو شانسی باز می کنین و در صورت پیدا نکردن اون صفحه، اگه شماره صفحه مورد نظر کمتر بود، به صفحات عقب تر برمیگردین و اگه بیشتر، به جلوتر. بارها و بار ها این تکرار رو انجام میدین تا به صفحه مورد نظر برسین. این روش همون”جستجو دودویی” معروفه که هربار نصف صفحات تحت جست وجو حذف میشن و شما سریعتر صفحه مورد نظر رو پیدا میکنین؛ این یعنی صرفه جویی در زمان و انرژی.حالا فرض کنین که قراره یک کاربر به همراه اشخاصی که با اون دوست هستند رو توی یک میلیارد کاربر داخل دیتابیس پیدا کنین،اینجاست که ذخیره سازی کاربر ها و الگوریتمی که برای جستجو استفاده میشه خیلی مهم میشه. مخصوصا برای شرکتی که باید هزینه منابعی مثل سرور و پایگاه داده های بزرگ رو بپردازه و در عوض انتظار داره مدت زمان پاسخ درخواست هاش زیر 1 ثانیه باشن، از طرفی باید هر عملیاتی که کاربران انجام میدن رو در نظر بگیره تا با پاسخ مناسب بهترین نتیجه رو کسب کنه ، وگرنه هزاران دلار بیهوده تلف میشه و سودش افت میکنه.
در این شرکت ها تنها 20-30 درصد زمان یک پروژه صرف برنامه نویسی و پیاده سازی میشه و بیشتر زمان به طراحی بهترین و بهینه ترین الگوریتم هایی پرداخته میشه که از منابع (سرور، حافظه، برق و…) کمتری استفاده میکنه.
یک طراح خوب باید بتونه سناریوهای مختلف یک اپلیکیشن رو پیش بینی کنه و شاخص های(سرعت و حافظه مصرفی) هر ساختمان داده رو بشناسه تا بتونه ساختمان داده مناسب رو انتخاب کنه.
فارغ از شرکت ها، مسائل پیچیده زیادی در دنیای واقعی وجود داره که هنوز راه حلی براش وجود نداره. دانش ساختمان داده و الگوریتم میتونه کمک کنه که عمق مسائل رو بهتر ببینیم و با ارائه یک راه حل بهتر، به حل کردن چنین مسائلی کمک کنیم.
https://www.geeksforgeeks.org/why-data-structures-and-algorithms-are-important-to-learn/
نویسنده