ডিআরওয়াই কি সফটওয়্যার প্রকল্প পরিচালনার শত্রু?


83

সফ্টওয়্যার বিকাশের অন্যতম প্রাথমিক এবং বহুল স্বীকৃত নীতি হ'ল ডিআরওয়াই (নিজেকে পুনরাবৃত্তি করবেন না)। এটি আরও পরিষ্কার যে বেশিরভাগ সফ্টওয়্যার প্রকল্পগুলির জন্য কোনও না কোনও ব্যবস্থাপনার প্রয়োজন হয়।

এখন পরিচালনাগুলি (প্রাক্কলন, সময়সূচী, নিয়ন্ত্রণ) সহজে কাজগুলি কী? ডান, পুনরাবৃত্তিমূলক কাজ, ঠিক সেই কাজগুলি যা ডিআরওয়াই অনুসারে এড়ানো উচিত।

সুতরাং একটি প্রকল্প পরিচালনার দৃষ্টিকোণ থেকে, বিদ্যমান কিছু কোড 100 বার অনুলিপি করে এবং প্রতিটি কপির সাথে প্রয়োজন অনুসারে কিছুটা ছোটখাটো অভিযোজন তৈরি করে কোনও কাজ সমাধান করা দুর্দান্ত। সর্বদা, আপনি ঠিক কতটা কাজ করেছেন এবং কতটা রেখেছেন তা আপনি জানেন know সমস্ত পরিচালক আপনাকে ভালবাসবে।

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

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

দ্রষ্টব্য: এই প্রশ্নটি আমার আগের মত একই ধারণা, সফ্টওয়্যার বিকাশে নিয়মিত কাজের পরিমাণ এবং অনুমানের উপর এর প্রভাবের উপর ভিত্তি করে , তবে আমি মনে করি এটি আমার বিষয়টিকে আরও পরিষ্কার করে দেয়, তাই নিজেকে পুনরাবৃত্তি করার জন্য দুঃখিত) :)


96
আসুন, আমাদের প্রজেক্ট ম্যানেজমেন্ট চপগুলি কীভাবে অনুভূতি বোধ করছে যখন সেই অনুলিপি-আটকানো উদাহরণগুলির 100 টির মধ্যে কিছু অনুসন্ধান করার, পরিবর্তন করার এবং পরীক্ষা করার সময় আসে। এবং অতিরিক্ত সময়টি ভুলে যাবেন না কারণ এটি কেন ভাঙা শেষ হবে তা নির্ণয় করতে ব্যয় করা হবে কারণ তাদের মধ্যে কেবল 98 টিই পরিবর্তিত হয়েছে।

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

16
DRYY কে নিয়ন্ত্রণের বাইরে যেতে বাধা দেয় সেই নীতিটি হ'ল YAGNI (আপনার এটি প্রয়োজন হবে না) নীতি।
ফিলিপ

88
কোনও দ্বিধা নেই। যদি প্রকল্প পরিচালক আপনি চান যে অতিরিক্ত প্রচুর পরিমাণে ম্যানুয়াল কাজ করতে পারেন কারণ এটি অনুমান করা সহজ, তবে সুস্পষ্ট সমাধান হ'ল প্রকল্প ম্যানেজারকে বরখাস্ত করা।
জ্যাকবিবি

10
যদি আপনি নিজেকে পুনরাবৃত্তি করেন, তবে আপনাকে এখনও অন্যান্য কঠোর-অনুমানের কাজটি করতে হবে , এবং আরও কিছু অতিরিক্ত অর্থহীন কাজ করতে হবে। সুতরাং কিভাবে যে প্রকল্পে সাহায্য করে?
ইমিবিস

উত্তর:


134

আপনি মনে করছেন প্রকল্প পরিচালনার প্রাথমিক লক্ষ্যটি সঠিক অনুমান উত্পাদন করা produce এই ক্ষেত্রে না হয়. প্রকল্প পরিচালনার প্রাথমিক লক্ষ্যটি বিকাশকারীদের মতো: পণ্য মালিকের জন্য মূল্য সরবরাহ করা।

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

