چگونه به یک توسعه دهنده iOS تبدیل شویم ؟

در این مقاله می خواهم آنچه را که فکر می کنم برای توسعه دهنده iOS در سال 2021 اتفاق افتاده است، شرح دهم. هدف اصلی من این است که دو گروه از افراد را هدف قرار دهم: مبتدیان مطلق و افرادی که قبلاً هرگز چیزی برای iOS نساخته اند و همچنین به اصطلاح مبتدیان کاذب، افرادی هستند که ممکن است قبلاً سعی کرده بودند آن را یاد بگیرند اما هرگز به هدف خود برای گرفتن شغل تمام وقت نرسیدند.
صرف نظر از اینکه در حال حاضر در چه سطحی هستید، هدف در اینجا یکسان است: قرار دادن شما در موقعیت مناسب برای درخواست یک پست توسعه دهنده iOS برتر در یک شرکت.
ما قصد داریم مهارت هایی را که باید یاد بگیرید، دوره هایی که می توانید بگذرانید، نحوه ارتباط با جامعه، اشتباهات رایج مردم و موارد دیگر را بررسی کنیم. فکر می کنند که هزینه کردن راه سریع رسیدن به شغل رویایی خود است، در حالی که مهمترین چیزها عزم و اراده هستند.

این مقاله چند بخش دارد:

  1. مهارت های اصلی که برای بدست آوردن شغل کاملاً باید بدانید.
  2. مهارت های افزایشی که داشتن آنها بسیار خوب هستند – اگر فرصتی برای یادگیری داشته باشید، آنهایی هستند که شما را متمایز می کنند.
  3. اشتباهات رایجی که مردم هنگام تلاش برای یادگیری مرتکب می شوند.

مهارت های اصلی لازم برای توسعه دهنده iOS چیست؟

حداقل مهارتهای لازم برای استخدام در توسعه دهنده iOS چیست؟ من فکر می کنم در کل پنج چیز وجود دارد:

  • Swift
  • رابط کاربری سریع (Swift UI)
  • کار با داده ها
  • شبکه سازی
  • کنترل نسخه

این لیست به دلایل بسیار مختصر عمداً کوتاه است:

هرچه بیشتر بیاموزید، بیشتر می فهمید که چیزهایی برای یادگیری وجود دارد، بنابراین گذراندن وقت کافی برای مطالعه و تمرین به راحتی باعث می شود که هدف واقعی را فراموش کنید- شما می خواهید به عنوان یک توسعه دهنده iOS شغل پیدا کنید، نه اینکه فقط چیزهای جدید یاد بگیرید.

مهمتر از همه، اگر این پنج مورد را درست دریافت کنید، می توانید طیف وسیعی از برنامه ها را بسازید. مطمئناً، کد شما کامل نخواهد بود اما اشکالی ندارد، تنها راه برای نوشتن کد عالی این است که ابتدا یک سری کد بد بنویسید.
بگذارید پنج مورد را به قطعات کوچکتر تقسیم کنم.

یادگیری سوئیفت:

اول Swift. این زبان اصلی برنامه نویسی از اپل است- هیچ مفهومی از نمایش اطلاعات روی صفحه آیفون یا بارگیری اطلاعات از اینترنت ندارد، این فقط زبانی مانند JavaScript یا Python است. شما از آن برای ایجاد متغیرها، نوشتن توابع و غیره استفاده می کنید. این فقط کد خالص است.
سوئیفت تنها چند سال قدمت دارد، به این معنی که تقریباً از هر ویژگی زبان پیشرفته موجود استفاده می کند. از یک طرف، این بدان معناست که شما باید از تمام رفتارهای قدیمی که در زبان های قدیمی مانند C ++ و Java معمول است اجتناب کنید، اما همچنین به این معنی است که دارای چندین ویژگی پیشرفته تر است که ممکن است در ابتدا ذهن شما را از بین ببرد. و این اشکالی ندارد: بسیاری از قسمتهای Swift نسبتاً سرراست هستند، و درک برخی از قسمتها بیشتر به زمان بستگی دارد، بنابراین فقط تمرین کنید و به نتیجه برسید.

