মিথ্যা 2: কোডটি বিশ্বের কোনও মডেলকে ঘিরে তৈরি করা উচিত? [বন্ধ]


23

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

(মিথ্যা # 2) বিশ্বব্যাপী একটি মডেল কাছাকাছি কোড ডিজাইন করা উচিত

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

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

বিশেষত এই মিথ্যাটি সম্পর্কে আমার সমস্যাগুলি এখানে রয়েছে।

  1. কোডের একটি কাল্পনিক বিশ্বের একটি মডেল / মানচিত্রের মূল্য রয়েছে কারণ কাল্পনিক জগতকে মডেলিং করা কোডটিকে কমপক্ষে (ব্যক্তিগতভাবে কমপক্ষে) ভিজ্যুয়ালাইজ করতে এবং সংগঠিত করতে সহায়তা করে।

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

  3. অবশ্যই 100 রকেট রাখার জন্য 1 রকেটের বেশি খরচ হয়। যদি স্ক্রিনে 100 রকেট থাকে তবে তাদের অবস্থান আপডেট করার জন্য 100 টি পৃথক গণনা থাকতে হবে। দ্বিতীয় অনুচ্ছেদে মনে হচ্ছে এটি দাবি করছে যে যদি 100 রকেট থাকে তবে রাষ্ট্র আপডেট করার জন্য 100 টিরও কম গণনা ব্যয় করা উচিত?

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


9
@ গ্যাनेट: এই প্রশ্নটি সফ্টওয়্যার ডিজাইনের প্রদেশের মধ্যে বর্গক্ষেত্র , সুতরাং আমি এটিকে কিছুটা ছাড় দিতে চাইছি।
রবার্ট হার্ভে

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

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

3
লেখক "3 বড় মিথ্যাচার" ব্যাখ্যা করে মোট 5 টিরও বেশি অনুচ্ছেদে লেখার বিরক্ত করেননি তা বিবেচনা করে আপনি সম্ভবত তাঁর চেয়ে নিবন্ধটি নিয়ে ভাবতে আরও বেশি সময় ব্যয় করেছেন। যদি সে চেষ্টা করে বিরক্ত না করে, আপনারও উচিত নয়।
কালেব

9
আমি মনে করি তিনি কী পাচ্ছেন, আপনার কি সত্যিই দরকার 100 [সম্ভবত গতিশীলভাবে ভার্চুয়াল পদ্ধতিতেও বরাদ্দ করা হয়েছে] "রকেট অবজেক্টস", পজিশনের একটি তালিকা, বেগের তালিকা ইত্যাদির বিপরীতে (সমস্ত পদের একটি তালিকা এবং একটি বেগের তালিকার অর্থ আপনি বস্তুর তালিকার মাধ্যমে নিখুঁত লুপ লেখার পরিবর্তে প্রতিটি টিক আপডেটে অবস্থানে বেগ যুক্ত করতে ভেক্টর নির্দেশাবলী ব্যবহার করতে সক্ষম হতে পারেন)
র্যান্ডম 832

উত্তর:


63

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

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

সুতরাং, আমাদের এই প্রসঙ্গে এই বিবৃতিগুলি দেখতে হবে।

সেই ব্লগ পোস্টে কিছু সরলীকরণ রয়েছে। বিশেষত, এই মিথ্যা # 2টি খারাপভাবে উপস্থাপন করা হয়েছে।

আমি যে তর্ক করবে সবকিছু যে বাস্তব দুনিয়া থেকে বিমূর্ত কিছু অর্থে একটি মডেল। এবং যেহেতু সফ্টওয়্যারটি বাস্তব নয়, তবে ভার্চুয়াল, এটি সর্বদা একটি বিমূর্ততা এবং এভাবে সর্বদা একটি মডেল। কিন্ত! কোনও মডেলকে বাস্তব বিশ্বে একটি পরিষ্কার 1: 1 ম্যাপিং করতে হবে না। এটি হ'ল, সর্বোপরি, এটি এটিকে প্রথম স্থানে মডেল করে তোলে।

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

আমি একটি উদাহরণ দেব যা আমি ইতিমধ্যে কয়েক বছর ধরে আরও কিছু উত্তর দিয়েছি, ওও 101 ব্যাঙ্ক অ্যাকাউন্টের বিখ্যাত ভূমিকা (এর মধ্যে)। প্রায় প্রতিটি ওও শ্রেণিতে একটি ব্যাংক অ্যাকাউন্ট দেখতে কেমন তা এখানে দেখুন:

class Account {
  var balance: Decimal
  def transfer(amount: Decimal, target: Account) = {
    balance -= amount
    target.balance += amount
  }
}

তাই: balanceহয় ডেটা , এবং transferএকটি হল অপারেশন

কিন্ত! প্রায় প্রতিটি ব্যাংকিং সফ্টওয়্যারটিতে কোনও ব্যাংক অ্যাকাউন্ট দেখতে কেমন তা এখানে দেখুন:

class TransactionSlip {
  val transfer(amount: Decimal, from: Account, to: Account)
}

class Account {
  def balance = 
    TransactionLog.filter(t => t.to == this).map(_.amount).sum - 
    TransactionLog.filter(t => t.from == this).map(_.amount).sum
}

সুতরাং, এখন transferহয় ডেটা এবং balanceএকটি হল অপারেশন (ক বাম লেনদেন লগ উপর ভাঁজ)। (আপনি দেখতে পাবেন যে TransactionSlipঅপরিবর্তনীয়, balanceএকটি খাঁটি ফাংশন, এটি TransactionLogকেবলমাত্র পরিমার্জনীয় "প্রায়" অপরিবর্তনীয় ডেটাস্ট্রাকচার হতে পারে ... আমি নিশ্চিত যে আপনারা অনেকেই প্রথম বাস্তবায়নে সুস্পষ্ট সম্মতিযুক্ত বাগগুলি চিহ্নিত করেছেন, যা এখন যাদুতে দূরে চলে যায় ।)

লক্ষ্য করুন যে এই দুটিই মডেল। এই দুটিই সমানভাবে বৈধ। এই দুটিই সঠিক। এই মডেল উভয় একই জিনিস। এবং তবুও, তারা একে অপরের সাথে একেবারে দ্বৈত : একটি মডেলটিতে যা কিছু তথ্য রয়েছে তা হ'ল অন্য মডেলের একটি অপারেশন, এবং একটি মডেলের অপারেশন হ'ল অন্য মডেলের ডেটা।

সুতরাং, প্রশ্নটি নয় যে আপনি আপনার কোডে "রিয়েল ওয়ার্ল্ড" মডেল করেছেন কিনা , তবে আপনি কীভাবে এটি মডেল করেন।

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

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

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


1
এর অর্থ কি এই নয় যে ভাল কোড মডেলগুলি আসল ওয়ার্ল্ড এবং আসলে এটি সত্যিকারের বিশ্বের ভুল বোঝাবুঝি যা একটি খারাপ মডেল এবং সুতরাং খারাপ কোডের কারণ?
yitzih

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

আপনার অনলাইন ব্যাঙ্কিং অ্যাপ্লিকেশনের সামনের প্রান্তটি সম্ভবত balanceডেটা এবং লেনদেনকে আরও ডেটা হিসাবে বিবেচনা করবে এবং অপারেশন হিসাবে স্থানান্তর করবে, কারণ ব্যবহারকারী এটি দেখেন, যদিও ব্যাক-এন্ড এটি অন্যভাবে আচরণ করে।
ব্যবহারকারী 253751

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

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

19

তিনি প্রস্তাবিত প্রতিটি "মিথ্যা" সাথে আমি একমত নই।

টিএল; ডিআর এই নিবন্ধটির লেখক তাদের নিবন্ধটি আরও আকর্ষণীয় করে তুলতে বিতর্কিত হওয়ার চেষ্টা করছেন, তবে তথাকথিত "মিথ্যা "গুলি সফ্টওয়্যার বিকাশকারীরা ভাল কারণে মেনে নিয়েছেন।

মিথ্যা # 1 - স্কেলিংয়ের উদ্দেশ্যে বিগ হে বিষয়গুলি। যদি কোনও ক্ষুদ্র অ্যাপ্লিকেশন দীর্ঘ সময় নেয় যা কেবলমাত্র সময়সই বিষয়গুলির বিষয়ে চিন্তা করে না, তারা যত্নশীল যে তারা যখন ইনপুট আকার দ্বিগুণ করে তখন এটি 10 ​​এর গুণক দ্বারা কার্যকরকরণের সময়কে গুণ করে না।

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

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

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


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

6
# 3 এর সাথে আসল সমস্যাটি হ'ল এটি কমলাগুলির সাথে আপেলের তুলনা করে, কোডটি ডেটা বা বিপরীতভাবে বেশি গুরুত্বপূর্ণ নয়।
ডক ব্রাউন

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

3
আমি বিশ্বাস করি না যে মিথ্যা # 3 আসলেই মিথ্যা বলে। ফ্রেড ব্রুকস ইতিমধ্যে কয়েক দশক আগে লিখেছিলেন: "আমাকে আপনার ফ্লোচার্টগুলি দেখান এবং আপনার টেবিলগুলি গোপন রাখুন এবং আমি রহস্যজনক হতে থাকব your (আজকাল, আমরা সম্ভবত এর পরিবর্তে "অ্যালগরিদম" এবং "ডেটা ধরণের" বা "স্কিমার" কথা বলব)) সুতরাং, ডেটার গুরুত্ব দীর্ঘকাল ধরে সুপরিচিত।
Jörg ডব্লু মিট্টাগ

1
@ ডিজেচলিন আমার বক্তব্য হ'ল ডেটা গুরুত্বপূর্ণ নয় বা কোডটি আরও গুরুত্বপূর্ণ। কেবলমাত্র ডেটা কোডের চেয়ে বেশি গুরুত্বপূর্ণ নয়। তারা উভয়ই খুব গুরুত্বপূর্ণ এবং একে অপরের উপর প্রচুর নির্ভর করে।
yitzih

6

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

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

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


5

আসল বিশ্বের সমস্যা হ'ল এই সমস্ত জঘন্য পদার্থবিজ্ঞানের। আমরা প্রকৃত বিশ্বে জিনিসগুলিকে শারীরিক বস্তুগুলিতে পৃথক করি কারণ পৃথক পরমাণুগুলির চেয়ে এগুলি চলাচল করা আরও সহজ, বা কোনও রকেট হতে পারে এমন কোনও বিশালাকার গলিত স্ল্যাজ g

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

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

বিকল্প কি?

নেটওয়ার্ক সম্পর্কে চিন্তা করুন। আমরা কোডে পোর্ট এবং তার এবং রাউটারগুলি মডেল করি না। পরিবর্তে আমরা সংযোগ এবং প্রোটোকলগুলিতে নেটওয়ার্ক যোগাযোগ বিমূর্ত করি। আমরা এটি করি কারণ বাস্তব বিশ্বে বাস্তবায়ন নির্বিশেষে এটি একটি দরকারী বিমূর্ততা। (: আপনি পর্যন্ত সংযোগ খোলা হয় যোগাযোগ করতে পারবেন না যেমন) যে শুধুমাত্র ব্যাপার এবং এটা দরকারী সীমাবদ্ধতার রাখে কোডে

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


1
+1 টি: প্রোটোকল্স হয় খুব একটি "বাস্তব বিশ্ব" বিমূর্ততা। এমনকি আজকের বিশ্বে প্রোটোকল অফিসাররা রাষ্ট্রীয় সফরের জন্য কিছু গুরুত্বপূর্ণ কর্মী হিসাবে কাজ করে। জি 8 সভায় রেড কার্পেটে কে প্রথমে যায় ওবামা বা পুতিন? তারা কি আলিঙ্গন করে বা হাত কাঁপায়? আমি আরব বনাম কোনও ভারতীয়কে কীভাবে সালাম দেব? ইত্যাদি। আমাদের কাছে "রিয়েল ওয়ার্ল্ড" এ প্রচুর "জিনিস" রয়েছে যা "শারীরিক বিশ্বের" "জিনিস" নয়। বাস্তব বিশ্বের মডেলিংয়ের অর্থ দৈহিক জগতকে মডেলিং করার অর্থ নয়। Rocketএই লোকের কোডে কোনও প্রকার না থাকলেও আমি বাজি রাখতে ইচ্ছুক যে এরপরেও এর কিছু মডেল রয়েছে ...
জার্গ ডব্লু মিটাগ

… আসল পৃথিবী, যদিও এটি "শারীরিক" কোনও কিছুর সাথে মিল নেই ("স্পর্শযোগ্য" অর্থে)। আমি খুব ( "জিনিষ একটি পদার্থবিজ্ঞানী চিনতে পারে" অর্থে) প্রকৃত "প্রকৃত" বস্তু খুঁজে বিস্মিত হবে না সেখানে, যদিও, এই ধরনের কোয়াটেরনিয়ন, tensors ক্ষেত্রগুলি, ইত্যাদি হয় যা, অবশ্যই, এছাড়াও " বাস্তব-বিশ্বের জিনিস "এবং" বাস্তব বিশ্বের মডেল "।
Jörg W Mittag

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

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

2

বিকল্পটি হ'ল আপনার প্রোগ্রামগুলি যে বিষয়গুলির যত্ন নেয় সেগুলি মডেল করা। এমনকি যদি আপনার প্রোগ্রামটি রকেটগুলির সাথে ডিল করে, আপনার কাছে একটি নামক কোনও সত্ত্বা থাকার প্রয়োজন হতে পারে না Rocket। উদাহরণস্বরূপ, আপনি একটি থাকতে পারে LaunchPadসত্তা এবং একটি LaunchScheduleসত্তা এবং একটি MassiveDeviceMoverসত্তা। এই সমস্ত কিছুই রকেট উৎক্ষেপণে সহায়তা করার অর্থ এই নয় যে আপনি নিজেরাই রকেট পরিচালনা করছেন।


0

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

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

প্রথমত, আমি এগুলির কোনওটিকেই সাধারণ ভুল ধারণা হিসাবে মিথ্যা বলব না। একে মিথ্যা বলা কেবল হাইপ।

একজন তিনি সঠিক, কিছু উপায়ে। এটিতে প্রচুর সময় ব্যয় করা নয়, কারণ এটি প্রশ্নের অংশ নয়। তবে সংক্ষেপে তিনি সঠিক। আমি এটিকে পুনরায় ফিরিয়ে আনতে পারি "ল্যাবটিতে যা কাজ করে তা বাস্তব জীবনে কাজ না করে"। অনেকবার বিকাশকারীরা এমন নকশাকে আটকে থাকেন যা "ল্যাব" তে কাজ করে তবে বাস্তব বিশ্বের অ্যাপ্লিকেশনগুলিতে ব্যর্থ হয়।

আমার কাছে থ্রি সাউন্ড খানিকটা সাবান বক্সি, তবে মূলত সে আবার সঠিক। তবে এটি "আপনার প্রয়োজনের চারপাশে কোড লিখুন, আপনার কোডগুলিতে প্রয়োজনীয়তার সাথে ফিট করার চেষ্টা করবেন না" - এ আবারও লেখা যেতে পারে।

দু'জন আবার, এখানে তিনি সঠিক correct আমি দেখেছি বিকাশকারীরা একটি "রকেট" শ্রেণি বিকাশ করতে কয়েক সপ্তাহ বা তার বেশি সময় ব্যয় করতে দেখেছেন যখন একটি সাধারণ "যানবাহন" শ্রেণি কাজ করবে, বা এমনকি আরও সহজ, "চলমান" শ্রেণীর। আপনার সমস্ত রকেট যদি স্ক্রিনের বাম দিক থেকে ডান দিকে সরানো এবং শব্দ করা হয় তবে আপনি গাড়ি, ট্রেন, নৌকো ও ফ্লাইয়ের জন্য একই ক্লাসটি ব্যবহার করতে পারেন। ১০০ এর কম ব্যয় হওয়া উচিত তবে 1 * 100 টি যুক্তিটি বিকাশমান সময় ব্যয় করেছে এবং গণনার ব্যয় এতটা নয়। যদিও কম সাধারণ ক্লাসে লেগে থাকা যে একটি পুনরায় ব্যবহার করা হবে "সস্তা" তবে অনেকগুলি নির্দিষ্ট শ্রেণি যা পুনরায় ব্যবহার করা যায় না। এটি সম্ভবত পুনরায় লেখা যেতে পারে কারণ "নির্দিষ্ট ক্লাসের চেয়ে সাধারণ ক্লাসগুলি আরও ভাল,

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

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


-1

আমি আকর্ষণীয় বলে মনে করি যে এই মিথ্যাগুলি একাডেমিক উদ্বেগের আশেপাশে রয়েছে: প্ল্যাটফর্ম, মেমরির ব্যবহারের দক্ষতা এবং ডেটা। তবে এটি মানব উপাদানকে সম্পূর্ণ উপেক্ষা করে।

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

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

বড় মিথ্যা হ'ল মানব উপাদান ব্যতীত অন্য কিছু বিষয়। কেন ডেটা গুরুত্বপূর্ণ? কারণ এমন কিছু গ্রাহক বা অংশীদার আছেন যাঁর এটি হওয়া দরকার। এটাই ‘বড় সত্য’।


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

@ ব্যবহারকারী 889742 হা! সত্য। আপনি স্পষ্টভাবেই বলেছেন যে প্রকৌশল সমস্যা স্থপতিরা সর্বকালের জন্য সমাধান করার চেষ্টা করছেন এবং কী কারণে শিল্পটি এমন একটি আকর্ষণীয় স্থানকে কাজ করে চলেছে
মূল্য জোন্স

তিনি মানব উপাদানটিকে উপেক্ষা করেন কারণ তিনি একজন গেম ডেভেলপার এবং গেমের রক্ষণাবেক্ষণের যুগ তুলনামূলকভাবে স্বল্প সময়ের, যদিও এটি ২০০৮ সালের তুলনায় আজকের চেয়ে বেশি দীর্ঘ সময়। প্রথম প্যাচ এখন একদিন গেমিংয়ের ক্ষেত্রে আদর্শ হিসাবে দেখা যাচ্ছে। ২০০৮ সালে গেমসের জন্য প্যাচগুলি তুলনামূলকভাবে বিরল ছিল।
রাবারডাক

-1

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

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