برو به محتوای اصلی
۵ ماه پیش پرسیده شده

از نظر شما مشخصه‌های برنامه‌نویس مناسب و مفید در یک تیم بازی‌سازی چه چیزهایی است؟

من کجام؟ اینجا کجاست؟

در جامعه بازی‌سازان ایران می‌تونید در مورد هر موضوعی سوال کنید، به سوالای بقیه جواب بدید و تجربه‌تون رو به اشتراک بگذارید!

ما در فرآیند مصاحبه معمولا موارد زیر رو با سوال‌هایی چک میکنیم:

  • توانایی فنی نوشتن کد کوتاه در پنج دقیقه
  • توانایی پیدا کردن راه حل یک مشکل در جلسه مصاحبه از طریق گوگل
  • توانایی یاد دادن مطالب به دیگران
  • عادت مطالعه و آپدیت شدن
  • توانمندی کار تیمی
  • درک حداقلی از آرت، انیمیشن و صدا جهت ارتباط
  • دانش نسبت به بازی‌ها و عادت بازی کردن
  • داشتن هدف بازی سازی در لیست علایق و اهداف

مورد دیگر این هست که توسعه دهنده میبایست بیشتر از اینکه علاوه به زخمی کردن تکنولوژی‌های مختلف و سوییچ کردن بین آنها باشد، به دنبال هدف پروژه و رسیدن به آن باشد، و تا جایی که به نفع مسیر پروژه باشد، با تکنولوژی‌ها و ساختار فعلی کنار بیاید.

امیرحسین فصیحی
از اعضای فن‌افزار

به نظر من کنجکاوی شخص بسیار مهمه. 

توانایی مدیریت ذهن برای هدایت توجه هم برای برنامه نویس حتما با ارزشه، در واقع تبحر در تمرکز.

محمدعلی ساعتچی
هم بنیان‌گذار و مسئول بخش بین‌الملل در Quiz of Kings

این سوال خیلی ابعاد وسیعی داره

  • برنامه نویس تو چه لولی مد نظره؟ senior, junior, talent
  • پوزیشنی که برای فرد در نظر گرفته شده، بیشتر چه نوع تسک‌هایی بهش وارد می‌شه؟ R&D, Development, design & architecture, daily business chores,...
  • با چه گروهی قراره همکاری داشته باشه؟ product design, server development, infrastructure & network,...

چیزی که به صورت کلی برای همه این ابعاد باید در نظر گرفت اینه که:

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

درک مسئله

برنامه‌نویس‌هایی که مسئله را خوب درک نمی‌کنند اساسا نمی‌توانند راه‌حل مناسبی رو هم برای سوال پیدا کنن.

اولین قدم برای حل یک مسئله طی کردن یک مسیر برای رسیدن به جوابی feasible و practical هست. برنامه‌نویس اول باید شرایط مسئله را درک کند، بعد دنبال راه‌حل آن باشد. ممکنه محدودیت در resource وجود داشته باشه یا مجبور باشن با ابزار خاصی کار کنن یا حتی زمان خیلی فاکتور مهمی باشه در شرایط مسئله...

بعد از درک شرایط مسئله با توجه به فاکتورهایی که برای ذینفعان اهمیت داره، بگرده دنبال راه‌حل و جواب. برای پیدا کردن جواب بسیار اهمیت داره قبل از پیاده‌سازی با افراد و همکاران در تیم مشورت بشه و اگر امکان داره جلسه solution design برگزار بشه تا راه‌حل polish و آماده بشه

حس کنجکاوی

خیلی وقت‌ها برنامه‌نویس‌ها در شرایط خوب و درست یک راه‌حلی ارائه می‌دن و پیاده‌سازی می‌کنن و تمام!

در این شرایط بعضی برنامه‌نویسان با حس کنجکاوی (یا حتی شاید مسئولیت‌پذیری) که دارند، بازهم حواس‌شون به سیستم هست و ممکنه راه‌حل بهینه‌تری ارائه بدن و باعث ارتقا سیستم بشن.

