"We human being, always find a solution, maybe not today, but if you really want to solve a problem, there’s always a way" – Ma Yun @ Stanford, 2013
Tag Archives: system design

কম্পিউটার সায়েন্স ডিগ্রি কি সফটওয়ার ইঞ্জিনিয়ারিং এ কোন কাজে লাগে ?

by Md Imran Hasan Hira

এমন প্রশ্নের সম্মুখীন হয়ে কিছুক্ষণ মার্কামারা পজিশনে বসে ছিলাম। কি করলাম এই জীবনে CSE তে B.Sc. করে! What is life?

যাই হোক, “What is life?” এর দুশ্চিন্তা থেকে বেরুতে একটু সময় লাগল। তবে কিছুক্ষণ ভাবার পরে যা বুঝলাম, তাতে মনে হল প্রশ্নটা একেবারে অবান্তর না।

আমি যে কোম্পানিতে কাজ করি, সেখানে কিছু Software Developer আছে যাদের Computer Science এ অ্যাকাডেমিক ডিগ্রি নাই। কিন্তু তারাও খুব ভাল coding করতে পারে, ভাল system বানাতে পারে। কিভাবে পারে ?

কৌতূহল থেকে তাদের background নিয়ে খোজ নিয়েছি আগে। সেটা বললেই ব্যাপারটা ক্লিয়ার হয়ে যাবে। কারও কারও ব্যাকগ্রাউন্ড EEE, Physics, Statistics। কেউ কেউ আবার ডিপ্লোমা, কিছু আছে কোন ডিগ্রিই নাই। হাইস্কুলে যে ম্যাথ করে আছে সেটা দিয়েই দিব্যি কাজ করে যাইতেছে।

একটা মজার ব্যাপার হইতেছে যাদের সরাসরি Engineering ব্যাকগ্রাউন্ড, তাদের সাথে technical কথাবার্তা করা সহজ, কারণ তারা টার্মগুলো/কনসেপ্টগুলো অলরেডি জানে। কিন্তু বাকিদের যাদের সরাসরি Engineering ব্যাকগ্রাউন্ড না, তাদের সাথেও technical কথাবার্তা চালানো যায়। একটু সময় লাগে। তবে তাদের Analytical Knowledge ভাল হবার কারণে, একবার তারা কনসেপ্ট বুঝে ফেললে আর সমস্যা হয়না।

তখন বুঝলাম যে, যাদের ক্যারিয়ারের শুরু অন্য জায়গা থেকে, তারা বছরের পর বছর ধরে কয়েকটা বিশেষ টপিকে কাজ করতে করতে সেটাতে Specialized Skill grow করেছে। আমাদের ডিপার্টমেন্টের ৪ বছরের কোর্সে Computer Science এর ব্যাপারে আমরা ঠিক একইভাবে এরকম কিছু knowledge অর্জন করি। এর সবগুলোই যে একটা কোম্পানিতে ব্যবহার করা যাবে এমন না। তবে যেহেতু এগুলো Fundamental Knowledge, তাই দেখা যায় এগুলোকে খুব সহজে বিভিন্ন ক্ষেত্রে কাজে লাগানো যায়।

আমাদের CSE কোর্সের কারিকুলাম এমনভাবে ডিজাইন করা, যেটাতে Computer Science এর অনেক শাখা-প্রশাখা কাভার করে। এবং এই জিনিসটাই আমাকে কাজের মধ্যে একটা অতিরিক্ত সুবিধা দেয়। Software Requirement থেকে শুরু করে, কখন কোন ধরনের Computer System যুতসই হবে সেগুলা খুঁজে বের করা, কোন একটা problem এর efficient সমাধান খুজে পাওয়া, এগুলাতে আমি দেখি Departmental কনসেপ্টগুলো অনেক কাজে লাগে।

