DEV Community

Saiful Islam
Saiful Islam

Posted on

SDLC-1

সফটওয়্যার ইঞ্জিনিয়ারিং: একটি সম্পূর্ণ বাংলা গাইড

শূন্য থেকে ডেপ্লয়মেন্ট পর্যন্ত


পাঠকের উদ্দেশ্যে: এই বইটি একটি পূর্ণ দিনের বুটক্যাম্প সেশনের উপর ভিত্তি করে রচিত। বইয়ের প্রতিটি অধ্যায় এতটাই বিস্তারিতভাবে লেখা হয়েছে যাতে একজন পাঠক মূল ভিডিও না দেখেও সম্পূর্ণ জ্ঞান অর্জন করতে পারেন।

বইটি রচিত হয়েছে হিরা হাসানের সফটওয়্যার ইঞ্জিনিয়ারিং ডে-লং বুটক্যাম্প সেশনের উপর ভিত্তি করে।


সূচিপত্র

  • প্রথম অধ্যায়: সফটওয়্যার কী এবং কেন দরকার
  • দ্বিতীয় অধ্যায়: সফটওয়্যার ডেভেলপমেন্ট লাইফ সাইকেল (SDLC)
  • তৃতীয় অধ্যায়: সফটওয়্যারের প্রযুক্তিগত কাঠামো
  • চতুর্থ অধ্যায়: ডেস্কটপ অ্যাপ্লিকেশন — Python দিয়ে হাতে-কলমে
  • পঞ্চম অধ্যায়: ওয়েব অ্যাপ্লিকেশন — HTML, CSS ও জাভাস্ক্রিপ্ট
  • ষষ্ঠ অধ্যায়: ব্যাক-এন্ড ডেভেলপমেন্ট — Node.js ও Express.js
  • সপ্তম অধ্যায়: Git ও GitHub — ভার্সন কন্ট্রোল
  • অষ্টম অধ্যায়: ক্লাউড সার্ভার ও ডেপ্লয়মেন্ট
  • নবম অধ্যায়: রিয়েল-টাইম অ্যাপ্লিকেশন — Socket.io দিয়ে চ্যাট অ্যাপ
  • দশম অধ্যায়: CI/CD পাইপলাইন
  • একাদশ অধ্যায়: ক্যারিয়ার পথ ও অর্থ উপার্জনের উপায়

প্রথম অধ্যায়: সফটওয়্যার কী এবং কেন দরকার

১.১ সফটওয়্যার কি জিনিস?

আমরা প্রতিদিন ফেসবুক ব্যবহার করি, বিকাশ দিয়ে টাকা পাঠাই, Google Map দিয়ে রাস্তা খুঁজি — এগুলো সবই সফটওয়্যার। কিন্তু সফটওয়্যার আসলে কী?

সহজ ভাষায়, সফটওয়্যার হলো নির্দেশনার একটি সেট যা কম্পিউটারকে বলে দেয় কী করতে হবে। যেমন একটি রেসিপি বই রান্নার নির্দেশনা দেয়, তেমনি সফটওয়্যার কম্পিউটারকে নির্দিষ্ট কাজ করার নির্দেশনা দেয়।

কিন্তু শুধু সংজ্ঞা জেনে লাভ নেই। আরও গুরুত্বপূর্ণ প্রশ্ন হলো — আমরা সফটওয়্যার কেন বানাই?

১.২ সফটওয়্যার বানানোর তিনটি প্রধান কারণ

মডার্ন সফটওয়্যার ডেভেলপমেন্টের পেছনে তিনটি মূল কারণ রয়েছে। এগুলো বুঝলে সফটওয়্যার জগতটা অনেক পরিষ্কার হয়ে যায়।


কারণ ১: বড় হিসাব-নিকাশ স্বয়ংক্রিয় করা (Calculation Automation)

একটি সহজ উদাহরণ দিয়ে শুরু করি।

ধরুন কেউ আপনাকে বললো: ১২ + ১২ = ?

এটা আপনার মস্তিষ্ক সহজেই করতে পারে। কোনো ক্যালকুলেটর লাগে না।

এবার: ১২৩৪৫৬ ÷ ৫৬ × ৩ + ৭৮৯ − ৪৫৬ = ?

এখন একটু কঠিন হয়ে গেল। ক্যালকুলেটর লাগতে পারে।

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

এই কাজের জন্যই সফটওয়্যার দরকার।

আরও উদাহরণ:

  • Google Maps যখন ঢাকা থেকে চট্টগ্রামের সবচেয়ে দ্রুততম রুট বের করে — এটা একটা জটিল অ্যালগরিদম চলছে
  • ChatGPT যখন আপনার প্রশ্নের উত্তর দেয় — এটা বিশাল গাণিতিক হিসাব
  • ফেসবুক যখন আপনার বন্ধুদের খুঁজে বের করে — এটা সার্চ অ্যালগরিদম

সারাংশ: যখন কোনো কাজ এত বড় বা জটিল যে মানুষের পক্ষে করা কঠিন বা সময়সাপেক্ষ, তখন সফটওয়্যার সেটা স্বয়ংক্রিয়ভাবে করে দেয়।


কারণ ২: ডেটা আদান-প্রদান (Data Communication)

চিন্তা করুন — ৩০ বছর আগে মানুষ কীভাবে যোগাযোগ করতো?

ধাপ ১ — টেলিফোন যুগ:
একটা টেলিফোন ডায়াল করলে অপর প্রান্তে ঘণ্টি বাজতো। উত্তর দিলে কথা হতো। দুটো ডিভাইস একটি তার বা রেডিও লিংকের মাধ্যমে যুক্ত থাকতো। সংযোগ স্থাপিত হলে ভয়েস ডেটা ট্র্যাভেল করতো।

ধাপ ২ — মোবাইল ফোন যুগ:
নোকিয়া ১১০০-এর মতো মোবাইল ফোন এলো। তারবিহীন যোগাযোগ হলো। কিন্তু সেই ফোনে ওয়েবসাইট দেখা যেতো না।

ধাপ ৩ — ইন্টারনেট ও স্মার্টফোন যুগ:
অ্যান্ড্রয়েড ফোন আর ওয়েবসাইট — এই দুটো প্রায় একই সময়ে বিশাল আকারে বিস্তার লাভ করলো। এখন আপনি ঢাকায় বসে আমেরিকায় থাকা বন্ধুকে WhatsApp বা Facebook Messenger দিয়ে বিনামূল্যে ভিডিও কল করতে পারছেন।

এই যোগাযোগটা কীভাবে হচ্ছে? ইন্টারনেটের মাধ্যমে। আর ইন্টারনেটের মাধ্যমে এই যোগাযোগ সম্ভব করতে সফটওয়্যার লাগে।

উদাহরণ: আপনি যখন WhatsApp-এ বার্তা পাঠান, আপনার বার্তাটা:

  1. আপনার ফোন থেকে WhatsApp-এর সার্ভারে যায়
  2. সার্ভার থেকে আপনার বন্ধুর ফোনে যায়
  3. এই পুরো প্রক্রিয়া সফটওয়্যার পরিচালনা করে

সারাংশ: এক জায়গা থেকে আরেক জায়গায় ডেটা পাঠানোর জন্য — ভয়েস, ভিডিও, ছবি, টেক্সট — সব কিছুর জন্য সফটওয়্যার দরকার।


কারণ ৩: এন্টারপ্রাইজ ডেটা ম্যানেজমেন্ট (Enterprise Data Storage & Access)

বড় প্রতিষ্ঠানগুলোর কথা ভাবুন — ব্যাংক, বীমা কোম্পানি, সরকার।

উদাহরণ — ব্যাংকিং সফটওয়্যার:

ধরুন আপনার Standard Chartered ব্যাংকের অ্যাকাউন্টে ১,০০০ টাকা আছে। আপনি একই সময়ে তিনটি ATM বুথ থেকে ৫০০ টাকা করে তোলার চেষ্টা করা হচ্ছে (আপনার কার্ড ও PIN তিনজন জানে)।

মোট তোলার চেষ্টা: ৫০০ × ৩ = ১,৫০০ টাকা
কিন্তু অ্যাকাউন্টে আছে: ১,০০০ টাকা

এই পরিস্থিতিতে কী হওয়া উচিত? কাউকে সর্বোচ্চ ১,০০০ টাকা তুলতে দেওয়া উচিত, বাকিদের না। এই কাজটা কীভাবে হয়?

তিনটি ATM বুথ একটি কেন্দ্রীয় ডেটাবেসের সাথে যুক্ত থাকে। প্রথম ৫০০ টাকা তোলার সাথে সাথে ডেটাবেস আপডেট হয়ে যায় (১,০০০ − ৫০০ = ৫০০)। দ্বিতীয় ও তৃতীয় বুথ থেকে তোলার চেষ্টা করলে সিস্টেম জানে যে মাত্র ৫০০ টাকা আছে।

এই পুরো সিস্টেম পরিচালনার জন্য সফটওয়্যার লাগে।

আরও বড় উদাহরণ: Standard Chartered ব্যাংকের শাখা আছে বাংলাদেশে, ভারতে এবং আমেরিকায়। আপনি বাংলাদেশ থেকে ২০০ টাকা তুললেন, ভারত থেকে ১০০ টাকা তুললেন, আমেরিকা থেকে ১৫০ টাকা তুললেন — সব লেনদেন একটি কেন্দ্রীয় লেজার বইতে রেকর্ড হয়। এটা সম্ভব করে সফটওয়্যার।

সারাংশ: বড় প্রতিষ্ঠানগুলো তাদের বিশাল পরিমাণ ডেটা সংরক্ষণ, প্রক্রিয়াকরণ ও বিতরণের জন্য সফটওয়্যার ব্যবহার করে।


১.৩ ইন্টারনেট কীভাবে কাজ করে — সহজ ভাষায়

সফটওয়্যার বোঝার আগে ইন্টারনেট বোঝাটা জরুরি।

ইন্টারনেট হলো ডিভাইসগুলোর একটি বিশাল নেটওয়ার্ক। পৃথিবীর প্রতিটি কম্পিউটার, মোবাইল, সার্ভার — সবকিছু কোনো না কোনোভাবে যুক্ত।

এই যোগাযোগ দুটো উপায়ে হয়:

১. তার (Wired): বাংলাদেশ থেকে আমেরিকার সাথে যোগাযোগ হয় সমুদ্রের তলদেশ দিয়ে যাওয়া সাবমেরিন ক্যাবলের মাধ্যমে। এই তারগুলো হাজার হাজার কিলোমিটার লম্বা।

২. তারবিহীন (Wireless): মোবাইল টাওয়ার, ওয়াইফাই, এবং এখন স্যাটেলাইট ইন্টারনেট (যেমন Starlink)। স্যাটেলাইট ইন্টারনেটের সুবিধা হলো পৃথিবীর যেকোনো জায়গা থেকে একই সংযোগ ব্যবহার করা যায়।

