সকল লেখার তালিকা

দশটি কোডিং ইন্টারভিউ সমস্যা

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

  1. pow(a, n) – একটি ফাংশন তৈরি করতে হবে, যেখানে দুটি ইন্টিজার (a, n) ইনপুট দেওয়া থাকলে ফাংশনটি a^n রিটার্ন করবে। ফাংশনটির রানটাইম হতে হবে O(log n)।
  2. BST – একটি ফাংশন তৈরি করতে হবে, যেখানে একটি বাইনারি ট্রি ইনপুট দেওয়া হলে সেটি বাইনারি সার্চ ট্রি (BST) কী না, তা বের করতে হবে।
  3. Stack and Queue –  স্ট্যাক (Stack) ব্যবহার করে কিউ (Queue) তৈরি করতে হবে, অর্থাৎ কিউ এর এনকিউ (enqueue) ও ডিকিউ (dequeue) ফাংশন তৈরি করতে হবে।
  4. Triangle – একটি ইন্টিজার অ্যারে দেওয়া আছে, যার সবগুলো সংখ্যাই ধনাত্মক। ওই অ্যারে থেকে তিনটি করে উপাদান নিয়ে মোট কয়টি ত্রিভুজ বানানো যায়, সেটি গণনা করতে হবে।
  5. Difference – একটি ইন্টিজার অ্যারে দেওয়া আছে যার উপাদানগুলো ছোট থেকে বড় ক্রমে সাজানো। এখন একটি অঋণাত্মক সংখ্যা দেওয়া হলে, বলতে হবে যে, অ্যারের যেকোনো দুটি পৃথক সংখ্যার অন্তরফল ওই সংখ্যাটির সমান কী না। 
  6. 3 Sum – একটি পূর্ণসংখ্যার অ্যারেতে তিনটি করে সংখ্যা নিলে কতগুলো পৃথক ত্রয়ী পাওয়া যায়, যাদের যোগফল শূন্য (0) হবে?
  7. Substring – দুটি স্ট্রিং দেওয়া আছে – A ও s. একটি ফাংশন লিখতে হবে, যার কাজ হচ্ছে, s যদি A-এর সাবস্ট্রিং হয়, তাহলে A-এর যেই ইনডেক্স থেকে s শুরু হয়েছে, সেই ইনডেক্স রিটার্ন করতে হবে।
  8. Bit difference – একটা অ্যারেতে কতগুলো অঋণাত্মক সংখ্যা আছে। ওই সংখ্যাগুলোর মাঝে যতগুলো জোড়া (pair) আছে, তাদের মধ্যে বিটের পার্থক্যের যোগফল বের করতে হবে।
  9. Running Median – একটি অ্যারেতে বা লিস্টে শুরুতে কোনো সংখ্যা নেই। অ্যারেতে ক্রমান্বয়ে n সংখ্যক সংখ্যা যুক্ত হবে, আর প্রতিটি সংখ্যা যুক্ত হওয়ার পরে ওই অ্যারের বর্তমান সংখ্যাগুলোর মিডিয়ান বের করতে হবে।
  10. Linked List – লিঙ্কড লিস্টের শুরুর নোড (হেড নোড) দেওয়া থাকবে, আর একটা সংখ্যা দেওয়া থাকবে, ওই সংখ্যার মান যত, লিঙ্কড লিস্টের শেষ থেকে ততঘর বা ততটি নোড আগে এসে যেই নোড পাওয়া যায়, তার মান রিটার্ন করতে হবে।

এরকম 71টি প্রোগ্রামিং সমস্যা ও তাদের সমাধান নিয়ে আলোচনা করা হয়েছে “কোডিং ইন্টারভিউ – প্রস্তুতি, সমস্যা ও সমাধান” বইতে।

বইয়ের লিঙ্ক – http://dimik.pub/book/475/coding-interview-preparation-problem-solution-by-tamim-shahriar-subeen

Facebook Comments

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

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

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

প্রোগ্রামিং

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

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

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

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

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

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

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

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

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

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

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

Facebook Comments

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Facebook Comments

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

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

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

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

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

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

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

Facebook Comments

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

একটি স্ট্রিংকে উল্টে দিলে যদি সেই স্ট্রিংটি আবার পাওয়া যায়, তাকে বলা হয় 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

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

Facebook Comments

প্রোগ্রামিং নিয়ে এক ডজন কমন প্রশ্ন ও উত্তর

প্রোগ্রামিং নিয়ে শিক্ষার্থীরা যেসব প্রশ্ন বারবার করে, এরকম এক ডজন প্রশ্ন প্রশ্নোত্তর আকারে লিখে রাখলাম।

