30 June, 2019

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

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

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

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