খুব তাড়াতাড়ি অপটিমাইজ করা এত খারাপ কেন?


168

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

আমি সত্যিই এটি বুঝতে পারি না, গেমের মূল কাঠামোর কয়েকটি পরিবর্তন করা কি অবিশ্বাস্যরকমই কঠিন হবে না, বরং প্রথমবারের সাথে তাদের কর্মক্ষমতা মাথায় রেখে বিকাশ করা?

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

খুব তাড়াতাড়ি অপ্টিমাইজ করা কেন এমন খারাপ ধারণা কেন কেউ আমাকে ব্যাখ্যা করতে পারেন?


মন্তব্যগুলি বর্ধিত আলোচনার জন্য নয়; এই কথোপকথন চ্যাটে সরানো হয়েছে ।
জোশ

3
এর উত্তর দেওয়া সহজ হতে পারে না: "এটি সময় নষ্ট করে"। আপনি পাশাপাশি জিজ্ঞাসা করতে পারেন "কেনাকাটার সময় অর্থ সঞ্চয় করার চেষ্টা করবেন?"
ফ্যাটি

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

2
বিকাশের সময় আপনার অ্যাপ্লিকেশনটির সময় শ্রেণীর অনুকূলকরণ একটি লুপের বাইরে কয়েকটি নির্দেশাবলী শেভ করার চেষ্টা করার চেয়ে অনেকটাই আলাদা যা সাধারণত ধ্রুবক সময়। O (n) বনাম O (n লগ এন) এর পরিবর্তে ফোকাস করুন, "এইভাবে লুপের জন্য একটি লিখতে একটি সিপিইউ নির্দেশনা সংরক্ষণ করে"।

1
@ ফাইরফক্স আসলে, বোঝার সময় হ্রাস করা আমার কাছে আরও চিত্তাকর্ষক বলে মনে হয়। তিন সেকেন্ডের লোডের সময়টি লক্ষণীয়। 55fps থেকে 60fps লক্ষণীয় কিনা তা আমি নিশ্চিত নই।
ইমিগ্রিস

উত্তর:


237

প্রস্তাবনা:

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

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

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

এর অর্থ, যখন সন্দেহ হয় , আমাদের উচিত:

  • এমন কোড পছন্দ করুন যা লেখার জন্য সহজ, বোঝার জন্য পরিষ্কার এবং প্রারম্ভিকদের জন্য সংশোধন করা সহজ

  • আরও অপ্টিমাইজেশন প্রয়োজন কিনা তা পরীক্ষা করে দেখুন (সাধারণত চলমান প্রোগ্রামটি প্রোফাইল করে, যদিও নোটের নীচে একটি মন্তব্য গাণিতিক বিশ্লেষণ করে - আপনার একমাত্র ঝুঁকিই আপনার পরীক্ষা করা উচিত যে আপনার গণিতটি সঠিক কিনা)

অকাল অপটিমাইজেশন হয় না :

  • আপনার কোডটি এমনভাবে গঠন করার জন্য আর্কিটেকচারাল সিদ্ধান্তগুলি যা আপনার প্রয়োজনগুলিতে স্কেল করবে - বিবেচিত উপায়ে উপযুক্ত মডিউল / দায়িত্ব / ইন্টারফেস / যোগাযোগ ব্যবস্থা বেছে নিন।

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

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

এই সমস্ত ধরণের অপ্টিমাইজেশন যথাযথভাবে ন্যায়সঙ্গত এবং সাধারণভাবে "অকাল" হিসাবে চিহ্নিত করা হবে না (যদি না আপনি 8x8 চেসবোর্ড মানচিত্রের কাটিং-এজ পাথ ফাইন্ডিং বাস্তবায়নকারী খরগোশের গর্তে নামেন ...)

সুতরাং এখন এটি পরিষ্কার হয়ে যাওয়ার সাথে সাথে আমরা কেন এই নীতিটি বিশেষত গেমগুলিতে দরকারী হতে পারি:


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

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

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

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

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

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

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

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


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

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

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

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

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

42

দ্রষ্টব্য: এই উত্তরটি ডিএমগ্রিগরির উত্তরের মন্তব্য হিসাবে শুরু হয়েছিল এবং তাই তিনি যে খুব ভাল পয়েন্ট করেছেন তার সদৃশ হয় না।

"গেমের মূল কাঠামোর কয়েকটি পরিবর্তন করা কি অবিশ্বাস্যরকমই কঠিন হবে না, বরং প্রথমবারের মতো পারফরম্যান্সকে মাথায় রেখে উন্নয়নের চেয়ে?"

