আপনি দেখেছেন সবচেয়ে হাস্যকর হতাশা কি? [বন্ধ]


145

আমরা সকলেই জানি যে অকালীন অপটিমাইজেশন হ'ল সমস্ত অশুভের মূল কারণ এটি অপঠনযোগ্য / অনিবার্য কোডের দিকে নিয়ে যায়। এমনকি খারাপটি হতাশার কারণ, যখন কেউ "অপ্টিমাইজেশন" প্রয়োগ করে কারণ তারা মনে করে যে এটি দ্রুত হবে তবে এটি ধীরে ধীরে শেষ হবে, পাশাপাশি বগি, কল্পনাশক্তিহীন ইত্যাদি you've যা দেখেছেন তার মধ্যে সবচেয়ে হাস্যকর উদাহরণটি কী is ?


21
"হতাশ" একটি দুর্দান্ত শব্দ।
এমকিপিপি

আপনি যদি না জানতেন তবে, তারা সর্বশেষ পডকাস্টে আপনার থ্রেড সম্পর্কে এখানে কথা বলেছেন।
এমএমসিডল

উত্তর:


81

একটি পুরানো প্রকল্পে আমরা কিছু উত্তেজনাপূর্ণ পেয়েছি (অন্যথায় দুর্দান্ত) এম্বেড হওয়া সিস্টেম প্রোগ্রামার যাদের বিশাল জেড -8000 অভিজ্ঞতা ছিল had

আমাদের নতুন পরিবেশটি ছিল 32-বিট স্পার্ক সোলারিস।

একজনের মধ্যে থেকে গিয়ে আমাদের কোডটি দ্রুততর করার জন্য সমস্ত ইনটগুলি হাফপ্যান্টে পরিবর্তন করেছিল, যেহেতু র‍্যাম থেকে 16 বিট দখল করা 32 বিট দখল করার চেয়ে দ্রুত ছিল।

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


16
আরে আপনি কোথায় গণিত শিখলেন? 1 টি ক্যাশে / র‌্যাম অ্যাক্সেস সহ 2 টি নির্দেশাবলী 1 ক্যাশে / র‌্যাম অ্যাক্সেস সহ 1 টি নির্দেশিকার চেয়ে স্পষ্টতই দ্রুত!
রেজার ঝড়

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

206

আমি মনে করি "অকাল অপটিমাইজেশন সমস্ত অশুভের মূল" শব্দটি হ'ল উপায়, উপায় হিসাবে ব্যবহৃত। অনেক প্রকল্পের জন্য, এটি কোনও প্রকল্পে দেরি না হওয়া পর্যন্ত কর্মক্ষমতা বিবেচনায় না নেওয়ার অজুহাতে পরিণত হয়েছে।

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

"হতাশ" হওয়ার কারণে সমস্যাগুলির উদাহরণগুলির তুলনায় আমি বোবা কর্মক্ষমতা সমস্যার আরও অনেক "হাস্যকর" উদাহরণ দেখেছি

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

আমি যা মনে করি এটি একটি উত্তম বিবৃতি তা হ'ল: "পরিমাপ ও বোঝা ছাড়াই অপ্টিমাইজেশন মোটেও অপ্টিমাইজেশন নয় - এটির এলোমেলো পরিবর্তন"।

ভাল পারফরম্যান্সের কাজটি সময় সাশ্রয়ী - প্রায়শই বেশি যাতে বৈশিষ্ট্য বা উপাদানগুলির বিকাশ ঘটে।


46
"অকাল" এই উক্তিটির মূল শব্দ। আপনার এটি "পরিমাপ ও বোঝার ছাড়াই অপ্টিমাইজেশান" -তে পুনরায় প্রকাশ করা অর্থটিকে কিছুটা পরিবর্তন করে বলে মনে হচ্ছে না। নূথের অর্থ হ'ল তাই।
বিল করুন

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

5
এটি প্রকৃতপক্ষে পৃথক ক্ষেত্রে নির্ভর করে, অপ্রতুল অপ্টিমাইজেশান পরিকল্পনা সমস্যা হওয়ার চেয়ে আরও অনেকগুলি ক্ষেত্রে অকাল অপ্টিমাইজেশন সমস্যা হয়ে যায়
মার্ক রোজার্স

12
-1: "অপ্টিমাইজেশন" এবং সঠিক নকশার মধ্যে পার্থক্য রয়েছে। যারা বলতে পারবেন না তাদের পক্ষে, থাম্বের একটি ভাল নিয়ম হ'ল "অপ্টিমাইজেশন" কোডটি পড়া আরও শক্ত করে তবে দ্রুত বা আরও কার্যকর efficient একটি উন্নত ডিজাইন কোড পড়তে সহজ করে তোলে (বা কমপক্ষে আরও খারাপ নয়) এবং আরও দক্ষ।
টেড

5
যদি এটি উপায়ে ব্যবহার করা হয়, তবে জনগণ এসও-তে প্রশ্ন জিজ্ঞাসা করে বহিরাগতদের দিকে ভারী ভারী। : ডি
dkretz

114

ডাটাবেসগুলি হতাশার প্লেল্যান্ড।

প্রিয় অন্তর্ভুক্ত:

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

এটা আমার মাথার উপরের অংশ থেকে দূরে।


সূচকের প্রয়োজনীয়তার বিরুদ্ধে লড়াই করা চিন্তা করা কেবল বেদনাদায়ক।
বিলটি

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

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

3
আমি যুক্ত করেছি: বিভিন্ন ডাটাবেসে ডাটাবেসগুলি ভাগ করুন (গ্রাহক এসি, গ্রাহকগণ ডিএফ, ইত্যাদি)
গ্যাব্রিয়েল ডি'আন্টোনা

