FAQ – পাইথন দিয়ে প্রোগ্রামিং শেখা

পাইথন দিয়ে প্রোগ্রামিং শেখা (লেখক তামিম শাহরিয়ার সুবিন) বই সম্পর্কে কিছু সচরাচর জিজ্ঞাসিত প্রশ্নের উত্তর –

১) কোন প্রকাশনী থেকে বইটি প্রকাশিত হয়েছে?

উত্তরঃ দ্বিমিক প্রকাশনী (ওয়েবসাইট http://dimik.pub )

২) বইয়ের দাম কত?

উত্তরঃ গায়ের দাম ২০০ টাকা (দোকানে একটু কম রাখার কথা)।

৩) বইতে পাইথন ২ নাকি পাইথন ৩ ব্যবহার করা হয়েছে?

উত্তরঃ পাইথন ৩।

৪) আমি (তামিম শাহরিয়ার সুবিন-এর) কম্পিউটার প্রোগ্রামিং ১ম ও ২য় খণ্ড বইটি পড়েছি, এখন কি পাইথন বইটি পড়ব?

উত্তরঃ পাইথন শেখার কোনো দরকার থাকলে পড়া যেতে পারে, নইলে পড়ার দরকার নাই।

৫) বইটা কাদের জন্য উপযোগি?

উত্তরঃ যারা প্রোগ্রামিংয়ে একেবারে নতুন, প্রোগ্রামিং শেখা শুরু করবে, তাদের জন্য উপযোগি। এছাড়া যারা আগে প্রোগ্রামিং শিখতে গিয়ে শিখতে পারে নাই, এখন আরেকবার চেষ্টা করবে, বইটি তাদেরও কাজে লাগতে পারে। যারা অভিজ্ঞ প্রোগ্রামার, বইটি তাদের জন্য নয়।

৬) “পাইথন পরিচিতি” ও “পাইথন দিয়ে প্রোগ্রামিং শেখা” বই দুটির মধ্য পার্থক্য কী?

পাইথন পরিচিতি বইতে পাইথন 2.x ব্যবহার করা হয়েছে, আর পাইথন দিয়ে প্রোগ্রামিং শেখা বইটিতে 3.x। পাইথন পরিচিতি বইটি অভিজ্ঞ প্রোগ্রামার যারা পাইথন শিখতে চায়, তাদের জন্য, আর পাইথন দিয়ে প্রোগ্রামিং শেখা বইটি যারা নতুন প্রোগ্রামিং শিখতে চায়, তাদের জন্য।

৭) বইটি কোথায় পাওয়া যাবে?

নীলক্ষেতের হক লাইব্রেরি, মানিক লাইব্রেরি ও রানা বুক পাবলিশার্স-এ (ফোন নাম্বার দ্বিমিকের ওয়েবসাইটে দেওয়া আছে)। এছাড়া ঘরে বসে অনলাইনে অর্ডার করা যাবে রকমারি ডট কম-এ।

৮) ঢাকার বাইরে থেকে কিভাবে কিনব?

উত্তরঃ উপরে উল্লেখিত (নীলক্ষেতের) তিনটি বইয়ের দোকানে যোগাযোগ করতে হবে (ঠিকানা দ্বিমিকের ওয়েবসাইটে দেওয়া আছে)। এছাড়া rokomari.com বাংলাদেশের যেকোনো জায়গায় বই পৌঁছে দেয়।

৯) বাংলাদেশের বাইরে থেকে কিভাবে কিনব?

উত্তরঃ জানি না।

১০) বইতে কী কী বিষয় আলোচনা করা হয়েছে?

উত্তরঃ বইয়ের ওয়েবসাইটে বিস্তারিত আছে ঃ http://dimik.pub/book/155/

১১) পাইথন সম্পর্কিত কিছু প্রশ্ন ছিল, কোথায় জিজ্ঞাসা করবো?

উত্তরঃ পাইথন নিয়ে জিজ্ঞাসা থাকলে নিচের দুটি গ্রুপে কিংবা প্রোগ্রামাবাদে প্রশ্ন করতে হবে:

১২) আচ্ছা, পাইথন কী?

উত্তরঃ বিস্তারিত লিখেছি এই লেখায় : পাইথন কী?

Facebook Comments

একজন টিম বার্নার্স লী, ওয়ার্ল্ড ওয়াইড ওয়েব এবং একটি টুরিং পুরষ্কার

স্যার টিম বার্নার্স লী

সম্প্রতি স্যার টিম বার্নাস লী কম্পিউটার বিজ্ঞানের নোবেল পুরষ্কার হিসেবে খ্যাত টুরিং পুরষ্কারে ভূষিত হয়েছেন। এই বছর ছিল টুরিং পুরষ্কারের ৫০ বছর পূর্তি। গত ৪ মে, বৃহস্পতিবার এ্যাসোশিয়েন অফ কম্পিউটিং মেসিনারিজ (ACM) ওয়ার্ল্ড ওয়াইড ওয়েব (www), প্রথম ওয়েব ব্রাওজার এবং ওয়েবকে মানসম্মত করার জন্য যে মৌলিক নিয়মনীতি ইত্যাদি তৈরির জন্য প্রফেসর স্যার টিম বার্নাস লী-কে টুরিং পুরষ্কারে ভূষিত করেন ( “inventing the World Wide Web, the first web browser, and the fundamental protocols and algorithms allowing the web to scale”)।

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

টুরিং পুরষ্কার

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

এসিএম প্রেসিডেন্ট ভিকি এল হ্যানসন টিম লী এর টুরিং পুরষ্কার প্রাপ্তি সম্পর্কে বলেন, “ওয়ার্ল্ড ওয়াইড ওয়েব সর্বপ্রথম অনলাইনে আসে ১৯৯১ সালে। যদিও খুব বেশিদিন আগের কথা নয়, তারপরেও স্যার লী এর আবিষ্কারের আগের পৃথিবীর কথা ভাবাটা আমাদের জন্য কষ্টকর। বিভিন্ন দিক থেকে, ওয়ার্ল্ড ওয়াইড ওয়েবের অসামান্য প্রভাব সুস্পষ্ট। তারপরেও অনেকেই, WWW এর অন্তর্নিহিত প্রযুক্তিগত অবদানের স্বতঃস্ফূর্ত প্রশংসা করেন না। টিম বার্নাস লী, শুধুমাত্র ওয়ার্ল্ড ওয়াইড ওয়েবের মূল অংশটুকু উদ্ভাবন করেননি, একই সাথে তিনি URI (Uniform Resource Identifier) এবং ওয়েব ব্রাউজারও উদ্ভাবন করেছেন, যার দ্বারা Web এর ব্যবহার আমাদের কাছে সহজতর হয়েছে। WWW এর সামগ্রিক অংশের প্রতিটি উপাদান কিভাবে আলাদা আলাদা ভাবে কাজ করবে তার একটি সুস্পষ্ট ধারণা দিয়েছেন স্যার টিম বার্নাস লী।”

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

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

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

