সিলেবাস


একটি পূর্ণাঙ্গ Exercism ট্র্যাকে দুই ধরনের অনুশীলনী থাকে: কনসেপ্ট অনুশীলনী এবং প্র্যাকটিস অনুশীলনী। এগুলো মৌলিকভাবে আলাদা, আর একে অপরকে ভালোভাবেই পরিপূরক করে।

একটি ট্র্যাকের কনসেপ্ট অনুশীলনীগুলো হলো এমন অনুশীলনী, যা নির্দিষ্ট একটি প্রোগ্রামিং ভাষার ভিত্তি গঠন করে এমন আলাদা আলাদা কনসেপ্ট শেখানোর জন্য তৈরি। এই কনসেপ্টগুলো মিলেই একটি সিলেবাস তৈরি করে।

এই ডকুমেন্টেশনে আপনার ট্র্যাকের জন্য সফলভাবে একটি সিলেবাস ডিজাইন করার কিছু নির্দেশনা ও টিপস রয়েছে।

সিলেবাসের লক্ষ্য

সিলেবাসের চূড়ান্ত লক্ষ্য হলো শিক্ষার্থীদেরকে লক্ষ্য ভাষায় ইডিওমেটিক কোড পড়তে ও লিখতে স্বাচ্ছন্দ্য অর্জনে পৌঁছে দেওয়া।

প্রতিটি কনসেপ্ট অনুশীলনী অত্যন্ত সুনির্দিষ্টভাবে কেন্দ্রীভূত। এটি ছোট কিন্তু সুস্পষ্টভাবে লক্ষ্যভিত্তিক একটি ধাপ, যা শিক্ষার্থীকে ভাষা সম্পর্কে কিছু বোঝার দিকে এগিয়ে নেয়। এটি কেবল আগে পরিচয় করানো হয়েছে এমন কনসেপ্টের উপরই দাঁড়ায়।

অনুশীলনীটি সমাধান করার মাধ্যমে শিক্ষার্থী কনসেপ্টটির সাথে পরিচিত হওয়ার প্রক্রিয়া শুরু করে। বোঝাপড়া মূলত আসে করে দেখার মাধ্যমে, ব্যাখ্যার মাধ্যমে অনেক কম। ব্যাখ্যামূলক কনটেন্ট থাকে শিক্ষার্থীকে অনুশীলনীটি সমাধান করার জন্য দরকারি ধারণাগুলোর সাথে পরিচয় করানোর জন্য (তাই ফাইলনেম হিসেবে বেছে নেওয়া হয়েছে "introduction.md")

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

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

মূল কাঠামো

অনুশীলনীগুলো একটি ট্রি আকারে সাজানো, যার শুরুতে শীর্ষে থাকে একটি সূচনামূলক অনুশীলনী। পরের অনুশীলনীগুলো এমন কনসেপ্ট শেখায়, যেগুলো আগে শেখানো কনসেপ্ট বুঝে থাকার উপর নির্ভর করে।

পোর্টিং ও ধার নেওয়া

অন্য ভাষার ট্র্যাকগুলো তাদের কনসেপ্ট অনুশীলনী কীভাবে গড়ে তুলেছে, সেটা দেখা মূল্যবান হতে পারে। অন্য ভাষার ট্র্যাকের কনসেপ্ট অনুশীলনীর উদাহরণ এখানে পাবেন।

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

সিলেবাস, অর্থাৎ কনসেপ্ট ট্রি, এই নির্দিষ্ট ভাষায় যে কনসেপ্টগুলো আছে সেগুলোই প্রতিফলিত করা উচিত।

অন্য ট্র্যাকগুলোতে আছে বলেই কনসেপ্ট যোগ করবেন না।

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

যেমন, Go-তে এনাম নেই। বদলে, Go-র কনসেপ্ট ট্রি কনস্ট্যান্ট পরিচয় করায় এবং শেখায়, অন্য ভাষায় যেখানে এনাম ব্যবহার করতেন এমন পরিস্থিতিতে কীভাবে কনস্ট্যান্ট ব্যবহার করতে হয়।

সাহায্য চাওয়া

সাহায্য চাইতে দ্বিধা করবেন না। কোড রিভিউয়ের সময় আলোচনা করার চেয়ে শুরুতে বা অনুশীলনী নিয়ে কাজ করার সময়ে জিজ্ঞাসা করা ভালো।

GitHub-এ আপনি @exercism/learning-mode টিমকে মেনশন করতে পারেন। Exercism ফোরামে Exercism Support ক্যাটাগরিতে একটি ইস্যু খুলুন।

শুরু করা

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

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

মনে রাখবেন, শেষ লক্ষ্য ইডিওমেটিক কোড লেখা হলেও, সেখানে পৌঁছানোর ধাপগুলো সবসময় ইডিওমেটিক নয়। পরিচিত কিছু ব্যবহার করলে, সেটি ওই ভাষার কোডের দারুণ উদাহরণ না হলেও, শিক্ষার্থী দ্রুত ওই ভাষার বৈশিষ্ট্যপূর্ণ কোড লেখার লক্ষ্যের দিকে এগোয়।

