লিনাক্স

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

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

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

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

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

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

বিভিন্ন ওপেন সোর্স সফটওয়্যার :
ব্রাউজার : মজিলা ফায়ারফক্স, ক্রোমিয়াম (গুগল ক্রোমের ওপেন সোর্স ভার্শন)
ডকুমেট প্রসেসর : লিব্রা অফিস রাইটার
স্প্রেডশীট : লিব্রা অফিস ক্যাল্ক
মাল্টিমিডিয়া প্রেজেন্টেশন : লিব্রা অফিস ইমপ্রেস
ইনস্ট্যান্ট মেসেজিং : পিজিন
ইমেজ এডিটিং : গিম্প
ভিডিও প্লেয়ার : ভিএলসি

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

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

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

নোট : আমার এই লেখাটি প্রথম আলোতে প্রকাশিত হয় আগষ্ট ২৯, ২০১৪ তারিখে। লিঙ্ক : http://www.prothom-alo.com/technology/article/304102/

ফ্রিল্যান্সিং ও আউটসোর্সিং

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

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

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

ফ্রিল্যান্সিং সম্পর্কে আরো জানতে নিচের ভিডিওটি দেখুন।

আমি লেখাটি যখন শুরু করেছিলাম, কাকতালীয়ভাবে তার কিছুক্ষণ পরে প্রথম অলোর অনলাইন সংস্করণে এই লেখাটি প্রকাশিত হয়: http://www.prothom-alo.com/technology/article/194983/, এখানে অনেক সুবিধার কথা বলা আছে, তাই আমি সুবিধার বিষয়গুলো আর লিখলাম না।

এবার কয়েকটি অসুবিধার কথা বলি।

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

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

৩) সামাজিক স্বীকৃতি। এটা একটা গুরুত্বপূর্ণ বিষয়। যারা এখনও বিয়ে করে নি, তারা হয়তো টের পাচ্ছে না বিষয়টা। তবে এক্ষেত্রে বিডিওএসএন ও বেসিসকে ধন্যবাদ দিতে হয়, কারণ তারা এটা নিয়ে হৈচৈ করার কারণে ধীরে ধীরে মানুষ বিষয়টা সম্পর্কে জানতে পারছে।

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

মূল লেখাটি ফেসবুকে নোট আকারে লিখেছিলাম এপ্রিল ১৮, ২০১৪ তারিখে।

কোন ভার্সিটিতে সিএসই পড়ব ?

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

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

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

এবার আসি যারা সফটওয়্যার তৈরির কাজ করতে চাও। ভালো সফটওয়্যার ইঞ্জিনিয়ারদের চাকরির সুযোগ অনেক (দেশে এবং বিদেশে) আর বেতনও ভালো। আমি যদ্দূর জানি, এই কারণেই পোলাপান সিএসই পড়তে চায়।

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

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

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

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

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

আর ক্যারিয়ার বিষয়ক এই লেখাটাও দেখতে পারো :  http://blog.subeen.com/?p=175

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

প্রোগ্রামিং ক্যারিয়ার গড়তে ৫টি টিপস্

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

কিভাবে নিজের দক্ষতা প্রকাশ করবে?

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

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

৩) ওয়েব অ্যাপ্লিকেশন তৈরি : তুমি নিজে বিভিন্ন ওয়েব অ্যাপ্লিকেশন তৈরি করে সেগুলো ইন্টারনেটে হোস্ট করে রাখতে পারো। আর নিজের একটি ওয়েবসাইট তৈরি করে সেখানে সবকিছু সাজিয়ে রাখো, এটাকে পোর্টফোলিও (Portfolio) বলে। তুমি কোন লেভেলের ওয়েব ডেভেলাপার, সেটা তোমার পোর্টফোলিওই বলে দেবে।

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

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

তোমার জন্য শুভকামনা রইল।

বি.দ্র. আরো কোনো টিপস্ জানা থাকলে দয়া করে মন্তব্যে লিখুন। ধন্যবাদ।

পাইথন কী?

কম্পিউটারকে দিয়ে কাজ করাতে গেলে কম্পিউটার বুঝতে পারে, এমন ভাষায় তাকে নির্দেশ দিতে হয়। এরকম প্রোগ্রামিং ভাষা অনেক রয়েছে এবং নিত্যনতুন তৈরি হচ্ছে। তবে অল্প কয়েকটি প্রোগ্রামিং ভাষাই প্রোগ্রামারদের কাছে জনপ্রিয় হতে পেরেছে। তেমন একটি প্রোগ্রামিং ভাষা হচ্ছে পাইথন যেটি তৈরি করেন গুইডো ভন রুযাম (Guido van Rossum)। ১৯৮৯ সালের ডিসেম্বর মাসে ক্রিসমাসের ছুটিতে তিনি পাইথন তৈরি করা শুরু করেন। তবে পাইথন সবচেয়ে বেশি জনপ্রিয়তা পায় ২০০০ সালে তার ২.০ সংস্করণ চালু হওয়ার পরে। বর্তমানে পাইথনের ২.৭ এবং ৩.৪ এই দুটি সংস্করণ চালু রয়েছে।

Guido Van Rossum

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

পাইথনের এত জনপ্রিয় হওয়ার কারণ কী? পাইথন প্রোগ্রামাররা নিচের কারণগুলোকেই প্রধান মনে করেন:‌

  • পাইথন কোড সহজে পড়া যায়
  • কোড সি বা জাভার চেয়ে তুলনামূলক অনেক ছোট হয়
  • পাইথনে রয়েছে লিস্ট, ডিকশনারি ও সেটের মতো চমৎকার ডাটা স্ট্রাকচার
  • পাইথন বিভিন্ন প্ল্যাটফর্মে ব্যবহার করা যায়
  • বিশাল ও কার্যকর স্ট্যান্ডার্ড লাইব্রেরি রয়েছে
  • শক্তিশালী অনলাইন কমিউনিটি
  • চমৎকার ওয়েব ফ্রেমওয়ার্ক (জ্যাঙ্গো, ফ্লাস্ক ইত্যাদি)