অক্সফোর্ড বিশ্ববিদ্যালয়ের অধ্যাপক টিম বার্নার্স লী World Wide Web Consortium এর প্রতিষ্ঠাতা এবং পরিচালক, যা ওয়েব ডেভেলপমেন্টের প্রযুক্তিগত মানদণ্ড স্থাপনের জন্য কাজ করে। একই সাথে তিনি World Wide Web Foundation এর প্রতিষ্ঠাতা, যার মূল লক্ষ্য জনস্বার্থে ওয়েবের ব্যবহার নিশ্চিত করা এবং ওয়েবের ব্যবহারকে মৌলিক অধিকার হিসেবে প্রতিষ্ঠিত করা।

CASIL এর ডিসেন্ট্রালাইজ ইনফরমেশন গ্রুপের পরিচালক, লী Http with Accountability (HTTPA) তৈরি করেন, যা Private-data এর ট্রান্সমিশন কিভাবে হচ্ছে সেটির উপর নজর রাখে এবং কিভাবে মানুষের দেয়া তথ্যের ব্যবহার হচ্ছে সেটি অনুসন্ধান করতে পারে। লী Solid (Social Linked Data) নামের একটি প্রকল্পের নেতৃত্ব দেন, যেটি একজন ব্যক্তিকে তার নিজস্ব ডাটা নিয়ন্ত্রণের অনুমতি দেয় এবং পছন্দসই অ্যাপ্লিকেশনে সেসব ডাটা ব্যবহারের জন্য যোগ্য করে তোলে।

এমআইটির প্রেসিডেন্ট এল র‍্যাফেল রেইফ বলেন, “টিম বার্নাস লী এর বর্নাঢ্য ক্যারিয়ার MIT এর মূল আসক্তি – প্রযুক্তির মাধ্যমে পৃথিবীর সৌন্দর্য বৃদ্ধির উদ্দেশ্যকেই ব্যাখ্যা করছে। আজ আমরা উদযাপন করছি আমাদের মানবজীবনের সর্বোৎকৃষ্ট প্রাপ্তি, যা টিম লী আমাদের জন্য করেছে এবং তাঁকে অভিনন্দন জানাচ্ছি এই সুন্দর পুরষ্কার প্রাপ্তিতে যা কিনা সত্যিকার অর্থেই তাঁর প্রাপ্য ছিল।”

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

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

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

লেখকঃ তামান্না নিশাত রিনি।

Facebook Comments

প্রোগ্রামিং শেখার এক ডজন টিপস্

 প্রথম প্রোগ্রামিং ল্যাঙ্গুয়েজ হিসেবে সি (C) বেশ জনপ্রিয় ও বহুল ব্যবহৃত। বিভিন্ন প্রোগ্রামিং প্রতিযোগিতায় (স্কুল-কলেজ-বিশ্ববিদ্যালয় পর্যায়ে) সি ব্যবহার করা হয়। কলেজে আইসিটি কোর্সের সি ব্যবহার করা হয় এবং বেশিরভাগ বিশ্ববিদ্যালয়েও প্রথম প্রোগ্রামিং কোর্সে সি ব্যবহার করা হয়। সি ভালোভাবে শিখতে গিয়ে অনেকেই নানান সমস্যায় পরে। তাই আমার অভিজ্ঞতা থেকে কিছু পরামর্শ দিলাম।

০) কোর্স পাশ করা কিংবা একটা বই পড়ে শেষ করা উদ্দেশ্য নয়, সেটা বুঝতে হবে। কম্পিউটার সায়েন্সে পড়ে প্রোগ্রামিং ঠিকমতো না শিখলে সারা জীবন ভুগতে হবে। প্রোগ্রামিং কোর্সে এ প্লাস পাওয়া আর প্রোগ্রামিং শেখা এক জিনিস নয় – এই জিনিস মাথায় গেঁথে নিতে হবে।

১) প্রোগ্রামিংয়ের পেছনে নিয়মিত সময় দিতে হবে। একটানা কয়েকঘণ্টা (২ থেকে ৫ ঘণ্টা)। সপ্তাহে কমপক্ষে ৫ দিন। এভাবে মাসের পর মাস। প্রোগ্রামিং করার সময় অন্য কিছু, যেমন টিভি দেখা, খেলা দেখা, ফেসবুক – এসব করা যাবে না।

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

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

৪) কোনো কিছু মনে রাখার চেষ্টা করা, কিংবা মুখস্থ করার চেষ্টা করার দরকার নাই। প্রোগ্রামিং এত বেশি প্র্যাকটিস করতে হবে যে মুখস্থ না করে বিষয়টা নিজের আয়ত্বে এসে যাবে। ক্রিকেট খেলায় যেমন কোন ধরনের বলে কোন শট খেলতে হয়, সেটা কেউ মুখস্থ করে না, বরং প্র্যাকটিস করতে করতে আয়ত্বে চলে আসে – এরকম আর কী।

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

৬) যেই বই দিয়েই সি শেখা শুরু কর না কেন, সেটা দুইবার পড়তে হবে (এবং সেই বইতে যা বলা হয়েছে, তা করতে হবে)। তারপরে কমপক্ষে আরো একটা বই পড়তে হবে।

৭) ক্লাসের পরীক্ষায় (মানে প্রোগ্রামিং কোর্সের পরীক্ষায়) কম নাম্বার পেলে মন খারাপ করা চলবে না। কে কতটুকু প্রোগ্রামিং পারে সেটা আসলে পরীক্ষায় যাচাই করা খুব কঠিন।

৮) i++, ++i এসব জিনিস নিয়ে শুরুর দিকে মাথা ঘামানো মানে সময় নষ্ট করা, যদিও এটা পরীক্ষায় অনেক শিক্ষকেরই প্রিয় প্রশ্ন। ভেরিয়েবল, কন্ডিশনাল লজিক, লুপ, অ্যারে, ফাংশন – এসব জিনিস ভালোভাবে শিখতে ও এগুলো ব্যবহার করতে পারতে হবে।

৯) সি মোটামুটি শেখা হয়ে গেলে সি দিয়ে যেকোনো ওয়েবসাইট থেকে ৫০-১০০ টা সমস্যা সমাধান করতে হবে, তাহলে হাত ও মাথা পাকবে।

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

