কম্পিউটার বিজ্ঞানের পড়ালেখা

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

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

প্রোগ্রামিং

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

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

নন-মেজর সাবজেক্ট

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

কম্পিটিটিভ প্রোগ্রামিং

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

হ্যাকাথন, কোডস্প্রিন্ট, প্রজেক্ট

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

আগামী দিনের প্রযুক্তি

Change is the only constant in life – দার্শনিকদের এই কথাটি প্রযুক্তি বিশ্বের বেলাতে আরো বেশি সত্য। প্রতি পাঁচ বছরেই যেন বিশাল পরিবর্তন ঘটে যাচ্ছে, নতুন প্রোগ্রামিং ভাষা, নতুন ফ্রেমওয়ার্ক, নতুন ডেটাবেজ, ক্লাউড কম্পিউটিং, মেশিন লার্নিংয়ের নতুন নতুন প্রয়োগ, মোবাইল কম্পিউটিং, আইওটি—লিখে শেষ করা যাবে না। এ জন্য দেশের সফটওয়্যার ইন্ডাস্ট্রির হর্তাকর্তারা প্রায়ই বলেন, আমাদের ভার্সিটিগুলোর সিলেবাস আধুনিক করতে হবে, নতুন নতুন জিনিস শেখাতে হবে ইত্যাদি। কিন্তু তারা আসলে ভুল বলেন। আগামী দিনের প্রযুক্তি নিয়ে কাজ করার জন্য তৈরি হতে হলে, বিশ্ববিদ্যালয়ের কম্পিউটার বিজ্ঞানের শিক্ষার্থীদের জন্য নতুন প্রযুক্তির পেছনে দৌড়ানোটা বোকামি হবে। বরং নিজের ভিত্তিটা অনেক বেশি মজবুত করার পেছনেই জোর দেওয়া উচিত। পাইথন লাইব্রেরি ব্যবহার করে মেশিন লার্নিং করার চেয়ে শিক্ষার্থীদের ডেটা স্ট্রাকচার ও অ্যালগরিদমের ওপর দখল থাকটা বেশি জরুরি। প্রবলেম সলভিং স্কিল থাকাটাও অনেক জরুরি। তবে প্রবলেম সলভিং স্কিল মানে এই নয় যে যেসব প্রবলেম আগে সলভ করা হয়েছে সেগুলো আবার সলভ করতে পারা, বরং নতুন প্রবলেম সলভ করা বা নতুন সমস্যা নিয়ে চিন্তা করার দক্ষতা। সমস্যার সমাধান করতে করতেই এই দক্ষতা তৈরি হবে এবং ভার্সিটির সময়টুকুই এই দক্ষতা তৈরির শ্রেষ্ঠ সময়। তেমনি লেটেস্ট ডেটাবেজ শেখার চেয়ে রিলেশনাল ডেটাবেজের মৌলিক ধারণা আয়ত্বে আনা বেশি জরুরি, নতুন ফ্রেমওয়ার্ক শেখার চেয়ে অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং শেখাটা বেশি জরুরি। মোটকথা হচ্ছে, নতুন টেকনোলজির পেছনে না দৌড়ে, কম্পিউটার সায়েন্সের মৌলিক বিষয়গুলোর ওপর জ্ঞান ও দক্ষতা তৈরি করা অনেক বেশি গুরুত্বপূর্ণ। কম্পিউটার সায়েন্সের মূল বিষয়গুলো যাদের কাছে পরিষ্কার থাকবে, তাদের পক্ষে যেকোনো সময় নতুন টেকনোলজি আয়ত্বে আনতে বেগ পেতে হবে না। মনে রাখতে হবে, ভার্সিটি থেকে পাশ করার পরে ক্যারিয়ার কিন্তু ৩০ থেকে ৪০ বছরের। প্রযুক্তি নিয়ে এই দীর্ঘ ক্যারিয়ারের জন্য একটি শক্ত ভিত্তির ওপর নিজেকে দাঁড় করানোটাই সবচেয়ে গুরুত্বপূর্ণ।

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