IP Address কী?
পৃথিবীর প্রতিটি ডিভাইসের একটি অনন্য ঠিকানা আছে — এটাকে বলে IP Address। যেমন আপনার বাড়ির ঠিকানা আছে, তেমনি প্রতিটি কম্পিউটারের ঠিকানা আছে। এই ঠিকানার মাধ্যমেই ডেটা সঠিক গন্তব্যে পৌঁছায়।


১.৪ সফটওয়্যারের তিনটি পক্ষ (Parties)

যেকোনো সফটওয়্যারে সাধারণত তিনটি পক্ষ জড়িত থাকে:

১. ডেভেলপার (Developer):
যারা সফটওয়্যার বানায়। সিনেমার উপমায় — যারা ক্যামেরা চালায়, অভিনয় করায়, সিনেমা এডিট করে। ফেসবুকের ডেভেলপাররা ফেসবুক তৈরি করেছে।

২. এন্ড ইউজার (End User / Client):
যারা সফটওয়্যার ব্যবহার করে। আমরা যখন ফেসবুক চালাই, আমরা ইউজার। তারা টেকনিক্যাল জিনিস না জানলেও চলে।

৩. মালিক / বিজনেস ওনার (Owner):
যিনি সফটওয়্যার বানানোর উদ্যোগ নেন এবং বিনিয়োগ করেন। মার্ক জাকারবার্গ ফেসবুকের মালিক। তিনি সরাসরি কোড না লিখলেও ব্যবসায়িক সিদ্ধান্ত নেন।

বাস্তব উদাহরণ:

  • মালিক: মার্ক জাকারবার্গ
  • ডেভেলপার: ফেসবুকের ইঞ্জিনিয়াররা
  • ইউজার: আমরা সবাই যারা ফেসবুক চালাই

১.৫ সফটওয়্যারের প্রধান বিভাগ

আধুনিক যুগে সফটওয়্যার তিন ধরনের হয়:

১. ক্যালকুলেশন-ভিত্তিক সফটওয়্যার:
বড় হিসাব করে, যেমন বৈজ্ঞানিক গবেষণার সফটওয়্যার, AI সিস্টেম।

২. কমিউনিকেশন-ভিত্তিক সফটওয়্যার:
মানুষকে সংযুক্ত রাখে — WhatsApp, Facebook, Gmail।

৩. এন্টারপ্রাইজ সফটওয়্যার:
বড় প্রতিষ্ঠানের ব্যবস্থাপনার জন্য — ব্যাংকিং সিস্টেম, হাসপাতাল ম্যানেজমেন্ট, সরকারি রেকর্ড।

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


দ্বিতীয় অধ্যায়: সফটওয়্যার ডেভেলপমেন্ট লাইফ সাইকেল (SDLC)

২.১ লাইফ সাইকেল মানে কী?

মানুষের জীবনচক্র আমরা স্কুলে পড়েছি — জন্ম, শৈশব, কৈশোর, যৌবন, বার্ধক্য, মৃত্যু। ব্যাঙের জীবনচক্র আমরা জীববিজ্ঞানে পড়েছি।

ঠিক তেমনি, সফটওয়্যারেরও একটি জীবনচক্র আছে। একটি সফটওয়্যার কীভাবে শুরু হয়, কীভাবে তৈরি হয়, কীভাবে মানুষের কাছে পৌঁছায়, এবং কীভাবে রক্ষণাবেক্ষণ হয় — এটাই SDLC বা Software Development Life Cycle।

SDLC বোঝা গুরুত্বপূর্ণ কারণ:

  • একটি সফটওয়্যারে কতজন মানুষ কাজ করে তা বোঝা যায়
  • কোথায় সমস্যা হলে কী পরিমাণ ক্ষতি হয় তা বোঝা যায়
  • ক্যারিয়ার পথ বেছে নেওয়া সহজ হয়

২.২ SDLC-এর ধাপগুলো

একটি সফটওয়্যার তৈরির প্রক্রিয়া নিচের ধাপে হয়:


ধাপ ১: পরিকল্পনা (Planning) — বিজনেস ওনারের ভূমিকা

সফটওয়্যারের ধারণা প্রথমে আসে মালিকের মাথায়।

উদাহরণ: ধরুন একজন উদ্যোক্তা ভাবছেন একটি রাইড-শেয়ারিং অ্যাপ বানাবেন (Uber-এর মতো)। তার মাথায় আসে:

  • আমি এটা বানাবো
  • প্রতি বছর কোটি টাকা আয় করবো
  • আমার একটি মোবাইল অ্যাপ লাগবে

মালিক এই পর্যায়ে টেকনিক্যাল বিষয় জানেন না। তিনি শুধু ব্যবসায়িক পরিকল্পনা করেন।

এই পর্যায়ে যে ডকুমেন্ট তৈরি হয় তাকে বলে BRD — Business Requirements Document (ব্যবসায়িক প্রয়োজনীয়তার দলিল)।

BRD-তে কী থাকে:

  • সফটওয়্যার কী করবে (হাই-লেভেলে)
  • ব্যবসায়িক লক্ষ্য কী
  • কোন ধরনের পেমেন্ট গ্রহণ করবে
  • কোন পণ্য বা সেবা বিক্রি হবে
  • সপ্তাহের ৭ দিন ২৪ ঘণ্টা চলতে হবে কি না

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


ধাপ ২: বিশ্লেষণ (Analysis) — বিজনেস অ্যানালিস্টের ভূমিকা

মালিকের BRD পেয়ে বিজনেস অ্যানালিস্টরা কাজ শুরু করেন।

বিজনেস অ্যানালিস্ট কী করেন:

  • ব্যবসাটি আসলেই লাভজনক হবে কি না তা যাচাই করেন
  • বাজারে এই পণ্যের চাহিদা আছে কি না দেখেন
  • প্রতিযোগীরা কে কে — Uber-এর মতো অ্যাপ কতটি আছে, তাদের মার্কেট শেয়ার কত
  • লাভ-লোকসানের সম্ভাবনা কী
  • ঝুঁকি কোথায়

অ্যানালিস্টরা বলতে পারেন "ভাই, এই ব্যবসায় লোকসান হবে, যাবেন না" — অথবা "এখানে বিশাল সুযোগ আছে, তাড়াতাড়ি বিনিয়োগ করুন।"


ধাপ ৩: পণ্য বিশ্লেষণ (Product Analysis) — প্রোডাক্ট ম্যানেজারের ভূমিকা

বিজনেস অ্যানালিসিসের পরে আসেন প্রোডাক্ট ম্যানেজার।

প্রোডাক্ট ম্যানেজার কী করেন:
প্রোডাক্ট ম্যানেজার সেতুবন্ধন করেন ব্যবসার উদ্দেশ্য এবং ব্যবহারকারীর চাহিদার মধ্যে।

তারা ভাবেন:

  • ব্যবহারকারী কী চায়?
  • অ্যাপে কোন কোন ফিচার থাকলে ব্যবহারকারীরা খুশি হবে?
  • বিকাশ অ্যাপের নিচে যে বার থাকে সেটা কি এইভাবে থাকা উচিত?
  • ফিচার লিস্ট কী হবে?

কীভাবে তথ্য সংগ্রহ করেন:

  • ব্যবহারকারীদের সার্ভে করেন
  • প্রতিযোগী অ্যাপ ব্যবহার করে দেখেন
  • Product Hunt (producthunt.com) এ নতুন পণ্য খোঁজেন
  • Tech Crunch-এর মতো ওয়েবসাইট পড়েন
  • ব্যবহারকারীর আচরণ সংক্রান্ত গবেষণাপত্র পড়েন

চূড়ান্ত আউটপুট কী:
প্রোডাক্ট ম্যানেজার একটি Wireframe তৈরি করেন। Wireframe হলো অ্যাপের হাতে আঁকা কাঠামো — কোথায় কী থাকবে সেটার প্রাথমিক রূপরেখা।

এটা সুন্দর ডিজাইন নয়। কাগজে পেন্সিল দিয়ে আঁকা হতে পারে। কিন্তু এটা থেকে বোঝা যায়:

  • এই বাটনে ক্লিক করলে কোথায় যাবে
  • কোন স্ক্রিনে কী থাকবে
  • ব্যবহারকারীর যাত্রা কেমন হবে (User Journey)

User Requirements Document (URD): প্রোডাক্ট ম্যানেজারের কাজের চূড়ান্ত ফলাফল হলো URD। এতে ফিচারগুলো তালিকাবদ্ধ করা থাকে।

উদাহরণ:

  • ব্যবহারকারীরা লগইন ছাড়া কোনো পণ্য অর্ডার করতে পারবে না
  • লগইন ছাড়া অবস্থান দেখা যাবে না
  • ব্যবহারকারীরা পণ্যের ক্যাটালগ দেখতে পারবে

ধাপ ৪: ডিজাইন (Design) — UI/UX ডিজাইনারের ভূমিকা

প্রোডাক্ট ম্যানেজারের Wireframe পেয়ে UI/UX ডিজাইনাররা কাজ শুরু করেন।

UI (User Interface): অ্যাপটি দেখতে কেমন — রঙ, ফন্ট, বোতামের আকার।

UX (User Experience): ব্যবহারকারীর অভিজ্ঞতা — অ্যাপ ব্যবহার করা কতটা সহজ।

তারা কী তৈরি করেন:
Figma বা Adobe XD সফটওয়্যার ব্যবহার করে সম্পূর্ণ অ্যাপের চেহারা তৈরি করেন। এটা দেখতে একদম আসল অ্যাপের মতো, কিন্তু এটা ক্লিক করলে কাজ করে না। এটা শুধু "দেখার জন্য" — কোড নেই।

কারা Figma ব্যবহার করেন:
গ্রাফিক ডিজাইনার, UI ডিজাইনার — যারা Figma বা Photoshop জানেন।


ধাপ ৫: বাস্তবায়ন (Implementation) — ডেভেলপমেন্ট টিমের ভূমিকা

এখন সফটওয়্যার ডেভেলপাররা কাজ শুরু করেন।

তাদের কাছে থাকে:

  • প্রোডাক্ট ম্যানেজারের Requirements Document
  • UI/UX টিমের ডিজাইন ফাইল

এই দুটো ইনপুট নিয়ে তারা আসল সফটওয়্যার কোড লেখেন।

ডেভেলপমেন্ট টিমের ভেতরে কত রকম ভূমিকা:

  • ফ্রন্ট-এন্ড ডেভেলপার (যা ব্যবহারকারী দেখেন)
  • ব্যাক-এন্ড ডেভেলপার (সার্ভারের কাজ)
  • ডেটাবেস অ্যাডমিনিস্ট্রেটর
  • DevOps ইঞ্জিনিয়ার
  • টিম লিড

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


ধাপ ৬: টেস্টিং (Testing) — QA টিমের ভূমিকা

সফটওয়্যার বানানো হলে সরাসরি বাজারে ছাড়া হয় না। আগে টেস্ট করা হয়।

