اولین چیزی که در هنگام شروع حرفه کدنویسی من اذیتم میکرد، انتخاب زبان / فناوری بود. چه چیزی را باید یاد بگیرم؟ از کجا باید شروع کنم؟ چه چیزی را باید بدانم تا اولین شغل خود به عنوان برنامه نویس را به دست بیاورم؟ در آن موقع (تقریبا ۱۰ سال پیش) Coursera، Udemy یا SoloLearn وجود نداشتند. من نمیتوانستم جهت مناسب و مسیر به سمت یک شغل موفقیت آمیز را کشف کنم. شغلی با درآمد بالا، و فضانوردی قرن بیست و یکم: برنامه نویسی.
مشکل مشابه همچنان وجود دارد: تازه کاران در انتخاب گیر کردهاند. هیچ مسیر مستقیمی برای تبدیل شدن به یک برنامه نویس خوب وجود ندارد و جامعه آنچنان با تازه کاران خوب رفتار نمیکند. مسیر منتهی به یک حرفه برنامه نویسی موفقیت آمیز، حال از گذشته هم مبهمتر است. شما (با فرض این که یک تازه کار هستید) باید بین C++ / C++ 11 / C++ 14 / C++ 17، Java، C#، Java، Kotlin، PHP، Python، Node.js، JavaScript (صبر کنید، با Angular، React یا Vue) و... انتخاب کنید.
زبان، فناوری یا مهارتها؟
برای پاسخ دهی به سوال اصلی، اول باید یک سوال از شما بپرسم: «چه میخواهید؟» آیا از ساختن برنامههای موبایل یا یک وبسایت هیجان زده میشوید، یا این میخواهید یک برنامه دسکتاپ مانند فتوشاپ بسازید؟ شاید هم شما کلا به توسعه بازی علاقه دارید. موبایل؟ دسکتاپ؟
هوشمندانهترین راه برای پاسخ دادن به سوال «برای استخدام شدن در یک شرکت فناوری به عنوان یک مهندس نرمافزار، چه چیزی باید بلد باشم؟» این است که مهارتهای اصلی مورد نیاز برای گذراندن مصاحبه فنی را دریابید. اما در ابتدا باید همه چیز را به ترتیب پشت سر هم قرار دهیم. بیایید به دنیای برنامه نویسی، کشورها و شهرهایش، فرهنگها و جنگهایش و پیروزیهای و شکستهایش وارد شویم. آن دسته از شما که خیلی صبور نیستند، میتوانید به بخش «آماده شدن برای مصاحبههای کدنویسی» اسکرول کنید.
بررسی دنیای برنامه نویسی ما را به ۳ پلتفرم اصلی میآورد:
۱. وب (Google Search، Facebook، Amazon، Twitter و...)
۲. دسکتاپ (Dropbox، Photoshop، Visual Studio، Skype و...)
۳. موبایل (SoloLearn، Instagram، Uber و...)
اکثر سرویسهای بالا تقریبا در تمام پلتفرمها وجود دارند. برای مثال Skype یک برنامه دسکتاپ، موبایل و وباپلیکیشن است، Twitter یک برنامه وب و موبایل است و...
وب
خود به تنهایی یک مفهوم بزرگ در این زمینه است. برای واضحتر کردن آن، بهتر است آن را به دو بخش frontend و backend تقسیم کنیم، که مورد دوم بخش مورد علاقه من است. frontend چیزی است که شما میبینید، و backend چیزی است که در جهت دیدن frontend به آن نیاز دارید. frontend ظاهر و احساس صفحه است، و backend سروری است که برنامهای که درخواستهای کاربر را پردازش میکند، کوئریهای دیتابیس را مدیریت میکند و... را اجرا میکند.
Frontend. اگر میخواهید در ظاهر و احساس صفحه استاد شوید، برای مثال وبسایتهایی بسازید که بسیار زیبا هستند و کاربران عاشق آنها میشوند، باید HTML (ظاهر)، CSS (ظاهر و احساس) و JavaScript (احساس) را بلد باشیم. این کافی نیست. امروزه استفاده از JavaScript خالص دیگر کافی نیست، پس باید فریموورک مناسب، که در حال حاضر موارد معروف Angular، React و Vue هستند را انتخاب کنید.
مورد انتخابی شما اکثرا بر پایه شرکتی که بیشتر دوست دارید، یعنی Google یا Facebook میباشد. اگر Google را دوست دارید، Angular را انتخاب کنید، و اگر Facebook را دوست دارید، React را انتخاب کنید. اگر هم هیچ کدام را دوست ندارید، Vue را انتخاب کنید. کاملا ساده است! جدا از این موارد، شما باید برخی مفاهیم اساسی دیگر مانند کارهای داخلی پروتکل HTTP را یاد بگیرید، و با وب سرورها آشناییت داشته باشید.
(حداقل نباید از نامهایی مانند Apache یا Nginx بترسید) این که یک توسعه دهنده frontend باشید، یعنی این که دادهها را از backend بگیرید و آنها را رندر کنید (برای کاربر زیباتر کنید)؛ پس یک درک حداقلی از APIها و JSON (و این که چرا از XML بهتر است) برای شما واجب است.
Backend. حقیقیت نادیده، داستان ناگفته. در روزگار قدیم، بلد بودن PHP برای این که خود را یک توسعه دهنده backend بنامید کافی بود، تا این که مایکروسافت ASP.NET را معرفی کرد. این دو با یکدیگر در جنگ بودند، تا این که Node.js آمده و همه چیز را در بهترین ترتیب خود قرار داد. برخی مفاهیم توسعه دهی بر پایه رویداد بیشتر نسبت به Node.js صدق میکنند؛ پس اگر آن را انتخاب کنید، یک لطف بزرگ در حق پروژه خود کردهاید.
بخش گیج کننده backend تنوع زبانیاش است. شما میتوانید از هر زبانی که میخواهید در backend استفاده کنید. در واقع backend خلاصهای برای «کوئری کردن دیتابیسها، پردازش دادهها، پاسخ به کلاینت و عمل کردن به صورت موثر در حد ممکن» و این که «انتخاب زبان / فناوری / دیتابیس مناسب» یک گزینه برای شما نیست، میباشد. با این که برخی توسعه دهندگان دیتابیسهای نسبی مانند MySQL و PostgreSQL را انتخاب میکنند، توسعه دهندگان تازه کار، نیمه تاریک یعنی NoSQL (مانند Cassandra یا MongoDB) را انتخاب میکنند. آیا در یک دقیقه بیش از یک میلیون بازدید دارید؟ به سراغ NoSQL بروید.
آیا محصول شما با سرعت زیادی تغییر میکند؟ به سراغ NoSQL بروید. فرض کنید که شما جناح مورد نظر خود را انتخاب کردهاید. حال چه فناوریای را باید انتخاب کنید؟ آیا مایکروسافت را دوست دارید و از ویندوز سرور استفاده میکنید؟ به سراغ MySQL بروید. آیا Oracle را دوست دارید؟ پس آن را انتخاب کنید. یا این که شاید با Oracle مشکلی ندارید، اما از مایکروسافت متنفرید. پس به سراغ MySQL بروید. آیا کلا با کسی کاری ندارید؟ پس PostgreSQL را انتخاب کنید.
NoSQL کمی پیچیده است. این مورد به شدت به سرویس و معماری داده شما بستگی دارد. آیا شما فقط برخی اسناد و برخی ارتباطات ضعیف را میان آنها دارید؟ از MongoDB استفاده کنید. آیا نیاز دارید که مقدار زیادی جفتهای مقادیر کلیدی را ذخیره کنید؟ Redis را انتخاب کنید. آیا با یک ساختار نمودار مانند کار میکنید؟ Neo4j را انتخاب کنید. آیا خیلی مطمئن نیستید که به چه چیزی نیاز دارید، اما حس میکنید که به همه آنها نیاز دارید؟ ArangoDB را انتخاب کنید.
درحالیکه دیتابیس تمام دادههای ضروری را در خود نگه میدارد، شما باید یک API را تعریف کنید که کاربران شما از طریق آن میتوانند به دیتابیس درخواستی را ارسال کنند، و آن را بخوانند و یا روی آن بنویسند. در اینجا کاربردیترین گزینه Node.js است، اما میتوانید با PHP، ASP.NET، Ruby یا Python هم پیش بروید. پیشنهاد من Node.js میباشد. Facebook به نوعی از PHP در backend خود استفاده میکند. آنها بخش بزرگی از PHP را در C++ بازنویسی کردند. برخی از Python استفاده میکنند، و برخی دیگر Ruby را ترجیح میدهند. واقعیت این است که شما تقریبا از هر زبانی میتوانید در backend استفاده کنید. برای مثال، Google از C++، Java و Python استفاده میکند. C++ برای پردازش داده سطح پایین بسیار مناسب است. Java برای کارهای پسزمینه مانند بروزرسانی پیشنهادهای دوستی برای یک کاربر، یک گزینه خوب است. به احتمال زیاد شما برای تجزیه و تحلیل دادهها و پردازشهای زبان طبیعی، یا عملیاتهای مربوط به هوش مصنوعی از Python استفاده میکنید.
بازهم جدا از زبانها، فریموورکها و دیتابیسهای متنوع در backend، برخی مفاهیم هستهای دیگر هم وجود دارند که شما باید آنها را یاد بگیرید.
- Cache کردن. از کش CPU شروع شده و با کش مرورگر تمام میشود. کش کردن در همه جا استفاده میشود. برای سرویسهای با حجم داده بالا مانند Google Search یا Facebook، کش کردن به شدت ضروری است.
- سرورها. با این که ممکن است فکر کنید این مورد به سختافزار مربوط است، (که اگر بدانید چگونه چند کامپیوتر را به گونهای راهاندازی کنید که به عنوان یک قطعه در ذخیره سازی و پردازش دادهها کار کنند، بسیار هم خوب است) سرور برای توسعه دهندگان backend به معنای وب سرور میباشد. امروزه وب سرور معروف، Nginx است و دانستن نحوه راهاندازی و پیکربندی آن در تلاشهای آینده شما بازده خوبی خواهد داشت.
- سوکتها. اساس برنامه نویسی شبکه. هر چیزی که توسط شبکه میفرستید / دریافت میکنید توسط سوکتها انجام میشود. دانستن جزئیات سطح پایین برنامه نویسی سوکتها یک منفعت خوب در میان مهارتهای شما است. (اگر تفاوت بین سوکتهای TCP، سوکتهای UDP و این که WebSocketها چه هستند را درک کنید، حتی بهتر هم هست)
- طراحی دیتابیس. مهم نیست که کدام سیستم مدیریت دیتابیس را انتخاب کرده، یا مجبورید با آن کار کنید؛ انجام عملیات بر روی دادهها یکی از کارهای اصلی شما خواهد بود. قابلیت دیدن تصویر کامل، بصری سازی دادهها و ارتباط بین واحدهای داده، مهارتی است که در طی حرفه برنامه نویسی خود به دنبال آن خواهید بود.
- امنیت. این مورد هم به مانند مفاهیم دیگر که در بالا به آنها اشاره شد، بسیار وسیع است. شما نمیتوانید هیچ کدام از آنها را به کلی یاد بگیرید. پس حداقل باید با برخی رویکردها مانند ذخیرهسازی هشهای پسوورد به جای متن ساده، آشنا باشید. همچنین بررسی درخواستها از طریق نشانههای API، تایید مجوزهای کاربر برای هر درخواست و...
در بخش دوم این مقاله پلتفرمهای دسکتاپ و موبایل، و برخی زمینهها که باید بر آنها تسلط داشته باشید را مورد بحث قرار خواهیم داد. با راکت همراه باشید...
دیدگاه و پرسش
در حال دریافت نظرات از سرور، لطفا منتظر بمانید
در حال دریافت نظرات از سرور، لطفا منتظر بمانید