এরিক স্কিয়ারবুম-এর সঙ্গে একটি সাক্ষাৎকার, যেখানে তিনি এবং জেরেমি ওয়াকার ফাংশনাল প্রোগ্রামিং, Exercism ট্র্যাক মেইনটেইন করা এবং Exercism সলিউশনের আসন্ন স্ট্যাটিক অ্যানালাইসিস নিয়ে আলোচনা করেছেন।
হ্যালো এরিক। প্রথম Exercism Contributor Spotlight-এ থাকার জন্য ধন্যবাদ! আমরা আপনার কাজ তুলে ধরতে চেয়েছিলাম, কারণ মনে হয় আপনি Exercism-এর প্রতিটি অংশেই অবদান রাখেন এবং পুরো প্রজেক্ট জুড়ে কাজ করে দুর্দান্ত কিছু অন্তর্দৃষ্টি পেয়েছেন!
তাহলে একটু পটভূমি জানতে চাই, আপনি প্রথম কীভাবে Exercism-এ যুক্ত হলেন?
২০১৪ সালে আমি একটি ফাংশনাল প্রোগ্রামিং কোর্স করেছিলাম, যেখানে প্রোগ্রামিং ভাষা হিসেবে Scala ব্যবহার করা হতো। কোর্সটি শেষ করার পর আমি আমার Scala দক্ষতা আরও উন্নত করার উপায় খুঁজতে গিয়ে Exercism খুঁজে পাই। বেশিদিন লাগেনি, আমি আসক্ত হয়ে পড়ি এবং Exercism-এর অন্য ভাষার ট্র্যাকগুলোও করতে শুরু করি। আমার সলিউশনে মানুষ কী কী মন্তব্য করত, তা থেকে অনেক উপকৃত হওয়ার পর আমি নিজে C# ট্র্যাকের সলিউশনে মন্তব্য করতে শুরু করি। এক পর্যায়ে আমাকে C# ট্র্যাকের মেইনটেইনার হওয়ার প্রস্তাব দেওয়া হয়, যা আমি খুশি মনে গ্রহণ করি। পাঁচ বছর পর, এখন আমি C# ও F# ট্র্যাকের মেন্টর, C#, F# ও Scala ট্র্যাকের মেইনটেইনার, এবং ক্রস-ট্র্যাক প্রবলেম-স্পেসিফিকেশনে কাজ করতে সাহায্য করি।
দারুণ। তাহলে আপনি Exercism-এর একেবারে শুরুর দিকেই যুক্ত হয়েছেন। যাঁরা জানেন না, তাঁদের জন্য বলুন তো, Exercism মেইনটেইনার হওয়ার অর্থ কী?
নিশ্চয়ই। বিমূর্তভাবে বললে, একজন Exercism মেইনটেইনার একটি ট্র্যাকের "স্বাস্থ্যের" জন্য দায়ী। বাস্তবে এর অর্থ হতে পারে অনেক কিছু, যেমন নতুন অনুশীলনী তৈরি করা, চলমান অনুশীলনী হালনাগাদ করা, বা অন্য মেইনটেইনারদের পাঠানো পুল রিকোয়েস্ট পর্যালোচনা করা। আরেকটি গুরুত্বপূর্ণ দিক হলো ট্র্যাকের অনুশীলনীগুলো সঠিক ক্রমে সাজানো, যাতে শিক্ষার্থীরা সেরা সম্ভাব্য শেখার অভিজ্ঞতা পায়। খেয়াল রাখবেন, মেইনটেইনার হওয়ার অর্থ এই নয় যে উপরের সব কাজেই তাঁকে যুক্ত থাকতে হবে; একজন মেইনটেইনারের কেবল এক বা দুটি কাজে মন দেওয়াও সম্পূর্ণ বৈধ।
ধন্যবাদ! তাহলে C#, F# ও Scala-তে মনোযোগ দেওয়ার পাশাপাশি আপনি প্রায় Exercism-এর প্রতিটি ভাষার ট্র্যাকই করেছেন। একজন শিক্ষার্থীর দৃষ্টিকোণ থেকে আপনার বিশেষ প্রিয় কোনো ট্র্যাক আছে কি?
আমি যে ট্র্যাকগুলোর মধ্য দিয়ে গিয়েছি, তার প্রতিটি থেকেই প্রচুর শিখেছি, তবুও আমার প্রিয় ট্র্যাক নিশ্চিতভাবে Haskell ট্র্যাক। এটি শুধু অনেক মজার ধারণাসমৃদ্ধ দুর্দান্ত একটি ভাষাই নয়, এর মেন্টরদের মান ছিল সত্যিই অসাধারণ। আমার আরও প্রিয় হলো Kotlin ও F# ট্র্যাক, কারণ Kotlin ও F# অত্যন্ত সুপরিকল্পিত ও প্রায়োগিক ভাষা, যেগুলোতে প্রোগ্রামিং করতে আমি ভালোবাসি।
হ্যাঁ, Haskell-এর মেন্টরদের নিয়ে অনেক প্রশংসাই শুনি! এতগুলো ট্র্যাক করার মধ্য দিয়ে নিশ্চয়ই কোডিং নিয়ে প্রচুর মজার অন্তর্দৃষ্টি পেয়েছেন। ওই অভিজ্ঞতা থেকে আলাদা করে শেখার মতো কিছু ছিল কি?
ও হ্যাঁ, অনেক কিছু! নানা রকম ভাষা নিয়ে কাজ করলে সমস্যার কাছে যাওয়ার অনেক আলাদা আলাদা পদ্ধতির সঙ্গে পরিচয় হয়। এই ভিন্ন পদ্ধতিগুলো কোনো না কোনোভাবে আমার কোডিং স্টাইলকে প্রভাবিত করেছে, যদিও সম্ভবত ফাংশনাল ভাষাগুলোই আমাকে সবচেয়ে বেশি প্রভাবিত করেছে। এখন আমি যেখানে পারি ফাংশনাল ধারণা ব্যবহার করি, এমনকি নন-ফাংশনাল ভাষাতেও (যেগুলো ধীরে ধীরে ফাংশনাল বৈশিষ্ট্য গ্রহণ করছে)।
আমি এটাও শিখেছি যে প্রতিটি ভাষাই আলাদা হলেও অনেকগুলো আসলে বেশ মিলে যায়। ফলে দুটো-তিনটে ভাষা জানলে নতুন ভাষা শেখা অনেক সহজ হয়ে যায়। উদাহরণস্বরূপ, Haskell জানা থাকলে কেউ সম্ভবত তুলনামূলক দ্রুত F# বা Scala শিখে ফেলতে পারে। তাই নতুন ভাষা শেখা কর্মজীবনের জন্যও ভালো পদক্ষেপ হতে পারে, কারণ তাহলে আপনি সহজেই ভাষা বদলাতে পারবেন।
সবশেষে, আমি শিখেছি যে কোনো ভাষা শেখার সময় মেন্টরদের পথ দেখানো থাকলে সেই প্রক্রিয়া অনেক বেশি আনন্দদায়ক ও কার্যকর হয়।
আমিও একই জিনিস দেখেছি। অন্যের কাছ থেকে শেখা সত্যিই দারুণ একটি ব্যাপার! বাস্তবিক দিক থেকে দেখলে, বিভিন্ন ভাষার সব রকম সেটআপ আপনি কীভাবে সামলাতেন? নতুন একটি IDE শেখার কথা ভাবলেই আমার বেশ ভয় লাগে। ভাষাগুলো নিয়ে কাজ করার সময় আপনি চেনা কোনো এডিটরেই লেগে থাকতেন, নাকি আরও আইডিওম্যাটিক অভিজ্ঞতা পাওয়ার জন্য সেটি বদলাতেন?
কিছু ভাষার ক্ষেত্রে নতুন ডেভেলপমেন্ট এনভায়রনমেন্ট সেটআপ করা আগে বেশ ঝামেলার কাজ ছিল, কিন্তু আজকাল বেশিরভাগ ভাষাই সহজেই সেটআপ করা যায়। তারপর আমি ওই নির্দিষ্ট ভাষার জন্য সবচেয়ে ভালো অভিজ্ঞতা দেয় এমন একটি IDE খুঁজি। যেহেতু আমি পালাক্রমে Windows আর Mac OS-এ কাজ করি, তাই IDE-টিও ক্রস-প্ল্যাটফর্ম হওয়া উচিত। দুর্দান্ত ক্রস-প্ল্যাটফর্ম IDE-এর একটি উদাহরণ হলো Visual Studio Code, যা আমি Haskell, JavaScript, TypeScript, Elm এবং Elixir ট্র্যাকে ব্যবহার করি। বাকি ট্র্যাকগুলোর জন্য আমি একটি JetBrains IDE ব্যবহার করি: Rider দিয়ে C# ও F#, IntelliJ IDEA দিয়ে Java, Scala ও Kotlin, এবং সবশেষে RubyMine দিয়ে Ruby (লক্ষণীয়: এগুলোও ক্রস-প্ল্যাটফর্ম IDE)। দেখতেই পাচ্ছেন, প্রতিটি ভাষার জন্য সেরা অভিজ্ঞতা পেতে আমি একাধিক এডিটর ব্যবহার করি (যদিও Jetbrains IDE-গুলো স্পষ্টতই বেশ একই রকম)।
প্রো টিপ: আপনি যদি কোনো ওপেন-সোর্স প্রজেক্টের কোর কনট্রিবিউটর হন, তাহলে Jetbrains আপনাকে একটি বিনামূল্যের ওপেন-সোর্স লাইসেন্সের জন্য আবেদন করার সুযোগ দেয়!
এটা দারুণ কাজের। ধন্যবাদ! তাহলে, আপনি C#, F# ও Scala-এর মেইনটেইনার। এই ভাষাগুলোর প্রতি আপনাকে বিশেষভাবে কী টানে?
C# ২০০২ সালে প্রকাশিত হওয়ার সঙ্গে সঙ্গেই আমার প্রিয় ভাষা হয়ে যায়। এটি সুপরিকল্পিত, মার্জিত একটি ভাষা, যার টুলিং ও ডকুমেন্টেশন দুর্দান্ত। ভাষাটি বেশ দ্রুত বিকশিতও হয়, অর্থাৎ শেখার মতো নতুন জিনিস সবসময়ই থাকে! শেষ একটি বাড়তি সুবিধা হলো এটি দুর্দান্ত .NET (Core) ফ্রেমওয়ার্কে চলে।
F#-ও প্রথম দেখাতেই ভালো লেগে যায়। মার্জিত সিনট্যাক্স আর (ফাংশনাল) ভাষা-বৈশিষ্ট্যের সমৃদ্ধ ভান্ডার নিয়ে আমি দেখলাম, কম কোডে বেশি কাজ করতে পারি, বিশেষত ডোমেইন মডেলিং করার সময়। এটি অত্যন্ত প্রায়োগিক ভাষাও, যাতে আছে অবজেক্ট-ওরিয়েন্টেড বৈশিষ্ট্য এবং বিদ্যমান .NET কোডের সঙ্গে দুর্দান্ত ইন্টারঅপ (এটি C# যে একই .NET (Core) ফ্রেমওয়ার্কে চলে, সেটিতেই চলে)। আরেকটি শক্তি হলো এর টুলিং, যা ফাংশনাল ভাষাগুলোর মধ্যে সেরাদের একটি। বোনাস হিসেবে, fsharpforfunandprofit ওয়েবসাইটে এর যে ভাষা-পরিচিতি দেওয়া আছে, সেটি আমার এখন পর্যন্ত দেখা সবচেয়ে প্রিয় ভাষা-পরিচিতিগুলোর একটি।
Scala-ই সেই ভাষা যা আমাকে ফাংশনাল প্রোগ্রামিংয়ের সঙ্গে পরিচয় করিয়ে দেয়, তাই একারণেই এর জায়গা আমার হৃদয়ে বিশেষ। F#-এর মতো এটিও প্রায়োগিক ভাষা, প্রায় একই কারণে। Java-র ইকোসিস্টেমের সঙ্গে এর সংযোগ ফাংশনাল প্রোগ্রামিংকে সত্যিই জনপ্রিয় করে তুলতে সাহায্য করেছে।
মজার ব্যাপার হলো, আপনি Scala দিয়ে ফাংশনাল প্রোগ্রামিং শুরু করেছিলেন, F#-এর মেন্টর, অথচ Haskell-কেই সেরা ট্র্যাক বলছেন। কেউ যদি Exercism-এ ফাংশনাল প্রোগ্রামিংয়ে ঝাঁপ দিতে চান, তাহলে তাঁকে প্রথমে কোনটি চেষ্টা করার পরামর্শ দেবেন?
দারুণ প্রশ্ন! আমার ভোট F#-এর পক্ষে, কারণ আমার মনে হয় এটি শেখা সবচেয়ে সহজ। এর প্রধান কারণ, F# ভাষাটি বাকি দুটোর চেয়ে কম জটিল। শুরুর জন্য F#-এর দুর্দান্ত টুলিং ও ডকুমেন্টেশনও বড় সুবিধা। তবুও, F# ট্র্যাক শেষ করে Haskell ট্র্যাকেও যুক্ত হওয়ার জোর পরামর্শ দেব, কারণ Haskell-এ এমন কিছু চমৎকার, উন্নত বৈশিষ্ট্য আছে যা F#-এ নেই।
Exercism-এর ভবিষ্যৎ নিয়ে আমাদের অনেক পরিকল্পনার খুঁটিনাটি আপনি জানেন। প্রজেক্টটির ব্যাপারে বিশেষ করে কোনো কিছু নিয়ে আপনি উৎসাহিত?
পরিকল্পিত সব উন্নতির মধ্যে আমি সবচেয়ে বেশি উৎসাহিত সলিউশনের স্ট্যাটিক অ্যানালাইসিস নিয়ে। ভাবনাটি হলো, আমরা এমন একটি সিস্টেম দাঁড় করাব যা জমা দেওয়া সলিউশনগুলোকে প্রোগ্রামভিত্তিকভাবে কমন সমস্যা/পরামর্শের জন্য বিশ্লেষণ করে স্বয়ংক্রিয়ভাবে মন্তব্য করতে পারবে। এতে মেন্টরদের অনেক সুবিধা হবে, কারণ তখন আর তাঁদের এই কমন সমস্যা/পরামর্শগুলো নিয়ে মন্তব্য করতে হবে না এবং তাঁরা আরও মজার সমস্যায় মন দিতে পারবেন।
আগ্রহী হলে আমার (প্রাথমিক) একটি প্রোটোটাইপ দেখুন: C# ট্র্যাক অ্যানালাইজার, যা .NET Compiler Platform ব্যবহার করে C# কোড স্ট্যাটিকভাবে বিশ্লেষণ করে।
হ্যাঁ, স্ট্যাটিক অ্যানালাইসিস আমার কাছেও প্রায় সবচেয়ে রোমাঞ্চকর ব্যাপার। আপনার একটা প্রোটোটাইপ আগেই তৈরি হয়ে গেছে দেখে দারুণ লাগছে। আমার মনে হয়, স্ট্যাটিক অ্যানালাইসিস যে গতি-উন্নতি দেবে তা Exercism-কে নাটকীয়ভাবে উন্নত করবে, এবং একেবারে নতুনদের কোড শেখাতে আমরা কীভাবে এটিকে কাজে লাগাতে পারব, তা নিয়ে আমি সত্যিই উত্তেজিত। আমার মনে হয় এটি সত্যিই খেলার মোড় ঘুরিয়ে দেওয়ার মতো কিছু।
শেষ প্রশ্ন, আপনার হৃদয়ের কাছের এমন কোনো ব্যক্তিগত প্রজেক্ট বা উদ্যোগ আছে কি, যার কথা আপনি বলতে চান?
আমার কাছে Exercism-এ যুক্ত হওয়া, এর ওপেন-সোর্স কোডবেসে অবদান রাখা আর মানুষকে মেন্টরিং করা এক অবিশ্বাস্য পুরস্কারদায়ক অভিজ্ঞতা। আমি প্রচুর জিনিস শিখেছি, বেশ কিছু দুর্দান্ত মানুষের সঙ্গে পরিচিত হয়েছি, এবং মনে হয় অনেক মানুষকে সাহায্য করতে পেরেছি।
আমি মানুষকে উৎসাহ দিতে চাই, তাঁরাও যুক্ত হতে পারেন কি না দেখুন। আপনি যদি এমন কোনো ভাষা ভালোবাসেন এবং মানুষকে তা শিখতে সাহায্য করতে চান, তাহলে Exercism-এ মেন্টর হিসেবে নাম লিখুন। কোড লিখতে বেশি ভালো লাগলে একটি ওপেন-সোর্স প্রজেক্ট বেছে নিয়ে অবদান রাখুন। কথা দিচ্ছি, শুনতে যতটা ভয়ংকর লাগে বাস্তবে তা অনেক কম, আর করতে গিয়ে আপনার খুব ভালো লাগবে!
দারুণ! আলোচনার জন্য সময় দেওয়ার এবং Exercism-এ আপনার সব কাজের জন্য ধন্যবাদ!