از سری گفتگوهای شنیدنی GoCasts با مهندس کیانوش مختاریان، مهندس نرم افزار، رهبر فنی و مدیر در گوگل هم صحبت خواهیم شد.
توجه داشته باشید که این گفتگو بصورت یک سری پرسش و پاسخ، بدون در نظر گرفتن اولویت و ترتیب انجام گرفت. همچنین متن سوال و جواب عینا همانی نیست که در صوت گفتگو وجود دارد و صرفا به صورت خلاصه نکات مهم گفتگو به صورتی متنی نوشته شده است.
لطفا یه توضیح کوتاه در مورد مسیر شغلی و دانشگاهی خودتون به مخاطبین ما بدید.
من سال ۱۳۸۶ از دانشگاه شریف کارشناسی مهندسی نرم افزار فارغ التحصیل شدم. و همون سال هم رفتم برای ادامه تحصیل، ۲ سال فوق لیسانس گرفتم، یه کم کار کردم و بعد در مقطع دکتری به عنوان کارآموز وارد گوگل شدم و بعد از فارغ التحصیلی به طور تمام وقت استخدام شدم. الان هم در تیم زیرساخت نمایش تبلیغات یک تیم کوچولو دارم و روی اتکاپذیری و کارایی این سیستم بزرگ کار می کنیم.
در دنیای آلوده شده به صنعت تبلیغات و آموزش، خیلی از مسائل روش مانور داده میشه که واقعا اونقدر مهم نیستند و این باعث میشه که یه دنیایی پر از ابزار و تکنولوژی های مختلف وجود داشته باشه که ندونیم چه مسیری رو باید طی کنیم به کدوم اهمیت بدیم و به کدوم اهمیت ندیم.
راستش خب این سوال خیلی کلیه، همه اون آموزش ها هم سعی کردند به این سوال جواب بدند، ولی من اگه خودم برگردم به گذشته، اینه که تو دنیای عمومی مهندسی نرم افزار تکنولوژی اونقدر مهم نیست. اولش خیلی مهمه که آدم چند جور زبان یاد بگیره که دید پیدا کنه، فرق زبان های type-safety دار و type-safety ندار مثل پایتون رو بدونه، از هر کدوم یدونه دیده باشه، ولی حالا مثلا اینکه جاوا بدونه بره سی پلاس پلاس هم یاد بگیره خب خیلی مهم نیست، مهم اینه که با اینا هر مساله ای که بهش داده شد بتونه حل بکنه و در سطح پایین باید از این شروع بشه، حالا یه کم جلوتر باید به قابلیت نگهداری کدی که دارم مینویسم و یکپارچه شدنش با بقیه چیزها و اینجور چیزها باید فکر کنم.
مخصوصا ما که بیشتر تو دنیای بکند هستیم خیلی از مواقع درگیر مسائل الگوریتمی نیستیم و بیشتر از ابزار استفاده می کنیم، با این حال چقدر دانش الگوریتمی مهم است؟
خب مهمه واقعا، یعنی باید اینطوری بگم که برای یه مساله ای که تو دنیای واقعی پیش بیاد شما بتونید الگوریتم O(n) بدید به جای O(n^2) خب بعضی موقع ها میتونه یه محصول رو زمین بزنه یا نزنه ولی متوجه م که تو مقیاس کوچیکتر یا مایی که خیلی خلق تکنولوژی نمیکنیم شاید اینا برای ما مساله ای نباشه. ولی اینکه بفهمیم الگوریتم های ساده چی هستن و چطوری کار می کنن به نظرم یه کمینه ای هست که باید وجود داشته باشه. نه اینکه اول از همه این باید وجود داشته باشه، یا اگه این وجود نداشت کلا دیگه به درد نمیخوره ولی اولویت بالایی داره
شما به عنوان یک رهبر فنی، در بخش فنی به چه ویژگی هایی بیشتر اهمیت میدید؟
ببینید اینکه معماری microservice یا TDD یا جداسازی دغدغه ها، اینا مفاهیمی هست که هنگام استخدام یک فرد اصلا مهم نیست بلد باشه! معمولا یا بلد نیست اگر هم بلد باشه بیشتر ضرر میزنه، چون هی میخواد اپلای شون کنه، در حالی که نکته مهمی که در مورد این practice ها وجود داره اینه که بدونی کی باید به کار ببری و کی استفاده نکنی. یعنی هیچ اشکالی نداره یه مهندس سطح کارآموز یا سطح متوسط این چیزا رو بلد نباشه، قرار هم نیست بلد باشه، اگه هم قراره دیزاینی انجام بده توسط ارشدتر ها ریویو میشه و تو دیزاین ریویو ها اشتباهاتش بهش گفته میشه و یاد میگیره.
مثلا tdd ما اصلا انجام نمیدیم، یا pair programming نمیکنیم، در حالی که میدونم اینا مفاهیمی هست که در دنیای بیرون بهشون تاکید میشه
در بحث soft skill برای اینکه خروجی یک تیم بالاتر بره چه مهارت هایی مهمه؟
اینکه به دنبال چه مهارت های نرمی هستیم، راستش خیلی کم، تا چند سال پیش هم اصلا در گوگل وجود نداشت و فقط مصاحبه های فنی بود. ولی در این چند سال که اضافه شده، برای سطوح پایین انتظارات خیلی کمه، مثلا اینکه ببینیم چقدر به آدم های تیم اهمیت میدن چقدر به پروژه اهمیت میدن. در سطوح بالاتر، انتظارات بالا میره. چیزی که خط قرمز باشه اینه که طرف دُگم باشه!
مهندس مختاریان در تولید محتوای با کیفیت فارسی در حوزه مهندسی نرم افزار فعال هستند و شما می توانید از طریق راه های زیر دنبال کننده ایشان باشید:
اگر در طول مسیر یادگیری احتیاج به کمک دارید می توانید با بنده از طریق ایمیل در ارتباط باشید. همچنین برای اطلاع از مطالب جدید می توانید کانال تلگرام GoCasts را دنبال کنید.