এটি সুপরিচিত যে সফ্টওয়্যার প্রকল্পগুলির অনুমান করা শক্ত, এবং এটি পরিচালনা করার জন্য অসংখ্য বই লেখা হয়েছে এবং বিভিন্ন প্রক্রিয়া তৈরি করা হয়েছে।

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

তবে বাস্তবে, পণ্যের মালিক দরকারী অনুমান এবং একটি মানের পণ্য যত তাড়াতাড়ি সম্ভব সস্তা এবং দ্রুত সরবরাহ করতে চান । এগুলি হ'ল প্রকৃত প্রতিবন্ধকতাগুলি কোনও প্রধানমন্ত্রীকে নেভিগেট করতে হবে।

যাই হোক না কেন, পুনরাবৃত্তিমূলক ম্যানুয়াল কাজটি স্বয়ংক্রিয়র চেয়ে বেশি অনুমানযোগ্য your সমস্ত অভিজ্ঞতা দেখায় যে পুনরাবৃত্তিমূলক ম্যানুয়াল কাজ ত্রুটিগুলির ঝুঁকিতে বেশি । এবং যদি কোনও কপি-পেস্ট করা কোডটিতে একটি বাগ আবিষ্কার হয়? হঠাৎ বাগ ফিক্সিংয়ের ব্যয় পুনরাবৃত্তির পরিমাণের সাথে বহুগুণ হয়, যা অনিশ্চয়তা বিস্ফোরণ ঘটায়।


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

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

11
এতে কতক্ষণ সময় লাগবে? আমি 60০% নিশ্চিত আমরা এটি এক্স দ্বারা শেষ করতে পারব, তবে এটির জন্য পাঁচগুণ বেশি সময় লাগবে এমন 10% সুযোগ রয়েছে।
ডেভিড

18
@ ডেভিড: এটি সম্ভবত প্রধানমন্ত্রীকে পাগল করে তুলবে কারণ তিনি অভিজ্ঞতা থেকে জানেন যে এই 10% সুযোগটি ঘটনাক্রমে ৮০% ঘটে যায় :)
ফ্রাঙ্ক পাফার

7
বাস্তবতাটি অনেক জায়গাতেই কোনও প্রকল্পের মাটিতে ট্র্যাক করতে পছন্দ করবে এবং অপ্রত্যাশিতভাবে সফল হবে succeed প্রধানমন্ত্রীগুলি প্রায়শই সঠিক অনুমানের জন্য পুরস্কৃত হন তাই তাদের বিকৃত প্রণোদনা রয়েছে। এটি প্রিন্সিপাল-এজেন্ট সমস্যা
টানা স্লেজগাড়ির

39

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

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

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

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

উদাহরণ

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

কাজটি: একটি অ্যাপ্লিকেশনটির জন্য 100 টি আলাদা প্রতিবেদন তৈরি করুন, প্রতিটি প্রতিবেদনটি খুব একইরকম দেখাচ্ছে, প্রতিবেদনের মধ্যে কিছু প্রয়োজনীয়তার পার্থক্য রয়েছে, কিছু আলাদা যুক্তি রয়েছে, তবে সব মিলিয়ে খুব বেশি পার্থক্য নয়।

যে দেবটি এই টাস্কটি পাবে প্রথমটি তৈরি করে (বলুন এটি 3 দিন লাগে), কিউএ এবং গ্রাহক পরিদর্শনের কারণে কিছু পরিবর্তন বা ছোট বাগ ফিক্স করার পরে, এটি ঠিকঠাক বলে মনে হচ্ছে। তারপরে তিনি অনুলিপিটি পুরোপুরি কপি-পেস্ট করে এবং তারপরে পরের প্রতিবেদনটি তৈরি করে শুরু করেছিলেন এবং প্রতিটি নতুন প্রতিবেদনের জন্য তাঁর গড়ে গড়ে ~ 1 দিন প্রয়োজন। খুব অনুমানযোগ্য, প্রথম নজরে ...