কেন টেস্টিং দরকার:
কল্পনা করুন বিকাশ অ্যাপে এমন বাগ আছে যে কারো অ্যাকাউন্টে টাকা না থাকলেও সে ক্যাশআউট করতে পারছে। এটা কোম্পানির জন্য বিপর্যয়কর।

টেস্টিংয়ের ধরন:

  • ম্যানুয়াল টেস্টিং: মানুষ হাতে হাতে প্রতিটি ফিচার যাচাই করেন
  • অটোমেটেড টেস্টিং: কোড লিখে স্বয়ংক্রিয়ভাবে টেস্ট করা হয়
  • ব্ল্যাকবক্স টেস্টিং: ভেতরের কোড না জেনে বাইরে থেকে টেস্ট
  • স্যানিটি টেস্ট: মূল ফিচারগুলো সঠিক কাজ করছে কি না দেখা

টেস্টিং একটি আলাদা ক্যারিয়ার:
বাংলাদেশে এবং বিশ্বে QA (Quality Assurance) ইঞ্জিনিয়ার হিসেবে ক্যারিয়ার গড়া যায়। এটি একটি সম্পূর্ণ আলাদা পেশা।


ধাপ ৭: ডেপ্লয়মেন্ট (Deployment) — ব্যবহারকারীর কাছে পৌঁছানো

টেস্টিং শেষে সফটওয়্যার ডেপ্লয় করা হয় — মানে ব্যবহারকারীদের কাছে পৌঁছানো হয়।

প্রথমে Internal Release: কোম্পানির ভেতরের মানুষজন প্রথমে ব্যবহার করেন।

তারপর Public Release: সাধারণ ব্যবহারকারীরা অ্যাপ আপডেট পান।

ডেপ্লয়মেন্টের পর যদি বাগ থাকে:

  • ব্যবহারকারীরা রিপোর্ট করেন
  • সেটা Bug Board-এ যায়
  • ডেভেলপমেন্ট টিম সমস্যা সমাধান করে
  • পরবর্তী আপডেটে ঠিক হয়

ধাপ ৮: রক্ষণাবেক্ষণ (Maintenance)

সফটওয়্যার ডেপ্লয়ের পরেও কাজ শেষ হয় না।

মেইনটেন্যান্সের কাজগুলো:

  • নিরাপত্তা আপডেট (Security Patches)
  • নতুন ফিচার যোগ করা
  • সার্ভার পর্যবেক্ষণ করা
  • পারফরম্যান্স উন্নত করা
  • বাগ ফিক্স করা

মেইনটেন্যান্সে কারা কাজ করেন:

  • DevOps টিম
  • Cloud ইঞ্জিনিয়ার
  • Cybersecurity টিম
  • সফটওয়্যার ডেভেলপার

২.৩ SDLC একটি চক্র — শেষ নেই

SDLC কখনো শেষ হয় না। সফটওয়্যার মেইনটেন্যান্সের পরে নতুন ফিচার আসে, নতুন ফিচারের জন্য আবার পরিকল্পনা হয়, আবার বিশ্লেষণ হয়, আবার ডিজাইন হয়...

এটা একটি অসীম চক্র।

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

  • একটু বানাও
  • টেস্ট করো
  • রিলিজ করো
  • ব্যবহারকারীর মতামত নাও
  • আবার শুরু করো

২.৪ সবচেয়ে বড় সমস্যা: ভুল বোঝাবুঝি (Miscommunication)

SDLC-তে সবচেয়ে বড় সমস্যা হলো তথ্যের ভুল বোঝাবুঝি।

কীভাবে হয়:
মালিক একটি বিষয় ভাবলেন → বিজনেস অ্যানালিস্ট অন্যভাবে বুঝলেন → প্রোডাক্ট ম্যানেজার আরেকভাবে ব্যাখ্যা করলেন → ডেভেলপার ভিন্নভাবে কোড লিখলেন → ব্যবহারকারী একদম অন্য জিনিস চেয়েছিলেন।

সমাধান: স্পষ্ট যোগাযোগ। সফটওয়্যার ইঞ্জিনিয়ারের সবচেয়ে গুরুত্বপূর্ণ দক্ষতা কোড লেখা নয়, বরং পরিষ্কার যোগাযোগ করার ক্ষমতা।

ভুল বোঝাবুঝির খরচ: যদি শেষ ধাপে (ডেভেলপমেন্ট) ভুল ধরা পড়ে, তাহলে সব ধাপ আবার করতে হতে পারে — এটা অত্যন্ত ব্যয়বহুল।


২.৫ AI যুগে সফটওয়্যার ডেভেলপমেন্ট

অনেকে ভাবেন AI আসলে কি সফটওয়্যার ডেভেলপারের কাজ শেষ হয়ে যাবে?

উত্তর হলো — না।

কারণগুলো:

  1. ব্যবসা বোঝা: ব্যবসার উদ্দেশ্য কী, সফটওয়্যার সেটা পূরণ করছে কি না — এটা AI বুঝতে পারে না।
  2. যোগাযোগ: ক্লায়েন্টের সাথে কথা বলে সঠিক চাহিদা বোঝা।
  3. টেস্টিং: সফটওয়্যার সঠিকভাবে কাজ করছে কি না যাচাই।
  4. স্কেল করা: লক্ষ লক্ষ ব্যবহারকারীর জন্য সফটওয়্যার চলবে কি না।
  5. নতুন প্রযুক্তি: নতুন প্রযুক্তি এলে নতুন ইঞ্জিনিয়ারিং দরকার।

AI একটি শক্তিশালী সহকারী। কিন্তু মানুষের বিচার এবং সিদ্ধান্তের বিকল্প নয়।


তৃতীয় অধ্যায়: সফটওয়্যারের প্রযুক্তিগত কাঠামো

৩.১ সফটওয়্যারের তিনটি মূল অংশ

যেকোনো আধুনিক সফটওয়্যারের তিনটি অংশ থাকে:

┌──────────────────────────────────────────────────┐
│                    CLIENT SIDE                    │
│         (ব্যবহারকারীর ডিভাইসে চলে)              │
│   Mobile App | Browser | Desktop App             │
└──────────────────────┬───────────────────────────┘
                       │  ইন্টারনেট
                       │
┌──────────────────────┴───────────────────────────┐
│                    SERVER SIDE                    │
│          (সার্ভারে চলে, ব্যবহারকারী দেখেন না)   │
│         API | Business Logic | Auth               │
└──────────────────────┬───────────────────────────┘
                       │
┌──────────────────────┴───────────────────────────┐
│                    DATABASE                       │
│              (ডেটা সংরক্ষণ করে)                 │
│      PostgreSQL | MySQL | MongoDB | Redis         │
└──────────────────────────────────────────────────┘
Enter fullscreen mode Exit fullscreen mode

অংশ ১: ক্লায়েন্ট সাইড (Client Side / Front-End)

সংজ্ঞা: ব্যবহারকারীর ডিভাইসে যে সফটওয়্যার চলে সেটা ক্লায়েন্ট সাইড।

উদাহরণ:

  • আপনার ফোনে বিকাশ অ্যাপ → ক্লায়েন্ট সাইড
  • আপনার ব্রাউজারে Facebook.com → ক্লায়েন্ট সাইড
  • আপনার কম্পিউটারে VS Code → ক্লায়েন্ট সাইড

তিন ধরনের ক্লায়েন্ট:

  1. মোবাইল অ্যাপ: Android বা iOS ফোনে চলে। বিতরণ হয় Play Store বা App Store-এর মাধ্যমে।
  2. ওয়েব অ্যাপ: ব্রাউজার (Chrome, Firefox) দিয়ে চলে। HTML, CSS, JavaScript দিয়ে তৈরি।
  3. ডেস্কটপ অ্যাপ: কম্পিউটারে সরাসরি ইনস্টল হয়।

অংশ ২: সার্ভার সাইড (Server Side / Back-End)

সংজ্ঞা: ইন্টারনেটে যুক্ত একটি কম্পিউটার যেখানে সফটওয়্যারের মূল যুক্তি চলে।

সার্ভার কী:
সার্ভার একটি সাধারণ কম্পিউটারের মতোই। পার্থক্য হলো এটি:

  • সবসময় চালু থাকে (২৪/৭)
  • ইন্টারনেটে সংযুক্ত থাকে
  • অনেক মানুষের রিকোয়েস্ট একসাথে সামলাতে পারে

উদাহরণ: আপনি যখন Facebook খোলেন, আপনার ব্রাউজার Facebook-এর সার্ভারে রিকোয়েস্ট পাঠায়। সার্ভার আপনার নিউজফিড ডেটা পাঠায়। আপনার ব্রাউজার সেটা সুন্দর করে দেখায়।


অংশ ৩: ডেটাবেস (Database)

সংজ্ঞা: ডেটা স্থায়ীভাবে সংরক্ষণ করার ব্যবস্থা।

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

ডেটাবেসের ধরন:

  • SQL ডেটাবেস: MySQL, PostgreSQL (টেবিল আকারে ডেটা রাখে)
  • NoSQL ডেটাবেস: MongoDB (নমনীয় কাঠামোতে ডেটা রাখে)
  • Cache: Redis (দ্রুত অ্যাক্সেসের জন্য অস্থায়ী সংরক্ষণ)

৩.২ HTTP প্রোটোকল — ক্লায়েন্ট ও সার্ভারের কথা বলার ভাষা

ক্লায়েন্ট এবং সার্ভার কীভাবে কথা বলে? তারা ব্যবহার করে HTTP (HyperText Transfer Protocol)।

HTTP কী:
এটি একটি নিয়মের সেট। এই নিয়ম মেনে ক্লায়েন্ট রিকোয়েস্ট পাঠায় এবং সার্ভার রেসপন্স দেয়।

HTTP-এর চারটি মূল পদ্ধতি (Methods):

পদ্ধতি মানে উদাহরণ
GET ডেটা নিয়ে আসো Facebook নিউজফিড লোড
POST নতুন ডেটা পাঠাও নতুন পোস্ট করা
PUT বিদ্যমান ডেটা আপডেট করো প্রোফাইল ছবি পরিবর্তন
DELETE ডেটা মুছে দাও পোস্ট মুছে দেওয়া

HTTPS: HTTP-এর নিরাপদ সংস্করণ। এতে ডেটা এনক্রিপ্ট হয়ে যায়, মাঝখানে কেউ পড়তে পারে না।


৩.৩ API — সার্ভারের দরজা

API (Application Programming Interface) হলো সার্ভারের নির্দিষ্ট "দরজা" যার মাধ্যমে ক্লায়েন্ট নির্দিষ্ট কাজ করতে পারে।

সহজ উদাহরণ:
রেস্টুরেন্টে ওয়েটার হলো API। আপনি (ক্লায়েন্ট) ওয়েটারকে অর্ডার দেন। ওয়েটার রান্নাঘরে (সার্ভার) যায়। রান্নাঘর থেকে খাবার এনে দেয়।

API Endpoint এর উদাহরণ:

