আপনার পরিপূর্ণতাবাদের জন্য আপনি কোথায় রেখা আঁকেন? [বন্ধ]


37

প্রোগ্রামিং করার সময় পারফেকশনিজম ভাল এবং খারাপ হতে পারে।

  • আপনি যখন সমস্যার সমাধান করছেন তখন কখন এবং কোথায় রেখাটি আঁকবেন?
  • যখন আপনি কোনও সমাধানকে অতিমাত্রায় কাটানো, খুব সাধারণ বা সহজভাবে ভবিষ্যত ভাবা হয় ঠিক করেন?

প্রশ্নটি অস্পষ্ট থাকলে মন্তব্য করুন।


7
ভাল প্রশ্ন - আমি সর্বদা এটির সাথে লড়াই করি।
কেউ 12

উত্তর:


40

KISS এবং YAGNI , বিশেষত YAGNI।

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

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

মন্তব্যের জবাবে:

  • কেআইএসএস = এটিকে সাধারণ রাখুন, বোকা = আপনি মুরন ভান করুন এবং ডিজাইনটি বুঝতে হবে
  • ইয়াগনি = আপনার দরকার নেই = ভান করা বন্ধ করুন আপনি নিজের নকশায় ভবিষ্যতের ভবিষ্যদ্বাণী করতে পারবেন

5
+1 - আমাদের জানা সমস্যাগুলি সমাধান করা যথেষ্ট কঠিন, এছাড়াও আমাদের মনে হতে পারে যে সমস্যাগুলি সমাধান করার চেষ্টা না করে।
জন হপকিন্স

6
আমি এটি পছন্দ করি তবে সংক্ষিপ্ত শব্দগুলির একটি পরিষ্কার সংজ্ঞা সহায়ক হবে। YAGNIআজ অবধি শুনিনি ।
ফিলিপ রেগান

ফিলিপের পক্ষে +1 যা আজ কিছু শিখবে! KISS এর জন্যও +1।

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

7

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


6

যখন সমাধানটি সহজভাবে শেষ হয় তখন প্রাকৃতিকভাবে আপগ্রেড / সংশোধন করা হবে যখন থেকে সহজ সমাধানটি শেষ হবে তখন থেকে সম্ভাব্য নেতিবাচক প্রভাবের তুলনায় এটি অতিরিক্ত সময় গ্রহণের সম্ভাব্য নেতিবাচক প্রভাবের তুলনায় বেশি পরিমাণে সমাধান সমাধান করা হয় solution

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

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


6

আমি খুব পারফেকশনিস্ট থাকতাম (ফ্রেমওয়ার্ক তৈরির জন্য সময় ব্যয় করতাম, সমাধান নয়)।

তবে যে জিনিসটি আমাকে সত্যই আমার উত্পাদন ত্বরান্বিত করতে সাহায্য করেছিল তা হ'ল বিডিডি / টিডিডি নীতিগুলি সহ নীতিগতভাবে বাইরের (যা আমি আলিঙ্গনে শেখার পক্ষে বিশেষত কঠিন বলে মনে করেছি) অনুসরণ করে।

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

সুতরাং, কোডের সমস্ত লাইন একটি বাস্তব ব্যবহারকারীর প্রয়োজন থেকে উদ্ভূত।

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


5

আমি লক্ষ্য করেছি অভিজ্ঞতার দ্বারা আমি এতে আরও ভাল হয়ে উঠছি।

যখন আমি (খুব) ছোট ছিলাম আমি সর্বদা সবচেয়ে নিখুঁত সমাধানের জন্য যাই, কোনও আপস করি না। বাজেট এবং সময়কে মাথায় রেখে আমি এখন আরও ভাল।


1
+1 অভিজ্ঞতার জন্য আপনাকে আরও আপোস করুন।
আমির রেজায়ে

4

সময়সীমা এই লাইনটি বেশ স্পষ্ট করে তোলে।


1
ভাল কথা, তবে একটি খারাপ সমাধানের জন্য ভবিষ্যতে ঠিক করতে আরও সময় প্রয়োজন হতে পারে।
আমির রেজায়ে

আমি মনে করি আপনাকে "যথেষ্ট ভাল" সফ্টওয়্যার কী তা সম্পর্কে একটি রায় দিতে হবে। রেখাটি নির্দিষ্টকরণ এবং আপনার সাধারণ জ্ঞান দ্বারা সংজ্ঞায়িত করা উচিত।
কেউ কেউ

3

আমার বস আসলে :)

আমি অবশ্যই স্বীকার করছি যে আমি আরও ভাল হয়ে যাচ্ছি, তবে আমি এখনও আপস করার জন্য খুব বেশি নই। কৃতজ্ঞতা, আমি আমাকে বসানোর জন্য আমার বসকে পেয়েছি;)

আমি অত্যধিক ওষুধের তুলনায় আরেকটি সমস্যা উত্থাপন করতে চাই, কারণ ওভাররিঞ্জাইনারিং সনাক্ত করা বেশ সহজ।

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

  • এমন উপায় যেগুলি ব্যবহারের যোগ্যতা উন্নত করবে এবং বাগ পাওয়ার সম্ভাবনা হ্রাস করবে
  • নির্ভরযোগ্যতা হ্রাস করতে পারে এমন উপায়গুলি, সংকলন-সময়কে উন্নত করে

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

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


আমি আপনার সাথে কড়া নাড়ছি। আমি বিশ্বাস করি প্রোগ্রামিং এমন এক ধরনের শিল্পের মতো যেখানে কোনও পরিপূর্ণতা নেই।
আমির রেজায়ে

2

পেশাগত এবং ব্যক্তিগতভাবে উভয়ই, আমি নিজের কাছে যে মানটি প্রয়োগ করার চেষ্টা করি তা হ'ল:

জিতে সন্তুষ্ট থাকুন।

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

নিখুঁততা আলোর গতির মতো: আপনি কখনই সেখানে পাবেন না, তবে আপনি যে শক্তি প্রয়োগ করে ব্যয় করতে পারেন তার কোনও সীমা নেই।

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


0

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


পারফেকশনিজম বহু বছরের অভিজ্ঞতার পরেও সম্ভব নয়; এটি হ'ল যদি আপনি কখনই আসলে কিছু সরবরাহ করতে চান। সর্বাধিক মূল্যবান জিনিস যা অভিজ্ঞতা শেখায় তা হ'ল "যথেষ্ট ভাল" স্বীকৃতি দেওয়া।
জেফ ন্যাচট

0

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

আমি (বা অন্য কেউ) আবার এটি বের করতে হবে ?

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

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