এখন, 100 টি প্রতিবেদন "প্রস্তুত" হওয়ার পরে, প্রোগ্রামটি আসল উত্পাদনে যায় এবং কিছু সমস্যা দেখা দেয় যা QA এর সময় উপেক্ষা করা হয়েছিল। পারফরম্যান্সে সমস্যা থাকতে পারে, নিয়মিত রিপোর্টগুলি ক্র্যাশ হতে পারে, অন্য জিনিসগুলি যেমন ইচ্ছা তেমন কাজ করে না। এখন, যখন ডিআরওয়াই নীতিটি প্রয়োগ করা হয়েছিল, তখন এই জায়গাগুলির 90% কোড এক জায়গায় কোড বেস পরিবর্তন করে সমাধান করা যেতে পারে। তবে অনুলিপি-পেস্ট পদ্ধতির কারণে সমস্যাটি একবারের পরিবর্তে 100 বার সমাধান করতে হবে। এবং ইতিমধ্যে এক প্রতিবেদন থেকে অন্য প্রতিবেদনে প্রয়োগ হওয়া পরিবর্তনের কারণে দেব প্রথম প্রতিবেদনের জন্য এই সমস্যাটি অন্য 99 টির মধ্যে দ্রুত অনুলিপি করতে পারবেন না He তাকে সমস্ত 100 টি প্রতিবেদন সন্ধান করতে হবে, সেগুলি পড়তে হবে, পরিবর্তনটি পরিবর্তিতভাবে অনুবাদ করতে হবে রিপোর্ট করুন, এটি পরীক্ষা করুন এবং সম্ভবত এটির প্রতিটি পৃথকভাবে ডিবাগ করুন। প্রধানমন্ত্রীর জন্য, এটি সত্যই শক্ত হয়ে উঠতে শুরু করে - তিনি অবশ্যই "নিয়মিত" বাগ ফিক্সের জন্য সময় নিতে পারেন (বলুন, 3 ঘন্টা) এবং এটি 100 দ্বারা গুণা করতে পারেন, তবে আসলে এটি সম্ভবত একটি ভুল অনুমান, কিছু সমাধানগুলি হতে পারে অন্যের তুলনায় সহজতর, অন্যেরা আরও কঠিন হতে পারে। এমনকি যদি এই অনুমানটি সঠিক হয় তবে ডিবাগিংয়ের প্রয়োজন হওয়াতে তার চেয়ে 100 গুণ বেশি দাম পড়লে আপনার সংস্থাকে প্রচুর অর্থ ব্যয় করতে হবে।

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

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


4
অন্যান্য ভাল উত্তরের তুলনায় সম্ভবত একটি ভাল উত্তর তবে খুব ভার্বোস।
ভিন্স ও'সুলিভান

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

"অনুলিপি-পেস্ট দুর্দান্ত কাজ করে ..." - অসম্মতি! এমনকি যদি প্রোগ্রামটি বন্ধ থাকে এবং প্রাথমিক প্রকাশের বাইরে কখনও বিকশিত হওয়ার গ্যারান্টিযুক্ত থাকে তবে কপিরাইট-পেস্ট কোডটি প্রোগ্রামের প্রাথমিক সংস্করণের বিকাশের সময় পাওয়া বাগগুলি ঠিক করার পক্ষে এটি আরও অনেক বেশি কাজ এবং ঝুঁকিপূর্ণ করে তোলে। আপনি যদি কখনও ভুল না করেন তবে এক্ষেত্রে আপনি Godশ্বর।
জ্যাকবিবি

1
@ জ্যাকসবিবি: আপনার আমার উত্তরটি আরও মনোযোগ সহকারে পড়া উচিত, আমি আলাদা কিছু লিখিনি।
ডক ব্রাউন 21

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

19

সুতরাং একটি প্রকল্প পরিচালনার দৃষ্টিকোণ থেকে, বিদ্যমান কিছু কোড 100 বার অনুলিপি করে এবং প্রতিটি কপির সাথে প্রয়োজন অনুসারে কিছুটা ছোটখাটো অভিযোজন তৈরি করে কোনও কাজ সমাধান করা দুর্দান্ত। সর্বদা, আপনি ঠিক কতটা কাজ করেছেন এবং কতটা রেখেছেন তা আপনি জানেন know সমস্ত পরিচালক আপনাকে ভালবাসবে।

