কীভাবে "আপনার প্রয়োজন হবে না" এবং "এখনকার চেয়ে এখনকার চেয়ে ভাল" একসাথে খেলবেন?


17

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

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

এই দুটি নিদর্শন বর্গক্ষেত্র কিভাবে?

তারা দুর্দান্ত খেলতে পারে তা নিশ্চিত করতে আপনি কোন অনুশীলনগুলি ব্যবহার করেন?

আপনি কীভাবে একসাথে বিভ্রান্তি তৈরি না করে তাদের শেখাবেন?


2
ভেবে কাজ কর. কিন্তু যে দ্বিধা করে সে হারিয়ে যায়।
mmyers

উত্তর:


26

আমি অনেক এগিয়ে চিন্তা করার চেষ্টা করি, তবে সাধারণত কোডে হয় না। আমি বুদ্ধি বোধ করি এবং নোটগুলি গ্রহণ করি, আশা করি জিনিসগুলি যথেষ্ট পরিমাণে व्यवस्थित করে তুলছি যাতে আমি তাদের কাছে আবার উল্লেখ করতে পারি।

আমি কোডের সাথে "আপনার প্রয়োজনের দরকার নেই" দিকে আরও ঝুঁকছি তবে ডিজাইনের সাথে "এখনকার চেয়ে এখন ভাল"।

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

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


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

9

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

উভয় ক্ষেত্রেই, আপনি YAGNI এর সাথে কোনও কিছুই হারাতে পারবেন না

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

উদাহরণ

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

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

জিনিসগুলি করার ব্যবহারিক উপায় হ'ল তিনি কীভাবে তা করেছিলেন। তিনি পিএইচপি এবং মাইএসকিউএল দিয়ে শুরু করেছিলেন, এবং ব্যবসার মূল্যের উপর ভিত্তি করে পুনরায় নকশাকৃত এবং পুনর্লিখন করেছিলেন , লক্ষ লক্ষ ব্যবহারকারীকে স্কেলিং ছিল অসাধারণ ব্যবসায়ের মূল্য, তবে দিনে নয় 0. দিন 0 কেবল কিছু চালু করা ছিল অসাধারণ ব্যবসায়ের মূল্য।

তিনি পুনরায় নকশা এবং নতুন করে লেখার পরিকল্পনা করেছিলেন। যা রান্নাঘরের সিঙ্কের পরিকল্পনার চেয়ে আলাদা মানসিকতা এবং বাস্তবে কোনওটিই পুরোপুরি কার্যকর বা বিকাশ বা বিতরণ করে না।

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


2
যদি আপনার নকশাটি খারাপ হয় (উদাহরণস্বরূপ জটিল নয়) আপনি YAGNI এর সাথে অনেক কিছু হারাতে পারেন।
এরিকশাফার

1
@ এরিকশাফার - এটি যদি লক্ষ্যগুলি পূরণ করে এবং ব্যবসায়ের মূল্য প্রদান করে এবং আপনার অনেক বেশি সময় ব্যয় হয় না, আপনি আপনার যাদুকরী অসীম নমনীয় সিস্টেমটি কখনও সরবরাহ না করার চেয়ে কম হারিয়ে ফেলেন যা কখনই সম্পূর্ণ হবে না এবং প্রেরণ হবে না not এবং যদি এটি হয় তবে এটি একটি কনফিগারেশন দুঃস্বপ্ন।

6

Python- র জেন পথ বলেছেন:

এখন আগের চেয়ে ভাল is যদিও এখনই প্রায়শই এখনকার চেয়ে ভাল হয় না।

ধারণাটি হ'ল এটি এমন নয় যে আপনি এখন যে কোনও কিছু সংজ্ঞা দিতে পারেন যা আপনার উচিত। আপনার এখন এটি প্রয়োজন?

  • হ্যাঁ: এখনই কর!
  • না: করিস না! প্রয়োজনের জন্য অপেক্ষা করুন! YAGNI!

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

সুতরাং, আপনি যতক্ষণ না ইয়াগনি, তারপরে এখনই করুন। অপেক্ষা করবেন না!


3

আমি মনে করি না তারা মোটেও এক সাথে খেলবে। আমি মনে করি আপনি হয় একদিকে ঝুঁকছেন বা অন্যভাবে। এবং আমি YAGNI এর দিকে ঝুঁকছি।

তবে এটির মূল্যের জন্য, আমি দ্বিতীয় প্রস্তাবটির সাথে একমত নই, "" এখনকার চেয়ে এখনকার চেয়ে ভাল "" যদি কোনও প্রয়োজনীয়তা গুরুত্বপূর্ণ হয় তবে এটি করাতে হবে। সুতরাং "কখনই" কোনও সম্ভাবনা নয়। যদি এটি গুরুত্বপূর্ণ না হয় তবে "এখন" এর চেয়ে ভাল না - "কখনই" ভাল নয়।

শুধু আমার দুই সেন্ট।


এবং এখন মিলিয়ন ডলার প্রশ্ন: "গুরুত্বপূর্ণ" এর অর্থ কী?
অ্যারোনআউট

1
"গুরুত্বপূর্ণ" অর্থ এটি একটি গ্রহণযোগ্যতা পরীক্ষা।
kindall

গুরুত্বপূর্ণ মানে ক্লায়েন্ট হোলার্স যখন সেখানে থাকে না।
পল নাথান

2
গুরুত্বপূর্ণ অর্থ ক্লায়েন্ট সেখানে না থাকলে অর্থ প্রদান করে না।
ক্রিস্টোফার মহান 17

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

