কখন 'অনুকূলকরণের কোড' == 'স্ট্রাকচারিং ডেটা' করে?


9

ইয়কম্বিনেটর দ্বারা সাম্প্রতিক একটি নিবন্ধ একটি দুর্দান্ত প্রোগ্রামারের নীতিগুলি সহ একটি মন্তব্য তালিকাভুক্ত করে।

#Good. ভাল প্রোগ্রামার: আমি কোডটি অপ্টিমাইজ করি। আরও ভাল প্রোগ্রামার: আমি ডেটা গঠন করি। সেরা প্রোগ্রামার: পার্থক্য কী?

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


2
আপনার রেফারেন্সের তালিকায় এটিতে প্রচুর শীতল আইটেম রয়েছে। ধন্যবাদ।
বিকাশকারীরা

এই প্রশ্নটির (যা আমি জিজ্ঞাসা করেছি) এর একটি উত্তর রয়েছে যা এই উদ্ধৃতিটিরও উল্লেখ করেছে: প্রোগ্রামার্স.স্ট্যাকেক্সেঞ্জার.কম
168013/15028

উত্তর:


16

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

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

একটি সুগঠিত সিস্টেম প্রকৃতিতে ন্যূনতম হবে এবং এটি ন্যূনতম প্রকৃতির কারণে এটি অনুকূলিত হবে কারণ এর সাথে সামান্য পরিমাণই কীভাবে লক্ষ্য অর্জনে এটি কতটা সামান্য কাজ করে তার সাথে সরাসরি সম্পর্কিত।

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

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


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

1
@ নিউ অ্যালেক্সান্দ্রিয়া মডেলটির উল্লেখ করা হয়েছে "ডেটা"। প্রায়শই, খারাপ কোড এবং একটি খারাপ মডেল এক সাথে যায়। একটি ঠিক করা অন্য প্রবেশদ্বার ঠিক করা।

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

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

4

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

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


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

কখনও কখনও তথ্য পুনর্গঠন কোড পুনর্গঠন অনুমতি দেয়, কিন্তু আমি কখনও কখনও আপনি সম্পন্ন যখন মনে করি, পুরানো কোড সঙ্গে নতুন কোড খুব কম মিল আছে।
বিকাশকারীরা

ওটিওএইচ, ক্যাশে লাইনের আকারের জন্য ডেটা সারিবদ্ধ করা একটি দুর্দান্ত প্রভাব ফেলতে পারে। ;-p
Macke

3

এর সবচেয়ে সুস্পষ্ট উদাহরণ বিবেচনা করুন - "ব্যবহারকারীর ডেটা অনুসন্ধান করা খুব ধীর!"

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

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


1

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

আমি মনে করি লেখকের শেষ অংশটি "সেরা প্রোগ্রামার: আমি উভয়কেই অনুকূলিত করে" লেখা উচিত ছিল

একটি দুর্দান্ত বই রয়েছে (এটি প্রকাশিত হওয়ার পরে অন্তত এটি ছিল) নামে পরিচিত: অ্যালগোরিদম + ডেটা স্ট্রাকচার = প্রোগ্রাম


0

কোডটি অপ্টিমাইজ করা কখনও কখনও দু'একটি গুণক দ্বারা গতি এবং কখনও কখনও দশ বা বিশ বিশের ফ্যাক্টর দ্বারা উন্নতি করতে পারে তবে এটি প্রায়। এটি প্রচুর মত শোনাতে পারে এবং যদি কোনও প্রোগ্রামের সঞ্চালনের 75% সময় যদি পাঁচ-লাইনের রুটিনে ব্যয় করা হয় যার গতি সহজেই দ্বিগুণ করা যায়, তবে এই ধরনের অপ্টিমাইজেশানটি তৈরি করার পক্ষে উপযুক্ত। অন্যদিকে, কারোর ডেটা স্ট্রাকচারের নির্বাচন প্রয়োগের গতিটিকে বহু মাত্রার অর্ডার দ্বারা প্রভাবিত করতে পারে। র‌্যামে সঞ্চিত 10,000,000-আইটেম লিনিয়ার লিঙ্কযুক্ত তালিকায় কী দ্বারা ডেটা সন্ধান করার জন্য সুপার-অপ্টিমাইজড কোড চালিত একটি আধুনিক হাইপার-অপ্টিমাইজড মাল্টি-থ্রেডেড প্রসেসর বরং কেবল-কোডড নেস্টেড হ্যাশ টেবিলটি চালানো অনেক ধীর প্রসেসরের চেয়ে ধীর হবে। প্রকৃতপক্ষে, যদি কেউ সঠিকভাবে ডেটা রাখে, এমনকি একটি 1980 '

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


0

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

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

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

ডেটাটির সৃজনশীল কাঠামো কোনও সমস্যার পুনঃনির্মাণ করতে এবং নতুন অ্যালগরিদমের দরজা খুলতে সহায়তা করতে পারে যা হার্ড অ্যাপ্লিকেশনগুলিকে দ্রুত এবং কখনও কখনও অসম্ভবকে সম্ভব করে তোলে।


0

নিবন্ধটির অর্থ সম্পর্কে আমার সেরা অনুমানের জন্য, আমি একটি অব্যক্ত সাবটেক্সট (যা নিবন্ধে অনুপস্থিত বলে মনে হচ্ছে) ধরে নেব যে কোনও প্রোগ্রামার অপ্টিমাইজেশন সম্পর্কে বুঝতে হবে:

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

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

তবে আপনি প্রায়শই পুরো সিস্টেমটিকে দেখে এবং মেশিনকে কম কাজ করার অনুমতি দেওয়ার জন্য কোনও উপায় খুঁজে বার করে আরও বেশি উপার্জন করতে পারেন। প্রায়শই, এই পরিবর্তনগুলির জন্য আপনার ডেটা সংগঠনের পুনরায় কাজ করা প্রয়োজন; সুতরাং, একজন "আরও ভাল" প্রোগ্রামার নিজেকে প্রায়শই না বেশি তথ্যের কাঠামো সন্ধান করতে পারে।

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


-1

সেরা প্রোগ্রামার: পার্থক্য কী?

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

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