ভূমিকা
বিশ্বব্যাপী তথ্যপ্রযুক্তির জগতে জাভা একটি শক্তিশালী প্রোগ্রামিং ভাষা হিসেবে সুপ্রতিষ্ঠিত। শিক্ষাপ্রতিষ্ঠান থেকে শুরু করে মোবাইল ফোন, ওয়েব ও এন্টারপ্রাইজ সফটওয়্যার তৈরির জন্য জাভা খুবই জনপ্রিয়। তাই জাভার অগ্রসর বিষয়গুলো নিয়ে একটি নতুন বই বাংলা ভাষায় তথ্যপ্রযুক্তি শিক্ষার প্রসারে একটি অনন্য সংযোজন। বাংলাদেশের বেশিরভাগ বিশ্ববিদ্যালয়গুলোতেই জাভা শেখানো হয়। তবে সেখানে মূলত গুরুত্ব দেওয়া হয় অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং বা ওওপি (OOP)-এর ওপর, যেন শিক্ষার্থীরা ওওপি-এর মূল ধারণা ভালোভাবে আয়ত্ত করতে পারে এবং পরবর্তী সময়ে অন্য প্রোগ্রামিং ভাষায় কাজ করার সময়ও এই ধারণা ব্যবহার করতে পারে। আমি মনে করি, বিশ্ববিদ্যালয়ে কম্পিউটার বিজ্ঞান বিভাগের শিক্ষার্থীদের এর বেশি জাভা জানার প্রয়োজন নেই। জাভা দিয়ে গুই (GUI) তৈরি, মাল্টিথ্রেডিং, নেটওয়ার্ক প্রোগ্রামিং, ডেটাবেজ প্রোগ্রামিং, ওয়েব প্রোগ্রামিং কিংবা মোবাইল ফোনের অ্যাপ্লিকেশন তৈরি – এগুলো জাভা শেখার সময়ে শিখতে যাওয়া মানে সময়ের অপচয় এবং মূল বিষয়ে গুরুত্ব না দেওয়া। বরং নেটওয়ার্কিং কোর্সে জাভা দিয়ে নেটওয়ার্ক প্রোগ্রামিং, ডেটাবেজ কোর্সের প্রজেক্ট করার সময় জাভা (বা অন্য কোনো ভাষা) ব্যবহার করে ডেটাবেজ প্রোগ্রামিং এসব কাজ করা উচিত। তাই এই বইতে লেখক বজলুর রহমান জাভার যেসব বিষয় নিয়ে আলোচনা করেছেন, সেগুলোকে আমি বিশ্ববিদ্যালয় পর্যায়ের শিক্ষার্থীদের জন্য ঐচ্ছিক বলবো, তবে যারা পেশাদার প্রোগ্রামার, সবে মাত্র প্রোগ্রামিং শুরু করেছেন কিংবা বেশ কয়েক বছর ধরে জাভা নিয়ে কাজ করছেন, তাদের জন্য বইটি অবশ্যপাঠ্য। প্রোগ্রামিং ক্যারিয়ারে যখনই কেউ মনে করবে যে, সে যথেষ্ট শিখে ফেলেছে, বাকি জীবনে নিজের জানা জিনিসগুলো প্রয়োগ করেই কাজ চলে যাবে, তখনই আসলে তার ক্যারিয়ারের সমাপ্তি। চিকিৎসকদের মতো প্রোগ্রামারদেরও সব সময়ই নিয়মিত কাজের পাশাপাশি পড়ালেখা চালিয়ে যেতে হয়, নিত্যনতুন বিভিন্ন জিনিস নিয়ে ঘাঁটাঘাঁটি করতে হয়, নিজের জ্ঞান ও দক্ষতা বৃদ্ধির লক্ষ্যে কাজ করতে হয়। ল্যামডা এক্সপ্রেশন ও স্ট্রিম এপিআই জাভাতে বেশ নতুন সংযোজন এবং এগুলোর গুরুত্ব ও সুবিধা এতটাই যে, আমার ধারণা, এরই অনেক জাভা প্রোগ্রামার তাঁদের কাজে এগুলো ব্যবহার করা শুরু করে দিয়েছেন। তাই এগুলো না জানলে কিংবা ব্যবহার করতে স্বচ্ছন্দ না হলে প্রোগ্রামাররা পিছিয়ে পড়বেন। আমি তাই বজলুরকে বিশেষভাবে ধন্যবাদ দেব বিষয়গুলো বাংলা ভাষায় সহজভাবে তুলে ধরার জন্য। ফাংশনাল প্রোগ্রামিং নতুন কোনো ধারণা নয়, তবে বর্তমানে এটি বেশ জনপ্রিয় হচ্ছে। তাই বিভিন্ন প্রোগ্রামিং ভাষার কারিগররা এই বৈশিষ্ট্যটি তাঁদের ভাষায় যুক্ত করে ফেলেছেন কিংবা ফেলছেন। জাভাতেও ফাংশনাল প্রোগ্রামিং বিষয়টি অপেক্ষাকৃত নতুন। এখন কেউ তার প্রতিদিনকার কাজে ফাংশনাল প্রোগ্রামিং ব্যবহার করুক আর না-ই করুক, ফাংশনাল প্রোগ্রামিংয় সম্পর্কে স্বচ্ছ ধারণা তাদেরকে আরো সমৃদ্ধ করবে। এই বইটি ফাংশনাল প্রোগ্রামিং শেখানোর বই না হলেও জাভার যেই দুটি ফিচার বিশেষভাবে আলোচনা করা হয়েছে, সেগুলো জাভাতে ফাংশনাল প্রোগ্রামিং করার জন্য অত্যন্ত গুরুত্বপূর্ণ। আরেকটি বিষয় বলা প্রয়োজন। জাভা দিয়ে প্রোগ্রাম লিখতে কিংবা বিভিন্ন সফটওয়্যার তৈরি করতে গেলে কিন্তু একটি কম্পিউটার জাভায় লেখা প্রোগ্রামকে কীভাবে চালায়, সেটি না জানলেও চলবে। অর্থাৎ জাভা ভার্চুয়াল মেশিন-সম্পর্কিত খুঁটিনাটি না জেনেও দিনের পর দিন জাভা কোড লিখে যাওয়া যায়। কিন্তু বড়ো পরিসরে, বিশেষ করে আন্তর্জাতিক পরিমন্ডলে কাজ করতে হলে বেশ কিছু বিষয়ের গভীরে যাওয়া প্রয়োজন। তাই কেউ যদি একটি ভালো প্রতিষ্ঠানে ইন্টারভিউ দিতে যান এবং তিনি যদি দাবি করেন যে গত পাঁচ বছর ধরে প্রফেশনাল কাজে জাভা ব্যবহার করছেন, তাহলে যিনি ইন্টারভিউ নিচ্ছেন, তিনি আশা করবেন যে প্রার্থী জাভার খুঁটিনাটি বিষয়গুলো জানবেন, বিশেষ করে জেভিএম কীভাবে কাজ করে, গার্বেজ কালেকশন কীভাবে হয় ইত্যাদি। লেখক এই বইতে বিষয়গুলো বিস্তারিত ব্যাখ্যা করেছেন এবং এগুলো অবশ্যই জাভা প্রোগ্রামারদের জানা উচিত। পরিশেষে বলতে চাই, লেখক আ ন ম বজলুর রহমানের জাভা নিয়ে লেখা অন্য দুটি বইয়ের মতো এই বইটিও পাঠকপ্রিয় হবে এবং বাংলাদেশের তথ্যপ্রযুক্তির জগতে গুরুত্বপূর্ণ অবদান রাখবে। আর দ্বিমিক থেকে বইটি প্রকাশ করতে পেরে আমরা গর্বিত। আশা করছি, লেখক তাঁর জাভা চর্চা অব্যাহত রাখবেন এবং নিয়মিতই পাঠকদের জন্য প্রয়োজনীয় ও চমৎকার সব বই উপহার দিয়ে যাবেন। -তামিম শাহ্রিয়ার সুবিন
ভূমিকাকম্বিনেটরিকসের জগতে তোমাকে স্বাগত! তুমি হয়তো ভ্রূ কুঁচকে ভাবছ কম্বিনেটরিকস আবার কী জিনিস? এটি বীজগণিত এবং জ্যামিতির মতো গণিতের একটি শাখা এবং আধুনিক কম্পিউটার বিজ্ঞানের আজকের অবস্থানে আসার পেছনে এর অত্যন্ত গুরুত্বপূর্ণ ভূমিকা আছে। ভাল প্রোগ্রামিং করতে পারার জন্য কম্বিনেটরিকস জানা অত্যাবশ্যক। গণিত অলিম্পিয়াডে ভাল করতে হলেও কম্বিনেটরিকসে দখল থাকতে হয়, কেননা প্রতিবছর বাংলাদেশ গণিত অলিম্পিয়াডের প্রতিটি ক্যাটেগরিতে বেশ কয়েকটি এবং আন্তর্জাতিক গণিত অলিম্পিয়াড (আইএমও)-তে অন্তত একটি কম্বিনেটরিকসের সমস্যা থাকে। বর্তমানে বাংলায় চমৎকার সব গণিতের বই প্রকাশিত হলেও, কেনো যেন কম্বিনেটরিকস বিষয়ে অলিম্পিয়াডের উপযোগী বই খুব বেশি লেখা হয়নি। মূলত সেজন্যই আমি, জয়দীপ ও জাওয়াদ মিলে কম্বিনেটরিক্সের উপরে একটি বই লিখি।
আমরা যখন বইটি প্রকাশ করতে গেলাম, তখন প্রথম বুঝতে পারলাম এটি আকারে একটু বেশিই বড় হয়ে গিয়েছে! তাই দুই খণ্ডে সেটিকে ভাগ করতে হল। কিন্তু তুমি পড়ার সময় ধরে নেবে দুটি খণ্ড মিলিয়ে যেন অখণ্ড একটি বই।
এই বইটি পড়তে তোমার কোন গাণিতিক জ্ঞান লাগবে না; শুধু লাগবে অবসরের খানিকটা সময় ও একটু কৌতূহল। এর একটি বড়ো অংশ জুড়ে রয়েছে গণিত অলিম্পিয়াডের কম্বিনেটরিকস। কারণ, যে অবিস্মরণীয় আনন্দময় সময় আমরা, লেখকেরা, গণিত অলিম্পিয়াড এবং গণিত ক্যাম্পে কাটিয়েছি, আমরা চেয়েছি তার অল্প একটু অংশ হলেও যেন তুমি পাও। আশা করি, এতে পাঠ্যবইয়ের ভারিক্কী ভাষায় লেখা বিন্যাস, সমাবেশ কিংবা সম্ভাব্যতার মতো বিষয়গুলো তোমার চোখে রঙিন হয়ে উঠবে, একইসঙ্গে গণিত অলিম্পিয়াডের প্রস্তুতি নিতেও এটি কাজে আসবে। আমরা বিশ্বাস করি প্রতিটি মানুষের গণিতের সৌন্দর্য উপভোগ করার মতো মন রয়েছে। কেউ গণিত ভয় পেলে তার দায়ভার মোটেই তার নয়, বরঞ্চ শিক্ষাপদ্ধতির। আমরা যদি তোমাকে এমনভাবে গণিত শেখাতে পারি, ঠিক যেমনভাবে গণিতকে আমাদের চোখে দেখি, তাহলেই আমাদের এই বই লেখা সার্থক হবে।
আমাদের আরেকটি লক্ষ ছিল তোমাদের হাতে একটি নির্ভুল বই তুলে দেওয়া। তাই সম্পূর্ণ বইটি আমরা ল্যাটেক (LaTeX)-এ টাইপসেট করেছি। প্রতিটি বিদেশি নামের সঠিক উচ্চারণ দিতে সর্বোচ্চ চেষ্টা করেছি। পুরো বইয়ের দুশ’র বেশি ছবির প্রায় প্রতিটি Tikz ও Inkscape-এ ভেক্টর গ্রাফিক্স হিসেবে এঁকেছি, যাতে ছাপাখানার সীমাবদ্ধতায় তোমার পড়ার আনন্দটুকু মাটি না হয়। আর ইচ্ছে করেই বেশ মোটা মার্জিন রেখেছি যেন তুমি গণিতবিদ ফার্মার মতো বইয়ের সমস্যাগুলো পাতার ভাঁজেই সমাধান করতে পার, কিংবা নিজের বোঝার সুবিধার্থে কোনো নোট লিখে রাখতে পার। কে জানে, হয়তো এভাবে তুমিও কোনো চমৎকার উপপাদ্য আবিষ্কার করে ফেলবে!