What's Next? Explore The Power of Advanced Technologies - Bangla
Published: 2024-03-29 09:11:17

`Hello Developers!`

কি অবস্থা সবার? আশা করছি সকলে ভালো আছেন। 

আপনারা অনেকেই ইতিমধ্যে ***`Complete Web Development Course With Jhankar Mahbub`*** কোর্সটি শেষ করছেন। কেউ কেউ হয়ত জবের ফিল্ডে আছেন, আবার কেউ জব না করলেও এডভান্স টেকনোলোজি এডাপ্ট করার চেস্টা করছেন, আবার হয়ত কেউ কি করবেন, কি খুজবেন, কিভাবে নিজেকে আপডেট করবেন কিছুই বুঝতে পারছেন না। 

এই যুগে টেকনোলজি খুবই দ্রুত বদলাচ্ছে। প্রতিদিন নতুন নতুন টেকনোলজি বাজারে আসছে। এইতো কিছুদিন আগের কথা `ChatGPT` এসে দুনিয়া কাপিয়ে দিয়েছিলো, এর পরে আসলো `Gemini`, এখন আবার সুপার পাউয়ার নিয়ে হাজির হচ্ছে `Devin`.  তাই, একজন সফল ডেভেলপার হিসেবে টিকে থাকতে হলে আপনাকে অবশ্যই আপডেট থাকতে হবে।

*আপনাদের নেক্সট ক্যারিয়ার পাথ কেমন হতে পারে, তা নিয়েই আলোচনা করবো এই ব্লগে।* 

আপনারা অলরেডি `HTML`, `CSS`, `JavaScript`, `React`, `MongoDB` সহ আরও বেশ কিছু টেকনোলোজির সাথে পরিচিত হয়েছেন। এখন সময় এডভান্স কিছু শেখার!

*বি.দ্রঃ আপনারা যেহেতু প্রোগ্রামিং ল্যাংগুয়েজ হিসাবে `javascript` শিখেছেন তাই আমরা `javascript` বেজড বা এর সাথে ফিমিলিয়ার এডভান্স টেকনোলোজি সম্পর্কে জানব।* 

## **Embrace Type Safety**

আপনারা সকলেই জানেন, `Javascript` একটি **`dynamically typed`** প্রোগ্রামিং ল্যাংগুয়েজ। অর্থাৎ, এটি নিজে নিজে কোন ভেরিয়েবলের ডাটা টাইপ নির্ধারণ করে নেয়। এর ফলে আমরা হয়ত এটি ইজিলি ব্যবহার করতে পারছি, কিন্ত আমরা মাঝে মাঝে `unwanted error` এর সম্মুখীন হই। `locally` ঠিক ঠাক কাজ করে কিন্তু `production` এ গিয়ে এপ্লিকেশন টি ব্রেক করে। যেমন, আপনারা হয়ত এই **`TypeError: Cannot Read Property ‘Map’ of Undefined` এররটি ইতি মধ্যে অনেকবার ফেস করে ফেলেছেন। এই প্রবলেম টি যদি আপনি কোড এডিটরেই দেখতে পেতেন, তাহলে আপনাকে**  `unwanted error` এর সম্মুখীন হতে হত না। তাহলে কি করবেন?

ভয়ের কিছু নেই, আপনি `typescript` শিখতে পারেন। `TypeScript` হলো `JavaScript` এর একটি `superset` যা `JavaScript` এর সাথে টাইপ সিস্টেম যুক্ত করে। টাইপ সিস্টেম কোডের ভুলগুলো খুঁজে বের করতে সাহায্য করে এবং কোডের ডেভেলপমেন্ট ও মেইনটেন্যান্সকে সহজ করে তোলে।

`javascript` ইকোসিস্টেম এর হউয়ায় আপনি খুব সহজেই `typescript` শিখে ফেলতে পারবেন। এর সাহায্যে আপনি `Object-Oriented Programming` ও করতে পারবেন। একই সাথে `TypeScript` এ দক্ষ ডেভেলপারদের বাজারে অনেক চাহিদা। Upwork এর তথ্য অনুযায়ী, `TypeScript` দক্ষ ডেভেলপাররা গড়ে $100/ঘন্টা আয় করতে পারেন।