তাই, আমার মনে হয়, ভাল Software Engineer হবার জন্য Computer Science এর জ্ঞান এর দরকার আছে। খুব বেশী জেনারেল জ্ঞান এর দরকার আছে কিনা, সেটা বলা একটু কঠিন। কারণ “Engineering” অলরেডি একটা specialized skill. তার উপর “Computer Science & Engineering” আর একটা specialization । এরপর “Software enginerring” সেটার গভীরে আরেক ধাপ বিশেষ পড়াশুনা। কেউ যদি শুরুতেই এত ডিটেইল লেভেলের specialized skill গ্রো করতে চায়, তাতেও যে সমস্যা আছে এমন না। ফাইনালি শিখলেই হইল 

 


সিস্টেম ডিজাইন বেসিক – পার্ট ২

by Md Imran Hasan Hira

সিস্টেম ডিজাইন বেসিক ২ ( টার্গেট অডিয়েন্স লেভেল ২+ )



সিস্টেম ডিজাইন বেসিক

by Md Imran Hasan Hira
কিছুদিন আগে আমাদের ডিপার্টমেন্টের এক গ্রুপে “এই ছবি দিয়ে কবি কি বুঝাতে চেয়েছেন?” টাইপ একটা পোষ্ট দিয়েছিলাম। আমি ভাবলাম বেশ কঠিন এক প্রশ্ন করে একটু ভাব নিব। লেভেল ২/৩ তে যারা আছ, তাদেরকে নাকানি-চুবানি খাওয়াব ভাবছিলাম। কিন্তু বেশ কিছু ত্যাঁদড় পোলাপানের কারণে পর্যাপ্ত পরিমাণে সুবিধা করে উঠতে পারলাম না। প্রশ্ন করার আগেই উত্তর নিয়ে রেডি ছিল তারা। অবশ্য যারা রেসপন্স করেছে, তাদের সবাইই বিভিন্ন সফটওয়ার কোম্পানিতে বেশ ভাল ভাল কাজ করতেছে।
 
যাই হোক, প্রথমে মাথায় আইডিয়া আসে একজন হবু ইঞ্জিনিয়ার কে Scalable System Design কিভাবে বুঝাব, এইটা থেকে। যারা অলরেডি C/C++/Java কোর্সগুলা করে ফেলছ, তারা এর মধ্যে মোটামুটি আইডিয়া পেয়ে গেছ যে কম্পিউটারে প্রোগ্রামগুলো কিভাবে বানানো হয়।
 
কিছু কিছু প্রোগ্রামে ইনপুট দেওয়া হয় কনসোল থেকে। কিছু কিছু প্রোগ্রামে সুন্দর User Interface থাকে। কিছু কিছু প্রোগ্রাম তোমাদের লোকাল মেশিনে চলে। যেমন ধর – Explorer, Games, Text Editors । আবার কিছু কিছু প্রোগ্রাম সার্ভার মেশিনে চলে, এবং তোমার ব্রাউজার থেকে HTTP দিয়ে ডাটা যায় আসে। এগুলোকে ওয়েব আপ্লিকেশন বলে। সাধারণত এই ধরনের ওয়েব আপ্লিকেশন বানানোর জন্য এখন অনেক ক্লাউড সার্ভিস পাওয়া যায়। তারপরও মনে হল স্ক্রাচ থেকে একটা প্রোজেক্ট ভেঙ্গে দেখালে ব্যাপারটা সবার কাছে পরিষ্কার হবে।
 

Read the rest of this entry »


BSADD – BUET System Analysis, Design and Development group

by Md Imran Hasan Hira

বেশ কয়েক বছর আগে, ডিপার্টমেন্টে আমরা কয়েকজন মিলে সিস্টেম ডিজাইন নিয়ে কিছু কাজ শুরু করেছিলাম। আমরা বলতে আমরা ‘০৭ এর বেশ কয়েকজন আর ‘০৮ এর কয়েকজন। স্যাররা অবশ্য অনেক হেল্প করেছিলেন, যেমন সেশনগুলো অ্যারেঞ্জ করতে ডিপার্টমেন্টের পারমিশন এর জন্য দৌড়াদৌড়ি তো আছেই, সেটা ছাড়াও স্যাররা আমাদের ব্যপক উৎসাহ দিতেন সেশনগুলা নেওয়ার জন্য। লতিফ স্যারের একটা কথা এখনও মনে পরে, স্যারের কাছে BSADD এর কোন কিছু নিয়ে গেলেই উনি বলতেন “I appreciate”, কথাটা শুনতে খুবই সাধারণ শুনায়, কিন্তু আমাদের কাছে এই লাইনটা বেশ ইন্সপায়ারিং লাগত।

