Skip to content

রিমোট জব প্রিপারেশন — পর্ব ৯: কোডিং রাউন্ড

সিনিয়র লেভেলে DSA-র আসল ওজন কতটা, কোন প্যাটার্নগুলো যথেষ্ট, বাস্তব-কোডবেস রাউন্ডে কীভাবে আলাদা হবে, জোরে চিন্তা করার অভ্যাস, আর আটকে গেলে ঠিক কী করতে হয়।

সিনিয়র লেভেলে DSA-র আসল ওজন কতটা, কোন প্যাটার্নগুলো যথেষ্ট, বাস্তব-কোডবেস রাউন্ডে কীভাবে আলাদা হবে, জোরে চিন্তা করার অভ্যাস, আর আটকে গেলে ঠিক কী করতে হয়।


দুইজন ক্যান্ডিডেট, একই সমস্যা

মারিয়াম আল-আস্তুরলাবি আর আল-রাজি — দুজনেই একই লাইভ কোডিং রাউন্ডে বসেছে। সমস্যাটা মাঝারি কঠিন: একটা ইভেন্ট স্ট্রিম থেকে প্রতি ইউজারের সাম্প্রতিকতম কার্যকলাপ বের করা, মেমরির সীমা আছে।

আল-রাজি প্রশ্ন শোনার সাথে সাথে কোড লিখতে শুরু করল। আট মিনিটে একটা কাজ করা সমাধান দাঁড় করাল, নিখুঁত সিনট্যাক্স, ভালো জটিলতা। তারপর চুপ করে বসে রইল।

মারিয়াম প্রথম তিন মিনিট একটাও লাইন লেখেনি। সে জিজ্ঞেস করল — স্ট্রিমটা কি সময়ানুক্রমে সাজানো আসে? ইউজারের সংখ্যা কি স্মৃতিতে ধরবে, নাকি সেটাই সীমা? “সাম্প্রতিকতম” মানে কি ইভেন্টের টাইমস্ট্যাম্প, নাকি আসার ক্রম — দুটো আলাদা হলে কোনটা? তারপর সে বলল, “আমি ধরে নিচ্ছি ইউজার সংখ্যা ধরবে কিন্তু ইভেন্ট ধরবে না — সেই ধরে নিয়ে এগোই, শেষে না ধরলে কী করতাম সেটাও বলব।” তারপর কোড লিখল, দশ মিনিটে, একটা এজ কেস মিস করল, নিজেই টেস্ট চালিয়ে ধরল, ঠিক করল।

মারিয়াম পাশ করল, আল-রাজি করল না।

কারণটা কোডে না। সিনিয়র কোডিং রাউন্ডে ইন্টারভিউয়ার একটা জিনিস দেখছে: তুমি কি অস্পষ্ট সমস্যাকে নিরাপদ সমস্যায় রূপান্তর করতে পারো? কারণ চাকরিতে তোমাকে যা দেওয়া হবে সেটা LeetCode-এর মতো পরিষ্কার করে লেখা থাকবে না।


১. তিন ধরনের রাউন্ড, তিন রকম প্রস্তুতি

ধরনকী দেওয়া হয়কারা নেয়কী মাপা হয়
অ্যালগরিদমএকটা DSA সমস্যা, ৪৫ মিনিটবড় কোম্পানি, স্ট্যান্ডার্ড লুপসমস্যা সমাধানের কাঠামো
বাস্তব কাজের সিমুলেশনছোট কোডবেস, একটা ফিচার বা বাগস্টার্টআপ ও প্রোডাক্ট কোম্পানিতুমি সত্যিই কীভাবে কাজ করো
পেয়ারিং / ডিবাগিংভাঙা কোড, বা একসাথে বানানোছোট ও মাঝারি টিম, রিমোট-প্রথমসহযোগিতা ও যোগাযোগ

রিমোট রোলে, বিশেষত ইউরোপ ও উপসাগরীয় বাজারের মাঝারি কোম্পানিতে, দ্বিতীয় আর তৃতীয়টা বেশি সাধারণ — কারণ সেগুলো আসল কাজের কাছাকাছি। বিশুদ্ধ অ্যালগরিদম রাউন্ড বড় টেক কোম্পানিতে বেশি।

এটা তোমার জন্য ভালো খবর: দ্বিতীয় আর তৃতীয় ধরনে তোমার ছয় বছরের বাস্তব অভিজ্ঞতা সরাসরি কাজে লাগে, যেখানে অ্যালগরিদম রাউন্ডে সদ্য পাশ করা প্রার্থীর সুবিধা বেশি।


২. সিনিয়রে DSA কতটা লাগে — সৎ উত্তর

