কম্পিউটার বিজ্ঞান

উইকিপিডিয়া, মুক্ত বিশ্বকোষ থেকে

কম্পিউটার বিজ্ঞান জ্ঞানের একটি শাখা যেখানে তথ্যগণনার তাত্ত্বিক ভিত্তির গবেষণা করা হয়, এবং কম্পিউটার ব্যবস্থাসমূহে এগুলো বাস্তবায়ন ও ব্যবহার করা হয়।

সূচিপত্র

[সম্পাদনা] ইতিহাস

আধুনিক কম্পিউটার বিজ্ঞানের উৎস হিসেবে ইংরেজ বিজ্ঞানী চার্লস ব্যাবেজের কাজকে উল্লেখ করা যায়। ব্যাবেজ ১৮৩৭ সালে একটি প্রোগ্রামযোগ্য যান্ত্রিক গণনাযন্ত্র বা ক্যালকুলেটর প্রস্তাব করেছিলেন। তবে তারও আগে ১৬২৩ সালে ভিলহেল্ম শিকার্ড প্রথম যান্ত্রিক ক্যালকুলেটর তৈরি করেছিলেন বলে জানা যায়, যদিও এটি প্রোগ্রামযোগ্য ছিল না। ১৯ শতকে জর্জ বুল উদ্ভাবিত বুলিয়ান বীজগণিত দ্বিমিক বা বাইনারি পদ্ধতি ব্যবহার করে বিদ্যুৎ বর্তনী তৈরির গাণিতিক ভিত্তি প্রদান করে।

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

অ্যালগোরিদম তত্ত্ব, গাণিতিক যুক্তিবিজ্ঞান, ও প্রোগ্রাম সংরক্ষণের ক্ষমতাবিশিষ্ট ইলেক্ট্রনিক কম্পিউটারের উদ্ভাবন - এই তিনের সম্মিলনে ১৯৪০-এর দশকের শুরুতে কম্পিউটার বিজ্ঞানের জন্ম হয়। ১৯৩০-এর দশকে অ্যালান টুরিং, আলোন্‌জো চার্চকুর্ট গ্যোডেলের অ্যালগোরিদম তত্ত্বসমূহ ও এগুলো যন্ত্রে বাস্তবায়ন সংক্রান্ত গবেষণা, তারও ৬০ বছর আগে অগাস্টা অ্যাডা কিং (কাউন্টেস অফ লাভলেস)-এর উদ্ভাবিত অ্যালগোরিদম, ১৯২০-এর দশকে ভ্যানিভার বুশের উদ্ভাবিত অ্যানালগ কম্পিউটার, এবং ১৯৩০-এর দশকে হাওয়ার্ড আইকেনকনরাড ৎসুজে কর্তৃক উদ্ভাবিত ইলেকট্রনিক কম্পিউটার - এ সবই কম্পিউটার বিজ্ঞানের জন্মে ভূমিকা রাখে। ১৯৪০-এর দশকের শেষের দিকে জন ভন নিউম্যানের রচনাবলি নতুন এই শাস্ত্রের তাত্ত্বিক ভিত্তি সুদৃঢ় করে।

১৯৪০-এর দশকের শেষে ও ১৯৫০-এর দশকের শুরুর দিকে কম্পিউটার বিজ্ঞানের আদি পর্যায়ে গবেষণার লক্ষ্য ছিল বিজ্ঞান ও প্রকৌশলের জন্য ব্যবহৃত গণনা করার প্রক্রিয়াগুলোকে স্বয়ংক্রিয় রূপ দেওয়া। কোন প্রক্রিয়ায় গণনা করলে তাড়াতাড়ি সঠিক ফল পাওয়া যাবে, তা বের করার জন্য বিজ্ঞানী ও প্রকৌশলীরা গণনার বিভিন্ন তাত্ত্বিক মডেল তৈরি করেন। এসময় কম্পিউটার বিজ্ঞান এবং গণিতের সাংখ্যিক বিশ্লেষণ নামক শাখার মধ্যে বহু মিল ছিল, যে শাখায় গণনার নির্ভুলতা ও যথার্থতা নিয়ে গবেষণা করা হত।