মোটামুটি সব লিনাক্স ডিস্ট্রিবিউশন ও ম্যাক অপারেটিং সিস্টেমে পাইথন বিল্ট-ইন থাকে, আলাদাভাবে ইনস্টল করতে হয় না। উইন্ডোজে পাইথন আলাদা করে ইনস্টল করতে হয়, যা পাইথনের অফিয়াল ওয়েবসাইট [৩] থেকে ডাউনলোড করা যায়।

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

পাইথন শেখার জন্য পাইথনের অফিশিয়াল টিউটোরিয়াল রয়েছে [৪]। এছাড়া অনলাইনে রয়েছে বিভিন্ন বই ও অনলাইন কোর্স। তবে বাংলা ভাষায়ও পাইথন শেখার সুযোগ রয়েছে অনলাইনে। একেবারে নতুনদের জন্য আছে ‘হুকুশ পাকুশের প্রোগ্রামিং শিক্ষা’ [৫] যেটি তৈরি করেছেন ইকরাম মাহমুদ। আর ‘পাইথন পরিচিতি’ [৬] নামে ধারাবাহিক ভিডিও লেকচার রয়েছে যা পাইথন শেখার জন্য বেশ কার্যকর। সম্প্রতি দ্বিমিক কম্পিউটিং স্কুল [৭], বাংলাদেশ পাইথন ইউজার গ্রুপ [৮] ও বাংলাদেশ ওপেন সোর্স নেটওয়ার্ক মিলে প্রথমবারের মতো আয়োজন করে ‘পাইকন ঢাকা ২০১৪’ যা পাইথনের উপর বাংলাদেশে প্রথম আন্তর্জাতিক সম্মেলন।

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

লিঙ্কঃ
১) http://goo.gl/DiWrtA
২) http://goo.gl/eDyqM0
৩) http://python.org
৪) http://goo.gl/QTfyY1
৫) http://hukush-pakush.appspot.com
৬) http://pyvideo.subeen.com
৭) http://dimikcomputing.com
৮) http://pycharmers.net

লেখাটি প্রথম আলোতে প্রকাশিত হয় ২৫-০৭-২০১৪ তারিখে।

অনলাইন সংস্করণ: http://www.prothom-alo.com/technology/article/276553

ই-প্রথম আলো: http://epaper.prothom-alo.com/index.php?opt=view&page=28&date=2014-07-25

যারা নতুন প্রোগ্রামিং শিখবে, তাদের জন্য উপযোগি বই : পাইথন দিয়ে প্রোগ্রামিং শেখা। বিস্তারিত জানতে ছবিতে ক্লিক করুন।
যারা অভিজ্ঞ প্রোগ্রামার, তাদের দ্রুত পাইথন শেখার জন্য উপযোগি বই।

কম্পিউটারের মেমোরি

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

তোমরা তো ইতিমধ্যেই জেনে গিয়েছ যে কম্পিউটার যে হিসাবনিকাশ করে, সেগুলো যত বড় বড় হিসেবই হোক না কেন, শেষ পর্যন্ত কম্পিউটার কেবল শূণ্য আর এক ব্যবহার করে হিসেব করে (এই হিসেব করাটাকেই আমরা প্রসেস করা বলছি মাঝে মাঝে)। তো এই 0 এবং 1-গুলো রাখার জন্য আমাদের জায়গা দরকার। সেই জায়গাটি দেয় কম্পিউটারের মেমোরি। এই 0 আর 1, এগুলো হচ্ছে একেকটি বিট (ইংরেজিতে bit)। একটি বিট যে কোনো এক রকমের হবে, হয় শূণ্য (0) না হয় এক (1)। তাহলে একটি বিট দিয়ে দুটি আলাদা জিনিস প্রকাশ করা সম্ভব, যখন বিটটি হবে 0 তখন এক রকম, আবার যখন 1 তখন আরেক রকম। তাহলে পাশাপাশি দুটি বিট দিয়ে কয়টি আলাদা জিনিস রাখা যায়? তোমরা একটু চিন্তা করো তো। চিন্তা করা শেষ হলে নিচের টেবিলটি দেখো:

১ম বিট

২য় বিট

0

0

0

1

1

0

1

1

তাহলে দুটি বিট পাশাপাশি রাখলে চারটি আলাদা জিনিস রাখা যায়, 00, 01, 10 11। এবারে তোমার জন্য কাজ। খাতাকলম নিয়ে বসে পরো এবং তিনটি ও চারটি বিটের ক্ষেত্রে কতটি করে আলাদা জিনিস রাখা সম্ভব সেটি বের করো। উত্তর হবে যথাক্রমে 8 16। তাহলে দাঁড়াচ্ছে 2, 3 4টি করে বিটের ক্ষেত্রে যথাক্রমে 4, 8 16টি পৃথক জিনিস রাখা যায়। তাহলে তোমাদের যেহেতু বুদ্ধিশুদ্ধি বেশি, তোমরা সহজেই বলে দিতে পারবে, 5টি বিটের জন্য 32, 6টি বিটের জন্য 64, 7টি বিটের জন্য 128টি পৃথক জিনিস রাখা সম্ভব। তাহলে 8টি বিটের জন্য কত? উত্তর হবে 256। আর যাদের সামান্য একটু গাণিতিক বুদ্ধি আছে, তারা কিন্তু এতক্ষণে মনে মনে একটি সূত্র বের করে ফেলেছো। nটি বিট থাকলে 2n টি পৃথক জিনিস রাখা সম্ভব।