GET  /api/users/profile     → ব্যবহারকারীর প্রোফাইল দেখো
POST /api/posts/create      → নতুন পোস্ট তৈরি করো
PUT  /api/posts/123/update  → পোস্ট নম্বর ১২৩ আপডেট করো
DELETE /api/posts/123       → পোস্ট নম্বর ১২৩ মুছে দাও
Enter fullscreen mode Exit fullscreen mode

৩.৪ PORT — সার্ভারের দরজা নম্বর

Port কী:
একটি সার্ভারে অনেক সফটওয়্যার একসাথে চলতে পারে। Port নম্বর দিয়ে বোঝা যায় কোন সফটওয়্যারের সাথে কথা বলতে হবে।

উদাহরণ:

  • Port 80: সাধারণ ওয়েব ট্র্যাফিক (HTTP)
  • Port 443: নিরাপদ ওয়েব ট্র্যাফিক (HTTPS)
  • Port 3000: আমরা আমাদের Node.js অ্যাপের জন্য ব্যবহার করি
  • Port 4040: আমাদের চ্যাট অ্যাপের জন্য ব্যবহার করি

তুলনা: ভাবুন একটি বড় অফিস বিল্ডিং। বিল্ডিং হলো সার্ভার, বিভিন্ন অফিস হলো বিভিন্ন সার্ভিস, অফিস নম্বর হলো Port নম্বর।


চতুর্থ অধ্যায়: ডেস্কটপ অ্যাপ্লিকেশন — Python দিয়ে হাতে-কলমে

৪.১ ডেস্কটপ অ্যাপ দুই ধরনের

১. স্বতন্ত্র অ্যাপ (Standalone / Offline):
ইন্টারনেট ছাড়া চলে। উদাহরণ: ক্যালকুলেটর, নোটপ্যাড।

২. ইন্টারনেট-নির্ভর ডেস্কটপ অ্যাপ:
ইন্টারনেটের সাথে যুক্ত থাকে। উদাহরণ: VS Code (এক্সটেনশন ডাউনলোডের জন্য), GitHub Desktop।

৪.২ সফটওয়্যার আউটপুটের দুটি ধরন

১. কনসোল অ্যাপ্লিকেশন:
টার্মিনালে (কালো পর্দায়) চলে। ব্যবহারকারী দেখতে পায়:

1 + 2 = 3
Enter fullscreen mode Exit fullscreen mode

কোনো সুন্দর গ্রাফিক্স নেই।

২. গ্রাফিক্যাল ইউজার ইন্টারফেস (GUI) অ্যাপ:
সুন্দর উইন্ডো, বোতাম, ইনপুট বক্স সহ চলে। উদাহরণ: Windows Calculator, VS Code।

৪.৩ Python দিয়ে সহজ ক্যালকুলেটর বানানো

আমরা Python এর Tkinter লাইব্রেরি ব্যবহার করবো GUI অ্যাপ বানাতে।

প্রথম প্রোগ্রাম — "Hello World" উইন্ডো

import tkinter as tk

def main():
    root = tk.Tk()
    root.title("হ্যালো বিশ্ব!")

    label = tk.Label(root, text="হ্যালো বিশ্ব!", 
                     font=("Arial", 20))
    label.pack(pady=20)

    root.mainloop()

main()
Enter fullscreen mode Exit fullscreen mode

কোড ব্যাখ্যা:

  • import tkinter as tk → Tkinter লাইব্রেরি ব্যবহার করছি
  • tk.Tk() → একটি উইন্ডো তৈরি
  • root.title("হ্যালো বিশ্ব!") → উইন্ডোর শিরোনাম
  • tk.Label(...) → একটি টেক্সট লেবেল
  • root.mainloop() → উইন্ডো খোলা রাখো

চালানোর নিয়ম:

python app.py
Enter fullscreen mode Exit fullscreen mode

এটি চালালে একটি উইন্ডো খুলবে যাতে "হ্যালো বিশ্ব!" লেখা থাকবে।


ক্যালকুলেটর অ্যাপ

import tkinter as tk

def add_numbers():
    try:
        num1 = float(entry1.get())
        num2 = float(entry2.get())
        result = num1 + num2
        result_label.config(text=f"ফলাফল: {result}")
    except ValueError:
        result_label.config(text="সঠিক সংখ্যা দিন!")

def main():
    global entry1, entry2, result_label

    root = tk.Tk()
    root.title("ক্যালকুলেটর")
    root.geometry("300x200")

    tk.Label(root, text="প্রথম সংখ্যা:").pack()
    entry1 = tk.Entry(root)
    entry1.pack()

    tk.Label(root, text="দ্বিতীয় সংখ্যা:").pack()
    entry2 = tk.Entry(root)
    entry2.pack()

    tk.Button(root, text="যোগ করো", 
              command=add_numbers).pack(pady=10)

    result_label = tk.Label(root, text="")
    result_label.pack()

    root.mainloop()

main()
Enter fullscreen mode Exit fullscreen mode

কোড ব্যাখ্যা:

  • entry1.get() → ইনপুট বক্স থেকে মান নেওয়া
  • float(...) → সংখ্যায় রূপান্তর
  • try/except ValueError → ভুল ইনপুট থেকে সুরক্ষা
  • result_label.config(text=...) → লেবেলের টেক্সট পরিবর্তন

৪.৪ হোমওয়ার্ক প্রজেক্ট: পাসওয়ার্ড ম্যানেজার

একটি অফলাইন পাসওয়ার্ড ম্যানেজার বানান যা:

  • পাসওয়ার্ড এনক্রিপ্ট করে রাখে
  • গোপন কী দিয়ে আনলক করা যায়
  • ইন্টারনেট ছাড়া চলে

এটি একটি চমৎকার পোর্টফোলিও প্রজেক্ট।


পঞ্চম অধ্যায়: ওয়েব অ্যাপ্লিকেশন — HTML, CSS ও JavaScript

৫.১ ব্রাউজার কীভাবে কাজ করে

আপনি যখন কোনো ওয়েবসাইটের ঠিকানা টাইপ করেন:

  1. ব্রাউজার সেই ঠিকানার সার্ভারে GET রিকোয়েস্ট পাঠায়
  2. সার্ভার HTML, CSS, JavaScript ফাইল পাঠায়
  3. ব্রাউজার সেগুলো নিয়ে সুন্দর পেজ তৈরি করে

ব্রাউজারের মালিক কে: Google Chrome মালিক Google। Firefox-এর মালিক Mozilla। কিন্তু ব্রাউজারের ভেতরে যে পেজ দেখছেন সেটার মালিক সেই ওয়েবসাইটের স্বত্বাধিকারী।

৫.২ HTML — পেজের কাঠামো

HTML (HyperText Markup Language) দিয়ে পেজের কাঠামো তৈরি হয়।

<!DOCTYPE html>
<html>
<head>
    <title>আমার ওয়েবসাইট</title>
    <link rel="stylesheet" href="style.css">
</head>
<body>
    <h1>স্বাগতম!</h1>
    <p>এটি আমার প্রথম ওয়েবসাইট।</p>
    <button onclick="greet()">ক্লিক করুন</button>

    <script src="script.js"></script>
</body>
</html>
Enter fullscreen mode Exit fullscreen mode

ট্যাগের ব্যাখ্যা:

  • <h1> → শিরোনাম
  • <p> → অনুচ্ছেদ
  • <button> → বোতাম
  • <link> → CSS ফাইল যুক্ত করা
  • <script> → JavaScript ফাইল যুক্ত করা

৫.৩ CSS — পেজের সৌন্দর্য

CSS (Cascading Style Sheets) দিয়ে পেজ সুন্দর করা হয়।

body {
    font-family: Arial, sans-serif;
    background-color: #f0f0f0;
}

h1 {
    color: #333;
    text-align: center;
}

button {
    background-color: #007bff;
    color: white;
    padding: 10px 20px;
    border: none;
    border-radius: 5px;
    cursor: pointer;
}

button:hover {
    background-color: #0056b3;
}
Enter fullscreen mode Exit fullscreen mode

৫.৪ Tailwind CSS — আধুনিক CSS Framework

Tailwind CSS দিয়ে সরাসরি HTML-এ ক্লাস লিখে ডিজাইন করা যায়।

<!-- Tailwind CSS সহ বোতাম -->
<button class="bg-blue-500 text-white px-4 py-2 rounded hover:bg-blue-700">
    ক্লিক করুন
</button>
Enter fullscreen mode Exit fullscreen mode

Tailwind CDN ব্যবহার করতে HTML-এ যোগ করুন:

<script src="https://cdn.tailwindcss.com"></script>
Enter fullscreen mode Exit fullscreen mode

৫.৫ স্ট্যাটিক ও ডায়নামিক ওয়েবসাইট

স্ট্যাটিক ওয়েবসাইট:
শুধু দেখানোর জন্য। কোনো ব্যবহারকারীর ইনপুট নেয় না, ডেটা সংরক্ষণ করে না। উদাহরণ: সাধারণ পোর্টফোলিও সাইট।

ডায়নামিক ওয়েবসাইট:
ব্যবহারকারীর সাথে ইন্টারঅ্যাক্ট করে, ডেটা নেয় এবং সংরক্ষণ করে। উদাহরণ: Facebook, Gmail।


ষষ্ঠ অধ্যায়: ব্যাক-এন্ড ডেভেলপমেন্ট — Node.js ও Express.js

৬.১ Node.js কী এবং কেন ব্যবহার করি

JavaScript মূলত ব্রাউজারে চলে। কিন্তু Node.js দিয়ে JavaScript সার্ভারেও চালানো যায়।

Node.js হলো:

  • JavaScript-এর সার্ভার-সাইড রানটাইম
  • একটি ইঞ্জিন যা সার্ভারে JavaScript কোড চালায়
  • C++ দিয়ে তৈরি (ভেতরে)

কেন Node.js জনপ্রিয়:

  • Front-end এবং Back-end দুটোতেই একই ভাষা (JavaScript)
  • দ্রুত এবং হালকা
  • বিশাল NPM ইকোসিস্টেম

৬.২ Express.js — ওয়েব সার্ভার ফ্রেমওয়ার্ক

Node.js দিয়ে সরাসরি ওয়েব সার্ভার বানানো যায়, কিন্তু কঠিন। Express.js সেটা সহজ করে দেয়।

Express.js ইনস্টল:

npm install express
Enter fullscreen mode Exit fullscreen mode

৬.৩ সম্পূর্ণ ওয়েব অ্যাপ্লিকেশন — Contact Form

এটি একটি পূর্ণাঙ্গ ওয়েব অ্যাপ্লিকেশন যেখানে:

  • ব্যবহারকারী একটি ফর্ম পূরণ করবেন
  • ডেটা সার্ভারে যাবে
  • সার্ভার ডেটা সংরক্ষণ করবে

প্রজেক্ট কাঠামো

my-web-app/
├── public/
│   └── index.html
├── app.js
└── package.json
Enter fullscreen mode Exit fullscreen mode

index.html (Front-End)

