একাধিক প্রোগ্রামিং ল্যাঙ্গুয়েজ শিখে আপনার চিন্তাশক্তি বিকশিত করুন
আমরা বেশিরভাগ প্রোগ্রামারই একটা ল্যাঙ্গুয়েজ দিয়ে শুরু করি, আর সেটাতেই দক্ষ হওয়ার চেষ্টা করি। এতে দোষের কিছু নেই। একটা ল্যাঙ্গুয়েজ গভীরভাবে জানা অবশ্যই দরকার। কিন্তু আমার নিজের অভিজ্ঞতা বলে, একজন প্রোগ্রামারের চিন্তার জগৎটা আসলে বড় হতে শুরু করে তখনই, যখন সে দ্বিতীয় বা তৃতীয় একটা ল্যাঙ্গুয়েজের সংস্পর্শে আসে। এমনকি সেই ল্যাঙ্গুয়েজ দিয়ে যদি কোনোদিন প্রোডাকশনে এক লাইন কোডও না লেখা হয়, তবুও।
কেন এমন হয়? কারণ প্রতিটা ল্যাঙ্গুয়েজের পেছনে একটা design philosophy আছে। কিছু সমস্যাকে সে গুরুত্ব দিয়েছে, কিছু জিনিস ইচ্ছা করে বাদ দিয়েছে। এই সিদ্ধান্তগুলো কেন নেওয়া হলো সেটা বুঝতে গেলে আপনাকে বাধ্য হয়েই type system, memory management, concurrency, abstraction এর মতো মূল বিষয়গুলো নিয়ে ভাবতে হয়। আর ঠিক এখানেই আসল শেখাটা হয়।
নতুন ল্যাঙ্গুয়েজ শিখে আসলে কী লাভ?
"আমার তো একটা ল্যাঙ্গুয়েজ দিয়েই কাজ চলছে, আরেকটা কেন শিখব?" এই প্রশ্নটা খুবই যৌক্তিক। উত্তরটা কয়েকভাবে দেওয়া যায়।
১. চিন্তার নতুন হাতিয়ার পাওয়া যায়
ভাষাতত্ত্বে একটা ধারণা আছে: আমরা যে ভাষায় কথা বলি, সেই ভাষা আমাদের চিন্তাকে প্রভাবিত করে। প্রোগ্রামিংয়েও ব্যাপারটা অনেকটা তা-ই। Turing Award বিজয়ী Kenneth Iverson তাঁর বিখ্যাত লেকচার "Notation as a Tool of Thought" (1979)-এ দেখিয়েছিলেন, ভালো notation শুধু কোড লেখার মাধ্যম না, চিন্তা করারও মাধ্যম। যে প্রোগ্রামার শুধু imperative স্টাইলে ভাবতে শিখেছে, pattern matching বা ownership-এর ধারণা তার টুলবক্সেই নেই। ফলে সমস্যাটা দেখলেও সমাধানটা তার মাথায় আসবে না।
২. নিজের মূল ল্যাঙ্গুয়েজটাই ভালোভাবে বোঝা যায়
The Pragmatic Programmer বইয়ে Dave Thomas আর Andy Hunt-এর একটা বিখ্যাত পরামর্শ আছে: বছরে অন্তত একটা নতুন ল্যাঙ্গুয়েজ শিখুন। কারণ হিসেবে তাঁরা বলেছেন, ভিন্ন ল্যাঙ্গুয়েজ একই সমস্যাকে ভিন্নভাবে দেখে, আর সেই ভিন্ন দৃষ্টিভঙ্গিগুলো আপনার প্রতিদিনের কোডেই ফিরে আসে। Rust-এর ownership শেখার পর PHP-তে কোড লেখার সময়ও আপনি ভাবতে শুরু করবেন, এই object-টার মালিক আসলে কে? এই ভাবনাটাই অনেক bug আগেভাগে ধরিয়ে দেয়।
৩. ক্যারিয়ারে টিকে থাকা সহজ হয়
Google-এর research director Peter Norvig তাঁর "Teach Yourself Programming in Ten Years" প্রবন্ধে বলেছেন, অন্তত আধ ডজন ল্যাঙ্গুয়েজ শিখুন, এবং সেগুলো যেন ভিন্ন ভিন্ন paradigm-এর হয়। প্রযুক্তি বদলায়, ফ্রেমওয়ার্ক আসে-যায়। কিন্তু যে মানুষটা জানে garbage collection আর reference counting-এর পার্থক্য কী, exception আর error-value-র trade-off কোথায়, নতুন যে ল্যাঙ্গুয়েজই আসুক সে কয়েক সপ্তাহেই ধরে ফেলতে পারে। কারণ সে syntax শেখে না, concept শেখে।
৪. সঠিক টুল বেছে নেওয়ার ক্ষমতা তৈরি হয়
সব সমস্যা সব ল্যাঙ্গুয়েজে সমান ভালোভাবে সমাধান হয় না। CLI টুল বানাতে Go দুর্দান্ত, systems-level কাজে Rust, আর দ্রুত একটা ওয়েব অ্যাপ দাঁড় করাতে PHP/Laravel এখনো অপ্রতিদ্বন্দ্বী। একটাই ল্যাঙ্গুয়েজ জানলে সব সমস্যাকেই সেই ল্যাঙ্গুয়েজের ছাঁচে ফেলতে হয়। হাতে শুধু হাতুড়ি থাকলে সবকিছুকেই পেরেক মনে হয়, সেই অবস্থা আর কী।
শেষ কথা
একটা কথা পরিষ্কার করে বলি। একাধিক ল্যাঙ্গুয়েজ শেখা মানে শুধু তার syntax শেখা না। আসল ব্যাপারটা হলো, একই সমস্যাকে প্রতিটা ল্যাঙ্গুয়েজ কীভাবে ভিন্নভাবে সমাধান করেছে এবং design decision-গুলোর পেছনের যুক্তি বোঝা।
ল্যাঙ্গুয়েজগুলোকে পাশাপাশি রাখলেই ব্যাপারটা পরিষ্কার হয়ে যায়:
- কেউ error-কে বানিয়েছে সাধারণ value (Go),
- কেউ enum-কে দিয়েছে অসাধারণ ক্ষমতা (Swift, Rust),
- কেউ concurrency-কে করেছে পানির মতো সহজ (Go),
- কেউ garbage collector ছাড়াই memory safety-র সমাধান বের করেছে (Rust)।
কোনো সিদ্ধান্তই এমনি এমনি নেওয়া হয়নি। প্রতিটার পেছনে আছে trade-off, আছে দর্শন। আর এই trade-off-গুলো চিনতে শেখাটাই একজন junior আর একজন seasoned ইঞ্জিনিয়ারের মধ্যে পার্থক্য গড়ে দেয়।
তাই পরের ছুটির দিনে নতুন কোনো ফ্রেমওয়ার্ক না ঘেঁটে বরং একেবারে নতুন একটা ল্যাঙ্গুয়েজে ছোট্ট কিছু বানিয়ে দেখুন। কথা দিচ্ছি, নিজের প্রতিদিনের ল্যাঙ্গুয়েজটাকেও তখন নতুন চোখে দেখবেন।
লেখাটা কাজে লাগলে পরিচিত কারও সাথে শেয়ার করতে ভুলবেন না। আর কোথাও ভুল চোখে পড়লে জানাবেন, শেখার তো আর শেষ নেই।
References
- Dave Thomas & Andy Hunt — The Pragmatic Programmer: "Learn at least one new language every year"
- Peter Norvig — Teach Yourself Programming in Ten Years
- Kenneth E. Iverson — Notation as a Tool of Thought (ACM Turing Award Lecture, 1979)
- The Rust Book — Understanding Ownership
- Effective Go — Concurrency