লিনাক্স কেন ব্যবহার করব?

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

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

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

Tux, the Linux mascot.
টাক্স, লিনাক্সের মাসকট

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

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

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

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

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

লিনাক্সের অন্যতম বড় শক্তি হচ্ছে এর কমান্ডলাইন। এটা এর অন্যতম শক্তি হলেও, বেশিরভাগ মানুষ শুরুতে লিনাক্সকে ভয় পায় একমাত্র এই কমান্ডলাইনের কারণেই। তবে এখন দিন পাল্টেছে। একজন ব্যবহারকারী মাসের পর মাস কমান্ডলাইনে না গিয়ে শুধু গ্রাফিক্যাল ইউজার ইন্টারফেস দিয়েই তার সব কাজ চালিয়ে নিতে পারে। আগে লিনাক্স না ব্যবহার করার আরেকটি অজুহাত ছিল—লিনাক্সে প্রয়োজনীয় কাজের সফটওয়্যার পাওয়া যায় না। এখন এই অজুহাত মোটেই গ্রহণযোগ্য নয়। লিনাক্সে এখন ছবি সম্পাদনা থেকে শুরু করে সুপারহিট কমার্শিয়াল অ্যানিমেশন মুভি পর্যন্ত বানানো যায়। উদাহরণস্বরূপ, পিক্সার (Pixar Animation Studio) লিনাক্স ব্যবহার করে। ওপেনসোর্স অ্যানিমেশন তৈরির সফটওয়্যার ‘ব্লেন্ডার’ দিয়ে তারা চমৎকার সব অ্যানিমেশন মুভি উপহার দিচ্ছে। তবে কমান্ডলাইন যে কী জিনিস তা প্রত্যেক অভিজ্ঞ লিনাক্স ব্যবহারকারীই জানে। কমান্ডলাইনে এমন সব কাজ কয়েক সেকেন্ডে করে ফেলা যায় যেগুলো সাধারণভাবে করতে ঘণ্টার পর ঘণ্টা সময় লাগতে পারে। লিনাক্স শেল ও শেল স্ক্রিপ্টের সঙ্গে পরিচিত হয়ে গেলে যেকোনো কাজ অটোমেটিক করে ফেলা সম্ভব—যেগুলো নিজে নিজে করা যায়।

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

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

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

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

সিঙ্গাপুরে ক্যারিয়ার – ১ম পর্ব

বাংলাদেশ থেকে সবচেয়ে নিকটবর্তী First World Country হচ্ছে সিঙ্গাপুর। বেশিরভাগ মানুষই সিঙ্গাপুরের নাম জানে একারণে যে মন্ত্রী পর্যায়ের কেউ কিংবা বিখ্যাত কেউ অসুস্থ হয়ে গেলে সিঙ্গাপুরে চিকিৎসা নিতে যান। আবার গ্রামবাংলার মানুষও এই দেশটির নাম জানে, কারণ এখানে প্রায় পঞ্চাশ হাজার বাংলাদেশি নির্মাণ শ্রমিক কাজ করেন। এছাড়া তাদের বিখ্যাত দুটি বিশ্ববিদ্যালয়ের কারণেও কিছু শিক্ষার্থী তাদের নাম জানে।

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

এখন আসা যাক, সিঙ্গাপুরে কী কী বড় কোম্পানী আছে, যেখানে সফটওয়্যার প্রকৌশলীরা কাজ করতে পারে? প্রথমত, গুগল (Google), ফেসবুক (Facebook), টুইটার (Twitter) ও পেপালের (Paypal) ডেভেলাপমেন্ট সেন্টার। তারপরে আছে স্ট্রাইপ (Stripe), ইনডিড (Indeed.com), জেনডেস্ক (ZenDesk) ও অটোডেস্কের (AutoDesk) মতো প্রতিষ্ঠান। প্রতিষ্ঠিত স্টার্টআপগুলোর মধ্যে আছে গ্র্যাব (Grab), শপি (Shopee), গো-জ্যাক (GoJek), ট্রাভেলোকা (Traveloka) ইত্যাদি। এছাড়াও আরো অনেক ছোট-বড় কোম্পানী সেখানে রয়েছে, যারা হন্যে হয়ে প্রোগ্রামার খুঁজছে (মানে খুব ভালো মানের প্রোগ্রামার আর কী)।

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

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