১৯৫০ ও ১৯৭০-এর দশকের মধ্যবর্তী সময়ে কম্পিউটারের ব্যবহার বৃদ্ধি পায়। কম্পিউটার বিজ্ঞানীরা এসময় কম্পিউটারের ব্যবহার সরল করার উদ্দেশ্যে এক ধরনের কৃত্রিম ভাষা তথা প্রোগ্রামিং ভাষাসমূহের উদ্ভাবন করেন এবং কম্পিউটার ও কম্পিউটার ব্যবহারকারীর মধ্যে যোগসূত্র স্থাপনকারী অপারেটিং সিস্টেম প্রোগ্রামের প্রচলন করেন। তাঁরা কম্পিউটারের নতুন ব্যবহারিক ক্ষেত্র সন্ধান ও নতুন ধরনের কম্পিউটার ডিজাইন নিয়েও গবেষণা চালান। এসময় প্রথম কম্পিউটার নেটওয়ার্ক সৃষ্টি করা হয় এবং গণনা ও মনের চিন্তাধারার মধ্যে সম্পর্ক নিয়ে গবেষণা শুরু হয়। কম্পিউটার বিজ্ঞানের পরিসর যথেষ্ট বৃদ্ধি পায় এবং ১৯৬০-এর দশকের শুরুর দিকেই পাশ্চাত্যের বিশ্ববিদ্যালয়গুলোতে কম্পিউটার বিজ্ঞান বিভাগ চালু ও ডিগ্রী প্রদান শুরু হয়।

১৯৭০-এর দশকে কম্পিউটার চিপ প্রস্তুতকারকেরা ব্যাপকভাবে মাইক্রোপ্রসেসর উৎপাদন করতে শুরু করেন। মাইক্রোপ্রসেসর হল কম্পিউটারের ভেতরে অবস্থিত প্রধান তথ্য প্রক্রিয়াকারী কেন্দ্র। এই নতুন প্রযুক্তি কম্পিউটার শিল্পব্যবস্থায় বিপ্লব আনে; কম্পিউটার তৈরির খরচ বহুলাংশে কমে যায় এবং কম্পিউটার তথ্য প্রক্রিয়াকরণের দ্রুতি বহুগুণে বৃদ্ধি পায়। মাইক্রোপ্রসেসরের ওপর ভিত্তি করেই সৃষ্টি হয় ব্যক্তিগত কম্পিউটার বা পিসি। পিসি-র আবির্ভাবের পর কম্পিউটার অ্যাপ্লিকেশনের ব্যবহার বহুগুণে বেড়ে যায়। ১৯৭০-এর শুরু থেকে ১৯৮০-র দশকের পুরোটা জুড়ে কম্পিউটার বিজ্ঞানের পরিধির ব্যাপক প্রসার ঘটে। কম্পিউটিং শিল্পে উদ্ভাবিত নতুন নতুন প্রযুক্তি চালনার জন্য এবং ব্যক্তিগত কম্পিউটারে ব্যবহার্য নতুন অ্যাপ্লিকেশনগুলো তৈরির জন্য এর কোন বিকল্প ছিল না। এভাবে কম্পিউটার বিজ্ঞানের অতীতের গবেষণাগুলোর ফলাফল ব্যক্তিগত কম্পিউটারের প্রসারের মাধ্যমে ধীরে ধীরে সাধারণ জনগণের কাছে পৌঁছাতে শুরু করে।

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

[সম্পাদনা] লক্ষ্য

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

তত্ত্ব, প্রকৌশল ও পরীক্ষা নিরীক্ষা – এ তিনের সমন্বয়েই কম্পিউটার বিজ্ঞান। কম্পিউটার বিজ্ঞানীরা একটি তত্ত্ব দাঁড় করান, তারপর সেই তত্ত্বের ওপর ভিত্তি করে হার্ডওয়্যার ও সফটওয়্যারের সমন্বয়ে একটি কম্পিউটার ব্যবস্থা তৈরি করেন এবং তারপর সেটি পরীক্ষা করে দেখেন।

অনেকের মনে হতে পারে যে কম্পিউটার পরীক্ষানিরীক্ষার আবার প্রয়োজন কি? কম্পিউটারকে যা আদেশ দেওয়া হয় তা-ই সে পালন করে। কিন্তু প্রকৃতপক্ষে বাস্তব বিশ্বে কম্পিউটারের নানা জটিল ব্যবহারের সময় কম্পিউটারের অনেক অজানা আচরণ পরিলক্ষিত হয় যেগুলোর পূর্বাভাস দেওয়া যায় না। পরীক্ষা নিরীক্ষা আর বৈজ্ঞানিক পদ্ধতি অনুসরণ তাই কম্পিউটার বিজ্ঞানের গুরুত্বপূর্ণ অংশ।

[সম্পাদনা] শাখা

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

[সম্পাদনা] বিচ্ছিন্ন গণিত

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

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

বিচ্ছিন্ন গণিতে আলোচ্য বিষয়গুলির মধ্যে আছে:

[সম্পাদনা] অ্যালগোরিদম ও উপাত্ত সংগঠনসমূহ

