Object Oriented Concept Covered by Yusuf!

  • Question no-01: What is Object? Explain Object Oriented Concept with Examples.


According to Wikipedia:

In the class-based object-oriented programming paradigm, “object” refers to a particular instance of a class where the object can be a combination of variables, functions, and data structures.

According to Cambridge Dictionary:

An Object is  a thing that you can see or touch but that is not usually a living animalplant, or person.


An Object is a Software bundle of variables and related methods that must have two properties: i) State and ii) Behavior

If we are talking about a real life example of an object then we can talk about a bicycle:

A bicycle has i) State: current gear, two wheals, no of gear etc.

And   ii) Behavior: Braking, Accelerating, breaking gears

So, we can say that a bicycle is an Object.

Python OOP Car Class and Object

From the above figure we can easily understand that what an Object is.

An Object can be different in size ,color, shape but it always made up according to as it’s Class where all the Characteristics of that Object has been Implemented/described. We can make thousands of cars from our main car class. So all the new cars are the objects of our main car class.

~ Generic attributes/properties/variables of a car: brand, speed, height, weight, colour etc.
~ Generic methods/functions/behaviors of a car: activateHorn, moveForward, moveBack, turnRight, turnLeft etc.

Note that; for different objects, the values of attributes and methods can varies or be similar but behave differently.

Examples of Real-World Objects that could be modeled into computer with OOP coding style:


1) ATM
2) Bank Account
3) Fruit
4) Family
5) Cars
6) Shapes
7) Animal
8) Employee
9) User Registration Form
10) Hero
11) Football Club
12) Programmers Gallery etc.

Object Oriented Concept:

Object-Oriented Programming(OOP) refers to a programming methodology based on objects, instead of just functions and procedures.

These objects are organized into classes, which allow individual objects to be group together.

Object oriented programming makes it easier for programmers to structure and organize software programs. Because individual objects can be modified without affecting other aspects of the program, it is also easier to update and change programs written in object oriented languages. As software programs have grown larger over the years, OOP has made developing these large programs more manageable.

The four major principles of object orientation are:

  • Encapsulation

  • Data Abstraction

  • Polymorphism

  • Inheritance

For better Understanding this OOP Concept we need to discuss an Example regarding this.

Example: We have a class defined for vehicles. Create two new vehicles called car1 and car2. Set car1 to be a red convertible worth $60,000.00 with a name of Fer, and car2 to be a blue van named Jump worth $10,000.00.

Implemented with Python Programming Language:


In this carproblem.py script we can see that we have defined a class called Vehicle and we have 4 objects (just initiated) and a function within this. The desc_str function will return the object values. Outside this Vehicle class we have given the values of that initiated objects. And then we printed the values of cars that we have given before. Thus, we can make thousands of cars from vehicle class.

So, our Output is exactly what we actually wanted. Our output will be changed every time when we will change the values of that objects

Inheritance: Classes can inherit other classes. A class can inherit attributes and behavior (methods) from other classes, called super-classes. A class which inherits from super-classes is called a Sub-class. Super-classes are sometimes called ancestors as well. There exists a hierarchy relationship between classes.

Question no-02: Describe Encapsulation.



Encapsulation is the mechanism for restricting the access to some of an object’s components, this means that the internal representation of an object can’t be seen from outside of the objects definition. Access to this data is typically only achieved through special methods: Getters and Setters.

In an object-oriented python program, you can restrict access to methods and variables. This can prevent the data from being modified by accident and is known as encapsulation.

oop new

In this Encapsulation Example we can see there are three modifiers of encapsulation: i) public ii) protected iii) privet

The basic differences between them:






Can be accessed from inside and outside



Like a public member, but they shouldn’t be directly accessed from outside.



Can’t be seen and accessed from outside

In the above example we see how the encapsulation actually works.

Question no-03: The Differences between Overloading and Overriding.


Overloading: Same Method name and different parameter within a class is called Overloading.

Overriding: Same Method name and same parameter within a class is called Overloading.

If we can show an example then the concept will be more cleared.

Overloading is when same method name is used for 2 or more methods in the same class.
Here is a simple example:

public class Sum {
public void add(int a, int b) {
return a+b;
public void add(int a, int b, int c) {
return a+b+c;

For method overloading, the method signature number of arguments, type of arguments and order of arguments  should be different. Return type is not a part of the signature.

Overriding is when same function name from a base class can be used in a derived class.
For example: consider the class:

public class Shape {
public void draw() {
// Do something

Consider class Circle which extends Shape:

public class Circle extends Shape {
public void draw() {
// Do something different than class Shape

In class Circle, if draw() method is not created, then implementation from class Shape will be used when we call draw() on a derived class object.
But in above code, method draw() in class Circle overrides implementation of class Shape.
This is function overriding.

To eliminate this confliction problem in overriding,  A common solution for this in languages like Java is to use double dispatch and the visitor pattern.

Personally, I’m not a huge fan of this. I prefer to try to design my way around it. That’s not always possible, of course, but it’s worth at least attempting.

BUP, Uncategorized

________সাবজেক্ট রিভিউঃ আইসিটি________

Related image
“আলকেমিস্ট” বইয়ের রুটিওয়ালা স্বপ্ন দেখতো পর্যটক হবার। কিন্তু সেই স্বপ্নকে সত্যি করার জন্য রাখালবালক হয়ে দেশবিদেশ ঘুরে না বেড়িয়ে সে স্বপ্নকে চাপা দিয়েছিলো কারণ মানুষের চোখে রুটিওয়ালার জীবন রাখালবালকের থেকে বেশি সম্মানের। তাই সমাজকে খুশি করতে গিয়ে তার স্বপ্ন পূরণ করা হয়নি। আমরা বেশিভাগই একেকজন রুটিওয়ালা, নিজের স্বপ্ন পূরণ না করে আগে চিন্তা করি কি নিয়ে পড়ালেখা করলে বেশি টাকার চাকরী পাওয়া যাবে। একটা বিষয়ের “ব” না জেনে হুট করে বিশ্ববিদ্যালয়ে ভর্তি হয়ে যাই চাকরির আশায়, তারপর একসময় হতাশা ঘিরে ধরে।
কম্পিউটার সায়েন্স/আইসিটি খুবই জনপ্রিয় একটা বিষয়। এই বিষয়টা নিয়ে মানুষের মধ্যে অনেক ভূল ধারণা প্রচলিত আছে, এই সাবজেক্টটাতে কি পড়ানো হয় এ বিষয়ে সবার ভালো ধারণা নেই। সবথেকে দু:খজনক ব্যাপার হলো এই সাবজেক্টে কি পড়ানো হয় সেটা না জেনেই বহু ছাত্রছাত্রী ভর্তি হয়ে যায় চাকরীর বাজার ভালো এই কারণে, এটা শুধু কম্পিউটার সায়েন্স/আইসিটি না বরং বাংলাদেশে যেকোনো সাবজেক্টের জন্যই সত্য। এরপর যেটা হয় সেটা হলো খাপ খাওয়াতে না পেরে অনেকেই হতাশ হয়ে পড়ে।
আমার সৌভাগ্য যে কম্পিউটার সায়েন্স/আইসিটি সম্পর্কে ভালো না জানলেও প্রোগ্রামিং আমার আগে থেকেই ভালো লাগতো এবং কম্পিউটার নিয়ে অনেক আগ্রহ ছিলো ছোটোবেলা থেকে তাই এখন আনন্দময় সময় কাটাতে পারছি, কিন্তু সবার এই সৌভাগ্য হয়না, এবং এটা শুধু সিস্টেমের দোষ না সাথে নিজেদের অসচেতনতাও বিশাল অংশে দায়ী। আমি অনেক বন্ধুবান্ধবকে দেখেছি ভর্তি পরীক্ষায় ভালো রেজাল্ট করে চাকরীর বাজার দেখে সাবজেক্ট বেছে নিয়ে এখন হতাশ হয়ে পড়েছে।
আমার এই লেখার উদ্দেশ্য কম্পিউটার সায়েন্সে কি কি পড়ানো হয় সেটা সবাইকে জানানো, বিশেষ করে কম বয়েসীদের যারা এখনো কোনো বিষয় বেছে নেয়নি এবং তাদের অভিভাবকদের। ভর্তি পরীক্ষা নিয়ে অনেক গাইডলাইন থাকলেও সাবজেক্ট নিয়ে গাইডলাইনের অভাব আছে। আর যেগুলো আছে সেগুলোতেও কম্পিউটার সায়েন্সে ক্রিয়েটিভিটি লাগে, মুখস্থ কম করতে হয় এসব কথাবার্তা শুধু লিখে রাখসে, আসলে কি কি পড়ানো হয় সেটা লিখেনি।
বাংলাদেশের মানুষের এক অংশের ধারণা কম্পিউটার সায়েন্সে ওয়ার্ড, পাওয়ারপয়েন্ট এসব শেখানো হয়, এবং এগুলো যেহেতু পাড়ার দোকানদারও ভালো পারে তাই কম্পিউটার সায়েন্স পড়ার কোনো মানে নাই। আবার কম্পিউটার সম্পর্কে ভালো জানে, টুকটাক প্রোগ্রামিংও কিছুটা জানে এমন মানুষের ধারণা এখানে শুধু এইচটিমিএল, পিএইচপিতে এ ওয়েবসাইট বানানো শেখায়, যেগুলো কম্পিউটার সায়েন্স না পড়লেও শেখা যায়, ফ্রিল্যান্সারদের মধ্যে এই ধারণাটা বেশি কাজ করে।
এখন আমরা তাহলে এক এক করে দেখি কম্পিউটার সায়েন্সে/আইসিটিতে কি কি টপিক পড়তে হবে। টপিকগুলো সম্পর্কে সংক্ষেপে আমরা জানবো। এরপরে নিজেই সিদ্ধান্ত নেয়া যাবে উপরের ধারণা গুলো কতটা সত্যি। টপিকগুলো সম্পর্কে জেনে এখন কাজ হবে তোমার ভেবে দেখা এই সাবজেক্টটা কি সত্যিই তোমার পছন্দ নাকি তুমি ইলেকট্রিকাল, মেকানিকাল , ফিজিক্স বা অন্য কোনো সাবজেক্ট পড়বে।
১) প্রোগ্রামিং
৩)ডাটা স্ট্রাকচার
৪) গণিত
৫) অপারেটিং সিস্টেম এবং সিস্টেম প্রোগ্রামিং
৬) ডাটাবেস
৭) ডাটা এনালাইসিস
৮) আর্টিফিসিয়াল ইন্টেলিজেন্স(এ.আই)
৯) কম্পাইলার
১০) গ্রাফিক্স
১১) নেটওয়ার্কিং
১২) ডিস্ট্রিবিউটেড সিস্টেম
১৩) সফটওয়্যার ইঞ্জিনিয়ারিং
১৪) এনালগ এন্ড ডিজিটাল কমিউনিকেশন
১৪) রাডার ইঞ্জিনিয়ারিং
১৫) মাইক্রোওয়েভ কমিউনিকেশন
১৬) মাইক্রোপ্রসেসর ও ইন্টারফেসিং
১৭) মোবাইল ও সেলুলার কমিউনিকেশন
১৮) টেলিকমিউনিকেশন সিস্টেম
১৯) ইলেকট্রিক্যাল এন্ড ইলেক্ট্রনিক্স
২০) সিগন্যাল প্রসেসিং
এছাড়াও আরও কিছু কোর্স পড়ানো হয়। এটা ভার্সিটির উপর নির্ভর করে। তবে এগুলা সব ভার্সিটি তেই পড়ানো হয়ে থাকে ।
কম্পিউটার সায়েন্সের/আইসিটি আকর্ষণীয় একটা দিক হলো “কনটেস্ট”। সারাবছরই বিভিন্ন বিশ্ববিদ্যালয় বা কোম্পানি প্রোগ্রামিং কনটেস্ট এবং সফটওয়্যার কনটেস্ট আয়োজন করে। প্রোগ্রামিং কনটেস্টে মূলত অলিম্পিয়াড স্টাইলে অ্যালগোরিদমের সাহায্যে প্রবলেম সলভ করতে হয়। এখানে সুযোগ আছে সারা বিশ্বের বড় বড় প্রোগ্রামারদের সাথে কনটেস্ট করার। বাংলাদেশের মানুষের গর্ব করার মতো জিনিস খুব বেশি নেই, তবে প্রোগ্রামিং কনটেস্ট অবশ্যই সেই অল্প জিনিসগুলোর একটা, অনেকবছর ধরেই বাংলাদেশিরা এসব কনটেস্টে ভালো ফল করছে। সফটওয়্যার কনটেস্টে মূলত বিভিন্ন সফটওয়্যার, ওয়েব সাইট ডিজাইন করতে হয়, মোবাইল বিশেষ করে অ্যান্ড্রয়েড ভিত্তিক মোবাইলের সফটওয়্যার কনটেস্ট বর্তমানে খুব জনপ্রিয়। মাইক্রোসফট ইমেজিন কাপের মতো বড় বড় আন্তর্জাতিক সফটওয়্যার কনটেস্টেও বাংলাদেশিরা অংশ নেয়। আবার তুমি চাইলে হার্ডওয়্যার কনটেস্টও করতে পারো, দারুণ একটা রোবট বানিয়ে চমকে দিতো পারো সবাইকে।
আরেকটি আকর্ষণীয় দিক হল

