در محل کار، مدیر بخش مهندسی از من خواست که دانش خود را بیشتر با بقیه اعضای تیم به اشتراک بگذارم. البته ما بررسی کد را با هم انجام میدهیم و روشهای دیگری نیز برای گسترش دانش در تیم خود داریم. همچنین جلسات فنی برگزار میکنیم که در مورد چگونگی حل مشکلات موجود صحبت میکنیم. این فرصت خوبی است برای به اشتراک گذاری دانش تخصصی که میتواند به صورت مشاوره یا راهنمایی در مورد تکنیکی برای پیاده سازی چیزی باشد، اما خوب است که نوع دیگری از جلسات را برای حفظ انگیزه، فعال بودن و آنالیز تیم انجام دهید. من به چندین موضوع فکر کردم تا بتوانم در مورد آنها صحبت کنم که شامل موارد فنی از این قبیل بودند: DevOps، سیستمهای توزیع شده، برنامه نویسی فانکشنال و موارد هیجان انگیز دیگر. اما بعد فهمیدم که تیم از نظر فنی بسیار خوب است و همه اعضا برنامه نویسان بسیار توانمندی هستند. ببینید من از واژه برنامه نویس استفاده کردم، اما این چیزی است که ما هستیم؟ قطعا نه. عنوان شغلی میگوید مهندس نرم افزار ،اما این همه کاری است که ما انجام میدهیم؟ نوشتن کد؟ فکر نمیکنم اینطور باشد. من شروع به نوشتن افکارم کردم و آنها را در قالب این مقاله قرار دادم. با فكر كردن در مورد آن، بسیاری از ما متوجه پیچیدگی مهندسی نرم افزار نیستیم و وظایف آن را به حداقل میرسانیم. خود من علاوه بر نوشتن كد، كتاب هم مینویسم یا ویژگیهای جدیدی را حفظ و پیادهسازی میكنم، اما کل داستان بسیار پیچیدهتر از این است.
سوء تفاهم نشود. نقشهای زیادی وجود دارد و ما در موارد مختلف این عناوین را به خود نسبت میدهیم: مهندس نرم افزار ، توسعه دهنده نرم افزار ، برنامه نویس و برنامه نویس کامپیوتر. توجه داشته باشید که این کلمات با هم تفاوت دارند و هر کدام معنی خود را دارد. من معتقدم که باید موارد را به درستی نامگذاری کنیم و نقشها را به شیوهای بهتر و با انتظارات متفاوت از هم جدا کنیم.
برنامه نویس کسی است که کد را مینویسد و همین. یک برنامه نویس بیش از حد به معماری نرم افزار یا طراحی اهمیت نمیدهد. او مشخصات کامل آنچه را که برای پیاده سازی لازم دارد به دست میآورد، کد را مینویسد و آن را تحویل میدهد. همچنین در مورد نحوه استقرار، محل اجرا یا نحوه استفاده از آن تفکر زیادی نمیکند.
یک توسعه دهنده نرم افزار بیشتر به طراحی و معماری اهمیت میدهد و علاقه زیادی به محل استقرار، نحوه اجرا یا طرز استفاده از آن ندارد.
من نمیگویم همه برنامه نویسان یا توسعه دهندگان اینگونه هستند، فقط میگویم این موارد باید دغدغه آن نقشها باشد. اگر خود را یک برنامه نویس یا توسعه دهنده میدانید و فراتر از آن پیش میروید، بسیار عالی است. تمام هدف این مقاله به اشتراک گذاشتن دیدگاهها و تعاریف در مورد نقش مهندس نرم افزار است.
یک مهندس نرم افزار دقیقا مانند یک برنامه نویس و توسعه دهنده، به نرم افزار اهمیت میدهد. همچنین کد مینویسد و مطمئن میشود که مطابق انتظار کار میکند. به علاوه نگران طراحی، معماری و اجرای بهترین متدها از هر جنبه در مورد نرم افزار نیز هست.
در نظر داشته باشید که باید در مورد آن چیزهای زیادی بدانیم، نه تنها برای نوشتن آن بلکه برای استفاده موثر هنگام ساختن آن.
همچنین باید مطمئن شویم که این کار به خوبی انجام میشود. بنابراین نگران معماری، طراحی و تصمیم گیری صحیح از ابتدا هستیم که شامل انتخاب پشته مناسب، ساخت انتزاعهای مناسب و استفاده از بهترین شیوههایی که میشناسیم، میشوند.
به علاوه برنامهای که میسازیم باید قابل استفاده باشد. بنابراین نگران مواردی مانند CICD، نظارت و نحوه ورود به سیستم هستیم. سعی کنیم آن را به گونهای بسازیم که عیب یابی و یافتن مشکلات در هنگام تولید آسان باشد و همچنین راههایی برای تعامل با آن برای جمع آوری اطلاعات یا گزارشها از طریق خط فرمان را نیز در صورت لزوم در نظر بگیریم.
ضمن اینکه تمامی این راهکارها باید جواب دهد. بنابراین نگران تست و تأیید هستیم تا رفتار سیستمهایی که ایجاد میکنیم قابل پیش بینی، تأثیرگذار و بدون اشکال باشد. به این صورت که برای مجموعهای از ورودیها، خروجی چیزی باشد که انتظار داریم.
ما نه تنها میدانیم که چگونه نرم افزار را بسازیم، بلکه در مورد بسیاری از چیزهای پیرامون آن نیز اطلاعات کافی داریم.
همه آنچه که قبلا ذکر کردم بسیار دشوار و پیچیده است. به علاوه باید با انسانهای دیگر نیز کار کنیم، ما عضوی از تیمی هستیم که معمولا افرادی از زمینهها و تخصصهای گوناگون هستند مثل مدیر (گاهی اوقات غیر فنی) یا مدیر پروژه، یک مدیر مهندسی، برخی از مهندسان فرانت-اند، متخصصان کیفیت و موارد دیگر. ما باید از طرق مختلف با یکدیگر ارتباط برقرار کنیم و همه در پیشرفت پروژه با هم سهیم شویم.
تنها چیزی که دوست دارم در این مقاله به آن اهمیت دهید این موضوع است. مهارتهای سخت برای نقش مهندسی نرم افزار بسیار مهم هستند. ما باید در مورد نحوه نوشتن کدی که عملکرد بهتری دارد فکر کنیم. اما اگر نتوانیم با دیگران کار کنیم و نحوه تعامل با آنها را بلد نباشیم، هیچ یک از اینها مفید نخواهد بود. برای کار با دیگران، ارتباط همه چیز است.
وقتی فهمیدید که همه چیز را نمیدانید، متوجه خواهید شد که بقیه افراد نیز همه چیز را نمیدانند، پس مجبور نیستید هر چیزی را بدانید. هرکسی در حیطه تخصصی خود میداند و راجع به برخی از مواردی که در معرض آن قرار گرفته یا مطالعه کرده اطلاع دارد و برخی دیگر را نادیده میگیرد. بنابراین فراموش نکنید که همه ما فقط با گفتگو با یکدیگر، برقراری ارتباط و به اشتراک گذاشتن دانش خود قدرتمندتر میشویم.
در حال دریافت نظرات از سرور، لطفا منتظر بمانید
در حال دریافت نظرات از سرور، لطفا منتظر بمانید
بخشی برای حل مشکلات برنامهنویسی و مباحث پیرامون آن وارد شو