অ্যালগোরিদমউপাত্ত সংগঠনসমূহ ব্যবহার করেই কম্পিউটার প্রোগ্রাম রচনা করা হয়। প্রথিতযশা কম্পিউটার বিজ্ঞানী নিকলাউস ভির্টের একটি সুবিখ্যাত বইয়ের নাম ছিল Algorithms + Data Structures = Programs (১৯৭৫)। অ্যালগোরিদম (algorithm) হল সুনির্দিষ্ট ও সসীম সংখ্যক ধাপবিশিষ্ট পদ্ধতি, যা সসীম সময়ের মধ্যে ও সসীম পরিমাণ কম্পিউটার মেমরি ব্যবহার করে কোন সমস্যার সমাধান করে। অতিব্যবহৃত অ্যালগোরিদমগুলোর মধ্যে আছে কোন উপাত্ত সংগ্রহ অনুসন্ধান (searching), উপাত্ত বিন্যস্তকরণ (sorting), মেট্রিক্স গুণন ও অন্যান্য সাংখ্যিক অপারেশনসমূহ, ইত্যাদি। কোন উপাত্ত সংগঠন (data structure) হল তথ্যের একটি নির্দিষ্ট ধরনের সুবিন্যস্ত রূপ, যা উপাত্তের বিভিন্ন মানের মধ্যে সম্পর্ক স্থাপন করে। লিস্ট, অ্যারে, রেকর্ড, স্ট্যাক, কিউ, ট্রি, ইত্যাদি কিছু বহু-ব্যবহৃত উপাত্ত সংগঠন।

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

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

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

অ্যালগোরিদম ও উপাত্ত সংগঠন এলাকায় আলোচিত বিষয়গুলির মধ্যে আছে:

  • প্রাথমিক অ্যালগোরিদম বিশ্লেষণ: জটিলতার ঊর্ধ্ব ও গড় সীমার অসীমতটীয় বিশ্লেষণ; সর্বোৎকৃষ্ট, গড় ও সর্বনিকৃষ্ট আচরণের পার্থক্য; বৃহৎ ওমেগা, ক্ষুদ্র ওমেগা, ওমেগা ও থেটা লিখনপদ্ধতি, আদর্শ জটিলতা শ্রেণীসমূহ, কর্মদক্ষতার অভিজ্ঞতাবাদী পরিমাপ, অ্যালগোরিদমের সময় ও স্থান-বিষয়ক মূল্য, পুনরাবর্ত অন্বয় ব্যবহার করে পুনরাবৃত্তিমূলক অ্যালগোরিদম বিশ্লেষণ
  • ব্রুট-ফোর্স অ্যালগোরিদম, লোভী অ্যালগোরিদম, বিভাজন-ও-বিজয়, পশ্চাদপসরণ, শাখায়ন-ও-বন্ধন, অভিজ্ঞতাভিত্তিক নিয়ম, বিন্যাস মিলানো অ্যালগোরিদম, স্ট্রিং অ্যালগোরিদম, সাংখ্যিক আসন্নীকরণ অ্যালগোরিদম।
  • সাংখ্যিক অ্যালগোরিদম, ধারাবাহিক ও বাইনারি অনুসন্ধান অ্যালগোরিদম, দ্বিঘাত সর্টিং অ্যালগোরিদম (বাছাই, অনুপ্রবেশ), O(NlogN) অ্যালগোরিদম (কুইকসর্ট, হিপসর্ট, মার্জসর্ট), হ্যাশ টেবিল (সংঘর্ষ এড়ানোর কৌশল), বাইনারি অনুসন্ধান বৃক্ষ, গ্রাফের উপস্থাপন (সংলগ্নতা তালিকা, সংলগ্নতা মেট্রিক্স), গভীরতা-ভিত্তিক ও প্রস্থ-ভিত্তিক বিচরণ, ক্ষুদ্রতম পথ অ্যালগোরিদম (ডিয়েকস্ট্রা ও ফ্লয়েডের অ্যালগোরিদসমূহ), অনুবর্তী আবদ্ধতা, সর্বনিম্ন প্রজনন বৃক্ষ (প্রিম ও ক্রুস্কালের অ্যালগোরিদমসমূহ), টপোগাণিতিক সর্ট।
  • বিতরণকৃত অ্যালগোরিদম, ঐকমত্য এবং নির্বাচন, সমাপ্তি নিরূপন, ত্রুটি সহনশীলতা, স্থিতিশীলকরণ।
  • গণনীয়তা, সসীম অবস্থা যন্ত্র, প্রসঙ্গমুক্ত ব্যাকরণ, নিয়ন্ত্রণযোগ্য ও অনিয়ন্ত্রণযোগ্য সমস্যা, অগণনীয় ফাংশন, বিরতি সমস্যা।
  • পি এবং এনপি শ্রেণী, এনপি-সম্পূর্ণতা, আদর্শ এনপি-সম্পূর্ণ সমস্যাসমূহ, লঘুকরণ কৌশল।
  • স্বয়ংক্রিয়া তত্ত্ব, নিষ্পত্তিমূলক সসীম স্বয়ক্রিয় যন্ত্র, অ-নিষ্পত্তিমূলক সসীম স্বয়ংক্রিয় যন্ত্র, নিয়মিত এক্সপ্রেশন, পাম্পিং সহায়িকা, নিম্নগামী স্বয়ংক্রিয়ক, টুরিং যন্ত্র, নিয়মিত ভাষা, চম্‌স্কি অনুক্রম, চার্চ-টুরিং বিবৃতি।
  • প্রাগসর অ্যালগোরিদম বিশ্লেষণ: অ্যামর্টাইজ্‌ড বিশ্লেষণ, অনলাইন ও অফলাইন অ্যালগোরিদম, দৈবকৃত অ্যালগোরিদম, ডায়নামিক প্রোগ্রামিং, গুচ্ছবিন্যাসীয় সর্বানুকূলীকরণ।
  • তথ্যগুপ্তিবিদ্যা-সংক্রান্ত অ্যালগোরিদম: ব্যক্তিগত-চাবি তথ্যগুপ্তি, চাবি-হস্তান্তর সমস্যা, উন্মুক্ত-চাবি তথ্যগুপ্তি, ডিজিটাল স্বাক্ষর, নিরাপত্তা প্রোটোকল, শূন্য-জ্ঞান প্রমাণ, বৈধতা নির্ণয়।
  • জ্যামিতিক অ্যালগোরিদম: রেখাংশের ধর্ম, ছেদ, উত্তল হাল অনুসন্ধান অ্যালগোরিদম
  • সমান্তরাল অ্যালগোরিদম: প্র্যাম মডেল, এক্সক্লুসিভ/কনকারেন্ট রিড/রাইট, পয়েন্টার লাফানো, ব্রেন্টের উপপাদ্য।