আপনার বেস দৃser়তা ভুল।

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

অবশেষে সংস্থাটি বুঝতে পারবে যে কোনও ভাল প্রোগ্রামার নিয়োগের মাধ্যমে তারা সময়ের কিছু অংশে একই কাজ করতে পারে। এবং যদি তারা না করে তবে তাদের প্রতিযোগীরা তা করবে।


2
আমি যুক্তি দিয়েছি যে বেশিরভাগ প্রকৌশল
পেশাগুলি

12
@ ব্লুরাজা-ড্যানি ফ্লুঘুফুট: সত্যই নয়। ইলেক্ট্রনিক্স / বৈদ্যুতিক ইঞ্জিনিয়ার হিসাবে কাজ করার পরে আমি সাক্ষ্য দিতে পারি যে বেশিরভাগ বড় স্কেল ইঞ্জিনিয়ারিং পেশাগুলি (যে প্রকল্পগুলির জন্য বিল্ডিং শিপ এবং পাওয়ার প্ল্যান্টগুলির মতো কমিশন প্রয়োজন) এটি নিশ্চিত করে যে কিছু করার চেষ্টা করা এবং পরীক্ষিত লোকেরা এটি সঠিকভাবে করছেন। এটিই ব্যবসায় "ইঞ্জিনিয়ারিং" বিবেচনা করে। নতুন কিছু তৈরি করা হ'ল "আর অ্যান্ড ডি"
স্লিটব্যাটম্যান

3
@ স্লেবেটম্যান সম্ভবত আপনার পরিচালনার সমস্ত কাজ আপনি লক্ষ্য করেন নি; এমনকি আপনি যখন একই জিনিসটি বার বার করছেন তখনও পরিবেশটি প্রতিবার পরিবর্তিত হয় - আপনার কাছে কোনও বিদ্যুৎ কেন্দ্রের একটি টেম্পলেট নেই যা আপনি কেবল কোনও গ্রাহকের কাছে সরবরাহ করতে পারেন এবং এটি সম্পন্ন করার জন্য আপনার জরিপ করা দরকার, কীভাবে কাঁচামাল দিয়ে উদ্ভিদ সরবরাহ করতে হবে এবং পণ্যটি কীভাবে ফিরিয়ে আনতে হবে, নির্মানের জন্য সমস্ত কাঁচামাল পরিচালনা করতে হবে এবং সরবরাহ সংক্রান্ত সমস্যা এবং কাজের সংকট এবং এক মিলিয়ন অন্যান্য জিনিস মোকাবেলা করবে। দেখে মনে হচ্ছে এটি টেমপ্লেটের কাজের মতো (যতগুলি সফ্টওয়্যার প্রচেষ্টা করে) তবে এটি আসলে তা নয়।
লুয়ান

1
@ লুয়ান: হ্যাঁ, তবে এর কোনওটিই নতুন কিছু তৈরি করছে না। এঁরা সকলেই "এমন কিছু করছেন যা আমরা জানি কীভাবে করতে হয়"। সফটওয়্যার ডেভলপমেন্ট আলাদা। মূলত কারণ সফ্টওয়্যারটিতে, শারীরিক প্রকৌশল প্রকল্পের বিপরীতে, আমরা লাইব্রেরিতে কীভাবে করণীয় তা আমরা ইতিমধ্যে জেনে রাখি যাতে আমাদের ম্যানুয়ালি "সমীক্ষা" করতে না হয় ইত্যাদি। আমরা কেবল তার জন্য একটি লাইব্রেরি আমদানি করব এবং এটি ব্যবহার করব ।
slebetman

