هشداری درباره حرفه برنامه نویسی شما - بخش دوم
ﺯﻣﺎﻥ ﻣﻄﺎﻟﻌﻪ: 7 دقیقه

هشداری درباره حرفه برنامه نویسی شما - بخش دوم

در بخش اول این مقاله، درباره زبان‌ها و پلتفرم وب صحبت کردیم. در این بخش به پلتفرم‌های دسکتاپ و موبایل، و همچنین برخی زمینه‌ها که باید بر آن‌ها تسلط داشته باشید خواهیم پرداخت.

دسکتاپ

ما درباره بخشی از برنامه دسکتاپ صحبت خواهیم کرد که آن را تبدیل به چیزی که هست، می‌نماید. تعداد زیادی برنامه بر روی پلتفرم‌های دسکتاپ وجود دارند که نیازمند مجموعه مهارت‌های خاصی هستند. برای مثال فتوشاپ با تصاویر کار می‌کند، و اگر بخواهید چیزی به مانند فتوشاپ را بنویسید، دانستن الگوریتم‌ها و تکنیک‌های پردازش تصویر واجب است. اگر می‌خواهید چیزی به مانند Dropbox بنویسید، دانستن برنامه نویسی سوکت‌ها واجب است. اگر می‌خواهید یک کمپایلر یا یک IDE‌ مانند Visual Studio بنویسید، دانستن نحوه مهندسی یک کمپایلر واجب است. خیلی به مشخصات هر کدام وارد نخواهیم شد فقط بیایید زبان‌هایی را بررسی کنیم که اگر می‌خواهید بر روی پلتفرم دسکتاپ کار کنید، به احتمال زیاد استفاده خواهید کرد.

وقتی که به زبان‌های مربوط به برنامه‌‌های دسکتاپ می‌رسیم، برنامه نویسان به سختی میان C++، Java یا C# انتخاب می‌کنند. اگر Oracle را دوست دارید، از Java استفاده کنید. اگر فکر می‌کنید که صاحب یک زبان برنامه نویسی نباید یک شرکت خاص باشد، از C++ استفاده کنید. اگر این خیلی به شما کمک نمی‌کند، بیایید پلتفرم‌های زیر مجموعه را مورد بحث قرار دهیم. اگر فقط برای کاربران ویندوز برنامه می‌نویسید، C# بهترین انتخاب است. با توجه به این که هر دو محصولات مایکروسافت هستند و با هم خیلی خوب تطابق دارند، این مسئله تقریبا واضح است. گرچه توسعه دهندگان C# تاکید دارند که پس از انتشار .Net Core، C# می‌تواند در محیط لینوکس هم استفاده شود. اگر می‌خواهید لینوکس را پوشش دهید، من به شخصه پیشنهاد می‌کنم که با C++ پیش بروید. نکته در اینجاست که C++ به عنوان یک زبان میان پلتفرمی ساخته شده بود، که در تمام سیستم عامل‌ها به خوبی کار می‌کند. در این زمینه، «میان پلتفرمی» یعنی این که شما باید پروژه‌های C++ خود را در تمام سیستم عامل‌ها به صورت جداگانه کمپایل کنید تا بتوانید برای هر سیستم عامل فایل‌های اجرایی مختلفی را دریافت کنید.

در آخر، اگر پیچیدگی C++ و این که باید یک کتابخانه جداگانه مانند Qt را متصل کنید تا یک تجربه رابط کاربری گرافیکی کامل برای کاربران خود داشته باشید، شما را عصبی می‌کند، و بدتان می‌آید که فایل‌های اجرایی مختلفی برای سیستم عامل‌های مختلف داشته باشید، با Java پیش بروید. Java ماشین مجازی مختص خود را دارد که به دست آوردن فایل‌های اجرایی را آسان‌تر می‌کند. برنامه شما در هر سیستم عاملی که JVM (ماشین مجازی Java) در آن حضور دارد، به خوبی کار می‌کند.

موبایل

وقتی که درباره Java صحبت می‌کنیم، اولین چیزی که به ذهن می‌رسد اندروید است. خیلی قبل‌تر از این که Kotlin به دنیا معرفی شود، Java زبان اصلی برای پیاده‌سازی برنامه‌های اندروید بود. امروزه، Kotlin قبل توسعه دهندگان را در بر می‌گیرد و حتی تجربه بهتری از توسعه برنامه‌ها برای پلتفرم اندروید را فراهم می‌کند. پس اگر می‌خواهید برنامه‌های اندروید بسازید، باید بین Java و Kotlin‌ یکی را انتخاب کنید. برای گرفتن تصمیم درست، باید به پشت صحنه نگاه کنیم. نکته در اینجاست که میانه گوگل و Oracle خیلی خوب نیست. Oracle صاحب Java است و Java در زمینه اندروید حکمرانی می‌کند. برای این که گوگل در اینجا مقداری انعطاف داشته باشد، مجبور بود گزینه‌ای برای نیمه روشن ماجرا فراهم کند، و از این رو Kotlin را معرفی کرد. اگر به تازگی وارد حرفه توسعه اندروید خود می‌شوید، پیشنهاد می‌کنم که از Kotlin استفاده کنید. اما اگر می‌خواهید یک توسعه دهنده رقیب در بازار باشید، باید برنامه‌هایی که پیش‌تر در Java پیاده‌سازی شده‌اند را بلد باشید؛ پس دانستن Java یک امتیاز خوب خواهد بود.

