Go Back to All Articles আমি যা যা জানি, ব্যাবহার করি ও যা শিখতে চাই

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

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

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

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

১) প্রাথমিক গণিতঃ আমি এটি শিখেছি স্কুলে। ক্লাস ১০ পর্যন্ত যা শিখেছি, প্রাত্যহিক প্রোগ্রামিংএ এর বেশি আমার খুব একটা কখনো লাগেনি। কলেজ ও ইউনিভার্সিটি তে এসে এই গণিত আরও ঝালাই হয়েছে।

২) ইংরেজিঃ আমি এটাও শিখেছি স্কুলে, আর কলেজ, ইউনিভার্সিটিতে এসে এটাও আরও ভালোভাবে রপ্ত হয়েছে।

৩) কম্পিউটার ফান্ডামেন্টালঃ এটা আমি শিখেছি আমার ইউনিভার্সিটির প্রথম সেমিস্টারে।

৪) ডাটা স্ট্রাকচারঃ এটা আমি শিখেছি আমার ইউনিভার্সিটির ২য় সেমিস্টারে।

৫) সি প্রোগ্রামিং ভাষাঃ এটা আমি শিখেছি ইউনিভার্সিটির ২য় সেমিস্টারে।

৬) সি++ প্রোগ্রামিং ভাষাঃ এটা আমি শিখেছি ইউনিভার্সিটির ৩য় সেমিস্টারে। এই সেমিস্টারে আমি কম্পিটিটিভ প্রোগ্রামিং শুরু করি আর ইউনিভার্সিটির শেষ পর্যন্ত এর সাথে যুক্ত ছিলাম।

৭) এলগরিদমঃ এটা আমি শিখেছি ইউনিভার্সিটির ৩য় সেমিস্টারে।

৮) জাভা ও SOAP: এটা শিখেছি ইউনিভার্সিটির ৫ম সেমিস্টারে।

৯) Oracle ডেটাবেস ও SQL: এটা আমি শিখেছি ইউনিভার্সিটির ৫ম সেমিস্টারে।

১০) C#, Asp.Net, SQL Server ও Visual Studio নিয়ে কাজঃ এটা আমি শিখেছি ইউনিভার্সিটির ৬ষ্ঠ সেমিস্টারে থাকাকালীন নিজে নিজে, পরে ইউনিভার্সিটির ৮ম সেমিস্টারে কোর্স ও করা হয়েছে। আমার ক্যারিয়ারে Asp.Net মূল ভূমিকা পালন করে আর এখনো আমি নিজেকে Asp.Net এই বেশি কাজ করতে দেখতে পাই। এটাকেই আমি প্লাটফর্ম হিসাবে বেছে নিয়েছিলাম ক্যারিয়ারে।

১১) Flash ও Action Script: এটা আমি শিখেছি ইউনিভার্সিটির ৬ষ্ঠ সেমিস্টারে থাকাকালীন নিজে নিজে

১২) HTML, XML ও CSS: এটা আমি শিখেছি ইউনিভার্সিটির ৬ষ্ঠ সেমিস্টারে থাকাকালীন নিজে নিজে, পরে লাস্ট সেমিস্টারে একটা কোর্স ও করেছি ওয়েব ডেভেলপমেন্ট নামে।

১৩) JavaScript: এটা আমি শিখেছি ইউনিভার্সিটির ৬ষ্ঠ সেমিস্টারে থাকাকালীন নিজে নিজে

