অনুশীলনীর উন্নয়নের প্রস্তাব দেওয়া

অনুশীলনীর উন্নয়নের প্রস্তাব দেওয়ার আগে যা যা বিবেচনা করা উচিত


তাহলে আপনি একটি অনুশীলনীতে এমন কিছু খুঁজে পেয়েছেন, যেটা আপনি আরও উন্নত করতে চান। প্রথমেই ধন্যবাদ, আপনার এই যত্ন নেওয়ার জন্য এবং আমাদের জানানোর জন্য সময় বের করার জন্য! 💙

একটি অনুশীলনী পরিবর্তন করার সময় কয়েকটি বিষয় ভেবে দেখা দরকার, আর সেগুলো লার্নিং অনুশীলনীগুলো (যেগুলো সিলেবাসের টপিক শেখায়) ও প্র্যাকটিস অনুশীলনীগুলোর (বাকিগুলো) ক্ষেত্রে একটু আলাদা। নিচে সেই পার্থক্যগুলো নিয়ে আলোচনা করা হয়েছে।

তবে তার আগে কয়েকটি সাধারণ বিষয় বিবেচনা করা দরকার।

অনুশীলনী পরিবর্তন করলে পরিণতি থাকে

একটি অনুশীলনী পরিবর্তন করলে বেশ কিছু পরিণতি থাকে:

  1. নতুন টেস্ট যোগ করলে বিদ্যমান সলিউশন ভেঙে যেতে পারে। এতে হাজার হাজার মানুষের কাজ পুরনো হয়ে যায়, আর নতুন টেস্টগুলো যদি কোনো বিদ্যমান বাগ তুলে ধরতে না পারে, তবে তাদের কাছে এটা হতাশাজনক।
  2. আমাদের সবার কাজ আবার টেস্ট করতে হয়, যার পরিবেশগত এবং আর্থিক, দুটো খরচই থাকে।
  3. একজন বা একাধিক মেইনটেইনারকে পরিবর্তনগুলো পর্যালোচনা করতে সময় দিতে হয়, ফলে ওই সময়ে তারা ট্র্যাকের অন্য কোনো উন্নতি করতে পারেন না।

এই সব কারণে আমরা কেবল সেই অনুশীলনীই পরিবর্তন করি, যেখানে স্পষ্টভাবে চেনা যায় এমন কোনো শক্তিশালী সুফল আছে।

এনট্রপির দিকে গড়িয়ে পড়া এড়িয়ে চলুন

অনুশীলনীর টেস্ট স্যুটের লক্ষ্য সব সম্ভাব্য কেস কভার করা নয়। আমাদের অনুশীলনীগুলো প্রোডাকশন সফটওয়্যার নয়, আর বাস্তব জগতের ইউজ কেস নকল করার জন্যও বানানো নয়। এগুলো এমন ছোট সমস্যা হিসেবে তৈরি করা হয়েছে, যা আপনাকে একটি প্রোগ্রামিং ভাষায় সাবলীলতা অর্জনে সাহায্য করে। তাই আমরা ইচ্ছাকৃতভাবেই প্রতিটি এজ কেস কভার করা, জোর করে অনেক ইনপুট ভ্যালিডেশন চাপানো, কিংবা এ ধরনের বাস্তব-জগতের বিষয় এড়িয়ে চলি। আপনার প্রস্তাবিত উন্নতিটি যদি কোনো এজ কেস ধরা বা ইনপুট ভ্যালিডেশন যাচাই করার জন্য হয়, তাহলে সেটি অনুশীলনীতে উল্লেখযোগ্য কোনো পার্থক্য না আনলে গ্রহণযোগ্য হওয়ার সম্ভাবনা কম।

লার্নিং অনুশীলনীগুলো

লার্নিং অনুশীলনীগুলো একটি লক্ষ্য নিয়ে তৈরি: কনসেপ্ট শেখানো। কোনো অনুশীলনীর যেকোনো পরিবর্তন সবার আগে এই বিচারে দেখা হয় যে তা কনসেপ্ট শেখানোকে উন্নত করে কি না।

লার্নিং অনুশীলনীগুলো (বিশেষত) টেস্টের দিক থেকে সম্পূর্ণ হওয়ার জন্য বানানো হয় না। এছাড়া প্রায়ই এগুলো একটু কৃত্রিম বা জটিল লাগতে পারে, যাতে শিক্ষার্থীর এখনো না-শেখা কোনো কনসেপ্ট ব্যবহার করতে না হয়, অথবা শিক্ষার্থীর উপর অতিরিক্ত বোঝা না পড়ে।

