10 نکته برای تقویت عملکرد خود به عنوان یک مهندس نرم افزار
( قسمت دوم )
در قسمت قبلی به نکته هایی مثل نحوه نوشتن clean code، استفاده از کنترل ورژن خاص در برنامه نویسی، یادگیری Refactoring Code، و کتاب های مهندسی نرم افزار پرداختیم. در این قسمت به نکته های طلایی دیگری برای ارتقا شغلی یک مهندس نرم افزار می پردازیم.
نحوه عملکرد IDE ها را بیاموزید
اگر از یک IDE استفاده میکنید، اتصالات کلیدی آن را یاد بگیرید زیرا در زمان کدنویسی شما صرفهجویی میکنند. من این روزها استفاده از کد VS را برای بیشتر موارد ترجیح می دهم زیرا تکمیل کد و عملکرد فوق العاده سریع به همراه قابلیت شخصی سازی بسیار زیاد از طریق پلاگین ها در آن بسیار مطلوب است.
با این حال، PyCharm نیز خوب است اگراز پایتون مدت ها استفاده کرده اید یا اگر همه اعضای تیم شما از قبل از آن استفاده می کنند و شما باید به طور مسالمت آمیز با آن ها زندگی کنید استفاده از pycharm می تواند کارساز باشد. 
یاد بگیرید که چگونه پیام های پشتیبانی خوب بنویسید
یکی دیگر از توصیههای ضروری این است که همیشه برای هر تعهدی که انجام میدهید، پیامهای commit خوب بنویسید. خواندن پیامهای پشتیبانی برای افراد دیگر لذت بخش است، زیرا به آنها میگویند که کد چه کار میکند، چرا وجود دارد و چگونه کار میکند بدون نیاز به خواندن کد واقعی آن ها همچنین به افرادی که پس از مدت ها با کد شما روبرو می شوند کمک می کنند تا هدف آن را درک کنند. اگر می خواهید الهام بگیرید، به برخی از پیام های commit عالی در پروژه لینوکس نگاه کنید و فقط سبک آن ها را کپی کنید.
پیامهای commit که به خوبی نوشته شدهاند نیز میتوانند به اسناد مفیدی برای سایر اعضای تیم شما تبدیل شوند که ممکن است ندانند (یا به خاطر بسپارند) بعضی چیزها در کد شما چگونه کار میکنند. و اگر کسی بخواهد به تاریخچه شما برگردد، لاگ های commit به خوبی نوشته شده نیز ارزشمند خواهند بود.
حداقل یک زبان برنامه نویسی را یاد بگیرید
این یکی دیگر از توصیههای اساسی است که امیدوارم اکثر مهندسان نرمافزار از آن پیروی کنند، اما در صورتی که این کار را نکنید، فکر میکنم ارزش ذکر کردن را دارد. به نظر من، هر مهندس نرم افزار باید حداقل یک زبان برنامه نویسی مانند Python، PHP، Ruby و غیره را بداند. این به شما کمک می کند مفاهیم اساسی مانند کنترل جریان وحلقه ها و غیره را یاد بگیرید صرف نظر از این که چه زبانی هایی قابل اجرا هستند. در این صورت برای خواندن کد دیگران نیز کار آسان تری خواهید داشت زیرا همه این زبان ها دارای ویژگی های مشابه بسیاری هستند. و در نهایت، اگر هر گونه اشکالی پیش بیاید که نیاز به مداخله دستی از طرف شخص دیگری داشته باشد، دانستن یک زبان برنامه نویسی کار را برای همه افراد درگیر آسان تر می کند زیرا توانایی خودکارسازی کارهای تکراری تا حد زیادی سختی کار را کاهش می دهد
یک مثال خوب که اخیراً دیدهام این است که چگونه پروژههای open source از سرورهای ساخت (مانند جنکینز) استفاده میکنند که در آن تمام تستهای خودکار توسط اسکریپتهایی که به زبان برنامهنویسی نوشته شدهاند اجرا میشوند. سرور ساخت با سرور CI ارتباط برقرار می کند که فرآیند شروع را از طریق SSH با اطمینان مدیریت می کند. 
نحوه نوشتن تست را بیاموزید
این یک موضوع داغ دیگر است. این دیگر فقط برای برنامه نویسان جاوا نیست اگر شما هم مثل من هستید، احتمالاً از تست های واحد استفاده می کنید تا مطمئن شوید که کد شما کار می کند، و شاید حتی تست های یکپارچه سازی داشته باشید. اما این ها فقط دو نوع آزمایش هستند. یکی از تکنیکهای آزمایشی که فکر میکنم اغلب نادیده گرفته میشود، مفهوم نوشتن تستهای happy path یا ادغام سازی است - به این معنی که با استفاده از این تستها مطمئن میشوید کد شما در ترکیب با سایر مؤلفههای وابسته به آن کار میکند یا نه!
مثلاً پایگاه داده این امر به ویژه اگر با لینک های خارجی زیادی مانند کتابخانه ها و غیره کار می کنید بسیار مهم است. در چنین مواردی، خطا بدون این که متوجه شوید بسیار آسان است زیرا چیزی را در یک مکان تغییر داده اید اما فراموش کرده اید که بررسی کنید آیا روی چیزی تأثیر می گذارد یا خیر این امر به ویژه در مورد ORM ها صدق می کند.
به عنوان مثال، اگر هر بار یک قطعه خاص از داده ها از پایگاه داده در حافظه بارگذاری شود، تغییر ساختار آن ممکن است به این معنی باشد که سایر بخش های سیستم نیز نمی توانند داده ها را از پایگاه داده در حافظه بارگذاری کنند!
همه این ها به این منظور نیست که شما را بترسانند یا شما را از نوشتن آزمون های واحد محروم کنند. من سعی می کنم آگاهی را افزایش دهم تا مردم قبل از تصمیم گیری در مورد این که آیا آن ها را در پروژه های خود می خواهند یا به آن ها نیاز دارند، این ایده را با دقت بیشتری در نظر بگیرند.
همچنین شایان ذکر است که افرادی وجود دارند که از توسعه تست محور (TDD) حمایت می کنند و اصلاً از هیچ واحد یا تست یکپارچه سازی استفاده نمی کنند آنها ترجیح میدهند ابتدا تستهای عملکردی خود را بنویسند، که سپس به عنوان یک مجموعه تست رگرسیون برای کاربردشان عمل میکنند.
اما اولویت شما هر چه باشد، فقط مطمئن شوید که نحوه نوشتن واحدهای با کیفیت خوب و تستهای یکپارچهسازی را یاد گرفتهاید تا به شما کمک کند تا باگها را در برنامهتان زود تشخیص دهید، قبل از این که از کنترل خارج شوند و عوارض جانبی زیادی داشته باشند. زیرا بعداً رفع آن ها سخت تر و سخت تر می شود.
از Frameworks عاقلانه استفاده کنید
بر کسی پوشیده نیست که امروزه بسیاری از برنامه های کاربردی وب مدرن به شدت به چارچوب هایی مانند Rails/Sinatra/Django/Flask/React/Angular/و غیره متکی هستند. برخی از افراد از استفاده از این چارچوبها خوشحال هستند بدون اینکه واقعاً بفهمند که در زیر این سرپوش چه میکنند.
در مقابل، دیگران به شدت تلاش می کنند که یاد بگیرند چگونه این برنامه ها به درستی کار می کنند قبل از این که مستقیماً به استفاده کورکورانه از آن ها بپردازند.
گاهی اوقات مبتدیان در حالتی قرار می گیرند که من آن را "حالت چارچوب" می نامم، جایی که احساس می کنند همه چیز باید با استفاده از Rails/Django/و غیره انجام شود. زیرا در غیر این صورت شامل موارد زیر می شود:
- ایجاد مجدد چرخ ها
- فقدان دانش دامنه مورد نیاز برای ساخت یک ویژگی خاص
- زمان بیشتری از حد انتظار نیاز است
- دوباره کاری
- کد های غیر قابل نگهداری
- کار اضافی به دلیل نیازهای تجاری
البته، دلایل معتبر زیادی وجود دارد که چرا انتخاب چارچوب های موجود ممکن است ترجیح داده شود. اما لطفاً به یاد داشته باشید که هنوز هم احتمالات دیگری وجود دارد، اگرچه ممکن است در نگاه اول بیاهمیت به نظر برسند بنابراین، در صورت امکان، قبل از تصمیم گیری در مورد منطقی بودن یا نبودن راه حل خود، در مورد گزینه های مختلف موجود مطالعه کنید. شاید صرف مقداری زمان برای یادگیری نحوه عملکرد راه حل های موجود بتواند به حل سریعتر مشکلات کمک کند و در عین حال از مشکلات غیر ضروری در مسیر جلوگیری کند.

نحوه رفع اشکال مطالب را بیاموزید
زفع اشکال می تواند سرگرم کننده باشد این یک راه عالی برای یادگیری در مورد کد شما است، و همچنین یک راه عالی برای تحت تاثیر قرار دادن دوستان و همکاران است. مطمئن شوید که می دانید چگونه از دیباگر debugger در هر زبان برنامه نویسی که استفاده می کنید کمک بگیرید. اکنون کمی وقت بگذارید ومطالب مربوط به رفع اشکال که استفاده می کنید را جستجو کنید و مطمئن شوید که حداقل اصول اولیه نحوه کار آن را می دانید خواه مبتنی بر رابط کاربری گرافیکی باشد یا مبتنی بر کنسول.
اگر زبان شما سیستم رفع اشکال ندارد، سعی کنید کد خود را با دست وارد کنید. بله، می دانم که کار سختی به نظر می رسد، اما به من اعتماد کنید، ارزش انجام آن را دارد و پس از همه، رفع اشکال یک مهارت حیاتی برای هر مهندس نرم افزار است، پس چرا در حال حاضر کمی تمرین نکنید؟
همچنین، به یاد داشته باشید که ممکن است راههای دیگری برای دریافت اطلاعات از کد شما برای کمک به رفع اشکال وجود داشته باشد در C++/Java/C#/etc نیز ابزارهایی مانند Valgrind وجود دارد که به شما امکان میدهد نشت حافظه و انواع مختلف باگهای دیگر را شناسایی کنید. انواع مختلفی از گزینه های کامپایل را فراموش نکنید که ممکن است اطلاعات مفیدی در مورد اشتباه پیش آمده نیز ارائه دهد من نمی گویم که این چیزها همیشه دقیقاً به شما می گویند که چه چیزی اشتباه است، اما گاهی اوقات آن ها نقطه شروع خوبی برای بررسی بیشتر مشکلات خاص هستند، بنابراین آن ها را نیز فراموش نکنید.
سخن پایانی
امیدوارم این مقاله برای شما ارزشمند و آموزنده بوده باشد. فراموش نکنید که توصیههایی را که در این جا مطرح کردهام بپذیرید و آنها را بخوانید تا مطمئن شوید که درباره چه چیزی صحبت میکنم.
کاری از تیم رسانه مجتمع فنی ونک
برگردان به فارسی: سولماز همدانی
☎ یا با شماره تلفن ۰۲۱۸۸۸۸۹۷۹۶ داخلی ۱۲۰ تماس بگیرید
🌍 ونک، نرسیده به میدان ونک، خیابان شانزدهم، مجتمع فنی تهران نمایندگی ونک