برنامه‌نویس (و اساسا هر نیرویی در هر دپارتمانی) اگر حس کنجکاوی نداشته باشه، بعد از مدتی بی‌روح و مرده می‌شه چون هیچ حس کنجکاوی برای یادگیری مسائل جدید، بررسی سیستم و عوامل دیگه نداره. در نتیجه تبدیل می‌شه به یک ربات که باید مدیرش همواره حواسش بهش باشه

مسئولیت‌پذیری

خیلی از برنامه‌نویس‌ها (یا نیروهای مختلف در هر بخش) بعد از اینکه کاری رو انجام می‌دن و به نتیجه می‌رسونن دیگه بهش کاری ندارن. در صورتی که یک تسک شامل سه بخش هستش:

  1. Pre Development
  2. Development
  3. Post Development

خیلی‌ها قسمت ۳ رو فراموش می‌کنن. به عنوان مثال ما در کوییز آو کینگز همیشه برنامه‌نویس‌هامون سعی می‌کنن که اگر تسکی رو انجام می‌دن و تمام می‌کنن حتما نتیجه رو هم بررسی کنن و اگر ایرادی داره مسئولیت‌شو قبول کنن و اصلاحش کنن.

در خیلی از شرکت‌ها برنامه‌نویس‌ها بلافاصله وقتی تسک در قسمت Done قرار می‌گیره دیگه کاری بهش ندارن و تصور می‌کنن که دیگه نسبت به اون تسک وظیفه‌ای ندارن و باید تسک جدیدی براشون تعریف بشه که اون ایراد رو برطرف بکنن!!

خلاقیت

علم کامپیوتر و اصولا صنعت بازی ثانیه به ثانیه در حال تغییره و خیلی وقت‌ها به هردلیلی (تحریم‌ها، عدم وجود سرمایه کافی، عدم وجود resource مناسب) افراد باید برای حل یک مسئله از راه‌حل‌های خلاقانه استفاده بکنن.
به عنوان مثال در کوییز آو کینگز ما از موتور بازی‌سازی Corona استفاده می‌کردیم. اگر این موتور بازی‌سازی رو بشناسید می‌دونید که بسیار community کوچک و ابزار کمی برای حل مشکل‌های مختلف داره.

تو این شرایط برنامه‌نویس‌های ما خیلی از راه‌حل‌های خلاقانه استفاده کردن تا مشکلات متفاوتی رو حل کنند. یا بارها بعد از اینکه یک تسک روی production رفته و دست کاربران رسیده متوجه یک باگ بزرگ شدیم که باید بلافاصله حل می‌شد. تو این شرایط در عین سرعت بالا باید دقت به خرج داد و راه‌حل‌های خلاقانه‌ای ارائه کرد.

جمع‌بندی

براساس فرهنگ سازمانی که خودتون می‌دونید که چه شرایط و چارچوبی داره، باید برنامه‌نویسی رو انتخاب کنید که در بلند مدت بدونید ارزش افزوده برای تیم و استودیو شما خواهد داشت. نه اینکه صرفا یک کدی زده شود و محصول به مشتری ارائه شود. برنامه‌نویس باید در بخش‌هایی که فعالیت می‌کند ایده‌پرداز باشد و به ارتقا سیستم فکر کند و دغدغه پیشرفت هم در بعد شخصی و هم در بعد سازمانی داشته باشد.

 

همه‌ی دوستان موارد مهمی رو گفتند.علاوه بر اونا من به این مسائل فنی و شاید جزیی‌تر رو هم می‌گم:
- آشنایی به الگوهای طراحی، شاید همه جا از الگوهای طراحی استفاده نکنیم اما این قضیه باعث داشتن یک زبان(فرهنگ لغات) مشترک فنی بین نفرات فنی تیم می‌شه.

- بتونه ساختار ایجاد کنه، با توجه به سطحش چه قرار باشه یه پنجره‌ی ساده رو کد بزنه یا یه سیستم پیچیده. باید بتونه روابط با ساختار مرتب ایجاد کنه و مساله‌ رو بشکنه.

