নেতিবাচক কোড কি?


340

আমি ডগলাস ম্যাকিল্রয়ের উইকিপিডিয়া নিবন্ধটি পড়ছিলাম এবং উল্লেখ করা একটি উদ্ধৃতি পেলাম

"প্রোগ্রামিংয়ের আসল নায়ক তিনিই নেতিবাচক কোড লেখেন।"

ওটার মানে কি?


15
আমার অন্যতম উত্পাদনশীল দিনটি 1000 লাইন কোড দূরে ফেলেছিল। - কেন থম্পসন
রাদু পটপ

উত্তর:


501

এর অর্থ কোডের লাইনগুলি হ্রাস করা, অতিরিক্ত কাজগুলি সরিয়ে বা আরও সংক্ষিপ্ত গঠন ব্যবহার করে।

উদাহরণস্বরূপ আসল অ্যাপল লিসা বিকাশকারী দলের এই বিখ্যাত উপাখ্যানটি দেখুন :

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


257
পরিপূর্ণতা অর্জন করা হয়, যখন যোগ করার মতো আরও কিছু থাকে না, তবে যখন গ্রহণ করার মতো কিছুই থাকে না - এন্টোইন ডি সেন্ট-
এক্সুপুরি

7
#LL কি কোড মানের একটি ভাল পরিমাপ? আমি যে কোনও সি বা সি ++ কোডটি 'মিনিফাই' করতে পারি এবং রেখার গণনা উল্লেখযোগ্যভাবে হ্রাস করতে পারি তবে এটি বজায় রাখা দুঃস্বপ্ন হতে পারে।
জেবিআরউইলকিনসন

8
@ সিস্টেমম্পটআউট - এবং তারপরে আইনস্টনের "(একটি বৈজ্ঞানিক তত্ত্ব) যথাসম্ভব সহজ হওয়া উচিত, তবে সহজ কোনও সরল নয়"
জোনাথন ডে

32
কোনও কোড দ্রুত নয়, বা বেশি নির্ভরযোগ্য, বা নেই এমন কোডের চেয়ে কম রক্ষণাবেক্ষণের প্রয়োজন। "সন্দেহ হলে, তা ছুঁড়ে ফেলুন!"
TMN

4
@ জেবিআর উইলকিনসন: আমি বলব যে কোড ব্রেভিটি সম্পর্কিত "মিষ্টি স্পট" রয়েছে। সাধারণত, সংক্ষিপ্ততর ভাল, তবে একটি পয়েন্ট আসে যখন কোডটি খুব সংক্ষিপ্ত আকার ধারণ করতে পারে এবং অন্য প্রোগ্রামারকে বোঝা সহজ হয় না।
গর্ডনএম

131

কোড লাইন দ্বারা প্রোগ্রামার উত্পাদনশীলতা পরিমাপের লাইন বরাবর একটি বিল গেটস এর উদ্ধৃতি ওজন দ্বারা বিমান বিল্ডিং অগ্রগতি পরিমাপ করার মত।

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


30
হ্যাঁ, এটি কোনও ধরণের মেট্রিকের সমস্যা। আপনি জনগণের পারফরম্যান্স বিচার করার জন্য এগুলি ব্যবহার করার সাথে সাথে তারা সংখ্যাগুলি গেমিং শুরু করবে।

5
আসলেই কি কেউ পারফরম্যান্স মেট্রিক হিসাবে এলওসি ব্যবহার করেছে? আমি কেবল এটি দেখতে পেয়েছি "" এখানে আমরা কীভাবে কোনও প্রকল্পের বাগের কথা বলছি? "
মাইকেল বর্গওয়ার্ট

5
@ মিশেল: হ্যাঁ দুর্ভাগ্যবশত হ্যাঁ.
মাইকেল পেট্রোটা

4
আমরা কি একই বিল জি নিয়ে কথা বলছি যার একটি সংস্থা আছে যে রূপকটির মাধ্যমে 10000 জিটিওন জেট তৈরি হয়? :)
ড্যানিয়েল মোমন্ডর

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

118

যখন আমি হাই স্কুলে ছিলাম - এবং হ্যাঁ, 70 এর দশকে আমাদের কম্পিউটার ছিল, যদিও আমাদের পাথর ছুরি ব্যবহার করে তাদের পশুর চামড়া তৈরি করতে হয়েছিল - গণিতের একজন শিক্ষক প্রোগ্রামিং প্রতিযোগিতা করেছিলেন। নিয়মগুলি হ'ল বিজয়ী প্রোগ্রামটিই হ'ল সঠিক আউটপুট তৈরি করেছিল এবং এতে কোড টাইম রান রানের লাইনের ক্ষুদ্রতম পণ্য ছিল। এটি হ'ল, যদি আপনার প্রোগ্রামটি নেওয়া হয় তবে কোডের 100 টি লাইন বলুন এবং 5 সেকেন্ডের জন্য দৌড়ে গেলেন, আপনার স্কোর 500 ছিল else যদি কেউ 90 লাইন কোড লিখে এবং seconds সেকেন্ডের জন্য চালায় তবে তার স্কোর ছিল 540 g

এটি আমাকে একটি উজ্জ্বল স্কোরিং সিস্টেম হিসাবে আঘাত করেছে, সংক্ষিপ্ততা এবং অভিনয় উভয়ই পুরস্কৃত করেছে।

