নিজের ভাবনা ও পরামর্শ কীভাবে সবচেয়ে ভালোভাবে প্রকাশ করবেন তা জানুন
হ্যালো 👋 Exercism-কে কীভাবে আরও ভালো করা যায় তা নিয়ে আপনি একটা আইডিয়া দিয়েছিলেন, আর তার জবাবেই কেউ আপনাকে এই পোস্টে পাঠিয়েছে? আমাদের টিম আপনার আইডিয়াটি নিয়ে সময় ব্যয় করার আগে চায়, আপনি এটি পড়ে একবার ভেবে দেখুন, এই আইডিয়াটি হয়তো আগেও কারও মাথায় এসেছিল, আর এতে কী কী বিপদ থাকতে পারে। আপনার প্রস্তাবে এই বিষয়গুলো ও সম্ভাব্য বিপদগুলো যোগ করলে, এবং কেন আপনার আইডিয়াটি এখনো বাস্তবায়িত হয়নি তা ভেবে দেখলে, আপনি সম্ভবত আরও দ্রুত ও আরও ইতিবাচক সাড়া পাবেন।
চেস্টারটনের বেড়া একটি ধারণা, যা লেখক জি.কে. চেস্টারটনের ১৯২৯ সালের বই The Thing-এর একটি উদ্ধৃতি থেকে অনুপ্রাণিত। জন এফ. কেনেডি এটি উদ্ধৃত করার পর এটি বহুল পরিচিত হয়ে ওঠে। এটিই মূল উদ্ধৃতি:
এমন পরিস্থিতিতে একটি নির্দিষ্ট প্রথা বা আইন থাকতে পারে; সরলতার জন্য ধরে নিই, রাস্তার ওপারে খাড়া করা একটি বেড়া বা গেট। আধুনিক ধাঁচের সংস্কারক আনন্দে সেখানে এগিয়ে গিয়ে বলেন, “এর কী কাজ আমি তো দেখতে পাচ্ছি না; চলুন এটা সরিয়ে ফেলি।” যার উত্তরে বুদ্ধিমান ধাঁচের সংস্কারক ভালো করবেন এভাবে বলতে: “আপনি যদি এর কাজ না দেখেন, তবে আমি অবশ্যই আপনাকে এটা সরিয়ে ফেলতে দেব না। চলে যান, ভেবে আসুন। তারপর যখন ফিরে এসে বলতে পারবেন যে এর কাজ আপনি সত্যিই দেখতে পাচ্ছেন, তখন হয়তো আমি এটা ধ্বংস করার অনুমতি দেব।”
চেস্টারটনের বেড়ার মূল কথা হলো, কোনো কিছু কেন আছে তা যদি আপনি না বোঝেন, তাহলে সেটি কেন সরিয়ে ফেলা উচিত তা-ও আপনি বোধহয় বোঝেন না। একইভাবে, কোনো কিছু কেন নেই তা যদি আপনি না বোঝেন, তাহলে সেটি কেন বাদ দেওয়া হয়েছে তা-ও আপনি বোধহয় বোঝেন না।
মনে রাখার সহজ একটি নিয়ম: "কোনো বেড়া কেন প্রথমে তৈরি করা হয়েছিল তা জানার আগে সেটি সরিয়ে ফেলবেন না।"
Exercism-এ আমাদের সৌভাগ্য এই যে, সব সময়ই প্রচুর মানুষ আমাদের কমিউনিটিতে যোগ দেন এবং তাঁদের ভাবনা ও আইডিয়া শেয়ার করেন। সেই আইডিয়াগুলোর অনেকগুলোই নতুন, উদ্ভাবনী, রোমাঞ্চকর, আর আমাদের চিন্তার পথ খুলে দেয়। তাই আপনার কোনো আইডিয়া বা পরামর্শ থাকলে আমরা তা স্বাগত জানাই!
তবে বেশিরভাগ ক্ষেত্রেই মানুষ এমন আইডিয়া দেন যা আগে বহুবার আলোচিত হয়েছে। সেই আইডিয়াগুলোর উত্তর দেওয়া, আর আমাদের সিদ্ধান্তগুলো আবার ব্যাখ্যা করা বা তার যৌক্তিকতা প্রমাণ করা আমাদের টিমের জন্য অত্যন্ত ক্লান্তিকর হতে পারে। এই লেখাটির উদ্দেশ্য সেই সময় ও শক্তি রক্ষায় সহায়তা করা।
Exercism ডিজাইন, ইঞ্জিনিয়ার ও তৈরি করেছেন হাজার হাজার অত্যন্ত প্রতিভাবান মানুষ। এটি অত্যন্ত সচেতনভাবে গড়া একটি প্রোডাক্ট। কোনো কিছু আছে, কারণ তা থাকার জন্যই পরিকল্পনা করা হয়েছে; আর অনেক কিছু বাদ দেওয়া হয়েছে, কারণ তা বাদ দেওয়ার জন্যই পরিকল্পনা করা হয়েছে। Exercism-এর প্রায় প্রতিটি বিষয় নিয়েই বহুবার বিতর্ক, আলোচনা ও পুনরায় ইঞ্জিনিয়ারিং হয়েছে।
তাই আপনার আইডিয়া পোস্ট করার আগে নিজেকে জিজ্ঞেস করুন, আমরা কি এটি আগেই বিবেচনা করেছি কি না, এবং আপনার প্রস্তাবের চেয়ে আলাদা কোনো পথে আমরা কেন কাজ করেছি। আর মনে রাখবেন, আপনার আইডিয়া যত স্পষ্ট মনে হবে, তত বেশি সম্ভাবনা যে এটি নিয়েও বহুবার আলোচনা ও বিতর্ক হয়েছে। তাই এটি উপস্থাপন করার সময় সম্ভাব্য সতর্কতা ও বিপদগুলোও সঙ্গে রাখুন। যদি স্বতঃস্ফূর্তভাবে আপনার মনে আসে "কেন শুধু এটা করি না...", তাহলে প্রায় নিশ্চিতভাবেই সেটি এই শ্রেণিতে পড়ে।
পোস্ট করতে কখনোই ভয় পাবেন না, তবে আগে ভালো করে ভেবে নিন!
একটি কমন হতাশার বিষয় হলো, শিক্ষার্থীরা মেন্টরদের কাছে এমন কোড সাবমিট করেন যা টেস্টে পাস করে না। ঠিক তেমনই কমন একটি পরামর্শ হলো, "কেউ কোড সাবমিট করার আগে CLI-তে টেস্টগুলো অটোমেটিকভাবে চালিয়ে দিলেই বা কেন নয়?" শুনতে দারুণ আইডিয়া। CLI তো একটা কমান্ড চালিয়ে টেস্ট রান করাতে পারে, আর টেস্ট ফেল করলে শিক্ষার্থীকে সাবমিট করতে দেবে না।
তাহলে প্রথমে দেখা যাক, "একটা কমান্ড চালিয়ে টেস্ট রান করানো" বলতে আসলে কী বোঝায়। এর মানে, Exercism-এর ৫২টি ভাষার প্রতিটির জন্য এমন একটি স্ক্রিপ্ট লিখতে হবে যা টেস্ট চালাতে পারে এবং ফলাফল যাচাই করতে পারে। এটা কিছুটা পরিশ্রম, তবে করা অসম্ভব নয়।
কিন্তু এর মানে আরও হলো, সেই স্ক্রিপ্টটি এমনভাবে লিখতে হবে যাতে তা Windows, MacOSX আর Linux-এর সব সম্ভাব্য সংস্করণ ও কনফিগারেশনে চলে। এটি বিপুল, প্রায় সীমাহীন পরিশ্রমের কাজ।
"কেন প্রতিটি কনফিগারেশনে চলতে হবে?" আপনি হয়তো জিজ্ঞেস করবেন।
কারণ, কেউ এই স্ক্রিপ্ট চালাতে না পারলে আপনি তাঁকে Exercism ব্যবহার করা থেকে সক্রিয়ভাবেই আটকে দিচ্ছেন।
এর মানে আরও হলো, এটি কখনোই ফেল করতে পারে না।
কোনো কারণে স্ক্রিপ্টটি না চললে শিক্ষার্থী পুরোপুরি আটকে যান।
ওই 52*3*n স্ক্রিপ্টের একটিতে বাগ থাকলে, সেই OS-এ শিক্ষার্থী আর ট্র্যাকটি ব্যবহার করতে পারবেন না।
এটা আপনি কীভাবে টেস্ট করবেন?
করতে পারবেন না।
কিন্তু আপনি বলবেন, একটা --skip-tests ফ্ল্যাগ যোগ করলেই তো হয়।
পরামর্শটি ভালো, কিন্তু এতে আমরা আবার সেই জায়গাতেই ফিরে যাই, যেখানে মানুষ যখন খুশি টেস্ট এড়িয়ে যেতে পারেন।
পার্থক্য শুধু এই যে, এখন ভাঙা টেস্ট সাবমিট হওয়ার সম্ভাবনা একটু কমে যায়, ফলে মেন্টরদের সেই নিয়ে প্রত্যাশাও কমে যায়। আর তখন টেস্ট সত্যিই ভাঙা হলে সেটা আরও অস্বস্তিকর ও বিভ্রান্তিকর মনে হয়।
"কিন্তু মানুষ সাধারণত এটা করবে না" আপনি তর্ক করতে পারেন। সত্যি, এমন কিছু ভাষার ক্ষেত্রে যেখানে টেস্ট চালাতে ০.৫ সেকেন্ড লাগে। কিন্তু যে ভাষাগুলোতে টেস্ট চালাতে ২০ সেকেন্ড লাগে, সেখানে সাবমিট করার আগে অতিরিক্ত ২০ সেকেন্ড অপেক্ষা করা শিক্ষার্থীদের জন্য ভীষণ হতাশাজনক। ফলে শেষের টেস্টগুলো এড়িয়ে যাওয়াই সাধারণ ব্যাপার হয়ে দাঁড়াবে।
এই আলোচনা শেষে যা-ই দাঁড়াক, স্পষ্ট যে এখানে প্রথমে মনে হওয়ার চেয়ে অনেক বেশি জটিলতা জড়িত। বিবেচনার জন্য আছে প্রযুক্তিগত চ্যালেঞ্জ, ভাবার জন্য আছে ওয়ার্কফ্লোর সমস্যা, আর একটা উপলব্ধি: ট্র্যাকগুলো এতটাই ভিন্ন যে একটির জন্য দ্রুত ও সহজ কাজ অন্যটির জন্য যন্ত্রণাদায়ক।
তাই "সাবমিট করার আগে টেস্ট চালালেই বা কেন নয়" বলে পরামর্শ দেওয়ার বদলে চলুন একটা প্রশ্ন করি: "মানুষ কেন এমন সমাধান পোস্ট করেন যা টেস্টে পাস করে না?" তখনই ব্যাপারটা মজার হয়ে ওঠে। সাধারণ উত্তর হলো, তাঁরা আটকে আছেন বা বিভ্রান্তিতে পড়েছেন। আর তাঁদের সহায়তা দরকার। এর মানে, ভাঙা টেস্ট সাবমিট করা মেন্টরদের জন্য খুবই গুরুত্বপূর্ণ একটি ইঙ্গিত, যা বলে দেয় এই শিক্ষার্থীর সহায়তা দরকার। হ্যাঁ, এটা হতাশাজনক, কারণ মেন্টররা সঙ্গে সঙ্গে বুঝতে পারেন না কোডটি "সঠিক" কি না। তবে তাঁরা কোডটি ডাউনলোড করে চালিয়ে যাচাই করতে পারেন (সাধারণ নয়, এমন জটিল সমাধানে বেশিরভাগ মেন্টরই এটা করেন), আর তখন শতভাগ নিশ্চিত হয়ে জানতে পারেন এটি সঠিক কি না। আর যাঁরা আটকে আছেন ও সহায়তা চান, তাঁরা আরও বেশি আটকে গিয়ে আরও বেশি সহায়তার মুখোমুখি হন না; বরং এমন একজন মেন্টরের কাছে পৌঁছান যিনি দ্রুত সমস্যা দেখে সংশোধনের পরামর্শ দিতে পারেন।
দ্রষ্টব্য: আমরা আসলে সার্ভার-সাইডে টেস্ট চালিয়ে এটি সমাধান করছি। এটি বড় ও ব্যয়বহুল একটি উদ্যোগ, তবে উন্নত শিক্ষার্থী-অভিজ্ঞতার জন্য এবং সবচেয়ে জরুরিভাবে মেন্টরদের সময় ও শক্তি বাঁচানোর জন্য এটি পরিশ্রমের যোগ্য।
তিনটি বিষয়: