30 June, 2019

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

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

21 August, 2018

প্রোগামিং সম্পর্কে কিছু কথা

১। কেন প্রোগ্রামিং/কোডিং/ডেভেলপিং শিখব ? লাভ কি এগুলা শিখে?
এর উত্তর সবাই জানি মনে হয়। ফ্রিল্যান্সার/ডেভেলপার/সফটওয়ার ইঞ্জিনিয়ার বা আস্ত একটা কোম্পানির মালিক, কে না হতে চায়?
সুতরাং কেন শিখবো এই টপিকস আপাতত বাদ।
২। ক্যারিয়ার প্যাথঃ ডেভেলপার বা প্রোগ্রামার হিসেবে এখন হাজার হাজার ফিল্ডে কাজ করার সুযোগ আছে। তবে স্কিল থাকতে হবে সেরকম। ডেভেলপিং সেক্টরের অন্যতম কিছু ফিল্ড ও সেগুলোতে ব্যবহৃত হট প্রোগ্রামিং ল্যাংগুয়েজ, লাইব্রেরী ও ফ্রেমওয়ার্ক গুলো হলঃ
- ওয়েব ডেভেলপমেন্ট (HTML5,CSS3,Bootstrap,JavaScript, PHP, Java, Python [ React.JS, Angular.JS,Vue.JS, Spring, Laravel, Django, Flask] )
- ডেস্কটপ ডেভেলপমেন্ট (C++, C#, Java, Python [Qt, .NET, JavaFX, Swing] )
- মোবাইল (Android/iOS) ডেভেলপমেন্ট ( Java, Kotlin, Xamarin, ReactNATIVE, Swift, Objective C, C++ )
- গেম ডেভেলপমেন্ট (C++, C#, Java, Python)
- বিভিন্ন ধরনের সিস্টেম ডিজাইন (লো লেভেল কাজকারবার যেমনঃ ইলেক্ট্রনিক ডিভাইসের ইন্টারফেসিং, অপারেটিং সিস্টেম, রোবোটিক্স, সাইন্টিফিক কাজ কারবার ইত্যাদি ইত্যাদি) (C/C++, Rust, Scala, Python, Java)
- আর্টিফিসিয়াল ইন্টিলিজেন্ট ( কৃত্রিম বুদ্ধিমত্তা) (Python, Java, R, C/C++)
- ভার্চুয়াল রিয়েলিটি (JavaScript, C++, Python, Java, C#)
- সাইবার সিকিউরিটি ( C/C++, Python, PHP, MySQL, Java)
ইত্যাদি।
৩। কোডিং এর শুরুঃ জব ট্রেন্ড সহ বিভিন্ন ফ্যাক্টর বিবেচনায় নিলে বলা যায়, আপনি যদি বিগিনার হন, তাহলে উচিত হবে C/C++, Java, Python এই ৩ টার যে কোন একটা প্রোগ্রামিং ভাষা ভালো ভাবে শেখা। একটা বলতে একটাই। একটার একটু আরেকটার একটু এভাবে শেখা বোকামি। তবে, একটা ভাষা শেখার পর অন্য আরেকটা শেখা ওয়ান টুর ব্যাপার।
শুরুর দিকে ল্যাংগুয়েজ সিলেক্ট করা অনেকের জন্য ঝামেলার কাজ। তবে, জব পোস্ট/ট্রেন্ড/গিটহাব রিপজিটরি ইত্যাদি বিবেচনায় নিলে প্রথম ল্যাংগুয়েজ হিসেবে ‘জাভা’ শেখা যেতে পারে।উপরে বলা প্রায় প্রত্যেকটা ফিল্ডে 'জাভা' ইউজ করা যায়। আর ‘জাভা’ ১০০% অবজেক্ট ওরিয়েন্টেড ল্যাংগুয়েজ। তাই এটা শিখতে পারলে সফটওয়ার ডেভেলপিং এর অনেক কিছুই ক্লিয়ার হয়ে যাবে। তবে ‘জাভা’ গ্রহের ‘ সব থেকে সহজে শেখা যায়’ এমন প্রোগামিং ভাষা নয়।
জিমেইল সহ প্রায় সব এন্টারপ্রাইজ লেভেলের ওয়েব এপ 'জাভা' দিয়ে ডেভেলপ করা। 'জাভা' অনেক ফাস্ট আর সিকিউরড।এর আছে মহা সমুদ্রের মতন API (Application Programming Interface) যা দিয়ে খুব সহজে যে কোন কিছু ডেভেলপ করা যায়। 'জভা'-র গুন বর্ননা করে শেষ করা যাবে না। Jetbrains এর Intelij IDEA সহ Android Studio, Pycharm, CLion ইত্যাদি 'জাভা' দিয়ে ডেভেলপ করা। এন্ড্রয়েডের সব এপ্লিকেশন, গেম 'জাভা' দিয়ে ডেভেলপ করা ( Kotlin can be defined as purified JAVA, until now…)
৪। শুরুর পরঃ মোটামুটি লেভেলের সিনট্যাক্স জানার পর নতুন শেখা ভাষাটি দিয়ে প্রব্লেম সল্ভিং এর প্রাকটিস করতে হবে, পারলে কম্পিটিশন করতে হবে। এই জন্য অনলাইনে অনেক সাইট আছে। যেমনঃ Codeforces, HackerRank, Codechef, UVA, Light OJ, SPOJ, HackerEarch, TopCoder ইত্যাদি।এতে করে স্কিল ডেভেলপ হবে। লজিক গুলো স্ট্রং হবে। গতি আসবে ।
৫। ডিসক্রিট ম্যাথ, ডাটা স্ট্রাকচার ও বিভিন্ন এলগরিদম শিখতে হবেঃ বিভিন্ন রিসোর্স থেকে বহুল ব্যাবহৃত ডাটা স্ট্রাকচার ও এলগরিদম গুলো শিখতে হবে ও নিজের লজিক ডেভেলপ করতে হবে। অর্থাৎ কোন সমস্যা আসলে আমি কিভাবে, কোন টেকনিকে তা সমাধান করব।
৬। যে কোন একটা IDE (Integrated Development Environment) সম্পর্কে ভালো ধারনা রাখতে হবে। তাহলে কোডিং/ডেভেলপিং অনেক তাড়াতাড়ি করা যাবে। ওপেনসোর্স কিছু Editor ও IDE হলঃ
  • Eclipse
  • Netbeans
  • Atom
  • Visual Studio Code
  • Intelij IDEA Community Edition
  • Android Studio
  • Notepad++
  • Sublime Text
  • Vim, Neo Vim, Emacs
৭। ডেভেলপার টুলস ও ডিবাগিং সম্পর্কে ভালো ধারণ থাকতে হবেঃ
  • Google Chrome
  • Firefox
এর ডেভেলপার টুলস সম্পর্কে ভালো ধারনা থাকতে হবে। টেস্টিং সম্পর্কে পড়াশুনা করা যেতে পারে, আরো ভালো ডেভেলপার হওয়ার জন্য।
৮। ওপেন সোর্স প্লাটফর্ম ইউস করার অভ্যাস থাকতে হবে। যেমনঃ লিনাক্স এবং বিশেষ করে এর শক্তিশালী CLI ( Command Line Interface ) এর ব্যাবহার জানতে হবে।
৯। ভার্সন কন্ট্রোল সম্পর্কে জানতে Git ও Github এর ব্যাবহার জানতে হবে।
১০। বিভিন্ন FTP ( File Transfer Protocol ) ক্লায়েন্ট যেমনঃ File Zilla সম্পর্কে ধারনা রাখতে হবে।
১১। ডাটাবেস সম্পর্কে জানতে হবে। যেমনঃ MySQL, MongoDB ইত্যাদি
সব সময় নিত্য নতুন জিনিস ডেভেলপ হচ্ছে তাই সব সময় শেখার উদ্যোম রাখতে হবে।

17 March, 2018

Install internet speed meter in Ubuntu Linux

Installing Internet Speed Meter on LINUX (Ubuntu)
   sudo apt-add-repository ppa:fixnix/netspeed
   sudo apt-get update
   sudo apt-get install indicator-netspeed-unity