في حال كنت تنوي التعاقد مع مطوّر لتطوير تطبيق بإستخدام تقنية React.js أو تحديداً React native فهذا المقال سيساعدك على تقييم خبرة المطور والتعرف على طريقة أفضل لتقييم مهاراته، أثناء المقابلة.
بعد تجربة تقنية ReactNative في مشروع يستخدم خصائص التسجيل الصوتي في الجهاز أعتقد أنها حل ممتاز وجودتها من وجهة نظري ممتازة لمن يبحث عن حل وسط إذا توفر المطور الممتاز. لذا عند رغبتك في توظيف شخصٌ ما إليك هذه الأسئلة التي هي أسئلة للبحث عن مطور ريكت نيتف React native وقد تساعدك على التعرف على درجة خبرته العملية وتقييم مهاراته:
- هل تفضّل أن تقوم بكتابة الكود بإستخدام (React code, TypeScript, Expo)؟
- ماهي أفضل مكتبة State management library تستخدمها؟
- هل تفضّل عادةً إستخدام مكتبات جاهزة وشائعة؟ أم تفضّل كتابة مكتبة خاصة بك من الصفر؟ (هذا من وجهة نظري أخطر سؤال، طبعاً الأفضل أن يستخدم المكتبات الجاهزة بواقعية للإستفادة من تحديثاتها لاحقاً)
- كيف تتعامل مع تحديث المكتبات التي تستخدمها؟
- هل سبق أن قمت بإستخدام مكتبات Animation؟ هل يمكنك ذكر بعض هذه المكتبات؟
- ماهي أفضل مكتبة Navigation حسب خبرتك؟ (React navigation, ReactNative navigation)؟
- هل تتبع مبدأ تقليل عدد أسطر المكونات؟
- عادةً هل تراعي أو تفضّل إشتراطات تعدد اللغات داخل الكود؟ هل تفضّل استخدام الطرق التي تسهل عملية تحويل اللغات حتى بدون طلب العميل؟
- هل لديك مبادئ استخدام أوامر Git؟
- هل تفضّل أن يتم عمل تسليم نسخة من التطبيق بشكل أسبوعي أو كل أسبوعين بحد أقصى؟
- هل لديك المبادئ الأساسية في التعامل مع RESTful API؟
- هل سبق أن عملت على JWT للتحقق من المستخدم؟
- هل سبق أن قمت ببناء Native plugins لتقوم بإستخدامها في التطبيق؟
- هل لديك تجربة سابقة في التعامل مع الربط مع الخدمات الشهيرة مثل (هنا ممكن تسمي بعض الخدمات التي تنوي الربط معها).
- هل لديك تجربة سابقة للعمل مع الـ Push notifications؟
- هل ممكن أن تذكر بعض الأدوات التي تستخدمها لتساعدك على تسليم نسخة للتجربة؟ (To build and deploy the production version)
- هل لديك تفضيلات محددة بخصوص طرق التواصل؟ هل تستخدم مكتبة لكتابة Unit tests؟ (Jest, Eslint or Enzyme)
- هل تستخدم أدوات CI/CD؟ هل تقوم بإعدادها حتى تسهل إطلاق التحديثات لاحقاً؟
أسئلة تتعلق بالتفاصيل المالية للمشروع:
- هل تقوم بإحتساب ساعات البحث والتطوير في العمل؟ (في حال كان المطور مبتدئ أو لديه خبرة قليلة فهذه تكون مكلفة).
- ماذا تعتقد عدد الساعات التي يمكن أن تلتزم بها أسبوعياً؟ (هنا يفضّل أن تقوم أنت بتوضيح عدد الساعات التي تحتاج إليها أسبوعياً حسب الميزانية).
- هل تكلفة ساعة العمل شاملة لمدير المشروع؟ (الشخص الذي يمكن التواصل معه للتنسيق ولحضور بعض الاجتماعات) غالباً لن تحتاج لشخص إضافي إذا كنت أنت تدير المطور بشكل مباشر وتقوم بالتنسيق مع الـ Backend بنفسك.
- هل لديك أي مانع من إستخدام Screen tracker لغرض إحتساب عدد ساعات العمل؟ (يفضّل أن يكون الهدف هنا ليس التدقيق على كيف تم إستهلاك الساعات، وإنما لتسهيل عملية احتساب الساعات وعدم تركها لتقدير المطوّر لأن الأساس هو بناء الثقة كفريق عمل).
- يجب أن يتم توضيح الضغط المتوقع في بداية المشروع وكم عدد الساعات الأسبوعية بعد شهر أو شهرين من البداية؟ (هذا السؤال يجب توضيحه للمطور ليكون على علم ومعرفة بإستمرارية المشروع).
لا أنصح بإستخدام الأسئلة كلها في مقابلة واحدة لأنها ستبدو دقيقة جداً وستستغرق أكثر من نصف ساعة للإجابة عليها .. ولكن قد تختار منها ماترى أنه مهم بالنسبة لفكرة التطبيق الذي لديك أو تدمج أكثر من سؤال في سؤال واحد لغرض الإختصار.
الأسئلة متوفرة باللغة الإنجليزية بشكل مختصر هنا:
- Prefer (React code, TypeScript, Expo). - State managment library: (Mobix, Redux, React hooks, Context) - Do you prefer to use libraries or write your code? - What do you do to update your libraries and components. - What to do with the React or libraries changing versions? what to do to keep updated? - Animation library? - Navigation libraries (React navigation, ReactNative navigation): - Multi-language. - Git (familiarity). - Agile. - Releases each week internally, each two weeks production. - RESTful API, JWT. - Configurable variables for Tokens. - Have you created native plugins before? - Do you have experiance with 3rd party APIs? Notifications? can ou name some services please. - Do you use some tools to build and deploy the production version? - Do you have an experience with ....? - Communication preferences. - CI/CD solutions? - Test libraries. - Less lines for each component? - WE DO NOT REQUIRE DOCUMENTATION. We just like to see comments inside the code.Extra questions: - Do you charge for searching RND? We are expecting you as a senior-level developer with no need to spend a whole week debugging. - We think the average of weekly hours: .... - Do we have to hire a project manager? or is it included? - We have to use a screen tracker. Do you mind? - Workload after two months will be less than 20 hours per week.
هنا رابط لمقال مشهور يوضح أن AirBnB قاموا بترك تقنية ReactNative وانتقلوا إلى Native:
https://softwareengineeringdaily.com/2018/09/24/show-summary-react-native-at-airbnb/
تعليقي على هذا المقال أنه قد يبدو أنه محبط بالنسبة لتقنية React Native ولكن الحقيقة هي أن هذا شيء طبيعي أن الـ Native أفضل من أي إطار عمل أو أي طريقة للبرمجة بإستخدام مكتبات خارجية للتعامل مع الجهاز. طبيعي أن الـ Native هو الخيار الصحيح من الناحية التقنية، خصوصاً عندما تمتلك ميزانية تسمح بذلك بشكل مريح جداً أو تمتلك شركة بحجم AirBnB :)
نصيحة عامة تتعلق بالتعاقد مع مطور، أنصح دائماً بوضع ميزانية تقديرية للمشروع والتعاقد والدفع الأسبوعي بالساعة. خصوصاً عندما يكون المشروع مشروع شخصي ليس تجاري وليس الغرض منه الوساطة التجارية بين صاحب المشروع والمطور. وذلك لضمان جودة مخرجات المشروع. حيث يمكنك طلب تحسين أي جزء من أجزاء المشروع وأنت تتمتع بحقك الكامل في ذلك، دون أن تحكمك بنود أو وثيقة متفق عليها. وحتى لا تجعل المطور يضطر لبناء بعض الأجزاء بطريقة خاطئة بسبب أن المشروع إستنفد جميع الساعات المتوقعة له! إحتياجات المشروع في تزايد مستمر وهذا طبيعي ويجب أن تتفهم ذلك من البداية! يعني ذلك أن ميزانية تنفيذ المشروع تقنياً يجب أن لاتقل عن ميزانية تشغيله ودعمه تقنياً بل من الطبيعي أن يكون الدعم والتشغيل أعلى. لذا ميزة التعاقد بالساعة أنه يجعلك تكون متفهم بشكل أكبر لهذه النقطة ويجعلك تستفيد من جودة المطور فعلاً. والعمل بالساعة من وجهة نظري أكثر كفاءة من توظيف المطور بدوام كامل!
كانت هذه هي أسئلة يمكن طرحها عند مقابلة مطور React native لغرض تطوير تطبيق. أستفدت منها وأقوم بتحديثها عند الحاجة لذلك.
ملاحظة/ هذه الأسئلة ليست مبنية على خبرات علمية ولا أمتلك مهارة لكتابة أكواد React أو ReactNative ولكن من خلال عملي مع المطور بشكل مباشر تعلمت بعض التقنيات المهمة في هذا المجال وأحببت أن أقوم بتوثيقها لأستفيد منها مستقبلاً في حال حاجتي لبناء تطبيق ReactNative مرة أخرى.
بالتوفيق،