মেন্টরিংয়ের জন্য নানা টিপসের সংগ্রহ
আপনি যে অনুশীলনীগুলো মেন্টর করেন, সেগুলোর প্রতিটির জন্য নোট রাখার একটি ফাইল থাকলে মেন্টরিংয়ে সবচেয়ে বড় সুবিধাগুলোর একটি পাওয়া যায়। আপনি খেয়াল করতে পারেন, অনেক সলিউশনেই একই পরামর্শ কাজে দেয়। তাই নোট রাখলে একই পরামর্শ বারবার মনে করে গুছিয়ে লিখতে হয় না। আর সব পরামর্শ এক জায়গায় থাকলে সময়ের সাথে সেগুলো আরও স্পষ্ট করে গুছিয়ে নেওয়া যায়।
নোট শুরু করার পথ বুঝতে না পারলে, আপনার ট্র্যাকের অনুশীলনীর জন্য একটি mentoring.md ফাইল exercism/website-copy/tracks-এর নিচে পেতে পারেন।
ফাইলটি থাকলে সেখানে যুক্তিসঙ্গত সলিউশনের উদাহরণ থাকতে পারে, সাথে কিছু কমন পরামর্শ আর আলোচনাকে এগিয়ে নেওয়ার মতো কথা বলার বিষয়ও।
না থাকলে, ওই অনুশীলনীর জন্য নিজের নোটের ফাইল তৈরি করে ফেলার পর আপনি চাইলে সেটিও বানিয়ে রাখতে পারেন।
এছাড়া, এখন আপনি একটিই ভাষা মেন্টর করলেও ভবিষ্যতে আরও করতে পারেন। মেন্টরিং নোট ট্র্যাক অনুযায়ী এবং অনুশীলনীর নাম অনুযায়ী সাজিয়ে রাখলে কাজে দিতে পারে, কারণ একই অনুশীলনীর জন্য ভিন্ন ট্র্যাকে সম্ভবত ভিন্ন পরামর্শ লাগবে।
অনুশীলনীটি আপনি প্রায়ই মেন্টর করুন বা কদাচিৎ, মেন্টরিং নোট কাজে আসে। অনুশীলনীটি প্রায়ই মেন্টর করলে নোট থেকে কপি-পেস্ট করাই যথেষ্ট, নতুন করে অনেক লেখার ঝামেলা বাঁচে। কদাচিৎ মেন্টর করলে, শেষবার মেন্টর করার পর সপ্তাহ বা মাস পেরিয়ে গেলে যে পরামর্শগুলো ভুলে গিয়েছেন, নোট সেগুলো মনে করিয়ে দেয়।
মেন্টরদের মেন্টরিং নোট আলাদা আলাদা হওয়াটাই স্বাভাবিক। নোট সাজানোর একটি উপায় এখানে দেওয়া হলো, তবে এটাই একমাত্র উপায় নয়।
মেন্টি টেস্ট পাস করলে তাকে অভিনন্দন জানান (যদি পাস করে থাকে)।
অনুশীলনীটি কয়েক দিন ধরে কিউয়ে পড়ে থাকলে, হয়তো এমন কিছু লিখে সেই কথা তুলতে পারেন:
কারও উত্তর দিতে এত সময় লেগে যাওয়ার জন্য দুঃখিত। এখন
Resistor Color Duo-এর জন্য সক্রিয় JavaScript মেন্টরের ঘাটতি রয়েছে।
মেন্টির সলিউশনের যে দিকগুলো আপনার ভালো লেগেছে, সেগুলো একে একে লিখুন। যেমন:
এই সলিউশনটি সংক্ষিপ্ত আর পড়তে আরামদায়ক।
এখানে indexOf ব্যবহারটা আমার ভালো লেগেছে।
সংখ্যা থেকে স্ট্রিং-এ, আবার স্ট্রিং থেকে সংখ্যায় কাস্ট করা এড়াতে এখানে (first * 10) + second পদ্ধতি ব্যবহার করা হয়েছে, যা ভালো লেগেছে।
এটি লুপিং বা ইটারেশন ব্যবহার করে না।
ডিস্ট্রাকচার করা প্যারামিটারটি ভালো লেগেছে।
এরপর আসতে পারে আপনার নিয়মিত পরামর্শগুলো।
আপনি নতুন কোনো ভাষা-ফিচার চিনিয়ে দিলে তার জন্য একটি লিংক দিলে মেন্টির দারুণ উপকার হতে পারে। যেমন:
এই অনুশীলনীর জন্য এটি জরুরি নয়, তবে ফাংশনটি একটি অ্যারো ফাংশন-এ রূপান্তর করার কথা ভাবতে পারেন।
সলিউশন বলে দেওয়া আমরা চাই না, তবে মাঝে মাঝে উদাহরণ দেখে মেন্টি সবচেয়ে ভালো শেখে। কোডের একটি ছোট অংশ এমন একটি details সেকশনে রাখলে, যা মেন্টি চাইলে খুলে দেখতে পারে আবার না-ও পারে, সেই উদাহরণটি দেওয়া হয়ে যায়। যেমন:
<details><summary>স্পয়লার উদাহরণ</summary>
<pre>
export const decodedValue = ([firstColor, secondColor]) => COLORS.indexOf(firstColor) * 10 + COLORS.indexOf(secondColor)
</pre>
</details>
নোটের একেবারে শেষের দিকে আপনার পরামর্শগুলো পুরোপুরি প্রতিফলনকারী একটি প্রকাশিত সলিউশনের লিংক দিতে পারেন।
নোটের একেবারে নিচে আপনি মেন্টিরা মাঝে মাঝে যে বিস্তারিত ব্যাখ্যা চায়, সেগুলো রাখতে পারেন। এই ব্যাখ্যাগুলো খুব একটা লাগে না, তবু প্রথমবার ব্যবহারের সময়ই লিখে রাখা ভালো, যাতে কয়েক সপ্তাহ বা মাস পরে আবার লাগলে নতুন করে ব্যাখ্যা ভাবতে না হয়। যেমন, মাঝে মাঝে মেন্টি জিজ্ঞেস করে, রেজিস্টর কালার ডুও-তে প্রথম ব্যান্ড কালো হয়ে লিডিং জিরো হলে গুণ করার পদ্ধতিটি কীভাবে কাজ করবে:
প্রথম ব্যান্ডে কালো, এটা ভেবে দেখার মতোই একটি বিষয়, তাই চলুন ভেবে দেখি। রেজিস্টরের রং আসলে রেজিস্টরের ওহমের পরিমাণ বোঝায়, আর একাধিক ব্যান্ডের রেজিস্টরে লিডিং জিরো ব্যবহার করা হয় না। তাই কালো প্রথম ব্যান্ড হবে না। তাছাড়া,
parseIntবাNumber-ও লিডিং জিরো মুছে দেয়।
মেন্টরিং নোটে রাখার মতো আরেকটি ঐচ্ছিক তথ্যের ধরন হলো বিভিন্ন সলিউশন বা অ্যাপ্রোচের বেঞ্চমার্কের রেকর্ড।
মেন্টিদের একটি কমন দুশ্চিন্তা হলো তাদের সলিউশন কতটা পারফরম্যান্ট। বিশেষত C, C++, Go আর Rust-এর মতো "নিম্নস্তরের" ভাষার ক্ষেত্রে। কোড কতটা ভাষার নিজস্ব রীতি মেনে লেখা, তার সাথে সাথে অন্য ভাষার মেন্টিরাও প্রায়ই কোডের দক্ষতা নিয়ে ভাবেন।
বেঞ্চমার্ক করা মেন্টরের কর্তব্য নয়। তবে নিজের সলিউশনের বেঞ্চমার্ক অন্য অ্যাপ্রোচের সাথে তুলনা করলে কেমন দাঁড়ায়, তা দেখে মেন্টিরা প্রায়ই বিশেষভাবে মুগ্ধ হয়।
বেঞ্চমার্কিংয়ের জন্য Go বিশেষভাবে বন্ধুত্বপূর্ণ একটি ট্র্যাক, কারণ এখানে প্রায়ই টেস্ট ফাইলের মধ্যেই বেঞ্চমার্ক দেওয়া থাকে। অন্য ভাষার ক্ষেত্রে আপনার জন্য কোন পদ্ধতিটি সবচেয়ে ভালো কাজ করবে, তা জানতে কিছুটা খোঁজখবর লাগতে পারে। যেমন, আপনি যদি শুধু অনলাইন এডিটর ব্যবহার করেন, তাহলে অনলাইনে বেঞ্চমার্ক চালানোর জায়গা খুঁজতে হবে। যেমন, JSBench.me হলো JavaScript-এর জন্য একটি অনলাইন বেঞ্চমার্কার।
কোড নিজের কম্পিউটারে রান করলে, আপনার মেশিনে চালানো যায় এমন বেঞ্চমার্কিং সফটওয়্যার নামিয়ে নেওয়ার সুযোগ আছে। যেমন, Rust-এ Criterion, কিংবা cargo bench-এর সাথে বেঞ্চমার্ক টেস্ট ব্যবহার করা যায়।
বেঞ্চমার্কের হিসাব রাখার অন্তত কয়েকটি উপায় আছে। একটি উপায় হলো আপনি যেগুলো বেঞ্চমার্ক করেন, সেসবের একটি চলমান তালিকা রাখা, তবে তালিকা বড় হয়ে গেলে তা সামলানো কঠিন হয়ে যেতে পারে। আরেকটি উপায় হলো বিভিন্ন অ্যাপ্রোচের প্রতিনিধিত্বমূলক বেঞ্চমার্কের একটি তালিকা রাখা। মেন্টিরা প্রায়ই দ্রুততর অ্যাপ্রোচের কোড দেখতে চায়, তাই কোনো দ্রুততর অ্যাপ্রোচ প্রকাশিত হলে তার লিংক দিলে তারা নিশ্চয়ই খুব খুশি হবে।
আপনি যে সলিউশনটি বেঞ্চমার্ক করেছেন তার লিংক দিলে, সেটি প্রকাশিত সলিউশনের লিংক হতে হবে, মেন্টরিং সেশনের লিংক নয়। মেন্টর করা সব সলিউশনই প্রকাশিত হয় না।
ভাষার কিছু ফিচার থাকতে পারে, যেগুলো নিয়ে আপনি একাধিক অনুশীলনীতে কথা বলেন। এক ফাইল থেকে আরেক ফাইলে কোনো পরামর্শ কপি-পেস্ট করতে যাওয়ার আগে, ভেবে দেখুন তো সেটি আলাদা একটি ফাইলে রাখলে হয় না। আবারও বলি, একটি পরামর্শ এক জায়গায় রাখার সুবিধা হলো সময়ের সাথে তা সহজে গুছিয়ে নেওয়া যায়। আগে যেখানে ব্যবহার করেননি, এমন কোনো অনুশীলনীতে কাজে লাগানোর সময়ও তখন খুঁজে পাওয়া সহজ হয়। আগে কোন অনুশীলনীতে সেই পরামর্শ দিয়েছিলেন তা মনে করার চেষ্টা না করে, সোজা সেই পরামর্শের নিজের ফাইলে চলে যেতে পারবেন।
মেন্টরিং সেশন থেকে কী পেতে চান, তা নির্দিষ্ট করে বলতে মেন্টিদের উৎসাহ দেওয়া হয়। তারা প্রায়ই সেটি একটি প্রশ্নের আকারে জানায়। প্রশ্নটির উত্তর আপনি না জানলে এবং জানার আগ্রহও না থাকলে, মেন্টরিং রিকোয়েস্টটি অন্য মেন্টরের জন্য রেখে দেওয়া ঠিক আছে।
উত্তর না জানলে কিন্তু জানতে চাইলে, উত্তরটা শেখা পর্যন্ত মেন্টরিং রিকোয়েস্টটি না নেওয়াই ভালো। ততক্ষণে রিকোয়েস্টটি না-ও থাকতে পারে, তবু আপনি কিছু শিখলেন আর মেন্টিকে অপেক্ষাও করাতে হলো না।
এর একটি ব্যতিক্রম হতে পারে, রিকোয়েস্টটি যদি কয়েক দিন বা তার বেশি সময় ধরে কিউয়ে পড়ে থাকে। সে ক্ষেত্রে রিকোয়েস্টটি নিয়ে যতটা সম্ভব ফিডব্যাক দিতে পারেন, আর মেন্টিকে জানিয়ে দিতে পারেন যে তার প্রশ্নের ব্যাপারে পরে জানাবেন। অবশ্যই, এরপর সেটি ফলোআপ করা জরুরি, হয় মেন্টিকে উত্তরটা জানানো, নয়তো খুঁজে পাননি বলে জানিয়ে দেওয়া। উত্তর খুঁজে না পেলে, উত্তর খুঁজতে আপনি কী কী উপায় নিয়েছিলেন তা বর্ণনা করলে মেন্টির উপকার হতে পারে। মেন্টি উত্তর খোঁজার আরও কিছু উপায় বলতে পারে। আপনি দুজনে মিলে হয়তো উত্তরটি খুঁজে বের করতেও পারেন।
উত্তর খোঁজার আপনার জানা সব উপায় শেষ হয়ে গেলে, মেন্টিকে আলোচনা শেষ করে আবার রিকোয়েস্ট পাঠাতে বলতে পারেন, হয়তো অন্য কোনো মেন্টর উত্তর দিতে পারবেন। মেন্টি চাইলে, উত্তর জেনে গেলে সেটি আপনার সাথে ভাগ করে নিতে বন্ধ হয়ে যাওয়া আলোচনাটিতে লিখতে পারেন। আর একইভাবে, আপনি পরে উত্তরটা জানতে পারলে, বন্ধ হওয়া আলোচনাটিতে ফিরে গিয়ে মেন্টিকে জানাতে পারেন।
উত্তরটা যদি আপনি জানেন আর সেটি নিয়ে কথা বলতে চান, তাহলে শিক্ষার্থীকে তার সলিউশনের যে দিকগুলো ভালো লেগেছে তা জানানো আর অন্য অ্যাপ্রোচের পরামর্শ দেওয়ার মাঝখানটা ভালো জায়গা।
কোড ফেল করতে পারে দুভাবে: হয় এটি সব টেস্ট পাস করে না, নয়তো তা কম্পাইল হয় না বা ইন্টারপ্রেটারের শর্ত পূরণ করে না।
ফেল করা কোড নিয়ে কাজ করার ঝোঁক বা ধৈর্য মেন্টরভেদে আলাদা হয়, আর তা কিছুটা নির্ভর করে কোডটি কীভাবে উপস্থাপন করা হয়েছে তার উপর, কারণ ফেল করা কোড সবসময় একইভাবে উপস্থাপিত হয় না।
কখনো কখনো মেন্টি বলতে চায় যে সে আরেকটি অ্যাপ্রোচ চেষ্টা করেছিল, কিন্তু কাজ হয়নি, আর জানতে চায় কেন কাজ হয়নি। কোডটি দেওয়াই হয়নি, অথবা ইটারেশনে না দিয়ে কার্যত পড়ার অযোগ্য একটি কমেন্টে পোস্ট করা হয়েছে।
ওয়েব এডিটরে পরীক্ষা করা সলিউশন কেবল সব টেস্ট পাস করলেই মেন্টরিং রিকোয়েস্টের জন্য সাবমিট করা যায়। এর একটি কারণ হলো, যাতে মেন্টর বিদ্যমান কার্যকর কোডে উন্নতির বা অন্য অ্যাপ্রোচের পরামর্শ দেওয়ায় মন দিতে পারেন। কোড Debugging করা মেন্টর সবসময় করতে চান বা করার কথা ভাবা হয়, তা নয়। তবে, CLI দিয়ে সাবমিট করা একটি ফেল করা সলিউশন মেন্টরিং রিকোয়েস্টের জন্য পাঠানো যায়, যেখানে শিক্ষার্থী সেটি সমাধানে সাহায্য চায়।
ফেল করা কোডটি দেওয়া না থাকলে, আর বর্ণনা করা ব্যর্থ অ্যাপ্রোচটি ভালো মনে না হলে, এইটুকু বলাই যথেষ্ট হতে পারে যে ব্যর্থ অ্যাপ্রোচটি বাদ দিয়ে এমন একটি অ্যাপ্রোচ নেওয়া যেতে পারে, যা ব্যর্থ অ্যাপ্রোচটিও নয়, আবার তারা যে অ্যাপ্রোচে পাস করেছে সেটিও নয়। অথবা, ব্যর্থ অ্যাপ্রোচে ঠিক কী বাগ ছিল তার বিস্তারিত না গিয়েই, তারা যে অ্যাপ্রোচ ব্যবহার করেছে সেটি কেন ব্যর্থ অ্যাপ্রোচের চেয়ে ভালো, তা ব্যাখ্যা করাই যথেষ্ট হতে পারে।
যেমন, মেন্টিদের রোবট নেম নিয়ে সমস্যায় পড়া একটি কমন ঘটনা। হয় টেস্ট টাইম আউট হয়, নয়তো যথেষ্ট নাম তৈরি করতে পারে না, আর তারা জানতে চায় এটি কীভাবে ঠিক করবে। আপনার ঝোঁক আর ধৈর্য থাকলে, নিশ্চিতভাবেই তাদের কোড বিশ্লেষণ করে সমস্যাটি কীভাবে সমাধান করা যায় তা বলতে পারেন। অথবা ব্যাখ্যা করতে পারেন, র্যান্ডমে তৈরি করা নাম যাচাই করলে যত বেশি নাম তৈরি হয় তত বেশি কলিশন হয়, আর পরামর্শ দিতে পারেন, আরেকটি অ্যাপ্রোচ হতে পারে নামগুলো ক্রমানুসারে তৈরি করে পরে সেগুলো শাফল করে দেওয়া।
ফেল করা কোডটি কার্যত পড়ার অযোগ্য একটি কমেন্টে পেস্ট করা হয়ে থাকলে, পাস করা সলিউশনের উপর যা ফিডব্যাক দেওয়া সম্ভব তা দিতে পারেন, আর পরামর্শ দিতে পারেন যেন কমেন্টের কোডটি আরেকটি ইটারেশন হিসেবে সাবমিট করে। এছাড়া মেন্টিকে পরামর্শ দিতে পারেন, সমস্যাটি কোথায় তার সূত্র হিসেবে ফেল করা ইটারেশনের এররগুলো দেখতে।
কোডটি ফেল করা একটি ইটারেশনে থাকলে, টেস্ট রানের এররগুলো দেখতে মেন্টিকে নির্দেশ করলে উপকার হতে পারে। অন্য ভাষার তুলনায় কিছু ভাষায় এরর বা টেস্টের ফলাফল পড়ার জন্য একটু বেশি নির্দেশনা লাগে। এররের এক বা একাধিক অংশ উদ্ধৃত করে শিক্ষার্থীকে তার অর্থ বুঝিয়ে দিলে উপকার হতে পারে।
শেষ বিচারে, মেন্টির ফেল করা কোড ঠিক করা মেন্টরের দায়িত্ব নয়, তবে মেন্টর চাইলে মেন্টিকে নিজেই সেটি ঠিক করার উপায় বলে দিতে পারেন।
হতে পারে আপনি একটি ট্র্যাক মেন্টর করতে যোগ দিলেন, কিন্তু তার কিউয়ে মেন্টর করার মতো কোনো অনুশীলনীই দেখতে পাচ্ছেন না। আপনার মনে হতে পারে কিছু একটা ভুল হয়েছে, কিন্তু এর অন্তত কয়েকটি কারণ থাকতে পারে। একটি কারণ হলো, এই মুহূর্তে কেউ ওই ট্র্যাকে মেন্টরিং চাইছে না। কখনো কখনো একটি ট্র্যাকে নিষ্ক্রিয়তার সময় কেটে যায়। আরেকটি কারণ হলো, আপনি দেখার আগেই অন্য মেন্টরেরা রিকোয়েস্টগুলো নিয়ে নিচ্ছেন। অনেক সক্রিয় মেন্টর থাকা জনপ্রিয় ট্র্যাকে এমনটা হওয়াই স্বাভাবিক।
কিউয়ে অনেক রিকোয়েস্ট থাকলে, সেগুলো মেন্টর করার কয়েকটি উপায় আছে। আপনি চাইতে পারেন পুরোনো থেকে নতুনের দিকে এগোতে, যাতে সবচেয়ে বেশি সময় অপেক্ষা করা মানুষদের আগে দেখা হয়। অথবা, নতুন থেকে পুরোনোর দিকে যাওয়া বেছে নিতে পারেন, বিশেষত পুরোনো রিকোয়েস্টগুলো যদি ইতিমধ্যেই অনেক দিন ধরে অপেক্ষা করে থাকে। এভাবে সম্প্রতি সক্রিয় থাকা মানুষদের জমে থাকা কাজ শেষ হওয়ার জন্য অপেক্ষা করতে হয় না।
একই অনুশীলনীর জন্য একাধিক রিকোয়েস্ট থাকলে, মনোযোগ ধরে রাখতে একই অনুশীলনীর রিকোয়েস্টগুলো একসাথে ব্যাচ করে দেখতে পারেন, অনুশীলনী A থেকে B, আবার A-তে ফিরে যাওয়ার বদলে।
হতে পারে আপনার আগ্রহ নেই এমন কোনো অনুশীলনীর রিকোয়েস্ট দিনের পর দিন বা সপ্তাহের পর সপ্তাহ পড়ে আছে। আপনি চাইলে এটি না নিয়ে থাকতে পারেন এই আশায় যে অন্য কোনো মেন্টর এটি তুলে নেবে, আবার এটি আপনাকে অনুশীলনীটি নিজে একবার চেষ্টা করে দেখার উৎসাহও দিতে পারে। একটি কাজে দিতে পারে, সাবমিট করা সলিউশনটি দেখা। সেখানে এমন অ্যাপ্রোচ থাকতে পারে যা আপনি ভাবেননি, আর সেই অ্যাপ্রোচ অনুশীলনীটি সমাধান করা আপনার কাছে আরও আকর্ষণীয় করে তুলতে পারে। কিন্তু কোড দেখেও অনুশীলনীটি সমাধান করতে আগ্রহ না জাগলে, তাতে কোনো ক্ষতি নেই। শুধু মেন্টরিং রিকোয়েস্ট দেখলেই "Start mentoring" বাটনে ক্লিক করতে হবে, তা নয়।