পরবর্ত পর্বে আলোচনা করব, কেউ যদি চাকরি পেয়ে যায়, তখন তার সিঙ্গাপুরে আসার আগে কী কী কাজ করতে হবে।

প্যালিনড্রোম

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

source – https://www.deviantart.com/rose-xx-15412/art/Palindrome-Cow-364640478

একটি স্ট্রিং প্যালিন্ড্রোম কী না, সেটি পরীক্ষা করার উপায় কী? একটি উপায় হচ্ছে, স্ট্রিংটি উলটে দিয়ে আরেকটি স্ট্রিং তৈরি করা। তারপর তাদের মধ্যে তুলনা করে দেখা।

কাজটি আমরা পাইথন ব্যবহার করে খুব সহজেই করে ফেলতে পারি।

def is_palindrome(s):
    return s == s[::-1]

আবার আমরা স্ট্রিংয়ের মাঝামাঝি থেকে শুরু করে একটি একটি করে অক্ষর তুলনা করেও প্যালিনড্রেম পরীক্ষা করতে পারি।

def is_palindrome(s):
    l = len(s)
    indx1 = l // 2 - 1
    indx2 = (l + 1) // 2
    while indx1 >= 0 and indx2 < l:
        if s[indx1] != s[indx2]:
            return False
        indx1, indx2 = indx1 - 1, indx2 + 1

    return True

দুটি ফাংশনই একই উদ্দেশ্য সাধন করবে, কিন্তু একটু আলাদভাবে। এখন পাঠকদের কাছে প্রশ্ন – প্রথম ও দ্বিতীয় ফাংশনের টাইম ও স্পেস কমপ্লেক্সিটি কত?

পাইথন – ইতিহাস, বর্তমান ও ভবিষ্যৎ

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

গিডো ফন রোসাম (Guido van Rossum) একটি ডিস্ট্রিবিউটেড সিস্টেম নিয়ে কাজ করতেন সিডাব্লিউআই-তে (Centrum Wiskunde & Informatica – CWI)। সেখানে তিনি সি ও ইউনিক্স শেল ব্যবহার করতেন। এগুলোর বিভিন্ন সীমাবদ্ধতা নিয়ে হতাশ ছিলেন তিনি। সি ভাষায় মেমোরি ব্যবস্থাপনার বিশাল ঝামেলা, প্রতি নতুন প্রজেক্টে কিছু নির্দিষ্ট কাজ বারবার করতে হতো, প্রয়োজনীয় লাইব্রেরির অভাবসহ নানা সীমাবদ্ধতা ছিল। ইউনিক্স শেল সাধারণ কাজ-কর্মের জন্য চমৎকার হলেও জটিল লজিক্যাল সমস্যা নিয়ে কাজ করার উপযুক্ত ছিল না।

