প্রোগ্রামিং শিখলেই যে প্রোগ্রামার হয়ে যায় ব্যাপারটা এমন না। একজন ডেভেলপার যখন কোনো প্রজেক্ট করে তখন সে একার জন্য করেনা, তার ওই প্রজেক্ট এ আরো অনেক ডেভেলপার কাজ করবে, তখন যদি কোড পড়ে বুঝতেই না পারে তাহলে তো আর নিজেকে ভালো প্রোগ্রামার দাবি করা যায় না। এমন আরো কিছু বিষয় আছে যার জন্য হয়তো প্রোগ্রামিং জানলেও ভালো প্রোগ্রামার হওয়া যায় না।
আজকের আর্টিকেলে এমন ১০ টি টিপস দিব যা আপনাকে একজন ভালো প্রোগ্রামার হতে সাহায্য করবে।
Contents
প্রধান ফিল্ড
প্রোগ্রামিং নলেজ: মিনিমাম একটা প্রোগ্রামিং ল্যাংগুয়েজ আপনাকে দক্ষ হতেই হবে। এবং দরকার হলে সেই একটা প্রোগ্রামিং ল্যাংগুয়েজ এর আশেপাশে কিছু জিনিস থাকলে সেগুলাও জানতে হবে। যেমন, ওয়েব ডেভেলপার হতে হলে আপনাকে জাভাস্ক্রিপ্ট জানতে হবে। সেটার আশেপাশে 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 কিভাবে বের করতে হয়। অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং এর প্রিন্সিপালগুলা এপ্লাই করতে জানতে হবে। ডিজাইন প্যাটার্ন সম্পর্কে জানবেন। সফটওয়্যার ডেভেলপমেন্ট প্রিন্সিপাল সম্পর্কে জানবেন।
অল্প হলেও প্রব্লেম সলভিং করবেn। বিশেষ করে বেসিক প্রোগ্রামিং, ডাটা স্ট্রাকচার, এলগরিদম বুঝার জন্য হলেও অল্প কিছু হলেও প্রব্লেম সল্ভ করার চেষ্টা করতে হবে।
.
সেজন্যই হয়তো দেখবেন কমিউনিটির অনেক সিনিয়র ডেভেলপাররা প্রায়ই প্রোগ্রামিংয়ের ফান্ডামেন্টালস জিনিসগুলো শেখার গুরুত্ব নিয়ে কথা বলে। তাই সময় সুযোগ বের করে তোমার এই জিনিসগুলো শেখা উচিত। সেটা আপনি চাইলে ইউটিউব থেকে খুঁজে খুঁজে বের করে শিখতে পারেন।
গিট/গিটহাব (সোর্চ কন্ট্রোল)
সোর্স কোড এর রিপো তৈরি করা, ক্লোন করা। কোড কমিট করা। পুশ, পুল, স্টেটাস এবং লগ চেক করা। ব্রাঞ্চ ক্রিয়েট করা, চেকআউট করা,মার্জ করা, কনফ্লিক্ট হলে সেটা রিজল্ভ করা। কোড রিভিউ, পুল রিকুয়েস্ট মার্জ করা। দরকার হলে কমিট ডিলিট করা, রিবেইজ করা। .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 সম্পর্কে ধারণা নিতে পারেন।
ডকুমেন্টেশন
জুনিয়র হিসেবে অনেক কিছুর ভিডিও টিউটোরিয়াল পেলেও ধীরে ধীরে অফিসিয়াল ডকুমেন্টেশন পড়ার দিকে ফোকাস বাড়াতে হবে। প্রথম প্রথম ইংরেজি ভালো না বুঝলেও জোর করে পড়তে হবে। দরকার হলে Getting Started দিয়ে শুরু করে স্টেপ বাই স্টেপ ফলো করে ইনস্টল করবেন। API Reference এর ডকুমেন্টেশন এ দেয়া ফিচারগুলো খুঁটিয়ে খুঁটিয়ে পড়বেন। সময় লাগুক কোন সমস্যা নাই। একটানা পড়তে না পারলে গ্যাপ দিয়ে দিয়ে পড়বেন।
বেশিরভাগ ডকুমেন্টেশনে উদাহরণ এবং ইন্টারএকটিভ কোড দেয়া থাকে। সেগুলা রান করে দেখবে। দরকার হলে দুই একটা জিনিস একটু হালকা চেইঞ্জ করে দেখবে। কখনো গুবলেট পাকিয়ে ফেললে আবার পেইজ রিলোড করে দেখবেন। আর বেশিরভাগ ডকুমেন্টেশন এ Best Practices দেয়া থাকে। আলাদাভাৱে ব্লগ সেকশন থাকে, সময় পেলে সেগুলাও দেখবেন।
এইভাবে বছরখানে চালাতে পারলে, ধীরে ধীরে ডকুমেন্টেশন এর প্রতি ভয় কেটে যাবে।
ডকুমেন্টেশন পড়ার পাশাপাশি তোমার লেখা কোড এর ডকুমেন্টেশন কেমনে করবে সেটার দিকেও ফোকাস দিতে হবে।
Continuous Learning:
প্রোগ্রামিং সেক্টর এ নিত্য নতুন জিনিস আসতেই থাকবে। সেখান থেকে সব আপনাকে শিখতে হবে। এমন কোন কথা নাই। আবার কোন কিছুই শিখবে না। সেটা করলেও হবে না। বরং কোন জিনিস যদি আট-দশবার শুনে ফেলো তাহলে সেটা একটু গুগলে সার্চ দিয়ে দেখবেন। দরকার হলে ওদের ডকুমেন্টেশন পড়ে ফেলবেন। আরো ভালো লাগলে ছোট একটা প্রজেক্ট বানিয়ে ফেলবেন। ওদের অফিসিয়াল কোন ভিডিও থাকলে সেটা দেখে ফেলবেন।
খুব ভালো লাগলে একটা বড় সাইজের পার্সোনাল প্রজেক্ট বানিয়ে ফেলবেন।
পছন্দের কিছু Newsletters, Blogs এ সাবস্ক্রাইব করে রাখবেন। কিছু অনলাইন গ্রূপ এর সাথে জড়িত থাকবেন। কিছু সিনিয়র ডেভেলপার এবং কমিউনিটিতে একটিভ ডেভেলপারদের ফলো দিয়ে রাখবেন। সম্ভব হলে অন্য সিরিয়াস ডেভেলপারদের সাথে আড্ডা দিবেন বা মিটআপ এ চলে যাবেন। টেকনিক্যাল পডকাস্ট শুনতে পারেন। সময় থাকলে ওপেন সোর্স প্রজেক্ট এ কন্ট্রিবিউটও করতে পারেন।
সফ্ট স্কিল
একজন ডেভেলপার কোড লিখলেও তার আরো অনেক অনুসাঙ্গিক কাজ করতে হয়। যেমন টিম মেম্বারদের সাথে কমিউনিকেট করা। ইমেইল লেখা, রিপ্লাই দেয়া। টাস্ক এর প্রায়রিটি বুঝা। টাইম ম্যানেজমেন্ট। প্রজেক্ট প্লানিং। মাঝে মধ্যে যেসব সফটওয়্যার ডেভেলপ করছে সেগুলা প্রেজেন্ট করা লাগতে পারে। রিমোট জব বা বিদেশী ক্লায়েন্টের সাথে কাজ করতে গেলে ইংরেজি কথা বলা লাগতে পারে। কোন ফিডব্যাক বা সাজেশন থাকলে টিম মেম্বারদের সাথে সেটা শেয়ার করা। স্যালারি নিগোসিয়েশন। ইন্টারভিউ দিতে পারা। কিছুটা নেটওয়ার্কিং লাগবে। এর পাশাপাশি অফিস এর কালচার এর সাথে এডাপ্ট করা। এইরকম আরো অনেক সফ্ট স্কিল এর দরকার ঠিকই পড়ে।
কোন কিছুতে আটকে গেলে আগে সেটা নিজে নিজে ট্রাই করা। তারপর হেল্প চাওয়া। বা কোন ফিচার ডেভেলপ হতে বেশি সময় লাগলে সেটা আগে থেকে জানানোর সাহস থাকতে হবে।
অনেক সময় আগে কাজ করার অভিজ্ঞতা নাই। বা এমন একটা জিনিস আসছে যেটা আগে থেকে জানতাম না। সেটা নিয়ে কাজ করার সাহস রাখতে হবে।
রিডিং স্কিল লাগে। সফটওয়্যার এর ফিচার জিরা তে লেখা থাকে সেটা পড়ে বুঝতে হয়। অনেক সময় ক্লায়েন্ট বা কাস্টমার ফিডব্যাক দেয় সেগুলা বুঝার এবং সেইগুলা ফিক্স করার বা ইম্প্রুভ করার মানুষিকতা থাকতে হয়।
আরো কিছু জিনিস
সফ্টওয়ার ডেভেলপ করতে গেলে আরো কিছু জিনিষ চলে আসবে। যেমন, কয়েকটা সিম্পল সিকিউরিটি এর জিনিস: যেমন, SQL injection, cross-site scripting (XSS), API Security, বিভিন্ন Encryption Algorithms, Key Management সম্পর্কে না আইডিয়া থাকলে কোন না কোন এক সময় বিপদে পড়ে যাবেন।
পারফরম্যান্স অপটিমাইজেশন। থার্ড পার্টি টুলস এর সাথে সফটওয়্যার ইন্টিগ্রেশন।
একটা সফটওয়্যার অনেক ডেভেলপার মিলে বানায়। তাই অন্যের কোড দেখে বুঝার এবিলিটি। এমনকি নিজের লেখা ছয় মাস আগের কোড দেখেও বুঝার এবিলিটি লাগবে।
একজন মানুষ হিসেবে: নিজের হেলথ, পার্সোনাল ফাইনান্স, ফ্যামিলি রেস্পন্সিবিলিটি নেয়ার এবিলিটিও কিন্তু লাগবে।
এইটা একটা বিশাল লিষ্ট। সব এক দিনে হবে না। তবে শিখতে থাকতে। লেগে থাকলে। চেষ্টা করলে শুধু এইগুলা না। এইগুলার চাইতেও আরো বেশি কিছু হবে।
পরিশেষে
দিন শেষে একজন সফটওয়্যার ডেভেলপার ঠান্ডা মাথায় তার কাজ করে যায়। বেশিরভাগ সময় সে অন্যদের সাথেও নাই। পাশেও নাই। নিজের মতো করে এগুতে থাকে। কেউ কিছু বললেই সে মাথা গরম করে ফেলে না। নিজের প্ল্যান নিজে করে। নিজের মতো করে এগুতে থাকে। দিনশেষে সে তার নিজের মতো তার লাইফ এনজয় করে। নিজের মতো করে তার লাইফের প্যারা হ্যান্ডেল করে। অন্য মানুষের থিংকিং স্টাইল তার কাছে দুর্বোধ্যই থেকে যায়।