یادگیری SwiftUI

دومین مهارت اصلی که ذکر کردم SwiftUI بود، چارچوبی از اپل است که به ما اجازه می دهد با استفاده از Swift برنامه هایی را برایiOS ،macOS ،tvOS و حتی watchOS بنویسیم. بنابراین، در حالی که Swift زبان برنامه نویسی است، SwiftUI ابزاری را برای ساخت برنامه ها فراهم می کند- نحوه نمایش تصاویر، متن، دکمه ها، جعبه متن، جداول داده ها و موارد دیگر. برای اینکه روشن شود ،SwiftUI به نوعی جایگزین Swift نیست – این یک چارچوب ساخته شده در بالای Swift است که به ما امکان می دهد برنامه هایی بسازیم، بنابراین برای موفقیت به هر دو Swift و SwiftUI نیاز دارید.
اگر فکر می کردید Swift جدید است و هنوز چیزی نمی دانید، اما جامعه iOS با وجود جدید بودن، از آن استقبال کرده است زیرا کار با آن بسیار عالی است.
اکنون، اپل یک چارچوب قدیمی برای ساخت برنامه های iOS به نام UIKit دارد و اگر از چند نفر بپرسید که آیا ابتدا باید SwiftUI را یاد بگیرید یا ابتدا UIKit ، پاسخ های مختلفی دریافت خواهید کرد. در حقیقت، هر فرصتی وجود دارد که اگر به نظرات ویدیوی YouTube برای این مقاله نگاه کنید، گروهی از افراد پیدا می کنید که به من می گویند من نمی دانم درباره چه چیزی صحبت می کنم و UIKit باید در اولویت باشد.
بنابراین، اگر کنجکاو بودید، در اینجا مشخص است که باید SwiftUI را به عنوان یک مهارت اصلی یاد بگیرید:

SwiftUI به طور قابل توجهی از UIKit راحت تر است، شاید یک چهارم کد طول بکشد تا همان نتایج را که در UIKit می گیرید، به دست بیاورید، به علاوه در این زمینه چیزهای کمتری برای یادگیری دارید. این بدان معنی است که جنب و جوش زیادی پیدا می کنید زیرا کارها را سریعتر انجام می دهید، نتایج خود را سریعتر می بینید و سریعتر نتایج را تکرار می کنید، که در هنگام یادگیری بسیار انگیزه آور است.

SwiftUI برای Swift ساخته شده است، با استفاده از ویژگی های زبان به شما کمک می کند از بروز مشکلات جلوگیری کرده و حداکثر عملکرد را داشته باشید. به عنوان مثال، اگر برخی داده ها را در یک صفحه از برنامه تغییر دهید، SwiftUI به طور خودکار مطمئن می شود که داده های جدید در هرجای دیگر برنامه شما که از آنها استفاده می کند، به روز می شوند. برای هماهنگ نگه داشتن همه موارد نیازی به نوشتن کد ندارید، که به طرز شگفت انگیزی پیچیده است. در مقایسه، UIKit برای زبان قدیمی اپل، Objective-C نوشته شده است، و در نتیجه انواع و اقسام عجیب و غریبی را دارد که ناشی از قدیمی بودن آن است.

SwiftUI روی همه سیستم عامل های اپل کار می کند، بنابراین می توانید آنچه را که در iOS آموخته اید بردارید و از آن برای ساختن یک برنامه macOS یا watchOS با کد تقریباً یکسان استفاده کنید. مطمئناً برخی موارد مانند Digital Crown فقط در یک دستگاه وجود دارد، اما اکثریت قریب به اتفاق آنچه که یاد می گیرید در همه جا کار خواهد کرد.