১১) প্রোগ্রামিং কনটেস্টে অংশ নিতে হবে। প্রোগ্রামিং প্রতিযোগিতায় ভালো করতে পারলে তো ভালো, কিন্তু ভালো করতে না পারলেও ক্ষতি নেই। ভালো করার জন্য যেই চেষ্টা – সেটা করতে গিয়েই অনেক কিছু শিখতে পারবে যেটা তোমাকে ভবিষ্যতে একজন দক্ষ সফটওয়্যার ইঞ্জিনিয়ার হতে সহায়তা করবে।

প্রোগ্রামিং নিয়ে আনন্দে সময় কাটুক সবার!

নোট: প্রোগ্রামিং শুরু করার আরো কিছু গাইডলাইন এখানে আছে : http://programabad.com/questions/1447/-

Facebook Comments

প্রোগ্রামিং ল্যাঙ্গুয়েজ

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

আমি যখন কলেজে পড়তাম, তখন কিউ-বেসিক (Q Basic) নামে একটা প্রোগ্রামিং ল্যাঙ্গুয়েজ শেখার ব্যর্থ চেষ্টা করেছিলাম। কিউ-বেসিক ল্যাঙ্গুয়েজটা আমাদের সিলেবাসে ছিল আর কী। এইচএসসি পরীক্ষার পরে কম্পিউটার কিনি, তখন এইচটিএমএল (HTML) শিখলাম কিছুটা, যদিও এটা ঠিক প্রোগ্রামিং ল্যাঙ্গুয়েজ না। তারপরে ২০০১ সালের শুরু থেকে সি (C) শেখা শুরু করি। আমাদের ভার্সিটির ক্লাস শুরু হয় ২০০১ সালের মে মাসে, আর ততদিনে সি এর বেসিক কিছুটা শেখা হয়েছে। আমি আমার বাকী ভার্সিটি-জীবন এর সুবিধা ভোগ করি। আমার যদি ভার্সিটির সি কোর্সের ক্লাশ থেকে সি শেখা লাগতো, তাহলে একটু অসুবিধাই হতো হয়ত, যেটা আমার অনেক ক্লাসমেটকে দেখে বুঝতে পেরেছি। সি শেখার সময় প্রথম বছরে ৩-৪টা বই কিনেছিলাম, যদিও সবগুলো বই শুরু থেকে শেষ পর্যন্ত পড়ি নাই। এক বছর সি শেখার পরে আমি হার্বার্ট শিল্ডের টিচ ইয়োরসেল্ফ সি প্লাস প্লাস বইটা পড়ি। কিন্তু এরপরে আর আমার সি প্লাস প্লাস (C++) চর্চা করা হয় নাই।

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

ভার্সিটির সেকেন্ড ইয়ারে অবজেক্ট ওরিয়েন্টেড কোর্স ছিল। সেই কোর্সে জাভা (Java) শিখি। আর তারপরের সেমিস্টারে একটা প্রজেক্টও করি জাভা ব্যবহার করে। তারপরে ২০০৬-২০০৭ সালে কিছু টুকটাক কাজ করতে জাভা ব্যবহার করেছিলাম।

সম্ভবত ফোর্থ ইয়ারে আমাদের মাইক্রোপ্রসেস কোর্স ছিল, সেই কোর্সের ল্যাবের জন্য এসেম্বলি ল্যাঙ্গুয়েজ (Assembly Language) শিখতে হয়েছিল।

আমার প্রথম প্রফেশনাল চাকরি ছিল টাইগার আইটি-তে, ২০০৭ সালের মাঝামাঝি। সেখানে আমি যেই প্রজেক্টে জয়েন করলাম, সেই প্রজেক্টে পার্ল (Perl) প্রোগ্রামিং ল্যাঙ্গুয়েজ ব্যবহার করতে হয়। কিন্তু আমি আগে কখনও এই ল্যাঙ্গুয়েজের নাম শুনি নাই। তাই বলে আমার কিন্তু চাকরি পেতে সমস্যা হয় নাই। কারণ ভালো কোম্পানীগুলো বেশি গুরুত্ব দেয় প্রবলেম সলভিং স্কিলের ওপর, প্রোগ্রামিং ল্যাঙ্গুয়েজ শেখার ওপর নয়।

আমার দ্বিতীয় সফটওয়্যার ইঞ্জিনিয়ারিং চাকরি ছিল ট্রিপার্ট ল্যাবসে (যেটা পরে প্লেডম কিনে নেয়, আবার প্লেডমকে ডিজনী কিনে নেয়)। সেখানে ব্যাকএন্ডের কাজ হতো পিএইচপি (PHP) প্রোগ্রামিং ল্যাঙ্গুয়েজে। আর মাঝেমধ্যে অল্পস্বল্প জাভাস্ক্রিপ্ট। তো সেই চাকরির ইন্টারভিউতে আমাকে জিজ্ঞাসা করল যে পিএইচপি পারি কী না। আমি সোজা বলে দিলাম যে পারি না, কারণ এর আগে ২-৩ দিন পিএইচপি নিয়ে গুতাগুতি করলেও সেটা বলার মতো কিছু না। কিন্তু সেজন্য আমার চাকরি পাওয়া আটকায় নাই। সেখানে এক বছর কাজ করার পরে একটা নতুন প্রজেক্টে কাজ করতে হয়, আর সেই প্রজেক্ট হচ্ছে অ্যাকশন স্ক্রিপ্ট (Actionscript)-এ। তো সেটাও দুই-তিন দিন শিখে কাজ শুরু করে দেই।

তারপরে তিন বছর আমার নিজের কোম্পানী মুক্তসফট নিয়ে ব্যস্ত ছিলাম। সেখানে পিএইচপি, পার্ল, পাইথন (Python) – এসব ল্যাঙ্গুয়েজ ব্যবহার করেছি, যখন প্রোগ্রামিং করতে হয়েছে। জেকুয়েরি ব্যবহার করেও একটা প্রজেক্ট করেছিলাম। আসলে ক্লায়েন্ট যেই ল্যাঙ্গুয়েজ চাইতো, সেটাই ব্যবহার করতাম। আর ক্লায়েন্ট কিছু না বললে পাইথন। তারপরে দুই বছর একটা আমেরিকান কোম্পানীর কাজ করি, সেখানে আমি পাইথন ব্যবহার করার সিদ্ধান্ত নেই, কারণ পাইথনে কোড করতে ভালো লাগে এবং সময় কম লাগে।

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

Facebook Comments

বাইনারি সার্চ-এর কোড

আজকে সকালে গো (Go) প্রোগ্রামিং ল্যাঙ্গুয়েজে একটু কোডিং প্র্যাকটিস করার জন্য বাইনারি সার্চ ফাংশন লিখলাম, তারপরে ইউনিট টেস্ট লিখলাম (টেবল ড্রিভেন টেস্ট)। তো এমন সময় আমার মনে হলো লাইব্রেরি ফাংশনগুলো কিভাবে ইমপ্লিমেন্ট করা, সেটা দেখা দরকার। তো গো এর লাইব্রেরিতে যে বাইনারি সার্চ আছে, তার কোড (এবং ডকুমেন্টেশন) দেখে তো আমি মুগ্ধ!
এটা হচ্ছে গো-এর কোড:

func Search(n int, f func(int) bool) int {
    // Define f(-1) == false and f(n) == true.
    // Invariant: f(i-1) == false, f(j) == true.
    i, j := 0, n
    for i < j {
	h := i + (j-i)/2 // avoid overflow when computing h 
        if !f(h) { 
            i = h + 1 // preserves f(i-1) == false 
        } else { 
            j = h // preserves f(j) == true 
        } 
    } 
    return i
}

ওপরের কোডটুকু দেখলে আসলে পুরোপুরি বোঝা যাবে না কেন আমি এত মুগ্ধ। এই লিঙ্কে গেলে বিষয়টা আরো পরিষ্কার হবে: https://golang.org/src/sort/search.go। কোডের চেয়ে ডকুমেন্টেশন অনেক বেশি। আর এই বেশি ডকুমেন্টেশনসহ কোড হচ্ছে ১১৩ লাইন। কিন্তু বিষয় এখানেই শেষ নয়। আমার তারপরে চিন্তা আসল, আচ্ছা, এত সুন্দর কোড আর ডকুমেন্টেশন – এই কোডের টেস্ট কোড (ইউনিট টেস্ট) ওরা কিভাবে লিখল? তার জন্য চলে গেলাম এই লিঙ্কেঃ https://golang.org/src/sort/search_test.go। ১১৩ লাইনের search.go এর জন্য search_test.go তে আছে ১৬২ লাইন। এই দুইটা ফাইলের কোড এবং ডকুমেন্টেশন ঠিকমতো পড়লে শেখার আছে অনেক কিছুই।

তারপর চিন্তা করলাম, গো এর কোড এত সুন্দর, সি এর লাইব্রেরিতে এটা কিভাবে করা হয়েছে? গুগল সার্চ করে খুঁজে বের করলাম কোড।

void *
bsearch (register const void *key, const void *base0,
    size_t nmemb, register size_t size,
    register int (*compar)(const void *, const void *))
{
    register const char *base = (const char *) base0;
    register int lim, cmp;
    register const void *p;

    for (lim = nmemb; lim != 0; lim >>= 1) {
        p = base + (lim >> 1) * size;
        cmp = (*compar)(key, p);
        if (cmp == 0)
            return (void *)p;
        if (cmp > 0) {	/* key > p: move right */
            base = (const char *)p + size;
            lim--;
        } /* else move left */
    }
    return (NULL);
}

এই কোডটাও বেশ সুন্দর, গুছানো। ডকুমেন্টেশনও ভালো। আর পয়েন্টার দেখে ভয় পাওয়ার কারণ নাই (পয়েন্টার নিয়ে আমি কম্পিউটার প্রোগ্রামিং ২য় খণ্ড বইতে বিস্তারিত আলোচনা করেছি অনেক উদাহরণসহ)। তবে এখানে গিয়ে পুরো ফাইলটা না দেখলে এর মর্ম বোঝা যাবে না : https://github.com/gcc-mirror/gcc/blob/master/libiberty/bsearch.c

গো আর সি-এর কোড যেহেতু দেখলাম, পাইথনের কোডটাও দেখা যাক। তাই সেটাও সার্চ করে বের করে ফেললাম :

def bisect_left(a, x, lo=0, hi=None):
    """Return the index where to insert item x in list a, assuming a is sorted.

    The return value i is such that all e in a[:i] have e < x, and all e in a[i:] have e >= x.  So if x already appears in the list, a.insert(x) will
    insert just before the leftmost x already there.

    Optional args lo (default 0) and hi (default len(a)) bound the
    slice of a to be searched.
    """

    if lo < 0:
        raise ValueError('lo must be non-negative')
    if hi is None:
        hi = len(a)
    while lo < hi:
        mid = (lo+hi)//2
        if a[mid] < x: lo = mid+1
        else: hi = mid
    return lo

গো আর সি এর তুলনায় বেশ সহজ! তবে ডকুমেন্টেশন সংক্ষিপ্ত হলেও ভালো। এখানে গিয়ে পুরো কোড দেখা যাবে : https://github.com/python-git/python/blob/master/Lib/bisect.py

তারপরে ভাবলাম, আমার ব্লগের পাঠকদেরকে বিষয়টা জানানো যাক। আশা করি, বিশ্বমানের প্রোগ্রামারদের কোডের সঙ্গে পাঠকদের কিছুটা হলেও পরিচয় করিয়ে দিতে পেরেছি। কোডিং সঠিক হোক, কোড সুন্দর হোক।

Facebook Comments

মার্গারেট হ্যামিলটনঃ অ্যাপোলো-১১ এর নেপথ্য বীর

margaret_hamilton_in_action

মার্গারেট হ্যামিলটন

সম্প্রতি নাসার অ্যাপোলো চন্দ্রাভিজানের কোড ডেভেলপার মার্গারেট হ্যামিলটন, আমেরিকার সর্বোচ্চ বেসামরিক পুরষ্কার “প্রেসিডেন্টশিয়াল মেডেল অফ ফ্রিডম” লাভ করেছেন। মার্গারেট হিয়েফিল্ড হ্যামিলটন এই বছর ২২ নভেম্বর, অ্যাপোলো চন্দ্রাভিজানের “অন-বোর্ড ফ্লাইট ডেভেলপমেন্ট”-এর কাজের জন্য বারাক ওবামা কর্তৃক এই পুরষ্কার লাভ করেন।

হ্যামিলটন, নিজের সফটওয়্যার কোম্পানী “হ্যামিলটন টেকনোলজিস ইনকর্পোরেট” প্রতিষ্ঠা করার আগে MIT-এর লিঙ্কন ল্যাবরেটরিতে কম্পিউটার বিজ্ঞানী হিসেবে দীর্ঘদিন কাজ করেন। লিঙ্কন ল্যাবরেটরিতে কাজ করার সময় তিনি asynchronous সফটওয়্যার, priority scheduling, priority displays এবং “human-in-the-loop decision capability” উপর যে মতবাদ প্রদান করেন, তা বর্তমান আধুনিক এবং নির্ভরযোগ্য সফটওয়্যার ডিজাইন এবং ইঞ্জিনিয়ারিং এর মূল ভিত্তি হিসেবে বিবেচিত হয়।

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

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