কিন্তু প্রযুক্তিগতভাবে বিজয়ী মানদণ্ড পূরণ করা এন্ট্রি অযোগ্য ঘোষণা করা হয়েছিল। সমস্যাটি ছিল 100 এরও কম সমস্ত মূল সংখ্যার একটি তালিকা মুদ্রণ করা The অযোগ্য এন্ট্রিটি এরকম কিছু হয়েছিল (বেশিরভাগ শিক্ষার্থী তখন বেসিক ব্যবহার করছিল):

100 print "2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61,"
110 print "67, 71, 73, 79, 83, 87, 89, 91, 97"

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


10
কোডের গণনা লাইনগুলি একটি খুব গেমবল মেট্রিক :-)

44
বেসিক প্রোগ্রামটি উজ্জ্বল! এটি বরং মন খারাপের বিষয় যে শিক্ষক প্রোগ্রামটি অযোগ্য ঘোষণা করেছিলেন। সর্বোপরি, সন্ধানের সারণী (যা প্রোগ্রামটি কিছুটা অনুরূপ) রিয়েল-ওয়ার্ল্ড প্রোগ্রামিংয়ে অবশ্যই পাওয়া যাবে।
নোকটিস স্কাইটিওয়ার

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

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

13
এর জন্য আমাকে অযোগ্য ঘোষণা করা হলে আমি বেশ বিচলিত হব। একটি ডিটারমিনিস্টিক সমস্যা একটি নির্বিচার সমাধানের দাবিদার, তাই না? আমি যখন 'হ্যালো ওয়ার্ল্ড' অ্যাপটি লিখি তখন আমি 'হ্যালো' বানানটি সঠিকভাবে যাচ্ছি কিনা তা পরীক্ষা করার জন্য আমি কোড করি না।
কर्क ব্রডহર્স্ট

34

এটা জিভ ইন গাল। যদি এটির প্রতি কোডড লাইনে আপনার জন্য $ N ব্যয় হয় তবে "নেতিবাচক লাইনগুলি" কোডিং করা অবশ্যই বিজয়ী।

এর অর্থ, ব্যবহারিক পরামর্শ হিসাবে, সেই ছোট কোড যা কাজটি সম্পাদন করে, বড় কোডের চেয়ে অনেক ভাল যা একই কাজ করে, অন্য সমস্ত জিনিস সমান হয়।


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

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

1
@ ভিজেজ: "... অন্য সমস্ত জিনিস সমান"।
ইরা

মুল বক্তব্যটি হ'ল সংক্ষিপ্ত কোড এবং ভার্বোজ কোডের মধ্যে অন্য সমস্ত জিনিস সমান হতে পারে না think
টমাস ন্যারোস

কোডের গড় লাইন costs N ব্যয় করার কারণ হ'ল আপনি প্রথমে আপনার Xলাইনে লেখার সময় ব্যয় করেন । তারপরে, বেশ কয়েকটি পুনরাবৃত্তির উপর দিয়ে Yলাইনগুলি দ্বারা চূড়ান্ত পণ্য হ্রাস করা । সুতরাং, (X-Y)বাকি রেখাগুলি খুব ব্যয়বহুল বলে মনে হচ্ছে কারণ রিফ্যাক্টরিংয়ের হত্যাকাণ্ড সমস্ত ক্রাফট কেটে ফেলেছে।

27

কম কোডে একই প্রোগ্রাম লেখা প্রত্যেকের জন্য একটি লক্ষ্য।

যদি কোনও প্রোগ্রাম কোডে 200 এলওসি নিয়ে থাকে এবং আমি 150 এ লিখি, আমি -50 এলওসি লিখেছি। তাই আমি নেতিবাচক কোড লিখেছি।


3
এছাড়াও, কম এলওসি লেখার অর্থ আপনি কম ত্রুটি করতে পারেন এবং সেগুলিকে সহজেই সনাক্ত করতে পারেন
লুসাবি

3
হাস্কেল এবং অন্যান্য ভাষার জন্য সত্য নয় যা এলোমেলো আওয়াজকে সংকুচিত করা যেতে পারে। :)
ম্যাক 26

1
অবশ্যই, আমার বক্তব্যটি "সংক্ষেপিত কোড" ছিল না, তবে আপনার মন্তব্য করার জন্য দক্ষ আলগোরিদিমগুলি কম এলওসি তে লিখেছেন :) +1।
লুকাবি

9

থিলোর উত্তর সম্ভবত accurate তিহাসিকভাবে সবচেয়ে সঠিক, তবে "নেতিবাচক কোড" রূপকটিতে পারফরম্যান্স এবং মেমরির ব্যবহারও অন্তর্ভুক্ত থাকতে পারে - বাস্তবিক প্রয়োজন না হওয়া অবধি কার্যকরকরণ বা কোনও বরাদ্দ স্থগিত করার পুরস্কৃত প্রচেষ্টা।

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

নেতিবাচক কোড উপলব্ধি করার একটি কৌশল হ'ল প্রাথমিক অনুমান এবং সমস্যার সংজ্ঞা চ্যালেঞ্জ করা। আপনি যদি সমস্যাটি / ইনপুট ডোমেনকে নতুন সংজ্ঞা দিতে পারেন যেমন "স্টিকি ইস্যু # 3" স্পষ্টতই অসম্ভব, তবে আপনাকে স্টিকি ইস্যু # 3 নিয়ে সময় বা কোড ব্যয় করতে হবে না। আপনি নকশাটি অনুকূল করে কোডটি মুছে ফেলেছেন।

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