اما مهمتر از همه، SwiftUI جایی است که همه چیز در آن جریان دارد. اگر همین حالا – امروز – متقاضی شغل بودید، خیلی خوب احتمالاً باید UIKit را بدانید، اما در حال خواندن این مقاله، به این معنی است که مراحل کار خیلی زودتر است. بله، UIKit اکنون محبوبیت بیشتری دارد، اما تا زمانی که یادگیری 6 ، 9 یا حتی 12 ماه دیگر را به پایان برسانید ، SwiftUI چارچوب UI غالب خواهد بود.
به طور جدی، بزرگترین شرکتهای جهان SwiftUI را انتخاب می کنند، از جمله خود اپل، و هنگامی که اپل اخیراً ابزارک هایی را در iOS 14 راه اندازی کرد، این الزام را ایجاد کردند که شما باید از SwiftUI استفاده کنید – UIKit در آنجا امکان پذیر نیست.

شبکه و داده ها

مهارت سوم و چهارم که ذکر کردم شبکه سازی و کار با داده ها بود. در مقایسه با Swift و SwiftUI اینها یک تکه کیک هستند، یا حداقل در سطحی هستند که شما برای بدست آوردن شغل توسعه دهنده iOS برتر نیاز دارید.
شبکه سازی واکشی داده ها از اینترنت یا ارسال داده ها از دستگاه محلی به سرور در جایی است. راه های مختلفی برای انجام این کار وجود دارد، اما انصافاً حداقل چیزی که شما باید بدانید این است که چگونه می توان مقداری JSON را از سرور دریافت کرد.
و این همان جایی است که مهارت اصلی دیگر وجود دارد: کار با داده ها. باز هم طیف عظیمی از روش ها برای بارگیری و ذخیره داده وجود دارد، اما حداقل کاری که شما باید بتوانید انجام دهید این است که داده هایی را که از سرور با استفاده از کد شبکه خود دریافت کرده اید به برخی از اطلاعاتی که برنامه شما نشان می دهد تبدیل کنید.
بنابراین، واقعاً مهارت های سوم و چهارم در کنار هم هستند: برخی از داده ها را از یک سرور واکشی کنید، سپس آنها را به اطلاعاتی که می توانید در برنامه خود نشان دهید تبدیل کنید. برخی از توسعه دهندگان به شوخی می گویند که این نوع کد نیمی از کار توسعه دهندگان iOS است و مطمئناً درست است که ما از این مهارت ها بسیار استفاده می کنیم.

و در آخر: کنترل نسخه

آخرین مهارت اصلاً کدگذاری نیست: این کنترل نسخه است، با استفاده از چیزی مانند Git. باز هم شما در اینجا خیلی نیاز ندارید، اما مهم این است که شما می توانید کدهای خود را مانند GitHub در جایی منتشر کنید تا استخدام کنندگان بتوانند کارهای شما را به صورت عمومی مشاهده کنند.
فکر نمی کنم کسی در دنیا به طور کامل همه چگونگی عملکرد Git را بفهمد، اما مشکلی نیست – شما فقط باید اصول کافی را بدانید تا داده های خود را با خیال راحت ذخیره کنید و بتوانید با دیگران کار کنید.
بنابراین، با کنار هم قرار دادن این پنج + دو مورد عظیم ( Swift و SwiftUI ) در نتیجه سه مورد کوچک اما مهم وجود دارد. صادقانه بگویم، اگر فقط بتوانید روی این پنج مورد تمرکز کنید بدون اینکه حواس شما پرت شود، قدم های بزرگی در جهت اولین کار توسعه دهندهiOS خود بر می دارید.
و تمام، این پنج مهارت اصلی است که فکر می کنم شما نیاز دارید تا یک توسعه دهنده iOS باشید. هزاران نفر وجود دارند که فقط این مهارت ها را دارند و قادر به ساخت و ارسال برنامه های خارق العاده در App Store هستند.

بعد از مهارت های اصلی چه باید کرد؟

