শক্তিশালী কোড বনাম ওভাররিঞ্জাইনারিং রচনা


33

আপনি কীভাবে বুঝবেন যে আপনি অত্যধিক ওষুধ না দিয়েই সবচেয়ে শক্তিশালী কোডটি লিখছেন?

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


2
এটি Agda2 এ কোড করুন
এসকে-যুক্তি

একটি দৃ concrete় উদাহরণ আপনার পয়েন্টটি তৈরিতে ব্যাপকভাবে সহায়তা করবে। :)
জোও পোর্তেলা

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

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

1
এখানে এই নিবন্ধটি সম্পর্কে আলোচনা করা হয়েছে: কোড-tag.com/2017/04/02/…
সান

উত্তর:


39

আপনি কীভাবে বুঝবেন যে আপনি অত্যধিক ওষুধ না দিয়েই সবচেয়ে শক্তিশালী কোডটি লিখছেন?

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

আমি বিভিন্ন নীতি অনুসরণ করি: প্রথম এবং সর্বাগ্রে YAGNI (এখনও) এবং KISS , সুতরাং আমি অসম্পূর্ণ কোড লিখি না। এটি কার্যকরভাবে ওভারেঞ্জাইনারিং প্রতিরোধ করে। এক্সটেনশনগুলির প্রয়োজন হলে আমি অ্যাপ্লিকেশনটি রিফ্যাক্ট করি। আধুনিক রিফ্যাক্টরিং সরঞ্জামগুলি আপনাকে খুব সহজেই ইন্টারফেসগুলি তৈরি করতে দেয় এবং পরে যখন আপনার প্রয়োজন হয় তখন প্রয়োগগুলি বিনিময় করে।

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

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

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

সরলতা মজবুত, জটিলতা ভঙ্গুর।

জটিলতা হত্যা।


2
কারণ এটিতে প্রচুর ক্লাস, কারখানা এবং বিমূর্ততা নেই। এটি একটি প্যারাডোক্স, তবে কিছু লোক সেই জিনিস পছন্দ করে। কেন জানি না।
কোডার

5
এটা পারস্য!!!
টম স্কুয়ারস

4
যে লোকেরা বিশ বছর ধরে এটি করে না তারা কেবল জটিলতা আপনাকে মেরে ফেলতে পারে না। তারা মনে করে তারা এতো স্মার্ট। এরা বোবা, স্মার্ট নয়। সেই জটিলতা আপনাকে মরে যেতে চলেছে।
পিটারআলেন ওয়েলব

1
দৃust়তা ভবিষ্যতের প্রুফিং সম্পর্কে নয় - এটি অবৈধ ইনপুট বা চাপযুক্ত পরিবেশের সাথে কাজ চালিয়ে যাওয়া সম্পর্কে - কোড কমপ্লিট পি ৪64৪।
ডিজেক্লেওয়ার্থ

5
যতক্ষণ না প্রশ্নকর্তা আমার বোঝার থেকে আলাদা বোঝায় 'শক্তিশালী' ব্যবহার করছেন, আপনি অন্য প্রশ্নের উত্তর দিচ্ছেন। তিনি "ভবিষ্যতের প্রয়োজনীয়তার জন্য আমাকে কি কোডিং করা উচিত" জিজ্ঞাসা করছেন না "তিনি জিজ্ঞাসা করছেন" আমার কোন অস্বাভাবিক ইনপুট কেসগুলি পরিচালনা করা উচিত "। YAGNI, KISS এবং SOLID এর কোনওটিই প্রাসঙ্গিক নয়। আপনার কি এক মিলিয়ন ব্যবহারকারী একই সাথে লগ ইন করার চেষ্টা করার অনুমতি দেওয়ার দরকার আছে? লগইন নামটি ব্যাকস্ল্যাশ দিয়ে শুরু হলে কী হবে? YAGNI এই প্রশ্নের কোনও উত্তর দেয় না।
ডিজেক্লেওয়ার্থ

8

আমি মনোযোগ নিবদ্ধ করে, ভারসাম্য বজায় রাখার চেষ্টা করি

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

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


বিদ্যমান ব্যবহারের ক্ষেত্রে সম্ভাব্য সকল মৃত্যুদণ্ডের পথ পরিচালনা করার
কোডইগি

5

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

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


4

1) প্রয়োজনীয়তা পান।

2) প্রয়োজনীয়তা পূরণের জন্য ন্যূনতম কোড লিখুন। যদি কিছু অস্পষ্ট হয় তবে একটি শিক্ষিত অনুমান করুন। যদি এটি সুপার অস্পষ্ট হয় তবে 1 এ ফিরে যান।

3) পরীক্ষায় প্রেরণ করুন।

৪) পরীক্ষকগণ যদি এটির পক্ষে ভাল বলে থাকেন তবে অনুমোদনের নথি করুন। যদি কিছু বন্ধ থাকে তবে 1 এ ফিরে যান।

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


1
পরীক্ষাগুলি পাস করার বিষয়ে ফোকাসের জন্য, পরীক্ষাগুলির পূর্বাভাস দেওয়ার জন্য নয়, তবে আমার মতো অনেক বিকাশকারী দৃ strong় ব্যবসায়িক বিশ্লেষকের অভাবে উভয়ই প্রত্যাশা করছেন।
ম্যাপেল_শ্যাফ্ট