2
@ স্লেবেটম্যান প্রায় সব সফ্টওয়্যারই রচিত যা "আমরা কীভাবে করতে জানি তা" is গ্রন্থাগারগুলি এমন পরিবেশে বাস করে যা সর্বদা পরিবর্তিত হয়। এবং পুরো লাইব্রেরির সাথে আপনার 100% জ্ঞান এবং অভিজ্ঞতা নেই, এবং সেই লাইব্রেরির সমস্ত নির্ভরতা এবং আপনার যে অন্যান্য নির্ভরতা রয়েছে, এবং প্রচুর অদ্ভুত সিস্টেম এবং হার্ডওয়্যার কনফিগারেশন রয়েছে যা কেবল যুক্তিযুক্ত সিস্টেমের মতো কাজ করতে অস্বীকার করে হবে। এনক্যাপসুলেশন দুর্দান্ত, তবে এটি এখনও জাহান্নামের মতো ব্যয়বহুল এবং এর জন্য প্রচুর জরিপের প্রয়োজন। এবং ইঞ্জিনিয়ারিংয়ের
এনপ্যাপুলেশনও রয়েছে

12

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

যে সংস্থাগুলি মনে করে যে উন্নত প্রযুক্তির সংস্থাগুলি এইভাবে চূর্ণবিচূর্ণ হচ্ছে।


এটি মনে করে যে এটি উন্নত প্রযুক্তির চেয়ে আরও ভাল মস্তিষ্ক। প্রযুক্তি মস্তিষ্ক থেকে আসে, তাই না? "চিন্তায় স্মার্টার, শক্ত নয়" যা ঘটেছিল?

10

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

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

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

তো এখন কি করা? স্থিতির জন্য কোড (সর্বোপরি, YAGNI )। পরিবর্তনের স্বাচ্ছন্দ্যের জন্য কোড কোডটি লিখতে হবে, এমন কিছুর জন্য ঘণ্টা এবং শিসফিলের পুরো ভেলা লিখতে হবে যা প্রয়োজন হয় না কেবল অর্থ টর্চ করা।


6
মনে রাখবেন এর অর্থ এই যে আপনার মন্তব্য করা উচিত যে আপনি কোডটি অনুলিপি করেছেন (উভয় জায়গায়) যাতে আপনি জানতে পারেন যে আপনি যদি আবার এটি অনুলিপি করতে চলেছেন, আপনার উচিত নয়!
মার্ক হারড

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

@ মার্কহর্ড হ্যাঁ - দুর্দান্ত পয়েন্ট ...
রবি ডি

8

আপনার প্রশ্নে, আপনি কেবল প্রকল্প পরিচালনার তিনটি ফাংশন তালিকাবদ্ধ করেন - অনুমান, সময়সূচী এবং নিয়ন্ত্রণ। প্রকল্প পরিচালনা প্রকল্পের সীমাবদ্ধতার মধ্যে লক্ষ্য অর্জনের বিষয়ে। কোনও প্রকল্পের সীমাবদ্ধতার মধ্যে লক্ষ্য অর্জনের জন্য ব্যবহৃত পদ্ধতিগুলি সফ্টওয়্যার প্রকল্পের জন্য অন্যান্য অনেক ধরণের প্রকল্পের চেয়ে আলাদা। উদাহরণস্বরূপ, আপনি উত্পাদন প্রক্রিয়াগুলি অত্যন্ত পুনরাবৃত্তিযোগ্য এবং ভালভাবে বোঝার জন্য চান। তবে সফ্টওয়্যার বিকাশ বেশিরভাগ জ্ঞানের কাজ- এটি নিয়মিত নয় এবং কঠোর নির্দেশাবলী এবং পদ্ধতি অনুসরণ করার পরিবর্তে চিন্তাভাবনা করা দরকার। একটি সফ্টওয়্যার প্রকল্পের সূচনা, পরিকল্পনা, সম্পাদন, নিয়ন্ত্রণ ও নিয়ন্ত্রণ এবং বন্ধ করার জন্য ব্যবহৃত কৌশলগুলি কোনও সফ্টওয়্যার প্রকল্পে যে ধরণের কাজ করা প্রয়োজন তার জন্য অ্যাকাউন্টিং করতে হবে - বিশেষত, নন-রুটিন কাজ যা করা যায় না নির্দিষ্ট নির্দেশাবলী এবং পদ্ধতিতে।

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


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

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