১৪) Object Oriented Design, UML, Design Pattern: ৩য় বর্ষে একটি কোর্স করতে গিয়ে এই বিষয়ে বিস্তারিত লেখাপড়া করা হয়, তবে অনেক আগেই ৩য় সেমিস্টারে C++ করার সময় স্যার আমাকে অনুপ্রেরণা দিয়েছিলেন ২টি বই পড়ার সেখান থেকে আগেই কিছুটা জানা ছিল। বই ২টি ছিলঃ Head First Design Pattern আর Gang of Four এর প্রসিদ্ধ Design Patterns বই। তবে এই বই বহুবার পড়েও ইউনিভার্সিটি লাইফে আমি আসলে কিছুই বুঝতে পারিনি। কারণ তখন আমাকে বুঝিয়ে দেয়ার মত কেউ ছিল না, Youtube, Stackoverflow, Facebook বা অন্য কোন ভালো ফোরাম তখনকার সময় ছিল না। কাজেই নিজে পড়ে যা বুঝেছি তাই সম্বল ছিল তবে আমি চেষ্টার পর চেষ্টা করে গেছি। জব লাইফের ৩য় বছর আমি নিজের Reusable Code Library তৈরি করার প্রয়োজনীয়তা অনুভব করি। আর এই কাজটি করতে গিয়ে আমার ভুলগুলো আমি বুঝতে পারি আর ধাপে ধাপে আমি বিষয়গুলো বুঝে উঠি। এতে আমার প্রায় ৫ বছর সময় লেগেছে, প্রাথমিক ভাবে এই বিষয়গুলো মোটামুটি বুঝতে। পরে কাজ করতে করতে আরও শেখা হয়েছে। ১০ বছর পর আমি মনে করি বিষয়গুলো আমি বুঝি। তবে এখনও অনেক কিছু শেখার মত আছে।

১৫) Linux, Sun Solaris: এগুলো শিখেছি প্রাথমিকভাবে ইউনিভার্সিটির শেষ সেমিস্টারে। পরে কাজ করতে করতে Linux আরও ভালোভাবে শিখা হয়েছে। আমার প্রথম জব ছিল Linux প্লাটফর্মে।

১৬) PHP, MySQL, Ruby, Ruby on Rails, CakePHP, Prado: ইউনিভার্সিটির শেষ সেমিস্টারে এই বিষয়গুলো শিখা হয়। PHP কোর্সে লেগেছে, বাকিগুলো শখের বসে শিখেছিলাম। আমার প্রথম জব ছিল Prado ফ্রেমওয়ার্কে তাই সেটা শিখতে হয়েছে জবে জয়েন করার আগে।

১৭) ভার্শন কন্ট্রোলঃ আমি জব শুরু করে প্রথম এই বিষয়ে ভালোভাবে জানতে পারি। আমি শুরু করেছিলাম CVS দিয়ে তবে এখানেই আমি SVN সম্পর্কে জানতে পারি TopCoder.com এর একটি ব্লগ থেকে আর আমি নিজে এটা ব্যাবহার করা শুরু করি, অফিসেও ব্যাবহার করার জন্য সাজেশন দেই সিনিয়রদের; ২য় জবে কিছু Visual Source Safe ব্যাবহার করি তবে SVN বেশি ব্যাবহার করা হত। Git আমি ব্যাবহার করা শুরু করি যখন আমি ব্যাবসা শুরু করি। আমার কোম্পানিতে এটাকে ষ্ট্যাণ্ডার্ড হিসাবে চালু করি প্রতিষ্ঠানের ২য় বছর থেকে। এখনও ব্যাবহার করছি। Git ক্লায়েন্ট হিসাবে আমি ব্যাবহার করছি Tortoise Git।

১৮) JQuery, JSON: আমি জবের বেশিরভাগ সময়ে এটা পাইনি, মনে হয় শেষের দিকে এসে এটা জনপ্রিয় হয় ও আমি ব্যাবহার করা শুরু করি। এর আগে অন্যান্য ফ্রেমওয়ার্ক ব্যাবহার করতাম। JQuery আসার পর সেগুলো বিলুপ্ত প্রায়, তাই বলে লাভ নেই, তবে সেগুলো শেখার পিছনে অনেক সময় গেছে।

১৯) Silverlight: জবের মাঝামাঝি এই বিষয়ে কিছু ঘাটাঘাটি করা হয়েছে তবে খুব বেশি সময় এর পিছনে দিতে আগ্রহী ছিলাম না, মনে হয় বুদ্ধিমানের কাজ করেছিলাম। কারণ এটিও বিলুপ্ত।

২০) Asp.Net MVC, Xamarin, WCF, Ninject, Log4net, Nhibernet, Entity Framework: প্রতিষ্ঠানের প্রথম বছর থেকেই Asp.Net MVC ফ্রেমওয়ার্ক ব্যাবহার করে প্রোজেক্ট ডেভেলপ শুরু করি। আর ৩য় বছর Xamarin দিয়ে iOS এপ তৈরি করতে হয়েছে। WCF দিয়ে আমাদের ওয়েব সার্ভিসগুলো তৈরি করা হত আগে। এখন Web API চলে এসেছে যদিও। Ninject কে আমি ব্যবহার করেছি Dependency Injection এর জন্য। এখন অবশ্য আরও অনেক ফ্রেমওয়ার্ক চলে এসেছে। Log4net আমার পছন্দ ছিল এরর লগার হিসাবে। এখনও ব্যাবহার করি, তবে এখন আরও নতুন অনেক ফ্রেমওয়ার্ক এসেছে। Nhibernet ও Entity Framework কে আমি ORM হিসাবে ব্যাবহার করে থাকি। তবে Stored Procedure এখনও আমার বেশি পছন্দ।

২১) HTML5: ব্যাবসার ৩য় বছর থেকে এটা নিয়ে ঘাঁটাঘাঁটি শুরু হয়।

২২) Jira, Confluence: প্রজেক্ট ম্যানেজমেন্ট এর জন্য আমি Jira ব্যাবহার শুরু করি ব্যাবসার ৩য় বছরে, এর আগে অন্য একটি টুল ব্যাবহার করতাম। এখনো Jira ব্যাবহার করছি। আর Confluence ব্যাবহার করি Documentation Wiki হিসাবে। তবে এটা ব্যাবহার শুরু করেছি ২ বছর আগে।

২৩) ক্লাউড কম্পিউটিংঃ আমার নিজের ব্যাবসা প্রতিষ্ঠানের জন্য আমি ক্লাউড কম্পিউটিং নিয়ে কাজ শুরু করি। প্রথমে আমি এই বিষয়ে রিসার্চ করি ও পরে আমার টিমের সদস্যদের এই বিষয়ে কাজ শিখাই ও অনুপ্রাণিত করি বিষয়টি শিখতে। আমি প্রথমে Azure দিয়ে শুরু করতে চাইলে পারিনি, কারণ তখন তারা বাংলাদেশে সার্ভিস দিচ্ছিল না তাই আমি AWS এ চলে যাই আর এখনও সেটা ব্যাবহার করছি। এই ক্লাউড সম্পর্কে জানা আমার জন্য অনেক লাভজনক প্রমাণিত হয়েছে। ক্লায়েন্ট পাওয়া থেকে শুরু করে নিজের প্রোজেক্ট তৈরি করা, আর তারপর আমেরিকান কোম্পানিতে কনসালটেন্ট হওয়ার পিছনে এই দক্ষতা আমাকে সাহায্য করেছে। এখন আমি AWS এর পাশাপাশি Azure ও Google Cloud ব্যাবহার করছি। তবে পরের ২টা নিয়ে বেশি সময় এখনও দিতে পারিনি। ইচ্ছা আছে ইন শা আল্লাহ্‌ এই বছরের ভিতর সময় দেবার। এই বিষয়ে ট্রেনিং দেয়াও আমার পক্ষে সম্ভব হয় এই দক্ষতা অর্জনের মাধ্যমে। যেহেতু এখন বাংলাদেশে এই বিষয়ে আর কোন ট্রেনিং চলছে না, তাই এই বিষয়ে ট্রেনিং নিতে হলে অনেকেই আমার সাথে যোগাযোগ করছেন। কিছুদিন আগে (জুন ২০১৮) আমি Samsung R&D Institute Bangladesh এ এই বিষয়ে একটি কর্পোরেট ট্রেনিং সম্পন্ন করেছি।

২৪) Unit Testing ও Mocking Framewrok: Object Oriented Design, UML, Design Pattern এর মত এটা নিয়েও জবে থাকতেই বই পড়া শুরু করি, কিন্তু কিছুই বুঝতে পারছিলাম না যে কিভাবে কাজ করে। আবার বলছি তখন Youtube, Stackoverflow, Facebook ইত্যাদি ছিল না (অন্তত বাংলাদেশে আমরা জানতাম না)। তো আমি হাল ছেড়ে দেই নি। অনেকদিন পর নিজের ব্যাবসা প্রতিষ্ঠানে এই নিয়ে রিসার্চ করা শুরু করি আবার। বেশ কয়েকবার ভুল প্রয়োগের মাধ্যমে বিষয়টি ধীরেধীরে রপ্ত করি। আমি যখন একটি আমেরিকান কোম্পানিতে কনসালটেন্ট হিসাবে যোগ দেই, আমার ২য় দায়িত্ব ছিল Unit Testing টিমে। সেখানে আমি টিম লিড করি ও আমি তাদের জন্য Unit Testing এর জন্য গাইডলাইন তৈরি করি। এখনও সেখানে এটি ব্যাবহার হচ্ছে। কোম্পানির সিনিয়র ভাইস প্রেসিডেন্ট এই বিষয়ে একদিন সরাসরি আমাকে প্রশংসা করেন এবং অন্যদের এই বিষয়ে ট্রেনিং দেবার জন্য বলেন। এর কারণ বিদেশি প্রোগ্রামাররাও অনেকেই সঠিকভাবে Unit Testing করা জানে না। আর এটি কোম্পানির কাছে অনেক গুরুত্বপূর্ণ ছিল। তারা এখন ১ বিলিয়ন ডলার মার্কেট ক্যাপিটাল তৈরি করতে পেরেছে এবং ফরচুন ৫০০ কোম্পানির মধ্যে একটি। তাদের সফলতার পিছনে Unit Testing গুরুত্বপূর্ণ পলিসি হিসাবে কাজ করেছে। Unit Testing নিয়ে কাজ করতে গিয়ে আমি যা যা শিখেছি বা ব্যবহার করেছিঃ VS Test, nUnit, Moq, MS Fake, Shouldly, Ninject Moq ইত্যাদি।

২৫) Docker: Unit Testing টিম থেকে বের হবার পর আমি নিজের ইচ্ছায় Docker শেখা শুরু করি। কিছুদিনের মধ্যেই আমি এই বিষয়ে কাজের সুযোগ পেয়ে যাই আর লুফে নেই।

২৬) Continuous Integration/Continuous Delivery: আমি যখন আমেরিকান কোম্পানিতে কনসালটেন্ট হই। আমার একটি বড় লক্ষ্য ছিল তাদের কাছ থেকে এমন জিনিসগুলো শেখা যেটা আমাদের দেশে শেখা সম্ভব নয়। প্রথমত বই পড়ে এসব পরিপূর্ণভাবে শেখা যায় না। প্রকৃত পরিস্থিতিতে বইগত বিদ্যা অতোটা সহজ সরলভাবে কাজ করে না। কনসালটেন্সির শুরু থেকেই আমি Continuous Integration নিয়ে কাজ শুরু করি যদিও এটা আমার মূল দায়িত্ব ছিল না। কারণ ঐ কোম্পানিতে সবকিছুই Continuous Integration/Continuous Delivery এর মাধ্যমে নিয়ন্ত্রণ হয়। তাই প্রথম থেকেই আমাকে এগুলো ব্যাবহার করতে হয় আর্কিটেক্ট হিসাবে। আর তখন আসলে এটার জন্য আলাদা টিম ছিল না কারণ কোম্পানি আরও ছোট ছিল। কিন্তু এর পর আলাদা টিম তৈরি করা হয় এই বিষয়ে আর Docker নিয়ে কাজ শেষ করে আমি সুযোগ পাই এই টিমে যোগ দেবার। আমি সেটা লুফে নেই কারণ এই বিষয়টি আমার ভালোভাবে জানার আর কোন উপায় ছিল না। এখনও আমি সেই টিমে কনসালটেন্ট আর্কিটেক্ট হিসাবে কাজ করে যাচ্ছি। AWS, Docker এর বাইরে আমাকে যা যা শিখতে হয়েছে, Kubernetes, Jervis, Jenkins, TeamCity আর সামনে Ansible, Terraform নিয়ে আরও গভীরে দেখতে হবে, এখন হালকা জানি এই বিষয়ে।

২৭) Blockchain: কিছুদিন ধরে আমি ব্লকচেইন নিয়ে কাজ শুরু করেছি। আমার এখন সবচেয়ে বড় আগ্রহ এটা নিয়ে কাজ করা। ইতিমধ্যে ইথেরিয়াম দিয়ে কিছু ড্যাপ (DAP) তৈরি করেছি। তবে লাইভ নয়। আর ইচ্ছা আছে কোন নতুন ক্রিপ্টো কারেন্সি তৈরি করার। তবে সময়ের অভাবে আস্তে আগাচ্ছি।

২৮) সামনে আমার যা যা শেখার ইচ্ছা আছেঃ VR Programming with Microsoft Hololens, Drone programming, Robotics, Machine Learning. এই বিষয়গুলো নিয়ে আমার অনেক আগে থেকেই শিখার ইচ্ছা থাকলেও সময়ের অভাবে আমি শিখতে পারিনি। কারণ আমি এখন নিজের ব্যাবসা চালাই। একটি প্রতিষ্ঠানের মালিক হিসাবে আমাকে আগে সেটা দেখতে হয়, টেকনোলজি নিয়ে অন্য টিম মেম্বার চাইলে কাজ করতে পারে, কিন্তু CEO হিসাবে আমার মূল দায়িত্ব বিজনেস পরিচালনা করা। এর জন্য অনেক কাজ করতে হয়, প্ল্যান, বিজনেস মিটিং, টিম মিটিং ইত্যাদি। তাই আমি টেকনোলজি নিয়ে খুব বেশি সময় দিতে পারি না। তারপরও এই বিষয়ে আমার আগ্রহ থাকায় আমি প্রতিনিয়ত শিখে যাচ্ছি আর আশা রাখি যে সামনে উপরের বিষয়গুলো নিয়ে আমার কাজ করা হবে ইন শা আল্লাহ্‌।

আমি এখানেই শেষ করতে চাই। তবে কিছু কথা খুব গুরুত্ব দিয়ে শুনবেন। বর্তমান বিশ্বে এত ধরণের টেকনোলজি চলে এসেছে যে আমি যা জানি টা আসলে ১০% ও কিনা সন্দেহ। তবে আমি সামনে যেতে পেরেছি কয়েকটি মূল দক্ষতার কারনে –

ইংরেজি, প্রোগ্রামিং বিষয়ে বেসিক ধারণা, অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং (OOP Principle, Design Pattern, UML, Architecture), Software Testing, Docker, ক্লাউড কম্পিউটিং। আর বাকি যা আমি জানি তার অবদান অনস্বীকার্য যেমন HTML, JavaScript, Linux Shell Scripting পিছন থেকে আমাকে সবকিছুতে সাপোর্ট দিচ্ছে কিন্তু লাইম লাইটে হয়ত আসছে না। এর মধ্যে অনেক কিছুই যা হালকা পাতলা শিখতে হয়েছে যা এখন ভুলে গেছি বা কাজে লাগেনি বা আগ্রহ ধরে রাখতে পারিনি সেগুলো উল্লেখ করলাম না।

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

মোঃ জালাল উদ্দিন,

প্রতিষ্ঠাতা ও সিইও, ডেভস্কীল.কম

Share with Your Friends