Uploaded avatar of iHiD

এখন ডিগ ডিপার করার সময়!

@iHiD
প্রায় 4 বছর আগে
ভিডিও

Exercism-এ একটি অনুশীলনী সমাধান করা কেবল প্রথম ধাপ। আসল শেখাটা আসে এর পরেই!

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

ভূমিকা

আমাদের অনুশীলনীগুলোর সমাধান অবিশ্বাস্য রকমের বৈচিত্র্যময়। বেশিরভাগ ট্র্যাকে সবচেয়ে মৌলিক “প্রকৃত” অনুশীলনীটি হলো TwoFer। একটি সাধারণ সমাধান দেখতে এমন হয় (এটি Ruby, তবে বেশিরভাগ ভাষার ক্ষেত্রেই একই রকম):

module TwoFer
  def self.two_fer(name='you')
    "One for #{name}, one for me."
  end
end

তবে টেস্ট পাস করা সাম্প্রতিকতম ৫০০টি সমাধানের মধ্যে ৩৫০টিরও বেশি ছিল অনন্য 😲 আর হোয়াইটস্পেস কিংবা ভ্যারিয়েবলের নামের মতো জিনিসগুলো নরমালাইজ করলেও অর্ধেকের বেশি আসলেই অনন্য সমাধান থেকে যাবে।

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

তবে! অনুশীলনীগুলো ডিজাইন করা আর সেগুলোর মধ্য দিয়ে কয়েক লক্ষ মানুষকে মেন্টরিং করার সুবাদে, মানুষ কোন কোন পদ্ধতিতে এগোয় সে সম্পর্কে আমাদের টিমের বেশ ভালো ধারণা আছে। তাই একটি অনুশীলনী যেভাবে সমাধান করা যায় তার নানা ইডিয়ম্যাটিক (বা অনৈডিয়ম্যাটিক, কিন্তু মজার) ধরন তুলে ধরতে আমরা নতুন Dig Deeper ট্যাব যোগ করেছি।

একটি উদাহরণ

চলুন একটি উদাহরণ নিয়ে দেখি বিষয়টা বাস্তবে কেমন কাজ করে। C#-এ একটি স্ট্রিং উল্টো করার নানা উপায় আছে।

আপনি Array.Reverse() মেথড ব্যবহার করতে পারেন:

var chars = input.ToCharArray();
Array.Reverse(chars);
return new string(chars);

অথবা LINQ-ভিত্তিক আরও ছোট একটি পদ্ধতি ব্যবহার করা যায়:

return new string(input.Reverse().ToArray());

অথবা একটি StringBuilder ব্যবহার করা যায়:

var chars = new StringBuilder();
for (var i = input.Length - 1; i >= 0; i--)
{
    chars.Append(input[i]);
}
return chars.ToString();

আরও কম ইডিয়ম্যাটিক (কিন্তু বেশি পারফরম্যান্সসক্ষম!) পথে গিয়ে Span<T> ব্যবহার করা যায়:

Span<char> chars = stackalloc[input.Length];
for (var i = 0; i < input.Length; i++)
{
    chars[input.Length - 1 - i] = input[i];
}
return new string(chars);

আমরা এদের প্রত্যেকটিকে একটি Approach বলি, আর প্রত্যেকটির ব্যাখ্যা দেওয়া আলাদা একটি আর্টিকেল আছে। এই অনুশীলনীর Dig Deeper পেজ সেগুলোকে একত্র করে, আর সঙ্গে থাকে পারফরম্যান্স নিয়ে একটি আর্টিকেল, যেখানে ট্রেডঅফগুলো ঘেঁটে দেখা হয়েছে।

👉🏾 দেখে নিন (আপনি যদি এখনো অনুশীলনীটি সমাধান না করে থাকেন, তাহলে ইনকগনিটোতে যেতে হবে)

তবে আরও অনেক কিছু আছে!

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

যুক্ত হোন

আগামী কয়েক সপ্তাহে সাইটের নানা অনুশীলনীতে Dig Deeper ট্যাবটি দেখা যেতে শুরু করবে।

আপনি যদি একটি Approach, একটি অনুশীলনীর আর্টিকেল দিয়ে অবদান রাখতে চান, অথবা আপনার ভিডিও সম্পর্কে আমাদের জানাতে চান যাতে আমরা সেগুলো যোগ করতে পারি, তাহলে jonathan@exercism.org ঠিকানায় যোগাযোগ করুন, তিনি আপনাকে শুরু করতে সাহায্য করবেন।

আর শেষে, আপনার মত জানান আর আপনার আইডিয়া ও ভাবনা ফোরাম পোস্টে পোস্ট করুন!

30 অক্টোবর 2022 · কাজে লেগেছে?