2
@ ফ্র্যাঙ্কপুফার অবশ্যই এটি আরও শক্ত, তবে এটি আরও মান সরবরাহ করে। যদি আপনার বসের মনিব যথেষ্ট স্মার্ট হয় তবে তিনি সেই পরিচালকের হাত থেকে মুক্তি পাবেন যা "নিজের জন্য বিষয়গুলিকে আরও সহজ করে তুলতে" চেষ্টা করে এবং এমন কাউকে খুঁজে পাবে যা আসলে তার কাজটি করতে পারে। আমাকে ভুল করবেন না, যদি বিষয়গুলিকে সহজ করে তোলা মূল্য সরবরাহ করে তবে তার জন্য যান - তবে আপনি যা বর্ণনা করেন তাতে এটি অবশ্যই শেষ মানেরটির ক্ষতির কারণ।
লুয়ান

4

নতুন কোড লেখা কাজটির সামান্য অংশ

আপনার পরামর্শটি প্রাথমিকভাবে নতুন কোড লেখার অংশটি অনুমান করা সহজ করবে। যাইহোক, আসলে নতুন কিছু আনার জন্য (এটি একেবারে নতুন সিস্টেম, বৈশিষ্ট্যের সংযোজন বা কার্যকারিতার পরিবর্তনের বিষয়টি নয়) এটি করা যথেষ্ট নয় এবং এটি কেবল একটি সংখ্যালঘু কাজ - সাহিত্যে দেখা অনুমানগুলি বাস্তবে এটি বলে যে অংশটি হ'ল মোট কাজের 20% -40% এর মতো।

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

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


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

"ব্যর্থতার ঝুঁকি" নেই, ব্যর্থতার একটি নিশ্চিততা আছে । শীঘ্রই বা পরে সবকিছু ব্যর্থ হবে। আপনি কেবল শুনছেন কতটা ব্যয়বহুল এবং আপনি কীভাবে গাড়ি চালাচ্ছেন তা বেছে নিচ্ছেন।

4

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

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

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

সম্পাদনা: প্রতি মন্তব্যে, তবে আমি একমত যে , বিকাশের সময়টি অনুমান করা সহজতর হিসাবে অনাবশ্যক, ডিআরওয়াই এড়ানো কখনও কখনও অনিশ্চয়তার পরিমাণ হ্রাস করতে পারে। তবে আমি বিশ্বাস করি যে (১) ব্যবসায়ের প্রয়োজনীয়তা পূরণ না হওয়া অবধি কতক্ষণ, (২) প্রক্রিয়াটিতে কোন প্রযুক্তিগত debtণ নেওয়া হবে এবং (৩) মোট ব্যয়ের ঝুঁকি রয়েছে তার আরও চাপের প্রশ্নগুলির ক্ষেত্রে এটি একটি তুচ্ছ বিষয় issue আর্কিটেকচারাল পছন্দগুলির মালিকানা - অনেক ক্ষেত্রে ডিআরওয়াই যেতে হবে বা না সেগুলি এমন একটি নকশার পছন্দ যা এই প্রকল্পগুলির পরিচালকদের আরও সঠিক তথ্য সরবরাহ করা আরও সহজ করে তোলে কিনা তার চেয়েও বেশি সেই কারণগুলির প্রতি ঝুঁকি / পুরষ্কারের ভিত্তিতে করা উচিত than ।


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

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

হতে পারে প্রোগ্রামারদের ম্যানেজারের চেয়ে বেশি মাত্রার অর্ডার দেওয়া উচিত?

2

আমি মনে করি আপনি ডিআরওয়াইয়ের ভুল বোঝাবুঝি করছেন।

আসুন একটি উদাহরণ ব্যবহার করুন:

public Class A
{
    public int Multiply(int x, int y)
    {
        return x * y;
    }
}

public Class B
{
    public int Multiply(int x, int y)
    {
        return x * y;
    }

    public int Add(int x, int y)
    {
        return x + y;
    }
}

বনাম

public Class C : A
{
    public int Add(int x, int y)
    {
        return x + y;
    }
}