১) আমি কি প্রোগ্রামিং শিখতে পারব?
উত্তর – এটা আসলে আগে থেকে বলা কঠিন। তিন মাস প্রোগ্রামিং নিয়ে সময় দাও, প্রতিদিন গড়ে ৪-৫ ঘণ্টা। তিন মাস পরেও যদি এই জিনিস ভালো লাগে, তাহলে শিখতে পারবে।

২) কোন প্রোগ্রামিং ভাষা শিখব?
উত্তর – এটা নির্ভর করে তুমি কোন ক্লাসে পড়, স্কুল-কলেজ নাকি বিশ্ববিদ্যালয়ের শিক্ষার্থী। বিস্তারিত উত্তর লিখেছি এখানে – কোন প্রোগ্রামিং ভাষা দিয়ে শুরু করব?

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

৪) আমি কম্পিউটার সায়েন্স পড়ি না, অন্য বিষয়ে পড়ি। আমি কি সফটওয়্যার ডেভেলাপার হতে পারব?
উত্তর – এই পোস্টে আলোচনা করা হয়েছে।

৫) আমি প্রোগ্রামিং শেখা শুরু করতে চাই। একটু গাইডলাইন দেন।
উত্তর – “প্রোগ্রামিংয়ের আশ্চর্য জগত” বইতে একেবারে শুরু থেকে কী করতে হবে ধারণা দেওয়া হয়েছে। এছাড়া এই ভিডিওতে আলোচনা করেছি।

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

৭) আমি গুগল (কিংবা মাইক্রোসফট, ফেসবুক, অ্যামাজন)-এ সফটওয়্যার ইঞ্জিনিয়ার হিসেবে কাজ করতে চাই। আমি কিভাবে ইন্টারভিউয়ের জন্য প্রস্তুতি নিব?
উত্তর – এই ভিডিওতে বিস্তারিত আলোচনা করা হয়েছে।

৮) প্রোগ্রামিং চর্চা করার জন্য কোন অনলাইন জাজ ব্যবহার করব?
উত্তর – এই লেখায় উত্তর আছে – প্রোগ্রামিং চর্চার ১০টি অনলাইন জাজ

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

১০) কম্পিউটার সায়েন্স পড়লেই কি চাকরি পাওয়া যায়?
উত্তর – না, শুধু কম্পিউটার সায়েন্স পড়ে সার্টিফিকেট থাকলেই চাকরি পাওয়ার নিশ্চয়তা নেই। বরং প্রোগ্রামিং স্কিল ও সেই সাথে কম্পিউটার বিজ্ঞানের জ্ঞান গুরুত্বপূর্ণ।

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

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

Facebook Comments

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Facebook Comments

অ্যালগরিদম কী?

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

মুহাম্মদ ইবন মুসা আল-খাওয়ারিজমি ৭৮০ খ্রিস্টাব্দে বৃহত্তর খোরাসানের খাওয়ারেজম অঞ্চলে জন্মগ্রহণ করেন। তিনি ছিলেন একাধারে প্রখ্যাত গণিতবিদ, জ্যোতির্বিজ্ঞানী ও ভূগোলবিদ। তিনি ভারতীয় দশভিত্তিক সংখ্যাপদ্ধতি নিয়ে একটি বই লিখেন যা ল্যাটিনে অনুবাদ করা হয় ‘Algoritmi de numero Indorum’ নামে। আল-খাওয়ারিজমি নামটি যখন ল্যাটিনে রূপান্তর করা হয়, তখন এটি হয়ে যায় ‘Algoritmi’। মূল বই লেখার প্রায় ৩০০ বছর পর এই অনুবাদটি করা হয়েছিল। এই বইটিই প্রথম দশভিত্তিক সংখ্যা ও এর বৈশিষ্টসমূহ ইউরোপে পরিচিত করে তোলে। এর ফলে জটিল রোমান সংখ্যার পরিবর্তে ইউরোপে এবং ক্রমে সারাবিশ্বে দশভিত্তিক সংখ্যাপদ্ধতি প্রচলিত হয়।

খাওয়ারিজমির নামানুসারে সংখ্যাপদ্ধতিটির নাম রাখা হয় Algorismus, যা ইংরেজিতে হয় Algorism। ১৩ শতকের দিকে Algorism শব্দটি ইংরেজি ভাষায় প্রবেশ করে। তৎকালিন উল্লেখযোগ্য অনেকেই, যেমন: জেফ্রি চসার (Geoffrey Chaucer) শব্দটি ব্যবহার করেছেন। গ্রিক শব্দ এরিথমস (ἀριθμός) অর্থ সংখ্যা। ১৫ শতকে এই শব্দের প্রভাবে ল্যাটিন Algorismus হয়ে যায় Algorithmus। ইংরেজি শব্দটিও তখন পরিবর্তিত হয়ে হয় Algorithm।

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

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

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

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

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

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

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

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

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