অনেকে ছয় মাস LeetCode করে, তারপরও বাদ পড়ে (পর্ব ১: ভুল ধাপের প্রস্তুতি)। আবার কেউ কেউ একদম প্রস্তুতি না নিয়ে গিয়ে সহজ প্রশ্নেও হোঁচট খায়। দুটোই খরচের দিক থেকে খারাপ।

কাজের নিয়মটা এই: যথেষ্ট অনুশীলন করো যাতে মাঝারি সমস্যায় আটকে না যাও, তারপর থামো এবং বাকি সময় সিস্টেম ডিজাইন ও গল্পে দাও।

যে ২০টা প্যাটার্ন বেশিরভাগ ইন্টারভিউ কভার করে:

  • হ্যাশ ম্যাপ দিয়ে গণনা ও গ্রুপিং
  • টু পয়েন্টার, স্লাইডিং উইন্ডো
  • বাইনারি সার্চ (আর “উত্তরের উপর বাইনারি সার্চ”)
  • স্ট্যাক (ব্যালান্সিং, মনোটোনিক স্ট্যাক)
  • হিপ / প্রায়োরিটি কিউ — top-k, মার্জ
  • BFS আর DFS, গ্রিড ও গ্রাফে
  • টপোলজিক্যাল সর্ট
  • ইউনিয়ন-ফাইন্ড
  • ইন্টারভাল (সাজানো, মার্জ করা, ওভারল্যাপ)
  • প্রিফিক্স সাম
  • বেসিক ডায়নামিক প্রোগ্রামিং (১-ডি আর ২-ডি, মেমোাইজেশনসহ)
  • ট্রি ট্রাভার্সাল ও রিকার্শন
  • স্ট্রিং প্রসেসিং, পার্সিং
  • স্ট্রিম প্রসেসিং ও সীমিত মেমরির সমস্যা

শেষেরটা বিশেষভাবে গুরুত্বপূর্ণ সিনিয়র রাউন্ডে, কারণ এটাই বাস্তব কাজের সবচেয়ে কাছাকাছি।

প্যাটার্ন ধরে অনুশীলন করো, সংখ্যা ধরে না। “৩০০টা সমস্যা” কোনো লক্ষ্য না। বরং প্রতিটা প্যাটার্নে ৩–৫টা সমস্যা করো, আর প্রতিটার পরে লিখে রাখো: কোন সংকেতটা দেখে বুঝলাম এই প্যাটার্ন লাগবে? ওই সংকেত-চেনাটাই আসল দক্ষতা, মুখস্থ সমাধান না।


৩. রাউন্ডের কাঠামো — যেভাবে সময় ভাগ করবে

৪৫ মিনিটের একটা রাউন্ডে:

  • ০–৫ মিনিট: প্রশ্ন স্পষ্ট করা। ইনপুটের আকার, এজ কেস, “সঠিক” মানে কী, কী ধরে নেওয়া যাবে। অন্তত তিনটা প্রশ্ন করো। এটাই সবচেয়ে বেশি নম্বর দেয়, আর সবচেয়ে বেশি বাদ পড়ে।
  • ৫–১০ মিনিট: একটা উদাহরণ হাতে চালানো। ছোট একটা ইনপুট নিয়ে হাতে সমাধান করো — এতে ভুল বোঝাবুঝি এখানেই ধরা পড়ে, কোড লেখার পরে না।
  • ১০–১৫ মিনিট: পদ্ধতি বলা, কোড লেখার আগে। “সরল সমাধানটা O(n²), সেটা এই কারণে খারাপ; আমি হ্যাশ ম্যাপ দিয়ে O(n)-এ নামাচ্ছি, বিনিময়ে O(n) মেমরি।” ইন্টারভিউয়ার এখানে বাধা দিলে সেটা উপহার — সে তোমাকে সঠিক পথে ঠেলছে।
  • ১৫–৩৫ মিনিট: কোড। নাম দাও পরিষ্কার, ছোট ফাংশনে ভাগ করো, বলতে বলতে লেখো।
  • ৩৫–৪২ মিনিট: নিজে টেস্ট করো। স্বাভাবিক কেস, খালি ইনপুট, একটা এলিমেন্ট, ডুপ্লিকেট, খুব বড় ইনপুট। ইন্টারভিউয়ার বাগ ধরার আগে তুমি ধরলে সেটা প্লাস, মাইনাস না।
  • ৪২–৪৫ মিনিট: জটিলতা আর উন্নতির সুযোগ। সময় ও মেমরি, আর “প্রোডাকশনে হলে আমি আরও কী যোগ করতাম”।