<!DOCTYPE html>
<html lang="bn">
<head>
    <meta charset="UTF-8">
    <title>যোগাযোগ ফর্ম</title>
    <script src="https://cdn.tailwindcss.com"></script>
</head>
<body class="bg-gray-100 min-h-screen flex items-center justify-center">

    <div class="bg-white p-8 rounded-lg shadow-md w-96">
        <h1 class="text-2xl font-bold text-center mb-6">
            আমার সাথে যোগাযোগ করুন
        </h1>

        <form action="/submit-form" method="POST">
            <div class="mb-4">
                <label class="block text-gray-700 mb-2">নাম</label>
                <input 
                    type="text" 
                    name="name"
                    class="w-full border rounded px-3 py-2 focus:outline-none focus:border-blue-500"
                    placeholder="আপনার নাম লিখুন"
                    required
                >
            </div>

            <div class="mb-4">
                <label class="block text-gray-700 mb-2">ইমেইল</label>
                <input 
                    type="email" 
                    name="email"
                    class="w-full border rounded px-3 py-2"
                    placeholder="আপনার ইমেইল"
                    required
                >
            </div>

            <div class="mb-4">
                <label class="block text-gray-700 mb-2">মোবাইল নম্বর</label>
                <input 
                    type="tel" 
                    name="mobile"
                    class="w-full border rounded px-3 py-2"
                    placeholder="০১XXXXXXXXX"
                >
            </div>

            <div class="mb-6">
                <label class="block text-gray-700 mb-2">বার্তা</label>
                <textarea 
                    name="message"
                    class="w-full border rounded px-3 py-2 h-24"
                    placeholder="আপনার বার্তা লিখুন"
                ></textarea>
            </div>

            <button 
                type="submit"
                class="w-full bg-blue-500 text-white py-2 rounded hover:bg-blue-700 transition"
            >
                পাঠান
            </button>
        </form>
    </div>

</body>
</html>
Enter fullscreen mode Exit fullscreen mode

app.js (Back-End)

// প্রয়োজনীয় লাইব্রেরি আনা হচ্ছে
const express = require('express');
const path = require('path');
const fs = require('fs');

// Express অ্যাপ তৈরি
const app = express();

// Middleware সেটআপ
// এই দুটি লাইন ছাড়া form data পড়া যাবে না
app.use(express.urlencoded({ extended: true }));
app.use(express.json());

// Static ফাইল সার্ভ করা (HTML, CSS)
app.use(express.static(path.join(__dirname, 'public')));

// ==========================================
// ROUTE 1: প্রথম পেজ দেখানো
// ==========================================
app.get('/', (req, res) => {
    // index.html ফাইল ব্রাউজারে পাঠানো হচ্ছে
    res.sendFile(path.join(__dirname, 'public', 'index.html'));
});

// ==========================================
// ROUTE 2: ফর্ম ডেটা গ্রহণ করা
// ==========================================
app.post('/submit-form', (req, res) => {
    // ব্যবহারকারীর পাঠানো ডেটা
    const { name, email, mobile, message } = req.body;

    console.log('নতুন বার্তা পাওয়া গেছে:');
    console.log('নাম:', name);
    console.log('ইমেইল:', email);
    console.log('মোবাইল:', mobile);
    console.log('বার্তা:', message);

    // ডেটা JSON ফাইলে সংরক্ষণ
    const newEntry = {
        name,
        email,
        mobile,
        message,
        timestamp: new Date().toISOString()
    };

    // বিদ্যমান ডেটা পড়া
    let existingData = [];
    if (fs.existsSync('requests.json')) {
        const fileContent = fs.readFileSync('requests.json', 'utf8');
        existingData = JSON.parse(fileContent);
    }

    // নতুন ডেটা যোগ করে সংরক্ষণ
    existingData.push(newEntry);
    fs.writeFileSync('requests.json', JSON.stringify(existingData, null, 2));

    // ব্যবহারকারীকে ধন্যবাদ জানানো
    res.send(`
        <h1>ধন্যবাদ, ${name}!</h1>
        <p>আপনার বার্তা পাওয়া গেছে।</p>
        <a href="/">ফিরে যান</a>
    `);
});

// ==========================================
// ROUTE 3: সব বার্তা দেখা (Admin)
// ==========================================
app.get('/admin/submissions', (req, res) => {
    if (!fs.existsSync('requests.json')) {
        return res.json([]);
    }

    const data = JSON.parse(fs.readFileSync('requests.json', 'utf8'));
    res.json(data);
});

// ==========================================
// সার্ভার চালু করা
// ==========================================
const PORT = 3000;
app.listen(PORT, () => {
    console.log(`সার্ভার চলছে: http://localhost:${PORT}`);
});
Enter fullscreen mode Exit fullscreen mode

সার্ভার চালানো

# প্রথমে npm ইনিশিয়ালাইজ
npm init -y

# Express ইনস্টল
npm install express

# সার্ভার চালু
node app.js
Enter fullscreen mode Exit fullscreen mode

এরপর ব্রাউজারে যান: http://localhost:3000


৬.৪ ডেটার প্রবাহ বোঝা (Data Flow)

ব্যবহারকারী → ফর্ম পূরণ → Submit বোতাম
         ↓
    HTML (Client Side)
    POST /submit-form রিকোয়েস্ট তৈরি
         ↓
  ইন্টারনেট (HTTP Protocol)
         ↓
    Express.js Server (Back-End)
    req.body থেকে ডেটা পড়া
         ↓
    ডেটাবেস / ফাইলে সংরক্ষণ
         ↓
    Response পাঠানো ("ধন্যবাদ!")
         ↓
  ব্যবহারকারীর স্ক্রিনে দেখানো
Enter fullscreen mode Exit fullscreen mode

মনে রাখার বিষয়: app.js ফাইল কখনো ব্যবহারকারীর ব্রাউজারে যায় না। এটা সার্ভারেই থাকে। ব্যবহারকারী শুধু index.html দেখতে পান।


সপ্তম অধ্যায়: Git ও GitHub — ভার্সন কন্ট্রোল

৭.১ Git কেন দরকার?

কল্পনা করুন আপনি পাঁচ মাস ধরে একটি প্রজেক্টে কাজ করেছেন। হঠাৎ আপনার ল্যাপটপ নষ্ট হয়ে গেল। সব কোড চলে গেল। এই পরিস্থিতি থেকে বাঁচার জন্য Git।

Git-এর তিনটি প্রধান কাজ:

১. পরিবর্তনের ইতিহাস রাখা:
আপনি কখন কী পরিবর্তন করেছেন সব রেকর্ড থাকে। ভুল হলে আগের অবস্থায় ফেরা যায়।

২. দলীয় কাজ সহজ করা:
৬০ জন ডেভেলপার একসাথে কাজ করতে পারেন। কে কখন কী পরিবর্তন করেছেন সবাই দেখতে পারেন।

৩. কোড নিরাপদ রাখা:
GitHub-এ কোড রাখলে ল্যাপটপ নষ্ট হলেও কোড হারায় না।

৭.২ GitHub কী?

GitHub হলো Git-এর জন্য একটি অনলাইন প্ল্যাটফর্ম — কোডের জন্য Google Drive।

মজার তথ্য: GitHub এর Arctic Vault প্রকল্পে পৃথিবীর গুরুত্বপূর্ণ কোড নরওয়ের আর্কটিক অঞ্চলে একটি সুরক্ষিত গুহায় সংরক্ষিত আছে। পৃথিবীতে বড় কোনো বিপর্যয় হলেও কোড টিকে থাকবে।

৭.৩ Git এর মূল কমান্ড

প্রজেক্ট শুরু করা

# নতুন Git রিপোজিটরি তৈরি
git init

# GitHub থেকে রিপোজিটরি ডাউনলোড
git clone https://github.com/username/project-name.git
Enter fullscreen mode Exit fullscreen mode

পরিবর্তন ট্র্যাক করা

# কী কী পরিবর্তন হয়েছে দেখুন
git status

# সব পরিবর্তন স্টেজে আনুন
git add .

# অথবা নির্দিষ্ট ফাইল স্টেজে আনুন
git add filename.js
Enter fullscreen mode Exit fullscreen mode

পরিবর্তন সংরক্ষণ করা (Commit)

# Commit করা — একটি নাম দিয়ে সেভ করা
git commit -m "ব্যবহারকারীর ফর্ম যোগ করা হলো"

# Commit-এর ইতিহাস দেখুন
git log
Enter fullscreen mode Exit fullscreen mode

GitHub-এ পাঠানো (Push)

# GitHub-এ পাঠানো
git push origin main

# GitHub থেকে আনা
git pull origin main
Enter fullscreen mode Exit fullscreen mode

Branch নিয়ে কাজ

# সব Branch দেখুন
git branch

# নতুন Branch তৈরি
git checkout -b chat-app

# Branch পরিবর্তন
git checkout main
Enter fullscreen mode Exit fullscreen mode

৭.৪ GitHub Account সেটআপ

ধাপ ১: github.com-এ যান এবং অ্যাকাউন্ট খুলুন।

ধাপ ২: আপনার কম্পিউটারে Git ইনস্টল করুন:

  • Windows: git-scm.com থেকে ডাউনলোড
  • Linux: sudo apt install git
  • Mac: brew install git

ধাপ ৩: পরিচয় সেটআপ:

git config --global user.name "আপনার নাম"
git config --global user.email "আপনার@ইমেইল.com"
Enter fullscreen mode Exit fullscreen mode

ধাপ ৪: SSH Key তৈরি (নিরাপদ সংযোগের জন্য):

ssh-keygen -t rsa -b 4096 -C "আপনার@ইমেইল.com"
Enter fullscreen mode Exit fullscreen mode

তারপর ~/.ssh/id_rsa.pub ফাইলের বিষয়বস্তু GitHub-এ যোগ করুন।

৭.৫ .gitignore — কী পাঠাবেন না

কিছু ফাইল GitHub-এ পাঠানো উচিত নয়:

# Node.js এর ডিপেন্ডেন্সি ফোল্ডার
node_modules/

# পরিবেশ পরিবর্তনশীল (গোপন তথ্য)
.env

# অপারেটিং সিস্টেমের ফাইল
.DS_Store
Thumbs.db

# Build ফাইল
dist/
build/
Enter fullscreen mode Exit fullscreen mode

.gitignore ফাইলে এই নাম লিখলে Git সেই ফাইলগুলো উপেক্ষা করে।


অষ্টম অধ্যায়: ক্লাউড সার্ভার ও ডেপ্লয়মেন্ট

৮.১ ডেপ্লয়মেন্ট কী?

আপনার কম্পিউটারে সফটওয়্যার বানালে শুধু আপনিই ব্যবহার করতে পারবেন। সবাই ব্যবহার করতে পারলে আপনার সফটওয়্যার সার্ভারে রাখতে হবে। এটাই ডেপ্লয়মেন্ট।

৮.২ ক্লাউড সার্ভার প্রোভাইডার

বিশ্বের প্রধান ক্লাউড সার্ভার প্রদানকারী:

প্রদানকারী বৈশিষ্ট্য কখন ব্যবহার করবেন
DigitalOcean সহজ, সাশ্রয়ী শিক্ষানবিস ও ছোট প্রজেক্ট
AWS (Amazon) সবচেয়ে বড়, জটিল বড় কোম্পানি
Google Cloud Google সেবা ইন্টিগ্রেশন ML/AI প্রজেক্ট
Azure (Microsoft) Microsoft সেবা .NET প্রজেক্ট
Vercel ফ্রি, সহজ স্ট্যাটিক সাইট

শিক্ষানবিসদের জন্য: DigitalOcean সবচেয়ে ভালো। মাত্র $6/মাসে একটি সার্ভার পাওয়া যায়।

৮.৩ DigitalOcean-এ সার্ভার তৈরি (Droplet)

DigitalOcean-এ একটি সার্ভারকে "Droplet" বলা হয়।

ধাপ ১: DigitalOcean-এ অ্যাকাউন্ট তৈরি করুন।

ধাপ ২: "Create Droplet" ক্লিক করুন।

ধাপ ৩: সেটিং:

  • OS: Ubuntu 22.04 LTS
  • Plan: Basic, Regular, $6/মাস (1GB RAM, 1 CPU)
  • Data Center: Singapore (বাংলাদেশের কাছে)
  • Authentication: SSH Key (নিরাপদ) অথবা Password

ধাপ ৪: "Create Droplet" ক্লিক করুন।

কয়েক মিনিট পরে আপনার সার্ভার প্রস্তুত। একটি IP Address পাবেন।

৮.৪ সার্ভারে প্রবেশ (SSH)

# SSH দিয়ে সার্ভারে প্রবেশ
ssh root@YOUR_SERVER_IP

# উদাহরণ
ssh root@164.90.xxx.xxx
Enter fullscreen mode Exit fullscreen mode

পাসওয়ার্ড দিলে সার্ভারে প্রবেশ হবে। এখন আপনি সার্ভারের terminal-এ আছেন।

৮.৫ সার্ভারে Node.js ইনস্টল

# প্যাকেজ আপডেট করুন
apt update && apt upgrade -y

# Node.js ডাউনলোড লিংক পেতে
curl -fsSL https://deb.nodesource.com/setup_18.x | bash -

# Node.js ইনস্টল
apt install -y nodejs

# যাচাই করুন
node --version
npm --version
Enter fullscreen mode Exit fullscreen mode

৮.৬ সার্ভারে প্রজেক্ট ডেপ্লয় করা

পদ্ধতি ১: সরাসরি কপি করে

# সার্ভারে ফোল্ডার তৈরি
mkdir hira-web
cd hira-web

# ফাইল তৈরি এবং কোড পেস্ট
nano app.js
# কোড পেস্ট করুন, Ctrl+X দিয়ে সেভ করুন

# ডিপেন্ডেন্সি ইনস্টল
npm install express

# সার্ভার চালু
node app.js
Enter fullscreen mode Exit fullscreen mode

পদ্ধতি ২: GitHub থেকে ডাউনলোড করে (বেশি ভালো)

# GitHub থেকে ক্লোন
git clone git@github.com:username/project.git

# ফোল্ডারে প্রবেশ
cd project

# ডিপেন্ডেন্সি ইনস্টল
npm install

# সার্ভার চালু
node app.js
Enter fullscreen mode Exit fullscreen mode

এখন আপনার সার্ভারের IP দিয়ে যে কেউ অ্যাক্সেস করতে পারবেন:
http://YOUR_IP:PORT

৮.৭ PM2 — সার্ভার সবসময় চালু রাখা

সমস্যা: টার্মিনাল বন্ধ করলে সার্ভার বন্ধ হয়ে যায়।

সমাধান: PM2 ব্যবহার করুন।

# PM2 ইনস্টল
npm install -g pm2

# PM2 দিয়ে সার্ভার চালু
pm2 start app.js

# সার্ভারের অবস্থা দেখুন
pm2 status

# সার্ভার বন্ধ করুন
pm2 stop app.js

# সার্ভার রিস্টার্ট করুন
pm2 restart app.js

# সিস্টেম রিবুটের পরেও চালু থাকতে
pm2 startup
pm2 save
Enter fullscreen mode Exit fullscreen mode

এখন টার্মিনাল বন্ধ করলেও সার্ভার চলতে থাকবে।

৮.৮ Vercel — সহজ বিনামূল্যে ডেপ্লয়মেন্ট

ছোট প্রজেক্টের জন্য Vercel সবচেয়ে সহজ।

কীভাবে:
১. vercel.com-এ GitHub অ্যাকাউন্ট দিয়ে লগিন করুন
২. "Import Project" ক্লিক করুন
৩. আপনার GitHub রিপোজিটরি বেছে নিন
৪. Deploy ক্লিক করুন

কয়েক মিনিটে আপনার সাইট লাইভ হয়ে যাবে। একটি URL পাবেন যেটা সবাই ব্যবহার করতে পারবে।

৮.৯ ডেপ্লয়মেন্ট পাইপলাইন

সম্পূর্ণ প্রবাহ:

আপনার কম্পিউটার (Local)
        ↓ git push
GitHub Repository
        ↓ স্বয়ংক্রিয় ডেপ্লয়
Vercel / DigitalOcean Server
        ↓
ব্যবহারকারীর ব্রাউজার
Enter fullscreen mode Exit fullscreen mode

GitHub Actions দিয়ে স্বয়ংক্রিয় ডেপ্লয়মেন্ট:
GitHub-এ কোড push করলে স্বয়ংক্রিয়ভাবে সার্ভারে ডেপ্লয় হয়। এটাই CI/CD (Continuous Integration/Continuous Deployment)।


নবম অধ্যায়: রিয়েল-টাইম অ্যাপ্লিকেশন — Socket.io দিয়ে চ্যাট অ্যাপ

৯.১ সাধারণ HTTP vs WebSocket

সাধারণ HTTP:

  • ব্যবহারকারী রিকোয়েস্ট পাঠায়
  • সার্ভার রেসপন্স দেয়
  • সংযোগ শেষ

এটা চিঠি পাঠানোর মতো। চিঠি পাঠালে জবাব আসবে। কিন্তু মাঝখানে সার্ভার কিছু পাঠাতে পারবে না।

WebSocket:

  • একটি স্থায়ী সংযোগ তৈরি হয়
  • যেকোনো সময় যেকোনো দিকে ডেটা যেতে পারে
  • সংযোগ বিচ্ছিন্ন না হওয়া পর্যন্ত চলে

এটা ফোন কলের মতো। দুজনে একসাথে কথা বলতে পারেন।

কোথায় WebSocket দরকার:

  • চ্যাট অ্যাপ্লিকেশন
  • রিয়েল-টাইম নোটিফিকেশন
  • অনলাইন গেম
  • স্টক মার্কেট প্রাইস আপডেট
  • Uber-এর ড্রাইভার ট্র্যাকিং

৯.২ মোবাইলে নোটিফিকেশন কীভাবে আসে?

আপনার ফোন বিশ্রামে আছে, কোনো অ্যাপ খোলা নেই। হঠাৎ WhatsApp নোটিফিকেশন আসলো।

আপনি কোনো বোতাম চাপেননি। তাহলে কীভাবে এলো?

উত্তর: আপনার ফোনে একটি অদৃশ্য সংযোগ সবসময় চালু থাকে। এটি WebSocket। WhatsApp-এর সার্ভার থেকে আপনার ফোনে একটি "পাইপ" খোলা আছে। নতুন বার্তা এলে এই পাইপ দিয়ে নোটিফিকেশন আসে।

৯.৩ Socket.io কী?

Socket.io হলো Node.js-এর একটি লাইব্রেরি যা WebSocket সহজে ব্যবহার করতে দেয়।

দুটো অংশ:

  • Server-side Socket.io: সার্ভারে চলে (Node.js)
  • Client-side Socket.io: ব্রাউজারে চলে (JavaScript)

দুটো মিলে একটি রিয়েল-টাইম সংযোগ তৈরি করে।

৯.৪ সম্পূর্ণ চ্যাট অ্যাপ্লিকেশন

প্রজেক্ট কাঠামো

chat-app/
├── public/
│   └── index.html
├── server.js
└── package.json
Enter fullscreen mode Exit fullscreen mode

সার্ভার ইনস্টলেশন

npm init -y
npm install express socket.io
Enter fullscreen mode Exit fullscreen mode

server.js — ব্যাক-এন্ড

const express = require('express');
const http = require('http');
const socketIO = require('socket.io');
const path = require('path');

// Express এবং HTTP সার্ভার তৈরি
const app = express();
const server = http.createServer(app);

// Socket.io এর সাথে HTTP সার্ভার যুক্ত
const io = socketIO(server);

// Static ফাইল সার্ভ করা
app.use(express.static(path.join(__dirname, 'public')));

// প্রধান পেজ দেখানো
app.get('/', (req, res) => {
    res.sendFile(path.join(__dirname, 'public', 'index.html'));
});

// ======================================
// Socket.io ইভেন্ট হ্যান্ডলিং
// ======================================
io.on('connection', (socket) => {
    console.log('নতুন ব্যবহারকারী সংযুক্ত হয়েছেন');

    // ব্যবহারকারী নাম দিয়ে ঢুকলে
    socket.on('join', (username) => {
        socket.username = username;

        // সবাইকে জানানো
        io.emit('user-joined', `${username} চ্যাটে যোগ দিয়েছেন!`);

        console.log(`${username} যোগ দিয়েছেন`);
    });

    // বার্তা পাঠালে
    socket.on('message', (data) => {
        console.log(`বার্তা পাওয়া: ${data.text} from ${data.username}`);

        // সবার কাছে বার্তা পাঠানো
        io.emit('message', {
            username: data.username,
            text: data.text,
            time: new Date().toLocaleTimeString('bn-BD')
        });
    });

    // ব্যবহারকারী বের হলে
    socket.on('disconnect', () => {
        if (socket.username) {
            io.emit('user-left', `${socket.username} চ্যাট ছেড়ে গেছেন।`);
            console.log(`${socket.username} বের হয়েছেন`);
        }
    });
});

// সার্ভার চালু
const PORT = 4090;
server.listen(PORT, () => {
    console.log(`চ্যাট সার্ভার চলছে: http://localhost:${PORT}`);
});
Enter fullscreen mode Exit fullscreen mode

public/index.html — ফ্রন্ট-এন্ড

<!DOCTYPE html>
<html lang="bn">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>চ্যাট রুম</title>
    <script src="https://cdn.tailwindcss.com"></script>
    <!-- Socket.io Client লাইব্রেরি -->
    <script src="/socket.io/socket.io.js"></script>
