সি শেখার গাইডলাইন!

বাংলা ভাষায় সি প্রোগ্রামিং ভাষা দিয়ে প্রোগ্রামিং শেখার গাইডলাইন

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

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

তারপর সি শেখা শুরু করতে হবে। প্রোগ্রামিংয়ে যারা একেবারেই নতুন, তাদের জন্য আমি “কম্পিউটার প্রোগ্রামিং ১ম খণ্ড” নামে একটি বই লিখেছি। এখানে জটিল-কঠিন-ভয়াবহ জিনিসগুলো বাদ দিয়ে বরং মৌলিক জিনিসগুলোর ওপর জোর দেওয়া হয়েছে। আশা করি, বইটি কেউ যদি দুইবার করে পড়ে ফেলে, তাহলে তার বেসিক শক্ত হয়ে যাবে। বইটি রকমারি ডট কম থেকে অর্ডার করা যাবে, এছাড়া আর কোথা থেকে পাওয়া যাব সেটি জানা যাবে দ্বিমিক প্রকাশনীর ওয়েবসাইটে। আবার বইটি ইন্টারনেটে ফ্রিও পড়া যাবে, cpbook.subeen.com ওয়েবসাইট থেকে।

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

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

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

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

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

ওপরের কাজগুলো ঠিকঠাকভাবে করলে আমি মনে করি সি প্রোগ্রামিং ভাষা দিয়ে প্রোগ্রামিং শেখা – এই পথে তুমি বহুদূর এগিয়ে যাবে। তারপরও কেউ আরেকটি বই পড়তে চাইলে আমি বলব The C Programming Language বইটি পড়ার জন্য।

লিঙ্ক –

প্রোগ্রামিং আপনার জন্য নয়

যে ১০টি লক্ষণ থাকলে বুঝতে হবে প্রোগ্রামিং আপনার জন্য নয়

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

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

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

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

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

১) কৌতূহলের অভাব

আপনার যদি কম্পিউটার এবং টেকনোলজির প্রতি আগ্রহ না থাকে, আপনি কখনোই প্রোগ্রামার হিসেবে সফল হতে পারবেন না।

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

নিজেকে জিজ্ঞাসা করুন যে সত্যি প্রোগ্রামিং আপনাকে আকৃষ্ট করে কি না। যদি আপনার উত্তর হয় ‘না’, তবে অবশ্যই এমন কিছু খুঁজে বের করা উচিত যা আপনাকে আকৃষ্ট করে। যদি উত্তর হয় ‘হ্যাঁ’, তবে নতুন কিছু খুঁজে বের করুন যা আগে কখনো লক্ষ করেননি।

২) আত্ম-নিয়ন্ত্রণ ও দ্রুত সমাধান খুঁজে বের করার ক্ষমতা না থাকা

আপনি যদি নিজে নিজে প্রবলেম সলভ করার দক্ষতা তৈরি না করেন তো আপনি কখনো প্রোগ্রামার হিসেবে সফল হতে পারবেন না।

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

ইন্টারনেটে দরকারী সব তথ্য পাওয়া যায়। এই বিশাল তথ্যভাণ্ডারে প্রবেশের একটি বিশাল দরজা রয়েছে: গুগল (google.com)। আপনি যা চান তাই গুগলের সাহায্যে পেতে পারেন। এর জন্য শুধু জানতে হবে গুগল কীভাবে ব্যবহার করতে হয়।

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

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

৩) অধ্যবসায়ের অভাব

সমস্যায় পড়লে আপনি যদি সহজেই হাল ছেড়ে দেন, তাহলে প্রোগ্রামার হিসেবে আপনি কখনোই সফল হতে পারবেন না।

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

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

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

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

৪) সমস্যা সমাধানের পর সফলতার অনুভূতি না থাকা

কোনো সমস্যা সমাধানের পর যদি আপনার মাঝে উত্তেজনা ও সফলতার কোনো অনুভূতি না জন্মায় তো আপনি কখনো প্রোগ্রামার হিসেবে সফল হতে পারবেন না।

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

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

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

৫) শেখা ও বোঝার ক্ষেত্রে ধৈর্য না থাকা

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

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

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

৬) চিন্তা করতে গিয়ে ক্লান্ত/বিরক্ত হয়ে যাওয়া

আপনি যদি চিন্তা করায় অলস হন এবং মনোযোগ দিয়ে চিন্তা করাকে বিরক্তিকর জিনিস মনে করেন তো আপনি কখনো সফল প্রোগ্রামার হতে পারবেন না।

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

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

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

আপনার মস্তিষ্ক একটি পেশির মতো— যতই ব্যবহার করবেন, ততই এটি চিন্তা করতে পারবে। যতই বিভিন্ন বিষয় জানবেন, ততই মানসিক ধারণা বাড়বে, সমাধান খোঁজা তত সহজ হবে।

৭) নিজের জন্য চিন্তা করতে না পারা

আপনি যদি চান যে অন্যরা আপনার জন্য ভাবুক, এবং যদি নিজের অবস্থা ভালো করে দেখতে অনিচ্ছুক হন, আপনি কখনো সফল প্রোগ্রামার হবেন না।

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

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

নিজের অভিজ্ঞতা ও যৌক্তিক চিন্তন দক্ষতার দ্বারা নিজস্ব দৃষ্টিভঙ্গি তৈরি করুন। যুক্তিসংগত অনুমান করুন, একটি অবস্থান নিন এবং নতুন তথ্য এলে তা গ্রহণ করতে প্রস্তুত থাকুন।

৮) অনড়, সংকীর্ণ এবং/বা অগোছালো চিন্তা

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

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

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

অন্য সম্ভাবনা দেখতে না পাওয়া বা সমালোচনা ঠিকভাবে গ্রহণ না করা উন্নতির অন্তরায়। অগোছালো হলে আপনার কাজ ধীরগতির হবে। কাজের সার্বিক মানও খারাপ হবে।

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

৯) ভালো ও খারাপ উত্তরের পরিধি না জেনে ‘সঠিক’ উত্তর খোঁজা