আপনার প্রস্তাবিত পরিবর্তন যদি কনসেপ্ট শেখা থেকে মন সরিয়ে দিতে পারে, তাহলে তা সম্ভবত প্রত্যাখ্যাত হবে। পরিবর্তনটি যদি শেখা সহজ করে, তাহলে তা জোরের সঙ্গে বিবেচনা করা হবে। আর যদি তা মাঝামাঝি কোথাও পড়ে, তাহলে হয়তো গৃহীত হবে, তবে অগ্রাধিকার পাওয়ার সম্ভাবনা কম।

প্র্যাকটিস অনুশীলনীগুলো

প্র্যাকটিস অনুশীলনী সম্পর্কে মূল কথা হলো, এদের প্রায় সবগুলোই একটি কেন্দ্রীয় রিপোজিটরিতে থাকে (যা "Problem Specifications" নামে পরিচিত)। তাই একটি অনুশীলনীতে পরিবর্তন করলে তার প্রভাব সব ট্র্যাকে গিয়ে পড়ে। অর্থাৎ একটি ভালো পরিবর্তন আরও বেশি শক্তিশালী, কারণ তা সব ভাষার উপকারে আসে। কিন্তু এতে পরিবর্তনের বোঝাও বেড়ে যায়, কারণ পরিবর্তনটি গৃহীত হতে হলে একাধিক ক্রস-ট্র্যাক মেইনটেইনারকে তার সঙ্গে একমত হতে হয়, আর তারপর প্রতিটি ভাষার মেইনটেইনারকে সেই পরিবর্তন নিজেদের ট্র্যাকে নিয়ে আসতে হয়।

এছাড়া অনুশীলনীতে পরিবর্তন মানে সিলেবাসে তার সঙ্গে যুক্ত কনসেপ্টগুলো আরও অস্পষ্ট হয়ে যেতে পারে, বা অনুশীলনী সমাধান করতে বাড়তি ফিচার লাগতে পারে, আর তাতে সেগুলো কোথায় আনলক হয় তা বদলে যায়। পরিবর্তন গ্রহণ করার আগে ট্র্যাকজুড়ে এটাও বিবেচনা করা দরকার।

কেবল কিছু ট্র্যাকে নির্দিষ্ট টেস্ট কেস রাখার ব্যবস্থা আমাদের আছে বটে, তবে আমরা সাধারণত তা নিরুৎসাহিত করি, কারণ এভাবে শাখা-প্রশাখায় ভাগ হয়ে যাওয়া মেইনটেইনার ও শিক্ষার্থী দুপক্ষের কাছেই বিভ্রান্তির সৃষ্টি করতে পারে। তাই প্র্যাকটিস অনুশীলনীতে পরিবর্তনের প্রস্তাব দেওয়ার সময় ট্র্যাকজুড়ে বড় ছবিটা বিবেচনা করুন।

কীভাবে আপনার পরিবর্তনগুলো গৃহীত করাবেন

আমরা অনেক কারণেই পরামর্শ গ্রহণ করি না, তবে অনেক সময়ই মানুষ এমন দারুণ সব 아이ডিয়া নিয়ে আসে, যা আমরা গ্রহণ করি!

এছাড়া স্পষ্টতা আনে এমন শব্দচয়নের পরিবর্তনের জন্য আমরা প্রায় সবসময়ই খোলা মন নিয়ে প্রস্তুত, বিশেষ করে লার্নিং অনুশীলনীতে।

আপনার পরামর্শ যাতে অনুমোদিত হওয়ার সর্বোচ্চ সুযোগ পায়, সেজন্য লেখার সময় দেখান যে আপনি নিচের বিষয়গুলো বিবেচনা করেছেন:

  • এই পরিবর্তন যে স্পষ্ট উন্নতি আনে (আদর্শভাবে কোড উদাহরণসহ, যা দেখায় আপনার পরিবর্তন কী সম্ভব করে বা কী বন্ধ করে)।
  • বিদ্যমান সলিউশনগুলোর উপর প্রভাব, আর কেন এটা মূল্যবান।
  • শেখানো বা ব্যবহৃত কনসেপ্টে কোনো পরিবর্তন আছে কি না।
  • বিষয়গুলো কেন এখন যেভাবে আছে সেভাবেই আছে, তা বোঝা। (আমাদের Chesterton's Fence পোস্টটি পড়ুন।)

আর মনে রাখবেন, মতকে মত হিসেবে আর তথ্যকে তথ্য হিসেবে প্রকাশ করবেন। এতে সাধারণত সবচেয়ে ফলপ্রসূ আলোচনা হয়।

পরামর্শ দেওয়ার জন্য সময় বের করার এবং এই ডকুমেন্টটি পড়ার জন্য আবারও ধন্যবাদ!