বাইট শব্দটি নিশ্চয়ই তোমরা শুনেছ? ইংরেজিতে byte। তবে এই শব্দের মানে কিন্তু কামড় নয়, সেটির ইংরেজি bite। আটটি বিট পাশাপাশি রেখে তৈরি হয় একটি বাইট। তাহলে এক বাইটে কতটি আলাদা জিনিস রাখা যায়? আমি জানি তোমরা চট্ করে বলে দিতে পারবে, 256টি।

তোমরা সবাই ক্যারেক্টার টাইপের (char) ভেরিয়েবলের সাথে পরিচিত। তাহলে এখন তোমরা নিশ্চয়ই বুঝতে পারছ যে একটি ক্যারেক্টার টাইপের ভেরিয়েবলে 256টি আলাদা জিনিস রাখা সম্ভব। এজন্যই আমরা বিভিন্ন অক্ষর, সংখ্যা, চিহ্ন এগুলোকে ক্যারেক্টার টাইপের ভেরিয়েবলের মধ্যে রাখি। প্রতিটি অক্ষরের একটি মান রয়েছে যাকে সংখ্যা দিয়ে প্রকাশ করা যায়। যেমন a-এর মান 97, b-এর মান 98, c-এর মান 99, এভাবে z-এর মান 122। আবার A-এর মান 65, B-এর মান 66, C-এর মান 67, এভাবে Z-এর মান 90, 0 থেকে 9 পর্যন্ত চিহ্নগুলোর মান যথাক্রমে 48 থেকে 57। এই মানগুলোকে বলে ASCII মান। ASCII হচ্ছে American Standard Code for Information Interchange-এর সংক্ষিপ্তরূপ। ইংরেজি সমস্ত অক্ষর, চিহ্ন সবগুলোরই ASCII মান রয়েছে। এখন তোমার মনে প্রশ্ন জাগতে পারে, পৃথিবীর বাকী ভাষাগুলো কী দোষ করল? তাদের সব অক্ষরের জন্য ASCII মান নেই কেন? আসলে 8 বিটে আমরা তো মোটে 256টি জিনিস রাখতে পারি, তাই সবার জায়গা দেওয়া সম্ভব হয় নি। অন্য সব ভাষার জন্য রয়েছে Unicode

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

আমাদের প্রথম প্রোগ্রামঃ

#include <stdio.h>

int main()

{

    int i;

    for (i = 33; i <= 126; i++) {

        printf(“ASCII code for %c is %dn”, i, i);

    }

    return 0;

}

আমাদের দ্বিতীয় প্রোগ্রামঃ

#include <stdio.h>

int main()

{

    char small_letter, capital_letter;

    printf(“Please enter a small letter: “);

    small_letter = getchar();

    capital_letter = small_letter – 32;

    printf(“The capital letter is: %cn”, capital_letter);

    return 0;

}

এখন তোমার কাজ হবে একটি ফাংশন লেখা, যেটি প্যারামিটার হিসেবে একটি ক্যারেক্টার টাইপের ভেরিয়েবল নিবে এবং সেটি যদি কোনো অঙ্ক (digit) হয়ে, তবে 1রিটার্ণ করবে, আর না হলে 0 রিটার্ণ করবে। কাজ শেষ হলে চলো, আমরা মেমোরি নিয়ে আলাপআলোচনায় ফেরত যাই।

ইন্টিজার টাইপের ভেরিয়েবলের আকার হচ্ছে চার বাইট, মানে 32 বিট। এই 32 বিটে আমরা 232টি বা 4294967296টি সংখ্যা রাখতে পারি। এখন আমরা যদি কেবল ধনাত্মক সংখ্যা রাখতে চাই, তাহলে 0 থেকে 4294967295 পর্যন্ত রাখা যাবে। এ ধরণের ভেরিয়েবলকে বলে unsigned ভেরিয়েবল। আর যেসব ভেরিয়েবলে ধনাত্মক ও ঋনাত্মক – উভয় প্রকারের সংখ্যা রাখা যায়, তাকে বলে signed ভেরিয়েবল, তবে এক্ষেত্রে আলাদাভাবে সেটির উল্লেখ থাকে না। তাহলে আমরা বুঝতে পারলাম কেনো int টাইপের ভেরিয়েবলে -2147483648 থেকে 2147483647 পর্যন্ত সংখ্যা রাখা যায় আর কেনো unsigned int টাইপের ভেরিয়েবলে 0 থেকে 4294967295 পর্যন্ত সংখ্যা রাখা যায়।

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

100

101

102

103

104

105

106

107

108

109

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

এবারে নিচের প্রোগ্রামটা ঝটপট টাইপ করে রান করো। কম্পাইল করার সময় ওয়ার্নিং দেখাবে, সেটিকে এড়িয়ে যাবে এবং প্রোগ্রামটি রান করবে।

#include <stdio.h>

int main()

{

    char ch1 = ‘A’, ch2 = ‘B’;

    int n1 = 100, n2 = 100000;

    unsigned int address1 = &ch1;

    unsigned int address2 = &ch2;

    unsigned int address3 = &n1;

    unsigned int address4 = &n2;

    printf(“%c, %un”, ch1, address1);

    printf(“%c, %un”, ch2, address2);

    printf(“%d, %un”, n1, address3);

    printf(“%d, %un”, n2, address4);

    return 0;

}