هنگامی که واقعاً با پنج مهارت اصلی درگیر شدید، کاملاً 100٪ در موقعیتی هستید که می توانید برنامه های خود را ارسال کنید و به عنوان یک توسعه دهنده مستقل کار کنید، و همچنین در موقعیتی هستید که برای موقعیت های توسعه iOS بالاتر درخواست دهید و برای یک شرکت کار کنید. دیگر مدارک خاصی که شما نیاز دارید وجود ندارد – مهارتهای اصلی را پایین بیاورید و در جای خوبی هستید.
اما اگر در این مهارت ها تلاش کرده اید و می خواهید بیشتر پیش بروید، پنج مهارت توسعه وجود دارد که شما را به یادگیری تشویق می کنم. اینها مهارت هایی هستند که شما را از مکان خوب شما تا قرار گرفتن در یک مکان خارق العاده منتقل می کنند و طیف وسیعی از برنامه هایی که می توانید بسازید حتی بیشتر خواهد شد.
مهارت ها عبارتند از:

  • UIKit
  • اطلاعات اصلی
  • آزمایش کردن
  • معماری نرم افزار
  • چند رشته ای

مانند قبل، من می خواهم هر یک از آنها را با جزئیات بیشتری توضیح دهم تا شما درک کنید که چرا من فکر می کنم آنها مهم هستند – و چرا من آنها را مهارت های افزایشی می دانم تا مهارت های اصلی .

UIKit

اول، UIKit. این چارچوب رابط کاربری قدیمی اپل است و از سال 2008 برای ساخت برنامه ها مورد استفاده قرار گرفته است – 13 ساله است که من این را می نویسم، که از نظرم نرم افزار قدیمی است . اما این سن به معنای بد بودن UIKit نیست و در واقع وقتی با نحوه کار آشنا می شوید از زیبایی آن می توانید تعجب کنید.
موارد بسیاری وجود دارد که باعث می شود UIKit ارزش یادگیری را داشته باشد، از جمله:
• صدها هزار برنامه قبلاً در UIKit نوشته شده است، بنابراین اگر به یک شرکت با یک برنامه بزرگ و کاملاً ثابت می پیوندید، مطمئناً برای حفظ آن برنامه نیاز به نوشتن کد UIKit خواهید داشت.
• UIKit به طور قابل توجهی قدرتمندتر از SwiftUI است – کارهای زیادی وجود دارد که می توانید در UIKit انجام دهید که در حال حاضر در SwiftUI امکان پذیر نیست.
• شما می توانید با استفاده از فناوری به نام طرح بندی خودکار، طرح های فوق العاده دقیق ایجاد کنید.
• اگر با کد خود مشکلی دارید، در UIKit راه حل های بیشتری نسبت به SwiftUI در دسترس است، فقط به این دلیل که مدت زمان طولانی تری وجود دارد.
شاید همه اینها باعث می شود UIKit عالی به نظر برسد، پس چگونه است که من آن را به جای یک مهارت اصلی، یک مهارت توسعه قرار دادم؟ خوب، زیرا UIKit نیز دارای مشکلاتی است:
• تقریباً انجام همه کارها در UIKit دشوارتر از SwiftUI است، با بعضی از کارها بیشتر کد آنها صد برابر می شود. SwiftUI به طور خاص برای توسعه مدرن iOS ساخته شده است، بنابراین کار زیادی برای شما انجام می دهد.
• از آنجا که UIKit برای Swift نوشته نشده است، متوجه خواهید شد که ویژگی های بسیاری دارد که می توانید با SwiftUI فراموش کنید – بسیاری از گزینه های ضمنی بسته بندی نشده، کد را با یک @objc ویژگی خاص علامت گذاری می کنند تا در دل Objective-C UIKit قرار گیرد، در صورت نیاز برای نشان دادن داده های ساده از پروتکل ها و نمایندگان استفاده کنید.

و به همین دلیل است که من UIKit را یک مهارت توسعه می دانم: یادگیری آن در مقایسه با SwiftUI به طور قابل توجهی زمان و تلاش بیشتری می برد، که به نوبه خود به این معنی است که عزم و اراده بیشتری را می طلبد. مطمئناً، SwiftUI تمام ویژگی های UIKit را ندارد، اما حداقل شما می توانید سریع پیشرفت کرده و احساس حرکت و موفقیت کنید قبل از اینکه به UIKit بروید.

مقابله با داده های اصلی