আরেকটি আকর্ষণীয় দিক হলো গবেষণার সুযোগ। কম্পিউটার সায়েন্স/আইসিটি শেষ বর্ষে কিছু ক্রেডিট থাকে গবেষণা বা প্রজেক্টের জন্য। প্রতি বছরই বাংলাদেশের অনার্সের ছাত্ররা ভালো ভালো জার্নালে পেপার পাবলিশ করে থাকে। কম্পিউটার সাইন্সের গবেষণার একটা সুবিধা হলো নিজের ডেস্কটপ কম্পিউটার ব্যবহার করেই বড় বড় গবেষণা করে ফেলা যায়, কোটি টাকা যন্ত্রপাতির দরকার হয় না(অবশ্যই দরকার হয়, তবে সেগুলো ছাড়াও অনেক কাজ করা যায়)। কম্পিউটার সায়েন্স/আইসিটি অনার্স করে তুমি চাইলে অন্যান্য বিষয় নিয়েও পড়ালেখা করতে পারো কারণ এখন সবকাজে কম্পিউটার দরকার হয়। যেমন রিসেন্টলি অ্যাস্ট্রোইনফরমেটিক্স নামের একটা সাবজেক্ট নিয়ে গবেষণা হচ্ছে, এদের কাজ মহাকাশ গবেষণায় কম্পিউটারকে আরো ভালোভাবে কিভাবে ব্যবহার করা যায় সেটা নিয়ে কাজ করা। তুমি চাইলে ফিজিক্সের লাইনে গিয়ে কোয়ান্টাম কম্পিউটার নিয়ে কাজ করতে পারো। আবার বায়োলজী ভালো লাগলে বায়োইনফরমেটিক্স নিয়ে পড়ালেখা করতে পারো, কাজ করতে পারবো ন্যানোটেকনোলজী, ডিএনএ/প্রোটিন অ্যানালাইসিস নিয়ে। এরকম হাজারটা সম্ভাবনা তোমার সামনে থাকবে। আশা করি লেখাটা পড়ার পর কম্পিউটার সায়েন্সে/আইসিটিতে কি পড়ানো হয় সে সম্পর্কে একটা ধারণা তৈরি হয়েছে এবং ভূল ধারণাগুলো ভেঙে গিয়েছে। চাকরির বাজার নিয়ে কিছু বলবোনা, যে আগেই চাকরির চিন্তা করে সাবজেক্ট চয়েস করে তার জন্য এ লেখা নয়, তবে তারপরেও শুধু বলে রাখি বর্তমানে কম্পিউটার সায়েন্স পরে আমি কাওকে বেকার বসে থাকতে দেখিনি। ভর্তি পরীক্ষার্থীদের বলবো, যেসব সাবজেক্ট পড়ার কথা ভাবছো প্রতিটা সম্পর্কে ভালোভাবে জানার চেষ্টা করো, সেখানে কি কি পড়ানো হয় সেটা খোজ নাও, এবং যদি সেগুলো তোমার সত্যিই পছন্দ হয় তাহলেই ভর্তি হয়ে যাও, কোনো সাবজেক্টই ১ নম্বর-২ নম্বর না, ইলেক্ট্রিকাল মোটেও মেকানিকালের থেকে “ভালো সাবজেক্ট” না, সেটাই তোমার কাছে “ভালো সাবজেক্ট” যেটা তোমার পছন্দ, সেটা যদি পুষ্টিবিজ্ঞানের মতো মানুষের চোখে পিছের দিকের সাবজেক্ট হয় তাহলেও সেটা ভালো, মানুষই তৈরি বিভাজন অনুসরণ করলে নিজের সাথে প্রতারণা করা হয়। এই সাবজেক্ট এ পড়ার আগে ভালো করে জেনে রাখবাঃ এ সেক্টরে মামা-খালু-নগত পাতি দিয়ে তেমন কোন সুবিধা করা যায় না যদি নিজের ঘিলুতে কিছু না থাকে।কম্পিউটার সায়েন্স/আইসিটি একটা অদ্ভুত বিষয়। বাংলাদেশে এই বিষয়ে গ্র্যাজুয়েশন করার পরে কেউ কেউ সরাসরি গুগল, ফেসবুক, অ্যামাজন, মাইক্রোসফটে চলে যায়। এছাড়াও এশিয়া ও ইউরোপ-আমেরিকার বিভিন্ন কোম্পানীতেও যায়। এসব জায়গায় একজন ফ্রেশ গ্র্যাজুয়েটের বেতন হয় জায়গাভেদে তিন থেকে সাত লক্ষ টাকা! তাহলে তো সবারই সিএসই পড়া উচিত। কিন্তু আসলে বেশিরভাগ শিক্ষার্থী পাশ করার পরে দশ হাজার টাকা বেতনের চাকরি জোটাতেই হিমশিম খায়, গুগল-ফেসবুক তো অনেক দূরের কথা। দেশের মধ্যেও যারা চাকরি পায়, তাদের কারো কারো বেতন শুরুতে ৫০-৬০ হাজার টাকা। আর কারো কারো বেতন ১০-১৫ হাজার টাকা। এর কারণ কী? এত বৈষম্য কেন? সবই কি মামা-চাচার জোর? কারণটা হচ্ছে দক্ষতা। আশা করছি ব্যাপারটা ক্লিয়ার করতে পেরেছি।

সকল ভর্তি পরীক্ষার্থীদের প্রতি শুভকামনা, আশা করি আইসিটি নিয়ে আর কোন কনফিউশন থাকবে না।

Revel Yusuf

ICT-01 Batch,BUP.


বাবল সর্ট অ্যালগরিদম – Bubble Sort Algorithm… পাইথনে ইমপ্লিম্যান্টেশন।

বাবল সর্ট নিয়ে ভাবলাম একটা পোস্ট লিখবো। হঠাৎ হাসান ভাইয়ের ব্লগটা দেখলাম। আমি যা লিখব ভেবেছি তার চাইতেও অনেক সুন্দর  উদাহরন দিয়ে বুজিয়েছেন ভাই। তাই উনার পোস্ট টাই নিচে তুলে ধরলামঃ

” ধরো, তোমাকে ১০০০, ৫০০, ১০০, ৫০, ২০, ১০ ইত্যাদি টাকার কিছু নোট দিলাম। বললাম সবগুলো নোট ও সিকি-আধুলি যা দেয়া হয়েছে সবগুলোকে ছোট থেকে বড় আকারে সাজাও। তখন তুমি কী করবে?

Bubble Sort
Bubble Sort. Photo Credit: Wikipedia