2

এই দুটি নিদর্শন বর্গক্ষেত্র কিভাবে?

তারা অরথোগোনাল এবং একে অপরের সাথে কিছুই করার নেই।

তারা দুর্দান্ত খেলতে পারে তা নিশ্চিত করতে আপনি কোন অনুশীলনগুলি ব্যবহার করেন?

উম। ওরা দুজনেই কি? এর বেশি আর কী থাকতে পারে?

আপনি কীভাবে একসাথে বিভ্রান্তি তৈরি না করে তাদের শেখাবেন?

YAGNI ব্যবহারকারীদের দ্বারা দেখা বৈশিষ্ট্যগুলি বর্ণনা করে। তোমার অভিনব দরকার নেই

প্রক্রিয়া বর্ণনা না চেয়ে এখন ভাল। পরীক্ষা এখন লিখুন। এখনই কোড লিখুন। ডিজাইনের বিকল্পগুলি বিবেচনা করার সময়গুলি দূরে রাখবেন না। কিছু গড়ার কথা বলার চেয়ে কিছু তৈরি করুন।


2

যদি "কখনই নয়" এর অর্থ "এখনই নয়", তবে আপনার নকশাটি ত্রুটিযুক্ত।

আপনি যে স্থানীয় সিদ্ধান্ত নেন তা অন্য সিস্টেমের জন্য স্বচ্ছ হওয়া উচিত।
উদাহরণস্বরূপ, যদি আপনার কোনও উপাদান থাকে CookieSource, CookieFactoryতবে CookieRecipesএটির Cookiesজন্য আপনার কিছু ইনপুট পরামিতিগুলির উপর ভিত্তি করে এটিটিকে জানে সেটি পরিবর্তনের CookieSourceপ্রয়োজন , তারপরে কীভাবে CookieFactoryপ্রয়োগ করা CookieRecipesহয় এবং কীভাবে উপস্থাপন করা হয় তার উপর নির্ভর করতে হবে না । প্রকৃতপক্ষে
যদি এটি CookieFactoryহয় তবে তা Bakeryযে কোনও বিষয় বিবেচনা Recipeকরে নিতে Pastryপারে। এবং যদি না আপনার সেই কার্যকারিতা প্রয়োজন হয় তবে এটিকে কার্যকর করার দরকার নেই। আপনি কেন পরে এটি যুক্ত করতে পারবেন না তা বিশ্বে কোনও কারণ নেই CookieSourceএবং এটি যে পরিষেবাগুলি ব্যবহার করে সেগুলির মধ্যে কোনও স্পষ্ট বিমূর্ততা বাধা না থাকলে ব্যতীত ।

সফ্টওয়্যার তৈরি করার সময়, প্রয়োজন অনুযায়ী কার্যকারিতা যুক্ত করুন এবং আপনার যে কোনও সিদ্ধান্তে নিজেকে লক না করার চেষ্টা করুন। পরিবর্তে সিদ্ধান্তটিকে একটি উপযুক্ত বিমূর্তিতে লক করুন


1

আমি খুঁজে পাওয়া সবচেয়ে সহজ সমাধানটি হ'ল সামনের কোডটি লেখার সময় পরিবর্তনগুলি প্রত্যাশা করা। যখন আমি কোনও ফাংশনে কিছুটা বুল করছি তখন আমি সাধারণত যত তাড়াতাড়ি সম্ভব এটি পতাকা / এনামগুলিতে পরিবর্তন করি যাতে এটি ক) আরও পঠনযোগ্য এবং খ) প্রসারিত করা সহজ। অনুরূপ, যদি আমি লক্ষ্য করি যে আমি প্রায় একগুচ্ছ প্যারামিটারগুলি পাস করছি যেখানে এটির মতো গন্ধ লাগে তবে আমার আরও একটি প্রয়োজন হবে, আমি সাধারণত একটি বিশেষ কাঠামো তৈরি করি। আশাবাদী এটি হ'ল ইয়াজিএনআই, তবে আপনি যদি কোনও মুহুর্তে এটি করেন তবে এটি সরাসরি সমস্ত ব্যবহারকারীকে ভয়াবহভাবে ভেঙে ফেলবে না এবং "গ্রান্ট ওয়ার্ক" ইতিমধ্যে সম্পন্ন হয়েছে। প্রায়শই যথেষ্ট, আপনি কেবল কিছু মন্তব্য যুক্ত করতে পারেন যেমন / * ভবিষ্যতের সংযোজনগুলি এখানে যান * / বা তাই এটি স্পষ্ট যে এটি এখনও কার্যকর হয়নি তবে এটি যুক্ত করার জায়গা এখানে। এটি সাধারণত সবচেয়ে বেশি সহায়তা করে, কারণ আমি পরে ইন্টারফেস রিফ্যাক্টরিংকে সর্বাধিক সময়সাপেক্ষ বলে মনে করেছি।


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

এই পদ্ধতির ভাল জিনিস হ'ল পরিবর্তনগুলি কম বেদনাদায়ক হয়; এখনও অনেক কাজ জড়িত। স্থানান্তরিত মডেলগুলির সাথে আপনার অর্থ কী তা আমি নিশ্চিত নই - আমি অবশ্যই YAGNI পাশে আছি তবে আমি সবচেয়ে খারাপের জন্য প্রস্তুত করছি :)
আন্টেরু

0

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

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

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

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

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.