সাহিত্যের প্রোগ্রামিং, ভাল / খারাপ ডিজাইনের পদ্ধতি


10

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

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

সমস্যাটিকে ছোট বাক্য ভিত্তিক সমস্যার মধ্যে ভাগ করার ধারণাটি সত্যিই একটি উজ্জ্বল ধারণা বলে মনে হচ্ছে। এটি প্রোগ্রামের প্রবাহের বোঝাপড়াটি সহজ করবে।

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

সুতরাং আমি কেন এটিকে খারাপ / ভাল ডিজাইনের পদ্ধতি হিসাবে বিবেচনা করা উচিত তার প্রতিক্রিয়া পেতে চাই?


2
জেরোথ, আমি সাক্ষরতা-প্রোগ্রামিং ট্যাগ তৈরি করেছি এবং উইকিপিডিয়া নিবন্ধের উপর ভিত্তি করে একটি সংক্ষিপ্তসার যুক্ত করেছি। প্রাসঙ্গিক তথ্য সহ ট্যাগ উইকি প্রসারিত করতে দয়া করে।
ইয়ানিস

@ ইয়্যানিসরিজস আমি এটি এখানে যুক্ত করব, আমার কাছে সম্পাদনা করার অধিকার নেই।
জেরোথ

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

1
আমি লিট্রেট প্রোগ্রামিং সাইটের লেখককে ইউএক্স স্ট্যাকেক্সচেঞ্জ সাইটটি দেখার জন্য সুপারিশ করব - রঙগুলি পড়ার জন্য সত্যই খারাপ।
ড্যানি ভারোদ

1
এফওয়াইআই, literate-programmingস্ট্যাকওভারফ্লোতেও একটি ট্যাগ রয়েছে। সেখানে আরও কন্টেন্ট রয়েছে, যদিও এখনও বেশি নয়।
রস প্যাটারসন

উত্তর:


9

এটি পৃথক ফাংশন সংকলনের পরিবর্তে এবং সমতুল্য গতি অর্জনের জন্য একটি আন্ত-পদ্ধতিগত সংকলন অপ্টিমাইজেশন পদক্ষেপের পরবর্তী প্রয়োজনের পরিবর্তে কোডটির স্বয়ংক্রিয়ভাবে সন্নিবেশ লাভ করবে

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

সুতরাং আমি কেন এটিকে খারাপ / ভাল ডিজাইনের পদ্ধতি হিসাবে বিবেচনা করা উচিত তার প্রতিক্রিয়া পেতে চাই?

সাক্ষরিত প্রোগ্রামিংয়ের কোনও খারাপ দিক নেই। (আমি এই সংবেদনটির জন্য কয়েক ডজন -১ ভোট আশা করি)) একজন চিকিত্সক হিসাবে, আমি কোনও সমস্যা দেখিনি।

কিছু যুক্তি রয়েছে যার বিরুদ্ধে "উচ্চ-স্তরের ভাষায় প্রোগ্রামিংয়ের সমস্ত পরিমাণ ফলাফলের কোডটি টিক দিয়ে বিভ্রান্ত করা হয়।" ঠিক। সি ++ তে প্রোগ্রামিং একইভাবে .oউত্পাদিত হওয়া ফাইলটি টুইট করে বিপরীত করা হয় । এটি সত্য, তবে অপ্রাসঙ্গিক।

সাক্ষরতার প্রোগ্রামগুলি লেখার অর্থ হ'ল উচ্চ-স্তরের এবং বিস্তারিত (কোড-স্তর) নকশাকে একটি নথিতে একত্রিত করা, একটি উপযুক্ত সরঞ্জামসেটের সাথে লিখিত যা সংকলক-বান্ধব ফাইল এবং জনবান্ধব ফাইল তৈরি করে।

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

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

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

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

এমন প্রচুর সংখ্যক প্রোগ্রামার রয়েছে যারা কেবলমাত্র প্রান্তিকভাবে সফল এবং পরে কেবল দুর্ঘটনাক্রমে প্রদর্শিত হবে। (স্ট্যাক ওভারফ্লোতে পর্যাপ্ত খারাপ প্রশ্ন রয়েছে যা ইঙ্গিত দেয় যে অনেক প্রোগ্রামার এমনকি মূলসূত্রগুলি উপলব্ধি করতে লড়াই করে)) যারা প্রোগ্রামাররা বিস্তৃতভাবে অসংলগ্ন স্ট্যাক ওভারফ্লো প্রশ্ন জিজ্ঞাসা করেন, আমরা জানি তারা সত্যই साक्षিত প্রোগ্রামিংয়ের ভাল কাজ করতে পারে না, কারণ তারা পারে প্রোগ্রামিং ভাল কাজ না।