সি দিয়ে বি শ্রেণিকে প্রতিস্থাপনের মাধ্যমে আমরা DRY নীতি অনুসরণ করেছি এবং কোডের নকলকে হ্রাস করেছি। তবে আমরা প্রকল্পটির জন্য অজানা বা ঝুঁকি বাড়াই নি (যদি আপনি এর আগে উত্তরাধিকার না করে থাকেন)।

আমি মনে করি আপনি যখন ডিআরওয়াইয়ের বিষয়ে কথা বলছেন তখন আপনার অর্থ কীটি হ'ল ডিজাইন টাস্কের মতো। অর্থাৎ,

public Class A
{
    public int Multiply(int x, int y)
    {
        return x * y;
    }
}

!!! নতুন প্রয়োজন! কিছু ক্লায়েন্টদের দ্বিগুণ করতে সক্ষম হতে হবে !!

// Use class B for new clients!!
public Class B
{
    public int Multiply(double x, double y)
    {
        return x * y;
    }
}

বনাম

public Class A // Version 2
{
    public int Multiply(int x, int y)
    {
        return Multiply(x as double, y as double);
    }

    public int Multiply(double x, double y)
    {
        return x * y;
    }
}

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

সুতরাং, আমাদের কি এই ক্ষেত্রে বি বা এ সংস্করণ 2 নেওয়া উচিত?

  • বি কম পার্শ্ব প্রতিক্রিয়া সহ প্রকৃত অনুরোধিত পরিবর্তনের সাথে আরও সুনির্দিষ্ট হতে চলেছে এবং অনুমান করা সহজ এবং তত দ্রুত করা যেতে পারে।

  • একটি সংস্করণ 2 এর ফলে কম সামগ্রিক কোড এগিয়ে যাবে এবং আরও মার্জিত সমাধান হবে

আবার আমি বলতে যাচ্ছি এটি স্পেসিফিকেশন এবং প্রয়োজনীয়তা মানের নেমে আসে।

যদি আমাদের খুব পরিষ্কার স্পেসিফিকেশন থাকে যা প্রান্তের কেসগুলি এবং পিছনের দিকে সামঞ্জস্যতা কভার করে থাকে তবে আমরা নিশ্চিত হতে পারি যে আমরা বাগ তৈরি না করে মডেলটির রিফ্যাক্টর করার জন্য সিস্টেমটি যথেষ্ট ভালভাবে বুঝতে পেরেছি।

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


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

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

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

1

অনুচ্ছেদে অনুচ্ছেদ

সফ্টওয়্যার বিকাশের অন্যতম প্রাথমিক এবং বহুল স্বীকৃত নীতি হ'ল ডিআরওয়াই (নিজেকে পুনরাবৃত্তি করবেন না)। এটি আরও পরিষ্কার যে বেশিরভাগ সফ্টওয়্যার প্রকল্পগুলির জন্য কোনও না কোনও ব্যবস্থাপনার প্রয়োজন হয়।

সঠিক।

এখন পরিচালনাগুলি (প্রাক্কলন, সময়সূচী, নিয়ন্ত্রণ) সহজে কাজগুলি কী? ডান, পুনরাবৃত্তিমূলক কাজ, ঠিক সেই কাজগুলি যা ডিআরওয়াই অনুসারে এড়ানো উচিত।

পুনরাবৃত্তিমূলক কাজগুলি স্বয়ংক্রিয়, বাধ্যতামূলক হওয়া উচিত । তারা বিরক্তিকর, ত্রুটিযুক্ত প্রবণ, যখন হাতে তৈরি করা হয়।