</head>
<body class="bg-gray-900 text-white min-h-screen">

    <!-- নাম দেওয়ার স্ক্রিন -->
    <div id="login-screen" class="flex items-center justify-center min-h-screen">
        <div class="bg-gray-800 p-8 rounded-lg w-80">
            <h1 class="text-2xl font-bold text-center mb-6">চ্যাট রুমে স্বাগতম</h1>
            <input 
                type="text" 
                id="username-input"
                placeholder="আপনার নাম লিখুন"
                class="w-full bg-gray-700 rounded px-4 py-2 mb-4 focus:outline-none focus:ring-2 focus:ring-blue-500"
            >
            <button 
                onclick="joinChat()"
                class="w-full bg-blue-600 hover:bg-blue-700 py-2 rounded font-bold transition"
            >
                ঢুকুন
            </button>
        </div>
    </div>

    <!-- চ্যাট স্ক্রিন (শুরুতে লুকানো) -->
    <div id="chat-screen" class="hidden flex flex-col h-screen">

        <!-- শিরোনাম বার -->
        <div class="bg-gray-800 p-4 flex items-center shadow">
            <div class="w-10 h-10 bg-blue-600 rounded-full flex items-center justify-center mr-3">
                <span>💬</span>
            </div>
            <div>
                <h2 class="font-bold">গ্রুপ চ্যাট</h2>
                <p class="text-green-400 text-sm">● সক্রিয়</p>
            </div>
        </div>

        <!-- বার্তার জায়গা -->
        <div id="messages" class="flex-1 overflow-y-auto p-4 space-y-3">
            <!-- বার্তাগুলো এখানে দেখাবে -->
        </div>

        <!-- বার্তা পাঠানোর বার -->
        <div class="bg-gray-800 p-4 flex gap-2">
            <input 
                type="text" 
                id="message-input"
                placeholder="বার্তা লিখুন..."
                class="flex-1 bg-gray-700 rounded-full px-4 py-2 focus:outline-none"
                onkeypress="handleKeyPress(event)"
            >
            <button 
                onclick="sendMessage()"
                class="bg-blue-600 hover:bg-blue-700 w-10 h-10 rounded-full flex items-center justify-center transition"
            ></button>
        </div>

    </div>

    <script>
        // Socket.io সংযোগ
        const socket = io();

        let currentUsername = '';

        // নামে যুক্ত হওয়া
        function joinChat() {
            const usernameInput = document.getElementById('username-input');
            const username = usernameInput.value.trim();

            if (!username) {
                alert('নাম লিখুন!');
                return;
            }

            currentUsername = username;

            // সার্ভারে পাঠানো
            socket.emit('join', username);

            // স্ক্রিন পরিবর্তন
            document.getElementById('login-screen').classList.add('hidden');
            document.getElementById('chat-screen').classList.remove('hidden');
        }

        // বার্তা পাঠানো
        function sendMessage() {
            const messageInput = document.getElementById('message-input');
            const text = messageInput.value.trim();

            if (!text) return;

            // সার্ভারে পাঠানো
            socket.emit('message', {
                username: currentUsername,
                text: text
            });

            messageInput.value = '';
        }

        // Enter চাপলে পাঠানো
        function handleKeyPress(event) {
            if (event.key === 'Enter') {
                sendMessage();
            }
        }

        // ========================================
        // সার্ভার থেকে ইভেন্ট গ্রহণ
        // ========================================

        // বার্তা পাওয়া গেলে
        socket.on('message', (data) => {
            const messagesDiv = document.getElementById('messages');
            const isOwn = data.username === currentUsername;

            const messageEl = document.createElement('div');
            messageEl.className = `flex ${isOwn ? 'justify-end' : 'justify-start'}`;
            messageEl.innerHTML = `
                <div class="max-w-xs">
                    ${!isOwn ? `<p class="text-blue-400 text-xs mb-1">${data.username}</p>` : ''}
                    <div class="${isOwn ? 'bg-blue-600' : 'bg-gray-700'} rounded-2xl px-4 py-2">
                        <p>${data.text}</p>
                        <p class="text-xs opacity-70 mt-1">${data.time}</p>
                    </div>
                </div>
            `;

            messagesDiv.appendChild(messageEl);
            messagesDiv.scrollTop = messagesDiv.scrollHeight;
        });

        // কেউ যোগ দিলে
        socket.on('user-joined', (message) => {
            addSystemMessage(message, 'text-green-400');
        });

        // কেউ বের গেলে
        socket.on('user-left', (message) => {
            addSystemMessage(message, 'text-red-400');
        });

        // সিস্টেম বার্তা দেখানো
        function addSystemMessage(text, colorClass) {
            const messagesDiv = document.getElementById('messages');
            const el = document.createElement('div');
            el.className = `text-center text-sm ${colorClass} py-1`;
            el.textContent = text;
            messagesDiv.appendChild(el);
            messagesDiv.scrollTop = messagesDiv.scrollHeight;
        }
    </script>

</body>
</html>
Enter fullscreen mode Exit fullscreen mode

চালানোর নিয়ম

node server.js
Enter fullscreen mode Exit fullscreen mode

ব্রাউজারে যান: http://localhost:4090

একাধিক ট্যাব বা ব্রাউজার খুলুন। বিভিন্ন নামে ঢুকুন। একজনের বার্তা সবাই একসাথে দেখতে পাবেন!


৯.৫ চ্যাট অ্যাপের প্রযুক্তি বোঝা

ব্রাউজার ১          ব্রাউজার ২          ব্রাউজার ৩
(রাহেলা)           (করিম)             (সুমাইয়া)
    |                   |                   |
    |===Socket.io===========Socket.io=====|
                         |
                    Socket.io Server
                    (app.js চলছে)
                         |
                  io.emit('message', data)
                  ↙              ↓             ↘
              রাহেলা          করিম         সুমাইয়া
           (সবাই পায়)       (সবাই পায়)   (সবাই পায়)
Enter fullscreen mode Exit fullscreen mode

socket.emit vs io.emit পার্থক্য:

  • socket.emit(...) → শুধু যে পাঠিয়েছে তাকে পাঠায়
  • io.emit(...) → সবাইকে পাঠায় (broadcast)
  • socket.broadcast.emit(...) → যে পাঠিয়েছে সে ছাড়া সবাইকে পাঠায়

দশম অধ্যায়: CI/CD পাইপলাইন

১০.১ CI/CD কী?

CI (Continuous Integration): নিরন্তর একীভূতকরণ। ডেভেলপাররা ছোট ছোট পরিবর্তন নিয়মিত GitHub-এ পাঠান। প্রতিটি পরিবর্তন স্বয়ংক্রিয়ভাবে টেস্ট হয়।

CD (Continuous Deployment): নিরন্তর ডেপ্লয়মেন্ট। টেস্ট পাস হলে স্বয়ংক্রিয়ভাবে সার্ভারে ডেপ্লয় হয়।

আগের সমস্যা:
কোনো পরিবর্তন করলে:

  1. কোড লিখুন
  2. GitHub-এ পাঠান
  3. সার্ভারে SSH করুন
  4. git pull করুন
  5. npm install করুন
  6. সার্ভার রিস্টার্ট করুন

এটা ম্যানুয়াল, সময়সাপেক্ষ এবং ভুলের সম্ভাবনা বেশি।

CI/CD সমাধান:
শুধু GitHub-এ push করুন। বাকি সব স্বয়ংক্রিয়।

১০.২ GitHub Actions দিয়ে CI/CD

.github/workflows/deploy.yml

name: ডেপ্লয় করুন

# কখন চলবে
on:
  push:
    branches: [ main ]

jobs:
  deploy:
    runs-on: ubuntu-latest

    steps:
    # কোড ডাউনলোড
    - name: কোড চেকআউট
      uses: actions/checkout@v3

    # টেস্ট চালানো
    - name: Node.js সেটআপ
      uses: actions/setup-node@v3
      with:
        node-version: '18'

    - name: ডিপেন্ডেন্সি ইনস্টল
      run: npm install

    # সার্ভারে ডেপ্লয়
    - name: সার্ভারে পাঠানো
      uses: appleboy/ssh-action@master
      with:
        host: ${{ secrets.SERVER_HOST }}
        username: root
        key: ${{ secrets.SSH_PRIVATE_KEY }}
        script: |
          cd /root/my-project
          git pull origin main
          npm install
          pm2 restart app
Enter fullscreen mode Exit fullscreen mode

এই ফাইলটি প্রজেক্টে যোগ করলে GitHub-এ push করার সাথে সাথে সার্ভারে স্বয়ংক্রিয় ডেপ্লয় হবে।

১০.৩ সম্পূর্ণ ডেপ্লয়মেন্ট প্রবাহ

আপনার কম্পিউটার
        |
   [কোড লেখুন]
        |
   git add .
   git commit -m "নতুন ফিচার"
   git push origin main
        |
        ↓
   GitHub Repository
        |
   [GitHub Actions চালু হয়]
        |
   ↓ টেস্ট চলে
   ↓ বিল্ড হয়
        |
   সার্ভারে SSH
   git pull
   npm install
   pm2 restart
        |
        ↓
   DigitalOcean Server
        |
        ↓
   ব্যবহারকারীরা নতুন ভার্সন পান
Enter fullscreen mode Exit fullscreen mode

একাদশ অধ্যায়: ক্যারিয়ার পথ ও অর্থ উপার্জনের উপায়

১১.১ SDLC-তে কত ধরনের ক্যারিয়ার আছে

একটি সফটওয়্যারের জীবনচক্রের প্রতিটি ধাপে আলাদা ক্যারিয়ার আছে:

ধাপ ক্যারিয়ার
পরিকল্পনা Business Analyst
পণ্য বিশ্লেষণ Product Manager
ডিজাইন UI/UX Designer
ডেভেলপমেন্ট Front-end Developer, Back-end Developer, Full-stack Developer
টেস্টিং QA Engineer
ডেপ্লয়মেন্ট DevOps Engineer, Cloud Engineer
রক্ষণাবেক্ষণ Site Reliability Engineer (SRE)
নিরাপত্তা Cybersecurity Engineer
ডেটা Data Scientist, Data Engineer
AI ML Engineer, AI Researcher

১১.২ একজন সফটওয়্যার ইঞ্জিনিয়ারের সত্যিকারের ভূমিকা

অনেকে ভাবেন সফটওয়্যার ডেভেলপারের কাজ শুধু কোড লেখা। এটা ভুল।

একজন ভালো সফটওয়্যার ইঞ্জিনিয়ার:

  • ব্যবসার উদ্দেশ্য বোঝেন
  • পরিষ্কারভাবে যোগাযোগ করেন
  • প্রয়োজনীয়তা সঠিকভাবে বোঝেন (না বুঝলে জিজ্ঞেস করেন)
  • ডেটা দিয়ে সিদ্ধান্ত নেন
  • টিমকে সহায়তা করেন
  • ব্যবসার পরিবর্তনের সাথে মানিয়ে নেন

১১.৩ সফটওয়্যার দিয়ে অর্থ উপার্জন — চাকরির বাইরে

চাকরি ছাড়াও সফটওয়্যার দিয়ে অনেকভাবে অর্থ উপার্জন করা যায়:


পথ ১: ফ্রিল্যান্সিং