আপনি কি "ক্ষেত্র-হিসাবে-একটি-অ্যারে ক্ষেত্রগুলিকে অস্বীকৃতিতে পরিণত করতে পারেন"? আপনি এখানে কি বলতে চাচ্ছেন?
বার্ট ভ্যান হিউকেলোম

87

আমি মনে করি যে এর কোনও নিখুঁত নিয়ম নেই: কিছু জিনিস সামনে থেকে সর্বোত্তমভাবে অনুকূলিত হয়, এবং কিছু হয় না।

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

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

সুতরাং আবার, কোন নিখুঁত নিয়ম আছে। হ্যাঁ, কখনও কখনও অপ্টিমাইজেশন খুব তাড়াতাড়ি একটি ভুল হয়। তবে কখনও কখনও "সিপিইউ / ডিস্ক স্পেস / মেমরি সস্তা" নীতিবাক্য হ'ল সমস্ত অশুভের আসল মূল।


37
আমি সম্মত "সিপিইউ / ডিস্কের স্থান / স্মৃতি সস্তার" হ'ল সমস্ত অশুভের আসল মূল। +1
ksuralta

5
আমি শুনেছি যে এক্সএমএল ড্রাইভও। আরেকটি ট্যাঙ্ক কোম্পানি
n8wrl

19
@ কুরাল্টা: "সিপিইউ / ডিস্কের জায়গা / স্মৃতি সস্তা" চিন্তাভাবনা এড়াতে সুবিধাজনক বাহানা। চিন্তাভাবনা এড়িয়ে চলা সব মন্দ কাজের কল্পিত মূল।
পিসকভোর

এই এক্সএমএলাইজেশনটি আমার কর্মক্ষেত্রেও ঘটেছে, তারপরে জেএসওনাইজেশন। কিছু কিছু "শ্রমসাধ্য" সম্পর্কযুক্ত ডাটাবেস ডিজাইন এড়াতে।
Tanz87

75

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

এখানে একটি সাম্প্রতিক উদাহরণ:

মোটামুটি বড় এবং জটিল অ্যাপ্লিকেশনটিতে একটি মূল টেবিলটি উল্লম্বভাবে বিভাজন করার জন্য বিস্তৃত প্রস্তাব নিয়ে ডেটা আর্কিটেক্ট আমার কাছে আসে। পরিবর্তনের জন্য সামঞ্জস্য করতে কোন ধরণের উন্নয়নের প্রচেষ্টা প্রয়োজন হবে তা তিনি জানতে চান। কথোপকথনটি এভাবে চলেছিল:

আমি: কেন আপনি এই বিবেচনা করছেন? আপনি যে সমস্যাটি সমাধান করার চেষ্টা করছেন তা কী?

হিম: টেবিল এক্সটি অনেক প্রশস্ত, আমরা পারফরম্যান্সের কারণে এটি ভাগ করছি।

আমি: আপনি কি মনে করেন এটি খুব প্রশস্ত?

তাকে: পরামর্শদাতা বলেছিলেন যে এটি এক টেবিলের মধ্যে অনেক বেশি কলাম রয়েছে।

আমি: এবং এটি পারফরম্যান্সকে প্রভাবিত করছে?

হিম: হ্যাঁ, ব্যবহারকারীরা অ্যাপ্লিকেশনটির এক্সওয়াইজেড মডিউলে অন্তর্বর্তী ধীরগতির কথা জানিয়েছেন।

আমি: আপনি কীভাবে জানবেন যে টেবিলের প্রস্থই সমস্যার উত্স?

হিম: এটি এক্সওয়াইজেড মডিউল দ্বারা ব্যবহৃত মূল সারণি এবং এটি 200 কলামের মতো। এটা অবশ্যই সমস্যা হতে হবে।

আমি (ব্যাখ্যা): তবে বিশেষত XYZ মডিউলটি সেই টেবিলের বেশিরভাগ কলাম ব্যবহার করে এবং এটি যে কলামগুলি ব্যবহার করে তা অনির্দেশ্য কারণ ব্যবহারকারী সেই টেবিল থেকে প্রদর্শন করতে চান এমন ডেটা প্রদর্শন করতে অ্যাপ্লিকেশনটিকে কনফিগার করে। সম্ভবতঃ 95% সময় আমরা সমস্ত টেবিলগুলিতে একসাথে ফিরে যোগ দিতে চাই যা পারফরম্যান্সের ক্ষতি করে।

হিম: পরামর্শদাতা বলেছিলেন এটি খুব প্রশস্ত এবং আমাদের এটি পরিবর্তন করা দরকার।

আমি: এই পরামর্শদাতা কে? আমি জানতাম না আমরা একটি পরামর্শদাতা নিয়োগ করেছি, না তারা উন্নয়ন দলের সাথে মোটেই কথা বলে নি।

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

আমিঃ আহ হাহ। সুতরাং পরামর্শদাতা যিনি ডাটাবেস পুনরায় নকশা পরিষেবাদি বিক্রয় করেন আমাদের মনে হয় আমাদের একটি ডাটাবেস পুনরায় নকশা প্রয়োজন ....

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

  1. কয়েকটি কী কলামে সূচি অনুপস্থিত।
  2. কয়েকজন দুর্বৃত্ত ডেটা বিশ্লেষক যারা এমএসএ্যাক্সেসের মাধ্যমে সরাসরি প্রোডাকশন ডাটাবেসটি জিজ্ঞাসা করে পর্যায়ক্রমে মূল সারণীগুলি ("খুব প্রশস্ত" একটি সহ) লক করে যাচ্ছিলেন।

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


