Intentional programming
কম্পিউটার প্রোগ্রামিং-এ, ইচ্ছাকৃত প্রোগ্রামিং হল চার্লস সিমোনি দ্বারা বিকশিত একটি প্রোগ্রামিং দৃষ্টান্ত যা সফ্টওয়্যার সোর্স কোডে প্রোগ্রামারদের (বা ব্যবহারকারীদের) তাদের কাজ কল্পনা করার সময় মনে থাকা সুনির্দিষ্ট উদ্দেশ্যকে এনকোড করে। প্রোগ্রামার যে স্তরে চিন্তা করছেন সেই উপযুক্ত স্তরের বিমূর্ততা ব্যবহার করে কম্পিউটার প্রোগ্রাম তৈরি করা এবং রক্ষণাবেক্ষণ করা সহজ হয়ে যায়। উদ্দেশ্য এবং সেগুলি কীভাবে পরিচালিত হচ্ছে তার জন্য উদ্বেগগুলি পৃথক করে, সফ্টওয়্যারটি আরও মডুলার হয়ে ওঠে এবং আরও পুনঃব্যবহারযোগ্য সফ্টওয়্যার কোডের অনুমতি দেয়। ইচ্ছাকৃত প্রোগ্রামিং প্রাক্তন মাইক্রোসফ্ট প্রধান স্থপতি চার্লস সিমোনি দ্বারা তৈরি করা হয়েছিল, যিনি মাইক্রোসফ্ট রিসার্চের একটি দলের নেতৃত্ব দিয়েছিলেন, যা দৃষ্টান্তটি তৈরি করেছিল এবং আইপি (ইচ্ছাকৃত প্রোগ্রামিংয়ের জন্য) নামে একটি সমন্বিত উন্নয়ন পরিবেশ (আইডিই) তৈরি করেছিল যা দৃষ্টান্তটি প্রদর্শন করেছিল। মাইক্রোসফ্ট ইচ্ছাকৃত প্রোগ্রামিং দৃষ্টান্তটি উৎপাদন না করার সিদ্ধান্ত নিয়েছে, কারণ 2000-এর দশকের গোড়ার দিকে মাইক্রোসফ্ট জাভা গ্রহণকে প্রতিহত করার জন্য সি #এবং. নেট চালু করছিল। মাইক্রোসফটের অনুমোদন নিয়ে চার্লস সিমোনি সিদ্ধান্ত নেন যে, মাইক্রোসফট থেকে তাঁর ধারণাটি সরিয়ে নিয়ে তিনি নিজেই এটির বাণিজ্যিকীকরণ করবেন। তিনি এটি অনুসরণ করার জন্য ইনটেনশনাল সফ্টওয়্যার সংস্থাটি প্রতিষ্ঠা করেছিলেন। মাইক্রোসফ্ট ইচ্ছাকৃত প্রোগ্রামিং পেটেন্টগুলি লাইসেন্স দেয় যা সিমোনি মাইক্রোসফ্টে থাকাকালীন অর্জন করেছিল, তবে কোনও সোর্স কোড নেই, ইচ্ছাকৃত সফ্টওয়্যারে। জেনেরেটিভ প্রোগ্রামিংঃ মেথডস, টুলস অ্যান্ড অ্যাপ্লিকেশনস বইয়ের 11তম অধ্যায়ে মাইক্রোসফট রিসার্চ-এ পরিকল্পিত প্রোগ্রামিং-এর একটি সংক্ষিপ্ত বিবরণ দেওয়া হয়েছে। উন্নয়ন চক্র সিমোনির কল্পনা অনুযায়ী, ইচ্ছাকৃত প্রোগ্রামিং দৃষ্টান্তের মাধ্যমে একটি নতুন অ্যাপ্লিকেশন বিকাশ করা নিম্নরূপ। একজন প্রোগ্রামার একটি প্রদত্ত সমস্যা ডোমেনের (যেমন উৎপাদনশীলতা অ্যাপ্লিকেশন বা জীবন বীমা) জন্য ব্যবসায়িক জ্ঞানের স্কিমা এবং নোটেশনকে সমর্থন করে একটি ডাব্লুওয়াইএসআইডাব্লুওয়াইজি-এর মতো পরিবেশ তৈরি করে। ব্যবহারকারীরা তখন তাদের উদ্দেশ্যগুলি ক্যাপচার করতে এই পরিবেশটি ব্যবহার করে, যা উচ্চ স্তরের বিমূর্ততায় রেকর্ড করা হয়। পরিবেশ এই উদ্দেশ্যগুলির উপর কাজ করতে পারে এবং ব্যবহারকারীকে স্প্রেডশিটের মতো প্রক্রিয়াজাত ও কার্যকর করা যেতে পারে এমন শব্দার্থগতভাবে সমৃদ্ধ নথি তৈরি করতে সহায়তা করতে পারে। রেকর্ড করা জ্ঞান একজন মূল্যায়নকারী দ্বারা সম্পাদিত হয় বা চূড়ান্ত প্রোগ্রাম তৈরি করার জন্য সংকলিত হয়। ধারাবাহিক পরিবর্তনগুলি শুধুমাত্র ডাব্লুওয়াইএসআইডাব্লুওয়াইজি স্তরে করা হয়। ওয়ার্ড প্রসেসর, স্প্রেডশিট বা উপস্থাপনা সফ্টওয়্যারের বিপরীতে, একটি ইচ্ছাকৃত পরিবেশের প্রকাশ করার অভিপ্রায়গুলির কাঠামো এবং শব্দার্থের জন্য আরও সমর্থন রয়েছে এবং ইন্টারেক্টিভ নথি তৈরি করতে পারে যা ব্যবহারকারী কী অর্জন করার চেষ্টা করছে তা আরও সমৃদ্ধভাবে ধারণ করে। একটি বিশেষ ক্ষেত্রে যখন বিষয়বস্তু প্রোগ্রাম কোড হয় এবং পরিবেশ একটি বুদ্ধিমান আইডিই হয়ে ওঠে। সোর্স কোড স্টোরেজ এবং উপস্থাপনা পৃথক করা ইচ্ছাকৃত প্রোগ্রামিংয়ের সুবিধার মূল চাবিকাঠি হল যে ডোমেন কোড যা উদ্দেশ্যগুলি ধারণ করে তা সোর্স কোড টেক্সট ফাইলগুলিতে সংরক্ষণ করা হয় না, তবে একটি ট্রি-ভিত্তিক স্টোরেজে (বাইনারি বা এক্সএমএল হতে পারে)। স্টোরেজ ফরম্যাটের সাথে পরিবেশের কঠোর সংহতকরণ সোর্স কোডে ডাটাবেস স্বাভাবিকীকরণের কিছু সুন্দর বৈশিষ্ট্য নিয়ে আসে। প্রতিটি সংজ্ঞাকে একটি অনন্য পরিচয় দিয়ে এবং পরিবর্তনশীল এবং অপারেটরদের নাম ঠিক এক জায়গায় সংরক্ষণ করে রিডান্ডেন্সি দূর করা হয়। এটি রেফারেন্স থেকে অভ্যন্তরীণভাবে ঘোষণাগুলিকে আলাদা করা সহজ করে তোলে এবং পরিবেশ তাদের ভিন্নভাবে দেখাতে পারে। কোনও প্রোগ্রামে হোয়াইটস্পেসও সোর্স কোডের অংশ হিসাবে সংরক্ষণ করা হয় না এবং কোনও প্রকল্পে কাজ করা প্রতিটি প্রোগ্রামার উৎসের একটি ইন্ডেন্টেশন ডিসপ্লে বেছে নিতে পারেন। আরও মৌলিক দৃশ্যায়নের মধ্যে রয়েছে বিবৃতি তালিকা নেস্টেড বাক্স হিসাবে দেখানো, শর্তসাপেক্ষ অভিব্যক্তিগুলিকে লজিক গেট হিসাবে সম্পাদনা করা বা চীনা ভাষায় নামগুলি পুনরায় রেন্ডার করা। সিস্টেমটি সি + + এবং জাভার মতো জনপ্রিয় ভাষাগুলির জন্য একটি স্বাভাবিক ভাষা ব্যবহার করে, যখন পরিবেশের ব্যবহারকারীদের আইফেল এবং অন্যান্য ভাষার ধারণার সাথে এগুলিকে মিশ্রিত এবং মেলাতে দেয়। প্রায়শই ডোমেন-নির্দিষ্ট ভাষার মাধ্যমে ভাষা-ভিত্তিক প্রোগ্রামিংয়ের মতো একই প্রসঙ্গে উল্লেখ করা হয়, এবং দিক-ভিত্তিক প্রোগ্রামিং, আইপি জেনারেটিভ প্রোগ্রামিংয়ে কিছু অগ্রগতি প্রদান করে। এই কৌশলগুলি ডেভেলপারদের কোনও নতুন ভাষার জন্য একটি সম্পূর্ণ সংকলক এবং সম্পাদক লেখার জন্য বিনিয়োগ না করে ডোমেন-নির্দিষ্ট গঠনগুলি ক্যাপচার করার জন্য ভাষার পরিবেশ প্রসারিত করার অনুমতি দেয়। প্রোগ্রামিং উদাহরণ একটি জাভা প্রোগ্রাম যা কোঁকড়ানো বন্ধনী বাক্যবিন্যাস ব্যবহার করে 1 থেকে 10 পর্যন্ত সংখ্যা লেখে, এটি দেখতে এইরকম হতে পারেঃ (int i = 1; i <= 10; i + +) {System.out.println ("সংখ্যাটি হল" + i);} উপরের কোডে বেশিরভাগ প্রোগ্রামিং ভাষার একটি সাধারণ গঠন রয়েছে, বাউন্ডেড লুপ, এই ক্ষেত্রে ফর কনস্ট্রক্ট দ্বারা প্রতিনিধিত্ব করা হয়। কোডটি যখন কম্পাইল করা হয়, লিঙ্ক করা হয় এবং চালানো হয়, তখন এটি 10 বার লুপ করবে, এটি প্রিন্ট করার পরে প্রতিবার আই এর মান বৃদ্ধি করবে। কিন্তু এই কোডটি প্রোগ্রামারের উদ্দেশ্যকে ধারণ করে না, যথা "1 থেকে 10 সংখ্যা মুদ্রণ করা"। এই সহজ ক্ষেত্রে, একজন প্রোগ্রামারকে কোডটি বজায় রাখতে বলা হলে তিনি সম্ভবত বুঝতে পারবেন যে এটি কী করতে চায়, তবে এটি সবসময় এত সহজ হয় না। অনেক লাইন বা পৃষ্ঠা জুড়ে প্রসারিত লুপগুলি বোঝা খুব কঠিন হয়ে উঠতে পারে, বিশেষত যদি মূল প্রোগ্রামার অস্পষ্ট লেবেল ব্যবহার করে। ঐতিহ্যগতভাবে কোডের উদ্দেশ্য নির্দেশ করার একমাত্র উপায় ছিল সোর্স কোড মন্তব্য যোগ করা, তবে প্রায়শই মন্তব্যগুলি যোগ করা হয় না, বা অস্পষ্ট হয়, বা তারা মূলত বর্ণিত সোর্স কোডের সাথে সিঙ্কের বাইরে চলে যায়। ইচ্ছাকৃত প্রোগ্রামিং সিস্টেমে উপরের লুপটি কিছু স্তরে "1 থেকে 10 সংখ্যা মুদ্রণ" হিসাবে সুস্পষ্ট হিসাবে উপস্থাপন করা যেতে পারে। সিস্টেমটি তখন সোর্স কোড তৈরি করার উদ্দেশ্যে ব্যবহার করবে, সম্ভবত উপরের কোডের অনুরূপ কিছু। মূল পার্থক্যটি হ 'ল ইচ্ছাকৃত প্রোগ্রামিং সিস্টেমগুলি শব্দার্থিক স্তর বজায় রাখে, যা সোর্স কোডের অভাব এবং যা বড় প্রোগ্রামগুলিতে পঠনযোগ্যতা নাটকীয়ভাবে সহজ করতে পারে। যদিও বেশিরভাগ ভাষায় নির্দিষ্ট ধরনের বিমূর্ততা ক্যাপচার করার প্রক্রিয়া রয়েছে, আইপি, ভাষাগুলির লিস্প পরিবারের মতো, সম্পূর্ণ নতুন প্রক্রিয়া যোগ করার অনুমতি দেয়। সুতরাং, যদি কোনও বিকাশকারী সি-এর মতো ভাষা দিয়ে শুরু করেন, তবে তারা কম্পাইলার বিকাশকারীদের যোগ করার জন্য অপেক্ষা না করে সি + +-এর মতো বৈশিষ্ট্যগুলির সাথে ভাষাটি প্রসারিত করতে সক্ষম হবেন। উপমা হিসাবে, প্রোগ্রামাররা নিছক শ্রেণী এবং পদ্ধতির চেয়ে আরও অনেক শক্তিশালী অভিব্যক্তি প্রক্রিয়া ব্যবহার করতে পারে। আইডেন্টিটি আইপি পরিচয়ের ধারণার উপর দৃষ্টি নিবদ্ধ করে। যেহেতু বেশিরভাগ প্রোগ্রামিং ভাষাগুলি সোর্স কোডকে সরল পাঠ্য হিসাবে উপস্থাপন করে, তাই বস্তুগুলি নাম দ্বারা সংজ্ঞায়িত করা হয় এবং তাদের স্বতন্ত্রতা সংকলক দ্বারা অনুমান করতে হয়। উদাহরণস্বরূপ, একই প্রতীকী নাম বিভিন্ন পরিবর্তনশীল, পদ্ধতি বা এমনকি প্রকারের নামকরণ করতে ব্যবহার করা যেতে পারে। বেশ কয়েকটি পৃষ্ঠায় বিস্তৃত কোডে-বা, বিশ্বব্যাপী দৃশ্যমান নামের জন্য, একাধিক ফাইল-কোন প্রতীক কোন প্রকৃত বস্তুকে বোঝায় তা বলা খুব কঠিন হয়ে পড়তে পারে। যদি কোনও নাম পরিবর্তন করা হয়, তবে যে কোডটি ব্যবহার করা হয়েছে তা অবশ্যই সাবধানে পরীক্ষা করা উচিত। বিপরীতে, একটি আইপি সিস্টেমে, সমস্ত সংজ্ঞা কেবল প্রতীকী নামই নয়, বস্তুর অনন্য ব্যক্তিগত শনাক্তকারীও নির্ধারণ করে। এর মানে হল যে আইপি উন্নয়ন পরিবেশে, একটি পরিবর্তনশীল বা পদ্ধতির প্রতিটি রেফারেন্স কেবল একটি নাম নয়-এটি মূল সত্তার একটি লিঙ্ক। এর প্রধান সুবিধা হল যে যদি কোনও সত্তার নাম পরিবর্তন করা হয়, তবে প্রোগ্রামে এটির সমস্ত রেফারেন্স বৈধ থাকে (রেফারেন্সিয়াল অখণ্ডতা হিসাবে পরিচিত)। এর অর্থ এটাও যে, যদি একই নাম বিভিন্ন নেমস্পেসে অনন্য সংজ্ঞার জন্য ব্যবহার করা হয় (যেমন ". to _ স্ট্রিংগ ()"), তবে একই নাম কিন্তু ভিন্ন পরিচয়ের রেফারেন্সগুলির নাম পরিবর্তন করা হবে না, যেমন কখনও কখনও বর্তমান সম্পাদকদের অনুসন্ধান/প্রতিস্থাপনের ক্ষেত্রে ঘটে। এই বৈশিষ্ট্যটি প্রোগ্রামটির বহু-ভাষার সংস্করণগুলিও সহজ করে তোলে; এতে সমস্ত সংজ্ঞার জন্য ইংরেজি ভাষার নামের একটি সেট থাকতে পারে এবং সেইসাথে জাপানি ভাষার নামের একটি সেট থাকতে পারে যা ইচ্ছামতো অদলবদল করা যেতে পারে। প্রোগ্রামের প্রতিটি সংজ্ঞায়িত বস্তুর জন্য একটি অনন্য পরিচয় থাকা স্বয়ংক্রিয় রিফ্যাক্টরিং কাজগুলি সম্পাদন করা সহজ করে তোলে, পাশাপাশি সংস্করণ ব্যবস্থায় কোড চেক-ইনগুলি সহজতর করে তোলে। উদাহরণস্বরূপ, অনেক বর্তমান কোড সহযোগিতা ব্যবস্থায় (যেমন। জিট), যখন দুজন প্রোগ্রামার সেই দ্বন্দ্বকে পরিবর্তন করে (অর্থাৎ। যদি একজন প্রোগ্রামার কোনও ফাংশনের নাম পরিবর্তন করেন এবং অন্যজন সেই ফাংশনের একটি লাইন পরিবর্তন করেন), সংস্করণ ব্যবস্থা মনে করবে যে একজন প্রোগ্রামার একটি নতুন ফাংশন তৈরি করেছেন এবং অন্যজন একটি পুরানো ফাংশন পরিবর্তন করেছেন। একটি আইপি সংস্করণ ব্যবস্থায়, এটি জানতে পারবে যে একজন প্রোগ্রামার কেবল একটি নাম পরিবর্তন করেছেন এবং অন্যজন কোড পরিবর্তন করেছেন। বিশদ আইপি সিস্টেমের স্তরগুলিও বিভিন্ন স্তরের বিশদ সরবরাহ করে, যা প্রোগ্রামারকে "জুম ইন" বা আউট করার অনুমতি দেয়। উপরের উদাহরণে, প্রোগ্রামার এমন একটি স্তর পেতে জুম আউট করতে পারে যা এইরকম কিছু বলবেঃ <<1 থেকে 10 নম্বর প্রিন্ট করুন> এইভাবে আইপি সিস্টেমগুলি একটি বড় মাত্রায় স্ব-নথিভুক্ত হয়, যা প্রোগ্রামারকে সামগ্রিকভাবে প্রোগ্রামের একটি ভাল উচ্চ-স্তরের ছবি রাখতে দেয়। অনুরূপ কাজ এমন প্রকল্প রয়েছে যা উচ্চ স্তরের বিমূর্ততার সাথে কোড তৈরি করতে অনুরূপ ধারণাগুলি কাজে লাগায়। এগুলির মধ্যে রয়েছেঃ কনসেপ্ট প্রোগ্রামিং ল্যাঙ্গুয়েজ-ওরিয়েন্টেড প্রোগ্রামিং (এলওপি) ডোমেন-স্পেসিফিক ল্যাঙ্গুয়েজ (ডিএসএল) প্রোগ্রাম ট্রান্সফর্মেশন সেম্যান্টিক-ওরিয়েন্টেড প্রোগ্রামিং (এসওপি) সাক্ষর প্রোগ্রামিং মডেল-চালিত স্থাপত্য (এমডিএ) সফ্টওয়্যার ফ্যাক্টরি মেটাপ্রোগ্রামিং লিস্প (প্রোগ্রামিং ল্যাঙ্গুয়েজ) আরও দেখুন স্বয়ংক্রিয় প্রোগ্রামিং অবজেক্ট ডাটাবেস প্রোগ্রামিং প্রদর্শনের মাধ্যমে আর্টেফাকটুর সেম্যান্টিক রেজোলিউশন ট্রি স্ট্রাকচার এডিটর রেফারেন্স বাহ্যিক লিঙ্কগুলি ইচ্ছাকৃত সফ্টওয়্যার-চার্লস সিমোনির সংস্থা দ্য ডেথ অফ কম্পিউটার ল্যাঙ্গুয়েজেস, দ্য বার্থ অফ ইন্টেনশনাল প্রোগ্রামিং, চার্লস সিমোনির একটি প্রযুক্তিগত প্রতিবেদন (1995) ইচ্ছাকৃত প্রোগ্রামিং-উত্তরাধিকার যুগে উদ্ভাবন, চার্লস সিমোনির একটি বক্তৃতা (1996) Edge.org চার্লস সিমোনির সাথে সাক্ষাত্কার - মার্টিন ফাউলারের সাধারণ শ্রেণীর সরঞ্জাম সম্পর্কে নিবন্ধ যা ইচ্ছাকৃত প্রোগ্রামিং এর একটি উদাহরণ। "যেকোন কিছু আপনি করতে পারেন, আমি মেটা করতে পারি" মঙ্গলবার, জানুয়ারী 9,2007, স্কট রোজেনবার্গ, টেকনোলজি রিভিউ ওয়েটিং দ্য ডে যখন প্রত্যেকে সফ্টওয়্যার লেখে, দ্য নিউ ইয়র্ক টাইমস, 28 জানুয়ারী 2007 প্রোগ্রামিং কি এনক্রিপশনের একটি রূপ?, চার্লস সিমোনির দ্বারা (2005) চার্লস সিমোনির দ্বারা যথাযথ স্তরের বিমূর্ততা (2005) প্রোগ্রামগুলির তথ্য সামগ্রী, চার্লস সিমোনির দ্বারা (2005) বৈশিষ্ট্য এক্স ক্ষতিকারক হিসাবে বিবেচিত, চার্লস সিমোনির দ্বারা (2005) নোটেশনস অ্যান্ড প্রোগ্রামিং ল্যাঙ্গুয়েজেস, চার্লস সিমোনির দ্বারা (2005) ডেভেলপারদের কাছ থেকে ব্যক্তিগত পর্যবেক্ষণ, মার্ক এডেলের দ্বারা (2005) মাইক্রোসফ্ট রিসার্চের শিক্ষামূলক ভিডিও তাদের অভিপ্রায় প্রোগ্রামিং সিস্টেম (এ. এস.) প্রবর্তন করছে।