03 December, 2020

Upgrade to PHP 8.0 (On Linux, and Windows)

LINUX:

1. List existing PHP packages with:
$ dpkg -l | grep php | tee packages.txt
2. Add ondrej/php PPA with:
$ sudo add-apt-repository ppa:ondrej/php
# Press enter when prompted.
$ sudo apt-get update

3. Install PHP 8.0 and extensions with:
$ sudo apt install php8.0-common php8.0-cli -y
# Check with:
$ php -v
# Add additional extensions:
$ sudo apt install php8.0-{bz2,curl,intl,mysql,readline,xml}
Install Server APIs:
Depending on the web server you use, you will need to install additional packages to integrate with the web server.
For Apache using mpm_event, Nginx, Litespeed, etc., php8.0-fpm package provides integration with PHP 8.0 via FPM.
$ sudo apt install php8.0-fpm
For Apache using mod_php, install libapache2-mod-php8.0.
$ sudo apt install libapache2-mod-php8.0
4. Test PHP 8.0 installation with:
$ php -v
$ php -m
5. Purge old PHP versions:
If the new installation is working as expected, you can remove the old PHP packages from the system.
$ sudo apt purge '^php7.4.*'
6. What's new and changed in PHP 8.0:
For a complete list of changes in PHP 8.0, see What's new and changed in PHP 8.0 https://php.watch/versions/8.0

** For Valet on Linux, re-config it with the command :
"valet use" to choose php8.0 by default by Velet.

WINDOWS:

Download the php8 for windows from windows.php.net/download and extract it in a directory like "C:\laragon\bin\php" Then add this path to the windows Env variable, and remove previous php one (if you have any). Then Go to your apache directory like "C:\laragon\etc\apache2" and open the mode_php.conf file as Administrator, then change the line
LoadModule php8_module "C:/laragon/bin/php/php-8.0.0-Win32-vs16-x64/php8apache2_4.dll"
with
LoadModule php_module "C:/laragon/bin/php/php-8.0.0-Win32-vs16-x64/php8apache2_4.dll"
That means you write php_module instead of php8_module there.
Then go to "C:\laragon\bin\php\php-8.0.0-Win32-vs16-x64" directory and rename php.ini-development as php.ini or just edit existing php.ini file as your need (Extensions you need). Just simply uncomment (remove semicolons ";" from lines ) to doing so.
Then restart the apache, and you will good to go.


30 May, 2020

Install Avro on Ubuntu Linux 20.04 LTS (Bangla Keyboard on Ubuntu Linux)

Open the terminal and run these commands:


sudo apt install ibus-avro -y
sudo apt --fix-broken install -y

Go to the
 > Settings
 > Regions and Language
 > Input Source
 > Click + to add a new source
 > Click "Bangla"
 > Click "Bangla (Phonetic Avro)"

Run this command to reload the ibus

ibus restart

* Feel free to comment here if you have any problem installing Avro on your Ubuntu Machine



20 April, 2020

তো, আপনি সফটওয়ার ইঞ্জিনিয়ার হতে চান?

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

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

আপনি যে দিকেই যান, দিন শেষে নলেজ, এক্সপেরিয়েন্স, প্রব্লেম সল্ভিং স্কিল, লেগে থাকার অদম্য ইচ্ছাই ম্যাটার করে। অন্য কিছু নয়। শুনে হয়ত অবাক হবেন, গুগুল-এপল-মাইক্রোসফট – ওয়ার্ল্ড-ব্যাংক ইত্যাদি ঘটা করে ডিক্লেয়ার করেছে যে, এখন থেকে কারো সার্টিফিকেটের বাধ্যবাধকতা থাকবে না জবে ঢুকতে। তো, আমাদের দেশেও সার্টিফিকেট ভিত্তিক এই ভূল ধারনা গুলো থেকে বের হয়ে আসতে হবে আমাদের।
২। কিছু জনগণ আবার ওয়েব ডেভেলপমেন্টকে খাটো করে দেখি এন্ড্রয়েড/আইওএস/গেম ডেভেলপমেন্ট এর থেকে। এবং “ওয়েব ডেভেলপার” শুনলে বলি ওহ! (লাইক, এ আর এমন কি। সবাই-ই তো পারে এটা।)। এর জন্য অবশ্য ব্যাঙের ছাতার ন্যায় বিভিন্ন নিম্ন কোয়ালিটির ট্রেইনিং সেন্ট্রার গুলো দায়ী। ভুলে যাই এটা ক্লাউড কম্পিউটিংয়ের যুগ। গুগলে যে কাজ করে সেও ওয়েব ডেভেলপার আবার যে ওয়ার্ডপ্রেসের ক্রাক থিম আর প্লাগিন ব্যাবহার করে কাজ চালায় সেও ওয়েব ডেভেলপার। কিন্তু পার্থক্য তো বুঝতে হবে।
৩। এক্স প্রোগ্রামিং ল্যাঙ্গুয়েজটা এক নাম্বার, ওয়াই ল্যাঙ্গুয়েজের কোন ভাত নাই। এই ভুল ধারনাটা প্রায় অনেকের মধ্যেই দেখা যায় আমাদের ভেতর। আরে ভাই তুমি যদি এক্স ল্যাঙ্গুয়েজ ভালোবাসো, ভালো পারো তাহলে ওটা নিয়ে কাজ করো, কথা বলো, দ্যাটস অলরাইট। কিন্তু ওয়াইকে ঘৃণা করা আর সেটার সম্পর্কে ভুলভাল তথ্য শেয়ার করার তো কোন যুক্তি হয় না। তুমি ভাই এক্স ল্যাঙ্গুয়েজ নিয়েই থাকো না। সেটা নিয়েই কথা বলো। ওয়াই কিভাবে প্রোগ্রেস করছে, ইভল্ভ হচ্ছে সেগুলো না জেনেই ভূল তথ্য ছড়ানোর মানে কি? দিন শেষে এগুলো তো জাস্ট টুলস। কাউকে অন্য কোন টুলস নিয়ে কাজ করলে গায়ে জ্বালা করে কেন? কারন কি?
৪। এখন আর্টিফিশিয়াল ইন্টেলিজেন্স, মেশিন লার্নিং ইত্যাদি শেখার হাইপ চলে। অনেকে বলেন সফটওয়ার ইঞ্জিনিয়ারিং ইন্ড্রাষ্ট্রি নাকি এআই দখল করে নেবে? সব কিছু বাদ দিয়ে পাইথন শেখা ভালো হবে মনে হয়, কি বলেন? – প্রথমত এআই, মেশিন লার্নিংয়ের সাথে পাইথনের কোন সম্পর্কই নাই। এটা ঠিক, বেশিরভাগ এআই, এমএল ফ্রেমওয়ার্ক গুলো পাইথন দিয়ে ইন্টারফেসিং করে থাকে। এখানে পাইথন একটা গ্লু ল্যাঙ্গুয়েজ হিসেবে কাজ করে। তবে, আন্ডার-দ্যা-হুদ বেশিরভাগ ক্ষেত্রেই মূলত সি++ সব কাজ করে থাকে। তো, পাইথনের সাথে এই টপিক গুলো গুলিয়ে ফেলাটা ঠিক নয়। আর কেউ এগুলা শিখতে চাইলে তো খুবই ভালো কথা। তবে, এগুলার জন্য যে পরিমান প্রব্লেম সল্ভিং স্কিল, স্টাটিস্টিক্স, মেথমেটিক্স, ইত্যাদি থিওরি জানা লাগে সেগুলা নিয়ে তো কখনও কথা বলতে দেখি না। খালি পাইথন পাইথন করে, আর দুদিন পরে সব বাদ দিয়ে দেয়।
৫। আমি তো প্রোগ্রামিং কন্টেস্টে করি নাই। বা করলেও ভালো করতে পারি নাই। আমি মনে হয় সফটওয়ার ইঞ্জিনিয়ার হতে পারব না। ভাই! প্রোগ্রামিং কন্টেস্টে ভালো করতে পারা অনেক ভালো ব্যপার। কিন্তু কোন কারনে কন্টেস্ট না করলে, বা করলেও ভালো করতে না পারলেও সমস্যা নাই কোন। যারা বলে প্রোগ্রামিং কন্টেস্ট না করলে বা সেখানে ভালো করতে না পারলে সে সফটওয়ার ইঞ্জিনিয়ার হতে পারবে না। বেশিদূর যেতে পারবে না। সেটা তাদের ভূল ধারনা। এটা ঠিক যে, লেগে থাকার মানুষিকতা, টিম ওয়ার্ক, শেখার অদম্য ইচ্ছা এগুলা আপনার থাকতেই হবে। আর প্রোগ্রামিং কন্টেস্ট করলে এগুলো অটোমেটিকালি শেখা হয়ে যায়। কিন্তু না করে থাকলে পরে শিখতে পারবেন না সেটা ঠিক নয়। বিশ্বের অনেক বড় বড় সফটওয়ার ইঞ্জিনিয়ার এটার নামও শোনেননি নাই। তারা কি হতে পারে নি? হতাশ হওয়ার কিছু নাই।
এরকম অনেক অনেক ভূল ধারণা (আশা করি এগুলা যে ভূল ধারনা, সেটা আমার ভূল ধারণা না) আমাদের নতুনদের অনেকের মধ্যেই আছে। তো এই ব্যাপার গুলো নিয়ে সচেতন থাকা প্রয়োজন সবার আগে।

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

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