আউটপুট কী? একেক জনের আউটপুট একেক রকম হবে, কারণ মেমোরির কোন জায়গায় কোন ভেরিয়েবল থাকবে, তার কোনো ঠিক নেই। এখন তোমরা লক্ষ করো, কোনো ভেরিয়েবল যদি n হয়, তবে তার এড্রেস হচ্ছে &n। একারণের আমরা scanf ফাংশন ব্যবহার করে কোনো ভেরিয়েবল ইনপুট নেওয়ার জন্য ভেরিয়েবলের নামের আগে & চিহ্ন ব্যবহার করি। কিন্তু অ্যারের বেলাতে সেটি করতে হয় না, কারণ অ্যারের নামটিতেই অ্যারের শুরুর এড্রেসটি থাকে। অর্থাৎ কোনো অ্যারে যদি হয় int ara[10], সেখানে ara-এর মান প্রিন্ট করলেই অ্যারের এড্রেস পাওয়া যায়।

এখন তুমি নিচের প্রোগ্রামটিও আগের মতো রান করবে (ওয়ার্নিং দেখালে পাত্তা দেওয়ার দরকার নেই)

#include <stdio.h>

int main()

{

    int ara[5] = {50, 60, 70, 80, 90};

    printf(“%d, %d, %d, %d, %dn”, ara[0], ara[1], ara[2], ara[3], ara[4]);

    printf(“%un”, ara);

    printf(“%un”, &ara[0]);

    printf(“%un”, &ara[1]);

    return 0;

}

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

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

#include <stdio.h>

int main()

{

    int num;

    char ch;

    double d_num;

    float f_num;

    printf(“%lun”, sizeof(int));

    printf(“Size of int: %dn”, sizeof(num));

    printf(“Size of char: %dn”, sizeof(ch));

    printf(“Size of double: %dn”, sizeof(d_num));

    printf(“Size of float: %dn”, sizeof(f_num));

    return 0;

}

এখন চলো জেনে নিই, কম্পিউটারে কয় ধরনের মেমোরি আছে।

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

কম্পিউটারের প্রসেসরের মধ্যেও কিন্তু মেমোরি আছে, প্রসেসরের সবচেয়ে কাছে থাকে রেজিস্টার, আর তার পরেই থাকে ক্যাশ মেমোরি। সি ল্যাঙ্গুয়েজে আমরা চাইলে কোনো ভেরিয়েবলকে রেজিস্টারে রাখার জন্য এভাবে ডিক্লেয়ার করতে পারি: register int number;। সেসব ভেরিয়েবলকেই আমরা রেজিস্টারে রাখার চেষ্টা করবো যেগুলো প্রোগ্রামের ভেতরে সবচেয়ে বেশি ব্যবহার করা হয়। তবে আজকাল রেজিস্টারে এভাবে না রাখলেও চলে, কম্পাইলারগুলো নিজেরাই বুঝে নেয় কোন ভেরিয়েবল কোথায় রাখতে হবে। রেজিস্টারের চেয়ে ক্যাশ মেমোরির আকার বড়, মানে বেশি তথ্য ধারণ করতে পারে, তবে গতি একটু কম। তারপরে আসে RAMRAM প্রসেসরের বাইরে মাদারবোর্ডে সংযুক্ত থাকে। ক্যাশের তুলনায় RAM-এর আকার বেশ বড়, তবে গতিও কম। এখন তোমরা প্রশ্ন করতে পারো, রেজিস্টার আর ক্যাশের আকার আরো বেশি হলে কী সমস্যা ছিল? শুধু শুধু RAM-এর ব্যবহার কেন করছি? আসলে রেজিস্টার মেমোরি তৈরিতে খরচ সবচেয়ে বেশি, তারপরে ক্যাশ মেমোরি। RAM তাদের তুলনায় বেশ সস্তা। RAM-এর পরে আসে ভার্চুয়াল মেমোরি। RAM-এ যখন জায়গা হয় না, তখন হার্ডডিস্কের একটা অংশকে কম্পিউটারের অপারেটিং সিস্টেম মেমোরি হিসেবে ব্যবহার করতে দেয় প্রোগ্রামগুলোকে। সেটা অবশ্যই RAM-এর তুলনায় ধীর গতির। নিচের ছবিটির দিকে একবার চোখ বুলিয়ে নাওঃ

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

 

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

উবুন্টুতে ফ্লাস্ক ইনস্টল করার প্রক্রিয়া

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

প্রথমে চেক করতে হবে কম্পিউটারে উবুন্টুর সব প্যাকেজ হালনাগাদ করা হয়েছে কী না। না হলে আপডেট করে নিতে হবে। এর জন্য সহজ কমান্ড হচ্ছে :
sudo apt-get update && sudo apt-get upgrade

এখন পাইথন ও পিপ (pip) ইনস্টল করবো :

sudo apt-get install build-essential python-dev python-pip

তারপরের কাজ হচ্ছে ভার্চুয়াল এনভারনমেন্ট ইনস্টল করা।
sudo pip install virtualenv

এটি দরকারি এজন্য যে একেক প্রজেক্ট একেক সময়ে করা হয়, তাই সেই প্রজেক্টের জন্য দরকার মডিউল আলাদা করে ফেলা উচিত, যাতে পরবর্তি সময়ে অন্য প্রজেক্টে কাজ করার সময় কনফ্লিক্ট তৈরি না হয়।

এখন যেই ডিরেক্টরিতে অ্যাপ্লিকেশনটি রাখা হবে, সেটি তৈরি করে ফেলা যাক :

sudo mkdir -p /var/www/myapp

