اینجا سعی دارد با کمک دیگران به شما کمک کند که چگونه مسیر شغلی خود را انتخاب کنید.
نوشتن یک لیست کامل از تمام حوزههایی که شما میتوانید در آنها فعالیت کنید کار بسیار دشواری است. در اینجا حوزههایی که از نظر نویسنده و نویسندگان احتمالی این متن، شما میتوانید در آنها فعالیت کنید در زیر آمده است:
در این بخش، نیازمندیها و انتخابهایی که شما در این مسیر دارید آورده میشود. نیازهای عمومی در این بخش و در هریک از بخشها نیازهای اختصاصی آن بخش آورده میشود.
مهارتهای عمومی:
- آشنایی خوب با مطالعه به زبان انگلیسی: به علت انگلیسی زبان بودن اکثر منابع این حوزه؛ شما برای مطالعه، افزایش اطلاعات و بهروز نگه داشتن دانش خود نیاز دارید تا آشنایی خوبی با مطالعه مطالب به زبان انگلیسی داشته باشید.
- آشنایی خوب با ساختمانداده و طراحی الگوریتم: شما بایستی ساختمان دادههای مختلف و الگوریتمهای مختلف را شناخته و بتوانید در صورت نیاز با یک تحقیق کوچک از اینترنت، ساختمانداده مناسب را انتخاب و به صورت موردی پیادهسازی کنید. همچنین بایستی بتوانید الگوریتمهای مختلف را در عمل شناسایی کرده و با توجه به ویژگیهای کلی آنها از آنها استفاده کنید.
- آشنایی با سیستم عامل: بایستی بتوانید درک کنید که سیستم عامل چیست و چگونه کار میکند. با مفاهیم پروسه و ترد آشنا باشید
- تایپ با سرعت مناسب: چون تایپ کردن عملا بخش مهمی از برنامهنویسی است پس سعی کنید ۱۰ انگشتی تایپ کنید.
- آشنایی با نرمافزارهای کنترل نسخه: به عنوان یک توسعهدهنده نرمافزار چه به صورت انفرادی کار کنید چه در تیمهای نرمافزاری، به یک نرمافزار کنترل نسخه مانند git نیاز دارید تا در جریان کدنویسی، تغییرات روی کد را مدیریت و تاریخچه آن را حفظ کنید.
مهارتها:
- آشنایی با الگوهای طراحی
- آشنایی با موارد مرتبط با همزمانی
- آشنایی با یکی از زبانهای java, c#, php, python, nodeJS
- آشنایی به sql و نحوه انجام کارها در پایگاه داده
- آشنایی با انواع تکنولوژیهای وب سرویسها
- آشنایی با چارچوبهای سمت سرور
مهارتها
- آشنایی با C/C++
- تسلط با موارد مرتبط با همزمانی
- آشنایی با پروتکلهای ارتباط m2m
مهارتها
- تسلط بر HTML و CSS
- تسلط بر Javascript و نسخههای جدید (es6, es2017)
- آشنایی با ابزارهای خودکارساز مانند گالپ و گرانت (Gulp, Grunt)
- آشنایی با ابزارهای تبدیل نسخههای جدید جاوااسکریپت به نسخه قابل اجرا در مرورگرهای قدیمی (Babel, Bublé)
- آشنایی با باندلرها (Webpack, Rollup)
- آشنایی با فریمورکهای ساخت اپلیکیشن وب (React, Vue, Angular, Ember)
- آشنایی با فریمورکهای طراحی (Bootstrap, Foundation, Semantic UI)
همونطور که میدونید توسعه اپلیکیشنهای موبایل در ایران عمدتا بر روی دو پلتفرم Android و iOS تمرکز داره. امن هم سعی میکنم هردوی این موارد رو جداگانه بررسی کنم.
- تسلط بر زبان JAVA/Kotlin
- آشنایی با XML و ساختار آن
- آشنایی با AndroidStudio ( نحوه برنامهنویسی در محیط توسعه، پیکربندی و استفاده از شبیهساز اندروید، خروجی گرفتن APK و غیره )
- آشنایی با Gradle و نحوه پیکرندی و استفاده از آن ( مثلا اضافه کردن Library یا Flavorsها )
- تسلط با SDK اندروید ( مواردی مثل: اکتیویتیها و چرخه زندگی اونها، لایوت و ویووها، ورودیهای کاربر، ار با کالکش ویووها، آشنایی با سنسورها و غیره )
- آشنایی با تست نویسی ( UnitTest و integrationTest )
- آشنایی با متریال دیزاین ( آشنایی بر مفاهیم کلی و اولیه، AppCompat، اکشن بار، دکمهها و انمیشینها)
- آشنایی با Database و نحوه ذخیرهسازی اطلاعات
- آشنایی به وبAPI و نحوه دریافت اطلاعات از اینترنت ( آشنایی با ساختار JSON، آشنایی با APIهای REST/SOAP یا Socket )
- آشنایی با مفاهیم پیشرفته ( نظیر: RxJAVA، DependencyInjection و کار با Dagger )
- آشنایی با دیزاین پترنها ( برای مثال الگوهای Singelton, Iterator, Adapter و غیره )
- آشنایی با الگوهای ساخترای ( نظیر MVC، MVP یا MVVM و غیره )
- خروجی گرفتن و sign کردن اپ و ارسال آن به مارکت ( مانند GooglePlay یا CafeBazaar )
- آشنایی با Firebase ( یا حداقل آشنایی با سرویسهای PushNotification )
- تسلط بر git یا SVN
- آشنایی با زبان Swift ( آشنایی با مفاهمی مثل مقادیر Optional، عبارات if..Statement، کلاسها و ارثبری، مدیریت خطا، و البته آشنایی با Objective-C )
- آشنایی با محیط توسعه XCode (نظیر کدنویسی، راه اندازی و استفاده از شبیهساز )
- آشنایی با CocoaTouch و تعامل با APIهای اپل
- آشنایی با SotryBoard, XIB و Segue جهت طراحی رابط کاربری
- آشنایی با استانداردهای اپل برای طراحی رابط کاربری
- آشنایی با AutoLayout
- آشنایی با کالکشن ویووها
- آشنایی با تست نویسی ( UnitTest , IntegrationTest و XCTest)
- آشنایی با CoreData و دیگر روشهای ذخیره اطلاعات
- آشنایی با دیگر Coreها ( نظیر CoreAnimation, CoreAudio, CoreGraphic, CoreLocation, MapKit, QuartzCore و غیره )
- آشنایی به وبAPI و نحوه دریافت اطلاعات از اینترنت ( آشنایی با ساختار JSON، آشنایی با APIهای REST/SOAP یا Socket )
- آشنایی با دیزاین پترنها ( برای مثال الگوهای Singelton, Iterator, Adapter و غیره )
- آشنایی با الگوهای ساخترای ( نظیر MVC، MVP یا MVVM و غیره )
- آشنایی با APN برای ارسال نوتیفیکیشن
- آشنایی با مفاهیم پیشرفته ( نظیر: RxSwift و DependencyInjection )
- خروجی گرفتن از XCode برای نسخههای جیلبرک (بدون ساین کردن )
- ارسال اپلیکیشن به اپلاستور برای انتشار
علاوه بر مواردی که در بالا برای هرکدام از پلتفرمها گفته شد، در مورادی ممکن از نیاز باشد تا با استفاده از فریمورک یا ابزارهای موجود بصورت هیبردی مشغول به توسعه اپلیکیشن موبایل شوید. برای این موارد بنظر میرسد که علاوه بر موارد بالا، موارد زیر نیز مورد نیاز باشد:
- آشنایی به یکی از فرمورک یا ابزارهای توسعه هیبریدی ( ReactNative, Xamarin و غیره )
- تسلط بر زبان JavaScript برای کار با React
- آشنایی با Redux برای کار با React
- آشنایی با ES6 و JSX برای کار با React
- آشنایی با Router برای کار با React
- تسلط بر زبان C# برای کار با Xamarin
- آشنایی با ابزارهای تست برای هردو پلفترم
بدیهیست فردی که تمامی امکانات بالا را داشته باشد بهترین گزینه برای استخدام است و صد البته داشتن همه این مهارتها کار آسانی نیست، با این حال سعی کردم تمامی مباحثی که گمان میکردم نیاز باشد را پوشش دهم.