প্রথমে দেখবে সবচেয়ে বড় নোটটা কত? এটাকে সবার শেষে পাঠাবে। অর্থাৎ ১০০০ টাকার নোটটা সবার শেষে চলে যাবে। এরপর এই ১০০০ টাকার নোট বাদে যেই নোটগুলো তোমার হাতে আছে এগুলোর মধ্যে সবচেয়ে বড়টাকে ১০০০ টাকার নোটের আগে স্থান দিবে। ধর সেই নোটটা ৫০০ টাকার। তাহলে তুমি দুইটা ধাপে দুইটা নোটকে জায়গা মত প্লেস করতে পেরেছ। প্রথম ধাপের কাজ শেষ হবার পর তোমার টাকার বান্ডিলের সর্বশেষ নোটটি (element-টি) ঠিক ঠাক মত সাজানো হয়ে গেছে (sorted)। দ্বিতীয় ধাপে ৫০০ টাকাকে যখন ১০০০ এর আগে প্লেস করলে তখন তোমার টাকার বান্ডিলের সর্বশেষ দুটি ইলিমেন্ট সজ্জিত বা sorted হয়ে গেছে। এভাবে প্রতিটি ধাপে একটি করে নোট তার নিজ পজিশনে বসে যাবে। আর একটা নোট তার নিজ পজিশনে বসার পর সেটা থেকে শেষ পর্যন্ত সবগুলো নোটই সাজানো অবস্থায় থাকে (ধরো, …, ১০০, ৫০০, ১০০০)। তাই পরের ধাপে বাকি যে কটা নোট সাজানো হয় নি সেগুলোর থেকে সবচেয়ে বড়টাকে তার নিজ পজিশনে বসাতে হবে। এভাবে সাজাতে সাজাতে যদি কোন একটা ধাপে এমন পাওয়া যায় যে কোন নোটকে সাজানোর জন্য তাকে সামনে বা পিছনে নিতে হচ্ছে না তাহলে বুঝতে হবে তোমার সব নোটগুলো সাজানো হয়ে গেছে। এভাবে তোমার হাতে যদি ১০টা নোট থাকে তাহলে সর্বোচ্চ ৯ টা ধাপে তুমি সবগুলো নোটকে সাজিয়ে ফেলা যাবে।

এই নোট সাজানোর জটিলতম (!) কাজটা তুমি জীবনে কখনো না কখনো করেছ। যদি করে থাক তার মানে তুমি অলরেডি বাবল সর্ট জানো। উপরের যেই পদ্ধতিতে নোটগুলোকে সাজানো হল কম্পিউটার সায়েন্সে এই পদ্ধতির নামই বাবল সর্ট এলগরিদম। Bubble Sort এর আরেক নাম Sinking Sort. ” উপরের স্টেপগুলোই কোড আকারে লিখা যায় এভাবেঃ

bubble sort

হাসান ভাইয়ের বাবল সর্ট পোস্টের লিঙ্কঃ





Python3: Access and print a URL’s content to the console:

import urllib.request
url = urllib.request.urlopen("http://www.facebook.com")
data = url.read()

this is much efficient 😉

 Basics03: Access Environment Variable:

import os

বাইনারি সার্চ অ্যালগরিদম – Binary Search Algorithm

binary search.jpg

#বাইনারি সার্চ অ্যালগরিদম – Binary Search Algorithm ইমপ্লিমেন্টেশন ইন পাইথন ঃ

লিনিয়ার সার্চ অ্যালগরিদমে আমারা দেখেছি কিভাবে  একটা লিস্ট থেকে   একটা একটা   করে  ইলিমেন্ট গুলোকে সিকুয়েন্সিয়েলি চেক করে কাঙ্ক্ষিত আইটেমকে খুঁজে বের করা যায়। কিন্তু এই পদ্ধতিতে আইটেমকে খুঁজে বের করা অনেক কমপ্লেক্স হয়ে যায়। ৫/১০/২০ টা লিস্টের আইটেম হয়ত  খুব সহজে খুঁজে বের করা যাবে কিন্তু আমাকে যদি ১০০০টা আইটেম দিয়ে এখান থেকে যেকোনো একটা আইটেম খুঁজে বের করতে বলে তাহলে আমি যদি  লিনিয়ার সার্চ অ্যালগরিদমে সার্চ করি তাহলে আমাকে ১০০০ বার চেক করতে হবে যা আমার পক্ষে প্রায় অসম্ভব। এতে আমার প্রোগ্রাম কমপ্লিক্সিটি অনেক বেড়ে যাবে । আর  এই  কমপ্লিক্সিটি কমানোর জন্যই আমাদের  বাইনারি সার্চ অ্যালগরিদম পদ্ধতি অনুসরণ করা ।

বাইনারি সার্চ অ্যালগরিদম কি? 

বাইনারি সার্চ অ্যালগরিদম হচ্ছে একটি  দ্রুত সার্চ  অ্যালগরিদম। এই  সার্চ  অ্যালগরিদম ডিভাইড  এন্ড কনকয়ের প্রসেস এর ভিত্তিতে কাজ করে। এই  অ্যালগরিদম তখনি কাজ করবে যখন কোন লিস্ট/এরে সরটেড/সাজানো  আকারে থাকবে । এর  কমপ্লিক্সিটি হচ্ছে  Ο(log n) যা লিনিয়ার সার্চ অ্যালগরিদমের কমপ্লিক্সিটির  O(n) এর চেয়ে অনেক ইফিসিয়েন্ট ।

একটা লিস্টকে বাইনারি সার্চ তিনটা পার্ট এ  ভাগ করেঃ ১) Low ২)  Mid  ৩) High


মনে করি আমাদেরকে উপরের  এই লিস্ট টা দেয়া হয়েছে এবং বলা হল এর মধ্য থেকে ১৩কে খুঁজে বের করতে। প্রথমে আমরা লিস্ট থেকে মিড বের করবো। লো আর হাই তো দেখতেই পাচ্ছি। মিড বের করার জন্যে একটা সুত্র আছে ঃ  mid = low + (high – low) / 2  তাহলে আমাদের মিড হবে ঃ মিড=০+(৭-০)/২ =৩.৫ যেহেতু  ইন্ডেক্সিং  এ  ৩.৫ বলতে কিছু নাই, তাই আমরা এখানে ৩ কেই আমাদের মিড বিবেচনা করবো ।

এখন আমরা এই মিডের আইটেমের সাথে আমাদের ১৩(খুজতে চাচ্ছি) এর তুলনা করবো। যেহেতু ১৩>৭ তাই আমরা এখন মিড এর ডান দিকের অংশে খুঁজবো। বামদিক আর খুজতে হবে না কারন আমরা এখন নিশ্চিত যে বাম দিকে আমাদের ১৩ থাকতে পারে না।