এখন পারমিশন পরিবর্তন করতে হবে। আমার ক্ষেত্রে ইউজার আইডি হচ্ছে www-data, ইউজার গ্রুপও হচ্ছে www-data। আপনার ক্ষেত্রে সেটি অন্যরকম হতে পারে। লক্ষ্য রাখতে হবে যে অনেক সময় ফাইল পরিবর্তন করলে সেটি রুট বা অন্য ইউজার-এর হয়ে যায়, তাই পরীক্ষা করতে হবে যে myapp ডিরেক্টরির সব ফাইল এবং সাব-ডিরেক্টরির পারমিশন ঠিক আছে কী না।
sudo chown -R www-data:www-data /var/www/myapp
cd /var/www/myapp

এখন ভার্চুয়াল এনভারমেন্ট তৈরি করি।
virtualenv venv --no-site-packages

ভার্চুয়াল এনভারমেন্ট একটিভেট করে সেখানে ফ্লাস্ক ইনস্টল করি।
source venv/bin/activate
pip install flask

এখানে আমরা আমাদের ফ্লাস্ক অ্যাপটি রাখবো।

লক্ষ্য রাখতে হবে যে হোস্ট সেট করতে হবে 0.0.0.0 তে (127.0.0.1-এ নয়)। আর অ্যাপ্লিকেশনের শুরুটা রাখতে হবে if __name__ == ‘__main__’: ব্লকের ভিতরে।

এরপরের কাজ হচ্ছে ওয়েব সার্ভার ইনস্টল করা (যদি ইনস্টল করা না থাকে)। আমি সাধারণত ইঞ্জিন-এক্স ব্যবহার করি। আর ইনস্টল করার আগে ভার্চুয়াল এনভারমেন্ট ডিএকটিভেট করে নিতে হবে এই কমান্ড দিয়ে :
deactivate
sudo apt-get install nginx

এখন আমি uwsgi ইনস্টল করবো, এটি ইঞ্জিনএক্স ও আমার ফ্লাস্ক অ্যাপ্লিকেশনের মধ্যে একটি যোগসূত্র তৈরি করে দিবে, মানে এটিই আমার ফ্লাস্ক অ্যাপ্লিকেশনকে চালাবে। এর ব্যবহার বাধ্যতামূলক নয়, তবে ব্যবহার করলে ভালো। 🙂

sudo apt-get install uwsgi uwsgi-plugin-python

এখন একটা সকেট ফাইল তৈরি করা লাগবে যার মাধ্যমে ইঞ্জিনএক্স, uwsgi-এর সাথে যোগাযোগ করবে।
cd /tmp/
touch mapp.sock

ফাইলের পারমিশন পরিবর্তন করতে হবে যাতে ইঞ্জিনএক্স সেটি চালাতে পারে।
sudo chown www-data:www-data myapp.sock

এরপর ইঞ্জিনএক্সের কনফিগারেশন ফাইল তৈরি করতে হবে। এর জন্য প্রথমে /etc/nginx/sites-available ডিরেক্টরিতে যেতে হবে নিচের কমান্ড দিয়ে :
cd /etc/nginx/sites-available

তারপরে ডিফল্ট যেই কনফিগারেশন ফাইল আছে, সেটি মুছে ফেলতে হবে বা সরিয়ে রাখতে হবে।
sudo mv default _default

এবারে নতুন কনফিগারেশন ফাইল তৈরির জন্য আমরা নিচের কমান্ড ব্যবহার করতে পারি :
sudo vi myapp
এটি vi এডিটর দিয়ে খুলবে, চাইলে অন্য এডিটরও ব্যবহার করা যায়।

এখন নতুন ফাইলে নিচের জিনিসগুলো পেস্ট করতে হবে :

server {
    listen 80;
    server_tokens off;
    server_name myapp.com;

    location / {
        include uwsgi_params;
        uwsgi_pass unix:/tmp/myapp.sock;
    }

    location /static {
        alias /var/www/myapp/static;
    }
}

এখানে লক্ষ্যণীয় যে static ফাইলগুলো রাখার জন্য /var/www/myapp/static ডিরেক্টরি ব্যবহার করা হয়েছে। আপনি আপনার প্রয়োজনমতো ডিরেক্টরি তৈরি করে সেই লোকেশন এখানে লিখবেন।

যেই কনফিগারেশন ফাইলটি তৈরি করলাম, তার একটি লিঙ্ক তৈরি করতে হবে /etc/nginx/sites-enabled ডিরেক্টরিতে। এর জন্য নিচের কমান্ড দিতে হবে :
sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/myapp

এবারে uwsgi এর জন্যও একটি কনফিগারেশন ফাইল তৈরি করা লাগবে, লোকোশনসহ ফাইলটি হচ্ছে /etc/uwsgi/apps-available/myapp.ini

ফাইলে নিচের জিনিসগুলো লিখতে হবে:

[uwsgi]
vhost = true
socket = /tmp/myapp.sock
venv = /var/www/myapp/venv
chdir = /var/www/myapp
module = api
callable = app

মডিউল হচ্ছে পাইথন স্ক্রিপ্ট যেই ফাইলে আছে তার নাম আর কলেবল হচ্ছে ওই স্ক্রিপ্টে যেই ফ্লাস্ক অবজেক্ট তৈরি করা হয়েছে। উদাহরণস্বরূপ নিচের স্ক্রিপ্টটি আমরা দেখি:

from flask import flask
app = Flask(__name__)

@my_app.route('/')
def hello_world():
    return 'Hello World!'

if __name__ == '__main__':
    app.run(host='0.0.0.0')