শেষ বাক্যটা সিনিয়রদের আলাদা করে দেয়: লগিং, মেট্রিক, ইনপুট ভ্যালিডেশন, ব্যর্থতার আচরণ — এগুলো তুমি লিখবে না, কিন্তু উল্লেখ করলে বোঝা যায় তুমি প্রোডাকশন কোড আর ইন্টারভিউ কোডের পার্থক্য জানো।


৪. জোরে চিন্তা করা — আলাদা করে অনুশীলন লাগে

ইন্টারভিউয়ার তোমার মাথার ভেতর দেখতে পায় না। তুমি চুপচাপ পাঁচ মিনিট ভেবে নিখুঁত সমাধান লিখলেও তার কাছে সেটা “কীভাবে পৌঁছাল জানি না” — আর সে তোমাকে পাশ করাতে পারে না, কারণ তার কাছে প্রমাণ নেই।

কিন্তু জোরে চিন্তা করা কঠিন, আর ইংরেজিতে জোরে চিন্তা করা দ্বিগুণ কঠিন (পর্ব ৭)। এটা আলাদা দক্ষতা, আলাদা অনুশীলন লাগে।

কী বলবে, বাস্তবে:

  • প্রশ্ন করার সময়: “I want to check one thing before I start —”
  • পদ্ধতি বলার সময়: “Two options here. A hash map gives me O(n) but uses extra memory; sorting is O(n log n) with no extra space. Given the input size you mentioned, I’ll take the hash map.”
  • কোড লেখার সময়: “I’m keeping this in a helper so the main loop stays readable.”
  • ভুল ধরলে: “Wait — this breaks if the list is empty. Let me handle that first.”
  • থামার সময়: “Let me think for a few seconds.” — তারপর সত্যিই চুপ থাকো। ভরাট শব্দের চেয়ে নীরবতা ভালো।

দিনে একটা সমস্যা, উচ্চস্বরে ইংরেজিতে, রেকর্ড করে — এক মাসে যা বদলায়, তিনশো সমস্যা চুপচাপ সমাধান করে তা হয় না।


৫. আটকে গেলে

আটকে যাওয়া ব্যর্থতা না — সব ক্যান্ডিডেট আটকায়। যেভাবে আটকাও, সেটাই মাপা হয়।

করবে:

  • সমস্যাটা ছোট করো: “পূর্ণ সমাধান পাচ্ছি না; আগে O(n²) দিয়ে সঠিকটা লিখি, তারপর অপ্টিমাইজ করি।” কাজ করা ধীর সমাধান শূন্যের চেয়ে অনেক ভালো।
  • জোরে ভাবো: “আমি হ্যাশ ম্যাপ নিয়ে ভাবছি কিন্তু কী দিয়ে কী-ইং করব বুঝছি না, কারণ…”
  • হিন্ট চাও, নির্দিষ্ট করে: “Am I on the right track with the sliding window, or is there a structural idea I’m missing?” — এভাবে হিন্ট চাইলে নম্বর কাটে না; এটাই বাস্তব কাজের আচরণ।
  • একটা ছোট উদাহরণ আবার হাতে চালাও — অর্ধেক ক্ষেত্রে সমাধান ওখানেই বেরোয়।

করবে না:

  • চুপচাপ বসে থাকা।
  • এলোমেলো কোড লেখা “কিছু একটা কাজ করে কি না” দেখার জন্য।
  • এমন ভান করা যে তুমি জানো — অভিজ্ঞ ইন্টারভিউয়ার এটা সাথে সাথে ধরে।

৬. বাস্তব-কোডবেস রাউন্ড — এখানেই তোমার সুযোগ

তোমাকে একটা ছোট রিপো দেওয়া হবে, আর একটা কাজ: একটা ফিচার যোগ করো, বা একটা বাগ ঠিক করো। এখানে সিনিয়র আর জুনিয়রের পার্থক্য বিশাল, আর পার্থক্যটা কোড লেখার গতিতে না।

যা দেখা হয়:

  • আগে পড়ো, পরে লেখো। প্রথম দশ মিনিট কোডবেস ঘুরে দেখা — কোথায় কী আছে, কনভেনশন কী, টেস্ট কীভাবে চলে। যে সরাসরি টাইপ করা শুরু করে, সে জুনিয়র।
  • বিদ্যমান ছন্দ অনুসরণ করা। নিজের প্রিয় প্যাটার্ন চাপিয়ে দেওয়ার চেয়ে কোডবেসের ধরনে লেখা ভালো।
  • একটা টেস্ট। ছোট হলেও — এটা সবচেয়ে সস্তা সিনিয়রিটির সংকেত।
  • স্কোপ নিয়ন্ত্রণ। পাশের নোংরা কোড দেখে রিফ্যাক্টর শুরু করে দিয়ো না। বরং বলো: “এটা আমি ছুঁইনি, কিন্তু এখানে সমস্যা আছে — আলাদা PR-এ করতাম।”
  • কমিটের বার্তা ও ব্যাখ্যা। কেন এভাবে করলে, দুই লাইনে।

