আমি প্রায়শই এই উদ্ধৃতিটি স্পষ্টত খারাপ কোড বা কোডকে ন্যায়সঙ্গত করতে ব্যবহার করতে দেখেছি যেহেতু এর কার্য সম্পাদন পরিমাপ করা হয়নি, কোডের আকার বাড়াতে বা পাঠযোগ্যতার সাথে আপোষ না করে সম্ভবত খুব সহজেই তৈরি করা যেতে পারে।
সাধারণভাবে, আমি মনে করি প্রাথমিক মাইক্রো অপ্টিমাইজেশানগুলি একটি খারাপ ধারণা হতে পারে। তবে ম্যাক্রো-অপটিমাইজেশন (ও (লগ এন) এর পরিবর্তে ও (এন ^ 2) এর পরিবর্তে অ্যালগরিদম পছন্দ করার মতো জিনিসগুলি) বেশিরভাগ ক্ষেত্রে সার্থক হয় এবং তাড়াতাড়ি করা উচিত, যেহেতু এটি একটি (এন ^ 2) অ্যালগরিদম লিখতে অপ্রয়োজনীয় হতে পারে এবং তারপরে এটি একটি ও (লগ এন) পদ্ধতির পক্ষে পুরোপুরি ফেলে দিন।
উল্লেখ্য শব্দ হতে পারে : যদি O (n ^ 2) অ্যালগরিদম সহজ ও লিখতে সহজ হয়, তাহলে আপনি এটি দূরে পরে অনেক অপরাধবোধ ছাড়া নিক্ষেপ করতে পারেন এটি সক্রিয় আউট অত্যন্ত ধীর যাবে। তবে যদি উভয় অ্যালগরিদম একইরকম জটিল হয়, বা যদি প্রত্যাশিত কাজের চাপ এত বড় হয় যে আপনি ইতিমধ্যে জানেন যে আপনার আরও দ্রুত প্রয়োজন হবে, তবে তাড়াতাড়ি অনুকূলিতকরণ করা একটি সাউন্ড ইঞ্জিনিয়ারিংয়ের সিদ্ধান্ত যা আপনার দীর্ঘ সময়ের জন্য মোট কাজের চাপকে হ্রাস করবে।
সুতরাং, সাধারণভাবে, আমি মনে করি সঠিক কোড হ'ল আপনি কোড লেখা শুরু করার আগে আপনার বিকল্পগুলি কী তা সন্ধান করতে এবং সচেতনতার সাথে আপনার পরিস্থিতির জন্য সেরা অ্যালগরিদম চয়ন করতে পারেন। সবচেয়ে বড় কথা, "অকাল অপটিমাইজেশন সমস্ত অশুভের মূল" এই শব্দটি অজ্ঞতার কোনও অজুহাত নয়। কেরিয়ার বিকাশকারীদের সাধারণ অপারেশনগুলির জন্য কত ব্যয় হয় তার একটি সাধারণ ধারণা থাকতে হবে; তাদের জানা উচিত, উদাহরণস্বরূপ,
- স্ট্রিংগুলির সংখ্যাগুলির চেয়ে বেশি দাম
- গতিশীল ভাষা স্ট্যাটিকালি টাইপ করা ভাষার চেয়ে ধীর গতিতে থাকে
- লিঙ্কযুক্ত তালিকার উপরে অ্যারে / ভেক্টর তালিকার সুবিধা এবং বিপরীতে vice
- কখন হ্যাশটেবল ব্যবহার করতে হবে, কখন বাছাই করা মানচিত্র ব্যবহার করতে হবে এবং কখন একটি গাদা ব্যবহার করতে হবে
- যে (যদি তারা মোবাইল ডিভাইসগুলি নিয়ে কাজ করে) "ডাবল" এবং "ইনট" এর ডেস্কটপগুলিতে একই রকম পারফরম্যান্স থাকে (এফপি এমনকি দ্রুততরও হতে পারে) তবে এফপিইউগুলি ছাড়াই লো-এন্ড মোবাইল ডিভাইসে "ডাবল" কয়েকগুণ ধীর হতে পারে;
- যে ইন্টারনেটের মাধ্যমে ডেটা স্থানান্তরিত হয় এইচডিডি অ্যাক্সেসের চেয়ে ধীর, এইচডিডিগুলি র্যামের তুলনায় অনেক ধীরে ধীরে, র্যাম এল 1 ক্যাশে এবং রেজিস্টারের তুলনায় অনেক ধীর হয় এবং ইন্টারনেট ক্রিয়াকলাপ অনির্দিষ্টকালের জন্য অবরুদ্ধ হতে পারে (এবং যে কোনও সময় ব্যর্থ হয়)।
এবং বিকাশকারীদের ডেটা স্ট্রাকচার এবং অ্যালগরিদমের একটি সরঞ্জামবক্সের সাথে পরিচিত হওয়া উচিত যাতে তারা কাজের জন্য সঠিক সরঞ্জামগুলি সহজেই ব্যবহার করতে পারে।
প্রচুর পরিমাণে জ্ঞান এবং একটি ব্যক্তিগত সরঞ্জামবক্স থাকা আপনাকে প্রায় অনায়াসে অনুকূলিত করতে সক্ষম করে। একটি অপ্টিমাইজেশান যে অপ্রয়োজনীয় হতে পারে মধ্যে প্রচেষ্টার অনেক ফেলে হয় মন্দ (এবং আমি যে ফাঁদ একাধিকবার মধ্যে পতিত মানা)। তবে যখন অপ্টিমাইজেশন অ্যারের পরিবর্তে একটি সেট / হ্যাশটেবল বাছাই করা বা স্ট্রিং [] এর পরিবর্তে ডাবল [] সংখ্যার একটি তালিকা সঞ্চয় করার মতো সহজ , তবে কেন নয়? আমি এখানে নূথের সাথে একমত নই, আমি নিশ্চিত নই, তবে আমার ধারণা তিনি নিম্ন-স্তরের অপ্টিমাইজেশনের কথা বলছিলেন যেখানে আমি উচ্চ-স্তরের অপ্টিমাইজেশনের কথা বলছি।
মনে রাখবেন যে উক্তিটি মূলত 1974 সালের। 1974 সালে কম্পিউটারগুলি ধীর ছিল এবং কম্পিউটিং শক্তি ব্যয়বহুল ছিল, যা কিছু বিকাশকারীকে লাইন-লাইন লাইনকে overoptimize করার প্রবণতা দেয়। আমার মনে হয় নূথ এটার বিরুদ্ধে চাপ দিচ্ছিলেন। তিনি "পারফরম্যান্স নিয়ে মোটেও উদ্বিগ্ন হবেন না" বলছিলেন না, কারণ 1974 সালে এটি কেবল উন্মাদ আলাপ হবে। নুথ কীভাবে অনুকূলিত করবেন তা ব্যাখ্যা করছিলেন ; সংক্ষেপে, একমাত্র কেবল বাধাগুলিতে ফোকাস করা উচিত, এবং এটি করার আগে আপনাকে বাধাগুলি খুঁজে পেতে অবশ্যই পরিমাপ করা উচিত।
নোট করুন যে আপনি পরিমাপের জন্য কোনও প্রোগ্রাম না লিখে অবধি বাধা খুঁজে পেতে পারেন না, যার অর্থ কিছু পরিমাপ করার আগে কিছু পারফরম্যান্সের সিদ্ধান্ত নেওয়া উচিত । কখনও কখনও এই সিদ্ধান্তগুলি ভুল হয়ে থাকলে পরিবর্তন করা কঠিন। এই কারণে, কোন হার্ড ডেটা উপলভ্য না হলে আপনি কি যুক্তিসঙ্গত সিদ্ধান্ত নিতে পারেন তার জন্য কী জিনিসগুলির জন্য ব্যয় হয় সে সম্পর্কে একটি সাধারণ ধারণা রাখা ভাল।
কত তাড়াতাড়ি অপ্টিমাইজ করা যায়, এবং কর্মক্ষমতা সম্পর্কে কতটা চিন্তা করতে হয় তা নির্ভর করে কাজের উপর। এমন স্ক্রিপ্টগুলি লেখার সময় যে আপনি কেবল কয়েকবার চালাবেন, পারফরম্যান্স নিয়ে চিন্তিত হ'ল সাধারণত সময় নষ্ট করা। তবে আপনি যদি মাইক্রোসফ্ট বা ওরাকল এর পক্ষে কাজ করেন এবং আপনি এমন একটি লাইব্রেরিতে কাজ করছেন যা হাজার হাজার অন্যান্য বিকাশকারী হাজার হাজার বিভিন্ন উপায়ে ব্যবহার করছেন, তবে এর থেকে নরকটিকে আরও অনুকূল করে তোলার জন্য অর্থ প্রদান করা যেতে পারে, যাতে আপনি সমস্ত বৈচিত্র্য কভার করতে পারেন দক্ষতার সাথে কেস ব্যবহার করুন। তবুও, পারফরম্যান্সের প্রয়োজনীয়তা পাঠযোগ্যতা, রক্ষণাবেক্ষণযোগ্যতা, কমনীয়তা, এক্সটেনসিবিলিটি ইত্যাদির প্রয়োজনের তুলনায় সর্বদা ভারসাম্যপূর্ণ হতে হবে।