সফটওয়্যার ইন্ডাস্ট্রিতে আসার আগে

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

১) ভার্শন কন্ট্রোল সিস্টেমের ব্যবহার: তোমরা নিশ্চয়ই গিট বা গিটহাবের নাম শুনেছ, না শুনে থাকলে git ও github লিখে গুগলে খোঁজা শুরু কর। খুব সহজ কথায় বললে, গিট হচ্ছে এমন একটি সফটওয়্যার যার মাধ্যমে ভার্শন নিয়ন্ত্রনের কাজটি বেশ সহজে করা যায় এবং সেকারণে অনেকে মিলে একসাথে একটি প্রজেক্ট কাজ করতে সমস্যা হয় না। আর গিটহাব হচ্ছে ওয়েবভিত্তিক একটি সার্ভিস যেখান থেকে বিনামূল্যে গিট ব্যবহার করা যায়। তো গিটহাবে গিয়ে একটু সময় কাটালেই তোমরা এর ব্যবহার শিখে নিতে পার। এছাড়া এই ওয়েবসাইটে গিয়ে তোমরা গিটের ব্যবহার সহজে শিখতে পারবে : https://try.github.io/

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

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

৪) ওয়েবের ধারণা: তুমি সফটওয়্যারের যে বিভাগে বা যে ধরণের সফটওয়্যার নিয়েই কাজ কর না কেন, বর্তমানে তোমার ওয়েবের শক্ত ধারণা থাকার কোনো বিকল্প নেই। ওয়েব কীভাবে কাজ করে সেটা তোমার জানতে হবে। বিভিন্ন অংশের কাজের ওপর স্বচ্ছ ধারণা থাকতে হবে। ওয়েবের ধারণা অর্জনের জন্য দ্বিমিক কম্পিউটিংয়ের ওয়েব কনসেপ্টস কোর্সটিই সেরা, এবং এটি বিনামূল্যে করা যাবে এই ঠিকানা থেকে: http://dimikcomputing.com/course/web-concepts-online-course/। আর হ্যাঁ, কোর্সটি সম্পূর্ণ বাংলায়।

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

নতুন দিনের প্রোগ্রামারদের জন্য শুভকামনা।

সফটওয়্যার ডেভেলাপার কোথায় পাব

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

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

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

IMG_3770
তো খাওয়া-দাওয়ার মাঝে কায়কোবাদ স্যার বিভিন্ন গল্প করছিলেন। হঠাৎ আমাকে জিজ্ঞাসা করলেন, “সুবিন, ইন্ডিয়ার সাথে খেলা দেখছ নাকি?”, আমি জবাব দিলাম, “কোন খেলা স্যার?” উনি আর কথা বাড়ালেন না। আসলে খাওয়া-দাওয়ার সময় আমি সেই ম্যাচের কথা আমি মনে করতে চাচ্ছিলাম না। যাই হোক, ভরপেট খাওয়া হলো।

খাওয়ার পরে আমরা বসলাম আড্ডা দিতে। মূল বিষয়, বাংলাদেশের সফটওয়্যার ইন্ডাস্ট্রির অবস্থা (মানে দূরবস্থা আর কী)। বিভিন্ন কোম্পানীর শীর্ষ পদের লোকজন – সবারই এক কথা, ভালো প্রোগ্রামার তো পাই না। তো সবার কথাই শুনছিলাম। দেশে এত এত সিএস গ্রাজুয়েট, কিন্তু ভালো প্রোগ্রামার নাই। মনে পড়ে গেল, মুনির হাসান স্যারের ডায়লগ। একদিন জিজ্ঞাসা করেছিলেন, “সুবিন, বল তো ‘Water water everywhere, but nor any drop to drink’ এটা কে বলে?” জবাব দিলাম, এটা তো Ancient Mariner-এ কবি Coleridge লিখেছেন। মুনির স্যার জিজ্ঞাসা করলেন, কিন্তু এটা কে বলে? আমি বললাম, কে বলে? উনি জবাব দিলেন, থাক আমি আর জবাবটা এখানে লিখলাম না। তো যাই হোক, আরো বেশ কিছু আলোচনা হলো। এমন সময় শাহাদাত স্যার আমাকে ধরলেন। সুবিন, তুমি তো কিছু বলছ না। তোমার কাছ থেকে এবার শুনতে চাই। আমি জিজ্ঞাসা করলাম, “স্যার, চা-কফি’র ব্যবস্থা নাই?” ততক্ষণে দই ও রসমালাই খাওয়া শেষ। পেঁপেঁও ছিল কিন্তু সেটা আর আমার খাওয়া হয়ে ওঠে নাই।

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

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

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

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

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

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

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

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

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

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

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