বস্তুত, MIT ইন্সট্রুমেন্টেশন ল্যাবের অ্যাপোলো পরিচালনা ও নিয়ন্ত্রণ ছিল অ্যাপোলো প্রোগ্রামের প্রথম চুক্তি, যা ১৯৬১ সালের ৯ আগস্ট ঘোষণা করা হয়। এই ঘোষণার ১০ সপ্তাহ পর তৎকালীন প্রেসিডেন্ট জন এফ ক্যানেডি বিংশ শতাব্দীর অন্যতম লক্ষ্য হিসেবে মানুষের চাঁদে অবতরণের কথা ঘোষণা করেন।

মার্গারেট হ্যামিলটন যুক্তরাষ্ট্রের ইরহাম কলেজ থেকে গণিতে স্নাতক ডিগ্রী অর্জন করেন এবং MIT থেকে আবহাওয়াবিদ্যা (meteorology) তে স্নাতকোত্তর ডিগ্রী অর্জন করেন। পরবর্তীতে তিনি MIT এর লিঙ্কন ল্যাবে “ Semi-Automatic Ground Environment Air Defense System” বা SAGE প্রকল্পে যোগ দেন। SAGE ছিল যুক্তরাষ্ট্রের প্রথম বিমান প্রতিরক্ষামূলক প্রকল্প, যা কিনা ছিল পারমানবিক বোমার প্রকল্প “ম্যানহাটন প্রজেক্ট”-এর চেয়ে বেশি ব্যয়বহুল এবং পঞ্চাশ-ষাট দশকের ডিজিটাল কম্পিউটিং-এর উন্নয়নের যুগান্তকারী পদক্ষেপ। SAGE এবং Apollo প্রজেক্টে কাজ করার পর, হ্যামিলটন নাসার স্পেস শাটল এবং স্কাইল্যাব প্রোগ্রামের সাথে যুক্ত হন।

অ্যাপোলো-১১ কোডের প্রিন্ট কপির সাথে মার্গারেট হ্যামিলটন
অ্যাপোলো-১১ কোডের প্রিন্ট কপির সাথে মার্গারেট হ্যামিলটন

মার্গারেট হ্যামিলটন বিজ্ঞান ও প্রযুক্তিতে “আইকন লেডি” হিসেবে পরিচিতি পান অ্যাপোলো কোডের প্রিন্ট আউটের সাথে তাঁর একটি ছবি সামাজিক যোগাযোগ মাধ্যমে ছড়িয়ে পরার পর। গত বছর (২০১৫ সালে), মার্গারেট হ্যামিলটনের ডেভেলপ করা সম্পূর্ণ অ্যাপোলো কোডটি, কোড শেয়ারিং সাইট গিটহাবে যুক্ত করা হয়ঃ সেখানে কোডের প্রথম লাইনে লেখা হয়ঃ
“SUBMITTED: MARGARET H. HAMILTON DATE: 28 MAR 69 / M.H.HAMILTON, COLOSSUS PROGRAMMING LEADER / APOLLO GUIDANCE AND NAVIGATION”

"প্রেসিডেন্টশিয়াল মেডেল অফ ফ্রিডম" পুরষ্কার বিতরণী অনুষ্ঠানে মার্গারেট হ্যামিলটন
“প্রেসিডেন্টশিয়াল মেডেল অফ ফ্রিডম” পুরষ্কার বিতরণী অনুষ্ঠানে মার্গারেট হ্যামিলটন

এই বছর (২০১৬) ১৬ নভেম্বর প্রেসিডেন্ট বারাক ওবামা “প্রেসিডেন্টশিয়াল মেডেল অফ ফ্রিডম” প্রাপ্ত ২১ জনের নাম ঘোষণা করেন। এই ২১ জনের তালিকায় আরো অনেকের সাথে কম্পিউটার বিজ্ঞানের আরেকজন পথিকৃৎ প্রয়াত গ্রেস হোপার, MIT-এর “রে অ্যান্ড মারিয়া স্টাটা সেন্টার ফর কম্পিউটার, ইনফরমেশন অ্যাণ্ড ইন্টিলিজেন্স” -এর ডিজাইনার ফ্র্যাঙ্ক গেরি, বিল গেটস্‌, মেলিন্ডা গেটসের নাম রয়েছে। ২২ নভেম্বর ওয়াশিংটনে এই পুরষ্কার বিতরণী অনুষ্ঠান মঞ্চায়িত হয়।

লেখকঃ তামান্না নিশাত রিনি।

Facebook Comments

হ্যাশ ফাংশন – ২

লেখকঃ বজলুর রহমান রোকন
লেখকঃ বজলুর রহমান রোকন

আগের পোস্টের সমস্যাটি হলো- দুটি ভিন্ন ভিন্ন স্ট্রিং হ্যাশ ফাংশনে দিলে যদি একই ভ্যালু পাওয়া যায় তাহলে কী হবে? উত্তরটির জন্য পুরো আর্টিক্যাল পড়তে হবে।

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

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

h1

h2

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

সমস্যাটি নিশ্চয় বুঝতে পারছো। এই সমস্যাকে বলা হয় কলিশন (collision)। এখন তুমি যদি অ্যারের ১ নম্বর ইনডেক্সে আমের দাম রাখো, তাহলে আগের আদার দামের সাথে এটি রিপ্লেস হয়ে যাবে। এতে করে তুমি যদি পরবর্তীতে আদার দাম দাও, তোমার হ্যাশটেবিল আমের দাম দিয়ে দিবে যা হওয়া উচিৎ নয়।

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

লিংকডলিস্টের নাম নিশ্চয় শুনেছো এবং আমার ধারণা প্রত্যেকেই ইমপ্লিমেন্ট করেছো। লিংকডলিস্ট হচ্ছে ট্রেনের মতো। একটির পেছনে আরেকটি বগি জোড়া লাগিয়ে তাতে ভ্যালু রাখা।

তবে এতেও একটি সমস্যা আছে। তোমার মুদির দোকানের সবগুলো পণ্য যদি একটি নির্দিষ্ট বর্ণ দিয়ে শুরু হয় তাহলে প্রথম স্লটে একটি বিশাল চেইন হবে। এক্ষেত্রে হ্যাশ টেবিল থেকে কোন পণ্যের দাম খুঁজে আনার সময় আর O(1) থাকবে না বরং সেটি হয়ে যাবে O(n)। কারণ তখন তোমাকে লিংকডলিস্ট থেকে উপাদানটি খুঁজতে হবে। লিংকডলিস্ট থেকে কোন উপাদান খুঁজে বের করতে সময় লাগে O(n)।

h3