এবার আবার আমরা  মিড আইটেম(৭) কে বাদ দিবো কারন ৭<১৩। এবং ইনডেক্স ৪ থেকে ৭  এর মধ্যে আমাদের আইটেম কে খুঁজবো।  এখন আমরা চিন্তা করি যে ৪  আমাদের low আর ৭ আমাদের high তাহলে আমাদের মিড হবে ঃ মিড = ৪+(৭-৪)/২= ৫.৫ মানে ৫ নাম্বার ইনডেক্স  ই হবে  আমাদের মিড। এখন আমরা আমদের মিডের ভেলুর  সাথে আমাদের আইটেম এর তুলনা করবো। যদি সমান হয় তাহলে তার ইনডেক্স নাম্বার রিটার্ন করবো। এখানে আমাদের মিড ভেলু =আমাদের আইটেম। তাহলে আমরা এখন মিড এর ইনডেক্সকে রিটার্ন করবো। তারমানে আমরা ১৩কে খুঁজে পেয়েছি ৫ নাম্বার ইনডেক্স এ । এখন আমাদের প্রোগ্রাম এই ইনডেক্স নাম্বারকেই প্রিন্ট করে দেখাবে। তাহলেই আমাদের কাজ শেষ। বিঃদ্রঃ কেউ আবার ইনডেক্স আর আইটেম এর মধ্যে গোলমাল পাকিয়ে ফেলোনা। তাইলে ভুল হবে সিউর।

বাইনারি সার্চ আর লিনিয়ার সার্চ এর মধ্যে কম্পারিজন টা দেখতে পারো  ঃ

Binary Search and Linear Search comparison

এখন আশা করি সহজেই বুঝতে পারতেসো যে কেনো আমরা বাইনারি সার্চ অ্যালগরিদম ব্যাবহার করবো।

কোড ইমপ্লিমেন্টেশনঃ 

তুমি যদি থিউরিটা ভালভাবে বুঝতে পারো তাহলে কোড ইমপ্লিমেন্ট করাটা বেশি যামেলার মনে হবে না।সহজেই পারবা।

binary search


Any Suggestion or query: https://www.facebook.com/RevelYusuf














পাইথন প্রোগ্রামিং এর ইতিহাস !


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

পাইথন একটি বহু-প্যারাডাইম প্রোগ্রামিং ভাষা (ফাংশন-ভিত্তিক, বস্তু-সংশ্লিষ্ট ও নির্দেশমূলক) এবং এটি একটি পুরোপুরি চলমান প্রোগ্রামিং ভাষা যার স্বনিয়ন্ত্রিত মেমরি ব্যবস্থাপনা রয়েছে। এদিক থেকে এটি পার্ল, রুবি প্রভৃতি প্রোগ্রামিং ভাষার মত।

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


১৯৮০ দশকের শেষের দিকে পাইথনের জন্ম দেন নেদারল্যান্ডের সিডব্লিউআই’র গবেষক গুইডো ভ্যান রস্যিউম। মূলত এবিসি’র উত্তরসূরী হিসেবে পাইথনের আবির্ভাব হয়েছে যা এক্সেপশন হ্যান্ডলিং করতে এবং অ্যামিবা অপারেটিং সিস্টেমের সাথে কাজ করতে সক্ষম ছিল। ভ্যান রস্যিউম পাইথনের প্রধান লেখক এবং বর্তমানে পাইথনের উন্নয়নে তিনিই প্রধানত নেতৃত্ব দিচ্ছেন। তাঁকে পাইথনের আজীবন পরিচালক হিসেবে সম্মান দেয়া হয়েছে।

১৯৯১ সালে ভ্যান রস্যিউম পাইথনের কোড প্রকাশ করেন (ভার্শন ০.৯.০)। পাইথন ডিজাইনের এই ধাপেই ক্লাস ইনহেরিটেন্স, এক্সেপশন হ্যান্ডলিং, ফাংশন, ও প্রধান ডাটা টাইপ list, dict, str প্রভৃতি সংযুক্ত ছিল। এই প্রাথমিক প্রকাশে ছিল মডুলা-৩ থেকে ধার করা মডিউল সিস্টেম; ভ্যান রোসাম এই মডিউলকে “পাইথনের মূল প্রোগ্রামিং ইউনিটের একটি” আখ্যায়িত করেছেন। পাইথনের এক্সেপশন মডেলটিও অনেকটা মডুলা-৩’র মত যাতে কেবল অতিরিক্ত else যুক্ত হয়েছে। ১৯৯৪ সালে পাইথনের প্রধান ফোরাম comp.lang.python গঠিত হয়, এবং পাইথনের ব্যবহারকারীদের জন্য তা মাইলফলক হিসেবে চিহ্নিত হয়।

১৯৯৪ সালের জানুয়ারি পাইথন ১.০ সংস্করনে প্রবেশ করে। এই সংস্করনে যে প্রধান বিষয়াদি যুক্ত হয় তা হলো ফাংশনাল প্রোগ্রামিং টুলস lambda, map, filterreduce। ভ্যান রস্যিউম বলেন “পাইথন lambda, reduce(), filter() ও map() অধিকার করেছে, (আমি বিশ্বাস করি) একজন লিস্প হ্যাকারের কাছ থেকে যে নিজেকে এগুলো থেকে বঞ্চিত মনে করছিল এবং কর্মক্ষম প্যাচগুলো সরবরাহ করেছে।” এর প্রধান অবদানকারী ছিলেন অমৃত প্রেম; এবং এর প্রকাশ নোটে সে সময় কোন লিস্প প্রোগ্রামের উত্তরসূরী হওয়ার উল্লেখ করা হয়নি।

সিডব্লিউআই থেকে প্রকাশিত সর্বশেষ সংস্করন হচ্ছে পাইথন ১.২। ১৯৯৫ সালে ভ্যান রস্যিউম ভার্জিনিয়ার কর্পোরেশন ফর ন্যাশনাল রিসার্চ ইনিশিয়েটিভস (সিএনআরআই) প্রতিষ্ঠান থেকে পাইথনের ওপর তার কাজ চালিয়ে যেতে থাকেন এবং এখান থেকে সফটওয়ারটির কয়েকটি সংস্করন বের করেন।

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

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

২০০০ সালে পাইথনের মূল উন্নয়নকারী দল বিওপেন.কম এর সাথে যুক্ত হয়ে যৌথভাবে বিওপেন পাইথনল্যাবস গঠন করে। সিএনআরআই পাইথনের একটি সংস্করন ১.৬ প্রকাশের অনুরোধ করেছিল যা মূলত এ পর্যন্ত সিএনআরআইতে পাইথনের যেটুকু উন্নয়ন হয়েছে তার সম্মিলিত প্রকাশ। একারণে পাইথনের ১.৬ ও ২.০ সংস্করনের মধ্যে অনেক বিলম্ব ঘটেছিল। পাইথন ২.০ ছিল বিওপেন.কম থেকে প্রকাশিত প্রথম ও একমাত্র পাইথন ডিস্ট্রিবিউশন। পাইথন ২.০ প্রকাশিত হওয়ার পর গুইডো ভ্যান রোসাম ও অন্যান্য পাইথনল্যাবস কর্মীরা ডিজিটাল ক্রিয়েশন্‌স এ যোগ দেন।

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

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

