জলপান এবং তত্পরতা উভয় ক্ষেত্রেই রয়েছে এমন একটি প্রধান নীতি যা রিফ্যাক্টর এবং অনুকূলিতকরণের প্রয়োজনীয়তা পরিচালনা করে: YAGNI (আপনার দরকার নেই এটি প্রয়োজন)। দ্বিতীয় নীতিটি হ'ল প্রথমটির মূলত: "অকালীন অপটিমাইজেশন সমস্ত অশুভের মূল", সাধারণ প্রবাদটির কোডিং সমতুল্যতা "শ্রেষ্ঠত্বের শত্রু সিদ্ধি"।
আসুন প্রিপিসালগুলি গ্রহণ করি এবং সেগুলি প্রয়োগ করি। আপনার একটি ETL অ্যালগরিদম তৈরি করার প্রয়োজনীয়তা রয়েছে যা একটি নির্দিষ্ট ধরণের একটি ফাইল নেয়, তার তথ্য বের করে, তারপরে সেই তথ্যটিকে একটি ডাটাবেসে রাখে। এই সপ্তাহের জন্য আপনার লক্ষ্য (আমাদের উদ্দেশ্যে আপনি কোনও চৌকস বা এসডিএলসি দোকানে রয়েছেন তা বিবেচ্য নয়) এটি সম্পন্ন করা।
আপনি একজন স্মার্ট ফেলো, এবং আপনাকে বড় ছবিটির এক ঝলক দেওয়া হয়েছে। আপনি জানেন যে এই একমাত্র ফাইল নয় যার জন্য প্রকল্পটির একটি ইটিএল প্রয়োজন। সুতরাং, আপনি এই ETL অ্যালগরিদমকে অন্য ধরণের ফাইলে কাজ করার জন্য প্রয়োগ করার বিষয়টি বিবেচনা করেন, যার মধ্যে কেবল সামান্য পার্থক্য রয়েছে। এটি করা YAGNI লঙ্ঘন করবে। আপনার কাজটি অন্য ফাইলটির জন্য অ্যালগরিদম বিকাশ নয়; সপ্তাহের শেষে যে ফাইলটি প্রয়োজন হয় তার জন্য অ্যালগরিদম তৈরি করা। সেই লক্ষ্যটি পূরণ করতে এবং গ্রহণযোগ্যতা পরীক্ষাগুলি পাস করার জন্য আপনাকে সেই অ্যালগরিদম বিকাশ করতে হবে এবং এটিকে সঠিকভাবে কাজ করতে হবে। এটিকে অন্যান্য ফাইলের সাথে কাজ করতে আপনার অতিরিক্ত কোড "দরকার নেই"। আপনি মনে করতে পারেন যে এটি এখনই অন্তর্ভুক্ত করার জন্য আপনার সময় সাশ্রয় করবে এবং আপনি সঠিক হতে পারেন তবে আপনি ভীষণ ভুলও হতে পারেন; অন্যান্য কোডের জন্য অ্যালগরিদম আপনার কোডটি সিস্টেমের যে কোনও অংশে ব্যবহার করা যায় না এমন অঞ্চলে ব্যবহার করার প্রয়োজন হতে পারে, বা নতুন ফাইলের প্রয়োজনীয়তা আপনি যেভাবে জানেন না সেভাবে আপনার চেয়ে আলাদা হতে পারে (Agile এ, সেগুলি প্রয়োজনীয়তা এখনও অস্তিত্ব থাকতে পারে)। ইতিমধ্যে আপনি সময় নষ্ট করেছেন এবং অযথা আপনার অ্যালগরিদমের জটিলতা বাড়িয়েছেন।
এখন, এটি পরের সপ্তাহে, এবং প্রথম অ্যালগরিদমে আপনার দুর্দান্ত কাজের জন্য একটি সন্দেহজনক পুরষ্কার হিসাবে, আপনাকে দুটি নতুন ফাইল ধরণের জন্য অ্যালগরিদম তৈরির কাজ দেওয়া হয়েছে। আপনার ফাইলের অ্যালগরিদম আরও ফাইলের সাথে কাজ করতে এখন আপনার অতিরিক্ত কোড দরকার। আপনি কোনও টেম্পলেট পদ্ধতি প্যাটার্ন ব্যবহার করে আপনার বিদ্যমান অ্যালগরিদম প্রসারিত করতে পারেন যা ফাইল-নির্দিষ্ট স্বতন্ত্র পদক্ষেপের সাথে একটি বেসিক প্যাটার্ন ব্যবহার করবে বা আপনি কেবল আপনার বিদ্যমান অ্যালগরিদম থেকে একটি সাধারণ ইন্টারফেস পেতে পারেন, ইন্টারফেস অনুসরণ করে এমন দুটি নতুন তৈরি করতে পারেন এবং এগুলিকে প্লাগ ইন করতে পারেন কোন অ্যালগরিদম ব্যবহার করতে হবে তা বেছে নিতে পারে object
বিকাশকালে, আপনি জানেন যে আপনার একটি সিস্টেম দরকার যা প্রতি সেকেন্ডে 10KB কাঁচা ডেটা প্রক্রিয়া করতে সক্ষম হবে। আপনি একটি লোড পরীক্ষা করেন এবং আপনার প্রাথমিক খসড়া অ্যালগরিদম 8KB / s পরিচালনা করে। আচ্ছা, এটি এএটি পাস করবে না। আপনি একবার দেখুন এবং দেখুন যে আপনার অ্যালগোরিদমে কিছু ও (আমার )শ্বর) - কমপ্লেক্সিটি লুপ কাঠামো রয়েছে; আপনি এটিকে প্রবাহিত করুন এবং 12 কেবি / গুলি পান। "খুব ভাল", আপনি ভাবেন, "তবে কোডটিতে আমার যদি এই দুর্বলতা থাকে তবে আমি আর কী শেভ করতে পারি?"। বাজ আপনি সবেমাত্র "অকাল অপ্টিমাইজেশন" নিয়ম লঙ্ঘন করেছেন। আপনার কোড কাজ করে, এবং সমস্ত প্রয়োজনীয়তা পাস করে। 15KB / s প্রয়োজনের জন্য প্রয়োজনীয়তা আপডেট না হওয়া পর্যন্ত আপনি "সম্পন্ন" হয়ে গেছেন। যদি এবং যখন এটি হয়, তখন আপনি কোডটি ব্যাক আপ করে টানুন এবং উন্নত করার জন্য জিনিসগুলি সন্ধান করুন।
এগিল বা simpleতিহ্যবাহী এসডিএলসি-তে বিকাশের সময় এই সহজ প্রক্রিয়াটি অনুসরণ করুন: "প্রথম পাসে, এটি কাজ করুন the দ্বিতীয় পাসে, এটি সুন্দর করুন the তৃতীয় পাসে, এটি সলিড করুন" " এর অর্থ হ'ল, আপনি যখন প্রথমে কোডের একটি লাইন তৈরি করেন, সেই কোডটি সঠিকভাবে এবং কাজ-ত্রুটিমুক্ত করে তুলুন তবে এই কোডের মধ্যে ডিজাইনের বিধিগুলিতে খুব বেশি মনোযোগ দেবেন না, কারণ এখনই আপনারা সবাই জানেন know এই অঞ্চলটিকে আর কখনও স্পর্শ করব না। পরের বার আপনি সেই কোডের লাইনটি পরিদর্শন করলেন, আপনি কেবল নিজেকে ভুল প্রমাণ করেছেন; এটি এখন আর সিস্টেমের এক-অফ টুকরা নয়। এটি পাঠযোগ্যতা, কোডের সংক্ষিপ্ততা এবং / বা DRY নীতিগুলির জন্য রিফ্যাক্টর (আপনি পাঁচবার কিছু করার জন্য কিছু কোড কপি-পেস্ট করে থাকতে পারেন; রিফ্যাক্টর যা একটি লুপ এবং / অথবা কোনও পদ্ধতির কল)। তৃতীয়বারের মতো আপনি কোডের এই লাইনে বা এর আশেপাশে কাজ করছেন,
O(my God)-complexity
আর কিছু না হলে, আমাকে হাসাহাসি করলেন!