এটি আমার কাছে প্রশ্নের উত্স cru

আপনার আসল নকশা তৈরি করার সময়, আপনার দক্ষতার জন্য - শীর্ষ স্তরে নকশা করার চেষ্টা করা উচিত । এটি কম অপ্টিমাইজেশন, এবং কাঠামো সম্পর্কে আরও বেশি।

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

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

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

বিকল্প:

  • দ্বিতীয় ফেরি কিনুন (সমান্তরাল প্রক্রিয়াজাতকরণ)
  • ফেরিতে আরেকটি গাড়ি ডেক যুক্ত করুন (ট্র্যাফিকের সংকোচন)
  • ফেরির ইঞ্জিনটিকে দ্রুত তৈরি করতে আপগ্রেড করুন (পুনরায় লিখিত প্রক্রিয়াকরণ অ্যালগরিদম)

এটিই আপনার মূল নকশাটি যতটা সম্ভব মডুলার করার চেষ্টা করা উচিত।
উপরের সমস্তগুলিই সম্ভাব্য অপটিমাইজেশন এবং আপনি তিনটি এমনকি করতে পারেন।
তবে আপনি কীভাবে বড় কাঠামোগত পরিবর্তন ছাড়াই এই পরিবর্তনগুলি করেন?

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

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

TL; ড:

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

তারপরে আপনি অনুকূলিতকরণের প্রয়োজন হলে সম্পূর্ণ কোডবেস পুনর্গঠন না করে প্রতিটি মডিউলটির মধ্যে থাকা ব্যবস্থাগুলি পরিবর্তন করতে পারেন।


16
শুরুতে আপনি আপনার ফেরিটিকেও এর মতো করে প্রয়োগ করতে পারেন IRiverCrossingএবং যখন এটি স্পষ্ট হয়ে যায় যে ফেরি স্থাপনের জন্য ট্র্যাফিকের পরিমাণ খুব দুর্দান্ত, সেতুটি IRiverCrossingএটির মতো বাস্তবায়ন করুন এবং এতে ফেলে দিন course অবশ্যই বাহ্যিক কৌশলটি ফেরির বাহ্যিক এপিআই হ্রাস করছে ব্রিজ এবং সাধারণ কার্যকারিতা যাতে সেগুলি একই ইন্টারফেসের দ্বারা প্রতিনিধিত্ব করতে পারে।
মিঃমিন্দর

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

2
এই দিনগুলিতে ওওপ কেন এত গুরুত্বপূর্ণ তা খুব সুন্দর উদাহরণ।
জেইমি Gallego

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

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

24

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

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

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

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

আপনি এমন একটি গেমটি বিবেচনা করুন যা আপনি করতে চান। সত্যই কি এমন কোনও প্রযুক্তিগত অলৌকিক ঘটনা রয়েছে যা সেই খেলাটিকে ভেঙে দেয় বা ভেঙে দেয়? হতে পারে আপনি অসীম বিশ্বের একটি মুক্ত-বিশ্ব গেমের কল্পনা করছেন। আসলেই কি এই খেলার কেন্দ্রীয় অংশ? গেমটি কি কেবল এগুলি ছাড়া কাজ করবে না? হতে পারে আপনি এমন একটি খেলা সম্পর্কে ভাবছেন যেখানে অঞ্চলটি সীমা ছাড়াই বিকৃতযোগ্য, বাস্তববাদী ভূতত্ত্ব এবং এই জাতীয় সাথে; আপনি কি এটি একটি ছোট সুযোগ নিয়ে কাজ করতে পারেন? এটি 3D এর পরিবর্তে 2 ডি তে কাজ করবে? যত তাড়াতাড়ি সম্ভব কিছু মজা পান - এমনকি যদি অপ্টিমাইজেশানগুলির জন্য আপনার বিদ্যমান কোডের একটি বিশাল অংশটি পুনরায় কাজ করা প্রয়োজন হয় তবে এটি মূল্যবান হতে পারে; এবং আপনি এমনকি বুঝতে পারেন যে জিনিসগুলি আরও বড় করা গেমটি আরও ভাল করে না।

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

