(এই পোস্ট আমার লিস্টে পাঠানো একই পোস্টের ওপর ভিত্তি করে রচিত। প্রতি সপ্তাহ এরকম পড়তে চাইলে জয়েন করুন!)
Using a Little Bit of Convenience to Save Your Programming Flow-এ আমি বলেছিলাম কীভাবে সিম্পল অ্যাবস্ট্রাকশন আপনার কোডবেসকে কাজ করার জন্য আরও মজার বানাতে পারে।
তবে খারাপ অ্যাবস্ট্রাকশন হলে কী?
আপনি প্রতিবার এপিআই রেফারেন্স খনকäten যেন বুঝতে পারেন যে মেথডটি যেন leaderboard নামে থাকা উচিত ছিল, আসলে তার নাম কী। আপনি সেটাকে রিফ্যাক্টর করতে চান, কিন্তু কোডের এক অংশ আপনাকে স্ট্রাকচার্ড ডেটা দেয় আর অন্য অংশ র দেয় র লাইন অফ টেক্সট। এবং আপনি যখন কোডটি স্পর্শ করেন, কিছু ভাঙে, এবং আপনি বাকি দিনটি ডিবাগ করতে ব্যয় করেন। কারণ আপনি position টুইক করলেন, কিন্তু score একসাথে আপডেট করলেন না।
তাই ভালো অ্যাবস্ট্রাকশন কীভাবে বানাবেন, এবং খারাপগুলো থেকে দূরে থাকবেন?
ভালো রূপক ব্যবহার করে স্পষ্ট কোড লিখুন
ভালো অ্যাবস্ট্রাকশন ভালো রূপক থেকে আসে।
একটি রূপক আপনার সিস্টেমের একটি জিনিসকে আপনার মস্তিষ্কে ইতিমধ্যে থাকা একটি কনসেপ্টের সাথে রিলেট করে বর্ণনা করে। উদাহরণস্বরূপ:
-
অনেক কমান্ড লাইন পাইপ রূপক ব্যবহার করে।
আপনি ডেটা পাইপের এক প্রান্তে দেন, আর প্রান্ত থেকে বের হয়। কল্পনা করা সহজ এবং ব্যবহার করা সহজ।
-
কাঙ্কারেন্ট প্রোগ্রামিং-এ, একটি লক ভালো রূপক।
লক কীভাবে কাজ করে সেটা না জেনেও, আপনি জানেন রিসোর্স লক থাকলে আপনি সেটা ব্যবহার করতে পারবেন না। আনলক হওয়া পর্যন্ত অপেক্ষা করতে হবে।
-
অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং-এ, মেসেজ পাসিং একটি স্পেসিফিক মানসিক ছবি তৈরি করে: একটি অবজেক্ট অন্য অবজেক্টকে একটি মেসেজ পাস করে। দ্বিতীয় অবজেক্ট মেসেজটির সাথে কিছু করতে পারে অথবা কেউ অন্যকে পাস করতে পারে।
আপনাকে ইমপ্লিমেন্টেশন সম্পর্কে কিছু জানতে হয় না আইডিয়া বুঝতে (এবং এটি প্রক্সি প্যাটার্ন বুঝতে অনেক সহজ করে দেয়)।
একটি ভালো রূপক অত্যন্ত গুরুত্বপূর্ণ। যদি আপনি একটি ভালো রূপক ভিত্তিক অ্যাবস্ট্রাকশন দেখেন, তবে আপনি খুব কম ডকুমেন্টেশন পড়বেন বা সোর্ড ডাইভ করবেন কোড বুঝতে। আপনি যত ভালো রূপক বানাবেন, আপনার সিস্টেম অন্যকে ব্যাখ্যা করা তত সহজ হবে, এবং পরে আপনার সিস্টেমের ওপর কাজ করা তত সহজ হবে।
ভালো রূপক কীভাবে বের করবেন?
একটি ভালো রূপক স্পেসিফিক, সেলফ-কন্টেইন্ড, এবং যে জিনিসটি বর্ণনা করে তার একটি জ্বলন্ত মানসিক ছবি তৈরি করে। এটা মিসঅন্ডারস্ট্যান্ডিং এর জায়গা ছাড়ে না, এবং কোডের বিহেভিয়ারের যতটা সম্ভব কাছাকাছি থাকে। কেউ যদি রূপক বুঝে কোড নিয়ে অনুমান করে, সেগুলো বৈধ হওয়া উচিত।
ভালো রূপক বের করা কঠিন। আপনি প্রায়শই কয়েকটি লিকি রূপক দিয়ে যাবেন সঠিকটি পাওয়ার আগে, এবং এটা ঠিক আছে! অভ্যাসের সাথে এটা সহজ হবে। কিন্তু এখানে একটি প্রসেস যা আমাকে সাহায্য করেছে:
কী করে একটি কোড ব্লক, কীভাবে করে সেটা না চিন্তা করুন। আপনার মনে কী ছবি আসছে? অন্য কোড কীভাবে সেটা ব্যবহার করে? যদি এক বা দু শব্দে বর্ণনা করতে হতো, কোন শব্দগুলো ব্যবহার করতেন? সেটা লিখে ফেলুন।
তারপর সেই ছবি নিয়ে চিন্তা করুন। এটা কোডটি কীভাবে কাজ করে সেটার সাথে ফিট করে কি? এমন এজ কেস আছে কি যা রূপক থেকে লিক হয়? নতুন কন্ট্রিবিউটরের কাছে রূপক ছাড়া আর কী বুঝতে হবে কোড ব্যবহার করার আগে? আপনি রূপক নিয়ে চিন্তা করলে কি আপনার মনে স্পষ্ট ছবি আসে, নাকি ধুন্দুল?
এই ইন্ডিকেটরগুলো বোঝায় আপনার রূপক আপনার কোডের সাথে যথেষ্ট ক্লোশলি মেলে না। কিন্তু আপনি যত কাছে যাবেন ভালো রূপকের, তত কম লাফ লাগবে সেখানে পৌঁছাতে।
শেষে, একটা বাক্যে ব্যবহার করুন। "এই কোড হচ্ছে (কিছু), কারণ..." কি আপনি আপনার রূপক কোনো নন-টেকনিক্যাল ব্যাকগ্রাউন্ডের লোককে বুঝাতে পারেন, এবং সে বুঝতে পারেন এটি কী করে? কেউ जित কম ব্যাকগ্রাউন্ড দিয়ে রূপক বুঝতে পারবে, আপনার রূপক ততই সহায়ক হবে।
আপনি যদি কাছে হন কিন্তু সেখানে না পৌঁছান, থিসরাসে এক নজর দিন। সামান্য শব্দগুলোর মধ্যে সূক্ষ্ম পার্থক্য OK রূপক এবং পারফেক্ট রূপকের মধ্যে পার্থক্য তৈরি করতে পারে।
রূপক এবং OOP
অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং মৌলিকভাবে রূপক ভিত্তিক। সেটাই এর শক্তি! ভালো ডিজাইনকৃত ক্লাসগুলো শুধু তাদের ইমপ্লিমেন্টেশন অন্য ক্লাস থেকে লুকিয়ে রাখে না, সেগুলো আপনাকে লুকিয়ে রাখে।
একটি দুর্দান্ত রূপক সহ, আপনাকে শুধু ক্লাসের নাম দিয়ে বুঝতে পারবেন আপনার অবজেক্টগুলো কীভাবে ব্যবহার করবেন। যদি আপনার ক্লাসগুলো ভালোভাবে নামকরণ করা থাকে, এবং সেগুলো আপনার মনে সঠিক ছবি তৈরি করে, তবে আপনাকে তাদের ইমপ্লিমেন্টেশনে ডুবতে হবে না বুঝতে।
তাই এখন, আমি চাই আপনি যে লাস্ট কোডে কাজ করেছেন সেটার ক্লাসগুলো নিয়ে চিন্তা করুন। কি কোনো ক্লাস আছে যেগুলোর স্পষ্ট রূপক আছে? কোন ক্লাসগুলোর সাথে আপনি মনে করেন আপনি কাজ করছেন, বিরুদ্ধে না? কতবার আপনি সেগুলোর ভিতরে ডুব করেন কীভাবে ব্যবহার করবেন সেটা বুঝতে?
আপনি কী খুঁজে পান সেটা শুনতে চাই। কমেন্টে জানান।
দ্রুত একটি মাহান সফ্টওয়্যার ডেভেলপার হতে হলে, আপনাকে সচেতনভাবে চিন্তা করতে হবে আপনি যে কোড লিখছেন এবং যেসব প্রসেস ফলো করছেন। এবং আমি আপনাকে সাহায্য করতে পারি।
আমার প্র্যাকটিসিং রেইলস-এর ফ্রি ৩২-পেজ স্যাম্পল ডাউনলোড করুন, এবং শিখুন কীভাবে এই আইডিয়াগুলো ছোট স্কেলে ট্রাই করতে পারেন, অভিভূত হয়ে না।