এটি যদি api.py নামের ফাইলে সেভ করা হয়, তাহলে কনফিগারেশন ফাইলে module = api এবং callable = app লিখতে হবে।

তারপর নিচের কমান্ড দিয়ে লিঙ্ক করতে হবে:
sudo ln -s /etc/uwsgi/apps-available/myapp.ini /etc/uwsgi/apps-enabled/myapp.ini

সবশেষে nginx ও uwsgi আবার চালু করতে হবে।
sudo service nginx restart
sudo service uwsgi restart

সবকিছু ঠিকঠাক হয়ে থাকলে ফ্লাস্ক অ্যাপ্লিকেশনটি এখন কাজ করবে।

পাইকন ঢাকা নিয়ে বিস্তারিত

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

banner

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

2

অনুষ্ঠানটি শুরু হয় সকাল ৯:৩০ মিনিটে। অনুষ্ঠানটি পরিচালনা করেন তামিম শাহরিয়ার সুবিন। অনুষ্ঠানটিতে ছিল মোট দুটি প্রেজেন্টেশন সেশন। প্রতি সেশনে ৫টি করে ভিন্ন ভিন্ন পাইথন লাইব্রেরী নিয়ে বক্তারা আলোচনা করেন। প্রথম সেশন শুরু হয় বেলা ১০:০০ টায়। এই সেশনের প্রথম বক্তা মাফিনার খান। তিনি বর্তমানে প্যানাসিয়া সিস্টেমস লিমিটেড এ প্রডাক্ট ম্যানেজার হিসেবে কর্মরত আছেন। তিনি আলোচনা করেন পাইথন প্রোগ্রামিং ভাষার আকর্ষণীয় সব ফিচার নিয়ে।

4

পরবর্তি প্রেজেন্টেশন এর বিষয় ছিল রেস্ট এপিআই (REST API)। ‘টেস্ট ইওর রেস্ট এপিআই’ শীর্ষক এই প্রেজেন্টেশনের বক্তা মুক্ত সফটওয়্যার লিমিটেড এর ব্যাবস্থাপনা পরিচালক তামিম শাহরিয়ার সুবিন। রেস্ট এপিআইয়ের পরে পাইথনের লাইব্রেরী বিউটিফুলসুপ (BeautifulSoup) এর উপরে প্রেজেন্টেশন প্রদান করেন নর্থ সাউথ বিশ্বিবিদ্যালয়ের শিক্ষার্থী ইনাম মিজবাহ নূর। তিনি তার বক্তব্যে দেখান কিভাবে বিউটিফুলসুপ ব্যবহার করে HTML পার্সিং করা যায়। ওয়েব ক্রলিং ও স্ক্র্যাপিংয়ের জন্য বিউটিফুলসুপ একটি জনপ্রিয় লাইব্রেরী।

8

‘জ্যাঙ্গো ইন লার্জ স্কেল অটোমেশন’ শিরোনামে পরবর্তি প্রেজেন্টেশন উপস্থাপন করেন মুক্ত সফটওয়্যার লিমিটেড এর সিটিও মাহফুজুর রহমান মাসুম। জ্যাঙ্গো হচ্ছে পাইথনে তৈরী জনপ্রিয় একটি ওয়েব ডেভেলপমেন্ট ফ্রেমওয়ার্ক যার সাহায্যে অনেক সহজে খুব বড় স্কেলের প্রজেক্ট তৈরী করা যায়।

9

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

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

10

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

12

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

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

11

5

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

1314

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

banner-logo

অনুষ্ঠানে অংশগ্রহণকারী সকলকে স্পনসরদের পক্ষ থেকে টি-শার্ট, গিফট প্যাক ও দুপুরের খাবার সরবরাহ করা হয়। পাইকন ঢাকা ২০১৪-এর স্পন্সর ছিলো নিউজক্রেড, ওয়াইডস্পেস, বিডিজবস, মুক্তসফট, ফাইন্ডার এলবিএস, অনলাইন কেনাকাটা, ট্রান্সেনডিও ও নেসক্যাফে। অনুষ্ঠানের সমাপ্তি ঘোষনা করে আয়োজকরা বলেন, ‘বাংলাদেশে এই প্রথমবারের মত আমরা পাইথন ডেভেলপারদের জন্য আন্তর্জাতিক ভাবে স্বীকৃত পাইকন ঢাকা ২০১৪ করেছি। অনুষ্ঠানে উপস্থিত সকলের উৎসাহ ও উদ্দীপনা দেখে আমরা অভিভূত’। তারা ভবিষ্যতে পাইথন প্রোগ্রামারদের আরো বড় সম্মেলন আয়োজন করার ইচ্ছা ব্যাক্ত করেন। তারা আরো জানান, dhaka.pycon.org ইউআরএল এ ইভেন্টের বিস্তারিত তথ্য জানা যাবে।

6

উন্নয়নশীল দেশের জন্যে ফেসবুকের অ্যান্ড্রয়েড অ্যাপে পরিবর্তন

facebook-645x250

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

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

  • অ্যাপটি চালু হতে ৫০ শতাংশ কম সময় নিবে
  • অ্যাপটি ৫০ শতাংশ কমে ইন্টারনেট ডাটা খরচ করবে
  • ফেসবুকে অ্যাপের ইমেজ লোড ব্যর্থতার পরিমাণ ৯০ শতাংশ হ্রাস করবে
  • অ্যাপটির আকার ৬৫ শতাংশ পর্যন্ত হ্রাস করা হয়েছে