বেল্টগুলির সাথে খুব সুন্দর কিছু করার জন্য বেল্টগুলি অপ্টিমাইজ করার অনুমতি দেওয়ার জন্য পুনরায় তৈরি করতে হয়েছিল। এবং বেল্টগুলি অপ্টিমাইজ করা প্রয়োজন, কারণ আপনার একটি বড় কারখানার জন্য প্রচুর পরিমাণে বেল্টের প্রয়োজন ছিল এবং বড় কারখানাগুলি গেমটির এক আকর্ষণ tion সর্বোপরি, যদি আপনার বড় কারখানা না থাকতে পারে তবে কেন একটি অনন্ত বিশ্ব রয়েছে? মজার আপনার জিজ্ঞাসা করা উচিত - প্রারম্ভিক সংস্করণগুলি নয় :) গেমটি পুনরায় তৈরি হয়েছিল এবং এখন কোথায় রয়েছে তা পেতে পুনরায় আকার পরিবর্তন করেছিল - যখন তারা বুঝতে পেরেছিল যে জাভা কোনও পথের দিকে যাওয়ার উপায় নয় তখন 100% গ্রাউন্ড-আপ রিমেক সহ including এই জাতীয় খেলা এবং সি ++ এ স্যুইচ করা হয়েছে। এবং এটি ফ্যাক্টোরিওর পক্ষে দুর্দান্ত কাজ করেছে (যদিও এটি এখনও ভাল জিনিস ছিল তবে তা গেটওয়ে থেকে অনুকূলিত হয়নি - বিশেষত যেহেতু এটি একটি শখের প্রকল্প ছিল, যা আগ্রহের অভাবে অন্যথায় ব্যর্থ হতে পারে)।

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

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

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


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

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

@ ফ্যাটি তাই আপনি প্রশ্নটি বুঝতে পারছেন, তবে উত্তরটি নয়? আপনি কি কেবল বলার চেষ্টা করছেন যে একটি সহজ উত্তর সম্ভব (যেমন "অর্থনীতি")? আপনার মন্তব্যটি গঠনমূলক হওয়ার কথা বলে আমি দেখতে পাচ্ছি না।
লুয়ান

2
@ ফ্যাটি যদি আপনি মনে করেন যে উত্তরটি "বাধা কী তা কেবল একবারই জানা যায়" তবে এটি একটি উত্তর হিসাবে পোস্ট করুন। আপনি ইতিমধ্যে একটি ভাল উত্তরের প্রয়োজন হতে অনেক বেশি শব্দ ব্যয় করেছেন, তাই এগিয়ে যান। কোন ধরণের অপ্টিমাইজেশন জিনিসগুলি আরও ভাল এবং খারাপ করে না? আমি অবশ্যই কখনও দেখিনি। আমি যে মৌলিক বিষয়টির কথা বার বার বলছি তা হ'ল এটি সর্বদা বাণিজ্য-বন্ধ time এমন সময় যা অন্য কোথাও ভালভাবে ব্যয় করতে পারে, জটিলতা যা আপনার নমনীয়তা সীমাবদ্ধ করে ... উদাহরণগুলি নির্দেশ করে যে "প্রথম" কোনও পরম শব্দ নয়; প্রথম দিন থেকে কিছু অপটিমাইজেশন প্রয়োজন, অন্যরা ক্ষতিকর।
লুয়ান

1
@ ফ্যাটি "কেবলমাত্র যখন বুঝতে পারেন যে বাধাটি কী" তখনই অনুকূলিতকরণের উত্তর "" কখন আমার অনুকূলিত হওয়া উচিত? " এবং "খুব তাড়াতাড়ি অনুকূলকরণ করা এত খারাপ কেন?" এর কোনও উত্তর নয়
ইমিগ্রিস

10

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

পলিওমিনোসের সাহায্যে আমার দৃষ্টিকোণটি বিশদ দেওয়ার চেষ্টা করার সাথে সাথে আমাকে হাস্যরস করুন।

ধরা যাক আমরা যে ফ্রেমওয়ার্ক বা ইঞ্জিন নিয়ে কাজ করছি তার দ্বারা নির্দিষ্ট কিছু সীমানা রয়েছে।

এখানে চিত্র বর্ণনা লিখুন

তারপরে আমরা গেমটির মতো আমাদের প্রথম স্তর / মডিউলটি তৈরি করতে এগিয়ে যাই।

এখানে চিত্র বর্ণনা লিখুন

এগিয়ে চলতে আমরা আমাদের দ্বিতীয় স্তর / মডিউলটি তৈরি করি।

এখানে চিত্র বর্ণনা লিখুন

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

এখানে চিত্র বর্ণনা লিখুন

নিখুঁত, এখন অ্যাপ্লিকেশনটি আমাদের কাছে উপলব্ধ সংস্থানগুলি পুরোপুরি ব্যবহার করছে, অ্যাপ্লিকেশনটি আরও ভাল, ঠিক আছে?