পাইথন ১.৬.১ আসলে শুধুই পাইথন ১.৬ যাতে কিছুটা ত্রুটি মুক্ত করা হয়েছে এবং নতুন জিপিএল-সঙ্গতিপূর্ণ লাইসেন্স রয়েছে।

সিনট্যাক্স বর্ণায়িত পাইথন কোড

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

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

পাইথনের স্ট্যান্ডার্ড লাইব্রেরি ও সিনট্যাক্টিক্যাল ব্যবহার জাভা থেকে অনুপ্রাণিত হয়েছে। কোন কোন ক্ষেত্রে যেমনঃ logging প্যাকেজ, যা যুক্ত হয় ২.৩ ভার্সনে,স্যাক্স পার্সার যা ২.০ সংস্করনে যুক্ত হয় এবং ডেকোরেটর সিনট্যাক্স যা @ ব্যবহার করে এবং ২.৪ সংস্করনে যুক্ত হয়added in version 2.4ইত্যাদি।



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

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



পাইথন কোডের একটি ব্লক বোঝাতে ব্রাকেট বা কীওয়ার্ডের পরিবর্তে হোয়াইটস্পেস ইন্‌ডেন্‌টেশন ব্যবহার করে। এই ব্যবস্থাটিকে অফ-সাইড নিয়ম বলা হয়। কোন একটি ব্লক বোঝাতে ইন্‌ডেন্‌টেশন বেশি করা হয়। আবার চলতি ব্লক শেষ বোঝাতে কম ইন্‌ডেন্‌টেশন করা হয়।

স্টেট্‌মেন্ট এবং কন্ট্রোল ফ্লোঃ

পাইথনে যেসব স্টেট্‌মেন্ট আছে তার মধ্যে অন্যতম হল-

  • if স্টেট্‌মেন্ট যা else এবং elif (else if এর সংক্ষিপ্ত রূপ) এর সাথে কোডের একটি ব্লক শর্তের উপর ভিত্তি করে এক্সিকিউট করে।
  • while স্টেট্‌মেন্ট যা কোডের একটি ব্লক এক্সিকিউট করে যতক্ষণ পর্যন্ত এর শর্ত পূরণ হতে থাকে।
  • def স্টেট্‌মেন্ট যা একটি ফাংশন অথবা মেথড লেখার জন্য ব্যবহৃত হয়।
  • yeild স্টেট্‌মেন্ট যা একটি জেনারেটর ফাংশন থেকে মান পাঠায়। পাইথন ২.৫ থেকে yield কে অপারেটর এর মধ্যেও অন্তর্ভুক্ত করা হয়েছে। এটি করা হয়েছে মূলত কোরুটিন বাস্তবায়নের জন্য।

অন্যান্য সুবিধাদিঃ 

CPython’s interactive mode, used via IDLE

পাইথনের নিজস্ব বহু মডিউল ও লাইব্রেরি থাকা সত্বেও বিশেষ ধরনের কাজের জন্য বিশেষভাবে তৈরি বিভিন্ন প্যাকেজ পাওয়া যায়। যেমনঃ বায়োইনফর্মেটিক্স বিষয়ক কাজের জন্য রয়েছে BioPython, গ্রাফিকেল ইন্টারফেস প্রোগ্রামিং এর জন্য PyGTK, ইমেজ প্রসেসিং এর জন্য OpenCVইত্যাদি।




এখন পুলিশ ক্লিয়ারেন্স সনদ পাওয়া যাবে অনলাইনে


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

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

স্বরাষ্ট্রমন্ত্রী বলেন, অনলাইন পুলিশ ক্লিয়ারেন্স চালুর ফলে সেবাপ্রত্যাশী জনগণের অর্থ ও সময় সাশ্রয় হবে। তাঁরা হয়রানির শিকার হবেন না। এতে পুলিশের কাজের স্বচ্ছতা ও জবাবদিহি নিশ্চিত হবে।

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

নতুন এই কার্যক্রম সম্পর্কে অনুষ্ঠানে জানানো হয়, বিদেশগামী বা বিদেশে বসবাসকারী বাংলাদেশি নাগরিকেরা দেশে বা দেশের বাইরে যেকোনো জায়গায় pcc.police.gov.bd ঠিকানায় অথবা বাংলাদেশ পুলিশের ওয়েবসাইটে (www.police.gov.bd) গিয়ে পুলিশ ক্লিয়ারেন্স মেন্যুতে ক্লিক করে অনলাইনে আবেদন করতে পারবেন। আবেদনের সঙ্গে প্রয়োজনীয় কাগজপত্র ও সরকারি ফি পরিশোধের চালান স্ক্যান করে আপলোড করতে হবে। আবেদনের জন্য আবেদনকারীর ব্যক্তিগতভাবে থানায় যাওয়ার প্রয়োজন হবে না।

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

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


অ্যাসেম্বলি ল্যাঙ্গুয়েজ / যান্ত্রিক ভাষা



কম্পিউটার বিজ্ঞানে অ্যাসেম্বলি   ল্যাঙ্গুয়েজ/যান্ত্রিক ভাষা (ইংরেজি: Machine code বা machine language) হচ্ছে এক ধরনের নিম্ন-স্তরের প্রোগ্রামিং ভাষা যা কোন কম্পিউটারের কেন্দ্রীয় প্রক্রিয়াকরণ ইউনিট বা সিপিইউ সরাসরি বুঝতে পারে। যান্ত্রিক ভাষা দ্বিমিক বা বাইনারি কোডে লেখা হয়, অর্থাৎ ০ ও ১-এর সমন্বয়ে যান্ত্রিক ভাষার বিভিন্ন নির্দেশগুলি লেখা হয়। এই নির্দেশগুলি কী হবে তা সিপিইউ-এর প্রস্তুতকারক কোম্পানি ও মডেলের উপর নির্ভর করে, যেমন- এএমডি প্রসেসরের জন্য যান্ত্রিক ভাষা ইন্টেল প্রসেসরের যান্ত্রিক ভাষার চেয়ে আলাদা।

যান্ত্রিক ভাষায় প্রোগ্রাম লেখা অত্যন্ত দুরূহ। প্রোগ্রামারকে প্রতিটি বিটের হিসাব রাখতে হয়। কেবল ০ ও ১-এ লেখা বলে প্রোগ্রামের ভুলত্রুটি ধরতেও অসুবিধা হয়। মার্কিন গণিতবিদ গ্রেস মারি হপার ১৯৫২ সালে এই সমস্যাগুলি দূর করার লক্ষ্যে অ্যাসেম্বলি ভাষা উদ্ভাবন করেন। অ্যাসেম্বলি ভাষা থেকে যান্ত্রিক ভাষায় অনুবাদের জন্য বিশেষ ধরনের অনুবাদক প্রোগ্রাম ব্যবহার করা হয়, যাদের নাম দেয়া হয়েছে অ্যাসেম্বলার। অ্যাসেম্বিলি ভাষায় যান্ত্রিক ভাষার কিছু কিছু নির্দেশ বাইনারী সংখ্যায় প্যদারে বদলে সরাসরি ইঙরেজী ভাষায় প্রদান করা হত যেমন যোগ করার নির্দেশ প্রদান করতে হলে যান্ত্রিক ভাষায় 100010 লিখতে হত কিন্তু অ্যাসেম্বলি ভাষায় সরাসরি ADD লিখলেই চলত ।