তাই তিনি সিদ্ধান্ত নিলেন যে নিজেই একটি প্রোগ্রামিং ভাষা তৈরি করবেন, যা হবে সহজে ব্যবহারযোগ্য, পাঠযোগ্য ও শক্তিশালী। সিডাব্লিউআই-তে তিনি তিন বছর একটি দলের সঙ্গে কাজ করেছিলেন যারা এবিসি (ABC) নামের একটি ইন্টারপ্রেটেড ভাষা তৈরি করেছে। সেই সুবাদে তিনি ইন্টারপ্রেটার তৈরির মৌলিক বিষয়াদি শিখেছিলেন। মৌলিক বিষয়াদি জানা থাকায় তিনি সরাসরি ভাষা তৈরি করা শুরু করে দেন। এবিসি তৈরি হতে মোটামুটি তিন বছর সময় লাগলেও রোসাম মাত্র তিন মাসে পাইথনের একটা কাঠামো দাঁড় করিয়ে ফেলেন। এই তিন মাস তিনি পাইথনের পেছনে পূর্ণ সময় দিতে পারেননি। সিডাব্লিউআই-তে কাজের পাশাপাশি তিনি পাইথন প্রজেক্টে কাজ করেছেন। alt.sources নামের একটি নিউজগ্রুপে ১৯৯১ সালে তিনি প্রথম পাইথন উন্মুক্ত করেন।

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

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

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

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

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

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

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

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

বাংলা ভাষায় পাইথন শেখার জন্য ইন্টারনেটে বেশ কিছু রিসোর্স রয়েছে – 

লেখক – মোশারফ হোসেন।

ক্লাউড কম্পিউটিং

এই লেখায় ক্লাউড কম্পিউটিং নিয়ে প্রাথমিক আলোচনা করা হয়েছে।

সফটওয়্যারের জগতে ক্লাউড কম্পিউটিং (Cloud Computing) একটি পরিচিত নাম। তবে প্রথমেই জানিয়ে রাখি যে, এর সঙ্গে ক্লাউড বা মেঘের কোনো সম্পর্ক নেই।

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

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

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

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

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

ক্লাউড সেবাদাতা প্রতিষ্ঠানগুলো বর্তমানে বিভিন্ন রকম সেবা প্রদান করতে পারে –

  • Infrastructure as a Service
  • Platform as a Service
  • Software as a Service

Infrastructure as a Service – এক্ষেত্রে মূলত বিভিন্ন হার্ডওয়্যারভিত্তিক সেবা প্রদান করা হয়। যেমন, প্রসেসিং ক্ষমতা, মেমোরি, হার্ড ডিস্ক, নেটওয়ার্ক – এসবের ওপর ভিত্তি করে প্রয়োজনমত কনফিগারেশনের এক বা একাধিক কম্পিউটার ভাড়া নেওয়া যায়।

Platform as a Service – এখানে হার্ডওয়্যারের পাশাপাশি কম্পিউটিং প্ল্যাটফর্ম, যেমন নির্দিষ্ট অপারেটিং সিস্টেম ও অন্যান্য সফটওয়্যার ইনস্টল করে দেওয়া হয়। ব্যবহারকারীকে নিজে থেকে সেসব সফটওয়্যার ইনস্টল ও কনফিগারেশনের ঝামেলায় যেতে হয় না।

Software as a Service – এখানে বিভিন্ন সফটওয়্যার ক্লাউডে ইনস্টল করে দেওয়া থাকে। ব্যবহারকারী ইন্টারনেট ব্রাউজারের মাধ্যমে সেসব সফটওয়্যার ব্যবহার করেন এবং এজন্য নিয়মিত একটি ফি প্রদান করেন। যেমন মাইক্রোসফটের অফিস ৩৬৫। আবার গুগলের বিভিন্ন সেবা, যেমন সার্চ ইঞ্জিন, জিমেইল, গুগল ড্রাইভ ইত্যাদিও সফটওয়্যার এজ আ সার্ভিস বা সংক্ষেপে স্যাস (SaaS)-এর উদাহরণ। আবার বিভিন্ন ডেটাবেজ নির্মাতা প্রতিষ্ঠানও এই মডেলে তাদের ডেটাবেজ ব্যবহারের সুবিধা দিয়ে থাকে।

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

আশা করি, ক্লাউড কম্পিউটিং কী জিনিস, সেটির প্রাথমিক ধারণা পাঠকরা এই লেখা থেকেই পেয়ে যাব। নিচের ভিডিওতে এডব্লিউএস নিয়ে বিস্তারিত আলোচনা আছে –

সিজার সাইফার

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