আমরা আমাদের অ্যাপ্লিকেশনটির তৃতীয় স্তর / মডিউলটি তৈরি করতে এগিয়ে চলেছি এবং হঠাৎ আমরা একটি উপলব্ধিতে পৌঁছে যাই (সম্ভবত এমন একটি এমনকি আমরা প্রাথমিক পরিকল্পনার সময় আগেই জানতে পারি না) যে তৃতীয় স্তর / মডিউলটি আমাদের পক্ষে কাজ করছে না।

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

সুতরাং আমরা সব একসাথে ...

এখানে চিত্র বর্ণনা লিখুন

হুঁ, আপনি কি দেখতে পাচ্ছেন?

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

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

এখানে চিত্র বর্ণনা লিখুন

এবং আমাদের সিস্টেমের সর্বনিম্ন স্তরের সামঞ্জস্য করা আর সম্ভব হয় না যেহেতু এটি অন্যান্য সমস্ত স্তরের নীচে চাপা পড়েছে।

তবে, যদি আমরা তাৎক্ষণিকভাবে এটির অনুকূলিতকরণের জন্য আমাদের তাগিদ দিয়ে অপেক্ষা করতে পছন্দ করি তবে আমরা এরকম কিছু দিয়ে শেষ করতে পারতাম:

এখানে চিত্র বর্ণনা লিখুন

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

এখানে চিত্র বর্ণনা লিখুন

আশা করি আপনারা কমপক্ষে কারও কারও এটি পড়ার মতো মজা পেয়েছিলেন যেমনটি আমি এটি তৈরি করতে মজা পেয়েছিলাম :) এবং যদি আপনি এখন মনে করেন যে বিষয়টিতে আপনার আরও ভাল উপলব্ধি রয়েছে - তবে আরও ভাল।


3
আমি বিজ্ঞাপনটি সরিয়ে দিচ্ছি। আপনি কীভাবে চিত্রগুলি তৈরি করেছেন তা আমরা বিবেচনা করি না; শুধুমাত্র গুরুত্বপূর্ণ অংশটি অনুমান করা হয় যে সেগুলি পোস্ট করার অধিকার আপনার রয়েছে।
জেনমলক

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

2
আমি মনে করি এই চাক্ষুষ রূপকটি অত্যন্ত কার্যকর। প্রশ্নের উত্তর দেওয়ার দুর্দান্ত পদ্ধতির! :)
ডিএমগ্রিগরি

8

মানি।

এটি যে নেমে আসে। মানি। যেহেতু সময় অর্থ * হয়, তত বেশি সময় আপনি এমন ক্রিয়াকলাপগুলিতে ব্যয় করেন যা বেশি অর্থ উপার্জনের গ্যারান্টিযুক্ত নয় (যেমন আপনি এই ক্রিয়াকলাপগুলিকে বিনিয়োগ হিসাবে বিবেচনা করতে পারবেন না ), আপনার যে পরিমাণ অর্থ নষ্ট হওয়ার ঝুঁকি রয়েছে, এবং কম অর্থের সাহায্যে আপনি অর্থ উপার্জন করবেন খেলাাটি.

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

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

* অন্যান্য উত্তরগুলি যথেষ্ট পরিমাণে 'সময়' অংশটি হাইলাইট করেছে


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

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


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

3
@ জেবেন্টলি এটিকে ডিএমগ্রিগরির উত্তরের সংযোজন হিসাবে বিবেচনা করুন।
আলেকজান্দ্রে ভায়ল্যানকোর্ট

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

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

6

সংজ্ঞা অনুসারে অপ্টিমাইজেশন হ'ল সমাধানের কার্যক্ষমতা বৃদ্ধি করার প্রক্রিয়াটি যেখানে এটির কার্যকারিতা হ্রাস পায়। এই প্রক্রিয়াটি তখন সমাধানের স্থান হ্রাস করার বিষয়টি বোঝায়।

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

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

সমাধানের আসল স্থানটি শুরুতে আমরা যা প্রত্যাশা করি তার চেয়ে সর্বদা বড় কারণ আমাদের খুব জটিল সিস্টেম সম্পর্কে নিখুঁত জ্ঞান থাকতে পারে না।

প্রথমে এটি কাজ করুন। তারপরে দড়িগুলি শক্ত করুন।


2
আমি মনে করি "কার্যকারিতা" আপনি যে শব্দটির জন্য যাচ্ছেন তা নয় - এর অর্থ "একটি প্রভাব তৈরি করার শক্তি", সুতরাং এক অর্থে, অনুকূলতা হ'ল কার্যকারিতা বাড়ানো সম্পর্কে । আপনি কার্যকারিতার নির্দিষ্ট সংস্করণে যাচ্ছেন? (আপনি কি এর সাথে লিঙ্ক করতে পারেন?) আপনি কি পরিবর্তে নমনীয়তার মতো কিছু বোঝাতে চান?
ডপপেলগ্রিনিয়ার