এই রাউন্ডে সবচেয়ে ভালো উত্তরটা প্রায়ই সবচেয়ে কম কোড। ইন্টারভিউয়ার দেখতে চায় তুমি সমস্যাটা বুঝে সবচেয়ে ছোট নিরাপদ পরিবর্তনটা করেছ — কারণ ছয় মাস পরে তার কোডবেসে তুমি ঠিক এটাই করবে।


৭. রিমোট-নির্দিষ্ট ব্যবহারিক দিক

কলটা তোমার ঘর থেকে হচ্ছে, ছয় ঘণ্টা দূরের কারও সাথে। কিছু জিনিস আগেই ঠিক করে রাখো:

  • ইন্টারনেট ও ব্যাকআপ — মোবাইল হটস্পট প্রস্তুত রাখো, আর শুরুতেই বলে রাখো: “If I drop, I’ll rejoin within a minute.” বিদ্যুতের ব্যাকআপও ধরো।
  • এডিটর — ওরা যদি নিজেদের অনলাইন এডিটর দেয়, আগে একবার সেটা খুলে দেখে নাও; অটোকমপ্লিট না থাকায় অনেকে হোঁচট খায়।
  • স্ক্রিন শেয়ার — নোটিফিকেশন বন্ধ, ব্রাউজারে ব্যক্তিগত ট্যাব বন্ধ।
  • সময় — কলের সময়টা নিজের টাইমজোনে দুইবার যাচাই করো (দিবালোক সংরক্ষণের কারণে ইউরোপ ও US-এ বছরে দুইবার এক ঘণ্টা সরে যায়)।
  • রাতের কল হলে — সম্ভব হলে এড়াও। US-এর রাত ১১টার ইন্টারভিউতে তোমার সেরাটা আসবে না; বিকল্প সময় চাওয়া সম্পূর্ণ গ্রহণযোগ্য।

৮. অনুশীলনের রুটিন

আট সপ্তাহ, দিনে ৪৫ মিনিট — এটাই বেশিরভাগ সিনিয়রের জন্য যথেষ্ট:

সপ্তাহকাজ
১–২মৌলিক প্যাটার্ন (হ্যাশ ম্যাপ, দুই পয়েন্টার, বাইনারি সার্চ, স্ট্যাক) — সহজ সমস্যা, কিন্তু জোরে বলে
৩–৪গ্রাফ, ট্রি, হিপ — মাঝারি সমস্যা
৫–৬DP-র মৌলিক, ইন্টারভাল, স্ট্রিম/সীমিত মেমরি
সময় ধরে মক — ৪৫ মিনিটের ঘড়ি, ইংরেজিতে, রেকর্ড করে
নিজের ভাষায় একটা ছোট কোডবেসে ফিচার/বাগের অনুশীলন

তারপর থামো। এর বেশি অনুশীলনের প্রান্তিক লাভ কমে যায়, আর ওই সময়টা সিস্টেম ডিজাইন (পর্ব ১০) ও স্টোরি ব্যাংকে (পর্ব ১২) দিলে অনেক বেশি ফল দেয়।


এই সপ্তাহের কাজ

  • উপরের প্যাটার্ন তালিকা থেকে নিজের দুর্বল পাঁচটা চিহ্নিত করো, বাকিগুলো নিয়ে সময় নষ্ট কোরো না।
  • দিনে একটা সমস্যা, উচ্চস্বরে ইংরেজিতে, রেকর্ড করে — সপ্তাহ শেষে প্রথম আর শেষটা শুনে তুলনা করো।
  • একটা ৪৫ মিনিটের মক করো ঘড়ি ধরে, বাধা ছাড়া।
  • ওই পাঁচটা “আটকে গেলে কী বলব” বাক্য মুখস্থ করো — চাপের মুহূর্তে বানানো যায় না।

পরের পর্ব — সিস্টেম ডিজাইন: সিনিয়র লেভেলের সবচেয়ে ওজনদার রাউন্ড। রিকোয়ারমেন্ট সংকুচিত করা, সংখ্যা দিয়ে হিসাব, ট্রেড-অফের ভাষা, আর ব্যর্থতা ও অপারেশনের যে অংশে বেশিরভাগ ক্যান্ডিডেট চুপ হয়ে যায়।