ওপরের চিত্রে আমরা দেখতে পাচ্ছি, মূল টেক্সট (Plaintext)-কে এনক্রিপ্ট করলে তাকে বলে সাইফারটেক্সট (Ciphertext). আর সাইফারটেক্সট ডিক্রিপ্ট করলে আমরা আবার মূল টেক্সট অর্থাৎ প্লেইনটেক্সট পাই।

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

সিজার সাইফার পদ্ধতিতে একটি টেক্সটের সঙ্গে একটি সংখ্যা দেওয়া হয়, যাকে কি (key) বলা হয়। কি-এর মান যত, টেক্সটের অক্ষরগুলো তত ঘর পরের অক্ষর দিয়ে বদলে দেওয়া হয়। যেমন, কি-এর মান যদি 2 হয়, তখন abc-কে লেখা হবে cde (a-এর জায়গায় c, b-এর জায়গায় d, c-এর জায়গায় e)। এই কি এর মান কেবল প্রেরক ও প্রাপক জানে, যার ফলে অন্য কেউ এই টেক্সটের মর্মোদ্ধার করতে পারে না। যদিও বর্তমান প্রেক্ষিতে এটি অত্যন্ত দুর্বল একটি অ্যালগরিদম, কিন্তু ঐতিহাসিক প্রেক্ষাপট বিবেচনা করলে এটি অত্যন্ত গুরুত্বপূর্ণ এবং কম্পিউটার বিজ্ঞানের শিক্ষার্থীদের জন্য এটি অবশ্যপাঠ্য।

ধরা যাক, প্লেইনটেক্সট হচ্ছে Kill the King. আর কি হচ্ছে 1. তাহলে প্রতিটি অক্ষর ইংরেজি বর্ণমালায় তার পরবর্তী অক্ষর দিয়ে বদলে দেওয়া হবে। তখন সাইফারটেক্সট হবে Ljmm uif Ljoh. আবার কেউ যদি জানে যে কি-এর মান হচ্ছে 1, তখন সে সহজেই সাইফারটেক্সট থেকে প্লেইনটেক্সট বের করে ফেলতে পারবে।

এখন কেউ যদি এতদূর পড়ার পরে নিজেই একটি প্রোগ্রাম লিখে কাজটি করতে চায়, তার জন্য দ্বিমিক অনলাইন জাজে দুটি সমস্যা আছে –

সমস্যাগুলো সি, সিপ্লাস প্লাস, জাভা কিংবা পাইথন ব্যবহার করে সমাধান করা যাবে।

আপনার সন্তানকে কীভাবে গণিতে দক্ষ করে গড়ে তুলবেন

গণিতের দক্ষতা নিঃসন্দেহে ভালো, তবে গণিতের দক্ষতা ও সমস্যা সমাধানের দক্ষতার মধ্যে বিস্তর ফারাক রয়েছে।

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

গণিতের দক্ষতা ও সমস্যা সমাধানের দক্ষতার মধ্যে পার্থক্য কী?

আমি যদি বাংলাদেশে প্রাথমিক বিদ্যালয়ের একটি শিশুকে জিজ্ঞাসা করি, ৩৬৫-কে ৭ দিয়ে ভাগ করলে কত হবে, শিশুটি সঙ্গে সঙ্গে আমাকে ভাগফল ও ভাগশেষ বলে দিতে পারে। কিন্তু যদি জিজ্ঞাসা করি যে, এক বছরে কয়টি সপ্তাহ আছে, তখন সে প্রশ্ন বুঝতে পারে না। যদিও সে জানে যে ৩৬৫ দিনে এক বছর এবং সাত দিনে এক সপ্তাহ হয়।

প্রথম প্রশ্নটির উত্তর দিতে গণিতের দক্ষতা লাগে। দ্বিতীয়টির ক্ষেত্রে লাগে সমস্যা সমাধানের দ্ক্ষতা। এটি একটি সাধারণ উদাহরণ, আশা করি এ থেকে গণিতের দক্ষতা ও সমস্যা সমাধানের দক্ষতার পার্থক্য পরিষ্কার হয়ে গেছে।