7
যে কোনও মাধ্যম, আনুষ্ঠানিক বা অনানুষ্ঠানিকভাবে কোনও কিছু ব্যাখ্যা করার সময় প্রচুর সংখ্যক প্রোগ্রামার সবেমাত্র সুসংহত হয়, এটি সাক্ষর প্রোগ্রামিং, মন্তব্য লেখার বা ইমেল এমনকি। এটি একটি বিস্ময়কর সফ্টওয়্যার কাজ করে :)
Andres F.

3

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

সুতরাং বর্ণিত অভিপ্রায়টি প্রায়শই অন্যের সাথে কোডের সাথে অপরিচিত তাড়াতাড়ি আরও বড় আকারের প্রসঙ্গটি না জেনে তাত্ক্ষণিকভাবে ত্রুটিগুলি খুঁজে পেতে সক্ষম করে।

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


1

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

ডিএসএল-এর পেছনের ধারণাটি হ'ল সমস্যাগুলির একটি ডোমেনকে একটি সাধারণ, প্রাকৃতিক-ভাষা-ভিত্তিক ব্যাকরণে ছড়িয়ে দেওয়া যা এই সমস্যাগুলি সমাধানের জন্য অ্যালগরিদম তৈরি করতে ব্যবহৃত হতে পারে।

আমার কাছে, একই ধারণা বা কমপক্ষে এর মূল ভিত্তি হ'ল একই বা কমপক্ষে শিক্ষিত প্রোগ্রামিংয়ের সাথে নিবিড়ভাবে সম্পর্কিত।

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

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

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

টুলটি ব্যবহার করার সময় এটি আপনার জিনিসগুলির সর্বোত্তম বিষয় তবে এটি তৈরি করা সম্পূর্ণ ভিন্ন স্তরে।


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

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

উদাহরণস্বরূপ, নিম্নলিখিত কোডের লাইনগুলি প্রোগ্রামিং করছে , কেবল ছদ্ম-বাক্য নয়:

drink tea with sugar and milk
move left by 30.centimeters
sendFrom "Guillaume" to "Jochen"
send from: "Jochen" to "Lidia"
Email.from "Lidia" to "Guillaume" withBody "how are you?"
contact.name "Guillaume" age 33
move left by 30.centimeters
sell 100.shares of MSFT
take 2.pills of chloroquinine in 6.hours
blend red, green of acrylic
artist.paint "wall" with "Red", "Green", and: "Blue" at 3.pm
wait 2.seconds and execute { assert true }
concat arr[0] with arr[1] and arr[2]
developped with: "Groovy" version "1.8-beta-2"

দ্রষ্টব্য: কোডের নমুনা গিলিয়াম লাফজের ব্লগ থেকে এসেছে

শিক্ষিত প্রোগ্রামিংয়ের মূল ধারণাটি হ'ল প্রাকৃতিক ভাষা মানুষের পক্ষে আরও বোধগম্য এবং এটিই গুরুত্বপূর্ণ। গ্রোভির প্রাকৃতিক ভাষা ডিএসএল ক্ষমতাগুলি আমার মতে এটি আরও ঘনিষ্ঠ বাস্তবতা তৈরি করে। বিশেষত যখন এই ডিএসএলগুলি কোনও অ্যাপ্লিকেশনটির ব্যবসায়ের নিয়ম তৈরি করতে ব্যবহৃত হয়।

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

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

ক্রিয়াকলাপে এটির আরও উদাহরণের জন্য (কোনও নির্দিষ্ট ক্রমে নয়):


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

এর একটা উদাহরণ হল খাঁজকাটা 1.8 কমান্ড চেইন যে আপনাকে ভেতরে যেতে মত বিষয়গুলিতে "কর্মসূচির" হয় turn left then rightবা paint wall with red, green and yellow: docs.codehaus.org/display/GROOVY/...
cdeszaq

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

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

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

-2

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

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

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

সুতরাং, এলপির জন্য প্রধান প্রয়োজনীয়তা (সরঞ্জাম হিসাবে!) খুব সহজ, হালকা, পঠনযোগ্য সিনট্যাক্সের সাহায্যে এগুলিকেই অনুমতি দেওয়া হয়। আমি অনেক এলপি সরঞ্জাম চেষ্টা করেছিলাম, তবে আজ আমি নিজের বিকাশ করছি - NanoLP ( http://code.google.com/p/nano-lp/ ) যা এই চাহিদা পূরণের লক্ষ্য।

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