- توانایی حل کردن یک مساله الگوریتمی کوچیک. آشنایی با الگوریتم‌های معروف مربوط به کارش. به نظرم لازم نیست حفظ باشه و اونا رو روی کاغذ پیاده کنه. ولی یه مثلاً حداقل سریع‌ترین روش مرتب‌سازی رو بدونه. حتی اگر پیاده‌سازیش رو حفظ نیست!

- آشنایی به Unit Test: شاید در صنعت بازی‌سازی خیلی متداول نباشه اما با توجه به موقعیت شغلی فرد باید آشنا باشه و برای جاهای حساس بازی یا روال‌های موجود در برنامه بتونه تست اتوماتیک بنویسه.

- رفع مشکل و Debugging، یه برنامه‌نویس باید به ابزار Debugger مسلط باشه و بتونه اول محدوده‌ی مشکل رو مشخص کنه و با انجام تست‌های متعدد مشکل رو به صورت دقیق مشخص کنه.

- با ساختار کلی حافظه،‌ CPU آشنا باشه. حداقل بدونه حافظه آدرس داره یه متغیر رو ذخیره می‌کنیم یا یه کلاس رو new می‌کنیم یعنی چی. درباره‌ی CPU حداقل بدونه منظور از Thread چیه!

- کار کردن با فایل و Serialization و تفاوت‌هاشون آشنا باشه.

- بتونه با سورس‌کد بزرگ کار کنه. خواه یا ناخواه بعد از یه مدت حجم پروژه بزرگ می‌شه و بتونه قسمت‌های مختلف کد رو یاد بگیره و ویرایش کنه.(بدون این که چیزی رو خراب کنه)

- قبل از دست به کد شدن توانایی ارایه راه‌حل برای پیاده‌سازی داشته باشه.

- توی کاری که بلده و روتین به حساب میاد توانایی تخمین زمان ۹۰٪ داشته باشه. (مثلاً اضافه کردن یه دکمه به یه منو)


در آخر جدای بحث موارد اخلاقی برای یه برنامه‌نویس مهارت‌های فنی قابل اندازه‌گیری احتیاجه... مثلاً شما تا با یه نفر ۶-۱۲ ماه کار نکنی متوجه نمی‌شی «روحیه کار تیمی» داره یا نه. پس برای تعریف «مشخصه‌‌»‌های یه برنامه‌نویس خوب در درجه اول موارد قابل اندازه‌گیری و سنجش رو پیش می‌گیرم و سعی می‌کنم درباره اخلاق و روحیاتش از رو پاسخ به سوالاتش «حدس» بزنم.

منصور جوادی
همکار سابق و دوست فعلی تاد و از اعضای جعبه آبی

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

مواردی که دوستان فرمودند همگی صحیح است. یک چیزی که شاید باید یک برنامه نویس ارشد یا مدیرفنی به تیم بیاره دیدگاه فنی به دیزاین هست.

خیلی اوقات دیزاینرها شاید ندونن چه چیزی میتونه ممکن باشه و کمکشون کنه. یک برنامه نویس با تجربه بازی باید بتونه راه حل های هوشمندانه بده و فرایندها رو از دید مهندسی ببینه و تسریع کنه.

meysam ameri
برنامه نویس

دوستان کامل گفتن.به نظر من هم یه برنامه نویس جدای از اصول برنامه نویسی باید:

قدرت تحلیل مسئله رو داشته باشه.قبل از شروع کار اون کیبورد لعنتیو کنار بذاره و مسئله رو تو ذهنش حلاجی کنه بعد اونو تا اونجایی که جا داره به قسمت های کوچک تقسیم کنه تا درک و حلشون راحتر بشه و هم به زمانبندی دقیق تری برای انجامشون برسه.این کار به خود من که خیلی کمک کرده.

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

نکته بعدی که خیلی از برنامه نویسا رو وسوسه میکنه وارد کردنه تکنولوژی های جدید یا پیچیدگیهای بی مورد به داخل پروژه ست که واقعا آسیب میزنه.

نکته بعدی تعصب بیجای برنامه نویس رو کدهاست طوری که هیچ کس از همکارا علاقه ای به بحث کردن با اون طرف ندارن.این که با دلیل از منطقی که داری دفاع کنی کار درستیه ولی وقتی تبدیل به تعصب میشه دیگه نمیشه کاریش کرد.