دومین مهارت توسعه ای که به آن اشاره کردم، Core Data است که چارچوب اپل برای کار با داده های برنامه است. در بخش مهارت های اصلی، من هم شبکه سازی و هم کار با داده ها را ذکر کردم و این درست است: با داشتن این مهارت ها می توانید هر آنچه را که می خواهید از سرور بگیرید و آن را در برنامه خود نشان دهید. کاری که Core Data انجام می دهد یک گام فراتر است: این به شما امکان می دهد پس از داشتن این داده ها، آنها را دستکاری کنید، برای مثال جستجو برای مقادیر خاص، مرتب سازی نتایج و موارد دیگر، همه بسیار کارآمد هستند. همچنین می تواند به راحتی با iCloud ارتباط برقرار کند، به این معنی که داده های کاربر شما در تمام دستگاه های آنها هماهنگ می شود.
Core Data دارای یک سری موارد منفی است که بزرگترین آنها این است که اغلب کار با آنها خیلی دلپذیر نیست. Core Data تقریباً به قدمت UIKit است و اگرچه با Objective-C عالی کار می کند اما در Swift احساس راحتی نمی کند. این ادغام خوب باSwiftUI، که آن را احساس می کنید کمی کمتر عجیب و غریب، اما هنوز هم یک موضوع شگفت انگیز پیچیده است.
بنابراین، چرا من آن را به عنوان یک مهارت پسوند ذکر کرده ام؟ از آنجا که مانند UIKit ، Core Data نیز بسیار محبوب است – صدها هزار برنامه با استفاده از آن ساخته شده است و در بسیاری از شرکت های بزرگ و کوچک استفاده می شود. همچنین مانندUIKit ، Core Data نیز بسیار قدرتمند است و اگرچه می توانید مهمترین قسمتهای آن را در کد خود بازسازی کنید.

آزمایش کردن

مهارت سوم در لیست برنامه های افزودنی من آزمایش است : نوشتن کد ویژه ای که کد برنامه اصلی شما را آزمایش می کند همانطور که انتظار دارید کار می کند. تست ما اجازه می دهد تا مطمئن شوید که کد ما به درستی کار می کند، و مهم تر از آن به ما اجازه می دهد به ادامه مطمئن شویم که آثار ما به درستی حتی پس از تغییرات قابل توجهی در آن ساخته شده است.
بنابراین، آزمایش مهم است و به شما در نوشتن نرم افزار با کیفیت بهتر کمک می کند. پس چرا بیش از آنکه یک مهارت اصلی باشد، یک مهارت توسعه است؟ سه دلیل وجود دارد:

1-به هر دلیل تاریخی، جامعه iOS به طور کلی در تست آزمایش وحشتناک است. بسیاری از برنامه های عظیم تقریباً هیچ آزمایشی ندارند.

2-وقتی به همه موارد قابل توجهی که می توانید با ابزارها و چارچوب های اپل بسازید فکر می کنید، صادقانه نیست که در مقایسه با آنها تست نوشتن خیلی جالب به نظر برسد. من شخصاً از نوشتن تست به همان روشی که از نخ دندان کشیدن لذت می برم لذت می برم، اما می دانم که بسیاری از افراد به خصوص در پروژه های شخصی آن را هیجان انگیز نمی دانند.

3-هنگامی که شما برای یک کار درخواست می کنید، داشتن دانش در مورد چارچوب های اصلی Swift و Apple همیشه مفیدتر از دانش در مورد آزمون های نوشتن است. شرکتها ترجیح می دهند شما بدانید که چگونه از SwiftUI ، UIKit یا یکی دیگر از بزرگترین هیترها استفاده کنید، زیرا در مقایسه تست به عنوان یک موضوع به طور قابل توجهی کوچکتر است – تقریباً بسیاری از موارد برای یادگیری وجود ندارد.
بنابراین، تست کردن، امتحان کردن مهم است، و من دوست دارم شما یاد بگیرید چگونه یک تست عالی بنویسید.

معماری نرم افزار