সুতরাং একটি প্রকল্প পরিচালনার দৃষ্টিকোণ থেকে, বিদ্যমান কিছু কোড 100 বার অনুলিপি করে এবং প্রতিটি কপির সাথে প্রয়োজন অনুসারে কিছুটা ছোটখাটো অভিযোজন তৈরি করে কোনও কাজ সমাধান করা দুর্দান্ত। সর্বদা, আপনি ঠিক কতটা কাজ করেছেন এবং কতটা রেখেছেন তা আপনি জানেন know সমস্ত পরিচালক আপনাকে ভালবাসবে।

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

  • প্রথমে মূল উত্সে কোডটি ঠিক করুন;
  • কোডটি অন্য স্থানে ঠিক করুন;
  • নিশ্চিত করুন যে সেগুলি সমস্ত জায়গাগুলির মধ্যে ছিল। আপনি যখন বলছেন এটি ম্যানেজারের কাছে করা উচিত, তিনি সম্ভবত কমপক্ষে কাউকে ঘৃণা করবেন।

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

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

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

প্রচুর লোক এখানে ইঙ্গিত করে যে এখানে কোনও দ্বিধা নেই। হ্যা এবং না.

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

আমি মনে করি দ্বিধাটি হ'ল - আমরা যদি কোনও বৈশিষ্ট্যে কোনও কিছুর বাস্তবায়ন করি, যদি এটির অনুরোধের সম্ভাবনা কম থাকে। অনুরোধ করা হলে কিছু বাস্তবায়ন করুন। কারওও পক্ষে বিশাল অবকাঠামো প্রয়োজন নেই যা ব্যবহার করা হবে না।


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

1

এটি ভবিষ্যতের পুনঃব্যবহারের জন্য ডিজাইনিং বা YAGNI নীতি সম্পর্কে মোটেও নয়। এটি বর্তমান কাজের প্যাকেজে কোড পুনরাবৃত্তি করার বিষয়ে।

এটি একেবারে নকশা সম্পর্কে। হয়তো প্রতি সে পুনরায় ব্যবহার না করে তবে নকশা করুন।

কোনও বিকাশকারী ডিআরওয়াইকে অতিমাত্রায় নিচ্ছেন কিনা তা নির্ধারণের মানদণ্ডগুলি কী কী?

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

আমরা কীভাবে একটি ভাল আপস খুঁজে পেতে পারি?

আহ ... ডিজাইন? রিফ্যাক্টরিং নকশা, ভাল এটি অনুমিত হয়। ডিআরওয়াইংয়ের পরিধিটি লুপ থেকে কোনও পদ্ধতিতে, শ্রেণিতে (এসএস) খুব সহজেই একটি সুপার নোভার মতো প্রসারিত করতে পারে। ওখানে এসেছি। আপনি সমস্যাটি অধ্যয়ন না করা পর্যন্ত আপনি সত্যই জানতে পারবেন না - এটি নকশা।

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

উপসংহার

... উল্লেখ করা প্রশ্ন এবং এর উত্তরগুলি প্রকল্প পরিচালনার দিকটি কভার করে না।

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

পরিবর্তে, আপনি DRY নীতিটি প্রয়োগ করেন এবং এমন একটি বিমূর্ততা খোঁজার চেষ্টা করেন যা নকল কোডটি কমবেশি সরিয়ে দেয়, জিনিসগুলি আলাদা।

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

বেশিরভাগ সময়, আপনি আসলে কতটা কাজ বাকি তা বলতে পারবেন না। আপনি একজন প্রকল্প পরিচালকের সবচেয়ে খারাপ দুঃস্বপ্ন night

আমি উভয়ই জানতাম না তবে আমার বিশ্বাস ছিল যে সামনের নকশার প্রচেষ্টাটি শেষ হয়ে যাবে। আমরা সকলেই এটি বলি তবে বিশেষত পরিচালনা এটি বিশ্বাস করে না। ম্যানেজমেন্ট ভাবা হত আমি প্রায় স্ক্রু করছি। "দুই দিন এবং আপনার এর 2% এখনও কোডিং হয়নি!"

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

আমার প্রশ্নগুলি হ'ল: কোনও বিকাশকারী ডিআরওয়াই অতিমাত্রায় নিচ্ছে কিনা তা নির্ধারণের মানদণ্ডগুলি কী? আমরা কীভাবে একটি ভাল আপস খুঁজে পেতে পারি? নাকি এই দ্বিধা পুরোপুরি কাটিয়ে ওঠার কোনও উপায় আছে, কেবল কোনও আপস খুঁজে না পেয়ে?

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


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