Fiverr, Upwork, Freelancer.com-এ প্রজেক্ট করুন। বাংলাদেশে বসে বিদেশী ক্লায়েন্টের কাজ করুন।

কী কী বিক্রি করা যায়:

  • ওয়েবসাইট তৈরি
  • বাগ ফিক্স
  • API তৈরি
  • মোবাইল অ্যাপ

পথ ২: প্রোডাক্ট বিক্রি

নিজের সফটওয়্যার বানিয়ে বিক্রি করুন।

CodeCanyon (codecanyon.net):
Node.js, Django, Laravel দিয়ে তৈরি স্ক্রিপ্ট এখানে বিক্রি করা যায়।

উদাহরণ প্রজেক্ট:

  • YouTube ডাউনলোডার (AI-চালিত)
  • চ্যাট অ্যাপ
  • অ্যাডমিন ড্যাশবোর্ড
  • বুকিং সিস্টেম

পথ ৩: SaaS (Software as a Service)

একটি অনলাইন টুল বানান যেখানে মাসিক সাবস্ক্রিপশন নেওয়া হয়।

উদাহরণ SaaS আইডিয়া:

  • AI ভিডিও এডিটর (সাইলেন্ট কাট, রিপিট রিমুভ)
  • YouTube ট্রান্সক্রিপশন টুল
  • সেন্টিমেন্ট অ্যানালাইসিস টুল
  • স্বয়ংক্রিয় সোশ্যাল মিডিয়া পোস্ট জেনারেটর

SaaS-এ অর্থ উপার্জন:

  • বিজ্ঞাপন দেখানো (AdSense)
  • মাসিক সাবস্ক্রিপশন
  • প্রিমিয়াম ফিচার

পথ ৪: ইন্ডি হ্যাকার (Indie Hacker)

IndieHackers.com-এ গিয়ে দেখুন কত ডেভেলপার একা একা প্রোডাক্ট বানিয়ে লক্ষ টাকা আয় করছেন।

কীভাবে শুরু করবেন:
১. একটি সমস্যা খুঁজুন যা আপনি অনুভব করেছেন
২. সেটার সমাধান বানান
৩. ProductHunt-এ লঞ্চ করুন
৪. ফিডব্যাক নিন এবং উন্নত করুন
৫. ধীরে ধীরে ব্যবহারকারী বাড়ান


পথ ৫: AI-চালিত প্রোডাক্ট

আইডিয়া: AI ভিডিও এডিটর

যারা YouTube বা TikTok-এর জন্য ভিডিও বানান তারা সবচেয়ে বেশি সময় নষ্ট করেন এডিটিংয়ে। বিশেষত:

  • সাইলেন্ট পার্ট কাটা
  • রিটেকের পুনরাবৃত্তি মুছে দেওয়া
  • ক্যাপশন যোগ করা

Python দিয়ে এটা তৈরি করা সম্ভব:

# সাইলেন্ট ডিটেকশনের জন্য
from pydub import AudioSegment
from pydub.silence import detect_silence

# অডিও থেকে টেক্সটে রূপান্তরের জন্য
import speech_recognition as sr

# ভিডিও প্রক্রিয়াকরণের জন্য
from moviepy.editor import VideoFileClip
Enter fullscreen mode Exit fullscreen mode

Google এর বিনামূল্যে Speech-to-Text API ব্যবহার করা যায়।

বাজার বিশ্লেষণ (Semrush/Google Trends):
"AI video editor" - বৈশ্বিক মাসিক সার্চ ভলিউম: ১২,০০০+


১১.৪ প্রজেক্ট পোর্টফোলিও — কী করবেন, কী করবেন না

যা করবেন:
✅ AI বা ML যুক্ত প্রজেক্ট বানান
✅ ক্লাউডে ডেপ্লয় করুন (লাইভ লিংক দিন)
✅ GitHub-এ কোড রাখুন
✅ README.md তে ভালো ডকুমেন্টেশন লিখুন
✅ ডেটাবেস সহ Full-stack প্রজেক্ট বানান
✅ নিজে ব্যাখ্যা করতে পারেন এমন প্রজেক্ট বানান

যা করবেন না:
❌ টিউটোরিয়াল কপি করে সিভিতে দেবেন না
❌ সবাই যা বানায় (To-do List, Calculator) শুধু সেটা দেবেন না
❌ লাইভ নেই এমন প্রজেক্ট দেবেন না
❌ বুঝতে পারবেন না এমন কোড দেবেন না


১১.৫ মার্কেট বিশ্লেষণ টুল

নিজের প্রোডাক্টের চাহিদা যাচাই করুন:

Semrush / Ahrefs:

  • কত মানুষ এই কীওয়ার্ড সার্চ করে
  • প্রতিযোগীরা কে কে

Google Trends:

  • চাহিদা বাড়ছে নাকি কমছে

ProductHunt:

  • নতুন পণ্যের ট্রেন্ড
  • ব্যবহারকারীর প্রতিক্রিয়া

IndieHackers:

  • সফল ইন্ডি ডেভেলপারদের গল্প
  • রাজস্বের পরিসংখ্যান

পরিশিষ্ট ক: প্রজেক্ট আইডিয়ার তালিকা

এই বইয়ের জ্ঞান দিয়ে আপনি নিচের প্রজেক্টগুলো বানাতে পারবেন:

শিক্ষানবিস পর্যায়

১. পোর্টফোলিও ওয়েবসাইট — HTML, CSS, JavaScript
২. সাধারণ ক্যালকুলেটর — Python + Tkinter
৩. Contact Form — Express.js + JSON সংরক্ষণ
৪. Offline Password Manager — Python + Encryption

মধ্যবর্তী পর্যায়

৫. চ্যাট অ্যাপ — Socket.io + Express.js
৬. YouTube Downloader — Python + yt-dlp
৭. Blog Platform — Full-stack (React + Node.js + Database)
৮. Task Manager — Express.js + PostgreSQL

উন্নত পর্যায়

৯. AI ভিডিও এডিটর — Python + MoviePy + Whisper
১০. YouTube Transcriber + Sentiment Analyzer — Python + NLP
১১. রিয়েল-টাইম নোটিফিকেশন সিস্টেম — Socket.io + Push API
১২. অফলাইন LLM চ্যাটবট — Python + Ollama


পরিশিষ্ট খ: দ্রুত রেফারেন্স কার্ড

Git কমান্ড চিট শিট

# শুরু করা
git init                          # নতুন রিপো
git clone URL                     # ক্লোন করা

# ডেইলি কাজ
git status                        # অবস্থা দেখা
git add .                         # সব স্টেজ করা
git commit -m "বার্তা"           # কমিট করা
git push origin main              # GitHub-এ পাঠানো
git pull origin main              # GitHub থেকে আনা

# Branch কাজ
git branch                        # Branch দেখা
git checkout -b নতুন-branch       # Branch তৈরি
git checkout main                 # Branch পরিবর্তন
git merge branch-name             # Merge করা

# ইতিহাস
git log                           # ইতিহাস দেখা
git log --oneline                 # সংক্ষেপে দেখা
Enter fullscreen mode Exit fullscreen mode

npm কমান্ড চিট শিট

npm init -y                       # প্রজেক্ট শুরু
npm install express               # প্যাকেজ ইনস্টল
npm install -g pm2               # গ্লোবাল ইনস্টল
npm start                         # সার্ভার চালু
npm test                          # টেস্ট চালু
Enter fullscreen mode Exit fullscreen mode

Linux সার্ভার কমান্ড

ls                                # ফাইল দেখা
cd folder                         # ফোল্ডারে যাওয়া
mkdir folder                      # ফোল্ডার তৈরি
nano file.js                      # ফাইল সম্পাদনা
cat file.js                       # ফাইল পড়া
rm file.js                        # ফাইল মুছা
top                               # চলমান প্রক্রিয়া দেখা
Enter fullscreen mode Exit fullscreen mode

HTTP Status Codes

কোড মানে
200 সফল
201 তৈরি হয়েছে
400 ভুল রিকোয়েস্ট
401 অনুমতি নেই
404 পাওয়া যায়নি
500 সার্ভার ত্রুটি

পরিশিষ্ট গ: শেখার রোডম্যাপ

মাস ১-২: ভিত্তি গড়া

সপ্তাহ ১-২:

  • HTML মূল বিষয়
  • CSS মূল বিষয়
  • সহজ ওয়েবপেজ তৈরি

সপ্তাহ ৩-৪:

  • JavaScript মূল বিষয়
  • ফাংশন, লুপ, অ্যারে
  • DOM manipulation

সপ্তাহ ৫-৬:

  • Python মূল বিষয়
  • একই ধারণা Python-এ
  • ছোট স্ক্রিপ্ট লেখা

সপ্তাহ ৭-৮:

  • Git ও GitHub শেখা
  • প্রথম প্রজেক্ট GitHub-এ

মাস ৩-৪: ব্যাক-এন্ড শেখা

সপ্তাহ ৯-১০:

  • Node.js ও Express.js
  • REST API তৈরি

সপ্তাহ ১১-১২:

  • ডেটাবেস (PostgreSQL বা MongoDB)
  • CRUD অপারেশন

সপ্তাহ ১৩-১৪:

  • Authentication (JWT)
  • নিরাপত্তার মূল বিষয়

সপ্তাহ ১৫-১৬:

  • ক্লাউড ডেপ্লয়মেন্ট (DigitalOcean)
  • প্রথম লাইভ প্রজেক্ট

মাস ৫-৬: উন্নত বিষয়

  • Socket.io / রিয়েল-টাইম অ্যাপ
  • CI/CD পাইপলাইন
  • পারফরম্যান্স অপ্টিমাইজেশন
  • AI/ML ইন্টিগ্রেশন

উপসংহার

এই বইয়ে আমরা শিখেছি:

১. সফটওয়্যার কেন বানানো হয় — তিনটি প্রধান কারণ এবং বাস্তব উদাহরণ

২. SDLC — মালিক থেকে শুরু করে ব্যবহারকারী পর্যন্ত সফটওয়্যারের পুরো যাত্রা

৩. প্রযুক্তিগত কাঠামো — ক্লায়েন্ট, সার্ভার এবং ডেটাবেস কীভাবে একসাথে কাজ করে

৪. হাতে-কলমে তৈরি — Python, HTML, CSS, JavaScript, Node.js দিয়ে বাস্তব অ্যাপ্লিকেশন

৫. ভার্সন কন্ট্রোল — Git ও GitHub দিয়ে কোড পরিচালনা

৬. ক্লাউড ডেপ্লয়মেন্ট — সার্ভারে সফটওয়্যার রাখা যাতে সবাই ব্যবহার করতে পারে

৭. রিয়েল-টাইম সংযোগ — Socket.io দিয়ে চ্যাট অ্যাপ

৮. CI/CD — স্বয়ংক্রিয় ডেপ্লয়মেন্ট পাইপলাইন

৯. ক্যারিয়ার পথ — চাকরি থেকে নিজের প্রোডাক্ট — অনেক পথ খোলা


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

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

শুভকামনা!


Top comments (0)