এই সকল ক্ষেত্রে উন্নত করতে ফেসবুককে নানা ধরনের সমাধানের আশ্রয় নিতে হয়েছে। যার মধ্যে আছে গুগলের নতুন ইমেজ ফরম্যাট ওয়েবপি এর ব্যবহার যা কিনা ইতোমধ্যে গুগল ক্রোম এবং অপেরা ম্যাক্স ব্রাউজারে ব্যবহার করা হয়। এই ইমেজ ফরম্যাট ব্যবহারের ফলে ফেসবুকে ইমেজ ক্ষেত্রে ডাটা বাচবে প্রায় ২৫-৩৫ শতাংশ জেপিজি এর তুলনায় এবং পিএনজি এর তুলনায় ৮০ শতাংশ। আর এর সবকিছুই সম্ভব হবে ছবির মানের উপর কোন প্রকার খারাপ প্রভাব না ফেলে।

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

এছাড়া ইমেজ লোডিং ব্যর্থতার মান কমাতে তারা নতুন নেটওয়ার্ক কনসেপ্ট তাদের মোবাইল অ্যাপে ব্যবহার করা শুরু করেছে। যা হল OkHttp।

ফেসবুকের ইঞ্জিনিয়ারিং ম্যানেজার এলেক্স সৌরভ এ বিষয়ে বলেন, “আমাদের উদ্দেশ্য শুধুমাত্র উচ্চমানের স্মার্টফোন এবং উন্নত এলটিই নেটওয়ার্কে ভাল অভিজ্ঞতা দেয়া নয়। আমরা চাই ফেসবুক সকলের জন্যে কাজ করুক- তা যেই অঞ্চল হোক না কেন, নেটওয়ার্ক এর অবস্থা যাই হোক না কেন এবং যেই মোবাইল ফোনই হোক না কেন।”

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

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

প্রোগ্রামিং কনটেস্ট

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

কম্পিউটার প্রোগ্রামিং চর্চাকে উৎসাহ দেওয়ার জন্য সারা পৃথিবীতে বিভিন্ন ধরনের প্রোগ্রামিং প্রতিযোগিতার আয়োজন করা হয়। প্রাক-বিশ্ববিদ্যালয় পর্যায়ের শিক্ষার্থীদের জন্য সবচেয়ে বড় আয়োজনের নাম হচ্ছে ইনফরমেটিক্স অলিম্পিয়াড আর বিশ্ববিদ্যালয় পর্যায়ের শিক্ষার্থীদের অংশগ্রহনে সবচেয়ে বড় প্রতিযোগিতার নাম আইসিপিসি (ইন্টারন্যাশনাল কলেজিয়েট প্রোগ্রামিং কনটেস্ট)। আইসিপিসি’র মূল আয়োজক হচ্ছে এসিএম (ACM: এসোসিয়েশন অব কম্পিউটার মেশিনারিজ), তাই একসাথে একে এসিএম আইসিপিসি বলা হয়ে থাকে।

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

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

প্রোগ্রামিং প্রতিযোগিতায় আসলে কী হয়? এসিএম আইসিপিসি বা এই ধরনের প্রতিযোগিতায় তিনজন প্রোগ্রামার মিলে একটি দল হিসেবে অংশগ্রহন করে। প্রতিটি দলকে দেওয়া হয় একটি কম্পিউটার, এক সেট প্রোগ্রামিং সমস্যা (৯ থেকে ১২ টি) এবং সেগুলো সমাধানের জন্য ৫ ঘণ্টা সময়। নির্দিষ্ট সময়ের মধ্যে যেই দল সবচেয়ে বেশি সংখ্যক সমস্যার সমাধান করতে পারে, সেই দল বিজয়ী হয়। সমান সংখ্যক সমস্যার সমাধান করলে যারা কম সময়ে করেছে এবং পেনাল্টি কম (সমাধান ভুল হলে ২০ মিনিট পেনাল্টি হয়), তারা rank-list-এ ওপরে থাকে। সমস্যাগুলোর মধ্যে একটি সমস্যা এমন দেওয়া হয় যেন সেটি সব দলই সমাধান করতে পারে, আরেকটি থাকে এমন যাতে কোনো দলই সমাধান করতে না পারে।

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

প্রোগ্রামিং প্রতিযোগিতায় অংশ নিতে কী জানা লাগবে? প্রথমেই একটি প্রোগ্রামিং ভাষায় উপর ভালো দখল প্রয়োজন। সি (C) বা সি প্লাস প্লাস (C++) এক্ষেত্রে সবচেয়ে ভালো। কারণ এ দুটি ভাষা মোটামুটি সব ধরণের প্রোগ্রামিং প্রতিযোগিতায় ব্যবহার করা হয়। অনেকক্ষেত্রে জাভাও ব্যবহার করা যায়, তবে কিছু কিছু সমস্যার সমাধান জাভা দিলে লেখা হলে সেগুলো রান করতে বেশি সময় লাগে। সি এর চেয়ে সি প্লাস প্লাস ব্যবহার করা বুদ্ধিমানের কাজ এই জন্য যে সেখানে এসটিএল (STL : স্ট্যান্ডার্ড টেমপ্লেট লাইব্রেরি) বলে খুব কার্যকরী লাইব্রেরি আছে, যেটির ব্যবহার কিছু কিছু ক্ষেত্রে অনেক সময় বাঁচিয়ে দেয়। তবে সি এবং সি প্লাস প্লাস-এর মধ্যে মিল অনেক বেশি এবং সি দিয়ে প্রোগ্রামিং শেখা শুরু করলে সি প্লাস প্লাস শিখতে খুব একটা সময় লাগবে না। প্রোগ্রামিং প্রতিযোগিতায় যারা অংশগ্রহন করতে ইচ্ছুক, তাদের কথা মাথায় রেখে অনলাইনে একটি প্রোগ্রামিং কোর্স তৈরি করা হয়েছে, সেটিতে অংশ নেওয়ার জন্য যেতে হবে এখানে : http://dimikcomputing.com/course/introduction-to-programming-online-course/ , কোর্সটি সবার জন্য বিনামূল্যে দেওয়া আছে এবং নিজের সুবিধামতো সময়ে সেটি করা যাবে। তারপর কোর্সটি করা শেষ হলে কিংবা প্রোগ্রামিং ভাষা মোটামুটি শেখা হলে প্রবলেম সলভ করা শুরু করতে হবে। শুরুটা করার জন্য এখানে কিছু প্রোগ্রামিং সমস্যা আছে যেগুলোর বর্ণনা বাংলাতে লেখা : http://goo.gl/wsJPQV

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