আগা এমএসএক্স প্রসেস। আমরা প্রতি কয়েক মিনিটের মধ্যে সমস্ত অ্যাক্সেস সংযোগ ফেলে দেওয়ার জন্য একটি পদ্ধতি লিখেছিলাম tp অবশেষে বার্তাটি পেয়ে গেল যে এটি খারাপ।
নাট

1
আমাদের অনুরূপ কাজ ছিল, কিন্তু এটি ব্যবহারে চলে গেছে। ন্যায়সঙ্গত হওয়ার জন্য, অ্যাক্সেস সমস্যা নয়, নব্যফিটদের পক্ষে ননপারফরম্যান্ট কোয়েরিগুলি তৈরি করা / চালানো সহজ করে তোলে।
জনএফএক্স

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

35
"শুনেছি
মাউভের

এটা আরও খারাপ হতে পারত. এক্সেল ক্যোরি সম্পাদক এটি ব্যবহার করার সময় সম্পূর্ণ ডাটাবেসটিকে লক করে দেয়। যখন আমি এটি সম্পর্কে জানতাম না, আমি অন্য কোনও ক্ষেত্রে কাজ করার সময় আমি এর একটি উদাহরণ দিনের ভাল অংশের জন্য উন্মুক্ত রেখেছি। সবচেয়ে খারাপ দিকটি হ'ল এমএস এসকিউএল সার্ভার লকটি তৈরি করছিল এমন সঠিক ব্যবহারকারীর নাম / মেশিনটি রিপোর্ট করে নি। আমি কয়েক ঘন্টা পরে বুঝতে পেরেছিলাম যে আমি লক করানোর কারণ হলাম কারণ আমি জিজ্ঞাসা করছি এমন দৃশ্যের অংশ হয়ে টেবিলগুলি লক হয়ে গেছে এবং প্রথমে সমস্ত কিছু যাচাই করেছিলাম।
Esteban Küber

58

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

পুরোপুরি হতাশ!


10
হতে পারে তারা ফ্লাক্স ক্যাপাসিটরটিকে এমিগ্রেঞ্জ করার চেষ্টা করছিল
মাইকেজ

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

17
+1 কারণ আমার মনিটরের যে কোনও উপায়ে পরিষ্কার করার প্রয়োজন ছিল ;-)
আরবেরটেইগ ২ '

1
অভিশাপ !! তবে ইলেট্রোমেজেন্টিক-ক্রস-জেনেটিকাল প্রভাব সম্পর্কে কী about আমার মনে হয় এটিও বিবেচনায় নেওয়া উচিত। অথবা বিষয়টি একটি জম্বিতে পরিণত হতে পারে।
সুরজ চন্দ্রন

1
তিনটি শব্দ: "ক্রোম মাফলার বিয়ারিংস।"
অলবাইট

53

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

String msg = "Count = " + count + " of " + total + ".";

মধ্যে

StringBuffer sb = new StringBuffer("Count = ");
sb.append(count);
sb.append(" of ");
sb.append(total);
sb.append(".");
String msg = sb.toString();

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

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

3
প্রথম: আপনি কমপক্ষে জাভা 5 ব্যবহার করবেন না কেন? দ্বিতীয়: হ্যাঁ আপনি পারেন। প্রথম উদাহরণে আপনি কীভাবে 5 টি গণনা করতে পারবেন তবে দ্বিতীয়টি নয়? এটি প্রথম হিসাবে একই স্ট্রিং আক্ষরিক ব্যবহার করে। পঠনযোগ্য কোডটি লিখুন এবং দৃশ্যের পিছনে স্ট্রিংবফার কখন ব্যবহার করবেন তা সংকলকটিকে সিদ্ধান্ত নিতে দিন।
বিল

4
@ মেট্রয়েডফ্যান ২০০২: দ্বিতীয় উদাহরণে স্ট্রিং লিটারেলগুলিও অবজেক্ট। আমি যেমন উত্তরে বলেছি, পার্থক্যগুলি এই স্কেলটিতে তুচ্ছ।
বিলটি

1
এর অর্থ এই নয় যে এটি প্রতিটি স্ট্রিংকে তার নিজস্ব স্ট্রিংবফার দিয়ে প্রতিস্থাপন করে। সংকলক সম্পাদনকারী অপটিমাইজেশন তৈরি করা সামগ্রীর সংখ্যা হ্রাস করে।
বিলটি

3
@ এরিক: স্ট্রিং msg = "+ মোট + +" এর "গণনা =" + গণনা + ";"; " জাভা থেকে প্রায়শই স্ট্রিংয়ে সংকলিত হয় = = নতুন স্ট্রিংবফার () .পেনড ("গণনা") app ... যা হ'ল দ্বিতীয় উদাহরণটি কি করে।
গ্রান্ট ওয়াগনার

3
মিঃ ওয়াগনার বিষয়টি হ'ল আপনাকে এই সমস্ত পদ্ধতি কলগুলি দেখতে হবে, সংকলক নয়। আপনাকে সেগুলি লিখতে হবে এবং সেগুলি পরে বুঝতে হবে। সংকলক যাই হোক না কেন একই কাজ। সুতরাং পাঠযোগ্যতা এই ক্ষেত্রে আরও গুরুত্বপূর্ণ।
ypnos

47

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

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

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

ওহ, এবং ডাটাবেস চিত্রটি নরক থেকে একটি মিউট্যান্ট মাকড়সার মতো লাগছিল।


42

কীভাবে পিওবিআই - হতাশার উদ্দেশ্য দ্বারা স্পষ্টতই হতাশ?

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