@ ম্যাপেল_শ্যাফ্ট - খুব সত্য। মুল বক্তব্যটি হ'ল এই সমস্যাগুলি অন্য কারও অযোগ্যতার কারণে দেখা দেয়। অন্য কারও কাজের উপরে চাপ দেওয়া হ'ল আগুনের পথ। যদি আমার সংস্থার অ্যাকাউন্টটি আমাকে মাসের জন্য গ্রহণযোগ্য হতে পারে তবে আমি যদি তা খুব ভাল না ঘটাতে পারি তবে আমি নিজেকে হতাশ করব না। সংজ্ঞা প্রয়োজনীয়তার মধ্যে সাধারণত আপনি প্রতিদিন কী করেন তা বর্ণনা করে যাতে এটি স্বয়ংক্রিয় হতে পারে। কর্মীদের মধ্যে কেউ যদি এটি করতে না পারে তবে ভাল ... সংস্থায় সমস্যা হতে পারে।
মরগান হের্লোকার

3

প্রথমত, যতটা সম্ভব তথ্যকে নরমাল করুন (রিডানড্যান্ট নয়)। যদি ডেটা পুরোপুরি স্বাভাবিক করা হয় তবে ডেটাতে কোনও একক আপডেট এটিকে বেমানান করতে পারে না।

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

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

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

যেমনটি আমি বলেছি, আপনার যদি অপ্রয়োজনীয়তা অবশ্যই থাকে (এবং আপনার অবশ্যই সম্ভাবনা খুব ভাল থাকে) তবে এটি ক) সহ্য করা ভাল, এবং খ) এটি মেরামত করা ভাল। আপনি যদি কেবলমাত্র বার্তাগুলি, বিজ্ঞপ্তিগুলি, ট্রিগারগুলি ইত্যাদির মাধ্যমে অসঙ্গতি রোধ করার চেষ্টা করেন তবে আপনি এটিকে দৃ to় করতে খুব শক্ত হয়ে উঠবেন।


3
  • পুনঃব্যবহারের জন্য লিখুন।
  • পরীক্ষা লিখুন। তুচ্ছ, অযৌক্তিক, এমন পরিস্থিতিতে কীভাবে এটি পরিচালনা করে তা দেখার জন্য কিছু অযৌক্তিক জটিল ones পরীক্ষাগুলি আপনাকে ইন্টারফেসের ফর্ম নির্ধারণে সহায়তা করবে।
  • হার্ড ব্যর্থ হওয়ার জন্য প্রোগ্রামটি লিখুন (যেমন দৃ .়তা)। আমার কোডটিতে একটি টন পুনরায় ব্যবহার এবং আমি এক টন কেস পরীক্ষা করি - প্রকৃত বাস্তবায়ন (লাইন গণনার উপর ভিত্তি করে) চেয়ে চেক / পরিচালনা করার ক্ষেত্রে আরও ত্রুটি রয়েছে।
  • পুনরায় ব্যবহার করে।
  • ত্রুটিযুক্ত জিনিসগুলি তাত্ক্ষণিকভাবে ঠিক করুন।
  • শিখুন এবং অভিজ্ঞতা থেকে বিল্ড।

ত্রুটিগুলি পথটিতে উপস্থিত হবে , তবে সেগুলি (সৌভাগ্যক্রমে) স্থানীয়করণ হবে এবং তারা (বেশিরভাগ ক্ষেত্রে) পরীক্ষার খুব তাড়াতাড়ি প্রদর্শিত হবে। পুনঃব্যবহারের অন্য সুবিধাটি হ'ল ক্লায়েন্ট / কলার প্ররোচনা দ্বারা আনা যা ব্যবহার করে ত্রুটি পরীক্ষা করে / ভারাটিকে সর্বাধিক সংরক্ষণ করতে পারে।

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


2

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


2

দৃust়তা: অবৈধ ইনপুট বা চাপযুক্ত পরিবেশগত অবস্থার উপস্থিতিতে কোনও সিস্টেম যে ডিগ্রিতে কাজ করে চলেছে। (কোড সম্পূর্ণ 2, p464)

এখানে গুরুত্বপূর্ণ প্রশ্নটি আপনার কাছে দৃ rob়তা কতটা গুরুত্বপূর্ণ তা জিজ্ঞাসা করা। আপনি যদি ফেসবুক হন তবে সত্যই গুরুত্বপূর্ণ যে কেউ যখন ইনপুটটিতে বিশেষ অক্ষর রাখে তখন আপনার ওয়েবসাইটটি চলতে থাকবে এবং যখন একসাথে ১০০ মিলিয়ন ব্যবহারকারী লগইন হয় তখন আপনার সার্ভারটি চালু থাকে। আপনি যদি কোনও সাধারণ ক্রিয়াকলাপ সম্পাদন করতে কোনও স্ক্রিপ্ট লিখে থাকেন তবে আপনার খুব বেশি যত্ন নেই। এর মাঝে অনেকগুলি স্তর রয়েছে। আপনার বিকাশকারী যে গুরুত্বপূর্ণ দক্ষতা শিখতে পারেন তার মধ্যে আপনার কতটা দৃust়তা প্রয়োজন তা বিচার করে নেওয়া।

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

সুতরাং অস্বাভাবিক ত্রুটির শর্তগুলির জন্য চেকগুলি করার পক্ষে ভুল করা ভাল। তবে একটি ভারসাম্য আছে। এই ভারসাম্য বিবেচনার জন্য কয়েকটি বিষয়:

  • এই ত্রুটি কতবার ঘটতে পারে?
  • এই ত্রুটিটি ঘটতে ব্যয় কী?
  • এটি কি অভ্যন্তরীণ বা বাহ্যিক ব্যবহারের জন্য?

ভুলে যাবেন না যে লোকেরা আপনার প্রোগ্রামটিকে অপ্রত্যাশিত উপায়ে ব্যবহার করতে - এবং করবে - করতে পারে। পূর্বাভাসযোগ্য কিছু ঘটে যখন তারা করে তবে এটি আরও ভাল।

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

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