Facebook Comments

ডেটাবেজে পাসওয়ার্ড সংরক্ষণ – ১

ডেটাবেজে নিরাপদভাবে পাসওয়ার্ড সংরক্ষণ করা।

একবার একটা ওয়েবসাইটে ভুল পাসওয়ার্ড দিয়েছিলাম। সঙ্গে সঙ্গে পাসওয়ার্ড যে ভুল, সেই এরর মেসেজ স্ক্রিনে চলে আসল – “Hi subeen, your given password doesn’t match with the correct password a1b2c3. Please try again!”. ওই ওয়েবসাইটের প্রোগ্রামার আসলেই অনেক পরোপকারী (এর মানে হচ্ছে হেল্পফুল)। তো সবাই আবার ব্যবহারকারীর জন্য এত বেশি চিন্তা করে না। কয়েকবছর আগে বাংলাদেশের অন্যতম জনপ্রিয় ইকমার্স ওয়েবসাইটে (যেখান থেকে সবাই বই কিনে) পাসওয়ার্ড ভুলে যাওয়ায় সেটা রিসেট করতে দিই। তখন ইমেইলে ওরা সঠিক পাসওয়ার্ড পাঠিয়ে দেয়। কী চমৎকার, আমার আর কষ্ট করে নতুন পাসওয়ার্ড দিতে হলো না। বুঝা গেল যে তাদের প্রোগ্রামাররাও বেশ ভালো মানুষ, ব্যবহারকারীদের বেশি কষ্ট দিতে চান না। কিন্তু একটা কথা আছে, বেশি ভালো ভালো না। এজন্যই আজকের এই আর্টিকেল।

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

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

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

এখন ধরা যাক একাউন্ট তৈরি করা হয়ে গেছে। লগিন করার সময় কীভাবে পাসওয়ার্ড পরীক্ষা করতে হবে?

  • লগিন করার সময় ইউজারনেম u এবং পাসওয়ার্ড p দেওয়া হলো।
  • একাউন্ট তৈরির সময় পাসওয়ার্ডের জন্য যেই হ্যাশ অ্যালগরিদম ব্যবহার করা হয়েছিল, একই অ্যালগরিদম ব্যবহার করে p-কে p1-এ রূপান্তর করতে হবে।
  • ডেটাবেজে কুয়েরি চালিয়ে ইউজারনেম u-এর সাথে পাসওয়ার্ড যেটি আছে, সেটি বের করে আনা হলো। ধরা যাক, সেটি হচ্ছে p2.
  • p1 ও p2 স্ট্রিংদুটি যদি সমান হয়, তাহলে পাসওয়ার্ড সঠিক।

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

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

Facebook Comments

পাইথন দিয়ে এপিআই ব্যবহার – ৩য় পর্ব

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

আমাদের প্রথম কাজটি ছিল ডেটাবেজ টেবিল তৈরি করা। তারপরের কাজ হচ্ছে আবহাওয়ার তথ্য সংগ্রহ করা। সবশেষের কাজ হচ্ছে আবহাওয়ার তথ্য ডেটাবেজে সংরক্ষণ করা। তাহলে আমরা প্রতিটি কাজের জন্য আলাদা ফাংশন তৈরি করতে পারি।

আমি নিচে ফাংশনগুলো দেখিয়ে দিলাম। ফাংশনগুলো পুরোপুরি তৈরি করার দায়িত্ব পাঠকের।

def create_table():
   pass


def get_weather_data():
   pass


def store_weather_data():
   pass


if __name__ == "__main__":
   # create database connection
   conn = sqlite3.connect('example.db')
   c = conn.cursor()

   # create table if it doesn't exist
   create_table()

   # get weather info from open weather map api
   temperature, humidity = get_weather_data()

   # store weather data into database
   store_weather_data(temperature, humidity)

   # close database connection
   conn.close()

ওপরের কোডকে আমরা বলতে পারি মডিউলার (modular) কোড। প্রোগ্রামটি এখন পড়তে ও বুঝতে আগের চেয়ে সহজ। নতুন প্রোগ্রামাররা প্রায়শই মডিউলার কোড লিখতে পারে না, সবকিছু এক জায়গায় লিখে জগাখিচুড়ি পাকিয়ে ফেলে। তাই মডিউলার কোড লেখা বেশ গুরুত্বপূর্ণ।

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

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

Facebook Comments