# For Frontend Focused

**কথায় আছে “আগে দর্শন ধারী, পরে গুন বিচারী!”** অর্থাৎ আপনার কোন প্রোডাক্ট ফিচারে ভরপুর কিন্তু দেখতে সুন্দর না হলে, ব্যবহারকারীরা সেটা ব্যবহার করতে আগ্রহী হবে না।

**তাই একজন Frontend Focused Developer-এর জন্য User Interface `(UI)` এবং User Experience `(UX)` সম্পর্কে ভালো জ্ঞান থাকাটা অত্যন্ত জরুরি।**

## **Mastering State Management**

React এর এপ্লিকেশনে কাজ করার সময়ে আপনি কোন প্রবলেম টা বেশি ফেস করেছেন? নিশ্চয়ই আপনার উত্তর `“state management”` নিয়ে। 

“`state management`” এর এই সমস্যা দূর করতে হয়ত আপনি ইতিমধ্যে “`context api`” ইউজ করেছেন। কিন্তু এখানেও একটা প্রবলেম আছে, আপনার এপ্লিকেশন টা যত বড় হতে থাকবে স্টেট ম্যানেজ করা আপনার জন্য তত কঠিন হয়ে যাবে। সে ক্ষেত্রে আপনি কি করতে পারেন? 

এর সমাধান হিসাবে ইতিমধ্যে বেশ কিছু জনপ্রিয় `state management` লাইব্রেরী আছে, এর মধ্যেঃ

