আপনি কি "স্প্রেডশিট প্রোগ্রামিং" এর ব্যবহার দেখতে পাচ্ছেন? [বন্ধ]


11

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

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

  • ইনপুট সেলগুলি সংজ্ঞায়িত করুন

  • আউটপুট সেলগুলি সংজ্ঞায়িত করুন

  • পুরো জিনিসটি একটি একা নির্বাহযোগ্য শ্রেণিতে (বা ফাংশন, পদ্ধতি, ...) মধ্যে সংকলন করুন

  • এটি একটি বিস্তৃত সফ্টওয়্যার প্রকল্পের মধ্যে সাধারণ কোডে ব্যবহার করুন

  • সময়ের সাথে বজায় রাখতে সোর্স কোড হিসাবে স্প্রেডশিটটি ব্যবহার করুন

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


আমি এই প্রশ্নটি বন্ধ করে খুশি নই। ঠিক আছে, "হ্যাঁ" বা "না" বা "টিআর_রেপ্লেস ()" এর মতো কোনও উত্তর নেই তবে এটি আকর্ষণীয় আলোচনা শুরু করে। এখানে আমরা যাচ্ছি: meta.programmers.stackexchange.com/questions/5652/…
ern0

@ ern0 আপনি কি ট্যুর পৃষ্ঠা পরীক্ষা করেছেন ? "প্রোগ্রামাররা সম্পর্কে সব হয় উত্তর পেয়ে এটি একটি আলোচনা ফোরামে ... না।"
মশা

উত্তর:


5

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

এবং কেবল মজাদার জন্য: স্প্রেডশিট ম্যাক্রো


1
আমি নিশ্চিত যে এই হল আছি না কি ওপি মনের মধ্যে ছিল।
zzzzBov

4
@zzzzBov, যদিও এটি ওপির বর্ণনায় পুরোপুরি ফিট করে।
এসকে-যুক্তি

3

যা কখনও কখনও পদ্ধতিগত বা অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং শৈলীর পরিবর্তে স্প্রেডশিটের "ডেটাফ্লো" দৃষ্টান্তের সাথে আরও উপযুক্ত are

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

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


2

আমি এই নিবন্ধটি পড়ার পর থেকেই আমি ধারণাটি নিয়ে বাইরে থেকে ভাবছি। আমি মনে করি এটির জন্য অবশ্যই একটি ব্যবহার আছে ।

এই জাতীয় জিনিসটিকে অনুকূল করার বিষয়ে একটি জিনিস, একটি স্প্রেড শীট মেমরির জায়গার সাথে খুব মিল। এটি ডিসপ্লে এবং প্রিন্ট স্পেসের সাথেও খুব মিল (x, y এর মতো)। সেখানেও প্রচুর সুবিধা।

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

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


1

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

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

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


1

স্প্রেডশিট "প্রোগ্রামিং" হ'ল এক প্রকার ডেটাফ্লো প্রোগ্রামিং।

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

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

ডেটাফ্লো প্রোগ্রামিংয়ের বিভিন্ন প্রকার রয়েছে, আসুন কিছু দেখুন:

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

আপনার প্রশ্নে ফিরে আসুন: আমি হ্যাঁ মনে করি, ডেটাফ্লো অ্যাপ্লিকেশনটি স্ট্যান্ড স্টোন অ্যাপ হিসাবে প্রকাশ করা ভাল ধারণা। আমি ইতিমধ্যে এটি তৈরি করেছি। দু'বার

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

এছাড়াও, আমরা একটি ডিএফ সিস্টেম সরবরাহের সুবিধাগুলি দেখে অবাক হয়েছি : আমরা 2 মিনিটের মধ্যে সিরিয়াল স্নিফার অ্যাপ্লিকেশন তৈরি করেছি, বা আমরা সাইটটিতে একটি পরীক্ষা প্রোগ্রাম করেছি , যা একের পর এক প্রদীপ জ্বলিয়ে দেয় (কোনও ডকুমেন্টেশন ছিল না) হার্ডওয়্যার আইডি তে)। আমরা এমডিআই এবং জয়প্যাড উপাদানগুলি কেবল মজাদার জন্য তৈরি করেছি, আমি এটির সাথে একটি হালকা অঙ্গও তৈরি করেছি (দেখুন http://homeaut.com/under_con تعمیر/ )।

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

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

সুতরাং, আমার মডেল (যা সর্বোত্তমভাবে বর্ণনা করা যেতে পারে: "অনুভূমিকভাবে দিনগুলি") অন্য ধরণের সমস্যাগুলি পরিচালনা করতে সক্ষম নয়।

আমার একটি ধারণা আছে, কীভাবে এই সমস্যাটি সমাধান করবেন: ট্যাব

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

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

সুতরাং, যখন ব্যবহারকারী কোনও নতুন লাইন / কলাম যুক্ত করবে তখন নতুন লাইন / কলামের একই সূত্র থাকবে।

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

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


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

0

আমার ধারণা হ'ল গণনাগুলির জন্য যুক্তি সংজ্ঞায়িত করার জন্য স্প্রেডশিটটি ব্যবহার করা হবে এবং এটি করার সময় স্প্রেডশিটটিকে এমনভাবে সেটআপ করার চেষ্টা করুন যাতে এটি প্রোগ্রামিং ভাষা বান্ধব করে তুলতে পারে। বন্ধুত্বপূর্ণ বলতে আমার অর্থ -> সেলএক্সওয়াই স্থানাঙ্কের পরিবর্তে নামের রেঞ্জ / রেফারেন্স ব্যবহার করা এবং সূত্রটি ছোট ছোট টুকরো টুকরো টুকরো করা।

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