মজার ব্যাপার হচ্ছে, শুরুর সময়ে আমাদের লক্ষ্য ছিল সিস্টেম ডিজাইন এর কন্টেস্টগুলোতে বুয়েটের টীমরা যাতে ভাল করতে পারে, এইটা। তখন দেশে কেবলমাত্র SDDC (System Design and Development Contest) ব্যপারটা চালু হয়েছে, আমরা শুরুতে একটাতে পার্টিসিপেট করার পর মনে হল, এই দিকটাতে আমার শিখার অনেক কিছু বাকি আছে। তারপর ভাবলাম যে বুয়েটে এরকম একটা প্রাকটিস গ্রুপ থাকলে, সমস্যাগুলা নিয়ে অ্যাকাডেমিক এর বাইরেও বড় ভাইয়াদের সাথে আলোচনা করা যাবে।

তো আমরা লেভেল-৪ এ গিয়ে সেশন নেওয়া শুরু করলাম, সেশন নিতে গিয়ে মনে হল, সিস্টেম ডিজাইন শুরু করতে গেলে যে বেসিক লাগবে, সেগুলার জন্য আগে আরেকগাদা সেশন নিতে হবে ( অনেকটা chicken-egg সমস্যার মত :p )। যাই হোক, আমরা একটা ড্রাফট কোর্স প্লান করলাম। Git, Coding style, Code modularity, Class Diagram, Java basics, Web Framework, Database Connetions এইরকম বেসিক কিছু জিনিস নিয়ে।

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

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

এতক্ষণ আলোচনার পর এবার একটু গ্রুপের ঢাকঢোল পিটাই। BSADD প্লাটফর্মের একটা পার্ট হিসেবে অনেকদিন ধরে আমাদের একটা ফেসবুক গ্রুপ আছে। এখন অবশ্য আমরা একটু অলস হয়ে গেছি, তাই খালি মাঝে মাঝে বিভিন্ন আর্টিকেলের লিঙ্ক শেয়ার করি :p সব বকবকানি তো এই ফর্মাল গ্রুপে করা যায়না। যেহেতু যারা পাস করে বিভিন্ন অফিসে কাজ করছে, তাই সবার পক্ষে কোন ইভেন্ট ছাড়া ক্যাম্পাসে আসা সবসময় সম্ভব হয়না। কিন্তু, কারও যদি সিস্টেম ডিজাইন নিয়ে কোন প্রশ্ন থাকে, যদি হঠাৎ করে মনে হয় “আরেহ এই রকম একটা সিস্টেমের জন্য কি কি class নিলে ভাল হবে?”, মোবাইল থেকে ওয়েবে ডাটা পাঠানোর জন্য মাঝখানে আরও কোন লেয়ার লাগবে কিনা, এইরকম প্রশ্নগুলো গ্রুপে করতে পারে। তাছাড়া নিজেরা ভাল কোন রিসোর্স/আর্টিকেল পড়ে থাকলে সেগুলার লিঙ্কও শেয়ার করতে পারে, অন্তত আরও অনেকে জানবে।


Studying Sequence Diagrams

by Md Imran Hasan Hira

Reading sequence diagram from http://www.ibm.com/developerworks/rational/library/3101.html

1. Frame
2. Lifeline
3. Messages

  • Synchronus / Asynchronus
  • Returns / Not
  • Self message / Not

4. Guards
5. Combined Fragments

  • Alternatives
  • Options
  • Loop
  • Break
  • Parallel

6. Referencing Sequence Diagrams
7. Gates


Theme by Ali Han | Copyright 2025 Md Imran Hasan Hira | Powered by WordPress