সমালোচনার অক্ষম প্রকৃতির কারণে (তিনি একজন সিইও ছিলেন, আইটি লোক ছিলেন না), আমার কলেজটি কখনই এটি সঠিকভাবে পরিচালনা করতে পারেনি। আপনার যদি পারফরম্যান্স সমস্যা না থেকে থাকে তবে আপনি এটিকে অপসারণ করতে পারবেন না ...

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

এখনও অবাস্তব জিনিসটি ছিল আমার কলেজগুলি নিঃশব্দ ছিল যখন তিনি ফিরে এসেছিলেন, হাসছেন, রসিকতা করেছিলেন, বিগম্যাকের জন্য বের হতেন যখন তিনি সাধারণত টেবিলগুলি লাথি মারতেন, সিইও এবং সংস্থার সম্পর্কে শিখা চালাতেন এবং বাকী দিনটি মৃত্যুর দিকে ঝুঁকতেন spend ।

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

এই প্রথম (এবং একমাত্র) সময় দুষ্ট সিইও বলেছিলেন "দুর্দান্ত কাজ!" তাকে. এতটুকু গুনে আছে তাইনা?

এটি ছিল সত্যিকারের পিওবিআই।

তবে এটি এক ধরণের সামাজিক প্রক্রিয়া অপ্টিমাইজেশন, সুতরাং এটি 100% ঠিক আছে।

আমি মনে করি.


10
আমার মনে আছে যে এমন একটি ডেটা প্রসেসিং অ্যাপ সম্পর্কে লিখছেন যা বিভিন্ন স্তরে বিক্রি হয়েছিল যেখানে "লাইট" প্রতি সেকেন্ডে কয়েকটি ডেটা সেট ক্রંચ করতে পারে, "সুপারডুপার" সংস্করণ কয়েক হাজার। স্লিপ (এন) এর একমাত্র উত্স কোডের পার্থক্য।
পিটারচেন

1
উজ্জ্বল! আমি সেই পরিস্থিতিতে এমন স্ট্যান্ডার্ডটি সুপারিশ করব। বিকাশের শুরুতে একটি বড় অংশের মেমরি বরাদ্দ করুন এবং কিছু স্লিপ কল যুক্ত করুন এবং যখনই আপনাকে কিছু সম্পাদনা করতে হবে, কেবল সেগুলি নীচে নামিয়ে দিন। একে অলৌকিক কর্মী বলা হচ্ছে;)
আরসিআইএক্স

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

32

"ডাটাবেস স্বাধীনতা"। এর অর্থ হ'ল কোনও স্টোরেজ প্রক্স, ট্রিগার ইত্যাদি নেই - এমনকি কোনও বিদেশী কীও নয়।


8
এই "স্বাধীনতা" কি এই অর্থে যে আপনি ডাটাবেসের উপরে এত বেশি, আপনি কি ভুলে গেছেন ডেটা কী? "মাইগ্রেশন ব্যথা এড়াতে" অকারণে ডাটাবেসগুলিকে বিমূর্ত করা একটি পোষা প্রাণীর উকুন; আপনার দরকার নেই
রব

8
যথেষ্ট. কর্মক্ষেত্রে আর্কিটেকচার নভোচারী। একটি ওয়েব থাকার পর থেকে আমি ওয়েব অ্যাপ্লিকেশনগুলি তৈরি করে চলেছি এবং সেই সময়ে আমি কখনই একটি ডিবি প্ল্যাটফর্ম থেকে অন্য কোনও প্ল্যাটফর্মে চলে যাইনি।
ক্রিস

5
আমি নিশ্চিত যে এটি ঘটেছে, তবে এটি যথেষ্ট বিরল যে আপনি যদি এই সম্ভাবনার চারপাশে আপনার স্থাপত্যটি ডিজাইন করেন তবে আপনি একজন নির্বোধ।
ক্রিস

6
হার্পো, এটি একটি পৃথক পরিস্থিতি - এটি ক্ষেত্রে এটি প্রয়োজন। যখন এটির প্রয়োজন হয় না তখন আমি তার বিষয়ে কথা বলি, তবে এএ সিদ্ধান্ত নেয় যে এটি কোনও সময়ে "হতে পারে"।
ক্রিস

3
@ সমস্ত: ডিবি স্বাধীনতা আপনাকে ব্যয় করতে পারে, হ্যাঁ, তবে আমাদের পণ্য এমন পরিবেশে চালিত হয় যেখানে বিডির মাধ্যমে ডিবি বিক্রেতাকে বেছে নেওয়া হয়, এবং আমাদের মূলত পাশাপাশি খেলতে হবে। কিছু বিকাশকারী উল্লম্ব-সংহত সফ্টওয়্যার স্ট্যাকের বিলাসিতা পায় না এবং তা সত্ত্বেও করতে হবে।
ক্রিস আর

31
var stringBuilder = new StringBuilder();
stringBuilder.Append(myObj.a + myObj.b + myObj.c + myObj.d);
string cat = stringBuilder.ToString();

আমি দেখেছি এমন স্ট্রিংবিল্ডারের সর্বোত্তম ব্যবহার।


9
"ধারণা সম্পর্কে অস্পষ্ট" সম্পর্কে কথা! কি দারুন!
এডি

3
কুল। "আমার সীসা বলেছে যে আমি স্ট্রিংবিল্ডার ক্লাসটি ব্যবহার করতে চাই যদি আমি স্ট্রিং বিলেতে চান তবে এটাই আমি করি So তাই কি সমস্যা?" লোল ...
TheBlastOne

26

স্ট্রিংকে বিভক্ত করতে একটি রেজেেক্স ব্যবহার করে যখন একটি সাধারণ স্ট্রিং.স্প্লিট যথেষ্ট হয় suff