و در آخر، iLand (دنیای آیفون). یک داستان کاملا جداگانه. برای مدت زیادی Objective-C زبان حکمران برای iOS بود و اگر بخواهیم صادق باشیم، یادگیری Objective-C نیازمند یک رویکرد جدی بود. این مشکل اصلی تعداد نسبتا کم توسعه دهندگان Objective-C بود و Apple در نهایت با معرفی Swift، حرکت صحیح را انجام داد. یادگیری Swift نسبت به Objective-C بسیار آسان‌تر بود، که باعث شد توسعه دهندگان iOS بیشتر شوند. پس برای این که یک توسعه دهنده iOS باشید، باید با Swift پیش بروید؛ اما اگر می‌خواهید یک توسعه دهنده با اعتماد به نفس باشید، باید Objective-C را نیز یاد بگیرید تا برنامه‌هایی که پیش‌‌تر در آن نوشته شده‌اند را نیز پشتیبانی کنید.

بهتر است که در اینجا به React Native اشاره کنم. این فریم‌وورک شما را قادر می‌سازد تا برنامه‌هایی را هم برای اندروید و هم برای iOS با استفاده از JavaScript بنویسید.

آماده شدن برای مصاحبه‌های کدنویسی

برخی مفاهیم در دنیای برنامه نویسی اساسی هستند. اکثر مصاحبات فنی در هدف دارند که مهارت‌های رفع مشکل شما و دانستن آن مفاهیم را بسنجند؛ پس در کنار یادگیری یک زبان برنامه‌‌نویسی، شما باید با مفاهیمی که در برنامه نویسی مورد نیاز هستند هم آشنا باشید.

برای این که با موفقیت مصاحبات فنی را بگذرانید، باید در این زمینه‌ها استاد باشید:

۱. الگوریتم‌ها و ساختارهای داده

۲. سازمان‌دهی کامپیوتر و سیستم عامل‌ها

۳. کدنویسی

۴. طراحی سیستم

الگوریتم‌ها و ساختارهای داده

این مطلوب‌ترین مهارت برای برنامه نویسان است. این‌‌ها موضوعاتی هستند که هر برنامه نویسی باید با آن‌ها آشنا باشد:

پیچیدگی الگوریتم: نحو محاسبه پیچیدگی الگوریتم‌ها، و دانستن این که کدام الگوریتم بر پایه پیچیدگی‌‌اش برای کار شما مناسب‌تر است.

ساختارهای داده پایه و آداپتورها: آرایه، لیست‌های لینک شده، stack، صف (queue).

ذخیره سازی و جستجو: دانستن الگوریتم‌های چینش مختلف به شما کمک می‌کند تا بهترین پیاده‌سازی ممکن برای پروژه خود را بشناسید.

ساختارهای درختی و نمودارها: ساختارهای درختی و نمودارها در همه جا یافت می‌شوند.

جداول هش (Hashtables): با توجه به این که جداول هش یکی از موثرترین ساختارهای داده در جهان هستند، همیشه یک انتخاب خوب می‌باشند. شما باید بتوانید یک جدول هش را پیاده‌سازی کنید و با تکنیک‌های مربوطه آشنا باشید.

سازمان دهی کامپیوتر و سیستم عامل‌ها

به شدت توصیه می‌شود که با موضوعات این چنینی آشنا باشید:

  • عملیات‌های bitwise.
  • CPU‌ چگونه کد ماشین را اجرا می‌کند؟
  • تفاوت میان رم استاتیک و رم دینامیک چیست؟
  • انوع هسته سیستم عامل.
  • تفاوت میات mutex و semaphore چیست؟
  • Deadlock و livelock چه هستند؟

کدنویسی

شما باید دانشی در زمینه حداقل یک زبان برنامه نویسی داشته باشید. دانستن نکات مثبت و منفی، و بهترین رویکردهای زبان مورد علاقه شما همیشه به شما در نوشتن یک کد موثر، زیبا و خوانا کمک خواهد کرد. به شدت توصیه می‌شود که با تلاش برای رفع چالش‌ها کدنویسی را تمرین کنید.

طراحی سیستم

برای یک برنامه نویس مدرن، دانستن برنامه‌نویسی با گرایش به آبجکت واجب است. طراحی سیستم یعنی فکر کردن درباره کل سیستم، بلد بودن نحوه طراحی معماری آن، کالبد شکافی آن به کلاس‌ها، تعریف تعاملات آبجکت، و این که برای پاسخ دادن به سوالات زیر آماده باشید:

  • چگونه می‌‌توان Google Search را طراحی کرد؟ اگر در هر ثانیه میلیون‌ها درخواست همزمان وجود داشته باشند چه؟
  • جستجوی دوستان در Facebook را چگونه می‌توان پیاده‌سازی کرد؟
  • چرا باید از یک سیستم مدیریت دیتابیس نسبی استفاده کرد؟
  • چرا باید از یک دیتابیس NoSQL استفاده کرد؟

به شدت توصیه می‌شود که الگوهای طراحی مناسب را بلد بوده، و از آن‌ها استفاده کنید. برای مثال، باید تفاوت بین یک Composite و یک Decorator را بدانید.

با این که به احتمال زیاد از توسعه دهندگان تازه کار، یک مهارت رفع مشکل خوب طلب می‌شود، و اولین شغل شما نیازی به دانشی در زمینه‌های ذکر شده نخواهد داشت، اما همچنان این لیست یک کمک خوب در برنامه ریزی حرفه شما خواهد بود.

منبع

چه امتیازی برای این مقاله میدهید؟

خیلی بد
بد
متوسط
خوب
عالی
در انتظار ثبت رای

3 سال پیش
/@er79ka

دیدگاه و پرسش

برای ارسال دیدگاه لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام

در حال دریافت نظرات از سرور، لطفا منتظر بمانید

در حال دریافت نظرات از سرور، لطفا منتظر بمانید

عرفان کاکایی