আপনি যদি প্রোগ্রামিংকে সমাধানের ক্ষেত্র হিসেবে না বিবেচনা করে শুধু ‘সঠিক’ উত্তর খোঁজার লক্ষে ব্যবহার করেন, আপনি কখনো প্রোগ্রামার হিসেবে সফল হতে পারবেন না।

কোনো দক্ষতা বা প্রোগ্রামিং শেখার সময় অনেকে জানতে চায় যে তারা যা করেছে তা সঠিক কি না। উত্তর হচ্ছে, ”এটা নির্ভর করে”।

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

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

১০) খুঁটিনাটিতে মনোযোগ না দেওয়া

আপনি যদি ক্ষুদ্র ক্ষুদ্র বিষয়গুলোতে মনোযোগ না দেন তো সফল প্রোগ্রামার হতে পারবেন না।

কম্পিউটার সূক্ষ্ম যন্ত্র। কম্পিউটার প্রোগ্রাম করার সময় প্রয়োজনীয় কমান্ড এমনভাবে দিতে হয় যেন কম্পিউটার গ্রহণ পারে। নাহলে কম্পিউটার কাজ করবে না। এক্ষেত্রে মাঝামাঝি ধরনের কিছু নেই—হয় কাজ করবে, নয় করবে না।

এর মানে এই যে, যখন প্রোগ্রামিং করবেন তখন খুঁটিনাটির দিকে মনোযোগ দিতে হবে। প্রত্যেকটি স্পেস, ব্র্যাকেট, বা সেমিকোলন নিয়ম মতো দিতে হবে। জায়গা ছাড়া কিছু বসাবেন, কিছুই কাজ করবে না। কম্পিউটার যখন কোনো এরর দেখায়, আপনাকে সেটা মনোযোগ দিয়ে দেখতে হবে এবং বুঝতে হবে এতে আসলে কী বলছে। আপনি যদি তা না করেন, তাহলে ঘণ্টার পর ঘণ্টা ভুল খুঁজে মরতে হতে পারে।

খুঁটিনাটি সবই লক্ষ রাখতে হবে, আপনাকে সেটা মানতে হবে। যখন মানবেন, তখন আপনি আপনার কোড স্ক্যান করে সব ত্রুটি দূর করতে পারবেন। এমন টুল ব্যবহার করতে পারবেন যা দ্রুত ইস্যু বের করতে আপনাকে সাহায্য করবে।

বোনাস: ব্যবসায়ী-মনস্ক হওয়া

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

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

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

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

উপসংহার

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

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

অনুবাদ – মোশারফ হোসেন।