উপরের ছবি থেকে নিশ্চয় দেখতে পাচ্ছো সমস্যাটি কোথায়? তোমার অ্যারের বাকি স্লটগুলো প্রায় খালি রয়ে গেছে।
তাহলে এখান থেকে দুটি বিষয় জানা গেলো –
১. হ্যাশ ফাংশন অনেক গুরুত্বপুর্ণ। এটি খুব সিম্পল হলে সমস্যা।
২. প্রত্যেকটি স্লটেই যদি অনেক বড় লিংকলিস্ট থাকে, তাহলে কনস্ট্যান্ট টাইম অর্থাৎ O(‌1) সময়ে তুমি উপাদান খুঁজে বের করতে পারছো না।
এখন যদি তুমি একটি ভালো হ্যাশ ফাংশন লিখতে পারো, এবং প্রত্যেক স্লটেই যাতে বিশাল লিংকডলিস্টের চেইন না হয় তা নিশ্চিত করতে পারো তাহলেই O(‌1) সময়ে হ্যাশ টেবিল থেকে ভ্যালু পড়তে পারবে।

এবার Load Factor বলে একটা টার্ম আছে, এটি নিয়ে একটু বলি তোমাদের। একটি হ্যাশটেবিলের লোড ফ্যাক্টর খুব সহজেই বের করা যায়।

Load Factor = Number of items in the hash table / Total slot in the array
তাহলে তোমার অ্যারেতে যদি স্লট হয় 10 এবং উপাদানের সংখ্যা যদি হয় ৭ তাহলে লোড ফ্যাক্টর হবে- 0.7। এটি দিয়ে একটি হ্যাশটেবলি কতগুলো স্লট ফাকা আছে তা বের করা যায়। একটি হ্যাশটেবিলের লোড ফ্যাক্টর যদি 1 হয় তাহলে এর বোঝায়, এর প্রত্যেকটি স্লটে একটি করে উপাদান রয়েছে। লোড ফ্যাক্টর একের অধিক থাকার অর্থ হলো, টেবিলের কোন স্লটে একাধিক উপাদান রয়েছে।

কনস্ট্যান্ট টাইম অর্থাৎ O(1) সময়ে কোন উপাদান খুঁজে পাওয়া নিশ্চিত করতে চাইলে লোড ফ্যাক্টর সবসময় একের নিচে রাখতে হবে। এটি করার জন্যে যখনই লোড ফ্যাক্টর ১ এর বেশি হবে তখনই টেবিলকে রিসাইজ করে আবার প্রত্যেকটি উপাদানের হ্যাশ ক্যালকুলেট করে বিভিন্ন স্লটে বসাতে হবে। এই অপারেশনটি মোটামুটি এক্সপেনসিভ। তবে তুমি কনস্ট্যান্ট টাইম উপাদানগুলো খুঁজে পাচ্ছো টেবিলের সাইজ যতোই হোক না কেনো।

তাহলে উপরের আলোচনা থেকে নিশ্চয় বুঝতে পারছো যে, যদিও কনস্ট্যান্ট টাইমে আমরা উপাদান খুঁজে বের করতে চাচ্ছি, কিন্তু সবসময় তা সম্ভব নয়। তবে best case এটি অবশ্যই O(1) হবে এবং worst case-এ এটি O(n) হতে পারে।

Facebook Comments

হ্যাশ ফাংশন ১

bazlur_pic
লেখকঃ বজলুর রহমান রোকন।

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

খাতাতে যদি নামগুলো বর্ণানুক্রমে রাখা না থাকে, তাহলে তোমার প্রতিবার খুঁজে বের করতে অনেক সময় লাগে। অ্যালগরিমদ ক্লাসে নিশ্চয় শিখেছো যে এক্ষেত্রে খুঁজে বের করার সময় O(n) । তবে নামগুলো যদি বর্ণানুক্রমে রাখা থাকে তাহলে বাইনারি সার্চ ব্যবহার করা যায় আর তখন সময় লাগবে O(log n)। তুমি নিশ্চয় জানো যে O(n) চেয়ে O(log n) কম সময় লাগে।

img1

যদিও O(log n) কম সময় লাগছে, তবুও কিছুটা সময় লাগছে। সবচেয়ে ভাল হতো যদি কোন সময়ই না লাগতো। তুমি সবগুলো পণ্যের নাম এবং দাম মুখস্থ করে ফেলতে পারতে এবং ক্রেতা কোন পণ্যের নাম বলার সঙ্গে সঙ্গেই তুমি দাম বলে দিতে পারতে।

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

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

মনে করো, তোমার ১০ সাইজের একটি অ্যারে রয়েছে। এখন, ধরো, পেঁপের দাম ২০ টাকা। পেঁপে নামটি যদি হ্যাশ ফাংশনে দাও, তাহলে এটি যদি ৪ রিটার্ন করে, তাহলে অ্যারের চতুর্থ নম্বর ইনডেক্সে পেঁপের দামর রেখে দেবে। এভাবে আদার নাম হ্যাশ ফাংশনে দিলে যদি ৩ রিটার্ন করে, তাহলে তাকে তিন নম্বর ইনডেক্সে রেখে দিলে। এভাবে কলা, মরিচ ইত্যাদি রেখে দিলে। এখন যখন তোমার এগুলো দাম জানার দরকার হয়, তাহলে চট করে হ্যাশ ফাংশনে নামটি দিয়ে তার ইনডেক্সটি বের করে নিলে। অ্যারতে ইনডেক্স জানলে ভ্যালু পড়ে আনা খুব সহজ। অ্যারে থেকে ভ্যালু পরে আনার সময় আসলে O(1) ।
img2

img3
হ্যাশ টেবিল

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

উপরের যে উদাহরণটি দিয়েছি তাতে একটি সমস্যা রয়েছে। সেটি নিয়ে পরবর্তীতে আলোচনা করবো। তবে সমস্যাটি তুমি চিন্তা করে যদি খুঁজে বের করতে পারো তাহলে নিচে কমেন্ট করে জানাও।

পরের পর্বঃ হ্যাশ ফাংশন ২।

পাদটিকা: বাইনারি সার্চের টাইম কমপ্লেক্সিটি কিভাবে O(log n) হলো, সেটা না বুঝলে দ্বিমিকের ডিসক্রিট ম্যাথমেটিক্স কোর্সের তৃতীয় ইউনিটের লেকচার দেখে নাও।

Facebook Comments

ফ্লো চার্ট (Flow Chart)

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

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

ফ্লো চার্টের দুইটি প্রকারভেদ আছেঃ

  • ডাটা ফ্লো চার্ট ।
  • প্রসেস ফ্লো চার্ট।

প্রোগ্রামাররা ডাটা ফ্লো চার্ট ব্যবহার করে থাকে। কোন জায়গা থেকে ডাটা আসছে, ডাটা কিভাবে পরিবর্ধন হচ্ছে এবং কোথায় জমা হচ্ছে এসব চিহ্নিত করার জন্য প্রোগ্রামাররা ডাটা ফ্লো চার্ট ব্যবহার করে।

