একজন ভালো ডেভেলপার হওয়ার ১০ স্কিল
১. প্রোগ্রামিং নলেজ: মিনিমাম একটা প্রোগ্রামিং ল্যাংগুয়েজ তোমাকে দক্ষ হতেই হবে। এবং দরকার হলে সেই একটা প্রোগ্রামিং ল্যাংগুয়েজ এর আশেপাশে কিছু জিনিস থাকলে সেগুলাও জানতে হবে। যেমন, ওয়েব ডেভেলপার হতে হলে তোমাকে জাভাস্ক্রিপ্ট জানতে হবে। সেটার আশেপাশে HTML, CSS থাকবে; সেগুলাও জানতে হবে। এন্ড্রয়েড ডেভেলপার হওয়ার জন্য Kotlin বা জাভা জানতে হবে। ডাটা সায়েন্স বা মেশিন লার্নিং এ ভালো হওয়ার জন্য পাইথন লাগবে। গেম ডেভেলপার হওয়ার জন্য C# বা C++ শিখতে হবে। ডাটাবেজ এর জন্য mySQL বা Mongodb বা postgresql শিখতেই হবে। কোন মাফ নাই। অর্থাৎ তোমারক একটা মেইন ফিল্ড থাকবে সেটার জন্য মেইন যে প্রোগ্রামিং ল্যাংগুয়েজ সেটার খুঁটিনাটি, নাট বল্টু, কাপ পিরিচ সব জানতে হবে।
.
২. ফ্রেমওয়ার্ক: যে যত কথাই বলুক না কেন, ফ্রেমওয়ার্ক ছাড়া সফটওয়্যার ডেভেলপ করতে পারবে না। যেমন, ওয়েব ডেভেলপমেন্ট এর জন্য React বা Vue বা Next.js লাগবে। পাইথনের ব্যাকএন্ড করতে গেলে Django বা Flask লাগবে। জাভা দিয়ে বেশি কাজ করতে গেলে Spring Boot বা Hibernate বা অন্য কিছু লাগবে। Php এর সাথে লারাভেল লাগে। ক্রস প্লাটফর্ম মোবাইল এপ বানাতে গেলে React Native বা Flutter লাগবে। গেম ডেভেলপ করতে Unreal Engine বা Unity লাগবে।
মোটামুটি ৯০% সফটওয়্যার এর জন্যই বলা যায়: ফ্রেমওয়ার্ক ছাড়া সফটওয়্যার ডেভেলপ হবে না। বাকি যে ১০% এ ফ্রেমওয়ার্ক ইউজ হয় না। সেই ১০% এ হয় raw ল্যাংগুয়েজ দিয়ে ফ্রেমওয়ার্ক বানাইতেছে অথবা ক্রেজি লেভেলের কিছু বানাচ্ছে।
আর ফ্রেমওয়ার্ক এতো বেশি ইউজ করার সবচেয়ে বড় কারণ হচ্ছে, ডেভেলপমেন্ট এর প্রোডাক্টিভিটি, বেষ্ট প্রাকটিস, ফ্রেমওয়ার্ক প্রচুর টেস্ট করা থাকে বলে সেটাতে বাগ অনেক কম হয়, গাইডলাইন পাওয়া যায়, আরো অনেক কিছু।
----------
৩. ফান্ডামেন্টালস এবং প্রব্লেম সলভিং:
লংটার্মে ভালো ডেভেলপার হতে গেলে ডাটা স্ট্রাকচার, এলগরিদম, OOP, ডিজাইন প্যাটার্ন, সফটওয়্যার আর্কিটেকচার সম্পর্কে ধারণা থাকতেই হবে। বিশেষ করে arrays, linked lists, stacks, queues, trees, graphs এর মতো ডাটা স্ট্রাকচার। Searching, Sorting, Dynamic programming, Tree রিলেটেড এলগরিদম, এবং Time complexity কিভাবে বের করতে হয়। অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং এর প্রিন্সিপালগুলা এপ্লাই করতে জানতে হবে। ডিজাইন প্যাটার্ন সম্পর্কে জানবে। সফটওয়্যার ডেভেলপমেন্ট প্রিন্সিপাল সম্পর্কে জানবে।
অল্প হলেও প্রব্লেম সলভিং করবে। বিশেষ করে বেসিক প্রোগ্রামিং, ডাটা স্ট্রাকচার, এলগরিদম বুঝার জন্য হলেও অল্প কিছু হলেও প্রব্লেম সল্ভ করার চেষ্টা করতে হবে।
.
সেজন্যই হয়তো দেখবে: কমিউনিটির অনেক সিনিয়র ডেভেলপাররা প্রায়ই প্রোগ্রামিংয়ের ফান্ডামেন্টালস জিনিসগুলো শেখার গুরুত্ব নিয়ে কথা বলে। তাই সময় সুযোগ বের করে তোমার এই জিনিসগুলো শেখা উচিত। সেটা তুমি চাইলে ইউটিউব থেকে খুঁজে খুঁজে বের করে শিখতে পারো। অথবা একটা গাইডেড লার্নিং প্লাটফর্ম এক বছর ডেডিকেটেড সময় দিয়ে ভালোভাবে শিখতে চাইলে, শত শত প্রব্লেম সল্ভ করতে চাইলে সেপ্টেম্বর ২৪ এর মধ্যে ঝাঁপিয়ে পড়ো www . phitron . io ওয়েবসাইট এ।
--
৪. গিট/গিটহাব (সোর্চ কন্ট্রোল)
সোর্চ কোড এর রিপো তৈরি করা, ক্লোন করা। কোড কমিট করা। পুশ, পুল, স্টেটাস এবং লগ চেক করা। ব্রাঞ্চ ক্রিয়েট করা, চেকআউট করা,মার্জ করা, কনফ্লিক্ট হলে সেটা রিজল্ভ করা। কোড রিভিউ, পুল রিকুয়েস্ট মার্জ করা। দরকার হলে কমিট ডিলিট করা, রিবেইজ করা। .gitignore, README, একটু আধটু MarkDown, এই জিনিসগুলা জুনিয়র ডেভেলপারদের জানতেই হবে।
গিটহাব বা গিট্ল্যাব যেটাই হোক না কেন, গিট্ ছাড়া সফটওয়্যার ডেভেলপ করাই পসিবল না।
–
৫. ডিবাগিং, টেস্টিং, , Error Handling
প্রথমত এরর মেসেজগুলা পড়তে হবে। প্রথম প্রথম এরর মেসেজ না বুঝলেও পড়তে হবে। তারপর এরর মেসেজ গুগল, github issues বা chatGPT তে দিয়ে সেখান থেকে সমাধান খুঁজে বের করে আনার এবিলিটি তৈরি করতে হবে। শুরুর দিকে কোন একটা এরর সল্ভ করতে অনেক লম্বা সময় লেগে যাবে। তারপরেও ধৈর্য্য ধরে এরর সল্ভ করার চেষ্টা করে যেতে হবে।
বাগ ফিক্সিং করা তো জানতেই হবে।
এছাড়া সব প্রোগ্রামিং ল্যাংগুয়েজ এই মিনিমাম একটা ইউনিট টেস্টিং লাইব্রেরি আছে। যেমন জাভাস্ক্রিপ্ট এ Jest, mocha, Jasmine, পাইথন এ pytest, জাভা তে jUnit এ। সো, তুমি যেই প্রোগ্রামিং ল্যাংগুয়েজ শিখতেছো সেটার ইউনিট টেস্ট কিভাবে কাজ করে সেটা সম্পর্কে ধারণা নিবে। বিশেষ করে Positive Test, Negative Test, Boundary Test, Corner Case, এইগুলা সম্পর্কে ধারণা নিবে। কোড কভারেজ বের করতে পারলে খুবই ভালো।
এছাড়া নিজের কোড এর আউটপুট নিজে নিজে টেস্ট করতে জানতে হবে। বিশেষ করে যে কোড লিখলাম সেটা ঠিক মতো কাজ করতেছে কিনা সেটা বুঝতে না পারলে তো ডেভেলপারই হওয়া যাবে না।
ডিবাগিং কিভাবে করে। বিশেষ করে ব্রেক পয়েন্ট। ফাংশনের মধ্যে স্টেপ ইন, স্টেপ আউট। কোন কিছু লগ পড়লে। স্ট্যাক ট্রেস করা, ইস্যু রিপ্রোডিউস করার সিস্টেম জানতে হবে।
এর পাশাপাশি কোন এরর হলে, কিভাবে এরর হ্যান্ডেল করবে, এরর মেসেজ দেখাবে। বা error থ্রো করে আবার দরকার হলে এরর ক্যাচ করবে। এই জিনিসগুলো দেখবে।
---
৬. সার্ভার, ডাটাবেজ, devops:
Server কিভাবে কাজ করে, HTTPS কি জিনিস, API কি, ডাটাবেজ আর ব্যাকএন্ড কিভাবে কাজ করে। CRUD অপারেশন কিভাবে কাজ করে। ডাটাবেজ এ কিভাবে ডাটা রাখে। সেটা SQL ডাটাবেজ বা NoSQL হোক। সেখান থেকে ডাটা কিভাবে বের করে নিয়ে আসতে হয়। এর পাশাপাশি Authentication, Authorization, JWT, Caching, ক্লাউড কিভাবে কাজ করে। ORM কি জিনিস।
যারা ব্যাকএন্ড এ ফোকাস করবে তাদের জন্য Multithreading, Concurrency, Data Modeling, Query Optimization, logging, benchmarking, এ ফোকাস দিতে হবে। এরপরে আরো বেশি জানতে চাইলে docker container, Microservices, লোড ব্যালেন্সিং, Monitoring, Logging, CI/CD সম্পর্কে ধারণা নিতে পারো।
.
৭. Read ডকুমেন্টেশন
জুনিয়র হিসেবে অনেক কিছুর ভিডিও টিউটোরিয়াল পেলেও ধীরে ধীরে অফিসিয়াল ডকুমেন্টেশন পড়ার দিকে ফোকাস বাড়াতে হবে। প্রথম প্রথম ইংরেজি ভালো না বুঝলেও জোর করে পড়তে হবে। দরকার হলে Getting Started দিয়ে শুরু করে স্টেপ বাই স্টেপ ফলো করে ইনস্টল করবে। API Reference এর ডকুমেন্টেশন এ দেয়া ফিচারগুলো খুঁটিয়ে খুঁটিয়ে পড়বে। সময় লাগুক কোন সমস্যা নাই। একটানা পড়তে না পারলে গ্যাপ দিয়ে দিয়ে পড়বে।
বেশিরভাগ ডকুমেন্টেশনে উদাহরণ এবং ইন্টারএকটিভ কোড দেয়া থাকে। সেগুলা রান করে দেখবে। দরকার হলে দুই একটা জিনিস একটু হালকা চেইঞ্জ করে দেখবে। কখনো গুবলেট পাকিয়ে ফেললে আবার পেইজ রিলোড করে দেখবে। আর বেশিরভাগ ডকুমেন্টেশন এ Best Practices দেয়া থাকে। আলাদাভাৱে ব্লগ সেকশন থাকে, সময় পেলে সেগুলাও দেখবে।
এইভাবে বছরখানে চালাতে পারলে, ধীরে ধীরে ডকুমেন্টেশন এর প্রতি ভয় কেটে যাবে।
ডকুমেন্টেশন পড়ার পাশাপাশি তোমার লেখা কোড এর ডকুমেন্টেশন কেমনে করবে সেটার দিকেও ফোকাস দিতে হবে।
.
৮. Continuous Learning:
প্রোগ্রামিং সেক্টর এ নিত্য নতুন জিনিস আসতেই থাকবে। সেখান থেকে সব তোমাকে শিখতে হবে। এমন কোন কথা নাই। আবার কোন কিছুই শিখবে না। সেটা করলেও হবে না। বরং কোন জিনিস যদি আট-দশবার শুনে ফেলো তাহলে সেটা একটু গুগলে সার্চ দিয়ে দেখবে। দরকার হলে ওদের ডকুমেন্টেশন পড়ে ফেলবে। আরো ভালো লাগলে ছোট একটা প্রজেক্ট বানিয়ে ফেলবে। ওদের অফিসিয়াল কোন ভিডিও থাকলে সেটা দেখে ফেলবে।
খুব ভালো লাগলে একটা বড় সাইজের পার্সোনাল প্রজেক্ট বানিয়ে ফেলবে।
পছন্দের কিছু Newsletters, Blogs এ সাবস্ক্রাইব করে রাখবে। কিছু অনলাইন গ্রূপ এর সাথে জড়িত থাকবে। কিছু সিনিয়র ডেভেলপার এবং কমিউনিটিতে একটিভ ডেভেলপারদের ফলো দিয়ে রাখবে। সম্ভব হলে অন্য সিরিয়াস ডেভেলপারদের সাথে আড্ডা দিবে বা মিটআপ এ চলে যাবে। টেকনিক্যাল পডকাস্ট শুনতে পারো। সময় থাকলে ওপেন সোর্স প্রজেক্ট এ কন্ট্রিবিউটও করতে পারো।
৯. সফ্ট স্কিল :
একজন ডেভেলপার কোড লিখলেও তার আরো অনেক অনুসাঙ্গিক কাজ করতে হয়। যেমন টিম মেম্বারদের সাথে কমিউনিকেট করা। ইমেইল লেখা, রিপ্লাই দেয়া। টাস্ক এর প্রায়রিটি বুঝা। টাইম ম্যানেজমেন্ট। প্রজেক্ট প্লানিং। মাঝে মধ্যে যেসব সফটওয়্যার ডেভেলপ করছে সেগুলা প্রেজেন্ট করা লাগতে পারে। রিমোট জব বা বিদেশী ক্লায়েন্টের সাথে কাজ করতে গেলে ইংরেজি কথা বলা লাগতে পারে। কোন ফিডব্যাক বা সাজেশন থাকলে টিম মেম্বারদের সাথে সেটা শেয়ার করা। স্যালারি নিগোসিয়েশন। ইন্টারভিউ দিতে পারা। কিছুটা নেটওয়ার্কিং লাগবে। এর পাশাপাশি অফিস এর কালচার এর সাথে এডাপ্ট করা। এইরকম আরো অনেক সফ্ট স্কিল এর দরকার ঠিকই পড়ে।
কোন কিছুতে আটকে গেলে আগে সেটা নিজে নিজে ট্রাই করা। তারপর হেল্প চাওয়া। বা কোন ফিচার ডেভেলপ হতে বেশি সময় লাগলে সেটা আগে থেকে জানানোর সাহস থাকতে হবে।
অনেক সময় আগে কাজ করার অভিজ্ঞতা নাই। বা এমন একটা জিনিস আসছে যেটা আগে থেকে জানতাম না। সেটা নিয়ে কাজ করার সাহস রাখতে হবে।
রিডিং স্কিল লাগে। সফটওয়্যার এর ফিচার জিরা তে লেখা থাকে সেটা পড়ে বুঝতে হয়। অনেক সময় ক্লায়েন্ট বা কাস্টমার ফিডব্যাক দেয় সেগুলা বুঝার এবং সেইগুলা ফিক্স করার বা ইম্প্রুভ করার মানুষিকতা থাকতে হয়।
.
10. আরো কিছু জিনিস
সফ্টওয়ার ডেভেলপ করতে গেলে আরো কিছু জিনিষ চলে আসবে। যেমন, কয়েকটা সিম্পল সিকিউরিটি এর জিনিস: যেমন, SQL injection, cross-site scripting (XSS), API Security, বিভিন্ন Encryption Algorithms, Key Management সম্পর্কে না আইডিয়া থাকলে কোন না কোন এক সময় বিপদে পড়ে যাবে।
পারফরম্যান্স অপটিমাইজেশন। থার্ড পার্টি টুলস এর সাথে সফটওয়্যার ইন্টিগ্রেশন।
একটা সফটওয়্যার অনেক ডেভেলপার মিলে বানায়। তাই অন্যের কোড দেখে বুঝার এবিলিটি। এমনকি নিজের লেখা ছয় মাস আগের কোড দেখেও বুঝার এবিলিটি লাগবে।
একজন মানুষ হিসেবে: নিজের হেলথ, পার্সোনাল ফাইনান্স, ফ্যামিলি রেস্পন্সিবিলিটি নেয়ার এবিলিটিও কিন্তু লাগবে।
-----
এইটা একটা বিশাল লিষ্ট। সব এক দিনে হবে না। তবে শিখতে থাকতে। লেগে থাকলে। চেষ্টা করলে শুধু এইগুলা না। এইগুলার চাইতেও আরো বেশি কিছু হবে।
.
ডিসক্লেইমার: দিন শেষে একজন সফটওয়্যার ডেভেলপার ঠান্ডা মাথায় তার কাজ করে যায়। বেশিরভাগ সময় সে অন্যদের সাথেও নাই। পাশেও নাই। নিজের মতো করে এগুতে থাকে। কেউ কিছু বললেই সে মাথা গরম করে ফেলে না। নিজের প্ল্যান নিজে করে। নিজের মতো করে এগুতে থাকে। দিনশেষে সে তার নিজের মতো তার লাইফ এনজয় করে। নিজের মতো করে তার লাইফের প্যারা হ্যান্ডেল করে। অন্য মানুষের থিকিং স্টাইল তার কাছে দুর্বোধ্যই থেকে যায়।