[Jonathan Bluks রচিত মূল লেখাটি পাওয়া যাবে এখানেhttps://bit.ly/2DdU6VF]

ওয়েবের ত্রিশ বছর, এর পরে কী?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

– অনুবাদঃ মোশারফ হোসেন [ইংরেজি থেকে অনূদিত। স্যার টিম বার্নার্স-লি রচিত মূল লেখাটি আছে এখানে – https://bit.ly/2VRCKWb]

তথ্যপ্রযুক্তিতে নারী – ২০১৮ সালের সেরা দশ

অন্যান্য পেশার মত প্রযুক্তি অঙ্গনে নারীদের অংশগ্রহণ কম থাকা সত্ত্বেও, পৃথিবীর কিছু নারী প্রকৌশলীর রয়েছে তথ্যপ্রযুক্তি জগতে বর্নাঢ্য পদচারণা। নিজেদের পেশাজীবন সফল করার পাশাপাশি তাঁরা প্রতিনিয়ত তথ্যপ্রযুক্তিকে নিয়ে যাচ্ছেন কোটি কোটি সাধারণ মানুষের কাছে। সেইসব নারীদের বিশ্বে পরিচয় করিয়ে দেয়ার জন্য প্রতিবছর “বিজনেস ইনসাইডার” পত্রিকা তাঁদের তালিকা প্রকাশ করে। তাহলে দেখে নেয়া যাক ২০১৮ সালে কারা স্থান করে নিয়েছেন সেই তালিকায়ঃ
১. গোয়েন শটওয়েলঃ
শ্রেষ্ঠ নারী প্রকৌশলীর তালিকার প্রথমে জায়গা করে নিয়েছেন স্পেসএক্সের প্রেসিডেন্ট এবং COO গোয়েন শটওয়েল। ২০০২ সালে স্পেসএক্স যাত্রা শুরুর সময় থেকেই তিনি এই প্রতিষ্ঠানের সাথে কর্মরত। ২০০৮ সালে তিনি এই কোম্পানির প্রেসিডেন্টের দায়িত্ব পান। ২০১২ সালের মধ্যে শটওয়েলের সহযোগিতায় স্পেসএক্স প্রথম বেসরকারি অর্থায়নে ইন্টারন্যাশনাল স্পেস ষ্টেশনে মহাকাশযান প্রেরণের মাধ্যমে একটি মাইলফলকের সূচনা করে। তাঁরই নেতৃত্বে স্পেসএক্স প্রথমবারের মত একটি স্যাটেলাইট (বঙ্গবন্ধু-১) পাঠাতে সক্ষম হয়।
গোয়েন শটওয়েল প্রকৌশলীর হওয়ার প্রেরণা পান “সোসাইটি অফ ওম্যান ইঞ্জিনিয়ারস্‌”- এর একটি অনুষ্ঠানে পোশাক-আশাকে সুসজ্জিত একজন মেক্যানিকাল ইঞ্জিনিয়ারের বক্তৃতা শুনে। তখন তাঁর মাত্র ১৫ বছর বয়স। এই সম্পর্কে তিনি বলেন, “তখন আমার মাত্র ১৫ বছর বয়স। অনুষ্ঠানে তাঁর বক্তৃতা শুনে আমি যতটা না মুগ্ধ হই, তারচেয়ে বেশি পছন্দ করি তাঁর স্যুটটিকে। যদিও আমি এই ব্যাপারে কথা বলতে গেলে খুব লজ্জা পাই, তারপরেও বলতে পছন্দ করি এই কারনে যে, এই ঘটনাটির কারণেই আজকে আমি একজন সফল প্রকৌশলী হতে পেরেছি।”
২. প্রিয়া বালাসুব্রামানিয়ামঃ
অ্যাপলের আইফোন অপারেশন্স বিভাগের ভাইস প্রেসিডেন্ট প্রিয়া বালাসুব্রামানিয়াম আছেন তালিকার  চতুর্থ অবস্থানে। তিনি আইফোন উৎপাদনের জন্য Supply Chain তত্ত্বাবধানের পাশাপাশি আইফোনের মূল যন্ত্রাংশগুলোর গুণগতমান এবং ত্রুটি সংশোধনের কাজ পরিচালনা করে থাকেন। ২০০১ সাল থেকে অ্যাপলে কর্মরত এই প্রকৌশলী ২০১৭ সালেও এই তালিকায় ছিলেন।
গত বছর, ২০১৭ সালে তিনি মিশিগান স্টেট ইউনিভার্সিটি থেকে সম্মানসূচক ডক্টরেট ডিগ্রী লাভ করেন, যেখান থেকে প্রিয়া ২০০১ সালে Supply Chain Management এর উপর এমবিএ ডিগ্রী অর্জন করেন। সেখানকার উদ্বোধনি বক্তৃতায় তিনি ক্যারিয়ার শুরুর দিকে তাঁর সংগ্রামের কথা বলেন। একবার এক কোম্পানিতে ইন্টারভিউ দেয়ার সময় তাকে ম্যানাজার বলেছিল, “একটি ফ্যাক্টারি চালানো কোন মেয়ে মানুষের কর্ম নয়। মেয়েরা যা করতে পারে একটি ফ্যাক্টারি চালানো সেসব থেকে অনেক বেশিকিছু”। ভাগ্যিস! প্রিয়া সেইসব নিন্দুকদের কথা শোনেননি।
৩. ডায়ান ব্রায়ান্টঃ 
গুগল ক্লাউডের চিফ অপারেটিং অফিসার (COO) হিসেবে ডায়ান ব্রায়ান্ট যোগাদান করেন ২০১৭ সালের নভেম্বর মাসে। তিনি এর আগে ৩০ বছরেরও বেশি সময় ধরে আরেক টেকজায়ান্ট কোম্পানি ইনটেলের ডাটা সেন্টার গ্রুপে কর্মরত ছিলেন। ইনটেল ছেড়ে গুগলে যাবেন কী না, এই চিন্তা করার জন্য তিনি বেশ কিছুদিন ইনটেল থেকে ছুটি নিয়েছিলেন।
গুগলে তিনি এটিকে সর্ববৃহৎ ক্লাউড কম্পিউটিং সাইট হিসেবে প্রতিষ্ঠিত করার জন্য এবং Amazon এবং Microsoft এর উপরে স্থান দেয়ার জন্য কাজ করে যাচ্ছেন। গৃহহীন কিশোরি থেকে ইঞ্জিনিয়ারিং কলেজে পড়া এবং সেখান থেকে নিজেকে প্রতিষ্ঠিত করার এক অন্যন্য উদাহরণ ডায়ান ব্রায়ান্ট।
৪. ডেনিশ ডুমাসঃ
ডেনিশ ডুমাস “রেড হ্যাট” এর অপারেটিং সিস্টেম প্ল্যাটফর্মের ভাইস প্রেসিডেন্ট হিসেবে কর্মরত। রেড হ্যাট এন্টারপ্রাইজ লিনাক্স, লিনাক্সের সবচেয়ে সফল বাণিজ্যিক সংস্করণ হিসেবে বাজারে প্রচলিত। ডুমাসের টিম এই রেড হ্যাটের বর্তমান সংস্করণগুলোর হালনাগাদ এবং নতুন সংস্করণ তৈরির কাজ করে থাকে। একই সাথে সেই সংস্করণগুলো রেড হ্যাট কোম্পানি এবং কোম্পানির বাইরে ঠিকমত কাজ করছে কিনা সেটি নিশ্চিত করে থাকে।
ডেনিশ ডুমাস অনুপ্রেরণা পান একজন কর্মীকে নতুন কোন পরীক্ষামূলক কাজে সাহায্য করে এবং সেখান থেকে দ্রুত কোন আইডিয়া নিয়ে সেটিকে কাজে লাগানোর মাধ্যমে। অবসর সময়ে তিনি বাগান করতে খুব ভালবাসেন এবং নিজেকে “পাগলা মালী” হিসেবে পরিচয় দিতে পছন্দ করেন।
৫. আঞ্জুল ভামভ্রিঃ
এডোবের ক্লাউড প্ল্যাটফর্ম ইঞ্জিনিয়ারিং বিভাগের ভাইস প্রেসিডেন্ট হিসেবে কাজ করে যাচ্ছেন আঞ্জুল ভামভ্রি। ৩০০ জনের একটি টিমের টিম লীডার হিসেবে তিনি  এডোবের ক্রেতাদের ক্লাউডে ডাটা রাখার মাধ্যমে তাদের ব্যবসায় সহায়তা করে থাকেন। এছাড়াও আঞ্জুলের টিম পরবর্তী প্রজন্মের প্রযুক্তি যেমনঃ কৃত্রিম বুদ্ধিমত্তা এবং মেশিন লার্নিং নিয়ে কাজ করে।
নিজের কাজকে ভালবাসার পাশাপাশি আঞ্জুল কুকুর অনেক পছন্দ করেন। পোজো নামের তাঁর একটি পোষা ল্যাব্রাডর কুকুর আছে। পোজোর সাথে খেলাধুলা এবং হাঁটাহাঁটি করার মধ্য দিয়ে তিনি প্রতিদিন নতুন করে কাজ করা প্রেরণা পান।
৬. জয় চিকঃ 
মাইক্রসফটের ক্লাউড এবং এন্টারপ্রাইজ গ্রুপের কর্পোরেট ভাইস প্রেসিডেন্ট হিসেবে কর্মরত জয় চিক জায়গা করে নিয়েছেন এই তালিকায়। তাঁর নেতৃত্বে মাইক্রসফটে তাঁর টিম অফিস ৩৬৫, এক্সবক্স, এজুরে, উইনডোজ এবং সারফেস-এ এর ব্যবহারকারীদের ডাটার নিরাপত্তার জন্য কাজ করে থাকে। ১৯৯৮ সালে সফটওয়্যার ইঞ্জিনিয়ার হিসেবে মাইক্রসফটে তিনি পা রাখেন। এরপর সেখান থেকে ধীরে ধীরে মাইক্রসফটের উন্নয়ন বিভাগের পরিচালক, ইঞ্জিনিয়ারিং বিভাগের পরিচালক এবং পরবর্তীতে কর্পোরেট ভাইস প্রেসিডেন্টের দায়িত্ব পান।
ভ্রমণপ্রিয় জয় চিক কাজের ফাঁকে ফাঁকে ঘুরে বেড়াতে পছন্দ করেন। তিনি এন্টার্টিকা মহাদেশ ছাড়া বাকি ৬টি মহাদেশের মোট ৬০ টি দেশে ভ্রমণ করেছেন।
৭. ক্যাথি উইন্টারঃ 
 ইনটেলের অটোমেটেড ড্রাইভিং সল্যুশন ডিভিশনের জেনারেল ম্যানেজার এবং ভাইস প্রেসিডেন্ট ক্যাথি উইন্টার দখল করেছেন এই তালিকার ১৭ নম্বর স্থান। ক্যাথি উইন্টার ২০১৬ সালের শেষের দিকে ইনটেলের অটোমেটেড সল্যুশন বিভাগের জেনারেল ম্যানেজার হিসেবে যোগদান করেন। তখন তিনি স্বয়ংক্রিয় গাড়ির বিভিন্ন যন্ত্রাংশের চিপ তৈরির কাজে যুক্ত ছিলেন। এর আগে ডেলফিতে তিনি এই নতুন ধরণের কাজটির সাথে যুক্ত ছিলেন, যেখানে ক্যাথেরিন এবং তাঁর টিম স্বয়ংক্রিয় অর্থাৎ চালকবিহীন গাড়িতে চড়ে ক্যালিফোর্নিয়া থেকে নিউইয়র্কে ৯ দিনের একটি ট্রিপ সম্পন্ন করেন।
ইনটেলে ক্যাথি এ্যাডভান্স ভেহিকেল ল্যাবের কাজ তত্ত্বাবধান করেন। এছাড়াও স্বয়ংক্রিয় গাড়ির পরীক্ষামূলক চালনার কাজ তিনি পরিচালনা করে থাকেন। ক্যাথি বলেন, “আমি ড্রাইভিং এর সময় নিরাপত্তাকে অনেক বেশি প্রাধান্য দিয়ে থাকি। একটি স্বয়ংক্রিয় গাড়ির সুবিধা হলো, এটি চলার সময় বিভ্রান্ত হয় না, কাউকে টেক্সট মেসেজ পাঠায় না এবং উচ্চশব্দে গানও শুনতে পারে না।”
৮. আঁচল গুপ্তাঃ
ফেসবুকের সাইবার সিকিউরিটি বিভাগের পরিচালকের দায়িত্বে আছেন আঁচল গুপ্তা, যেখানে তিনি একাধিক টিমের টিম লীডার হিসেবে ফেসবুককে সুরক্ষিত রাখার কাজ তদারক করেন। এছাড়াও তিনি ফেসবুকের কর্পোরেট অবকাঠামো সুশৃঙ্খল রাখার কাজও করে থাকেন।
আঁচলের সাইবার সিকিউরিটির উপর রয়েছে প্রায় দুই দশকের অভিজ্ঞতা। ফেসবুকে যোগদান করার আগে তিনি স্কাইপের সাইবার সিকিউরিটি বিভাগের চিফ ইনফরমেশন অফিসার হিসেবে কর্মরত ছিলেন। কাজের পাশাপাশি তিনি বৃহত্তর ইকো সিস্টেম সিকিউরিটি এবং গ্রেস হোপার রিভিউ কমিটির সক্রিয় সদস্য।
আঁচল গুপ্তা তাঁর টিমের নারীদের বিভিন্ন সভা সেমিনারে অংশগ্রহণ করা, বক্তৃতা দেয়া এবং নিজেরদের গল্প অন্যদের শোনানোর ব্যাপারে উৎসাহ দিয়ে থাকেন। তিনি মনে করেন , এসব থেকে অন্য মেয়েরাও ভাল কিছু করার অনুপ্রেরণা পায়।
৯. সোফিয়া ভেলাস্টেগুইঃ 
মাইক্রসফটের কৃত্রিম বুদ্ধিমত্তাসম্পন্ন পণ্য বিভাগের জেনারেল ম্যানেজার সোফিয়া ভেলাস্টেগুই জায়গা করে নিয়েছেন এই তালিকায়। দক্ষিন কোরিয়ান নাগরিক সোফিয়ার রয়েছে জর্জিয়া টেক কলেজ অফ ইঞ্জিনিয়ারিং এ একাধিক পেটেন্ট এবং আসন। তিনি ২০১৭ সালে মাইক্রসফটে যোগদান করেন এবং সেখানে কৃত্রিম বুদ্ধিমত্তাসম্পন্ন বিভিন্ন ধরণের পণ্য তৈরি এবং উন্নয়নের কাজ করে থাকেন।
মাইক্রসফটের কৃত্রিম বুদ্ধিমত্তাসম্পন্ন পণ্যের মধ্যে মাইক্রসফট ট্রান্সলেটর এবং মাইক্রসফট কর্টানা ডিজিটাল এ্যাসিস্ট্যান্ট অন্যতম। মাইক্রসফটে যোগদান ক্রয়ার আগে সোফিয়া স্মার্ট হেডফোন কোম্পানি ডপলার ল্যাব, নেস্ট, এ্যালফাবেট স্মার্ট হোম কোম্পানি এবং অ্যাপলে কর্মরত ছিলেন। তিনি মনে করেন, ক্যারিয়ার গড়ার জন্য বিভিন্ন প্রকল্পে কাজ করার পাশাপাশি একই পেশার অন্যান্য মানুষদের সাথে নেটওয়ার্কিং অত্যন্ত গুরুত্বপূর্ণ।
১০. ইয়েল গার্টেনঃ 
অ্যাপলের সিরি ডাটা সায়েন্স এবং এ্যানালাইটিকের পরিচালক ইয়েল গার্টেন, যিনি অ্যাপলের ভয়েস এসিস্ট্যান্ট সিরির ডাটা প্রসেস করে সিদ্ধান্ত প্রদানে সাহায্য করে। ইয়েল এবং তাঁর টিম ডাটা ব্যবহার করে কিভাবে “সিরি”-এর উন্নয়ন এবং কিভাবে এই প্রোগ্রামটিতে আরো নতুন বৈশিষ্ট্য যুক্ত করা যায় সেই কাজ করে থাকেন। ডাটা সায়েন্স নিয়ে কাজ করার ক্ষেত্রে তাঁকে একজন বিশেষজ্ঞ মনে করা হয়।
২০১৭ সালের আগস্ট মাসে অ্যাপলে যোগদান করার আগে গার্টেন লিংকডইনের ডাটা সায়েন্স বিভাগের পরিচালক হিসেবে কর্মরত ছিলেন। সেখানে তিনি ২০১১ সাল থেকে ডাটা সায়েন্স নিয়ে কাজ করে গেছেন। নিজের কাজের মাধ্যমে সাধারণ মানুষের কাছে খুব সহজেই টেকনোলজি পৌঁছে দিতে পারাকেই নিজের সাফল্য হিসেবে বিবেচনা করেন ইয়েল গার্টেন।
লেখকঃ তামান্না নিশাত রিনি।

কেন মাল্টিথ্রেডিং শেখা উচিত

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

কেনো থ্রেড প্রোগ্রামিং সম্পর্কে ধারণা রাখা উচিৎ?

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

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

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

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

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

লেখকঃ আ ন ম বজলুর রহমান, সফটওয়্যার প্রকৌশলী ও লেখক (জাভা প্রোগ্রামিং, জাভা থ্রেড প্রোগ্রামিং)।

জাভা থ্রেড প্রোগ্রামিং

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

নিজের লেখা বই হাতে বইমেলায় দ্বিমিক প্রকাশনীর স্টলে লেখক বজলুর রহমান।

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

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

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

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

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

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

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

 

 

 

পিপলওয়্যার – বই রিভিউ

গ্র্যাবে আমি বর্তমানে যেই চাকরি করছি, সেখানে আমার কাজ হচ্ছে ইঞ্জিনিয়ারিং ম্যানেজমেন্ট (Engineering Management)। তো এই কাজটির সঙ্গে আমি একদমই অপরিচিত ছিলাম। তারপরও আমার স্বভাবসুলভ আলসেমি, মানুষের সঙ্গে কাজ করার অভিজ্ঞতা ও কমনসেন্স ব্যবহার করে কাজ চলে যাচ্ছে। আর এই ইঞ্জিনিয়ারিং ম্যানেজার হিসেবে কাজ শুরু করার পরে আমি বিভিন্ন রকম বইপত্র কেনা ও পড়া শুরু করি। সেসব বইয়ের অন্যতম হচ্ছে Peopleware: Productive Projects and Teams (3rd Edition) ।সম্প্রতি বইটি দ্বিতীয়বারের মতো পড়ে শেষ করলাম। বইটি প্রথমবার পড়েছিলাম ২০১৫ সালের শেষ দিকে।

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

বইতে মোট ছয়টি অংশে ৩৯টি অধ্যায় আছে। প্রথম অংশের শিরোনাম হচ্ছে Managing the Human Resource – মানবসম্পদ ব্যবস্থাপনা। সেখানে মূলত সফটওয়্যার প্রজেক্টগুলোর সাফল্য-ব্যর্থতা নিয়ে আলোচনা করা হয়েছে। কীভাবে সফটওয়্যার তৈরির প্রক্রিয়া হার্ডওয়্যার তৈরির প্রক্রিয়ার চেয়ে আলাদা, সেখানে সফটওয়্যারের গুনগত মান নিশ্চিতকরণ কতটা জরুরী, এই বিষয়ে গ্রাহকদের দৃষ্টিভঙ্গী কী, ম্যানেজারের করণীয় কী – সেসব বিষয় আলোচনায় এসেছে। নিম্নমানের সফটওয়্যার কেবল গ্রাহকদের জন্যই সমস্যার সৃষ্টি করে না, বরং সফটওয়্যার প্রকৌশলীদের হতাশার কারণও হয়ে দাঁড়ায়। সফটওয়্যার শিল্পের বিকাশে তাই গুনগত মান নিশ্চিতকরণ বেশ গুরুত্বপূর্ণ, আর সেই সাথে চ্যালেঞ্জিংও বটে। আর গুনগত মানের সঙ্গে যেই জিনিসটি অঙ্গাঅঙ্গি ভাবে জড়িত, তার নাম হচ্ছে প্রোডাক্টিভিটি (productivity) বা উৎপাদনশীলতা। একজন সফটওয়্যার প্রকৌশলীর উৎপাদনশীলতা পরিমাপ করার প্রক্রিয়াটি কিন্তু বেশ অস্পষ্ট ও দুরুহ। সেই বিষয়টিও চমৎকারভাবে আলোচনা করেছেন লেখকদ্বয়।

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

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

বইয়ের শেষ দুটি অংশের নাম হচ্ছে যথাক্রমে Fertile Soil এবং It’s Supposed to Be Fun to Work Here। উর্বর জমিতে যেমন সোনালী ফসল হেসে ওঠে, তেমনি সঠিক ও সুন্দর কাজের পরিবেশে প্রোগ্রামাররাও অনেক ভালোভাবে তাদের কাজ সম্পন্ন করতে পারে। আর এই পরিবেশ এমনি এমনি গড়ে ওঠে না, তার জন্য চাই সেই প্রতিষ্ঠানের সচেতন চেষ্টা। যদিও ইঞ্জিনিয়ারিং ম্যানেজার একটি প্রতিষ্ঠানের মাঝারি পর্যায়ের মানুষ, তারপরও তার হাতে অন্তত তার নিজের দলের জন্য কিছু করার ক্ষমতা থাকে, অন্য দলগুলোকেও প্রভাবিত করার সম্ভাবনা থাকে। তাই সেই চেষ্টা চালিয়ে যাওয়ার কিছু উপায় বাতলে দেওয়া হয়েছে এই অংশগুলোর বিভিন্ন অধ্যায়ে।

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

 

কেন সিএসই পড়বা না

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

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

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

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

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

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

আর কম্পিউটার সায়েন্স কিন্তু অনেক বোঝার বিষয়। যাদের গণিতের সাধারণ বিষয়গুলো বুঝতেই সমস্যা হয়, তাদের আসলে এই দিকে না আসাই ভালো।

যারা আমার কথায় এখনও একমত হও নাই, তারা আমার লেখা প্রোগ্রামিং শেখার একটা বই আছে, (http://cpbook.subeen.com-এ গিয়ে ফ্রি-তে বইটা পড়া যায়)। সেই বইটা কিছুদিন পড়। যদি মনে হয়, এই জিনিস নিয়া আগামী চার বছর ব্যাপক খাটাখাটনি করতে পারবা এবং আগামী ২০-৩০ বছর এইরকম বিদঘুটে জিনিসকেই নিজের পেশা হিসেবে নিতে পারবা, তাহলে কম্পিউটার সায়েন্স পড়লেও পড়তে পারো।

প্রোগ্রামিং ক্লাব

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

আপনি কিভাবে আপনার এলাকায় একটি প্রোগ্রামিং সংগঠন গড়ে তুলবেন?

প্রথমেই প্রোগ্রামিং শেখাতে যাবেন না। গ্রাম/জেলা শহরের প্রায় অধিকাংশ মানুষের ধারনা কম্পিউটার বিনোদন এর কাজে ব্যবহার করা হয়, তাদের কাছে কম্পিউটার এর বিনোদনটাই আনন্দদায়ক। ঠিকাছে, আপনি ১০০ জন শিক্ষাথীকে এক জায়গায় করেন, যদি না পারেন তাহলে ৫০ জন, যারা ষষ্ঠ থেকে নবম শ্রেণীর শিক্ষার্থী। দশম শ্রেণীর শিক্ষাথীদেরকে নিতে হবে না, কারণ তাদের কিছুদিন পরই SSC পরীক্ষা।

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

https://www.youtube.com/watch?v=krYXHtrzXLU

https://youtu.be/wldli30PT1E

সর্বপরি প্রথমে তাদের কে এটাই খুব ভালো করে বোঝাতে হবে যে কম্পিউটার বিনোদন এর মেশিন না, এটা অনেক শক্তিধর, যেটা দিয়ে পৃথিবী পৃষ্ঠ থেকে চাঁদে একটা রোবট নিয়ন্ত্রন করা যায় যেন রুপকথার মতন)।

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

এর পর দেখেন সেই ১০০ জন এর মধ্যে কত জন প্রোগ্রামিং এর ব্যাপারে উৎসাহী হয়। আশা করি, অনেকে হবে, কারন আমার অভিজ্ঞতা তাই বলে।

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

এবার আসি কিভাবে প্রোগ্রামিং শেখাবেন সেই কথায়। আপনি তাদেরকে শুধু শেখান, কিভাবে কোডব্লকস ইনস্টল দিবে, কিভাবে কোড লিখবে, কিভাবে কোড রান কম্পাইল করবে, কোডে কোথাও ভুল থাকলে সেগুলা কিভাবে বুঝবে, কিভাবে কোড রান করবে। এবং পরিশেষে তাদের কে আপনি “Hello World” টা রান করা শিখিয়ে দিন। বাকি সব কিছু তারা শিখে নিবে! কিভাবে? ওদের কে খুব ভালো করে একটা জিনিশ শিখিয়ে দিতে হবে আপনাকে, সেটা হলো তারা নিজেরা কিভাবে বই (বই এর লিংক http://cpbook.subeen.com) পড়ে প্রোগ্রামিং শিখবে। বই-এর প্রতিটা কোড সে নিজে নিজে লিখবে এবং রান করবে। কোথাও না বুঝলে ফেসবুক-এ অনেক গ্রুপ আছে (যেমন : https://facebook.com/groups/programming.school/ অথবা https://facebook.com/groups/bengaliprogramming/ ) সেখানে শিক্ষার্থীরা তাদের সমস্যা বা প্রশ্ন পোস্ট করবে। আর যদি ফেসবুক না থাকে (না থাকাই আসলে ভালো) তাহলে আপনার মোবাইল নাম্বার দিয়ে দিন, আপনাকে ফোন করবে, আপনি ফোনে বুঝায়ে দিবেন, আর গুগল তো আছেই। এখন গ্রামেও খুব ভালো ইন্টারনেট। আর আপনি প্রচুর উৎসাহ দিবেন। ছোটরা আনন্দের সাথে শিখতে ভালোবাসে, তাদেরকে যেটুকুই শেখান না কেন, আনান্দের সাথে শেখান।

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

আমি শতভাগ নিশ্চিত আপনি ১/২ মাস পর ১০/২০ জন শিক্ষাথী পাবেন যারা মোটামুটি প্রোগ্রামিং পারে। এর পর ঐ ১০ জনকে দেখেই আরো ১০ জন শিখবে। তারপর আরো ১০ জন, তারপর আরো…এভাবেই চলবে…।

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

– মিজানুর রহমান।

 

গড়, মধ্যক ও প্রচুরক

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

আমাকে যদি দুটি সংখ্যা দিয়ে এদের গড় বের করতে বলা হয়, তখন আমি সংখ্যা দুটি যোগ করে দুই দিয়ে ভাগ করবো। যেমন : 5 ও 6, এই দুটি সংখ্যার গড় হচ্ছে (5 + 6) / 2 বা 11 / 2 বা 5.5। তিনটি সংখ্যা 6, 7, 8-এর গড় হচ্ছে (6 + 7 + 8) / 3 বা 21 / 3 বা 7। তাহলে আমাকে যদি n সংখ্যক সংখ্যা দেওয়া হয়, তাহলে তাদের গড় বের করতে হলে সবগুলো সংখ্যা যোগ করে n দিয়ে ভাগ করবো। তাহলেই হয়ে গেলো।

এখন আমরা পাইথন ব্যবহার করে একটি প্রোগ্রাম লিখবো, যার কাজ হচ্ছে অনেকগুলো সংখ্যার গড় বের করা।

def average(li):
   s = sum(li)
   n = len(li)
   return s / n

li = [1, 2, 3]
print("Average:", average(li))
li = [10, 20, 30, 40, 50, 60, 70, 80]
print("Average:", average(li))
li = [-1, 0, 1]
print("Average:", average(li))

প্রোগ্রামটি রান করলে আমরা আউটপুট পাবো এরকম :

Average: 2.0
Average: 45.0
Average: 0.0

ক্রিকেট খেলায় ব্যাটিং গড় কিভাবে বের করে? মোট রানকে ইনিংস দিয়ে ভাগ করতে হয়। তবে একটি মজার বিষয় হচ্ছে, কোনো ইনিংসে অপরাজিত থাকলে, অর্থাৎ, আউট না হলে, সেই ইনিংসকে ভাগ করার সময় গণনা করা হয় না। ধরা যাক, কোনো ব্যাটসম্যান প্রথম খেলায় করলো 50 রান, দ্বিতীয় খেলায় 100 রান (অপরাজিত), তৃতীয় খেলায় আবারো 50 রান করে আউট হলো। তাহলে তার ব্যাটিং গড় হবে, (50 + 100 + 50) / 2, বা 200 / 2 বা 100। এখানে 3 এর বদলে 2 দিয়ে ভাগ করার কারণ হচ্ছে, দ্বিতীয় খেলায় সে অপরাজিত ছিল।

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

এখন আরেকটি উদাহরণ দেই। কোনো দেশের মানুষ কেমন ধনী বা গরিব, তা বোঝার জন্য অনেকসময় মাথাপিছু আয় ব্যবহার করা হয়। মাথাপিছু আয় মানে হচ্ছে গড় আয়। সেটি ব্যবহার করে সেই দেশের মানুষের অর্থনৈতিক অবস্থা সম্পর্কে ধারণা পাওয়া যায়। কিন্তু সেখানে যদি মানুষের আয়ের মধ্যে বৈষম্য অনেক বেশি হয়, তাহলে কিন্তু গড় ব্যবহার করে প্রকৃত ধারণা পাওয়া যাবে না। একটি উদহারণ দিয়ে বোঝাই। ধরা যাক, কোনো দেশে 10 জন মানুষ আছে। তাদের মধ্যে 2 জন প্রতি মাসে 10 হাজার টাকা আয় করে। 5 জন প্রতিমাসে 20 হাজার টাকা আয় করে। আর একজন আয় করে প্রতিমাসে 30 হাজার টাকা। বাকী দুইজন প্রতি মাসে 5 লক্ষ টাকা আয় করে। তাহলে প্রতিমাসে তাদের গড় আয় কত?

গড় আয় = (10000 + 10000 + 20000 + 20000 + 20000 + 20000 + 20000 + 30000 + 500000 + 500000) / 10 = 115000।
তার মানে গড় আয় এক লক্ষ পনের হাজার টাকা! তাহলে শুধু গড় আয় জানলে যেকেউ সেই দেশের মানুষকে ধনী ভাববে। তাই গড় ব্যবহার করে সবসময় প্রকৃত চিত্র পাওয়া যায় না। তবে এতে হতাশ হওয়ার কিছু নেই, কারণ আমাদের হাতে রয়েছে মধ্যক ও প্রচুরক।

মধ্যক

এখন ধরা যাক, তুমি কোনো ক্রিকেট দলের ম্যানেজার। তোমার দল তৈরির সময় দুই জন ব্যাটসম্যান – রবিন ও সমিত-এর মধ্যে একজনকে বেছে নিতে হবে। দুজনের মধ্যে যার ব্যাটিং গড় বেশি, তুমি তাকে দলে নিতে পারো। কিন্তু তুমি যদি আরেকটু সচেতন হও, তখন হয়ত তুমি জানতে চাইতে পারো যে, কে কতগুলো ম্যাচ খেলেছে। ধরা যাক, রবিন 50 টি ম্যাচ খেলেছে এবং তার ব্যাটিং গড় 30। আর সমিত খেলেছে 5টি ম্যাচ এবং তার ব্যাটিং গড় 38। তুমি কিন্তু বেশিরভাগ ক্ষেত্রেই রবিনকে দলে নেবে, যেহেতু সে সমিতের তুলনায় অনেক বেশি অভিজ্ঞ। কিন্তু দুইজন যদি সমান সংখ্যক ম্যাচ খেলে, তখন কি কেবল গড় হিসেব করবে? তুমি চাইলে তখন আরেক ধরনের টুল ব্যবহার করতে পারো, যার নাম মধ্যক (ইংরেজিতে বলে median)। ধরা যাক, রবিন ও সমিত – দুজনেই 10টি করে ম্যাচ খেলেছে। 10টি ম্যাচে রবিনের রান হচ্ছে 95, 88, 47, 0, 10, 1, 5, 12, 0, 3। আর সমিতের রান হচ্ছে 10, 40, 20, 37, 0, 1, 25, 35, 30, 33। রবিনের গড় রান সমিতের গড় রানের চেয়ে বেশি। তবে এখানে আমরা দেখতে পাচ্ছি, রবিন মাঝে-মধ্যে অনেক বেশি রান করে, তবে বেশিরভাগ সময়ই সে খুব একটা ভালো খেলে না। আর সমিত দুয়েকটা বাদের বাকি খেলাগুলোয় মোটামুটি রান করতে পারে। তাই শুধু গড়ের ওপর ভরসা করা আমাদের ঠিক হবে না। আমরা মধ্যক বের করবো। প্রথমে আমরা তাদের প্রতি ম্যাচের রান ছোট থেকে বড় ক্রমানুসারে সাজাবো। তাহলে রবিনের রান হবে 0, 0, 1, 3, 5, 10, 12, 47, 88, 95 আর সমিতের রান হবে 0, 1, 10, 20, 25, 30, 33, 35, 37, 40। মধ্যক বের করতে গেলে আমাদেরকে তালিকার মাঝামাঝি সংখ্যাটি নিতে হবে। মোট সংখ্যা যদি বিজোড় হয়, তাহলে মাঝামাঝি সংখ্যা হবে একটি। যেমন 11-এর ক্ষেত্রে 6 নম্বর সংখ্যাটি হচ্ছে মাঝামাঝি সংখ্যা। কারণ ওই সংখ্যার চেয়ে ছোট 5টি সংখ্যা আছে। আবার বড় সংখ্যাও আছে 5টি। কিন্তু জোড় সংখ্যার বেলায় একটি মাঝামাঝি সংখ্যা বের করা যায় না। যেমন 10টি সংখ্যার ক্ষেত্রে আমরা যদি 5 নম্বর সংখ্যাটিকে মাঝামাঝি সংখ্যা ধরি, তাহলে তার ছোটি 4টি আর তার বড় 5টি সংখ্যা থাকবে। আবার 6 নম্বর সংখ্যাকে মাঝামাঝি সংখ্যা ধরলে, তার ছোট 5টি আর বড় 4টি সংখ্যা থাকবে।

যেহেতু আমাদের 10 টি সংখ্যা, তাই আমরা 5 ও 6 নম্বর সংখ্যা দুটি নিয়ে তাদের গড় বের করবো, মানে সংখ্যা দুটি যোগ করে দুই দিয়ে ভাগ করবো। তাহলে রবিনের রানের মিডিয়ান হবে 7.5 আর সমিতের রানের মিডিয়ান হবে 27.5। এখানে আমরা মিডিয়ান ব্যবহার করে সিদ্ধান্ত নিতে পারি যে কাকে দলে নেব। কাজটি তোমরা খাতা কলমে করে ফেল, তবে আমি পাইথন ব্যবহার করে একটি প্রোগ্রাম লিখে দেখাবো।

def median(li):
   li.sort()
   count = len(li)
   if count == 0:
      return None
   if count % 2 == 1:
      mid = count // 2
      return li[mid]
   else:
      mid2 = count // 2
      mid1 = mid2 - 1
      return (li[mid1]+li[mid2])/2

robin_run = [95, 88, 47, 0, 10, 1, 5, 12, 0, 3]
shomit_run = [10, 40, 20, 37, 0, 1, 25, 35, 30, 33]

median_robin = median(robin_run)
median_shomit = median(shomit_run)

print("Median run for Robin", median_robin)
print("Median run for Shomit", median_shomit)

আমরা এখন আমাদের মাথাপিছু আয়ের হিসেবে ফেরত যাই। তোমরা যদি সেই উদাহরণ থেকে মধ্যক বের করো, তাহলে সেটি হবে 20000। তোমরা হাতে-কলমে কিংবা একটি প্রোগ্রাম লিখে সেটি বের করতে পারো। এখানে কিন্তু মধ্যক ব্যবহার করেই বাস্তব চিত্রের কাছাকাছি চিত্র পাওয়া যাচ্ছে।

প্রচুরক

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

একটি ওয়ানডে ম্যাচে একজন বোলারের পক্ষে সর্বোচ্চ ও সর্বনিম্ন কয়টি উইকেট পাওয়া সম্ভব? উত্তর হবে, যথাক্রমে 10টি ও 0টি। 0-এর চেয়ে কম কিংবা 10-এর চেয়ে বেশি উইকেট পাওয়া সম্ভব নয়। এখন ধরা যাক, মোস্তাফিজ এখন পর্যন্ত 20টি ওয়ানডে ম্যাচে বোলিং করেছে। সেই খেলাগুলোতে সে প্রতি খেলায় যতগুলো উইকেট পেয়েছে, তা হচ্ছে : 6, 5, 6, 4, 3, 1, 3, 2, 1, 0, 5, 3, 3, 2, 2, 1, 3, 4, 3, 3। এখন আমি একটি তালিকা তৈরি করবো, যে মোস্তাফিজ 0 উইকেট পেয়েছে কতবার, 1 উইকেট পেয়েছে কতবার … এরকম।

উইকেট ম্যাচের সংখ্যা
0 1
1 3
2 3
3 7
4 2
5 2
6 2
7 0
8 0
9 0
10 0

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

wkts_list = [6, 5, 6, 4, 3, 1, 3, 2, 1, 0, 5, 3, 3, 2, 2, 1, 3, 4, 3, 3]

for item in range(11):
   print("Wicket:", item, "Count:", wkts_list.count(item))

প্রোগ্রামটি রান করলে আউটপুট আসবে এরকম :

Wicket: 0 Count: 1
Wicket: 1 Count: 3
Wicket: 2 Count: 3
Wicket: 3 Count: 7
Wicket: 4 Count: 2
Wicket: 5 Count: 2
Wicket: 6 Count: 2
Wicket: 7 Count: 0
Wicket: 8 Count: 0
Wicket: 9 Count: 0
Wicket: 10 Count: 0

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

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

এই লেখাটি সহ গণিতের আরো কিছু মৌলিক বিষয় নিয়ে প্রকাশিত হয়েছে গণিত করবো জয়