[সম্পাদনা] প্রোগ্রামিং ভাষাসমূহ

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

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

কোবোল ও ফোরট্রান এবং এদের উত্তরসূরী প্যাসকালসি হল নির্দেশমূলক ভাষা (Imperative language)। অর্থাৎ এগুলোতে কম্পিউটারকে কতগুলি প্রত্যক্ষ নির্দেশ দেয়ার মাধ্যমে কাজ করানো হয়; এটা যান্ত্রিক ভাষার সাথে অনেকটাই তুলনীয়। এই ধারার আরও দুটি ভাষা হল অ্যাডাঅ্যালগল। এছাড়াও আরেক ধরনের ভাষা আছে যেগুলি ফাংশনভিত্তিক (Functional), অর্থাৎ প্রোগ্রামের ভিতরের অংশবিশেষ বা ফাংশন কল করে প্রোগ্রামিং-এর লক্ষ্য পূরণ করা হয়। ফাংশনভিত্তিক ভাষার মধ্যে সবচেয়ে পরিচিত হচ্ছে লিস্প; এমএলহ্যাস্কেল-ও ফাংশনভিত্তিক ভাষা। পরবর্তীতে বস্তু-সংশ্লিষ্ট (Object Oriented অব্জেক্ট-ওরিয়েন্টেড) ভাষা উদ্ভাবন করা হয় যেখানে উপাত্ত ও মেথড আধারে আবৃত করা হয়, এবং এই আধারকে বলা হয় অবজেক্ট বা বস্তু। এই ধারায় একাধিক অবজেক্টের মধ্যে বার্তা আদানপ্রদান করে প্রোগ্রামিঙের লক্ষ্য পূরণ করা হয়। স্মলটক, সি++, আইফেল, ভিজুয়াল বেসিক, জাভা, ইত্যাদি বস্তু-সংশ্লিষ্ট ভাষার উদাহরণ। এছাড়াও আছে উপাত্ত-প্রবাহ (Dataflow ডাটাফ্লো) ভাষা যেমন সিসাল, ভাল, ইদ নুভো, লজিক প্রোগ্রামিং ভাষা যেমন প্রোলগ, স্ট্রিং প্রসেসিং ভাষা যেমন - স্নোবলআইকন, এবং সহবর্তমানতাভিত্তিক (concurrency-based) প্রোগ্রামিং ভাষা যেমন - কনকারেন্ট প্যাসকাল, অকাম, এসআর, মডুলা-৩

প্রোগ্রামিং ভাষার তত্ত্বে আলোচিত বিষয়গুলির মধ্যে রয়েছে:

[সম্পাদনা] কম্পিউটার স্থাপত্য

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

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

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

[সম্পাদনা] অপারেটিং সিস্টেম

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

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

[সম্পাদনা] কম্পিউটার নেটওয়ার্ক

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

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