আমাদের কোনটায় জোর দেওয়া উচিত—গণিত নাকি সমস্যা সমাধানের দক্ষতায়?

এর উত্তর হচ্ছে ‘দুটোই’। গণিত হচ্ছে সমস্যা সমাধানের একটি টুল (tool) বা যন্ত্র। আপনি যখন আপনার সন্তানকে স্কুলে যোগ, বিয়োগ, গুণ ও ভাগ শেখান, সেই সময় তাকে সমস্যা সমাধানের সঙ্গেও পরিচয় করিয়ে দিন।

শিশুকে কীভাবে সমস্যা সমাধানের সঙ্গে পরিচয় করিয়ে দেওয়া যায়?

সমস্যা সমাধানের সঙ্গে পরিচয় করানোর জন্য খুব কৌশলী হওয়ার প্রয়োজন নেই, একটু মনযোগই যথেষ্ট। এক্ষেত্রে অনেকেই জানতে চাইবেন এর জন্য বাচ্চাকে কোন কোন বই পড়ানো যায়।

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

দৈনন্দিন কার্যক্রমের মাধ্যমে সমস্যা সমাধান শেখানোর উদাহরণ

আমি এখানে কিছু উদাহরণ দিলাম।

  • একটি কলার দাম ৪ টাকা ও একটি পেয়ারার দাম ৫ টাকা হলে ঝুড়ির কলা ও পেয়ারার দাম কত? [ঝুড়িতে সত্যি সত্যি ২টি কলা ও ৪টি পেয়ারা রেখে আপনার বাচ্চাকে প্রশ্নটি করতে পারেন। অবস্থাভেদে প্রশ্নটি পরিবর্তন করে নিন।]
  • বাচ্চার পছন্দের প্রাণিদের নিয়ে প্রশ্ন তৈরি করুন। ধরা যাক, আমার বাচ্চা হাতি পছন্দ করে। আমি তাকে জিজ্ঞাসা করতে পারি যে, রাঙামাটির বনে ৫০ সদস্যের একটি হাতির দল বসবাস করতো। সেখান থেকে অর্ধেক হাতি বান্দরবান চলে গেল। খাগড়াছড়ি থেকে ১০টি হাতি রাঙামাটি গেল। রাঙামাটিতে এখন কয়টি হাতি আছে?
  • খাদ্যের ক্যালরি গণনা করতে দেওয়া একটি ভালো সমস্যা হতে পারে। এটি গাণিতিক সমস্যা সমাধানকে স্বাস্থ্যকর জীবনযাপনের সাথে যুক্ত করবে। যেমন: একবাটি ভাতে কতটুকু ক্যালরি রয়েছে, এ রকম সামান্য একটু গবেষণা বাচ্চার জন্য অনেক আনন্দদায়ক হতে পারে। বাচ্চাকে জিজ্ঞাসা করতে পারেন যে সে আজ কতটুকু ক্যালরি গ্রহণ করেছে।

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

সমস্যা সমাধান ও বিশ্লেষণী ক্ষমতা

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

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

প্রাথমিক গণিত-সংশ্লিষ্ট সমস্যা সমাধানের ধাপ

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

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

শিশুদের গণিত শেখানোর সময় সবচেয়ে বড় যে ভুলটি আমরা করি

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

শিশুর ভেতরে সমস্যা সমাধানের দক্ষতা তৈরির জন্য কিছু টিপস

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

—ড. শাহরিয়ার হোসেন

মূল লেখা – https://computing4all.com/education/the-biggest-mistake-while-teaching-kids-math/, অনুবাদ করেছেন মোশারফ হোসেন।

এসকিউলাইট – সহজ ডেটাবেজ

সহজ ডেটাবেজ এসকিউলাইট!

