𝗛𝗮𝘃𝗲 𝗪𝗲 𝗟𝗼𝘀𝘁 𝘁𝗵𝗲 𝗔𝗿𝘁 𝗼𝗳 𝗣𝘂𝗿𝗲 𝗢𝗽𝘁𝗶𝗺𝗶𝘇𝗮𝘁𝗶𝗼𝗻?
শুরুর দিকের ইঞ্জিনিয়াররা অত্যন্ত সীমিত পরিসরে কাজ করতেন। Apollo Guidance Computer-এ ছিল মাত্র 2KB RAM। প্রতিটি বিট ছিল গুরুত্বপূর্ণ। প্রতিটি CPU সাইকেল ছিল অপরিহার্য।
আজ আমাদের কাছে গিগাবাইট মেমরি রয়েছে। আমরা প্রায়ই আরও হার্ডওয়্যার যোগ করে সমস্যার সমাধান করি। কোড যদি ধীরগতির বা ভারী হয়, তবে আমরা আরও RAM যোগ করি। এই অভ্যাস আমাদের বিশুদ্ধ অপ্টিমাইজেশনের দক্ষতা হারিয়ে ফেলতে বাধ্য করছে।
সীমাবদ্ধতা বা কনস্ট্রেইন্টস (constraints) নিয়ে চিন্তা করার মাধ্যমে আপনি আরও উন্নত সফটওয়্যার লিখতে পারেন।
পাইথনে (Python) একটি বড় টেক্সট ফাইল কীভাবে প্রসেস করেন তা দেখুন।
সাধারণ পদ্ধতি: অনেক ডেভেলপার একসাথে একটি সম্পূর্ণ ফাইল মেমরিতে রিড (read) করেন।
- আপনি
f.readlines()ব্যবহার করেন। - এটি আপনার RAM-এ প্রতিটি লাইন একটি লিস্ট হিসেবে লোড করে।
- আপনার ফাইলটি যদি 10GB হয়, তবে আপনার 10GB RAM প্রয়োজন হবে।
- ছোট সার্ভার বা সীমিত ক্ষমতার ডিভাইসে এই পদ্ধতিটি ব্যর্থ হয়।
অপ্টিমাইজড পদ্ধতি: ফাইলটি একবারে একটি করে লাইন প্রসেস করুন।
- আপনি সরাসরি ফাইল অবজেক্টের ওপর ইটারেট (iterate) করেন।
- Python একটি লাইন পড়ে, সেটি প্রসেস করে এবং পরের লাইনে চলে যায়।
- আপনার মেমরি ব্যবহার কম এবং স্থিতিশীল থাকে।
- ফাইলটি 1MB হোক বা 100GB, এতে কোনো পার্থক্য পড়ে না।
এই পার্থক্যটি মূলত ইঞ্জিনিয়ারিং ফিলোসফির (engineering philosophy)।
অতিরিক্ত রিসোর্স যোগ করা একটি সাময়িক সমাধান মাত্র। এটি ভঙ্গুর (fragile) সফটওয়্যার তৈরি করে। আপনার ডিজাইনকে সীমাবদ্ধতার মাধ্যমে পরিচালিত করা একটি শক্তিশালী (robust) সফটওয়্যার তৈরি করে।
অপ্টিমাইজেশন মানে কেবল গতি বাড়ানো নয়। এটি আপনার রিসোর্স বা সম্পদের প্রতি সচেতন হওয়া।
কোড লেখার সময় নিজেকে প্রশ্ন করুন:
- এটি কতটুকু মেমরি ব্যবহার করছে?
- ডেটা যদি দশ গুণ বেড়ে যায়, তবে কি এটি কাজ করবে?
- আমি কি খারাপ কোড আড়াল করার জন্য দামী হার্ডওয়্যারের ওপর নির্ভর করছি?
উন্নত সফটওয়্যার আসে শৃঙ্খলা থেকে।
উৎস: https://dev.to/prabashanadev/have-we-lost-the-art-of-pure-optimization-31b9