**[`react-redux`](https://npm-compare.com/react-redux), `[zustand](https://npm-compare.com/zustand)`, `[xstate](https://npm-compare.com/xstate)`, [`mobx`](https://npm-compare.com/mobx)** ইত্যাদি অত্যন্ত জনপ্রিয়। এখন এত এত লাইব্রেরির ভীরে যদি আপনি কনফিউজড হয়ে যান এবং ভাবতে থাকেন, কোনটা রেখে কোনটা শিখবেন?

**তাহলে আমি রিকমেন্ড করবো `redux` দিয়ে শুরু করেন।** কারণ `redux` এই মুহূর্তে সবচেয়ে বেশি ব্যবহৃত হচ্ছে, এর কমিউনিটি খুবই স্ট্রং। সেই সাথে ইতি মধ্যে অনেক কোম্পানি আছে যারা তাঁদের এক্সিস্তিং প্রজেক্টে `redux` ইউজ করছে।

## **Building Scalable Websites**

React এপ্লিকেশন অনেক ফাস্ট হলেও বড় বড় এপ্লিকেশনের ক্ষেত্রে ম্যানেজ করা অনেক কষ্ট সাধ্য হয়ে পরে। তাই আমাদের React এর কোন ফ্রেমওয়ার্ক শিখার প্রয়োজন হয়ে পারে। আমি রিকমেন্ড করবো NextJS শিখতে।

আপনি যদি আমাকে প্রশ্ন করেন, “আমি তো `React` দিয়েই সুন্দর সুন্দর ওয়েবসাইট বিল্ড করতে পারি, তাহলে `NextJS`  শিখার কি দরকার?”

তাহলে আমি বলব, `React` যে সকল ফিচার না থাকার কারনে কিছুটা অসম্পূর্ণ ছিল, `NextJS` আপনাকে সে সকল ফিচার ই প্রদান করছে। `NextJS` এ কি নেই? 

- ইনবিল্ড রাউটিং সিস্টেম আছে, তাই থার্ড পার্টি কোন লাইব্রেরীর উপর নির্ভর করতে হবে না।
- আপনার প্রজেক্টের নিড অনুযায়ী বিভিন্ন ধরনের `Rendaring` ফিচার, জেমনঃ `SSG`, `SSR`, `CSR` ইত্যাদি ব্যবহার করতে পারবেন।
- এডভান্স ডাটা ফেচিং এবং ক্যাশিং এর সুবিধা।
- বিল্ট ইন অপটিমাইজেশন।
- এমনকি মনোলিথ আর্কিটেকচারে প্রজেক্ট বিল্ড করার সুবিধা, অর্থাৎ `NextJS` এর মাদ্ধমে আপনি একটি ফুলস্ট্যাক এপ্লিকেশন তৈরি করে ফেলতে পারবেন। ইত্যাদি ইত্যাদি …

`NextJS` এর কিছু অল্টারনেটিভ বাজারে অলরেডি আছে, জেমনঃ **`Gatsby, Nuxt.js, SvelteKit, Astro`** ইত্যাদি। NextJS ছাড়া অন্য যেকোনো টা শিখতে গেলে, হয়ত সকল ফিচার `NextJS` এর মত একত্রে পাবেন না। আবার পেলেও নতুন টেক শিখার দরকার হতে পারে, যেমনঃ `Nuxt.js` এর জন্য `vue`, `SveletKit` এর জন্য `svelt` জানা থাকা লাগবে। 

আবার জনপ্রিয়তার দিক থেকেও `NextJS` অনেক এগিয়ে। অনেক কোম্পানি এটি ইতিমধ্যে ইউজ করছে। তাই আমি আপনাকে `NextJS` দিয়ে শুরু করতে রিকমেন্ড করব।

# For Backend Focused

এতক্ষন `Frontend` নিয়ে অনেক প্যাঁচাল পেরেছি, তবে এখন সময় হয়েছে মুদ্রার ওপিঠ সম্পর্কে জানার, তাই চলুন `Backend` টেকনোলোজি সম্পর্কে জানার চেস্টা করি।

## Unveiling the Power of Backend

আপনারা ইতিমধ্যেই `node - express` দিয়ে সিম্পল ব্যাকেন্ড এপ্লিকেশন তৈরি করা শিখেছেন। কিন্তু আপনার সপ্ন যদি হয় `backend` ডেভেলপার হওয়ার তাহলে কি সিম্পল ব্যাকেন্ড দিয়ে কাজ হবে? তাই আপনাকে ব্যাকেন্ড এর এডভান্স টপিক গুলো শিখতে হবে। কিভাবে স্কেলেবল সার্ভার ডেভেলপ করা যায়? ইন্ডাস্ট্রি তে বড় বড় এপ্লিকেশন কিভাবে তৈরি করা হয়, কিভাবে ইফিশিয়েন্ট ওয়েতে প্রয়োজনীয় ডাটা ইউজার এন্ডে পাঠাতে হয় ইত্যাদি সম্পর্কে জানতে হবে। 

তাই `Node.js` এর যেকোনো একটি ফ্রেমওয়ার্ক দিয়ে আপনি আপনার প্রফেশনাল লেভেলের `Backend` যাত্রা শুরু করতে পারেন। এখানে আপনি Express ছাড়াও **Fastify, NestJS** ইত্যাদি ফ্রেমওয়ার্ক পাবেন। তবে আপনার ক্ষেত্রে Express দিয়ে শুরু করা উচিত হবে বলে আমি মনে করি, কারন  `Fastify, NestJS` ও `express` এর উপর ভিত্তি করে কাজ করে, আর `express` শেখা অন্য গুলোর তুলনায় ইজি। 

## **Unleashing the Power of MongoDB**

ব্যাকেন্ডের একটি গুরুত্বপূর্ণ অংশ হচ্ছে ডাটাবেজ। আপনারা `mongodb` তে বেসিক `crud` অপারেশন সম্পর্কে জেনেছেন। এখন `mongodb` এর এডভান্স টপিক গুলো আপনাকে জানতে হবে। সেই সাথে `mongodb` এর এই কাজ গুলো আরো অরগানাইজ এবং স্ট্রাকচারাল ওয়েতে করতে আপনাকে mongodb এর `ODM mongoose` সম্পর্কে জানতে হবে।

ইন্ডাস্ট্রি তে `mongodb` ডাটাবেজ নিয়ে কাজ করতে হলে আপনাকে mongoose মাস্ট জানা থাকা লাগবে। 

## **Relational Powerhouse**

`Mongodb` এর মতো `NoSQL` ডাটাবেজ এর পাশাপাশি আপনার যদি একটি `sql` ডাটাবেজ জানা থাকে, তাহলে জব সেক্টরে আপনার চাহিদা অনেকগুণ বৃদ্ধি পাবে। কারন এরকম অনেক কাজ আছে যা বহুলাংশে `sql` ডাটাবেজ এর উপর নির্ভর করে। 

আপনি যদি রিসেন্ট টাইমে ডাটাবেজের উপর জরীপ গুলোর দিকে লক্ষ রাখেন, তাহলে দেখতে পাবেন `MySQL, PostgreSQL, Oracle, Microsoft SQL Server` ইত্যাদির মতো `sql` ডাটাবেজ গুলো সাবার উপরে অবস্থান করছে। 

তাহলে কি এখন এই সব গুলো ডাটাবেজই কি আপনার শেখা লাগবে? 

উত্তর হচ্ছে না। আপনি যদি যেকোনো একটা ভালো ভাবে আয়ত্ত করে ফেলেন তাহলে, অন্য গুলো শিখতে আপনার বেশি সময় লাগবে না। তো শুরু করবেন কোনটা দিয়ে? 

আপনি `mysql` বা `postgresql` যেকোনো একটা দিয়ে শুরু করতে পারেন। তবে রিকমেন্ডেড হচ্ছে `postgresql` দিয়ে শুরু করা। `postgresql` মুলত `mysql` এর উপরে বেজ করে তৈরি করা তবে এতে আপনি এক্সট্রা কিছু এডভান্স ফিচার পাবেন, যা `mysql` এ পাবেন না। এবং প্রতিনিয়ত `postgresql` এর জনপ্রিয়তা এবং ব্যবহার বাড়ছে।

## **Bridging the Gap Between Object and Relational Data**

শুরুতেই `Prisma` এর পরিচয় দিয়ে ফেলি। `Prisma` হচ্ছে একটি ডাটাবেজ `orm`. `ORM` এর পূর্ণ রুপ হচ্ছে `Object Relational Mapper`. আপনার নিশ্চয়ই জানতে ইচ্ছা করছে এই `orm` এর কাজ টা কি? 

**ORM কি?**

ORM হচ্ছে এমন একটি সফটওয়্যার টুল যা object-oriented programming language `(OOPL)` এবং relational database management system `(RDBMS)` এর মধ্যে একটা সেতুবন্ধন তৈরি করে। ORM এর সাহায্যে আপনি SQL query না লিখেই OOPL ব্যবহার করে ডাটাবেজের সাথে কাজ করতে পারবেন।

**Prisma কিভাবে কাজ করে?**

Prisma আপনার ডাটাবেজের `schema` কে একটি `object model` এ রূপান্তর করে। এর ফলে আপনি OOPL ব্যবহার করে সহজেই ডাটাবেজের সাথে কাজ করতে পারবেন। Prisma SQL query গুলোকে `auto-generate` করে, যার ফলে আপনাকে SQL query লিখতে হবে না।

Prisma এর সুবিধা হচ্ছে, `code maintainibility` এবং `Productivity` বাড়বে। সাথে আপনি খুব অল্প সময়েই যেকোনো প্রজেক্ট তৈরি করতে পাবেন। 

এখন প্রশ্ন হচ্ছে `orm` হিসাবে কি শুধু মাত্র `prisma` ই আছে। এটা কেন রিকমেন্ড করছি?

না, আরো আছে জেমনঃ `**Sequelize, TypeORM, Objection.js`** ইত্যাদি। কিন্তু প্রিজমা শিখতে বলার মেইন কারন হচ্ছে আপনি এটি অত্যন্ত সহজে শিখতে পারবেন। এর কমিউনিটি অত্যন্ত দ্রুত বড় হচ্ছে। একই সাথে আপনি Prisma এর মাদ্ধমে SQL এবং NoSQL উভই ডাটাবেজেই কাজ করতে পারবেন `without any hassle`.

# Dockerization & Deployment

এতক্ষন অনেক প্যাঁচা পেঁচি করলাম `Frontend` এবং `Backend` টেকনোলোজি নিয়ে। তবে কথা হচ্ছে সুন্দর সুন্দর  `Frontend` এবং `Backend` টেকনোলোজি দিয়ে অনেক ভালো ওয়েবসাইট বিল্ড করলেন। কিন্তু সেটা ডিপ্লয় না করলে কি কোন মূল্য থাকবে? না থাকবে না। 

তাই `Fullstack` ডেভেলপার হতে হলে আপনাকে অবশ্যই `Deployment` সম্পর্কে জানতে হবে। একই সাথে হালের ক্রেজ `Docker` সম্পর্কেও জানতে হবে।

## **Dockerize Your Applications**

`Docker` হলো একটি `open-source platform` যা আপনাকে software applications কে containers-এ package করতে সাহায্য করে। `Containers` হলো lightweight, standalone, executable packages যা software applications কে run করার জন্য প্রয়োজনীয় সকল `dependencies` (code, runtime, system tools, system libraries, settings) ধারণ করে।

Docker এর সাহায্যে আপনি আপনার application কে যেকোনো environment-এ deploy করতে পারবেন, সেটা `local machine, development environment, staging environment`, অথবা `production environment` যেটাই হোক না কেন।

**Docker ব্যবহারের সুবিধা:**

- **Portability:** Containers কে যেকোনো environment-এ সহজেই deploy করা যায়।
- **Consistency:** Containers সব environment-এ একইভাবে run করে।
- **Efficiency:** Containers resources কে efficiently ব্যবহার করে।
- **Isolation:** Containers একে অপরের থেকে isolated থাকে।
- **Scalability:** Containers কে সহজেই scale করা যায়।
- **Important:** কোড আপনার পিসি তে কাজ করে কিন্তু আপনার বসের পিসি তে কাজ করে না, তা হবে না, তা হবে না!

Docker এর `Podman, Containerd, LXD` এর মতো কিছু অল্টারনেটিভ আছে। আপনি আপনার প্রয়োজন অনুসারে শিখতে পারেন।

## **The Art of Seamless Deployment**

Deployment হলো software application কে production environment-এ install এবং configure করার প্রক্রিয়া। Deployment এর বিভিন্ন ধরন আছে, যেমন:

- **Manual deployment:** This is the most basic method of deployment. In this method, you manually install and configure the application on the production server.
- **Automated deployment:** This method uses tools to automate the deployment process. There are many different automated deployment tools available.
- **Continuous deployment:** This is a type of automated deployment where changes to the application are automatically deployed to production as soon as they are made.

**Deployment এর বিভিন্ন tools:**

- **Jenkins:** Jenkins is a popular continuous integration and continuous delivery (CI/CD) tool.
- **GitHub Actions:** GitHub Actions is a cloud-based CI/CD tool that integrates with GitHub.
- **Heroku:** Heroku is a cloud platform as a service (PaaS) that allows you to deploy applications easily.
- **AWS:** AWS is a cloud computing platform that offers a variety of services for deploying applications. etc…

ডিপ্লয়মেন্ট এর ক্ষেত্রে এরকম আর অনেক টুল পাবেন। তবে মার্কেট ডিমান্ডের উপর ভিত্তি করে আপনি GitHub Action, AWS, Digital Ocean এর উপর দক্ষতা অরজন করতে পারেন।

— এখানে আমি আপনার ক্যারিয়ারের নেক্সট স্টেজে যেতে অর্থাৎ ফুলস্ট্যাক ডেভেলপার হতে যে টেক গুলো শিখাই লাগবে সেগুলো নিয়ে আলোচনা করেছি। আপনি আপনার ইন্টারেস্ট অনুযায়ী ফ্রন্টএন্ড বা ব্যাকেন্ড যেকোনো একটা দিয়ে শুরু করে ফেলতে পারেন। তাই দেরি না করে আজকেই কোপা কোপি শুরু করে দেন , নিজেকে জীবন যুদ্ধে আরেক ধাপ এগিয়ে নিয়ে।

বোনাস টিপসঃ আপনি যদি গুছানো ওয়ে তে ইন্ডাস্ট্রির বেস্ট প্রাকটিস সহ টেকনোলোজি গুলো শিখতে চান তবে আপনি Programming Hero X Level 2 এর আউটলাইন্টা এক্সপ্লোর করে দেখতে পারেন। 

আমি আশা করি এই ব্লগ পোস্টটি আপনাকে আপনার ক্যারিয়ারের লক্ষ্য অর্জনে সাহায্য করবে।

**শুভকামনা!**

**Allah Hafez | Keep Learning …**