CodeForces (http://codeforces.com/)
TopCoder (http://www.topcoder.com/)
CodeChef (https://www.codechef.com/)
SPOJ (http://www.spoj.com/)
LightOJ (http://lightoj.com)

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

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

প্রোগ্রামিং ল্যাঙ্গুয়েজ শেখার পরে শিখতে হবে ডাটা স্ট্রাকচার আর অ্যালগরিদম। এগুলো ভালো বুঝার জন্য আবার ডিসক্রিট ম্যাথ বা বিচ্ছিন্ন গণিতের উপর ভালো দখল থাকা চাই। ডিসক্রিট ম্যাথ বিশ্ববিদ্যালয়গুলোর কম্পিউটার বিজ্ঞান বিভাগের সিলেবাসে আছে। আর নিজে নিজে শিখতে চাইলে বইয়ের সাহায্য নেওয়া যায় কিংবা অনলাইনে ডিসক্রিট ম্যাথের উপর একটি ফ্রি কোর্স আছে, সেটিতে অংশ নেওয়া যায় : http://dimikcomputing.com/course/discrete-mathematics-online-course/। ডাটা স্ট্রাকচার এবং  অ্যালগরিদম শেখার সময় বেশ কয়েকটি বই পড়তে হবে। আর প্রতিটি অ্যালগরিদম শেখার পরে সেই অ্যালগরিদম ব্যবহার করে কয়েকটি সমস্যা সমাধান করে ফেলতে হবে। ইন্টারনেটে এরকম কিছু তালিকা পাওয়া যায় যে একটি অ্যালগরিদম দিয়ে কোন কোন ওয়েবসাইটে কোন কোন সমস্যাগুলো সমাধান করা যায়। অ্যালগরিদম ছাড়াও গণিতের বেশ কিছু বিষয়ে ভালো দখল থাকতে হবে। যেমন : জ্যামিতি, সংখ্যাতত্ত্ব, কম্বিনেটরিক্স। তবে এগুলো আলাদাভাবে না শিখে এই সংক্রান্ত প্রবলেম সলভ করতে করতে শেখাটাই বেশি কার্যকরি – এমন মতামত দিয়েছেন মীর ওয়াসি আহমেদ, যিনি বুয়েটে সিভিল ইঞ্জিনিয়ারিংয়ের ছাত্র থাকাকালীন অংশ নিয়েছেন এসিএম আইসিপিসি’র চূড়ান্ত পর্বে (২০১২ সালে)। তাঁর মতে প্রথমে একটি সমস্যা নিয়ে সেটি নিজে সমাধানের চেষ্টা করতে হবে। যথেষ্ট সময় চেষ্টা করার পরে সেটি সমাধান করতে না পারলে, সেটির সমাধান দেখে শিখে নিতে হবে। নিজে কোড লেখার পাশাপাশি অন্যের লেখা কোড পড়ে বোঝাটাও অনের দরকারি।

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

ব্যক্তিগত দক্ষতা অর্জনের পরে নজর দিতে হবে দলীয় দক্ষতা বাড়ানোর প্রতি। যেহেতু তিনজন মিলে একটি দল এবং সেই দলের জন্য একটি মাত্র কম্পিউটার ও একসেট প্রশ্ন, তাই দলের সদস্যদের মধ্যে চমৎকার বোঝাপড়া থাকা চাই। দল হিসেবে বিভিন্ন অনলাইন প্রতিযোগিতায় অংশ নিতে হবে। সেখানে অংশ নেওয়ার সময় খেয়াল রাখতে হবে যে তিনজন মিলে যেন একটি কম্পিউটার ব্যবহার করে। সমস্যাগুলোও একসেট প্রিন্ট করে সেটি ব্যবহার করা উচিত। দলের প্রত্যেক সদস্যের অপর সদস্যদের শক্তি ও দুর্বলতা সম্পর্কে জানতে হবে। যেই বিষয়ের উপর যে দক্ষ, সেই বিষয়ের সমাধানের দায়িত্ব তার উপরই দেওয়া উচিত। আর অনেক সময় একটি প্রবলেম নিয়ে দুজন মিলে আলোচনা করলে দ্রুত সমাধান চলে আসে। প্রোগ্রামিং কনটেস্টের দলগত কৌশলের ব্যাপারে একটি চমৎকার লেখা আছে, টিমওয়ার্ক ইন প্রোগ্রামিং কনটেস্ট (লিঙ্ক : http://goo.gl/wBPBON)। এটি সবার পড়া আবশ্যক।

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

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

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

বি.দ্র. আমার এই লেখাটি প্রথম আলো’র প্রজন্ম ডট কম পাতায় প্রকাশিত হয় ২০ জুন ২০১৪ তারিখে।

প্রোগ্রামিং প্রতিযোগিতার প্রস্তুতির জন্য দ্বিমিক প্রকাশনীর তিনটি বই –