প্রথম অনুশীলনী তৈরি করা

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

প্রথম অনুশীলনী তৈরি করা সম্পর্কে আরও পড়ুন।

পরের অনুশীলনীগুলো

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

পরের অনুশীলনীগুলো তৈরি করা সম্পর্কে আরও পড়ুন।

তারপর কী?

সাধারণত এখান থেকেই জিনিসটা মজার হতে শুরু করে। এই জায়গায় আপনি যত কিছুই না পরিচয় করাতে পারেন। পরের কোন কনসেপ্টগুলো ধরবেন, তা কীভাবে ঠিক করবেন?

আসলে তেমন কিছু এসে যায় না। যুক্তিসঙ্গত মনে হয় এমন কোনো জায়গা থেকে শুরু করলেই চলবে।

কনসেপ্ট ট্রি বাড়ানো প্রসঙ্গে "যুক্তিসঙ্গত" বলতে আমরা কী বুঝি, তা নিয়ে আরও পড়ুন।

প্র্যাকটিস অনুশীলনী রূপান্তর করবেন না

একটি ভালো কনসেপ্ট অনুশীলনী অত্যন্ত কেন্দ্রীভূত হয় এবং আদর্শভাবে কেবল একটি কনসেপ্টই শেখায়। এটি সমাধান করার জন্য সাধারণত কেবল একটি প্রত্যাশিত পথই থাকে। এর বিপরীতে প্র্যাকটিস অনুশীলনীগুলো খোলা প্রান্তের, ঘুরে ঘুরে ঘাঁটাঘাঁটি করে শেখার উপযোগী।

একটি ভালো কনসেপ্ট অনুশীলনী সাধারণত একটি খারাপ প্র্যাকটিস অনুশীলনী, আর উল্টোটাও তাই। যেহেতু প্র্যাকটিস অনুশীলনী ও কনসেপ্ট অনুশীলনীর লক্ষ্য সম্পূর্ণ আলাদা, তাই আমরা প্র্যাকটিস অনুশীলনী নিয়ে সেটিকে কনসেপ্ট অনুশীলনীতে রূপান্তর করি না। আমরা সব কনসেপ্ট অনুশীলনীই নতুন করে লিখি, কিংবা সরল কনসেপ্ট শেখানোর উদ্দেশ্যেই বিশেষভাবে বানানো গল্পের উপর দাঁড় করাই।

আমরা জটিল বিষয় পাশ কাটাতে উৎসাহ দিই

কখনও কখনও মনে হবে যেন একটা অচল অবস্থায় পড়েছেন। কনসেপ্ট A বুঝতে দরকার কনসেপ্ট B, আর B বুঝতে দরকার A।

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

কনসেপ্ট পর্যায়ক্রমে এবং সময়ের সাথে সাথে আরও গভীরভাবে বোঝা যায়।

গল্প বাছাই করা

একটি কনসেপ্ট অনুশীলনীর সবসময় একটি গল্প থাকে।

অন্য ট্র্যাক থেকে কোনো অনুশীলনী ফর্ক করলে সেই অনুশীলনীতে আগেই একটি গল্প থাকবে। সেক্ষেত্রে আপনার আর কিছু করার নেই।

ব্যবহারযোগ্য কোনো গল্প বা ফর্ক করার মতো কোনো অনুশীলনী আছে কি না দেখতে গল্পের তালিকা দেখুন।

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

গল্পের আইডিয়া নিয়ে Exercism টিমের সাথে আলোচনা করুন। উপযুক্ত গল্প বের করা নিয়ে আমাদের অনেক অভিজ্ঞতা আছে।

গল্প তৈরি হয়ে গেলে গল্পের সাথে মানানসই করতে কোডটিতে একটু হাত দিতে হতে পারে।

কমিউনিটির অবদান

সিলেবাস নিয়ে কাজ করার মধ্যে দুটি আলাদা কিন্তু জড়িয়ে থাকা কাজ থাকে:

  1. সিলেবাস ডিজাইন: কনসেপ্ট বাছাই করা এবং সাজানো
  2. অনুশীলনী তৈরি: ডকুমেন্টেশন লেখা এবং সেই কনসেপ্টগুলো শেখানোর জন্য অনুশীলনী বানানো

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

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

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

ইস্যু তৈরি করা

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

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

ইস্যু বানানো শুরু করার সময় অনুগ্রহ করে আমাদের সাথে প্রক্রিয়াটি নিয়ে কথা বলুন, আর কীভাবে এগোবেন তা বের করতে আমরা যথাসাধ্য সাহায্য করব।

এটা মোকাবিলার আরও ভালো উপায় শিখতে শিখতে আমরা ডকুমেন্টেশন হালনাগাদ করব।