
Mobile App Development
ব্লগ লেখা আর অ্যাপ ডেভেলপমেন্টের কোর্স করানোর সুবাদে অনলাইনে-অফলাইনে প্রায়ই এই কমন প্রশ্নটার উত্তর দিতে হয় “ভাই অ্যান্ড্রয়েড অ্যাপ ডেভেলপমেন্ট শিখতে চাই। কিভাবে শুরু করব?” বারবার একই উত্তরের পুনরাবৃত্তি ঠেকানোর জন্য এই পোস্টটা আমার ব্যক্তিগত ব্লগে প্রথম পোস্ট করি। আমি এখানে আমার অ্যান্ড্রয়েড শেখা শুরু যেভাবে তার আলোকে কিছু এক্সপেরিয়েন্স শেয়ার করব। আর চেষ্টা করব কিছু পরামর্শ দেবার। এতে করে যারা সত্যিকারার্থেই অ্যান্ড্রয়েড শুরু করতে আগ্রহী তারা হয়ত কিছুটা উপকৃত হবে।
জাতীয় বিশ্ববিদ্যায়ের সেশন জটের সুবাদে আমার অনার্স লাইফ ছিল প্রায় পাঁচ বছরের। প্রথম আড়াই থেকে তিন বছর শুধুমাত্র ACM করতাম। অনলাইন জাজে প্রবলেম সলভ করতাম। কিছু ডেটা-অ্যালগোর প্র্যাকটিস তখন হত। এরপর অ্যান্ড্রয়েড ডেভেলপমেন্ট শেখার দিকে ঝুকলাম। জাতীয় বিশ্ববিদ্যালয়ের সিলেবাসে জাভা নাই। OOP কোর্সে সি++ পড়ানো হয়েছিল। Android যেহেতু জাভা দিয়ে করতে হয় তাই প্রথমত শুরু করলাম জাভা শেখা। সি/সি++ আর অবজেক্ট ওরিয়েন্টেডের কিছু আইডিয়া থাকায় জাভার শুরুটা খুব একটা কঠিন হয় নাই। শুরু করেছিলাম জুলকারনাইন মাহমুদ ভাইয়ার শিক্ষক ডট কমের ভিডিও টিউটোরিয়াল দেখে। এরপর Eclipse দিয়ে অ্যান্ড্রয়েডের হাতেখড়ি। পরে Android Studio দিয়ে শেখা শুরু করা।
কখন অ্যান্ড্রয়েড শুরু করবে না, আর কখন শুরু করবে
যারা অ্যাপ ডেভেলপমেন্ট শিখতে চায় তাদের প্রতি আমার পরামর্শ হচ্ছে থার্ড ইয়ারের আগে এটা শুরু করো না। থার্ড ইয়ারের শেষের দিকে শুরু করতে পার। এর আগ পর্যন্ত প্রোগ্রামিং এর বিভিন্ন ট্রিক্সগুলো শিখো। প্রবলেম সলভিং শিখো। এই সময়টায় তোমার ডেটা স্ট্রাকচার, অ্যালগরিদম, ডেটাবেজ, ওওপি, নাম্বার থিওরি ইত্যাদি শেখার সময়। পাস করে বের হবার পর এগুলো শিখা কঠিন। কারণ এগুলো এক রাত পড়ে পাশ করার মত কোনো টপিক না। একেকটা ডেটা স্ট্রাকচার বা অ্যালগরিদমের কনসেপ্টটা বুঝতে তোমার হয়ত কয়েক ঘন্টা লাগবে। কিন্তু সেটা কাজে লাগানো বা ফিল করার মত লেভেলে যেতে অনেক প্র্যাকটিস আর এগুলো নিয়ে নিয়মিত ঘাটাঘাটি দরকার। পাস করার পর ৩ মাসে অ্যান্ড্রয়েড ডেভেলপমেন্ট শিখতে পারবে, কিন্তু ৩ মাসে ডেটা স্ট্রাকচার-অ্যালগরিদম শিখতে পারবে না। তোমার যদি ডেটা স্ট্রাকচার, অ্যালগরিদম, ওওপি, ডেটাবেজের আইডিয়া ক্লিয়ার না থাকে তাহলে অ্যাপ ডেভেলপমেন্টে গিয়ে হোঁচট খাবা। আমার ডেটাবেজে দূর্বলতা আছে। কোর্সটা হেলাফেলা করেছিলাম। সে জন্য এখন কষ্ট করতে হচ্ছে। তোমার যদি মনে হয় প্রোগ্রামিং শেখা, কনটেস্ট করার পাশাপাশি অবসর সময়ে অ্যান্ড্রয়েড শিখবো, তাহলে বুঝবে তোমার প্রবলেম সলভিং ঠিকঠাক মত হচ্ছে না। কারণ ভার্সিটির পড়াশোনার সাথে প্রবলেম সলভিং চালিয়ে গেলে পাশাপাশি অবসর সময় পাওয়া যাবার কথা না। তাই যখন সময় হবে তখন শুরু করো। অকালপক্ক ফল কিন্তু খুব একটা স্বাদের হয় না!
Android Development শুরু করব কিভাবে?
বর্তমানে অ্যান্ড্রয়েড ডেভেলপমেন্টের জন্য Java ও Kotlin উভয়েই অফিসিয়াল ল্যাঙ্গুয়েজ। দুইটা দিয়েই কাজ করা যাবে। কিন্তু যারা একদম নতুন করে শুরু করবে তাদের জন্য সিনিয়ররা জাভা দিয়েই শুরু করতে বলেন। এতে স্ট্রং আর স্ট্রিক্ট ল্যাঙ্গুয়েজ জাভা জানা হলো এবং অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিংয়ের কনসেপ্টগুলো বেশ ভালো করে জানা হবে। যেহেতু আমার এই পোস্টটা যারা একদম গোড়া থেকে অ্যান্ড্রয়েড শুরু করবে তাদের জন্য, তাই আমি জাভার দৃষ্টিকোণ থেকেই লিখছি।
Prerequisites of Learning Android Development
তোমার প্রোগ্রামিংয়ের ব্যাসিকটা পাকাপোক্ত হবার পর তুমি যখন অ্যান্ড্রয়েড ডেভেলপমেন্ট শুরু করতে ইচ্ছা করবা তখন প্রিরিকুইজিট হিসাবে জাভায় তোমার দখল কতটা সেটা চিন্তা করবে। যদি আগে জাভা করে না থাকো তাহলে মাস ২-৩ সময় নাও জাভা আর ব্যাসিক ওওপি ঝালিয়ে নেয়ার জন্য। নিচে কিছু টপিকের নাম দিচ্ছি যেগুলো মোটামুটি জানার পর তুমি অ্যান্ড্রয়েড শুরু করতে পারো।
Java input and output from console
Simple arithmetic and bitwise operation
IF-Else
Loop
Array
ArrayList
List
HashMap
Stack class
Queue class
StringBuffer class
String class
Date and time related classes
File input and output
Linear Search
Binary Search
Bubble Sort
Quick Sort
Sieve of Eratosthenes
DFS
BFS
Inheritance
Interface
Abstraction
Polymorphism
Method overloading
Method overriding
মাস তিনেকের মধ্যে এই টপিকগুলো নিয়ে ভাল রকমের প্র্যাকটিস করা সম্ভব। খুব ভাল হয় নিজের মত করে কনসোলেই একটা ছোটখাটো প্রজেক্ট করে ফেল। হতে পারে সেটা একটা টেক্সট ফাইলে কিছু স্টুডেন্ট ইনফরমেশন read-write-search-delete-update করার মত সিম্পল প্রোজেক্ট। এটার মধ্যে তোমার জানা OOP knowledge-গুলো implement করার চেষ্টা করো। এগুলো হচ্ছে মিনিমাম কিছু জিনিস যেগুলো জানা না থাকলে পদে পদে ধাক্কা খেতে হবে। আরো অনেক অনেক কিছু শেখা লাগবে। সেগুলো পরে কাজ করতে করতে নিজে নিজেই শিখে নিতে পারবা।
শেখার জন্য ব্লগ বা ভিডিও টিউটোরিয়াল নয়, বই সর্বশ্রেষ্ঠ। জাভা শেখার জন্য এই বইগুলো আমি ফলো করিঃ
How to program Java by Deitel
Head First Java
Effective Java
জাভা প্রোগ্রামিং — আ ন ম বজলুর রহমান
Start Learning of Android App Development
অ্যান্ড্রয়েড অ্যাপ ডেভেলপ করার জন্য সবচেয়ে শক্তিশালী IDE হচ্ছে Android Studio. এটা ডাউনলোড করে তোমার পিসিতে ইন্সটল করে নাও। ইন্সটল করার সময় কোনো ঝামেলা হলে ইউটিউবের ভিডিও দেখে ঠিক করে নাও। তুমি যেহেতু অ্যাপ ডেভেলপমেন্ট শিখতে চাচ্ছ তার মানে আমি ধরেই নিচ্ছি তোমার পর্যাপ্ত ধৈর্য আর গুগলে সার্চ করার অভ্যাস আছে। কোনো একটা টপিকে আটকে গেলেই তুমি বোকার মত কাউকে নক দিবা না, তার আগে অবশ্যই কয়েক ঘন্টা গুগলে ঘাটাঘাটি করবে; এই বিশ্বাস তোমার উপর আমার আছে।
নিজে নিজে শেখার জন্য আমার মতে ভিডিও টিউটোরিয়াল দেখে শুরু করা ভালো। এতে দ্রুত কিছু আউটপুট চোখের সামনে ধরা দেয়। নিজের ইন্সপায়রেশনের জন্য এটার দরকার আছে। ইউটিউবে অনেক বিগিনার লেভেলের ভিডিও টিউটোরিয়াল সিরিজ আছে। সেগুলো দেখে নিয়মিত প্র্যাকটিস করা যেতে পারে। আমি কয়েকটা লিংক নিচে দিচ্ছিঃ
Slidenerd
Udacity
The New Boston
আরো কিছু রিসোর্স দিচ্ছি যেগুলো অনেক হেল্পফুলঃ
Android Official Documentation
Awesome Android Complete Reference
Developers Blog
Android Hive
CodePath
Tutorials Point
Vogella
Java Point
The Busy Coder’s Guide to Android Development (Book)
Head First Android Development — 2nd Edition (Book)
খুঁজলে আরো অসংখ্য রিসোর্স পাবা। যেটা দেখে তোমার ভাল লাগে সেটা দিয়ে শুরু করো। প্রথম লিংকের ভিডিওগুলো আমার কাছে ভাল লাগে। কারণ অনেক দ্রুত আর অল্প সময়ের একেকটা ভিডিও। এই ভিডিও দেখে ঘুম আসার চান্স নাই। এখানে ছোট ছোট ভিডিওতে একটা করে টপিক দেখানো হয়েছে। এরকম কয়েকটা টপিক শেখার পর তুমি এগুলো দিয়ে একটা প্রোজেক্ট করে ফেলবা। এখন আবার জিজ্ঞেস করো না “ভাই কী প্রোজেক্ট করব? আইডিয়া পাই না। আইডিয়া দেন!”। আইডিয়া একে বারেই না পেলে ক্যালকুলেটর বানাও। সায়েন্টিফিক ক্যালকুলেটর বানাও। বা কিছুই মাথায় না আসলে একটা অ্যাপ বানাও যার একেকটা অ্যাক্টিভিটিতে অ্যান্ড্রয়েডের একেকটা টপিক ইমপ্লিমেন্ট করে দেখাবা। কেউ যদি জিজ্ঞেস করে “কী কী শিখলা?” তাকে অ্যাপ ধরায় দিয়া বলবা “এইগুলা শিখছি!” :P
ভিডিও দেখার পাশাপাশি বই পড়ার অভ্যাস করো। ভিডিও দেখে কখনোই কোনো টপিকের ফুল কনসেপ্ট বুঝতে পারবা না। কারণ ভিডিওতে সব তথ্য দেয়া হয় না। ভিডিওর চেয়ে ব্লগে একটু বেশি থাকে। বইয়ে থাকে আরো বিস্তারিত তথ্য। আর শেখার সবচেয়ে নির্ভরযোগ্য আর অথেন্টিক সোর্স হচ্ছে অ্যান্ড্রয়েডের অফিসিয়াল ডকুমেন্টেশন। শুরুর দিকে হয়ত এটার লেখা দেখে খুব একটা সুবিধা করতে পারবা না। কিন্তু দিন বাড়ার সাথে সাথে এই ডকুমেন্টেশনগুলো বোঝার পরিমান বাড়তে থাকবে। আমি যেই কাজটা করি তা হচ্ছে, কোনো টিউটোরিয়াল ব্লগ বা ভিডিও দেখে প্রথমে আইডিয়া নিই। এরপর আস্তে ধিরে অফিসিয়াল ডক পড়া শুরু করি। এতে আমার বুঝতে সহজ হয়। তোমার ক্ষেত্রে হয়ত এই সিসটেম কাজ নাও করতে পারে। নিজের পদ্ধতিটা কিছুদিন গেলেই ধরে ফেলতে পারবে।
Some topics about Android Development
নিচের টপিকগুলো তুমি পর্যায়ক্রমে শিখতে পারো। এই সিরিয়াল্যি শিখতে হবে তা না। দরকার অনুযায়ী আগে-পরে করে নিতে পারো।
TextView (To show “Hello World!”)
Button
Toast
EditText (to get text input)
ImageView
LinearLayout
RelativeLayout
ConstraintLayout
CoordinatorLayout
WebView
Snackbar
ProgressBar
Pop up Dialog
Radio Button
CheckBox
Activity (start an activity from another activity)
Data transfer between two ‘Activity’
Activity Life Cycle (very very important!)***
Phone call, email, SMS
SharedPreferences
Fragment
Fragment Lifecycle
Navigation Drawer
Floating Action Button
SQLite database
ListView
Learn to use third party libraries
Learn Logger Library
Learn Picasso and Glide Library for image loading
Network call (REST API) with Retrofit (very very important!)***
ButterKnife Library
EventBus Library
BroadCastReceiver
RecyclerView and CardView
Run time permission
Default Camera
Image or file upload to server
Service
Play Audio and Video
Firebase Push Notification
GPS
Fabric Crashlytics
ProGuard for Source Code Security
Use Youtube API, Map API
Use Social Login
Android Development best practices (Important)***
Git for version control
Learn MORE and MORE and MORE…
উপরের টপিকগুলো শেখা হলে বা কনফিডেন্টলি ইউজ করা শিখে গেলে আস্তে আস্তে নিচের টপিকগুলো দেখা শুরু করতে পারোঃ
Data binding
RxJava
Kotlin
Learn about basic design pattern like: Singleton, Builder patter, Factory pattern etc
Learn MVP architectural pattern (important)***
Learn MVVP architectural pattern
HTTP response caching
Different types of Service
Audio-video streaming
Use of ORM instead of raw SQLite query
Java Threading
Exception
Use of Generics
Firebase Realtime Database
Learn to make RESTful web API and implement all HTTP methods
Android এর প্রাইমারি টপিকগুলো মোটামুটি কভার করার পর নিজেকে কোনো মতে ব্যাসিক লেভেল জানা অ্যান্ড্রয়েড ডেভেলপার বলা যেতে পারে। পাশাপাশি নতুন যে কোনো টপিক সামনে আসলে তা শিখে ফেলার তৃষ্ণা থাকতে হবে সমুদ্রসম! তোমার ধৈর্য থাকতে হবে ঢাকার বিখ্যাত ‘বাহন বাস’ বা ‘৭ নাম্বার’ বাসের ড্রাইভারের মত। রোদ, বৃষ্টি, ঝড় কোনো কিছুই যেন তোমাকে স্পর্শ না করে। তোমার অ্যাপ একবার রান করলে দশ বার ক্র্যাশ করবে। এটাই নিয়ম। নাল পয়েন্টার এক্সেপশন খেতে খেতে তোমার মাথা নাল হয়ে যাবার উপক্রম হবে। উপরের টপিকগুলো শেখার সময় তুমি যেই ঝামেলাগুলোতে পড়বা, বিশ্বাস করো! তোমার আগে যারাই শেখা শুরু করেছে তারাই সে ঝামেলায় পড়েছে! তাই অ্যাপ কাজ না করলেই অমুক তমুক ভাইদেরকে ইনবক্স না করে গুগলে ছোট্ট করে সার্চ দাও। দেখ তোমার আগে ঐ বেলতলা অনেকেই পার হয়ে এসেছে। তুমি একলাই হতভাগা ন্যাড়া নও!
সম্ভব হলে ৩-৪ জনের টিম করে শেখা প্লাস কাজ করা শুরু করো। এমন মানুষদেরকে সাথে নাও যারা টাকা কামানোর চেয়ে কোড করতে বেশি ভালোবাসে। এমন কাউকে টিমে না নেয়াই উত্তম যে কাজ শেখার আগেই রেভিনিউ ভাগাভাগি নিয়ে চিন্তিত হবে। প্রথম দিকে কমন টাইপের কাজ করে হাত পাকাও। এরপর হুট করে কোনো একটা আইডিয়া মাথায় আসলে প্লেস্টোরে একাউন্ট খুলে আপ করো। ইনকাম নিয়ে বেশি টেনশন করো না। নিয়ত রাখো যে, নতুন যা যা শিখবা সেগুলো তোমার অ্যাপে ইমপ্লিমেন্ট করবা। কাজ শেখার জন্য হলে নিউজ পেপার লোড করার অ্যাপ বানাতেই পারো। তাই বলে এটা প্লে স্টোরে আপ করে হাজার হাজার ডলার কামানোর চিন্তা না করাই ভাল। যদি তোমার নিউজ পেপার অ্যাপে ইউনিক কিছু থাকে, যেটা অন্য অ্যাপে নাই তাহলে সেটা ভিন্ন কথা। ‘সকালে রান্নার টিপস, বিকালে সাজুগুজুর টিপস’ এই টাইপের অ্যাপ ডেভেলপ করে টাইম নষ্ট করো না।
মাইন্ড সেট করো প্রবলেম সলভার হবার জন্য, জাস্ট অ্যান্ড্রয়েড ডেভেলপার নয়! গড়ে তোলো নিজেকে কোর প্রোগ্রামার হিসাবে। আবারো বলছি, তুমি যদি মনে করো “আমি প্রোগ্রামিং তেমন একটা পারি না… তাই চিন্তা করতেছি অ্যাপ ডেভেলপার হবো!” তাহলে এটা তোমার দুঃস্বপ্ন! চিন্তা এই লাইনে হলে আগে ভাগেই সতর্ক হও। এই রাস্তা ছেড়ে ভাগো! হয় রিয়েল প্রোগ্রামিং শিখে আসো, নইলে এই দিকে পা বাড়ানোর দরকার নাই। টাকার দুঃখে তখন সকাল বিকাল ‘বাসর রাতের অ্যাপ’ বানানো ছাড়া উপায় থাকবে না। প্রোগ্রামিং, অ্যাপ ডেভেলপমেন্ট ছাড়াও সিএসই পড়ে অনেক কিছু করার আছে!
আজ অ্যান্ড্রয়েড আছে। কাল যদি না থাকে তাহলেও যেন তোমার দুশ্চিন্তা না করতে হয়। নতুন যেই টেকনোলজি আসবে সেটাতে যেন সুইচ করতে পারো! সে জন্য প্রোগ্রামিংয়ের ব্যাসিক স্ট্রং করার কোনো বিকল্প নাই।
শেষ করছি একটা ইথিক্সের কথা দিয়ে। টাকার জন্য কখনো এমন কাজ করো না, এমন অ্যাপ বানিয়ো না যা তোমার ধর্ম সাপোর্ট করে না, যা তোমার দেশের মানুষের জন্য ক্ষতিকর, যা সমাজ ও মানব সভ্যতার জন্য ক্ষতিকর। এমন অ্যাপ তুমি বানিয়ো না যা গর্ব করে তোমার মাকে দেখাতে পারবে না। তুমি চটি অ্যাপ বানালে ঘটনা চক্রে হয়ত দেখবে তোমার ছোট ভাইবোনেরা সেগুলো ইউজ করছে। তোমার ছেলেমেয়েরা হয়ত কোন একদিন এই অ্যাপ ইউজ করবে। এই অ্যাপ থেকে ইনকাম হওয়া টাকাটা হারাম হবে না? তুমি মারা যাবে, এই অ্যাপের সকল ইউজারদের পাপের অংশ তোমার কবরেও পৌঁছে যাবে! কবরের আজাব সহ্য করতে পারবে তো?
অ্যাপ ডেভেলপার হবার চেয়ে ভালো মানুষ হওয়া বেশি জরুরি!