এসকিউলাইট (SQLite) হচ্ছে একটি রিলেশনাল ডেটাবেজ। সেই সঙ্গে এটি ফ্রি ও ওপেন সোর্স। ২০০০ সালে ডক্টর রিচার্ড হিপ এটি তৈরি করেন। এসকিউলাইট তৈরিতে সি প্রোগ্রামিং ভাষা ব্যবহার করা হয়েছে।

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

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

এসকিউলাইটের সবচেয়ে বড় সুবিধা হচ্ছে এটির ব্যবহার বেশ সহজ-সরল আর ইনস্টল করাও খুব সহজ। এটি ক্লায়েন্ট-সার্ভার আর্কিটেকচারে তৈরি করা হয় নি, তাই সফটওয়্যারের সঙ্গে এটি দিয়ে দেওয়া যায় সহজেই।

এসকিউলাইটে রিলেশনাল ডেটাবেজের প্রায় সকল বৈশিষ্ট্যই রয়েছে এবং এসকিউএল (Structured Query Language)-এর অধিকাংশ জিনিসই এখানে ব্যবহার করা হয়েছে। তাই এটি ব্যবহার করার পর কেউ যদি অন্য ডেটাবেজের ব্যবহার শিখতে চায়, তখন তার বিপদে পড়তে হবে না।

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

এসকিউলাইট ব্যবহার করতে হলে যে টার্মিনালে (কমান্ড লাইনে) ব্যবহার করতে হবে, এমন কোনো কথা নেই। অনেক ডেস্কটপ অ্যাপ্লিকেশন দিয়ে এটি ব্যবহার করা যায় (যেমন – https://sqlitebrowser.org/)।

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

গো (Go) প্রোগ্রামিং ভাষা

গো (বা গোল্যাঙ্গ) হচ্ছে গুগলের তৈরি একটি প্রোগ্রামিং ভাষা।

গো হচ্ছে গুগলের তৈরি একটি ওপেনসোর্স প্রোগ্রামিং ভাষা। গো (Go) নামটি বেশ কমন হওয়ায় একে গোল্যাঙ্গ (Golang)ও বলা হয়। ২০০৯ সালের নভেম্বর মাসে গো প্রথম রিলিজ করা হয়।

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

গো কেন জনপ্রিয় হয়ে উঠছে?

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

গো কেন শিখব?

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

গো কিভাবে শিখব?

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

প্রথমেই গো ট্যুরের ওয়েবসাইটে গিয়ে ট্যুর শেষ করে ফেলতে হবে। এটি শুরু করার জন্য চমৎকার।

তারপরে বই পড়তে চাইলে Go Programming Language বইটি পড়া যেতে পারে। বইটে বেশ ভালো এবং আমার মতে পড়া উচিত।

এখন, কেউ যদি অনলাইন কোর্স করতে স্বাচ্ছন্দবোধ করে, তাহলে কোর্সেরাতে গো-এর তিনটি কোর্স আছে, সেগুলো করে ফেলতে হবে। এই কোর্সগুলো আমি করেছি, ভালোই লেগেছে।

এরপর Go by Example ওয়েবসাইটে গিয়ে প্রতিটি উদাহরণ পড়ে বুঝতে হবে এবং সঙ্গে সঙ্গে কোড করতে হবে। দেখে কোড করলেও সমস্যা নেই, চর্চাটা তো হবে।

এরপর Effective Go পড়তে হবে। এটি পড়ার সময় ঘুম আসে, তাও পড়তে হবে। এটি ঠিকঠাক পড়ার পরে গো-তে কাজ শুরু করে দেওয়া যাবে।

কারো কারো মনে হতে পারে, একটা সহজ-সরল প্রোগ্রামিং ভাষা শেখার জন্য এত কষ্ট করব? আসলে একটু কষ্ট করে ভালোভাবে শিখে নিলে কাজের মান অনেক ভালো হবে, আর সেটা খুব গুরুত্বপূর্ণ। তাই ভালোভাবে শেখাই ভালো।