2
@ ডপপেলগ্রিনার এর অর্থ এটি আপনি যতটা প্রভাব ফেলতে না
পারছেন

1
"প্রথমে এটি কাজ করুন Then তারপরে দড়িগুলি শক্ত করুন" " - এটি উত্তর মিলিত হিসাবে যতটা মূল্যবান হতে হবে। এবং না বলে অন্য জিনিসগুলি ভাল ছিল না।
ebyrob

1
@ebyrob: আরেকটা বলছে ", এটা ঠিক করতে, এটি কাজ করা এটি দ্রুত করতে" wiki.c2.com/?MakeItWorkMakeItRightMakeItFast
ninjalj

@ নিনজালজ এটিও বেশ ভাল। অবশ্যই, আমার বস আমাকে সর্বদা বলেন: "তাড়াহুড়ো করবেন না, এটি ঠিক করুন" " সুতরাং আপনি জানেন না যে আপনি যা বলছেন ঠিক তেমনি সর্বজনীন কিনা মূল পোস্টারটি আরও বিশদে অনুরোধ করছে।
ebyrob

2

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

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

সাধারণভাবে, কেবলমাত্র এই মুহূর্তে আপনি যদি উন্নয়ন বিল্ডের সাথে সত্যিই কাজ করতে না পারেন তবেই অনুকূলিত হন। আপনি যদি প্রতি সেকেন্ডে times০ বার লক্ষ লক্ষ বস্তু তৈরি এবং মুছছেন এমনটি পছন্দ করুন।

সুতরাং, আমি বলছি এটি ভাল, শিক্ষার অভিজ্ঞতার দিক থেকে, কয়েক বার শুরুর দিকে: পি


2

অপ্টিমাইজেশন কোডটিতে কম্পিউটারের কাজকে সর্বোত্তম করে তোলার দিকে দৃষ্টি নিবদ্ধ করে যখন বিকাশের কোডটিতে প্রোগ্রামারকে সর্বোত্তম কাজ করা প্রয়োজন।

অপ্টিমাইজেশন অন্তর্দৃষ্টি খুঁজে না। এটি কম্পিউটারের কাজ কম করে এবং প্রোগ্রামারকে আরও বেশি করে তোলে।

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


অপ্টিমাইজেশন সংজ্ঞায়িত করার পরিবর্তে এবং গেম বিকাশের ব্যবহারিক পরিস্থিতি সম্পর্কে কথা বলার পরিবর্তে গাড়ি সম্পর্কিত উপায়ে যাওয়ার পরিবর্তে অন্য কিছু নিয়ে নেতৃত্ব দেওয়ার মাধ্যমে এটি উন্নত হবে।
ডপপেলগ্রিনিয়ার

টোটোলজিকাল প্রশ্নের সঠিক উত্তর।
ফ্যাটি

2

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

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

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


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

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

@gmatht মাইক্রো অপ্টিমাইজেশন আসলে সমস্যা নয়। আমি মনে করি ওআই এর অর্থ এআই আচরণ বা শেডার বা অন্য যে কোনও কিছু গণনা করার সর্বোত্তম এবং সবচেয়ে কার্যকর উপায়।
প্রার্থী মুন _ম্যাক্স_

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

2
@ ক্যান্ডিডমুন আমি "এটিতে একই পরিমাণ বা তারও কম সময় লাগবে" এর সাথে একমত নই " দক্ষ কোড লিখতে। সম্ভবত কোডটি লিখতে একই সময় লাগবে যা স্পষ্টতই অদক্ষ নয়, তবে যখন আপনার "কার্যকারিতা" ধারণার অর্থ ক্যাশে যুক্তি বিবেচনা করা, মাল্টিথ্রেডিং যুক্ত করা, কেবলমাত্র কিছু সিপিইউতে উপলব্ধ সিপিইউ নির্দিষ্ট অন্তর্নিবেশ ব্যবহার করা, বড় এন এর জন্য অ্যালগোরিদমগুলি ও এর কারণে স্যুইচ করা means (এন লগ এন) বনাম ও (এন) - এই জাতীয় জিনিস কঠোর এবং ত্রুটির প্রবণ এবং সাধারণ বাস্তবায়নের চেয়ে অনেক বেশি সময় নেয়। আপনি কেবল তখনই এটি করেন যখন আপনি জানেন যে এটি বস্তুগতভাবে চূড়ান্ত ফলাফলকে কার্যকর করবে।
মাইকেল অ্যান্ডারসন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.