বাইনারী সংখ্যা অর্থাৎ শুধুমাত্র 0 এবং 1 এর মাধ্যমে রচিত যে কম্পিউটার প্রোগ্রাম সরাসরি প্রথম প্রজন্মের ভাষা বলতে যান্ত্রিক ভাষাকে বোঝানো হয়। সেন্ট্রাল প্রসেসিং ইউনিট কর্তৃক নির্বাহিত হতে পারে তাকে যান্ত্রিক ভাষা বলে। কম্পিউটারে মৌলিক ভাষা বলতেই যান্ত্রিক ভাষাকে বোঝানো হয়। কম্পিউটারকে প্রদত্ত যে কোন নির্দেশনা যান্ত্রিক ভাষায় পরিবর্তন ব্যতীত নির্বাহ সম্ভব নয়। এ প্রেক্ষিতে এসেম্বলী ভাষা অথবা যে কোন উচ্চতর ভাষায় রচিত কম্পিউটার প্রোগ্রাম যান্ত্রিক ভাষায় রূপান্তরিত হবার মাধ্যমেই নির্বাহ করা হয়। যান্ত্রিক ভাষায় রচিত প্রোগ্রামকে অবজেক্ট প্রোগ্রাম (Object Program) এবং অন্যভাষায় রচিত প্রোগ্রামকে উৎস প্রোগ্রাম (Source Program) বলা হয়। কম্পিউটারের প্রোগ্রামিং ভাষার সূচনাতে বাইনারী কোডের মাধ্যমে এই যান্ত্রিক ভাষায় কম্পিউটারকে নির্দেশনা প্রদান করা হলেও এই প্রক্রিয়াটি ছিলো অত্যন্ত কষ্টকর, সময়সাপেক্ষ, ও ত্রুটিপূর্ণ। বাইনারী সংখ্যা মনে রাখা যেহেতু অনেকটা অসম্ভব, সেহেতু প্রোগ্রামিং এর ত্রুটির সম্ভাবনাও বেশি ছিল এবং ত্রুটি সনাক্তকরণও ছিলো অসম্ভব। মেশিন ভাষা এবং এসেম্বলী ভাষা যন্ত্রনির্ভর। অর্থাৎ, এক কোম্পানির কম্পিউটারের জন্য মেশিন ভাষা বা মেশিন নির্দেশ ও এসেম্বলী নির্দেশ এক নাও হতে পারে। উদাহরণস্বরূপ মেশিন কোড 00000101 দ্বারা সিপিইউ এর নামের প্রসেসর রেজিস্টার এর মান একক হ্রাস করার নির্দেশনা প্রদান করা হয়, যেটি এসেম্বলী ভাষায় DEC B নির্দেশের মাধ্যমে নির্দেশিত হয়। সাধারণত যান্ত্রিক ভাষার নির্দেশ অপারেশন কোড ফিল্ড, J-type (jump), I-type (immediate), R-type (register) এবং function এর সমন্বয়ে গঠিত হতে পারে। MIPS (32 Bit) আর্কিটেকচার অনুযায়ী register 1 এবং register 2 এ বিদ্যমান মান যোগ করে register 6 এ স্থাপনের জন্য মেশিন ভাষায় 000000 00001 00010 00110 00000 100000 নির্দেশ ব্যবহৃত হয়। রেজিস্টার register 3 এ যে মান বিদ্যমান রয়েছে সেটি থেকে থেকে 68 মেমরী সেল (Memory Cell) দূরতে বিদ্যমান মেমরী সেলে রক্ষিত মানটিকে register 8 এ load (সঞ্চালন) করার জন্য মেশিন ভাষায় 100011 00011 01000 00000 00001 000100 নির্দেশ প্রদান করা হয়। মেমরীর 1024 এড্রেসে Jump করার জন্য ব্যবহৃত মেশিন কোড হল 000010 00000 00000 00000 10000 000000। মেশিন ভাষা এবং এসেম্বলী ভাষায় প্রদত্ত নির্দেশগুলিকে মূলত চারটি ভাগে ভাগ করা যায়-

  • গাণিতিক নির্দেশ (Arithmetic Instructions) – যেমন, যোগ (Addition/Summation), বিয়োগ (Subtraction), গুণ (Multiplication), ভাগ (Division)
  • নিয়ন্ত্রণমূলক নির্দেশ (Control Instructions) – যেমন, লোড (Load), স্টোর (Store) ও জাম্প (Jump)
  • ইনপুট-আউটপুট নির্দেশ (Input-Output Instructions) – যেমন পড় (Read), লেখ (Write)
  • প্রত্যক্ষ/সরাসরি ব্যবহারমূলক নির্দেশ (Direct Use/Instructions) – যেমন শুরু করা (Start), স্থগিত করা (Halt), সমাপ্ত করা (End) ইত্যাদি।

যান্ত্রিক ভাষার সুবিধা:

  • যেহেতু কম্পিউটার শুধুমাত্র বাইনারী ভাষা বোঝে এবং বাইনারী নির্দেশ সরাসরি নির্বাহ করতে পারে সেজন্য মেশিন ভাষায় রচিত প্রোগ্রাম নির্বাহ সর্বাপেক্ষা দ্রুত।
  • সরাসরি বাইনারীতে লিখিত হওয়ায় মেশিন ভাষায় রচিত প্রোগ্রামের জন্য কোনরূপ পৃথক অনুবাদক (Compiler/Interpreter) প্রয়োজন হয় না।
  • যান্ত্রিক ভাষায় রচিত প্রোগ্রাম সরাসরি বাইনারীতে রচিত হওয়ায় এটি সংরক্ষণে যেমন স্বল্প মেমরী প্রয়োজন তেমনি এটির জন্য পৃথক কোন অনুবাদকের প্রয়োজন না থাকার প্রেক্ষিতে অতিরিক্ত কোন স্মৃতির প্রয়োজন হয় না।
  • কম্পিউটার সিস্টেমের ইলেকট্রনিক সংগঠনের সাথে একমাত্র যান্ত্রিক ভাষা সরাসরি সংযোগ স্থাপন করে বলে কম্পিউটার সিস্টেমের নবতর উদ্ভাবনের ও উৎকর্ষতার জন্য যান্ত্রিক ভাষা অপরিহার্য।
  • কম্পিউটার সিস্টেমের সাথে এর peripheral systems এর সংযোগ বিধানের জন্য যান্ত্রিক ভাষা অত্যাবশ্যকীয়।