প্রসেস ফ্লো চার্ট কোন প্রসেস বা কাজকে ডকুমেন্ট আকারে দেখানোর জন্য, একটি কাজের কার্যকারিতা বা efficiency বুঝানোর জন্য, কোন প্রশিক্ষণ বা ট্রেনিং এর জন্য ব্যবহার করা হয়।

ফ্লো চার্ট ছোটখাট প্রসেস বা প্রোগ্রামের জন্য ব্যবহার করা হয়ে থাকে। ফ্লো চার্টে সাধারণত দুই ধরণের বাক্স ব্যবহার করা হয়ঃ

  • প্রসেসিং স্টেপঃ এই ধাপকে এ্যাকটিভিটি বা কার্যক্রম ধাপও বলা হয়ে থাকে। একে আয়তাকার বাক্স দ্বারা প্রকাশ করা হয়।
  • ডিসিশন স্টেপ বা সিদ্ধান্ত ধাপঃ এই ধাপকে ডায়মন্ড বা হীরক আকৃতি দ্বারা প্রকাশ করা হয়।

নিচের ছবিতে আমি একটি ফ্লো চার্টের বিভিন্ন আকৃতির পরিচয় দিয়েছিঃ

table

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

sampfc

এই ফ্লো চার্টটিতে প্রথমেই আমরা ফ্লো চার্টের নিয়মানুযায়ী start দিয়ে শুরু করেছি , ওভাল বাক্স দিয়ে সেটিকে চিহ্নিত করেছি। তারপর আমরা ওয়েদার চ্যানেল দেখার কাজটি করেছি। এখানে আমরা প্রসেসিং এর জন্য আয়তাকার চিহ্ন ব্যবহার করেছি, কারণ এখান থেকেই আমরা আমাদের সিদ্ধান্ত বা ডিসিশন নেয়ার ধাপের দিকে যাবো। পরের ধাপে আছে ডিসিশন বা সিদ্ধান্ত ধাপ। সেখানে লেখা আছে “Rain Predicted?”, এখানে লক্ষ্য করে দেখো, ডিসিশন বা সিদ্ধান্ত ধাপে আমাদের অ্যারো বা তীর চিহ্ন আছে দুইটি; যা yes/no দিয়ে চিহ্নিত করা। যদি yes হয় তাহলে আমরা বলছি “Stay Home” এবং সেখান থেকে আরেকটি অ্যারো দিয়ে ফ্লো চার্টটি Stop করে দিচ্ছি। আবার যদি “Rain Predicted”-এ ডিসিশন হয় no, তাহলে আমরা “Play Golf” এর কাজ প্রসেসিং করে Stop ধাপে চলে যাচ্ছি। এখানে মনে রাখার বিষয় যে, ফ্লো চার্চের ডিসিশন সবসময় হয় ডান-বাম অথবা নিচের দিকে যাবে। কখনো উপরের দিকে যাবে না। কারণ, কোন কিছুর Flow সবসময় উপর থেকে নিচের দিকে আসে।

একটি সহজ প্রোগ্রামিং সমস্যার মাধ্যমে আমরা একটি ফ্লো চার্ট তৈরি করার চেষ্টা করি । ধরা যাক, আমরা দুইটি সংখ্যা যোগ করার জন্য একটি প্রোগ্রাম লিখবো। প্রোগ্রামটি হবে এমনঃ

#include<stdio.h>
int main()
{
    int a,b,total;
    scanf("%d %d", &a, &b);
    total = a + b;
    printf("%d\n",total);
    return 0;
}

প্রোগ্রামটির জন্য আমরা যদি ফ্লো চার্ট লিখি তাহলে হবে এমনঃ

enflowchartm_clip_image004

অন্যান্য ফ্লো চার্টের মতই এটা start দিয়ে শুরু হয়েছে। যেহেতু দুইটি নাম্বার ইনপুট নেয়ার দরকার আছে আমাদের, তাই আমরা এখানে Input A, Input B নিয়েছি এবং সেটিকে সামান্তরিক চিহ্নের মাধ্যমে দেখিয়েছি। তবে, আলাদা আলাদা ভাবে এভাবে ইনপুট না নিয়েও পাশাপাশি Input A,B অথবা Read A,B এভাবেও ফ্লো চার্টে ইনপুট নেয়ার কাজটি দেখানো যায়। তারপর আমরা a,b দুইটি যোগ করে একটি Total ভ্যারিয়েবলে রেখেছি এবং এর পরের ধাপে Total প্রিন্ট করেছি। সবশেষে আমরা stop দিয়ে ফ্লো চার্টটি শেষ করেছি।

এবার যদি আমরা লুপ সংক্রান্ত একটি কোডের কথা চিন্তা করি, যেখানে ১ থেকে ১০০ পর্যন্ত বিজোড় সংখ্যা বের করার প্রোগ্রাম লিখতে হবে। প্রোগ্রামটি হবে এমনঃ

#include<stdio.h>
int main()
{
    int i=0;
    while(i<=100)
    {
        if(i%2 != 0)
        {
            printf("%d\n",i);
        }
        i++;
    }
    return 0;
}

এই প্রোগ্রামটিতে আমরা while লুপের সাহায্যে 100 পর্যন্ত লুপটি চালিয়েছি এবং লুপের ভিতরে বিজোড় সংখ্যা বের করার কন্ডিশন দিয়েছি। বিজোড় সংখ্যা বা odd numbers বের করার জন্য if কন্ডিশনটিতে i এর যেসকল মানকে 2 দ্বারা ভাগ করলে ভাগশেষ শূন্য হবে না সেই সংখ্যাগুলোকে আমরা প্রিন্ট করেছি। এই প্রোগ্রামটির ফ্লো চার্টে আমাদের ডিসিশন স্টেপ আসবে দুইটিঃ একটি while এর জন্য এবং একটি if এর জন্য। ফ্লো চার্টটি নিম্নরূপঃ
odd-numsএখানে প্রথমেই আমরা i এর মান 0 এ্যাসাইন করে দিয়েছি, যেহেতু পরবর্তীতে আমরা i এর মান এক করে ইনক্রিমেন্ট করবো। তারপর আমরা while (i<=100) reached ডিসিশন ধাপে গিয়েছি। খেয়াল করে দেখো, এই ডিসিশন থেকে yes/no দিয়ে দুইটি তীর চিহ্ন বের হয়েছে। আমাদের প্রোগ্রামের লজিক আমাদের বলছে যতক্ষণ না i এর মান ১০০ এর সমান বা এর থেকে ছোট থাকছে , ততক্ষণ আমাদের if(i%2 !=0) কন্ডিশন তার কাজ করে যাচ্ছে এবং odd নাম্বার বা বিজোড় সংখ্যাগুলো প্রিন্ট করে যাচ্ছে। একই সাথে লুপটি সামনে এগিয়ে যাচ্ছে, i এর মান compute i= i+1 এ যেয়ে এক এক করে বৃদ্ধি পাচ্ছে। যখন i এর মান 100 এর বড় হয়ে যাবে, তখন ফ্লো চার্ট stop হয়ে যাবে।

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