چهارمین مهارت افزونه ای که می خواهم در مورد آن صحبت کنم، معماری نرم افزار است که واقعاً در مورد شیوه ساخت کد ماست.
نکته این است که شما با کد بد خود مقاومت می کنید، تا زمانی که یاد بگیرید بهتر عمل کنید. و این همان جایی است که معماری نرم افزار وجود دارد: بررسی تکنیک های اثبات شده برای ساختن کد شما برای سهولت در خواندن، استفاده آسان تر، اصلاح آسان تر و مراقبت طولانی تر از آن. بعضی اوقات این تکنیک ها به روش Swift متکی هستند – ویژگی های زبانی که می توانید برای نوشتن کد بهتر استفاده کنید. اما تکنیک های بسیار بیشتری وجود دارد که در هر زبان برنامه نویسی کار می کنند و ما معمولاً این الگوهای طراحی را می نامیم .
یک نکته اصلی که شما باید به عنوان بخشی از این مهارت شروع به یادگیری کنید، نحوه تجزیه کد شما است. به عنوان مثال، اگر در حال ساخت یک صفحه در برنامه خود هستید، ممکن است یک دکمه ورود به سیستم، یک گالری عکس و یک لیست از دوستان همه در آن صفحه داشته باشید. اما در حالت ایده آل، هر یک از آن قسمت ها را اجزای جداگانه ای قرار می دهید – یک جزء دکمه ورود به سیستم، یک جزء گالری تصاویر و یک جزء لیست دوستان – بنابراین می توانید از هر یک از این اجزا در قسمت های دیگر برنامه خود استفاده مجدد کنید.
معماری نرم افزار بسیار ذهنی تر از مهارت های دیگری است که تاکنون ذکر کردم. برای دیگران – به عنوان مثال ، SwiftUI – می توانید با خود فکر کنید، “خوب، من می دانم که چگونه X ،Y و Z را انجام دهم، بنابراین احساس اطمینان می کنم که یک توسعه دهنده خوب SwiftUI هستم.” معماری نرم افزار موضوعی بسیار گسترده است و صادقانه می توان گفت که بسیاری از اوقات هیچ روش صحیحی برای حل یک مشکل وجود ندارد، بنابراین من فکر می کنم بهترین معیار برای آن این است: اگر به کد خود از شش ماه پیش نگاه کنید، یا یک سال پیش، یا سه سال پیش، و غیره، فکر می کنید “عجب کد بدی است!”
باز هم، نوشتن کد بد مشکلی ندارد، به شرطی که شما را در مسیر نوشتن کد بهتر قرار دهد . من مطمئناً به کدی که پنج سال پیش نوشتم نگاه می کنم و در جاهایی لبخند می زنم، زیرا الان بیشتر از آن زمان می دانم – و این چیز خوبی است.

چند رشته ای

مهارت پسوند نهایی که می خواهم در مورد آن صحبت کنم چند رشته ای است که به زبان ساده این است که کد شما باید همزمان بیش از یک کار انجام دهد. چند رشته ای می تواند یک مشکل واقعی باشد، زیرا درک آن برای مغز ما دشوار است – وقتی کد شما هر بار یک کار را انجام می دهد، می توانیم به صورت خطی به آن فکر کنیم، اما وقتی دو یا سه اتفاق همزمان رخ می دهد، به طور بالقوه با هم تداخل دارند، واقعا می تواند مغز شما را گیچ کند.
بنابراین، اگرچه داشتن چند رشته به عنوان مهارت توسعه امری مهم است، شما باید مراقب باشید – هدف شما باید درک کافی از مفاهیم و کد باشد تا بتواند به خوبی کار کند، بدون اینکه پیشرفت بیشتری داشته باشید. صادقانه بگویم، بسیاری از توسعه دهندگان فکر می کنند چند رشته ای باعث می شود کد آنها بلافاصله سه یا چهار برابر سریعتر اجرا شود، و در بعضی موارد نیز چنین خواهد شد، اما در بسیاری از موارد کد شما در واقع کندتر اجرا می شود، و اکنون شما با پیچیدگی بیشتر کد مواجه هستید.
بنابراین: کمی یاد بگیرید که چگونه چند رشته در Swift کار می کند تا ببینید می توانید مفاهیم و نحوه اجرای آن را درک کنید، اما سعی کنید بیش از حد عمل نکنید!

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