چیزی که من عمیقاً به آن اعتقاد دارم و چندین بار با جامعه بیش از 15000 مهندس نرمافزار به اشتراک گذاشتهام این است که زمان تنها منبعی است که واقعاً مهم است. در چشمانداز بسیار آشفته امروزی، جهان پر از عوامل حواسپرتی و غرق در زمانهای بیاثر است. متأسفانه می بینم که بسیاری از مهندسان نرم افزار در این دامها میافتند. در این مقاله، من به 5 تله که مخصوصاً مهندسان نرمافزار جوان اغلب در آن قرار میگیرند و اینکه چرا آنها در واقع به جای فرصت، تله به شمار میآیند و چگونه میتوان از آنها رهایی یافت، خواهم پرداخت.
آموزش جهنم
امروزه آموزشهای شگفتانگیز زیادی وجود دارد، و این یک سود بزرگ برای جامعه است. چشمانداز آموزش در مقایسه با 10 سال پیش بهطور تصاعدی بهبود یافته است و دنیای نرمافزار را بسیار قابل دسترستر کرده است. با این حال، مشکل آموزشها این است که بسیاری از توسعهدهندگان جوان متوجه نمیشوند که آنها صرفاً یک نقطه شروع هستند، نه راهی برای تبدیل شدن به یک مهندس ارشد یا حتی یک مهندس نرمافزار جوان که قادر به گرفتن یک موقعیت تمام وقت باشد.
از آموزشها فقط باید برای ایجاد درک اولیه از زبان یا چارچوبی که با آن کار میکنید استفاده کنید و تمام. شما نباید بیش از 1 ماه در این مرحله باشید، اگر کاملاً در برنامه نویسی تازه کار هستید شاید 2 ماه . با این حال، من میبینم که بسیاری از مهندسان نرمافزار جوان ماهها آموزش پشت سر هم انجام میدهند، و سعی میکنند هر مؤلفه ممکنی را که میتوان در پشته اصلیشان ساخت (مانند رندر اولیه -> ورود -> انیمیشن -> چت ویدیویی -> اعلانهای فشار -> جادویی را یاد بگیرند.) اگر در حال انجام آموزش برای زبانها و فریمورکهای مختلف هستید، حتی بدتر است، زیرا علاوه بر اینکه در جهنم آموزشی هستید، عمق و وسعت ندارید، که برای یادگیری کار، وحشتناک است.
ممکن است احساس کنید با انجام آموزشهای زیاد در حال پیشرفت هستید، زیرا هر بار در حال نوشتن کدهای مختلف هستید. در اینجا دلایل رد این موضوع را بیان میکنیم:
- این یک فرآیند یادگیری واقعی نیست! نوشتن کد در واقع راهی است که مهندسان نرمافزار جوان میتوانند یاد بگیرند، اما ارزش آموزشی که از آن دریافت میکنید به شدت به نحوه انجام آن بستگی دارد. وقتی در حال آموزش هستید، مهارت فنی واقعی خارج از درک سطح بسیار ابتدایی ایجاد نمیکنید. وقتی زمان زیادی را صرف آموزش میکنید، به جای اینکه در واقع یک مهندس نرمافزار جوان بهتر شوید، صرفاً مهارتهای درک مطلب خود را اصلاح میکنید.
- آموزش مشکلات غیر واقعی را حل میکند! نرمافزار در دنیای واقعی اینگونه کار نمیکند. وقتی واقعاً کار میکنید، هرگز با مشکلی مواجه نمیشوید که 100٪ مانند یک آموزش تعریف شده باشد، و در واقع به عنوان یک مهندس با حل مشکلات مبهمتر و بیشتر در طول زمان رشد میکنید. اگر دائماً به یک حضور راهنمایی سنگین مانند یک آموزش نیاز دارید، در یک محیط حرفهای و تولیدی دچار مشکل خواهید شد.
- آموزشها بیش از حد در دسترس هستند! این بدان معنی است که میلیونها نفر بدون در نظر گرفتن سطح مهارت میتوانند به راحتی این کار را انجام دهند. این بدان معناست که طبق تعریف، دستاوردهای آموزشی شما، حتی اگر برای آموزشهای هیولایی بیش از 50 ساعت باشد، برجسته نمیشوند. و در چشمانداز نرمافزار فوق رقابتی امروزی، به ویژه به عنوان یک مهندس نرمافزار جوان، باید یا برجسته باشید یا بیکار باشید.
- آموزش ها همیشه سطحی هستند! این به این دلیل است که تمرکز آنها بر روی کارکردن چیزها است. این امر مخصوصاً برای همه آموزشها صادق است. این آموزشها فقط جریان شادی را ایجاد میکنند و دریافت جریان شادی اولیه برای یک محصول تنها 1٪ از سفر است. سفر واقعی عبارت است از رسیدگی به موارد لبه، انعطافپذیری کد در اندازههای مختلف صفحهنمایش و سیستمعاملها، و تکامل دلپذیر محصول شما بر اساس بازخورد کاربران. عمق به عنوان یک مهندس نرم افزار بسیار مهم است، بنابراین شما باید از استخر بچه خارج شوید.
برای نشان دادن چگونگی اجتناب از این تله، در واقع خودم را به عنوان مثال میآورم. در سال 2021، پس از وقفه 6 ساله iOS، دوباره توسعه iOS را برای سرگرمی انتخاب کردم. من عملاً از 0 شروع کردم زیرا از فریم ورک جدید SwiftUI استفاده کردم و سوئیفت روی نسخه 5 بود که بسیار متفاوت از Swift 1.2 است که در سال 2015 نوشتم. به هر حال، در اینجا نحوه یادگیری iOS است:
- من با آموزش SwiftUI اپل شروع کردم، جایی که آنها از شما میخواهند یک برنامه نمونه شیک بسازید که به شما امکان میدهد فهرستی از مکانهای دیدنی معروف را مرور کنید و اگر روی آن ضربه بزنید، یک صفحه کامل از جزئیات هر نقطه عطفی را مشاهده کنید. با وجود اینکه به طرز باورنکردنی با آن کامل بودم (در هر مرحله با کد بازی می کردم)، این آموزش را در 2 هفته به پایان رساندم.
- بلافاصله پس از آموزش، شروع به ساخت یک پروژه جانبی iOS کردم. بعد از 2.5 ماه، هزاران Google و دهها هزار خط Swift، اکنون یک برنامه iOS بسیار شیک و کامل دارم. کد به مراتب نامرتبتر از چیزی است که من به نوشتن در اندروید عادت کردهام، اما برنامه کاملاً برجسته است و من اکنون خود را یک توسعهدهنده iOS نسبتاً توانا (اما دور از خوب بودن) میدانم.
همانطور که میبینید، من به معنای واقعی کلمه فقط 2 هفته را در مرحله آموزش گذراندم، و اگر به جای پروژه جانبی، به طور تمام وقت روی این پروژه کار میکردم، در عرض 2 روز به پایان میرسید. شما باید همین کار را انجام دهید: ظرف 1 تا 2 ماه از این وضعیت آموزشی خارج شوید و فقط شروع به ساختن کنید، چه از طریق پروژه های جانبی یا مشارکتهای منبع باز. با این کار شما تأثیر بسیار بیشتری خواهید داشت و بسیار سریعتر رشد خواهید کرد.
مجموعه گواهینامه
گواهینامهها به طور موثر آموزش ++ هستند زیرا هنوز بسیار ساختار یافته و قابل پیشبینی هستند. تفاوت در این است که به جای دادن یک سناریو به طور دقیق تعریف شده، شما فقط سناریوی دقیق تعریف شده را دریافت میکنید و باید خودتان در آزمونی که باید قبول شوید، پاسخ دهید. به عنوان پاداشی که باید خودتان پاسخها را بیاورید، در پایان یک گواهی خوب دریافت میکنید که سپس میتوانید آن را در رسانههای اجتماعی به اشتراک بگذارید و 100 لایک دریافت کنید.
من به شدت معتقدم که شما نباید هیچ گواهینامهای دریافت کنید، مگر اینکه این یک نیاز سخت برای شغلی باشد که واقعاً به آن اهمیت میدهید. فکر میکنم چرا بسیاری از مردم برای گواهینامهها ارزش قائل هستند، به این دلیل است که آنها به طرز تفکر مدرسه عادت کردهاند، جایی که شما میخواهید تا آنجا که ممکن است گواهینامهها و جوایز کسب کنید تا وارد یک کالج خوب شوید. موفقیت در مدرسه به تلاش زیادی نیاز دارد و قطعا سخت است، اما در نهایت، نسبتاً ساده است و از مجموعه قوانین بسیار تعریف شدهای پیروی میکند. توسعه نرمافزار، بهویژه در میان شرکتهای برتر مانند FAANG، به معنای واقعی کلمه کاملاً برعکس این است. در هر شرکت فناوری معنیدار، نرمافزار یک توپ غولپیکر از هرج و مرج است که شما در حال تطبیق با آن هستید در حالی که امیدوارید محصول شما آتش نگیرد. مهندسان نرمافزار خوب باید زیرک، همه کاره و منعطف باشند و دنبال کردن گواهینامههایی مانند سنگ های بی نهایت ذهنیت و سبک کاری ایجاد میکند که کاملاً برعکس این است. یادگیری واقعی زمانی حاصل میشود که شما سبکسازی آزادانه داشته باشید و مجبور شوید از مسیر شکستهشده خارج شوید.
من در طول 8 سال کار خود در حلقه استخدام صدها مهندس بودهام. من به معنای واقعی کلمه هرگز ندیدهام که گواهینامهها در هر صورت به یک نامزد کمک کنند. بنابراین فرض کنید میخواهید به کارفرمایان ثابت کنید که در اندروید خوب هستید. به جای دریافت گواهینامه اندروید، سعی کنید یک برنامه پروژه جانبی اندروید بسازید که کاربران زیادی را جذب کند. این به مراتب بیشتر نشان دهنده پتانسیل واقعی شما در یک محیط فنی حرفه ای است.
برنامه نویسی رقابتی
از درک من، برنامهنویسی رقابتی در طول موج ساختارهای داده و الگوریتمها (DSA) 15 سال پیش، زمانی که هر شرکت فناوری شروع به پارازیت کردن مصاحبههای خود پر از مشکلات DSA کرد، شروع به شکست کرد. با این حال، در شرایط فعلی، شرکتها متوجه شدهاند که DSA یک ارزیابی کامل و جامع از مهارتهای یک مهندس ارائه نمیکند، بنابراین دیگر آنقدرها هم به شدت صعودی نیستند.
اشتباه نکنید، دانستن DSA هنوز مهم است، به خصوص برای مصاحبههای موفق. با این حال، انجام برنامهنویسی رقابتی برای کمک به جستجوی شغل شما مانند آوردن یک موشک انداز به یک مبارزه با چاقو است. فقط با Leetcode میتوانید به راحتی به دور DSA برای هر شرکتی، حتی Big Tech دست پیدا کنید. نکته مهمی که در مورد DSA باید به خاطر بسپارید این است که قرار نیست پیش بینی دقیقی از عملکرد شما در کار باشد – این تنها بهترین کاری است که شرکت ها میتوانند با توجه به محدودیتهای یک مصاحبه انجام دهند. مشکلات DSA سخت هستند، اما باز هم ساده هستند – شما مقداری ورودی A از نوع B را میگیرید و خروجی C از نوع D را برمیگردانید. نرمافزار به وضوح واضح نیست، به این معنی که واقعاً زیاد منطقی نیست. index on DSA – فقط کافیست برای قبولی در مصاحبه یاد بگیرید و تمام. اکثر مهندسان نرمافزار جوان برنامه نویسان رقابتی نیستند و میتوانند آن را به فناوری بزرگ تبدیل کنند.
در واقع رتبهبندی چشمگیر در برنامهنویسی رقابتی فوقالعاده دشوار است، و برای مدت زمانی که طول میکشد، بازدهی واقعاً برای یافتن شغل مفید نیست و قطعاً برای ارتقای سطح شما پس از ایجاد شغل نیست. همچنین فکر نمیکنم تا به حال دیده باشم که برنامهنویسی رقابتی به یک نامزد مزیت استخدامی بدهد. اگر واقعاً روحیه رقابت و حل این نوع مشکلات را دوست دارید، با برنامه نویسی رقابتی دیوانه شوید. اما اگر نمیخواهید و فقط میخواهید یک شغل فنی مناسب پیدا کنید، راههای بسیار مؤثرتری برای صرف وقت وجود دارد.
ساختمان در مخفی
همانطور که قبلاً اشاره کردم، من به خودم افتخار می کنم که هنگام به اشتراک گذاشتن تجربیاتم هستم، بنابراین حقیقت سرد و سخت دیگری وجود دارد: تقریباً مطمئنم ایده شما ارزش دزدیدن را ندارد. همانطور که در مجموعه مقالاتم در مورد پروژههای جانبی صحبت کردم، اجرا همان چیزی است که ارزشمند است، نه ایده خام. این ایده تازه شروع است و ایدههای بسیار کمی وجود دارند که آنقدر پیشگامانه باشند که به خودی خود ارزشمند باشند. میتوانید این را از این که چگونه بسیاری از محصولات فناوری موجود امروزه فقط نسخههای بهتری از محصولات قدیمیتر هستند، ببینید – بازی فناوری تقریباً به طور کامل به کیفیت اجرا بستگی دارد.
همچنین زمانی که ایدهها و کدهای خود را کاملاً مخفی نگه دارید، هزینهای بسیار واقعی دارد: قدرت عظیم جامعه را از دست میدهید. وقتی ایدهای به دست میآورید، آن را با دیگران به اشتراک بگذارید تا بازخورد دریافت کنید. بهعنوان یک مهندس نرمافزار جوان، این به شما کمک میکند تا درک کنید که آیا ایده شما حتی منطقی است یا خیر و آیا مشکلی واقعی را حل میکند که دیگران دارند یا حداقل از آن آگاه هستند. همچنین میتوانید متوجه شوید که آیا دامنه راهحل شما مناسب است یا خیر! شاید برای داشتن یک محصول واقعی، نیازی به ساخت آنقدر نداشته باشید که فکر میکردید. علاوه بر این بازخورد، ساختن در کنار یک جامعه به ایجاد انگیزه نیز کمک شایانی میکند، چه فقط پیشرفت را با آنها به اشتراک بگذارید یا واقعاً با هم تیمیها کار کنید. وقتی تنها هستید، خیلی راحتتر میتوانید فرسوده شوید یا حواستان پرت شود، پروژه را رها کنید و آن را سرگردان رها کنید.
بنابراین دفعه بعد که در حال ساختن یک پروژه هستید، در عموم بسازید. ایده خود را برای دریافت بازخورد و کد منبع باز به اشتراک بگذارید (به یاد داشته باشید که این اعتبارنامه ها و نشانه ها را نادیده بگیرید!). از مردم بپرسید که آیا آنها نیز محصول را مانند شما تکامل میدهند. من تقریباً همه برنامه هایم را منبع باز میکنم، حتی آنهایی که بیش از 100 هزار نصب دارند، و اصلاً از این کار پشیمان نیستم. این به کاربران ثابت میکند که میتوان به کد من اعتماد کرد و هم به کل جامعه اندروید و هم به من کمک میکند. هدف نهایی من به عنوان یک مهندس نرمافزار ساختن محصولات لذتبخشی است که تا حد امکان به افراد بیشتری کمک کند. اگر کسی برنامه 100k نصب من را فورک کند و آن را به یک برنامه نصب 1 میلیونی تبدیل کند، من به هدفم حتی بیشتر (هرچند غیرمستقیم) رسیدهام و میتوانم این را در رزومه خود منعکس کنم.
تلاش برای انتخاب فناوری “کامل”
از من چند نسخه از این سوال بیشتر از آنچه بتوانم حساب کنم پرسیده شده است: “از چه فناوری برای ساخت پروژه خود استفاده کنم؟”. به نظر میرسد بسیاری از مهندسان نرمافزار جوان معتقدند که برای هر سناریویی یک فناوری بهینه وجود دارد و یکی از مزایای ارشد شدن این است که شما در شناسایی آن فناوری عالی بهتر میشوید. نرمافزار اینگونه کار نمیکند.
در این عصر و عصر مدرن، ده ها، اگر نه صدها، راه برای ایجاد یک راهحل قانونی خوب برای هر مشکل فنی وجود دارد. هیچگاه هیچ فناوری دیگری وجود ندارد که بهتر از بقیه باشد. اگر چنین بود، نرمافزار بسیار آسان بود و به توسعهدهندگان چنین حقوق ناچیزی پرداخت نمیشد. چیزی که معمولا اتفاق می افتد این است که چندین گزینه وجود دارد که همه خوب هستند اما به دلایل مختلف.
بنابراین اگر نمیتوانید بفهمید که از چه فناوری استفاده کنید، چه کاری باید انجام دهید؟ ساده است، فقط هر چیزی را که راحتتر هستید انتخاب کنید. آیا شما دوستان زیادی دارید که با React خوب هستند؟ سپس وب سایت خود را در React بسازید. آیا میخواهید یک back-end بسازید و تجربه جاوا اسکریپت دارید؟ سپس آن را با Node.js بسازید. شما 2 سال پیش یک برنامه اندرویدی را به عنوان یک پروژه دانشگاهی ساختید و بسیار لذت بردید؟ سپس اندروید را انجام دهید! شما هنوز کاملاً 0 نظر دارید؟ فقط هر چیزی را انتخاب کنید، به شرطی که مرتبط باشد (یعنی پست های شغلی و فعالیت لینکدین را در مورد آن میبینید). همانطور که قبلا ذکر شد، زمان تنها منبعی است که اهمیت دارد، بنابراین هفتهها یا شاید حتی ماهها در حالت فلج تصمیمگیری مهندس نرمافزار جوان گیر نکنید. ظرف چند روز تاپها را انتخاب کنید و شروع به ساخت کنید.
جمعبندی
در پایان، هدف یک شرکت فناوری، ارسال یک محصول نرمافزاری با کیفیت است که بسیاری از مردم در واقع با وجود ابهامات زیاد و شرایط به طور کلی دیوانه کننده، تا حد امکان از آن استفاده میکنند. 5 مورد ذکر شده در بالا به شما کمک نمیکند توانایی خود را در انجام این کار نشان دهید (اغلب برعکس)، و بنابراین شما را برای کارفرمایان جذابتر نمیکند.
بنابراین برای ارتقای سطح مهارتهای فنی خود و انتقال از مهندس نرمافزار جوان به مهندس ارشد نرمافزار، چه کاری باید انجام دهید؟ همانطور که در چندین بخش ذکر شد، شما باید در اسرع وقت شروع به ساخت محصولات واقعی کنید. میدانید هدف یک شرکت فناوری «ارسال یک محصول نرمافزاری با کیفیت که بسیاری از مردم واقعاً از آن استفاده میکنند» چگونه است؟ خوب، هر توسعهدهندهای اکنون میتواند این کار را به راحتی از خانه خود انجام دهد. نمی دانید از کجا شروع کنید؟ بذار کمکت کنم. من بیش از 30 برنامه پروژه جانبی را با بیش از 3 میلیون نصب منتشر کردهام، همه برای سرگرمی و رایگان. توصیههای شغلی را در مورد پروژههای جانبی بررسی کنید تا یاد بگیرید که چگونه این کار را انجام دادم.
اگر این مطلب برای شما مفید بود برای حمایت و کمک به دیگران وبلاگ پارمین را به دوستان خود معرفی کنید.
نظرات کاربران