سروش شهبازی
مدیر فنی استودیو بلوط گیمز

از نظر من توانایی مدیریت برنامه‌هایی که به یک برنامه نویس داده میشه و استفاده از تجربیات دیگر اعضای تیم باعث میشه یک فرد برای هر تیمی بسیار مفید واقع بشه

یکی از مهم‌ترین چالش‌هایی که ما همیشه تو تیم داشتیم این بوده که برنامه نویس برای اینکه بتونه لیست کارهایی که بهش داده شده رو بدون اتلاف وقت و سردرگمی پیش ببره، در وهله اول انجام دادن کارهایی هست که زمان کمتری میبره و به عبارتی آسون‌تر هستند.
این کار باعث میشه حجم تسک‌ها با انجام دادن کارهای کوچک کم‌تر بشه و زمان باقیمانده ای رو صرف  کارهای پیچیده‌تر کنه که تمرکز بیشتری هم لازم داره.

یکی از کارهایی که باعث میشه سرعت برنامه نویس توی تیم بالا باشه اینکه سعی کنه همیشه کارهایی که شبیه به هم هستند رو انجام بده. اینکار باعث میشه ذهن دسته بندی بهتری داشته باشه و سرعت انجام دادن کارها هم به صورت چشم گیری افزایش پیدا کنه.
برای مثال من اول دیتاهایی طراحی شده رو در ادیتور یونیتی وارد میکنم
بعد وارد کد نویسی مربوط به دیتا‌ها میشم
در نهایت هم اگر نیاز باشه سیستم جدیدی به کدها اضافه بشه، اینکار رو انجام میدم

با این روش (انجام کارهای شبیه بهم و دسته بندی شون) کار با سرعت بالایی پیش بره.

در بعضی از مواقع در حین انجام دادن یه کاری که نیازمند تمرکز بالایی هست، اگر یک تسک جدید به برنامه‌ریزی‌هایی که داشتیم اضافه بشه، تا زمانی که کار در حال انجامم تموم نشده باشه به هیچ عنوان روی تسک جدید نمیرم

از نظر من پایبند بودن به برنامه ای که تیم فراهم کرده و هماهنگی با طراح بازی و فهم درست مسئله ای که میخوایم پیاده سازیش بکنیم از دیگر ویژگی‌های مهم یک برنامه نویس در یک تیم بازی سازی میتونه باشه.

علیرضا پورسهولت
برنامه‌نویس در Quiz of Kings

به نظرم استفاده از کلمات "مناسب" و "مفید" هم نسبی‌ست و هم همراه با نگاه کالا محور به انسان‌ها! قبل از سنجیدن مناسب و مفید بودن توانایی‌های یک فرد، باید جایی که قرار است از این توانایی‌ها استفاده شود را مشخص کرد.
اما به طور کلی شاید بتوان موارد زیر را در نظر گرفت:
۱ - اشتیاق به یادگیری و رویارویی با چالش‌های کوچک و بزرگ
۲ - آگاهی و داشتن برآورد درست و واقع‌گرایانه نسبت به توانایی‌های خود(در هر سطحی، چه مبتدی، چه متوسط و چه حرفه‌ای)
۳ - داشتن هدف کوتاه، میان و بلند مدت شخصی در حوزه‌ی کاری مربوطه
۴ - داشتن روحیه‌ و توامندی کار تیمی
۴ - داشتن دانش فنی متناسب با حوزه‌ی کاری و میزان تجربه‌ی کاری
۵ - آشنا با بازی و نیازمندی‌های تولید بازی
۶ - توانایی درک و حل مساله

برنامه نویس ابعاد خیلی گسترده ای داره .  
توانایی کنونی در ایجاد پروتوتایپها  (زمان و کیفیت). 
نحوه واکنش به چالش هایی که در پروژه ایجاد میشود (زمان و راهکار) . 
سرعت پیشرفت و یادگیری و همچنین هماهنگ شدن با پروژه .  و برقراری ار تباط خوب اولیه با پروژه .

 

amin barzegari
یه بازی ساز

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