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

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

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

প্রোগ্রামিং

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

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

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

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

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