লেখকঃ তামান্না নিশাত রিনি।

Facebook Comments

ভার্টিক্যাল ও হরাইজনটাল স্কেলিং

একটি ওয়েব অ্যাপ্লিকেশন যখন কোনো সার্ভারে রান করে, তখন সেটি মূলতঃ চারটি জিনিসের ওপর নির্ভর করে :

  1. সিপিইউ (CPU) বা প্রসেসিং পাওয়ার
  2. মেমোরি
  3. হার্ড ডিস্ক
  4. নেটওয়ার্ক

screen-shot-2016-11-04-at-12-22-51-pm

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

  1. ভার্টিক্যাল স্কেলিং (Vertical Scaling)
  2. হরাইজনটাল স্কেলিং (Horizontal Scaling)

ভার্টিক্যাল শব্দের বাংলা অর্থ উল্লম্ব বা খাড়া। এখন আমরা একটি বিল্ডিংয়ের কথা চিন্তা করতে পারি। আমরা ১০০ তলা ফাউন্ডেশন দিয়ে একটি বিল্ডিং তৈরি করলাম, কিন্তু শুরুতে মাত্র দশ তলা তৈরি করা হলো। তারপরে আস্তে আস্তে যখন চাহিদা বাড়তে লাগল, তখন সেই বিল্ডিংকে আমরা আরো ওপরের দিকে বাড়াতে পারবো। এটিই হচ্ছে ভার্টিক্যাল স্কেলিং। সার্ভারে ভার্টিক্যাল স্কেলিংয়ের ক্ষেত্রে আমরা আরো উন্নত কনফিগারেশনের সার্ভার ব্যবহার করবো। আমরা যদি অ্যামাজন ওয়েব সার্ভিসের ইসি২ (ec2) ইনস্ট্যান্স টাইপের কথা বিবেচনা করি, সেখানে সর্বনিম্ন কনফিগারেশনের সার্ভার হচ্ছে টি২ ন্যানো (T2 nano) যেখানে মাত্র একটি ভার্চুয়াল সিপিইউ ও মাত্র ৫১২ মেগাবাইট মেমোরি রয়েছে। আবার x1.32xlarge টাইপের সার্ভারে ১২৮টি ভার্চুয়াল সিপিইউ, ১৯৫২ গিগাবাইট মেমোরি রয়েছে। https://aws.amazon.com/ec2/instance-types/ লিঙ্কে গেলে বিস্তারিত জানা যাবে এবং আমরা আমাদের প্রয়োজনমতো কনফিগারেশনের সার্ভার ব্যবহার করতে পারবো, যখন খুশি তখন! তো এই ধরনের স্কেলিংয়ের সুবিধা হচ্ছে, স্কেলিং করা খুব সহজ, অতিরিক্ত কোনো ডিজাইন বা কাজের তেমন প্রয়োজন পড়ে না। আর সীমাবদ্ধতা হচ্ছে সেই ১০০ তালা বিল্ডিংয়ের মতো। যেখানে আমরা স্কেল করতে পারবো ১০০ তলা পর্যন্ত।

আর হরাইজনটাল মানে আনুভূমিক (সহজ বাংলায় বললে সরলরৈখিক বা বরাবর)। ধরা যাক, আমার বিশাল জায়গা রয়েছে। সেখানে একটি দশ তলা বিল্ডিং তৈরি করলাম। এখন আমাকে আরো মানুষের জায়গা দিতে হবে। আমি তখন আরেকটি দশ তলা বিল্ডিং তৈরি করলাম। এভাবে চাহিদা যত বাড়তে থাকবে, আমি ততগুলো বিল্ডিং তৈরি করতে পারবো। অ্যামাজনের ওয়েব সার্ভিস (AWS) ব্যবহার করে এই কাজটি করা যায়। সেখানে আমি লোড ব্যালেন্সার (ELB -> Elastic Load Balancer) ব্যবহার করে বলে দিতে পারি যে সর্বনিম্ন কয়টি ও সর্বোচ্চ কয়টি ইনস্ট্যান্স (সার্ভার) চলবে, এবং তারপরে কিছু নিয়মকানুন বলে দিতে হবে। নিয়মকানুনগুলো এরকম হতে পারে যে, সিপিইউ লোড ৭০% এর চেয়ে বেশি হলে আরো একটি ইনস্ট্যান্স চালু হবে। কিংবা মেমোরি ৮০% এর চেয়ে বেশি হলে আরো একটি ইনস্ট্যান্স চালু হবে। একে বলে স্কেল আপ (scale up)। আবার সিপিইউ লোড ৪০% এর চেয়ে কম হলে এবং মেমোরির ব্যবহার ৫০% এর চেয়ে কম হলে একটি ইনস্ট্যান্স বা সার্ভার বন্ধ করে দেওয়া হবে। একে বলে স্কেল ডাউন (scale down)। এই রুলসগুলো সেট করে দিলে কাজগুলো স্বয়ংক্রিয়ভাবেই হবে। হরাইজনটাল স্কেলিংয়ের সুবিধা হচ্ছে এক্ষেত্রে অনেক বেশি লোড সামাল দেওয়া যায়, এবং যেহেতু স্কেল আপ ও ডাউনের সুবিধা আছে, তাই যখন লোড বেশি তখন বেশি ইনস্ট্যান্স ব্যবহৃত হবে, লোড কম থাকলে কম সংখ্যক ইনস্ট্যান্স ব্যবহৃত হবে। তাই খরচও কম পড়বে অনেক। আর অসুবিধা হচ্ছে এখানে কিছু কনফিগারেশনের ব্যাপার আছে আর আর্কিটেকচারও অন্যভাবে ডিজাইন করতে হবে। অর্থাৎ এক্ষেত্রে একটু লেখাপড়া, জ্ঞানার্জন ও অভিজ্ঞতার প্রয়োজন।

পাদটীকা :

  • ক্লাউডভিত্তিক ওয়েব আর্কিটেকচার সম্পর্কে আরো জানতে হলে গুগলে সার্চ করে বিভিন্ন ব্লগ ও আর্টিকেল পড়তে হবে, ভিডিও দেখতে হবে।
  • অ্যামাজন ছাড়া গুগল, আলিবাবা ও মাইক্রোসফটেরও ক্লাউড সার্ভিস রয়েছে।
  • ওয়েব সম্পর্কে বেসিক ধারণা পাকাপোক্ত করার জন্য রয়েছে দ্বিমিক কম্পিউটিংয়ের ফ্রি অনলাইন কোর্স – ওয়েব কনসেপ্টস্
Facebook Comments