২০২৫ সালে ১২টি অদ্ভুত প্রোগ্রামিং ভাষা অন্বেষণ করুন: কীভাবে এগুলো অস্বাভাবিক, কোথায় কার্যকর, এবং কোথায় দ্রুত চেষ্টা করে দেখতে পারেন জেনে নিন।

“অদ্ভুত” মানে অবশ্যই “ভাল” বা “কঠিন” নয়। এর অর্থ সাধারণত কোনো ভাষা অস্বাভাবিক কিছু করছে—হতে পারে কোড লেখার ধরন, ভাষাটির উদ্দেশ্য, বা শেখাতে চাওয়া কোনো ধারণা।
এই আর্টিকেলে, কোনো প্রোগ্রামিং ভাষাকে অদ্ভুত ধরা হবে যদি এটি কমপক্ষে একটির সঙ্গে মেলে:
অদ্ভুত বা এসোল্যাবিক ভাষা শেখা প্রায়ই মজা এবং অবিশ্বাস্যভাবে শিক্ষণীয় হয়, কারণ এটি আপনাকে ধরন-পরিবর্তনে বাধ্য করে: কীভাবে একটি “প্রোগ্রাম” দেখায়, ডেটা কীভাবে প্রবাহিত করে, এবং আসলে কতটুকু সিনট্যাক্স দরকার।
অনেক ভাষাই দৈনন্দিন কাজের টুল নয়। কিছু ধাঁধা, কিছু গবেষণার উপকরণ, আর কিছু একমাত্র সংকীর্ণ কাজেই দুর্দান্ত কিন্তু অন্য সবকিছুর জন্য বেমানান। লাভটি হবে অন্তর্দৃষ্টিতে—সবসময় উৎপাদকতায় নয়।
২০২৫ হচ্ছে অন্বেষণের জন্য ভালো সময়: একাধিক নিস ভাষার সক্রিয় কমিউনিটি, উন্নত ডকুমেন্টেশন, এবং ব্যবহারবান্ধব টুলিং (REPL, প্যাকেজ, অনলাইন প্লেগ্রাউন্ড) দেখা যাচ্ছে। বিকল্প প্যারাডাইমেও নতুন আগ্রহ—ডেটা কাজের জন্য অ্যারে প্রোগ্রামিং, নিয়ম-ভিত্তিক যুক্তির জন্য লজিক প্রোগ্রামিং, এবং স্পেশাল হার্ডওয়্যার ছাড়াই পরীক্ষা করার জন্য কোয়ান্টাম “টয়” পরিবেশ।
আমরা “বিচিত্রতা” কে র্যাঙ্ক করার বদলে এই তালিকাকে বিভাগে ভাগ করেছি (সংক্ষিপ্ত/মিনিমালিস্ট, অদৃশ্য/ইনভিজিবল, 2D, অ্যারে, লজিক, স্ট্যাক-ভিত্তিক, নিরাপত্তা-কেন্দ্রিক, কোয়ান্টাম)। প্রতিটি অংশে একটি ছোট “ট্রাই করে দেখুন” ধারনা আছে যাতে আপনি দ্রুত একটি সফল ছোট পরীক্ষা করতে পারেন এবং সিদ্ধান্ত নিতে পারেন আরও গভীরভাবে যাওয়া দরকার কি না।
“অদ্ভুত” অনেক কিছু বোঝায়, তাই এই তালিকা শুধু অদ্ভুত সিনট্যাক্সের প্রদর্শনী নয়। আমরা এমন ভাষা বেছে নিয়েছি যা সত্যিই ভিন্ন মনে হয় এবং ২০২৫-এ শেখা প্রায়োগ্য।
প্রথমত, আমরা দেখেছি অরিজিনালিটি: এমন ভাষা যা নতুন মানসিক মডেল চাপতে বাধ্য করে (২ডি কোড, স্ট্যাক-বিভিত্তিক চিন্তাভাবনা, নিয়ম/কোয়েরি, ডিফল্ট হিসেবে অ্যারে, কোয়ান্টাম সার্কিট)।
দ্বিতীয়ত, আমরা শেখার যোগ্যতা-কে অগ্রাধিকার দিয়েছি। অদ্ভুত হলেও, ভাষাটির একটি স্পষ্ট “হ্যালো ওয়ার্ল্ড,” টিউটোরিয়াল, এবং ছোট প্রোগ্রাম লেখার পথ থাকা উচিত—অধিকাংশ সময় সপ্তাহজুড়ে সেটআপের ঝামেলা ছাড়া।
তৃতীয়ত, আমরা টুলিং পরীক্ষা করেছি: পাবলিক ডকুমেন্টেশন, কাজ করা ইন্টারপ্রেটার/কম্পাইলার, বা সক্রিয় রিপোজিটরি। একটি ভাষা যখন দারুণ হলেও যদি আপনি তা আধুনিক মেশিনে চালাতে না পারেন, তাহলে সুপারিশ করা কঠিন।
অবশেষে, আমরা সমতা বজায় রাখার চেষ্টা করেছি—ক্লাসিক এসল্যাং (মজা, মন-মুগ্ধকর) এবং গুরুতর নিস/গবেষণামূলক ভাষার মিশ্রণ (প্রচলিত কাজে রূপান্তরযোগ্য ধারণা) দুটোই আছে।
অচেনা কোডকে এমনভাবে বিবেচনা করুন যেমনটা আপনি কোনো অচেনা ডাউনলোডকে বিবেচনা করবেন। ইন্টারপ্রেটার এবং স্যাম্পল প্রোগ্রামগুলো একটি কনটেইনার বা স্যান্ডবক্সে চালাতে পছন্দ করুন (অথবা অন্তত একটি টেস্ট ফোল্ডার), এবং অজানা কোডকে এমন পরিবেশে পেস্ট করা থেকে বিরত থাকুন যেগুলো আপনার ব্যক্তিগত ফাইল, SSH কী, বা ক্লাউড ক্রেডেনশিয়ালের অ্যাক্সেস রাখে।
অধিক পরীক্ষা-নিরীক্ষা করলে একটি “নিরাপদ প্লেগ্রাউন্ড” সেটআপ মানক করা সাহায্য করবে। উদাহরণস্বরূপ, আপনি একটি ছোট ডিসপোজেবল ওয়েব অ্যাপ চালু করতে পারেন যা ব্যাক-এন্ডে ইন্টারপ্রেটারগুলি API-এর পেছনে চালায় এবং রানগুলির মাঝে স্টেট রিসেট করে। Koder.ai-এর মতো প্ল্যাটফর্ম এখানে সুবিধাজনক হতে পারে, কারণ আপনি চ্যাটে যে প্লেগ্রাউন্ড চান তা বর্ণনা করে (ফ্রন্টেন্ড + ব্যাকএন্ড + ডাটাবেস যদি লাগে) দ্রুত পুনরাবৃত্তি করতে পারেন এবং উৎস কোড এক্সপোর্ট করতে পারবেন।
Brainfuck একেবারে অদ্ভুত কারণ এটি প্রায় হাস্যকরভাবে ছোট নির্দেশ সেট দিয়ে সব কিছু করা চেষ্টা করে। ভাষাটির মাত্র আটটি কমান্ড আছে (+ - < > [ ] . ,), কোন কীওয়ার্ড নেই, প্রচলিত অর্থে ভেরিয়েবল নেই, এবং পাঠযোগ্য কাঠামো নেই যদি না আপনি ট্রিকটি জানেন।
নামকরণ করা ভেরিয়েবলের বদলে Brainfuck আপনাকে একটি টেপ মেমরি ও একটি পয়েন্টার দেয় যা বাম-ডান যায়। আপনি বর্তমান সেলে ইনক্রিমেন্ট/ডিক্রিমেন্ট করেন, পয়েন্টার সরান, এবং লুপের জন্য ব্র্যাকেট ব্যবহার করেন। মাত্র তাই। ফলাফল যেন অ্যাপ্লিকেশন না লিখে বরং একটি লজিক পাজল সমাধানের মতো লাগে।
Brainfuck শেখায় কতটুকু নিয়ে একটি কম্পিউটার গণনা করতে পারে—এটি আপনাকে নিম্নলিখিত বিষয়ে ভাবতে বাধ্য করে:
[ এবং ] দিয়ে লুপ)আপনি যদি কখনও ভেবে থাকেন যে একটি ইন্টারপ্রেটার বা কম্পাইলার আসলে কী করে, Brainfuck অনুশীলনের জন্য চমৎকার লক্ষ্য।
প্রধানত প্রোগ্রামিং ধাঁধা, তত্ত্বগত আলোচনা, কোড গলফ, এবং ইন্টারপ্রেটার লেখার অনুশীলনে।
“হ্যালো ওয়ার্ল্ড” (ক্লাসিক সংস্করণ):
++++++++++[\\u003e+++++++\\u003e++++++++++\\u003e+++\\u003e+\\u003c\\u003c\\u003c\\u003c-]\\u003e++.\\u003e+.+++++++..+++.\\u003e++.\\u003c\\u003c+++++++++++++++.\\u003e.+++.------.--------.\\u003e+.\\u003e.
একটি ছোট লুপের উদাহরণ যা একটি মান সেট করে এবং সেটি চর হিসেবে প্রিন্ট করে:
+++++[\\u003e++++++++\\u003c-]\\u003e.
টিপ: ধাপে ধাপে টেপ পরিবর্তন দেখে অনলাইন Brainfuck ইন্টারপ্রেটার ব্যবহার করুন।
Whitespace একটি এসোটেরিক ভাষা যেখানে শুধু স্পেস, ট্যাব, এবং লাইনব্রেকই অর্থ বহন করে। বাকিটা সবই কমেন্ট হিসেবে গণ্য হয়। এটি মানে একটি বৈধ প্রোগ্রাম আপনার এডিটরে পুরোপুরি খালি দেখাতে পারে—তবুও চলবে।
অধিকাংশ ভাষা দৃশ্যমান কীওয়ার্ড ও বিন্যাস ব্যবহার করে। Whitespace সেই প্রত্যাশাকে উল্টে দেয়: সম্পূর্ণ সোর্স কোড “অদৃশ্য” হয় যদি না আপনি বিশেষ সেটিং দেখান। এটি কতোটা প্রোগ্রামিং নিয়ম, টুলিং, এবং মানবচোখের ওপর নির্ভর করে—তা বোঝাতে পারফেক্ট উদাহরণ।
Whitespace আপনাকে নিম্নস্তরের পার্সিং ও টোকেনাইজেশন সম্পর্কে ভাবতে বাধ্য করে:
আপনি যদি কখনও একটি ছোট পার্সার তৈরি করে থাকেন, লেক্সার লিখে থাকেন, বা বাস্তব কোডে “অদৃশ্য” অক্ষর (মিশ্রিত ট্যাব/স্পেস, অদ্ভুত লাইন-এন্ডিং) ডিবাগ করে থাকেন, Whitespace সেই কষ্টকে শেখার অনুশীলনে পরিণত করে।
ডিবাগিংই প্রধান চ্যালেঞ্জ। একটি ভুল ট্যাব বা লাইনেরফ পুরো অর্থ বদলে দিতে পারে।
ভিজুয়ালাইজার (স্পেস/ট্যাব/নতুন লাইনের জন্য চিহ্ন দেখানো টুল) এবং "show invisibles" করে দেয় এমন এডিটর ব্যবহার করুন। নচেৎ নিজের প্রোগ্রাম পরে পড়াও হতাশাজনক হবে।
Whitespce-এ এমন ছোট প্রোগ্রাম লিখুন যা একটি চর বা সংখ্যা প্রিন্ট করে, তারপর একই আচরণ সাধারণ ভাষায় (Python/JavaScript) বাস্তবায়ন করুন। তুলনা করুন:
Befunge অদ্ভুত কারণ প্রোগ্রামটি উপরের থেকে নীচে পড়ে এমন লাইনগুলো নয়—এটি একটি 2D গ্রিডে থাকে, এবং নির্দেশিকা পয়েন্টার গ্রিডে ঘুরে—ডান, বাম, উপরে, নিচে—আপনি যেখানে তির রাখেন সেখান থেকে চলে। এটি স্ক্রিপ্ট লেখার চেয়ে একটি ছোট সার্কিট ডায়াগ্রাম বা পিনবল টেবিল নেভিগেট করার মতো।
অধিকাংশ ভাষায় কোড স্থির পাঠ্য। Befunge-এ প্রোগ্রাম চলাকালীন নিজেই নিজের সম্পাদক্য করে: নির্দেশনাগুলো গ্রিডে নতুন চর লিখতে পারে, পরিবর্তন করে কি পরবর্তীতে কার্যকর হবে। সেই স্ব-পরিবর্তনশীল ক্ষমতাই ভাষার পরিচয়, এবং এটি আশ্চর্যজনক, ধাঁধার মতো আচরণ তৈরি করতে পারে।
Befunge আপনাকে ডেটাফ্লো ও স্টেট-মেশিন চিন্তাভাবনায় নিয়ে যায়: আপনি পথ পরিকল্পনা করেন, লুপ হলো বাস্তব রুট, এবং শাখনীয়তা হলো স্টিয়ারিং। যেখানে একাধিক দিক স্বাভাবিক, সেখানে আপনি সহজে সমান্তরাল-রকমের ফ্লো কল্পনা করতে পারবেন (যদিও ইন্টারপ্রেটার এখনও একবারে একটি নির্দেশনা চালায়)।
Befunge ধাঁধা, কোড গলফ, ইন্টারেক্টিভ ইনস্টলেশন বা কুইর্কি জেনেরেটিভ বিহেভিয়র দেখাতে দ্রুত ডেমোতে ভালো কাজ করে।
নিচে একটি সরল Befunge-93 প্রোগ্রাম আছে যা একটি সংখ্যা (ডিজিট) পড়ে এবং দ্বিগুণ করে প্রিন্ট করে:
\\u00262*.
এটি যে কোনো Befunge ইন্টারপ্রেটারে চালান: একটি সংখ্যা (0–9) টাইপ করুন, আউটপুট দেখুন। তারপরে দিক নির্দেশক (> < ^ v) যোগ করে এবং অতিরিক্ত সেল যোগ করে ইন্সট্রাকশন পয়েন্টারকে সরল রেখার বদলে একটি “রুট” নিতে অনুশীলন করুন।
Hexagony অদ্ভুত কারণ আপনার প্রোগ্রাম একটি টেক্সট লাইন নয়—এটি একটি হেক্সাগোনাল “হানি-কম্ব” সেলের ওপর সাজানো। একটি নির্দেশিকা পয়েন্টার গ্রিড জুড়ে চলতে পারে, প্রান্তে ঘুরে বা বাঁক নিয়ে, এমন নিয়ম অনুসরণ করে যা একটি বোর্ড গেম নেভিগেশনের বেশি মনে করায়।
Hexagony আপনাকে স্থানিকভাবে ভাবতে বাধ্য করে: কোন ইনস্ট্রাকশন কোথায় আছে তা ঠিক কতটা গুরুত্বপূর্ণ। এটি অনুশীলনে সাহায্য করে:
এটি অন্বেষণের জন্য। আপনি সম্ভবত কাজের জন্য Python বা JavaScript প্রতিস্থাপন করবেন না, কিন্তু আপনি ইন্টারপ্রেটার, ইনস্ট্রাকশন পয়েন্টার, এবং কন্ট্রোল ফ্লো কেমন কাজ করে তা গভীরভাবে বুঝে ফিরে আসবেন।
ছোট একটি গ্রিড কল্পনা করে শুরু করুন যেখানে প্রতিটি সেলে একটি চর ইনস্ট্রাকশন। আপনি স্টার্ট সেলে ইনস্ট্রাকশন পয়েন্টার সেট করবেন একটি দিকসহ (হেক্স গ্রিডে ছয়টি সম্ভাব্য দিক)। তারপর:
প্রথম অনুশীলন হিসেবে এমন একটি প্রোগ্রাম এক ধাপে চালান যা শুধু দিক বদলায় এবং একটি চর আউটপুট করে—এটা কেবল অনুভব করানোর জন্য যে নেভিগেশনই কন্ট্রোল ফ্লো। নিরাপদ প্লেগ্রাউন্ড পদ্ধতির জন্য অনলাইন ইন্টারপ্রেটার এবং সিঙ্গল-স্টেপ এক্সিকিউশন ব্যবহার করুন (দেখুন /blog/how-to-try-esoteric-languages-safely)।
অধিকাংশ ভাষা আপনাকে ধাপে ধাপে বর্ণনা করতে উত্সাহ দেয়: এটা করো, তারপর ওটা করো। Wolfram Language অদ্ভুত কারণ অনেক ক্ষেত্রে আপনি নিয়ম বর্ণনা করতে পারেন—সম্পর্ক ও রূপান্তর—এবং সিস্টেম সেগুলো প্রয়োগ করে।
সূত্রতত্ত্বে Wolfram Language প্রতীকী এবং নিয়ম-ভিত্তিক। আপনি এমন প্যাটার্ন লিখেন যা একটি এক্সপ্রেশন-এর অংশের সঙ্গে মেলে, তারপর কীভাবে সেই অংশ পুনঃলিখন হবে তা জানিয়ে দেয়। নিয়ম প্রয়োগের মাধ্যমে আপনি এক্সপ্রেশনকে ফলাফল দিকে টেনে আনেন, নিয়ন্ত্রণ প্রবাহ ম্যানুয়ালি না করে।
এ ধরনের শৈলী আপনাকে টার্ম রাইটিং-এর ধারণা শেখায়: গণনা হলো পুনরাবৃত্তি প্রতিস্থাপন। অনেক অ্যালগরিদম আসলে কিছু রাইট-রুলস এবং সেগুলো প্রয়োগের স্ট্র্যাটেজি—এমন ধাঁচের। এটি প্যাটার্ন ম্যাচিং-এও অন্তর্দৃষ্টি দেয়—শুধু স্ট্রিং নয়, সংগঠিত এক্সপ্রেশনের ওপরও।
রুল-ভিত্তিক প্রোগ্রামিং তখনই উজ্জ্বল হয় যখন আপনি রূপান্তর মডেল করেন: বিযগণিত সরলীকরণ, সূত্র পুনর্লিখন, ট্রি ম্যানিপুলেশন, ফরম্যাট রূপান্তর, অথবা এমন সিস্টেম যেখানে নিয়ম প্রক্রিয়ার চেয়ে বেশি গুরুত্বপূর্ণ।
Wolfram Language-এ নীচের কোড পেস্ট করুন এবং দেখুন কীভাবে কয়েকটি নিয়ম আচরণ বদলে দেয়:
rules = {
x_ + 0 -\\u003e x,
0 + x_ -\\u003e x,
x_ * 1 -\\u003e x,
1 * x_ -\\u003e x,
x_ + x_ -\\u003e 2 x
};
expr = (a + 0) + (a + a) * 1;
FixedPoint[# //. rules \\u0026, expr]
একটি নিয়ম (উদাহরণস্বরূপ বিতরণীয় রিরাইট) যোগ করে সিস্টেমের “ব্যাক্তিত্ব” কেমন বদলায় তা পরীক্ষা করুন।
APL ও এর আধুনিক কপিয়াদি BQN অদ্ভুত কারণ তারা ডিফল্ট মানসিক মডেল উল্টে দেয়। একক মান ও লুপের বদলে আপনি সবকিছুকে একটি অ্যারে হিসেবে বিবেচনা করবেন, এবং বেশিরভাগ অপারেশন স্বয়ংক্রিয়ভাবে পুরো সংগ্রহ জুড়ে প্রযোজ্য হয়।
সাধারণ ভাষায় একটি তালিকার প্রতিটি উপাদানে সংখ্যা যোগ করতে লুপ বা হেল্পার ফাংশন লাগে। APL/BQN-এ “10 যোগ কর” মানে “প্রতিটি উপাদানে 10 যোগ কর” এবং ভাষাটি এটাকেই স্বাভাবিক বিবেচনা করে। এই ব্রডকাস্টিং শক্তিশালী—কিন্তু প্রকৃত ধাক্কা হল নোটেশন: সংক্ষিপ্ত প্রতীকগুলিই সাধারণ অপারেশনকে উপস্থাপন করে, তাই প্রোগ্রামগুলো ঘন ও গাণিতিক দেখায়।
APL/BQN-এ কাজ করা আপনাকে শেখায়: “আমার ডেটার আকৃতি কী?” এবং “আমি কি পুরো অ্যারেগুলোকে ট্রান্সফর্ম হিসেবে প্রকাশ করতে পারি?” আপনি ধীরে ধীরে ধাপে-ধাপে প্রক্রিয়ার বদলে কয়েকটি স্পষ্ট ডেটা অপারেশনের সাথে চিন্তা করতে শিখবেন: reshape, sort, group, reduce (sum), scan (running totals), এবং outer products।
কলাম, ম্যাট্রিক্স, টাইম সিরিজ নিয়ে কাজ করলে অ্যারে ভাষাগুলো অত্যন্ত প্রকাশক্ষম হতে পারে। এ কারণেই ফাইন্যান্স ও বৈজ্ঞানিক কম্পিউটিং-এ এদের দীর্ঘস্থায়ী গ্রহণযোগ্যতা রয়েছে, এবং BQN আধুনিক অনুভূতিতে ডেভেলপারদের আকর্ষণ করেছে।
পরিচিত একটি কাজ বেছে নিন—যেমন সংখ্যার তালিকা নরমালাইজ করা বা মুভিং এভারেজ গণনা—এবং সেটি দুবার লিখুন: একবার লুপ ব্যবহার করে, একবার “হোল-অ্যারে” ট্রান্সফর্ম হিসেবে। প্রতীকগুলি অচেনা লাগলেও, অনুশীলনটি আপনাকে গণনাকে কন্ট্রোল ফ্লো নয় ডেটা ফ্লো হিসেবে দেখায়।
J ও K অদ্ভুত কারণ এগুলো আপনাকে পুরো অ্যারে (লিস্ট, টেবিল) ও কম্পোজিশন নিয়ে ভাবতে উৎসাহ দেয়—ধাপে ধাপে নির্দেশনার বদলে আপনি ছোট ফাংশনের পাইপলাইন গঠন করবেন। প্রায়ই এতই সংক্ষিপ্ত যে সেগুলোকে অকস্মাৎ অনেকটা বিরামচিহ্নের মতো মনে হবে।
উভয় ভাষাই অপারেশন চেইনিংয়ের জন্য ডিজাইন করা: ডেটা নিয়ে কাজ করো, ট্রান্সফর্ম করো, রিডিউস করো, রেশেপ করো। J “টেসটিক” (পয়েন্ট-ফ্রি) প্রোগ্রামিং-এ ঝুঁকে যেখানে ইনপুটের নাম না করে আচরণ সংজ্ঞায়িত করা হয়। K (এবং kdb+ তে q) অনুরূপভাবে সংক্ষিপ্ত এবং দ্রুত, কম্পোজেবল ডেটা ট্রান্সফর্মের জন্য নির্মিত।
J/K-এ খানিক সময় কাটালে আপনি অন্যান্য ভাষায়ও লক্ষ্য করবেন: আপনি জিজ্ঞেস করতে শুরু করবেন “ট্রান্সফর্মটা কী?” না যে “লুপটা কেমন?” প্রোগ্রামগুলোকে কম্পোজিশন হিসাবে পড়তে শিখবেন—যেখানে পাইপলাইনের স্ট্রাকচারই ব্যাখ্যা।
এই ভাষাগুলো “এই কালেকশনটা নিয়ে সেই সারসংক্ষেপ হিসাব কর” ধরনের কাজে দারুণ: র্যাংকিং, গ্রুপিং, নরমালাইজেশন, ফিল্টারিং, দ্রুত এক্সপ্লোরেটরি অ্যানালাইসিস। যেখানে বেশি কোড হলে বোরিং বুটস্ট্র্যাপ লাগবে, সেখানে এগুলো সন্তোষজনক।
J-এ, একটি নরমালাইজেশন পাইপলাইন (min-max scale) ইনপুটের নাম ছাড়াই সংজ্ঞায়িত করার চেষ্টা করুন:
norm =: (] - \\u003c./) % (\\u003e./ - \\u003c./)
norm 3 10 5 7
অথবা একটি ছোট টেক্সট পাইপলাইন—একটি স্ট্রিং-এ শব্দ গণনা:
#@;: 'J makes pipelines feel like algebra'
চিহ্নগুলি প্রথমে ঘন মনে হলেও চিন্তা করবেন না—প্রাথমিক ঘর্ষণই উদ্দেশ্য: এটি আপনাকে ডেটা অপারেশনকে কম্পোজেবল বিল্ডিং ব্লক হিসেবে দেখতে বাধ্য করে।
Forth ও Factor অদ্ভুত কারণ আপনি Python বা JavaScript-এ যেমন এক্সপ্রেশন লেখেন, ঠিক সেভাবে লেখেন না। পরিবর্তে আপনি বেশিরভাগ সময় স্ট্যাক অপারেশনের ক্রম লিখেন: মান push করুন, একটি word (ফাংশন) প্রয়োগ করুন, এবং ফলাফল পরবর্তী word-এর জন্য স্ট্যাকে রেখে দিন।
স্ট্যাক ভাষায় ক্রমই সিনট্যাক্স। ক্রমে সামান্য পরিবর্তন প্রচণ্ডভাবে অর্থ বদলে দেয়, এবং পৃষ্ঠপটে কম “নাউন” (ভেরিয়েবল) দেখা যায়। Forth কোরের জন্য বিখ্যাত—একটি খুবই ছোট কোর দিয়ে প্রয়োগ করা যায়। Factor স্ট্যাক মডেল রাখে কিন্তু একটি আধুনিক স্ট্যান্ডার্ড লাইব্রেরি, টুলিং, এবং আরও গঠনমূলক অনুভূতি যোগ করে।
আপনি স্ট্যাক মেশিন কিভাবে কাজ করে তা শিখবেন এবং কেন এগুলো ইন্টারপ্রেটার ও ভার্চুয়াল মেশিনের জন্য আকর্ষণীয়। এছাড়া একটুকু অনুশীলনে কম্পোজিশন-এর পাঠ পাবেন: ছোট শব্দ (words) বানানো যা সুন্দরভাবে একসাথে জোড়া যায়—কারণ স্ট্যাক ব্যালেন্স রাখা বাধ্যতামূলক।
কোর ছোট থাকার কারণে Forth-রকম সিস্টেম এমবেডেড ডিভাইস, গেম, এবং সেইসব স্ক্রিপ্টে সহজে এমবেড করা যায় যেখানে একটি সংক্ষিপ্ত কমান্ড ভাষা চান। Factor দ্রুত কম্পোজেবল প্রোগ্রাম নির্মাণের জন্য একটি প্লেগ্রাউন্ড।
প্রথমে অ্যারিথমেটিক ও স্ট্যাক ম্যানিপুলেশন (উদাহরণ: ডুপ্লিকেট ও সোয়াপ)। তারপর একটি ছোট ক্যালকুল্যাটর REPL তৈরি করুন: একটি টোকেন পড়ুন, সংখ্যা পুশ করুন, + ও * মত word চালান, এবং স্ট্যাক প্রিন্ট করুন। যদি এটা কাঁপে, একটি ইউজার-ডিফাইন্ড word-গুলোর ডিকশনারি সহ ছোট ইন্টারপ্রেটার বানান।
অধিকাংশ ভাষা আপনাকে বলতে বলে কিভাবে কিছু করতে হয়: এখানে লুপ করো, সেখানে শাখা নাও, এই ভেরিয়েবল আপডেট করো। Prolog ও Datalog এটি উল্টে দেয়। আপনি তথ্য (facts) ও নিয়ম (rules) বর্ণনা করেন, তারপর প্রশ্ন করেন—সিস্টেম উত্তর খুঁজে বের করে।
নিয়ন্ত্রণ প্রবাহের বদলে আপনি লজিক নিয়ম লিখেন। Prolog প্রোগ্রাম প্রায়ই একটি সংক্ষিপ্ত বিধির সেটের মতো পড়ে, প্লাস কয়েকটি কোয়েরি। আড়ালে Prolog ইউনিফিকেশন (ম্যাচিং) ও ব্যাকট্র্যাকিং (বিকল্প চেষ্টা) ব্যবহার করে সমাধান খুঁজে পায়।
Datalog মিলতে পারে—সাধারণত কিছুটা সীমাবদ্ধ (একইভাবে জটিল টার্ম নেই), কিন্তু বড়-স্কেলে নিয়ম মূল্যায়ন ও ডাটাবেস-ধর্মী যুক্তির জন্য চমৎকার।
ঘোষক শৈলীতে কাজ করলে একটি ভিন্ন মানসিক মডেল প্রয়োজন:
এই ধারণাগুলো এসোল্যাং-এর বাইরেও দরকার পড়ে—রুল ইঞ্জিন, পলিসি সিস্টেম, কোয়েরি প্ল্যানার, এবং ভাষা গবেষণায়।
শিডিউলিং, কনফিগারেশন নিয়ম, জ্ঞানভান্ডার, এবং ধাঁধা সমাধানে লজিক প্রোগ্রামিং বিশেষ উপযোগী—যেখানে “এই শর্তগুলো পূরণ করে এমন একটি সমাধান খুঁজে পেতে হবে” সেটাই লক্ষ্য।
parent(alex, sam).
parent(sam, riley).
grandparent(X, Y) :- parent(X, Z), parent(Z, Y).
এবার কোয়েরি করুন:
?- grandparent(alex, Who).
আপনি লুপ লিখেননি; আপনি একটি প্রশ্ন করেছেন। এই বিভ্রান্তি-উত্তর স্থানান্তরই প্রকৃত পাঠ—এবং এ কারণেই এই নিস ভাষাগুলো ২০২৫-এও সতেজ লাগে।
Rust অদ্ভুত মনে হতে পারে কারণ এটি দুর্লভ বা গোপন নয়—বরং কারণ এটি আপনাকে একটি নতুন মানসিক মডেল শিখতে বলে: অধিকার (ownership)। Java বা Python-এর মতো গারবেজ কালেক্টর বা C-এর মতো ম্যানুয়াল মেমরি নয়, Rust কম্পাইল-টাইমে সেট করে দেয় কার কাছে কোন মানের “অধিকার” আছে এবং কিভাবে শেয়ার করা যাবে।
borrow checker হলো কম্পাইল-টাইম রেফারি। এটি অনেক সাধারণ বাগ—use-after-free, double free, এবং ডাটা-রেস—আকে আটকায় কম্পাইল সময়ে। শুরুতে এটা বিস্ময়কর হতে পারে: আপনি যা বলতে চেয়েছেন বুঝতে পারেন, কিন্তু Rust প্রমাণ চায়।
Rust-এর বড় পাঠ হচ্ছে পারফরম্যান্স ও নিরাপত্তার মধ্যে বাধা থাকা জরুরি নয়। আপনি লাউঞ্জটাইম লাইফটাইম, স্পষ্ট ডেটা ফ্লো, এবং “একজন মালিক” বনাম “শেয়ার করা অ্যাক্সেস” সম্পর্কে ভাবতে শুরু করবেন। এই অভ্যাসগুলি অন্য ভাষায়ও কাজে লাগে।
Rust সিস্টেম টুল, কমান্ড-লাইন ইউটিলিটি, গেম ইঞ্জিন, এমবেডেড প্রকল্প, এবং পারফরম্যান্স-সংবেদনশীল সার্ভিসে বাস্তব পছন্দ—যেখানে গতি গুরুত্বপূর্ণ এবং ক্র্যাশ ব্যয়বহুল।
একটি সাধারণ স্ক্রিপ্ট নিন (ওয়ার্ড কাউন্টার, CSV ক্লিনার, বা ফাইল রেনেমার)। Rust-এ এটা বাস্তবায়ন করুন, তারপর ইচ্ছাকৃতভাবে একটি বাগ ঢোকান:
Rust প্রায়ই কম্পাইল হতে দেবে না যতক্ষণ না ঝুঁকিপূর্ণ আচরণ ঠিক করা হয়। এর ত্রুটি বার্তাগুলোকে নির্দেশিকা হিসেবে নিন: তারা বলে আপনি কোন নিয়ম ভেঙেছেন এবং সাধারণত একটি নিরাপদ কাঠামো সুপারিশ করে।
কোয়ান্টাম প্রোগ্রামিং অদ্ভুত কারণ আপনি ধারাবাহিক ধাপের বদলে একটি কোয়ান্টাম সার্কিট বর্ণনা করছেন: কিউবিট, গেট, এবং মাপা। “ফাংশন রিটার্ন করে X”–ধারণা এখানে প্রায়ই নয়—ফলাফলসমূহ প্রোবাবিলিস্টিক; একই প্রোগ্রাম বহুবার চালালে আপনি ভিন্ন আউটপুট পেতে পারেন।
Q# (Microsoft) ও Qiskit (IBM) সার্কিট অপারেশন ও মেজারমেন্ট-ভিত্তিক। আপনি এমন কোড লিখেন যা সুপারপজিশন ও এনট্যাংগলমেন্ট তৈরি করে, তারপর পরিমাপ করে। এই মানসিকতা প্রচলিত অ্যাপের থেকে অনেক আলাদা।
আপনি যদি বাস্তবে কখনও কোয়ান্টাম হার্ডওয়্যার না চালান, তবুও এই টুলগুলো মূল ধারণাগুলো কংক্রিট করে তোলে:
অধিকাংশ মানুষ কোয়ান্টাম প্রোগ্রাম সিমুলেটরে চালায়। বাস্তব ডিভাইসগুলিতে নয়েজ, কিউ, ও সীমাবদ্ধতা থাকে। সিমুলেটর মানসিক মডেল শেখার জন্য মূল্যবান—হার্ডওয়্যারের ঝামেলা ছাড়াই।
নিচে দুটি এনট্যাংগেল্ড কিউবিট (বেল পেয়ার) তৈরি করে সেগুলো পরিমাপ করার উদাহরণ—সিমুলেটরে চালিয়ে দেখুন।
from qiskit import QuantumCircuit
from qiskit_aer import AerSimulator
qc = QuantumCircuit(2, 2)
qc.h(0)
qc.cx(0, 1)
qc.measure([0, 1], [0, 1])
sim = AerSimulator()
result = sim.run(qc, shots=1000).result()
print(result.get_counts())
সাধারণত আপনি প্রধানত 00 এবং 11 ফলাফল দেখতে পাবেন—এটাই "আহা" মুহূর্ত: কিউবিট দুটো আলাদা বিট নয়, বরং একটি জোড়া হিসেবে আচরণ করে।
অদ্ভুত ভাষা বেছে নেওয়া সহজ হয় যখন আপনি আপনার লক্ষ্য দিয়ে শুরু করেন। কিছু ভাষা ধারণা শেখায় (লজিক, অ্যারে, কোয়ান্টাম চিন্তা), কিছু অভ্যাস শেখায় (নিরাপত্তা নিয়ম), এবং কিছু কেবলই খেলার মতো বাধ্যবাধকতা যা সমস্য-সমাধানের ধার ধারালো করে।
অবশ্যই, এমন একটি বেছে নিন যা সামান্য অস্বস্তিকর কিন্তু এখনও পরিচালনাযোগ্য—আপনি ঘর্ষণ চান, হতাশা নয়।
1-ঘণ্টার পরিচিতি:
সংক্ষিপ্ত টিউটোরিয়াল পড়ুন এবং ৩–৫টি ছোট উদাহরণ চালান। আপনার একমাত্র উদ্দেশ্য হলো বুঝে নেওয়া কোড কীভাবে দেখতে হয় এবং কীভাবে এটি চালাতে হয়।
1-দিন প্রকল্প:
এমন কিছু ছোট কিছু তৈরি করুন যা শেষ করা যায়। ভাল অপশন:
1-সপ্তাহ ডিপ ডাইভ:
একই প্রকল্পটি পুনর্গঠন করুন: টেস্ট, এরর মেসেজ, ডকস, এবং পারফরম্যান্স টেকআপ। এখানেই ভাষার বাস্তব শক্তি ও ট্রেডঅফ স্পষ্ট হয়ে ওঠে।
আপনি যদি 1-দিন পর্যায় দ্রুত এগোতে চান, Koder.ai ব্যবহার করে একটি ছোট ওয়েব রানার (React UI + Go ব্যাকএন্ড + PostgreSQL যদি দরকার) scaffold করা যায়—একটি সহজ চ্যাট বর্ণনা থেকে—তারপর প্ল্যানিং মোডে পুনরাবৃত্তি করে সোর্স কোড এক্সপোর্ট করা যায়। এটা আপনার ভাষা অনুসন্ধানকে একটি runnable প্লেগ্রাউন্ডে রূপান্তর করতে সহজ করে।
বেশি হ্যান্ডস-অন পরীক্ষা এবং লেখার জন্য ব্রাউজ করুন /blog।
আপনি যদি টুলিং প্রসঙ্গে (এডিটর, রানার, স্যান্ডবক্স, বা টিম ওয়ার্কফ্লো) জানতে চান, দেখুন /pricing এবং নির্ধারণ করুন কোনটি আপনাকে নিয়মিত অনুশীলন করাতে সাহায্য করবে।