যান্ত্রিক ভাষার অসুবিধা/সীমাবদ্ধতা

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

প্রোগ্রামিং এর ইতিকথা



স্বাগতম সবাইকে !!

সিএসই,আইটি,আইসিটি স্টুডেন্টদের জন্য ঃ

বছরের শুরুতে সবার মধেই একটা কিউরিসিটি থাকে প্রোগ্রামিং নিয়ে।এক/দুই সপ্তাহ পর আর সেটা খুব কম মানুষ বাদে সবাই ভুলে যায়। প্রোগ্রামিং এর নাম শুনলেই বিরক্তি লাগে।কেন যে এই সাবজেক্ট এ ভর্তি হলাম।ধুর্‌…………  😦
এটা অনেকটা ভার্সিটির আর বাকিটা টিচার/সিনিওর দের উপর নির্ভর করে। এটা কেন বললাম সেটা কয়েকটা ভার্সিটির(sust,buet,ju,du) উপর গবেষণা করলেই বুঝবেন। তারা কেন ভালো,কেন এতো নাম করতেসে,কে তাদেরকে সাপোর্ট দিচ্ছে এইসব বুঝতে পারবেন।
যাক, কাজের কথায় আসি।যাদের মধ্যে ৫% ও আগ্রহ আছে তাদের জন্যই আমার এইটা লিখা 🙂

অনেক ভালো ভালো ইন্সপাইরেসনাল কথাবার্তা শুইনা যখনি চিন্তা করলেন  যে না সব বাদ আজকে থেকে শুধুই প্রোগ্রামিং। কিন্তু কোনটা শিখবেন  সেইটা বুঝতেসেননা । ব্যাস ওই ৫% ইচ্ছাও শেষ। ধুর বাদ দে , প্রোগ্রামিং আমার জন্য না।সব বাদ এখন শুধু মুভি হবে ম্যান ,চিল হবে চিল ,জিবনে আছে আর কি? !!
শেষ সবকিছু  😦  😦  এই ইমো ছাড়া আপনাকে  দেয়ার মতো আর কিছু নাই আমার কাছে।
যাই হোক অনেক কস্টে ডিসিশন নিলেন  যে সি শিখবেন । কারন ভার্সিটি  তে সি শিখায় ।
প্রথম এক মাস পর বুঝলেন  যে আপনি  “হেলো ওয়ার্ল্ড” প্রিন্ট ছাড়া আর কিছুই  পারেন না। কারন টিচার কিচ্ছু শিখায় নাই। আপনি  কেন শিখতে যাবেন?
এই চিন্তা ভাবনা থাকলে প্রোগ্রামিং শুধু আপনার কাছে একটা নাউন ছাড়া আর কিছুই মনে হবে না ।

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

তাইলে আর দেরি না কইরা এখনি শুরু কর।হুম এখনি 🙂

যারা সি শিখতে চানঃ

আপনি সি ল্যাঙ্গুয়েজ শিখতে চান। বেশ ভাল কথা! তারজন্য আপনি নিচের কাজগুলো করতে পারেন:

(ক) ইংরেজিতে নাজুক হলে/বাংলায় শিখতে চাইলে: বাংলাদেশের টপ ক্লাস প্রোগ্রামার ভাই-বেরাদারদের থেকে আমি এটাই শিখেছি যে যদি ভাল প্রোগ্রামার হইতে চাও তবে ইংরেজি ভাষার আর্টিকেল পড়। 🙂

(১) আপনি ইংরেজিতে নাজুক হলে যেটা করলে সবচেয়ে ভাল হয় সেটা হল শিক্ষক ডট কম থেকে “প্রোগ্রামিং এ হাতে খড়ি” কোর্সটা এক নিঃশ্বাসে করে ফেললে। তামিম শাহরিয়ার সুবিন ভাই, মীর ওয়াসি আহমেদ ভাই ও তাহমিদ রাফি ভাইয়ের যৌথ পরিশ্রমের ফল এই কোর্সটি। সুতরাং গুরুত্ব বুঝতেই পারছেন। আপনি চাইলে কোর্স লেকচারগুলো  ডাউনলোড করে নিতে পারেন।

(২) বইয়ের নাম: Programming in ANSI C (4th Edition)

লেখক: E. Balagurusamy

রিভিউ: সি প্রোগ্রামিং শেখার জন্য এর চেয়ে সহজ, স্বাভাবিক ও সাবলীল ভাষায় লেখা আর কোন বই আছে কিনা আমার জানা নাই।

(৩) বইয়ের নাম: Let Us C (5th Edition)

লেখক: Yashwant Kanetkar

রিভিউ: প্রথমটার পর এটা আমার হট ফেভারিট। এটাও বিগিনারদের জন্য লেখা সেরা বইগুলোর একটা।

(৪) বইয়ের নাম: C The Complete Reference (4th Edition)

লেখক: Herbert Schildt

রিভিউ: হার্বার্ট শীল্ডের বইয়ের নাম শোনে নাই এমন প্রোগ্রামার পাওয়া যাবে না। এই বইটা বেশ ভাল, তবে বিগিনারদের জন্য তেমন নয়। রেফারেন্স হিসেবে বিশেষত সি এর এডভান্স লেভেলের প্রোগ্রামিং শেখার জন্য বেশ ভাল বই একটা।
(৫) বইয়ের নাম: C

লেখক: Tutorialspoint.Com

রিভিউ: TutorialsPoint এর অন্যসব টিউটোরিয়ালের মত এটাও বেশ ভাল। বিগিনারদের বেশ কাজে দেবে।


৬।শরিফ ভাইয়ের বাংলা টিউটোরিয়াল গুলা আমার  কাছে অনেক ভালো মনে হয়েছে !!

৭।সুবিন ভাইয়ের টিউটোরিয়াল গুলাও ভালো। তবে উনার বইটা দয়া করে কেও পরবন  না । আগ্রহ হারাইয়া ফেলবেন।

৮।অনলাইন জাজঃ
৯। অনলাইন কোড লেখা/কম্পাইল করার জন্য ঃ

অনেক রিসোর্সই তো দিলাম আপনাকে। আশা করি এতে আপনার কাজ হয়ে যাবে, অন্ততপক্ষে ট্রাকে উঠে যেতে পারবেন। আর হ্যাঁ, নিয়মিত প্রাকটিস করতে কিন্তু ভুলবেন না। মোটামুটি সবকিছু আপনার আয়ত্তে এসে গেলে বিভিন্ন ওজের সমস্যাগুলো সলভ করা শুরু করুন।

আর ছোটখাট যেসব সমস্যা হবে তার জন্য আমি তো রয়েছেই আপনাদের পাশে। হ্যাপি কোডিং!!!