তবে, ধরে নিচ্ছি আপনি সি দিয়ে শেখা শুরু করেছেন। তো, সি খুব ভালো করে শেখার চেষ্টা করুন। শেখার জন্য বই খুব ভালো মাধ্যম। স্টেপ বাই স্টেপ একটা বই পড়ে, প্রাকটিস করে করে সি এর ব্যাসিক শিখতে হবে।যেমনঃ “C How to program – Deitel Deitel”, “সবার জন্য সি– নিটন” খুবই ভালো দুটি বই। এর বাইরে তামিম শাহরিয়ার সুবিন ভাইয়ের সি প্রোগ্রামিংয়ের তিন খন্ডের বই গুলিও অনেক ভালো। যে কোন বই থেকেই শেখা যেতে পারে।

এরপর এই সি প্রোগ্রামিং ল্যাঙ্গুয়েজ দিয়ে ৪০-৫০ টার মতন বিগিনার লেভেলের প্রব্লেম সল্ভ করতে হবে যে কোন অনলাইন জাজে। অনলাইন জাজ হলঃ বিশেষ একটা প্লাটফর্মের একটা প্রোগ্রাম যা কিনা সেই প্লাটফর্ম থেকে দেয়া কিছু প্রব্লেম স্টেটমেন্টের ভিত্তিতে কিছু ইনপুটের বিপরীতে আমাদের লেখা সলিউশন রান করে ঠিকঠাক আউটপুট দেয় কি না সেটা জাজ করে। অনলাইন জাজের সব থেকে কঠিক প্রব্লেমটা হলঃ প্রথম প্রব্লেমটা সলভ করা ঠিক ঠাক মত। কারন অনেকেই প্রথমে বুঝে উঠতে পারি না সেখানকার এনভায়রমেন্টটা কিভাবে কাজ করে। ইনপুট, আউটপুট, টেস্টকেসেস, ভার্ডিক্ট গুলো, ইত্যাদি বুঝলে পরে বিষয়টা সহজ মনে হবে। এরকম অনেক অনলাইন জাজ আছে। যেমনঃ দ্বিমিক ওজে (https://dimikoj.com/), Codeforces (https://codeforces.com/) , HackerRank (https://www.hackerrank.com/dashboard) ইত্যাদি। এগুলোয় প্রব্লেম সল্ভ করতে হবে এবং কন্টেস্ট গুলোয় আস্তে আস্তে অংশ নেয়ার চেষ্টা করতে হবে।

এরপর, ‘ডিস্ক্রিট ম্যাথমেটিক্স’, ‘ডাটা স্ট্রাকচার’ এবং ‘এলগরিদম’ জিনিসটা আস্তে আস্তে শেখা শুরু করে দিতে পারেন। ট্রি, গ্রাফ, স্টাক, কিউ, সর্টিং, সার্চিং ইত্যাদি থিওরি ও তাদের ইমপ্লিমেন্টেশন টেকনিক গুলো শিখুন আর পাশাপাশি আরো কিছু প্রব্লেম সলভ করে ১০০ টা সল্ভ হয়ে গেলে এর পর সি++ ল্যাঙ্গুয়েজটা ট্রাই করে দেখতে পারেন। যেখানে আপনি স্টান্ডার্ড টেমপ্লেট লাইব্রেরী (STL) ইউজ করে অনেক ডাটা স্ট্রাকচার ও এলগরিদম খুব সহজে ইউজ করতে পারবেন সল্ভিংয়ের সময়। কন্টেস্টের সময়। অনেক সময় বেচে যাবে এতে। এভাবে কন্টিনিউ করুন প্রব্লেম সল্ভিং করা। যতদিন সম্ভব। যত সল্ভিং করবেন, আসলে আপনার স্কিল তত ডেভেলপ হবে। লম্বা রেসের ঘোড়া হয়ে যাবেন। আর বড় কোম্পানী গুলোতে যেতে হলে এই এলগরিদমিক সল্ভিংয়ে খুবই ভালো হতে হবে। অনেক অনেক সল্ভিংয়ের কোন বিকল্প নাই বড় বড় কোম্পানী গুলোতে যেতে চাইলে। কন্টেস্ট করা চালিয়ে যান।
তৃতীয়ত, অন্ততঃ ৩০০-৪০০ এলগরিদমিক প্রব্লেম সল্ভ হয়ে গেলে এবং বিভিন্ন কারনে আগের মতন সল্ভিং কন্টিনিউ করা সম্ভব না হলে, ফ্যামিলি থেকে জবের তাড়া থেকে থাকলে, আপনি নেক্সট স্টেপ শুরু করে দিতে পারেন যেখানে আপনাকে শিখতে হবে অবজেক্ট অরিয়েন্টেড প্রোগ্রামিং (ওওপি)। এটা খুবই গুরুত্বপূর্ণ এবং অনেক সময় লাগে কনসেপ্ট গুলো আয়ত্বে আসতে। শুরুর দিকে ভূল শেখার সম্ভাবনা প্রবল, তাই খুব ভালো ভাবে শেখার চেষ্টা করতে হবে ওওপি। গুরুত্ব দিয়ে শিখুন। অবজেক্ট অরিয়েন্টেড প্রিন্সিপাল এবং প্যাটার্ন সম্পর্কে পড়াশুনা শুরু করে দেন। ইমপ্লিমেন্ট করার ট্রাই করেন নিজের মতন করে। ইউজ কেইস গুলো জেনে নিন। এডভান্টেজ, ডিসএডভান্টেজ সম্পর্কে জানুন। এবং পার্সোনাল কিছু কনসোল প্রোজেক্ট করুন এসব নলেজ ইউটিলাইজ করে।
চতুর্থত, একটা প্রোগ্রামিং ল্যাঙ্গুয়েজ, ব্যাসিক প্রব্লেম সল্ভিং, এবং অবজেক্ট অরিয়েন্টেড প্রোগ্রামিং এর বেসিক শেখার পর আপনি যে কোন একটা ডোমেইন ঠিক করে নিন। যে আপনি আসলে কি করতে চান এখন । বিভিন্ন ধরনের অপশন আছে। যেমনঃ ওয়েব বেজড সফটওয়ার ডেভেলপমেন্ট, মোবাইল (এন্ড্রয়েড/আইওএস) সফটওয়ার ডেভেলপমেন্ট, গেম ডেভেলপমেন্ট, ডেস্কটপ সফটওয়ার ডেভেলপমেন্ট, ইন্টারনেট অভ থিংস (আইওটি), ইত্যাদি। এগুলার মধ্য থেকে যে কোন একটা ডোমেইন নির্ধারন করে নিন।
আপনি যাই নির্ধারন করুন না কেন, আপনার ওয়েবের মিনিমাম একটা জ্ঞান কাজে লাগবেই সব টাইপের ডেভেলপমেন্টে। কারন প্রায় সব ধরনের সফটওয়ারই এখন ওয়েব বেজড (অন্ততঃ ব্যাকএন্ড পার্ট)। তাই আমি শুরুতে ওয়েব প্রোগ্রামিং শেখাকেই বেশি গুরুত্বপূর্ণ মনে করি। ওয়েবের জ্ঞান নেয়া হলে, চাইলে কিছু দিনে পর সুইস করা যেতে পারে অন্য ডোমেইনে।
ওয়েবের মূলত দুটি পার্ট আছে, ফ্রন্ট-এন্ড এবং ব্যাক-এন্ড। আপনি অন্য ডোমেইনে কাজ করতে চাইলে ফ্রন্ট-এন্ড এর টুকটাক কিছু বেসিক শিখে ব্যাক-এন্ডে চলে যেতে পারেন।
তবে, ফুল স্টাক ডেভেলপার হতে চাইলে ফ্রন্ড-এন্ড টাও শিখে নিতে পারেন। ফ্রন্ড এর জন্য সবার আগে ওয়েব টেকনোলজি গুলো যেমনঃ এইচটিএমএল, সিএসএস, ইত্যাদি শিখতে হবে। আর ফ্রন্ট-এন্ডের
প্রোগ্রামিং ল্যাঙ্গুয়েজ হিসেবে জাভাস্ক্রিপ্ট শিখতে হবে। এর বিকল্প নাই বলা চলে। তাই এটা শিখতেই হবে (অন্ততঃ বেসিক)। এর বাইরে ব্রাউজার এবং এর ডেভেলপার টুলের বিস্তারিত জেনে নিতে হবে। ক্যাশ, কুকিস, লোকাল স্টোরেজ, নেটওয়ার্কিং, স্টাটাস কোড, কনসোল, ডিবাগার, ইত্যাদি সম্পর্কে ধারনা নিতে হবে। এবং ফ্রন্ট-এন্ডে আরো ভালো করতে চাইলে একটা ফ্রন্ড-এন্ড লাইব্রেরী/ফ্রেমওয়ার্ক যেমনঃ রিয়াক্ট, ভু, এঙ্গুলার শিখে নিতে হবে। JSON, XML, Ajax সম্পর্কেও জানতে হবে।
আর ব্যাকএন্ডের জন্য ওয়েব প্রোগ্রামিংয়ে ভালো, পপুলার, এবং ফ্রেন্ডলি এমন একটি ল্যাঙ্গুয়েজ চয়েস করুন। বর্তমানে ওয়েব প্রোগ্রামিংয়ের জন্য সব থেকে পপুলার কিছু ল্যাঙ্গুয়েজ হলোঃ পিএইচপি, জাভাস্ক্রিপ্ট (নোড জেএস), পাইথন, জাভা, সি#, গোল্যাং, ইত্যাদি। এদের মধ্য থেকে যে কোন একটি সিলেক্ট করে সেটা শেখা শুরু করে দিন।

ওয়েব প্রোগ্রামিংয়ের জন্য বিগিনারদের জন্যে জাভাস্ক্রিপ্ট এবং পিএইসপি খুব ভালো একটা কম্বিনেশন।যেহেতু দুটিই সি ঘরনার ল্যাঙ্গুয়েজ, তাই এ দুটো শিখতে গিয়ে আপনার আগে শেখা সি এবং সি++ এর প্রায় সব কনসেপ্টই সরাসরি বা আংশিক কাজে লাগবে। আর বাংলাদেশে যেহেতু অনেকেই এগুলো নিয়ে কাজ করেন, তাই কোন সমস্যায় পড়লে আপনাকে সাহায্য করার অনেককেই পাশে পাবেন। এটা খুবই গুরুত্বপূর্ণ একটা বিষয় বিগিনারদের জন্য। আর এই ল্যাঙ্গুয়েজ দুটি শিখতে আপনার ১-২ মাসের বেশি লাগার কথা না (অন্ততঃ কাজ শুরু করতে)।

এরপর, আপনি ডাটাবেজের জন্য SQL (MySQL or, PostgreSQL) শেখা শুরু করে দিন। প্রাইমারি কি, ফরেন কি, জয়েনিং, ক্রিয়েট, রিড, আপডেট, ডিলিট অপারেশন, কমপ্লেক্স কুয়েরী করা, ইত্যাদি শিখে নিন। এসকিউএল খুবই গুরুত্বপূর্ণ। তাই অন্য সব কিছুর পাশাপাশি এটাও শেখা চালায় যেতে হবে সব সময়। পর্যাপ্ত সময় দিতে হবে । হ্যাকার-র‍্যাংকের এসকিউএল সেকশনটায় অনেক চ্যালেঞ্জ আছে, সেগুলো সল্ভ করা যেতে পারে। সময় পেলে NoSQL সম্পর্কে একটু ঘেটে দেখতে পারেন। SQL আর NoSQL (MongoDB, Firebase) এর ইউজকেইস, সুবিধা অসুবিধা গুলো জেনে নিতে পারেন।
তারপর, মোটামুটি বেসিক সিনট্যাক্স শেখা হয়ে গেলে এগুলো দিয়ে ‘র’ কোডিং করে (কোন ফ্রেমওয়ার্ক বা অন্যের লেখা কোড ইউজ না করে) কিছু প্রোজেক্ট করতে হবে। এসব প্রোজেক্ট করতে গিয়েই আসলে প্রকৃত ‘শেখা’ শুরু হবে আপনার। অনেক ক্ষেত্রে আটকায় যাওয়া লাগতে পারে আপনাকে। তখন আবার বই/ডকুমেন্টেশন/টিউটরিয়াল দেখে দেখে সেই ভূল গুলো সল্ভ করতে হবে। ডিবাগিং করতে হবে। ইরর পড়ে বুঝতে হবে, কি ভূল হয়েছে। এবং সল্ভ করতে হবে সেগুলো। না পারলে ফোরাম গুলোয় হেল্প নিতে হবে। প্রব্লেম সঠিক ভাবে অন্যের কাছে তুলে ধরা এবং হেল্প নেয়াটাও অনেক গুরুত্বপূর্ণ একটা স্কিল। সব থেকে চ্যালেঞ্জিং হবে আর্কিটেকচার ব্যাপারটা। কোড গুলো স্ট্রাকচার্ড ওয়েতে রাখা, মডিউল/প্যাকেজিং করা, সঠিক ভাবে ইম্পর্ট-এক্সপোর্ট করাটা চ্যালেঞ্জিং মনে হবে। রেফারেন্স হিসেবে গিটহাবের ওপেনসোর্স বা অন্য কোথাও থেকে অন্যের প্রোজেক্ট থেকে কোড পড়ে পড়ে বোঝার চেষ্টা করুন সঠিক নিয়ম কোনটি। সেভাবে আপনিও চেষ্টা করুন করতে।
অবজেক্ট অরিয়েন্টেড প্রিন্সিপাল এবং প্যাটার্ন যেগুলো আগে শিখেছিলেন এখন রিয়েল প্রোজেক্টে ইমপ্লিমেন্ট করতে চেষ্টা করুন ধীরে ধীরে। অবজেক্ট অরিয়েন্টেড মাইন্ড-সেট গড়ে তুলুন। পিএইচপি নিয়ে কাজ করলে পিএইচপি ৭+ এর ফিচার গুলো শিখুন। নেমস্পেস, ট্রেইট, ইত্যাদি শিখে নিন। ইমপ্লিমেন্ট করুন প্রোজেক্টে। আর জাভাস্ক্রিপ্টের ইএস৬ এর নতুন কি কি ফিচার আসছে, প্রোটোটাইপিকাল ইনহেরিটেন্স জিনিসটা কি, এরো ফাংশন, ক্লাস, স্কোপ, মডিউল সিস্টেম, এই টাইপের যে গুরুত্বপূর্ণ জিনিস গুলো আছে তা লিস্ট-ডাউন করে জেনে নিন এক এক করে। প্রয়োজনে রিভিশন দিন বার বার।
এভাবে র কোডিং করে ৫-৬ টা সম্পূর্ণ প্রোজেক্ট কমপ্লিট হয়ে গেলে, এখন আপনি একটা ফ্রেমওয়ার্ক শেখা শুরু করে দিতে পারেন।
নেক্সট স্টেপে, যে ল্যাঙ্গুয়েজ গুলো নিয়ে কাজ করতেছেন তার একটা ফ্রেমওয়ার্ক শেখা আরম্ভ করুন। ফ্রেমওয়ার্ক হলঃ সেট অফ রি-ইউজেবল কম্পনেন্ট। যেগুলা প্রায় সব প্রোজেক্টেই কাজে লাগে। ফ্রেমওয়ার্ক আমাদের রিপিটিটিভ কম্পনেন্ট গুলো বাই ডিফল্ট দিয়ে দেয়। যেমনঃ লগিন সিস্টেম তো প্রায় সব প্রজেক্টেই লাগে, তাই ফ্রেমওয়ার্কে এগুলা বাই ডিফল্ট দেয়া থাকে সাধারনত। শুধু ইউজ করে কিভাবে তা জানতে হবে। এর বাইরে গুড কোডিং স্টান্ডার্ড এন্ড প্যাটার্ন ফলো করতে বাধ্য করে, সিকিউরিটি, পারফর্মেন্স অপটিমাইজেশন, ইত্যাদি সুযোগ সুবিধা দেয়। ডেভেলপারের অনেক কাজ সহজ করে।

পিএইচপি হলে লারাভেল বা সিম্ফনি, পাইথন হলে জ্যাঙ্গো বা ফ্লাস্ক, নোড হলে এক্সপ্রেস বা কোয়া, জাভা হলে স্প্রিংবুট, সি# হলে ডটনেট-কোর, ইত্যাদির মধ্য থেকে যে কোন একটা ফ্রেমওয়ার্ক সিলেক্ট করে শেখা শুরু করে দিন এবং আপনার ‘র’ কোডিং করে করা প্রোজেক্ট গুলো এখন এই ফ্রেমওয়ার্ক দিয়ে করুন। এবং ভালো কোডিং স্টান্ডার্ড ও রিকমন্ডেশন গুলো ফলো করার চেষ্টা করুন। ফ্রেমওয়ার্ক শিখতে গিয়ে আপনাকে বিভিন্ন ডিজাইন প্যাটার্ন আবার রিভিশন দিতে হবে। যেমনঃ এমভিসি (মডেল, ভিউ, কন্ট্রোলার), এমটিভি (মডেল, টেমপ্লেট, ভিউ), এমভিভিপি, ইত্যাদি। এর পাশাপাশি ওআরএম (অবজেক্ট রিলেশনাল ম্যাপার), কালেকশন মেথড, রাউটিং, অথেনটিকিশেন, অথরাইজেশন, ডাটাবেইজ মাইগ্রেশন, কুয়েরী, ফ্যাক্টরি, ডাটাবেজ ডিজাইন, রেস্ট এপিআই, জব, কিউ, রিকোয়েস্ট, টেমপ্লেটিং, মিডলওয়ার, ডিপেন্ডেন্সি ম্যানেজমেন্ট, ইত্যাদি জিনিস ও টেকনিক শিখতে হবে। এসব শিখতে স্টেপ বাই স্টেপ সেই ফ্রেমওয়ার্কের ডকুমেন্টেশন ফলো করতে হবে, বই, ব্লগ, আর্টিকেল পড়তে হবে। কোর্স করতে হবে দরকার হলে। আর পাশাপাশি এসব জ্ঞান ইমপ্লিমেন্ট করে অনেক অনেক প্রোজেক্ট করতে হবে। লক্ষ রাখতে হবে প্রতিটি প্রোজেক্ট যেন আগের গুলোর থেকে একটু ইউনিক হয়। সেইম টাইপের প্রোজেক্ট বার বার করলে উন্নতি হবে না আসলে।
এগুলোর পাশাপাশি আপনাকে টপিক ওয়াইজ আরো কিছু বিষয় শিখে নিতে হবেঃ যেমন -

Version Controlling System (VCS) – এর জন্য গিট ও গিটহাব এর ইউজ জানতে হবে। কিভাবে টিম ওয়ার্ক করতে হয় তা শিখতে হবে। কমিট কি, পুশ পুল কি, ব্রাঞ্চ কিভাবে বানাতে হয়, মার্জ কিভাবে করে ইত্যাদি টেকনিক গুলো শিখতে হবে। এটা অন্যতম গুরুত্বপূর্ণ একটা বিষয়। গুরুত্ব দিয়ে শিখতে হবে। রিমোটলি কাজ করা টিমের জন্য তো এটা আরো বেশি গুরুত্বপূর্ণ।
Testing - বিভিন্ন টাইপের টেস্টিং ও কিভাবে সেগুলো লিখতে হয় তা শিখতে হবে। ইউনিট টেস্টিং ও ইন্টিগ্রেশন টেস্টিং ভালো ভাবে শিখতে হবে। Test Driven Development (TDD) বিষয়টার সাথে পরিচিত হওয়ার চেষ্টা করতে হবে। PHPUnit, Mocha, Jest ইত্যাদি টেস্টিং টুল/লাইব্রেরী নিয়ে পড়াশুনা করতে হবে।
Continuous Integration & Continuous Delivery (CI/CD) - নামে থেকেই বোঝা যাচ্ছে যে আমরা কন্টিনিউয়াসলি ডেভেলপমেন্ট চালাবো, প্রোজেক্ট বিল্ড করবো, এবং সেটা অটোমেটিকালি ডেলিভার হয়ে যাবে সার্ভারে। বার বার পুরো এপ্লিকেশনটা আপলোড করতে হবে না। পুরো প্রসেসটা গিট দিয়ে হয়ে যাবে। গিটহাব একশন ও গিটল্যাবের সিআই/সিডি অপশনের ব্যাবহার শেখা যেতে পারে এগুলো প্রাকটিস করার জন্যে। বা নিজেই একটা স্ক্রিপ্ট লিখে ফেলতে পারেন নিজের মত করে কাজ চালানোর জন্যে।


Web Socket- এটা দিয়ে আপনি রিয়েল টাইম কমিউনিকেশন করতে পারেন, রিয়েল টাইম এপ্লিকেশন গুলো বানাতে পারবেন। যেমনঃ চ্যাটিং এপ (যেমনঃ হোয়াটসএপ, মেসেঞ্জার, লাইভ কোন কিছু ইত্যাদি)। তাই ওয়েব সকেট নিয়ে পড়াশুনা করতে পারেন। নিজের প্রোজেক্টে ইমপ্লিমেন্ট করতে পারেন।

REST API Development - বর্তমান যুগে ব্যাকএন্ড পার্ট সাধারনত ইনডিপেন্ডেন্ট হয়ে থাকে। অর্থাৎ একটা ব্যাকএন্ড শুধু এন্ডপয়েন্ট (এপিআই) প্রোভাইড করে আর তার সাথে ওয়েব এপ্লিকেশন, এন্ড্রয়েড এপ, আইওএস এপ, ডেস্কটপ বা আইওটি ডিভাইস সব ইন্টারএকশন করে। আর এগুলো সাধারনতঃ REST API এর মাধ্যমে হয়ে থাকে। এই রেস্ট এপিআই ডেভেলপমেন্টের জন্য পোস্টম্যান, ইনসোমনিয়া, ফায়ারক্যাম্প ইত্যাদির যে কোন একটা টুল শিখে নিতে হবে।

GraphQL - এটা অনেকটা REST API এর মডার্ণ ভার্সন। এর মাধ্যমে খুব কম রিসোর্স খরচ করে ডাটা আদান প্রদান করা হয়ে থাকে। অনেক পারফর্মেন্ট সিস্টেম API ডেভেলপমেন্টের জন্য। গ্রাফকিউএল শিখতে ওদের ডকুমেন্টেশন থেকে ল্যাঙ্গুয়েজ/ফ্রেমওয়ার্ক অনুযায়ী একটা প্যাকেজ ও তার ব্যাবহার গুলো শিখতে হবে। কোয়েরী, মিউটেশন, সাবস্ক্রিপশন, ইত্যাদি নিয়ে একটু পড়াশুনা করতে হবে। Graphene, Apollo, ইত্যাদি পপুলার প্যাকেজ।
Basics of Cyber Security - সিকিউরিটি রিলেটেড বিভিন্ন বিষয় যেমনঃ SQL Injection, SQL Attacks, Cross Site Request Forgery (CSRF), Cross Origin Resource Sharing (CORS), Encryption and Decryption Techniques, Hashing, ইত্যাদি নিয়েও পড়াশুনা করতে হবে। অন্ততঃ বেসিক বিষয় গুলো নিয়ে ধারনা রাখতে হবে।
Deployment (Basics of DevOps) - ডেপ্লয়মেন্ট সিস্টেম নিয়ে মোটামুটি জানতে হবে। এর জন্য বেশির ভাগ সময়ই লিনাক্স সার্ভারে কাজ করতে হতে পারে। কিভাবে লিনাক্স সার্ভাবে একটা এপ্লিকেশন হোস্ট করে। কিভাবে Apache বা Nginx সার্ভার লিনাক্স ড্রপ্লেটে (যেমনঃ উবুন্টু, সেন্ট ওএস) সেটাপ করতে হয়, কনফিগার ও ট্রাবলশুট করতে হয় তার বেসিক ধারনা নিতে হবে। বিভিন্ন সলিউশন প্রোভাইডার যেমনঃ Digital Ocean, AWS, Azure, Google Cloud, Netlify, Github Pages, Shared Hosting (cPanel), ইত্যাদি নিয়ে সাধারন একটা ধারনা রাখতে হবে। যাতে দরকার হলে সেগুলোয় কাজ করতে পারা যায়। এ জন্য লিনাক্স অপারেটিং সিস্টেম সম্পর্কে ভালো জ্ঞান রাখা অনেক উপকারী।Docker টাও শিখে নিতে পারেন।
এ ছাড়াও বিভিন্ন ডিপেন্ডেন্সি ম্যানেজমেন্ট টূলস যেমনঃ NPM, Yarn, Composer, Pip, ইত্যাদির বেসিক ব্যাবহার জেনে নিতে হবে। এবং ইউজকেস ভেদে বিভিন্ন বিল্ড টুলস যেমনঃ Webpack, Gulp, Gradle, Maven, CMake ও তাদের ব্যাবহার সম্পর্কে একটু ঘাটাঘাটি করতে হবে।
এভাবে শেখা কন্টিনিউ করে যেতে হবে। শিখতে হবে অবিরাম। অনেক সময় ভূল শিখবো হয়ত। ছয় মাস পরে মনে হবে আরে, এটা তো এভাবে না ওভাবে কাজ করে। ভুলটা হয়ত ভেঙ্গে যাবে। এই পুরো জার্নি জুড়েই শিখে যেতে হবে। শেখা থামানো মানে পিছিয়ে পড়ার শুরু হওয়া।

এই টেকনিকাল বিষয় গুলোর পাশাপাশি কিছু সফট-স্কিলের বিষয়ে কথা বলতে চাই। এই পুরো জার্নি জুড়েই যে সময় গুলো ফ্রি পাওয়া যাবে তার ফাকে ফাকে এই বিষয় গুলোয় সময় দেয়া প্রয়োজন।

Project Management Methodologies – যেমনঃ Agile, Scrum, Kanban ইত্যাদি কি, কিভাবে কাজ করে এগুলো ফলো করে ও এগুলোর Pros & Cons সম্পর্কে হালকা ধারনা নিয়ে রাখতে হবে।

একটা ভালো সিভি/রিজিউমি তৈরী করা - এটা খুবই গুরুত্বপূর্ণ। অনেক সময় দিয়ে এটা তৈরী করতে হবে। এবং মাঝে মাঝেই আপডেট করতে হবে। এবং যারা এক্সপার্ট আছেন সিভি কিভাবে প্রোফেশনাল করতে হয়, তা নিয়ে তাদের লেখা গুলো পড়ে বার বার রিভিশন দিয়ে সিভিটা ঠিক ঠাক রাখতে হবে। আর নিজের পার্সোনাল সিভির পাশাপাশি লিঙ্কড-ইন প্রোফাইলটাও সিভির মত করে সাজাতে হবে। অন্য এক্সপার্টদের একাউন্ট গুলো দেখে দেখে ধারনা নেয়া যেতে পারে। নিজের সঠিক তথ্য, নিজের করা প্রোজেক্ট এর লিঙ্ক, শেখা কোর্স গুলোর সার্টিফিকেট গুলো, ইত্যাদি যুক্ত করে সমৃদ্ধ করতে হবে লিংকড-ইন একাউন্টটা।
কমিউনিকেশন স্কিল - এটা অন্যতম একটা গুরুত্বপূর্ণ বিষয়। অনেকে মনে করি যে ইংরেজী শেখা মানেই কমিউনিকেশন শেখা। এটা ঠিক ইংরেজীতে ফ্লুয়েন্ট হওয়া গুরুত্বপূর্ণ কিন্তু কমিউনিকেশন স্কিল মূলত আপনি কিভাবে আপনার চিন্তা, প্রব্লেম, সল্ভ, বা যে কোন কিছু অন্য কারো কাছে ইভেক্টিভ ওয়েতে তুলে ধরতে পারতেছেন তা। আপনাকে ইংরেজীর জাহাজ হওয়ার প্রয়োজন নাই। কিন্তু যা বলতে চান তা সঠিক ভাবে তুলে ধরতে পারতে হবে অন্যের কাছে। যেমনঃ একটা কোডিং প্রব্লেমে পড়লে স্ক্রিনশন তুলে সল্ভ না চেয়ে গিটহাব গিস্ট বা পেস্ট-বিনের মাধ্যমে শেয়ার করে সল্ভ চাওয়াটাও একটা স্কিল, এরকম।
পোর্টফোলিও - নিজের একটা পোর্টফলিও তৈরী করে রাখা এবং নিজের করা প্রোজেক্ট গুলো হোস্ট করে রাখা সেখানে। পারত পক্ষে লাইভ করে রাখা। পিমিয়াম না হলেও ফ্রি হোস্টিং ইউজ করে রাখা যেতে পারে। বা গিটহাবেও রাখতেও পারেন। খুব সুন্দর ভাবে ডেস্ক্রিপশন, আর রিডমি টা লিখতে হবে।
অনলাইন প্রেজেন্স তৈরী - আপনি যে ডোমেইনে কাজ করেন, যা নিয়ে কাজ করেন তার দেশি ও ইন্টারন্যাশনাল যে ফোরাম, গ্রুপ, ও কমিউনিটি গুলো আছে সেগুলোতে যুক্ত হোন। অন্যের সমস্যার সমাধান দেয়ার চেষ্টা করুন। অন্যের কাছে সমাধান চান। নিজের চিন্তা-ভাবনা গুলো অন্যের সাথে শেয়ার করুন। নিজের একটা ব্লগ খুলে লেখালেখি করা যেতে পারে। নিজের টুইটার একাউন্টটা ফ্রেশ এন্ড প্রোফেশনাল রাখতে পারেন। কোরা, রেডিট, স্টাকঅভারফ্লো ইত্যাদিতে নিয়মিত হতে পারেন, ইউটিউবে একটা টিউটরিয়াল চ্যানেলও খুলতে পারেন।এভাবে অন্যকে শিখাতে গিয়ে অন্যের প্রব্লেম সল্ভ করে করে অনেক কিছু শিখে যাবেন।
পেপারওয়ার্ক – যে কোন প্রব্লেম সল্ভ করতে গেলে, বা প্রজেক্ট করতে গেলে শুরুতেই কোডিং করা স্টার্ট না করে আগে প্রব্লেমটা নিয়ে ভালো ভাবে ভাবুন। বা প্রজেক্টটা নিয়ে ভাবুন কিভাবে করতে চাচ্ছেন। স্ট্রাটেজি তৈরী করুন একটা। হাতে থাকা সময়ের ভালো একটা অংশ খাতা কলমে প্লান করতে, আকিবুকি করতে ব্যয় করুন। তারপর কোডিং শুরু করুন। এই অভ্যাসটা খুবই গুরুত্বপূর্ণ।
তো সামারি যদি বলি তাহলে এই পয়েন্ট গুলো আসতেছেঃ ১। ডিসাইড করুন কেন সফটওয়ার ইঞ্জিনিয়ার হতে চান। এবং একটা ট্রাক সিলেক্ট করুন।
২। একটা প্রোগ্রামিং ল্যাঙ্গুয়েজ খুব ভালো করে শিখুন। এবং তা দিয়ে কমপক্ষে ৩০০-৪০০ এলগরিদমিক প্রব্লেম সল্ভ করুন। পারলে সল্ভিং কন্টিনিউ করুন যতদিন সম্ভব।
৩। অবজেক্ট অরিয়েন্টেড প্রোগ্রামিং, এর বিভিন্ন প্রিন্সিপাল ও প্যাটার্ন নিয়ে পড়াশুনা করুন। ইমপ্লিমেন্ট করার চেষ্টা করুন।
৪। যে ট্রাকেই যান না কেন, অন্ততঃ কিছু দিন ওয়েব প্রোগ্রামিংয়ে ব্যয় করুন। ওয়েবের ধারনা প্রায় সব ট্রাকেই কাজে দেয়। এর জন্য ওয়েব প্রোগ্রামিং ফ্রেন্ডলি একটা ল্যাঙ্গুয়েজ শিখুন ভালো ভাবে। এসকিউএল শিখুন।
৫। সিলেক্ট করা ল্যাঙ্গুয়েজ ও এসলিউএল দিয়ে ‘র’ কোডিং করে কিছু প্রোজেক্ট করুন।
৬। একটা ফ্রেমওয়ার্ক শেখা আরম্ভ করে দিন ও ওওপির প্রিন্সিপাল ও প্যাটার্ন গুলো ইমপ্লিমেন্ট করতে চেষ্টা করুন। ও আগের প্রোজেক্ট গুলো রি-রাইট করুন। নতুন কিছু প্রোজেক্ট করুন।
৭। গিট ও গিটহাব শিখুন। টিম ওয়ার্ক শিখুন। Unit Testing, TDD প্রাকটিস করার অভ্যাস করুন।
৮। REST API, GraphQL, Web Socket, ইতাদি এক এক করে শিখে নিতে থাকুন।
৯। সিভি তৈরী, পার্সোনাল ব্লগ, পোর্টফলিও, লিঙ্কড-ইন একাউন্ট, কমিউনিকেশন ও প্রেজেন্টেশন স্কিল সহ বিভিন্ন টাইপের সফট স্কিল গুলোয় গুরুত্ব দিন।
১০। পেপারওয়ার্ক করার অভ্যাস গড়ে তুলুন। প্রোজেক্ট ম্যানেজমেন্ট মেথডলজি গুলো নিয়ে জানুন।
শেখার স্ট্রাটেজি কেমন হওয়া উচিতঃ
- শেখার সময় একবারে যে কোন একটা মাত্র রিসোর্স থেকে শিখতে হবে। একটা বইয়ের একটা চ্যাপ্টার পড়ে আরেকটা বই শুরু করে দেয়া যাবে না। যত কষ্টই হোক, একটা বই পুরো শেষ করে তারপর পরের বইটা শুরু করতে হবে।সমস্যায় পড়লে, বা বুঝতে কষ্ট হলে সেক্ষেত্রে গুগল করা যেতে পারে। একই ভাবে একটা কোর্স করার সময় অন্য কোর্সের ক্লাস শুরু করা যাবে না। দেখা যায় আমরা একটা কোর্সের কয়েকটা ক্লাস করে আরেকটা কোর্স শুরু করে দেই। আবার সেটার দুইটা ক্লাস করে আরেকটা। এভাবে করে শেখা হয় না। শুধু সময় নষ্ট হয়।
- শেখার সব থেকে ভালো মাধ্যম বই। তবে, ফ্রেমওয়ার্কের ক্ষেত্রে তাদের ডকুমেন্টেশন সব থেকে ভালো। বইয়ে অনেক সময় ডেপ্রিকেটেড জিনিসপত্র থাকে। তাই যে জিনিস গুলো সাধারনত চেঞ্জ হয় না তাড়াতাড়ি যেমনঃ প্রোগ্রামিং ল্যাঙ্গুয়েজ, ডাটা স্ট্রাকচার, এলগরিদম, ইত্যাদি বই থেকে এবং যেগুলো সব সময় চেঞ্জ হতে থাকে যেমনঃ ফ্রেমওয়ার্ক গুলো সেগুলো তাদের অফিশিয়াল ডকুমেন্টেশন থেকে শিখতে হবে। ডকুমেন্টেশন পড়ে কিছু শেখা এবং বোঝা অনেক গুরুত্বপূর্ণ একটা স্কিল।
- যদি কখনো বই বা ডকুমেন্টেশন পড়ে বোঝা না যায় তাহলে সেই টপিকটার কিছু আর্টিকেল, বা ভিডিও টিউটরিয়াল দেখা যেতে পারে। ভিজুয়ালি দেখলে খুব সহজেই বোঝা যায়।

আমাদের নিজেদের বুঝে নিতে হবে যে আমি কোন ওয়েতে ভালো শিখতে পারি? সেটা কারো জন্য বই হতে পারে, আবার কেউ আমরা কোর্স করে ভালো শিখি। একেক জনের জন্যে একেক টাইপের রিসোর্স কাজ করে ভালো। তো নিজেরটা নিজেকে বুঝে নিয়ে সেই টাইপের রিসোর্স জোগাড় করে নিয়ে শিখতে হবে।

ফ্রি কিছু রিসোর্সঃ
এখানে কিছু ফ্রি লার্নিং প্লাটফর্ম, টিউটোরিয়াল চ্যানেল, ও কোর্স এর লিঙ্ক শেয়ার করলামঃ
1. https://www.w3schools.com/ Tutorials on Web Technologies and Programming Languages with interactive practicing play-ground. Effective place to learn HTML, CSS, JavaScript, SQL, PHP Basics, Python, and C++ Basics.
2. https://www.freecodecamp.org/learn Free online full-stack web development boot-camp. Very popular world wide. Offers six certifications. Completely free of cost. Covers front-end, back-end, cyber-security, data-visualizations, API & Micro-services, quality assurance, etc.
3. https://www.udemy.com/ Go to this website and search what you want to learn. Then filter with ‘Free’ Checkbox. You will find bunch of Free courses on that topic. Register and start the course. Or, you got some money? buy some premium courses. It’s worth it.
4. Start following some tutorial channel and Educators. Giving some channel links here. They tech various types of programming and development topics.
6. https://courses.packtpub.com/enrollments এখানে বর্তমানে ফ্রি কিছু ওয়ার্কশপ চলতেছে।কুপন কোড ‘PACKTFREE ‘ব্যাবহার করলেই ফ্রি এক্সেস পাওয়া যাবে।
7. https://www.pluralsight.com/offer/2020/free-april-month এখানেও এক মাসের জন্য ফ্রি এক্সেস পাওয়া যাচ্ছে। অনেক কোয়ালিটি সম্পন্ন কোর্স আছে এখানেও।
8. The Missing Semester (https://www.youtube.com/channel/UCuXy5tCgEninup9cGplbiFw) । এখানে জবে ঢোকার আগে স্টুডেন্টদের যে সমস্ত বিষয়ে সাধারনতঃ দূর্বলতা থাকে সেগুলোর লেকচার পাওয়া যাবে। বাস্তবধর্মী লেখাপড়া।
এগুলোর বাইরেও আরো শত শত ফ্রি রিসোর্স আছে। গুগল সার্চ দিলেই পাওয়া যায়। সেগুলোর মধ্য থেকে নিজের পছন্দ মতন যে কোন বই, টিউটোরিয়াল, কোর্স, থেকে শিখলেই হবে।


শেষ করতে চাই এই দুটি কোটেশন দিয়েঃ
“I have no special talents. I am only passionately curious.”
Albert Einstein “You never fail until you stop trying.”
Albert Einstein

[পুরো লেখায় ভাষাগত, ধারনাগত, বা দেয়া তথ্যে অসামঞ্জস্যতা ও ভুল থেকে থাকতে পারে।
সেগুলো ক্ষমাসুন্দর দৃষ্টিতে দেখার অনুরোধ রইলো। যে কোন ভুল সংশোধন করে দিলে কৃতজ্ঞ থাকবো।]
অনেক অনেক ধন্যবাদ এবং শুভ-কামনা!
- Sunwarul Islam, Rangpur.

21 December, 2019

Symbolic link in shared hosting in a Laravel application | Error Solved for php artisan storage:link

Add this on your register method of AppServiceProvider.php to run php artisan storage:link on your Shared hosting cPanel in a Laravel Application to make a symbolic link.




// Inside of AppServiceProvider.php register() method: 
$this->app->bind('path.public', function() { return base_path('../public_html'); });
Or you can write this kind of script:
// Create a GET route and run this script to make the symlink.
<?php>
symlink('/home/CpanelUser/storage/app/public', '/home/CpanelUserpublic_html/storage');
?>

30 June, 2019

ওয়েব ডেভেলপমেন্ট বনাম এন্ড্রয়েড/আইওএস ডেভেলপমেন্ট নিয়ে ভূল ধারণা

ফ্রেন্ড জোন থেকে শুরু করে টেকওয়ার্ল্ডের নতুন অনেকেই ওয়েব ডেভেলপমেন্ট জিনিসটাকে এন্ড্রয়েড বা আইওএস ডেভেলপমেন্টের থেকে ‘ছোট’ কাজ হিসেবে দেখেন। হয়তঃ শুনে হাসি পাচ্ছে, তবে কথাটার সত্যতা আছে বলে মনে হয়। অনেক ক্ষেত্রে ব্যাপারটা ভয়াবহ আকার ধারণ করছে। এখন অনেকেই সরাসরি এন্ড্রয়েড/আইওএস ডেভেলপমেন্ট শেখা শুরু করেন ওয়েবের কোন কনসেপ্ট না নিয়েই। কিভাবে একটা সার্ভার কাজ করে, বিভিন্ন টাইপের রিকোয়েস্ট ও এগুলোকে কিভাবে হ্যান্ডেল করতে হয়, কিভাবে একটা ডাটাবেজ কাজ করে, কিভাবে ডাটাবেজ কোয়েরি লিখতে হয় ও ব্যাক-এন্ডের সাথে এর সম্পর্ক কোথায়, অথেনটিকেশন, অথোরাইজেশন, সেশন ইত্যাদি ইত্যাদি গুরুত্বপূর্ণ জিনিসগুলো নিয়ে সামান্যতম ধারনাও নাই তার আগেই, এপ ডেভেলপমেন্ট শুরু করে দেন। এবং এই ওয়েবের কন্সেপ্ট গুলোকে শুধু ওয়েবসাইট বা ওয়েবএপ ডেভেলপমেন্টের (ফ্রন্ট-এন্ড) অংশ মনে করেন। মনে করেন যে আমি সিএসই বা টেক রিলেটেড সাবজেক্টে পড়ি আমি কেন এইসটিএমএল, সিএসএস, জাভাস্ক্রিপ্ট শিখব? এগুলা আমার কাজ না। আমি এন্ড্রয়েড/আইওএস এপ বানাবো। এআই নিয়ে কাজ করবো। এগুলো আমার জন্য না। এপিআই বা ব্যাকএন্ড সার্ভিসেস ও ফ্রন্ট-এন্ড এর পার্থক্যটা বোঝেন না তারা।এখন তো অনেকে এন্ড্রয়েড হালকা-পাতলা শিখেই সরাসরি ফায়ারবেজ বা এরকম কোন রেডিমেড সলিউশন ইউজ করতে শুরু করে দেন। বুঝে শুনে ইউজ করলে ভালো। তবে, কেন জানি মনে হয় অনেকে কিছু না বুঝেই ইউজ করেন, ডকুমেন্টেশন থেকে কপি-পেস্ট করে চালায় যান। আমার মনে হয় তাদের অনেক বোঝায় ভূল থেকে যায়, সত্যটা কি জানি না তবে অনেকের সাথে কথা বলে এরকমই তো মনে হয়। অনেক ডেভেলপারের মধ্যে অনেক গ্যাপ থেকে যাচ্ছে এ জন্য।
যাই হোক, ব্যাক্তিগত ভাবে আমার মনে হয় মোবাইল ডেভেলপমেন্ট অনেক গুরুত্বপূর্ণ একটা ডোমেইন। ফিউচারে মোবাইল/আইওটির ব্যাবহার আরো অনেক বেড়ে যাবে। সাথে বাড়বে এগুলোর এপ্লিকেশন ডেভেলপারের চাহিদাও। তবে, আমার মনে হয় আমরা যারা মোবাইল (এন্ড্রয়েড/আইওএস) ডেভেলপমেন্টের দিকে যেতে চাই তাদের কমপক্ষে কিছু দিন ওয়েবের কন্সেপ্ট গুলো নিয়ে কাজ করা উচিত। ওয়েব এপিআই/সার্ভিসেস লিখে, ডাটাবেজ নিয়ে কাজ করে তারপর মোবাইল ডেভেলপমেন্টে গেলে মনে হয় কন্সেপ্ট গুলো অনেক ক্লিয়ার থাকবে। এক্ষেত্রে পিএইচপি (লারাভেল/ওয়ার্ডপ্রেস) /নোড (এক্সপ্রেস)/পাইথন(জ্যাঙ্গো/ফ্লাস্ক)/ডটনেট-কোর নিয়ে কাজ করা যেতে পারে। এসকিউএল ও নো-এসকিউএল ডাটাবেজ শেখা যেতে পারে।
আরো একটা বিষয়, ইদানিং আমাদের অনেকের মধ্যেই আর্টিফিশিয়াল ইন্টেলিজেন্স, মেশিন লার্নিং ইত্যাদি নিয়ে অনেক আগ্রহ। খুবই ভালো কথা।তবে এগুলোর জন্য যে পরিমান প্রোগ্রামিং ও প্রব্লেম সলভিং স্কিল, ম্যাথমেটিক্স, স্টাটিস্টিক্স ইত্যাদির জ্ঞান দরকার হয় তা নিয়ে আমাদের কোন ধারণাই নাই। আমরা সেগুলোতে জোড় না দিয়ে একটা পাইথনের ফ্রেমওয়ার্ক শিখে আর্টিফিশিয়াল ইন্টেলিজেন্স স্পেশালিস্ট হতে চাচ্ছি একেক জন। এই ভূল ধারণা গুলো দূর হওয়া উচিত। পাইথনের সাথে এগুলোর কোন সম্পর্কই নাই। জাভা, সি# এমনকি জাভাস্ক্রিপ্ট দিয়েও এআই নিয়ে কাজ করা যায়।
কিভাবে লিখলাম জানি না, তবে এ সকল বিষয় নিয়ে যে ভূল বোঝা-বুঝি চলতেছে এগুলো নিয়ে লেখালেখি করা, সচেতনতা তৈরী করা দরকার।
ধন্যবাদ।
Sunwarul 

সফটওয়ার ডেভেলপমেন্টে বিভিন্ন ফ্রেমওয়ার্ক বা লাইব্রেরী গুলোর প্রয়োজনীয়তা কি?

প্রোগ্রামিং বা সফটওয়ার ডেভেলপমেন্ট করেন যারা, তারা বেশির ভাগ সময়ই নিজ নিজ ডোমাইন অনুযায়ী বিভিন্ন ফ্রেমওয়ার্ক বা লাইব্রেরী ইউজ করে থাকেন।এন্ড্রয়েড, আইওএস, ওয়েব থেকে আইওটি বা গেম ডেভেলপমেন্ট সব ক্ষেত্রেই ফ্রেমওয়ার্ক বা লাইব্রেরীর বহুল ব্যাবহার দেখা যায়। আজকে জানবো ফ্রেমওয়ার্ক বা লাইব্রেরী ইউজ করার সুবিধা কি বা এর প্রয়োজনীয়তা সম্পর্কে।
বর্তমানে যারা ওয়েব ডেভেলপমেন্ট করেন তারা ফ্রন্ট-এন্ড সলিউশন হিসেবে জাভাস্ক্রিপ্টের কোন ফ্রেমওয়ার্ক বা লাইব্রেরী যেমনঃ এঙ্গুলার, রিয়াক্ট, ভিউ, এম্বার ইত্যাদি ইউজ করে থাকেন। ব্যাক-এন্ড সলিউশনের জন্য পিএইচপির লারাভেল, সিম্ফনি, কোডেগনাইটর, স্লিম বা জাভাস্ক্রিপ্ট (নোড) এর এক্সপ্রেস বা জাভার স্প্রিং, সি# এর এএসপি ডট নেট বা পাইথনের জ্যাঙ্গো বা ফ্লাস্ক ইউজ করে থাকেন।
তো ‘র’ কোডিং না করে ডেভেলপাররা কেন এগুলো ইউজ করে থাকেন? বিগিনার লেভেলে এ ব্যাপারটা অনেকেই বুঝে উঠতে পারি না আমরা।
আমরা সাধারণত সব প্রোজেক্টেই কিছু কমন ফাংশনালিটি বা কম্পোনেন্ট নিয়ে কাজ করে থাকি। যেমনঃ ফ্রন্ট-এন্ডের জন্য কিভাবে কম্পনেন্ট গুলো ম্যানেজ করা যায়, টু-ওয়ে ডাটা বাইন্ডিং, এজাক্স রিকোয়েস্ট হ্যান্ডেলিং, ফর্ম ভেলিডেশন, মেসেজ শো করানো, লিস্ট কার্ড ক্যারোসেল ডাটাটেবিল এরকম কমন টাইপের কিছু কম্পোনেন্ট বার বার ইউজ করা হয়ে থাকে। তো বার বার এই এইসটিএমএল, সিএসএস আর এর জন্য জাভাস্ক্রিপ্ট লেখাটা অনেক ঝামেলা আর বোরিং কাজ। কেমন হত যদি আমরা আমাদের কমন কম্পোনেন্ট গুলোকে রি-ইউজ করতে পারতাম বিভিন্ন প্রোজেক্টে? অর্থাৎ শুধু ক্ষেত্র বিশেষে কিছু স্টাইলিং ও স্ক্রিপ্ট চেঞ্জ করব এবং রি-ইউজ করতে পারবো? হালের রিয়াক্ট, এঙ্গুলার বা ভিউ কিন্তু এই সুবিধা গুলিই প্রোভাইড করে থাকে। অর্থাৎ কম্পোনেন্ট গুলো ও তাদের ফাংশনালিটি রি-ইউজ করতে পারি আমরা। বার বার একই কাজ করতে হয় না।
একই ভাবে ব্যাকএন্ড এর জন্য ইউজার রেজিস্ট্রেশন, লগিন, অথেনটিকেশন চেক, সেশন, ই-মেইল, এসএমএস, পুশ নোটিফিকেশন, ডাটাবেজ কোয়েরি করা, রিলেশনশিপ বলে দেয়া ইত্যাদি ইত্যাদি ফাংশনালিটি গুলো প্রায় সব ধরনের প্রোজেক্টেই কাজে লাগে। তো লারাভেল, এক্সপ্রেস, জ্যাঙ্গো, ডটনেট-কোর আমদের এই কমন ফাংশনালিটি গুলোই প্রোভাইড করে থাকে। অর্থাৎ আমাদের কমন ফাংশন গুলো বার বার লেখার পেইন আর নিতে হবে না ফ্রেমওয়ার্ক ইউজ করলে।খুব সহজেই কাজ গুলো করে দেয় ফ্রেমওয়ার্ক গুলো।
এখন জাভাস্ক্রিপ্টের অনেক ফ্রেমওয়ার্কই অবশ্য এ সকল সাপোর্ট দিয়ে থাকে। অর্থাৎ ফুল-ফ্লেজড, ফুল-স্টাক ফ্রেমওয়ার্কের কাজ করে থাকে, যেমনঃ এঙ্গুলার৭। অর্থাৎ একটা ল্যাঙ্গুয়েজ (জেস/টিএস) দিয়েই ফুল-স্টাক সলিউশন পাচ্ছি আমরা।
একই ভাবে গেম তৈরীতে গ্রাফিক্স, সাউন্ড, লজিক ইত্যাদি হ্যান্ডেলিং করতে গিয়ে যতগুলো কমন টাস্ক আছে তা গেম ইঞ্জিন গুলো প্রোভাইড করে থাকে। যেমনঃ ইউনিটিতে এগুলো নিয়ে দুঃশ্চিন্তা না করেই একটা গেম বানিয়ে ফেলতে পারেন আপনি। সব ঝামেলা ফ্রেমওয়ার্ক/ইঞ্জিন হ্যান্ডেল করবে।
আরো গুরুত্বপূর্ণ বিষয় হলো যখন আপনি কোন টিমে কাজ করবেন, তখন একেক জন একেক ভাবে, একেক ডিজাইন প্যাটার্ণ বা প্যারাডাইম মেনে কোড করলে তা খুব বেশি রিডেবল বা মেইনটেইনেবল হয় না, হবে না। তাই সবাইকে একটা ওয়েল ডিফাইন্ড স্টান্ডার্ড ফলো করানো ফ্রেমওয়ার্ক গুলোর আরেকটা গুরুত্বপূর্ণ কাজ। সাধারণত ফ্রেমওয়ার্ক গুলো ইন্ডাস্ট্রি-স্টান্ডার্ড ফলো করে টোটাল একটা প্যাকেজ হিসেবে তৈরী করা হয়ে থাকে। যেমনঃ অবজেক্ট অরিয়েন্ডেড প্রোগ্রামিং ফলো করা, প্রতিষ্ঠিত ডিজাইন প্যাটার্ট (যেমনঃ মডেল-ভিউ-কন্ট্রোলার এমভিসি) মেনে চলা, অবজেক্ট রিলেশনাল ম্যাপার বা ওয়ারএম ইনক্লুড করা, ইউনিট টেস্টিং ফিচার সহজ করে ইনক্লুড করে দেয়া ইত্যাদি ইত্যাদি।
আর সব থেকে বড় কথা ফ্রেমওয়ার্ক গুলো কোড রি-ইউজে অনেক বেশি উতসাহ দেয়, একই কাজ বার বার করা থেকে অনুতসাহিত করে। আর সব থেকে যেটা বেশি করে তা হলো ডেভেলপারদের জীবনকে অনেক ‘সহজ’ করে দেয় । বিশেষ করে যে সব ফ্রেমওয়ার্কের সিএলআই (কমান্ড লাইন ইন্টারফেস) সাপোর্ট ভালো।
লেখায় কোন ভূল থেকে থাকলে ক্ষমাসুন্দর দৃষ্টিতে দেখবেন, ধন্যবাদ।
Sunwarul :-)