25
তবে জাভা স্ট্রিং-এ স্প্লিট একটি রেজেেক্স ব্যবহার করে!
ফ্র্যাঙ্ক ক্রুয়েজার

অভ্যন্তরীণ স্ট্রিং বিভক্ত হওয়ার মতো একটি রেজেক্স কীভাবে দ্রুত হতে পারে তা আমি দেখছি না।
আন্দ্রে রিনিয়া

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

5
@ ডেভিড ক্র্যাশওয়া: মাইক্রো-অপ্টিমাইজেশনের সুযোগগুলি শিকার করা মানুষের সময়কে নষ্ট করে; কোড লেখার সময় কুঁড়ি , কমপক্ষে জটিল পর্যাপ্ত সমাধান ব্যবহার করুন।
পিসকভোর

6
-1: আপনি যদি রেজেক্সেস ব্যবহার করেন তবে এটি 1001 ভাষা-অভ্যন্তরীণ স্ট্রিং ম্যানিপুলেটারগুলির অভ্যর্থনা না করে এটি লেখা খুব স্বাভাবিক।
কিলিয়ানডিস

26

এই থ্রেডটি সম্পর্কে আমার খুব দেরি, তবে আমি সম্প্রতি এটি দেখেছি:

bool isFinished = GetIsFinished();

switch (isFinished)
{
    case true:
        DoFinish();
        break;

    case false:
        DoNextStep();
        break;

    default:
        DoNextStep();
}

হ্যাঁ, আপনি যদি বুলিয়ানটির কিছু অতিরিক্ত মান পেয়ে থাকেন ...


22
সত্য, একটি ফাইলনোটফাউন্ড অফ কোর্স মিথ্যা
Ikke

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

1
@ ওরঙ্গ ... যাইহোক আপনি কেন এটি স্যুইচ হিসাবে পাবেন? এটি একটি বুলিয়ান - একটি যদি / অন্য সমস্ত প্রয়োজন হয় else
দামোভিসা

@ দামোভিসা ফেসপামটি ঠিক আছে ... তখন খুব ভাল :) এটি মিস হয়েছে :)
ওওরং

2
এটি নুলযোগ্য <
বুলেটিয়ান

25

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

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

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


28
তাদের সর্বোত্তমভাবে পরিচালনা - "না, আসুন এই অ্যাপ্লিকেশনটি ঠিক করার জন্য এক-অফ 80 প্রোগ্রামার ঘন্টা না লাগানো যাক এটি খুব ব্যয়বহুল Let's আসুন এটি রাখা যাক, এর বাগগুলি প্রতি মাসে 200+ ব্যবহারকারীর ঘন্টা, এবং মাসে 10 প্রোগ্রামার ঘন্টার জন্য ড্রেন করতে পারে 'রক্ষণাবেক্ষণ। " AAAAAAAAAUGH !!!
পিসকভোর

25

বাছাইয়ের কথা কেউ উল্লেখ করেছেন বলে মনে হয় না, তাই আমি করব।

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


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

2
হ্যাঁ, তবে এখনকার সময়ের ভিত্তিতে অ্যালগরিদম কিছু লিখতে ভালো লাগছে ;)
দ্য ক্রিক

20

আমি একবার এমন অ্যাপে কাজ করেছি যা এর মতো কোড পূর্ণ ছিল:

 1 tuple *FindTuple( DataSet *set, int target ) {
 2     tuple *found = null;
 3     tuple *curr = GetFirstTupleOfSet(set);
 4     while (curr) {
 5         if (curr->id == target)
 6             found = curr;
 7         curr = GetNextTuple(curr);
 8     }
 9     return found;
10 }

সহজভাবে সরানো found, nullশেষে ফিরে আসা এবং ষষ্ঠ লাইনটি এতে পরিবর্তন করা:

            return curr;

অ্যাপ্লিকেশন কর্মক্ষমতা দ্বিগুণ।


1
আমি এমন একটি প্রতিষ্ঠানে একবার কাজ করেছি যেখানে কোডিং নির্দেশিকা "শেষে কেবলমাত্র একটি রিটার্ন" (রক্ষণাবেক্ষণের জন্য) দাবি করেছিল। এবং প্রকৃতপক্ষে আপনার মতো কিছু থুথু কোড, কারণ তারা ভাবেন না (স্পষ্ট সমাধানগুলি বেশিরভাগ সময় ছিল
প্রোট

12
এখানে একটি রিটার্ন কারার উল্লেখযোগ্যভাবে ভিন্ন আচরণ করে। আপনি যখন কারার ফিরে আসেন তখন আপনি প্রথম ম্যাচটি শেষ করেন যেখানে আপনি কোডটি আটকানো হিসাবে সর্বশেষ ম্যাচটি ফিরে আসে।
সোপবক্স

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

2
সবাই ভাল মন্তব্য। এক্ষেত্রে প্রতিটি আইডির সাথে একক টুপল থাকার কথা ছিল।
ডোর হাই আর্চ

7
এটি যদিও "হতাশা" নয়, তাই না? এটি কেবল একটি অপ্টিমাইজেশন যা হওয়ার জন্য অপেক্ষা করছে।
টিম লং

20

আমাকে একবার কোডটি সংশোধন করার চেষ্টা করতে হয়েছিল যা এই রত্নগুলিকে কনস্ট্যান্ট ক্লাসে অন্তর্ভুক্ত করেছিল

public static String COMMA_DELIMINATOR=",";
public static String COMMA_SPACE_DELIMINATOR=", ";
public static String COLIN_DELIMINATOR=":";

এগুলির প্রত্যেকে বিভিন্ন কাজে বিভিন্ন উদ্দেশ্যে প্রয়োগে একাধিকবার ব্যবহৃত হত। COMMA_DELIMINATOR 8 টি বিভিন্ন প্যাকেজের 200 টিরও বেশি ব্যবহারের সাথে কোডটি লিটারে ফেলেছে।


অন্তত এমন কিছু উত্স থেকে খুঁজে পাওয়া / প্রতিস্থাপন করা সহজ - এখনও, আমার সহানুভূতি।
এরিক ফোর্বস

12
এছাড়াও - ডিলিমিনেটর? আমি ভেবেছিলাম এটিকে 'ডিলিমিটার' বানান করা হয়েছিল। ডিলিমিনেটর 90-এর দশকের মাঝামাঝি চলচ্চিত্রের মতো শোনাচ্ছে যে কোনওরকম 3 টি সিক্যুয়াল পেয়েছে ...........
এরিক ফোর্বস

53
ডিলিমিনেটর তৃতীয়: কমা উত্থান
রব

33
অন্য একটি নোটে, আমি কলিন্সের যথাযথ সীমানা দেখে খুশি pleased তার নুনের মূল্যবান প্রতিটি প্রোগ্রামার জানে যে একটি জিনিস যদি আপনার একেবারে সঠিকভাবে আলাদা করতে হয় তবে এটি হতাশ কলিনস।
রব

2
সঠিক অনুসন্ধান এবং প্রতিস্থাপন করা এত সহজ নয়। যেহেতু প্রত্যেকে বিভিন্ন উদ্দেশ্যে ব্যবহৃত হয়। যে কোনও ভাল প্রোগ্রামার অন্তত এমন কিছু করত: COUNTRY_LIST_DELIM = ... CLASSIFICATION_DELIM = ... ইত্যাদি
কিটসুনওয়াইএমজি ২

19

সর্বকালের সর্বকালের প্রথম নম্বরটি যা আমি বারবার ইনহাউস সফ্টওয়্যারটিতে চালিত করি:

"বহনযোগ্যতা" কারণে ডিবিএমএসের বৈশিষ্ট্যগুলি ব্যবহার করা হচ্ছে না কারণ "আমরা পরে অন্য কোনও বিক্রেতার কাছে যেতে চাই"।

আমার ঠোঁট পড়ুন। যে কোনও গৃহের কাজের জন্য: এটি ঘটবে না!


9
এটা ঘটে। মাইএসকিউএল -> পোস্টগ্রেস্কল, তাই আমরা কিছুই হারাতে পারি নি।
টমাস

বা পোস্টগ্রিস / পোস্টগিস -> স্ক্লাইট / স্পেসিটালাইট ... এটি ছিল পাছায় ব্যথা ...
ফিলিপ

এটি
জুনেট

17

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

int some_method(int input1, int input2) {
    int x;
    if (input1 == -1) {
        return 0;
    }
    if (input1 == input2) {
        return input1;
    }
    ... a long expression here ...
    return x;
}

এটিতে:

int some_method() {
    return (input == -1) ? 0 : (input1 == input2) ? input 1 :
           ... a long expression ...
           ... a long expression ...
           ... a long expression ...
}

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

তারপরে, এর পরে, কোনও কারণে তিনি সিদ্ধান্ত নিয়েছিলেন যে ptr->structElementএটি খুব অপঠনযোগ্য নয়, তাই তিনি এই সমস্তটি (*ptr).structElementতত্ত্বের উপর পরিবর্তন করতে শুরু করেছিলেন যে এটি আরও পাঠযোগ্য এবং দ্রুতও was

সর্বাধিক 1% উন্নতির জন্য পঠনযোগ্য কোডটি অপঠনযোগ্য কোডে পরিণত করা এবং কখনও কখনও আসলে ধীর কোড।


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

2
@Michael: আমি, যদি না সেখানে যা নির্দেশ করে এটি ছিল পরিমাপ ছিল না would দ্রুত ঠিক না খাটো
dsimcha

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

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

15

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

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

সুতরাং এটি ঠিক করার জন্য, আমি মাল্টি-থ্রেডিং উপাদানগুলি সরিয়ে আই / ও পরিষ্কার করেছি। অন্য কোনও পরিবর্তন ছাড়াই, 150-উত্স ডেটাসেটে মৃত্যুর সময়টি আমার মেশিনে 10 মিনিটের নীচে নেমে যায় এবং অনন্ত থেকে গড় কোম্পানির মেশিনে আধ ঘন্টা পর্যন্ত যায়।


আমি আজ একটি প্রকল্পে এটি ঘটতে কেবল প্রতিরোধ। এখন আমি জানি আমি ভাল পছন্দ করেছি।
ডেডালনিক্স

14

আমি মনে করি আমি এই রত্নটি সরবরাহ করতে পারি:

unsigned long isqrt(unsigned long value)
{
    unsigned long tmp = 1, root = 0;
    #define ISQRT_INNER(shift) \
    { \
        if (value >= (tmp = ((root << 1) + (1 << (shift))) << (shift))) \
        { \
            root += 1 << shift; \
            value -= tmp; \
        } \
    }

    // Find out how many bytes our value uses
    // so we don't do any uneeded work.
    if (value & 0xffff0000)
    {
        if ((value & 0xff000000) == 0)
            tmp = 3;
        else
            tmp = 4;
    }
    else if (value & 0x0000ff00)
        tmp = 2;

    switch (tmp)
    {
        case 4:
            ISQRT_INNER(15);
            ISQRT_INNER(14);
            ISQRT_INNER(13);
            ISQRT_INNER(12);
        case 3:
            ISQRT_INNER(11);
            ISQRT_INNER(10);
            ISQRT_INNER( 9);
            ISQRT_INNER( 8);
        case 2:
            ISQRT_INNER( 7);
            ISQRT_INNER( 6);
            ISQRT_INNER( 5);
            ISQRT_INNER( 4);
        case 1:
            ISQRT_INNER( 3);
            ISQRT_INNER( 2);
            ISQRT_INNER( 1);
            ISQRT_INNER( 0);
    }
#undef ISQRT_INNER
    return root;
}

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

unsigned long isqrt(unsigned long value)
{
    unsigned long tmp = 1, root = 0;
    #define ISQRT_INNER(shift) \
    { \
        if (value >= (tmp = ((root << 1) + (1 << (shift))) << (shift))) \
        { \
            root += 1 << shift; \
            value -= tmp; \
        } \
    }

    ISQRT_INNER (15);
    ISQRT_INNER (14);
    ISQRT_INNER (13);
    ISQRT_INNER (12);
    ISQRT_INNER (11);
    ISQRT_INNER (10);
    ISQRT_INNER ( 9);
    ISQRT_INNER ( 8);
    ISQRT_INNER ( 7);
    ISQRT_INNER ( 6);
    ISQRT_INNER ( 5);
    ISQRT_INNER ( 4);
    ISQRT_INNER ( 3);
    ISQRT_INNER ( 2);
    ISQRT_INNER ( 1);
    ISQRT_INNER ( 0);

#undef ISQRT_INNER
    return root;
}

অবশ্যই এটি করার দ্রুত এবং সর্বোত্তম দুটি উপায় রয়েছে তবে আমি মনে করি এটি হতাশার একটি সুন্দর ঝরঝরে উদাহরণ।

সম্পাদনা: এটি ভাবতে আসুন, অনিয়ন্ত্রিত লুপটি আসলে একটি ঝরঝরে হতাশাও ছিল। সংস্করণ নিয়ন্ত্রণ সত্ত্বেও খনন করে, আমি পুনরুদ্ধার করার দ্বিতীয় পর্যায়েও উপস্থাপন করতে পারি, যা উপরের চেয়ে আরও ভাল অভিনয় করেছে:

unsigned long isqrt(unsigned long value)
{
    unsigned long tmp = 1 << 30, root = 0;

    while (tmp != 0)
    {
        if (value >= root + tmp) {
            value -= root + tmp;
            root += tmp << 1;
        }
        root >>= 1;
        tmp >>= 2;
    }

    return root;
}

এটি হুবহু একই অ্যালগরিদম, যদিও কিছুটা ভিন্ন বাস্তবায়ন হয়, সুতরাং আমি মনে করি এটি যোগ্যতা অর্জন করে।


আমি অনুমান isqrt()নির্ণয় floor(sqrt()), কিন্তু, কেন এই কোড কাজ করে?
পাবলো এইচ

11

এটি আপনার উচ্চতর স্তরের হতে পারে যা আপনার পরে ছিল তবে এটি ঠিক করা (যদি আপনার অনুমতি দেওয়া হয়) এটিতে উচ্চ স্তরের ব্যথাও জড়িত:

সেখানে প্রতিষ্ঠিত, পরীক্ষিত, পরিপক্ক লাইব্রেরিগুলির একটির পরিবর্তে (তারা আপনাকে দেখানোর পরেও) অবজেক্ট রিলেশনশিপ ম্যানেজার / ডেটা অ্যাক্সেস লেয়ারকে হাতছাড়া করার জন্য জোর দেওয়া।


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

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

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

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

3
প্রকৃতপক্ষে, উপরের কিছু মন্তব্য দেওয়া, আরও কিছু দৃষ্টিকোণ: অন্যরকম হতাশার চেষ্টা হল ওআরএমকে একেবারে সবকিছু করার চেষ্টা করা। এটি প্রায়শই 95% + ক্ষেত্রে কার্যকর। চূড়ান্ত 5% এর জন্য পারফরম্যান্স, সরলতা বা উভয়ের জন্য ক্র্যাফ্টেড জেদী কোড / ডাইরেক্ট স্টোরেজ প্রসেসিং কল ইত্যাদির হাতে ছেড়ে দেওয়া অনেক সহজ।
গর্ডন হার্টলি

10

ডেটাবেস থেকে সমস্ত বিদেশী-কী সীমাবদ্ধতা সরানো হয়েছে, কারণ অন্যথায় এত ত্রুটি থাকবে।


8

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


8

প্রতিটি জাভাস্ক্রিপ্ট অপারেশনের আগে যাচাই করা হচ্ছে আপনি যে বস্তুটির উপরে কাজ করছেন তা বিদ্যমান রয়েছে কিনা।

if (myObj) { //or its evil cousin, if (myObj != null) {
    label.text = myObj.value; 
    // we know label exists because it has already been 
    // checked in a big if block somewhere at the top
}

এই ধরণের কোড নিয়ে আমার সমস্যাটি কি কেউ মনে করে না যে এটির অস্তিত্ব না থাকলে কী যত্ন নেবে? শুধু কিছু না? ব্যবহারকারীকে মতামত দেবেন না?

আমি সম্মত হই যে Object expectedত্রুটিগুলি বিরক্তিকর, তবে এটির জন্য এটি সর্বোত্তম সমাধান নয়।


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

7

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


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

প্রকৃত প্রকল্পগুলির অধ্যয়নগুলি দেখায় যে এককালীন এবং রিসবেল কোডের মধ্যে প্রকৃত গুণক গড়ে প্রায় 3 হয় So সুতরাং 10 কেবলমাত্র "অনুভূত" মান, তবে আপনার উদ্দেশ্য দ্বারা সঠিক।
পিটারচেন

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

@ জেফ: আইআইআরসি তারা কিছু জটিলতা পরিমাপের তুলনা করেছে (আপনি তাদের সম্পর্কে যা কিছু মনে করেন) ইনলাইন স্নিপেটগুলি যা পৃথক পদ্ধতিতে চলে গেছে। অতিরিক্ত কেস সমর্থিত, প্যারামিটার চেকিং ইত্যাদির কারণে জটিলতা বৃদ্ধি পায় (যা আমাকে ধারণা করে যে পদ্ধতিগুলি বরং ছোট ছিল)। আমাকে একটি তথ্য খুঁজে বের করার চেষ্টা করুন।
পিটারচেন

6

ঠিক অকালীন অপ্টিমাইজেশন নয় - তবে অবশ্যই বিপথগামী - এটি উইন্ডোজ 7 নিয়ে আলোচনা করা একটি নিবন্ধ থেকে বিবিসির ওয়েবসাইটে পড়েছিল।

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

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


আপনি সম্ভবত দেখতে পাবেন যে অন্যান্য সমস্যাগুলি বিবিসি ওয়েবসাইটে নন-প্রোগ্রামারগুলিকে বোঝানো তত সহজ নয়।
টম লেস

এখন এটি এমন একটি কোণ যা আমি বিবেচনা করি নি - সম্ভবত আমি আমার
কুৎসিততা

সেই 400 এমএস হ'ল 400 এমএস পাওয়ার ড্র। সম্ভবত তুচ্ছ, তবে এটি সময়ের সাথে যুক্ত হতে পারে। তবুও, এমন কিছু নয় যা আমি উদ্বিগ্ন।
ZachS

1
এক্সপি ভিএমগুলি বন্ধ হয়ে যাওয়ার জন্য অপেক্ষা করতে করতে আমি প্রচুর ঘন্টা হারিয়েছি যাতে আমি পরের জিনিসটিতে যেতে পারি। আমি দ্রুত বন্ধের জন্য খুব কৃতজ্ঞ।
জেমস

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

6

আমার বিভাগের কেউ একবার স্ট্রিং ক্লাস লিখেছিল। মত একটি ইন্টারফেস CString, কিন্তু উইন্ডোজ নির্ভরতা ছাড়া।

একটি "অপ্টিমাইজেশন" তারা করেছিল তা হল প্রয়োজনের চেয়ে আরও মেমরি বরাদ্দ না করা। স্পষ্টতই বুঝতে পারছেন না যে std::stringঅতিরিক্ত ক্লাসগুলি অতিরিক্ত মেমরি বরাদ্দ করার কারণটি যাতে +=অপারেশনগুলির একটি ক্রম ও (এন) সময়ে চলতে পারে।

পরিবর্তে, প্রতিটি একক +=কল পুনরায় স্থানান্তর করতে বাধ্য করে , যা বারবার সংযোজনকে ও (শৃঙ্খলাবদ্ধ) চিত্রকের আলগোরিদিম হিসাবে পরিণত করে


5

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


3
এটি কোনও অকালীন অপটিমাইজেশন নয়, তিনি ভেবেছিলেন যে সঠিকতার জন্য তার এটি করা দরকার
পাইরোলিস্টিকাল

অবশ্যই, তিনি ভেবেছিলেন যে তাঁর এটির প্রয়োজন ছিল, তবে বেশিরভাগ ডিবিএমএসের কিছুটা ডায়াফোউইক (টাইমস্ট্যাম্প) ফাংশন রয়েছে, তাই এই জগাখিচুড়ি করা আমার মতে
অকালকাল

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

ঠিক আছে আমি জানি না এত সারি ছিল কিনা, তবে অবশ্যই এটি ব্যাখ্যাটি দেওয়া হয়নি :)
জোরিল

3

কারও জন্য কোনও অপরাধ নেই, তবে আমি কেবল একটি এসাইনমেন্ট (জাভা) গ্রেড করেছি যাতে এটি ছিল

import java.lang.*;

1
যদি না এটি উচ্চ স্তরের শ্রেণি না হয় তবে আমি মনে করি আপনি এই ছাত্রকে কিছুটা ckিলা কাটাতে হবে যদি না আপনি তাকে কেন এটি ভাল ধারণা না তা জানতে যথেষ্ট পরিমাণ শিক্ষা না দিয়ে থাকেন।
ব্রায়ান ওকলি

24
একজন শিক্ষার্থীর কোডে ডাব্লুটিএফকে কল করা একজন শিক্ষকের বিড়বিড়তাটি আমি কী একাই লক্ষ করতে যাচ্ছি যে সে সঠিকভাবে প্রোগ্রামিং শেখানোর জন্য দায়বদ্ধ?
জনএফএক্স

3
হ্যাঁ, আমি দেখতে পাচ্ছি না যে এতে ক্ষতি হবে। সবচেয়ে খারাপ এটি surpurfluous। শিক্ষার্থীরা শিখার সময় কঠোর ধারাবাহিকতা অবলম্বন করে এবং জাভা.লাং আমদানি করে শিক্ষার্থী আমদানি সম্পর্কে যা শিখেছে তার সাথে দৃid়ভাবে সামঞ্জস্যপূর্ণ।
সাইগিল

1
আমাকে স্পষ্ট করে বলার জন্য আপনাকে সকলকে ধন্যবাদ। এটি একটি গণনামূলক জীববিজ্ঞানের অ্যাসাইনমেন্ট ছিল এবং আমি এটি গণনা করি না, এমনকি এটি উল্লেখও করি না।
ওভারফ্লাউন

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