দশটি কোডিং ইন্টারভিউ সমস্যা

সফটওয়্যার ইঞ্জিনিয়ার হিসেবে চাকরি পাওয়ার জন্য সবচেয়ে গুরুত্বপূর্ণ ধাপ হচ্ছে কোডিং ইন্টারভিউ। এই ব্লগে ইতিমধ্যে অনেকগুলো কোডিং ইন্টারভিউ সমস্যা নিয়ে আলোচনা করা হয়েছে। এরকম দশটি কোডিং ইন্টারভিউ সমস্যা নিয়ে আলোচনার লিঙ্কঃ

  1. pow(a, n) – একটি ফাংশন তৈরি করতে হবে, যেখানে দুটি ইন্টিজার (a, n) ইনপুট দেওয়া থাকলে ফাংশনটি a^n রিটার্ন করবে। ফাংশনটির রানটাইম হতে হবে O(log n)।
  2. BST – একটি ফাংশন তৈরি করতে হবে, যেখানে একটি বাইনারি ট্রি ইনপুট দেওয়া হলে সেটি বাইনারি সার্চ ট্রি (BST) কী না, তা বের করতে হবে।
  3. Stack and Queue –  স্ট্যাক (Stack) ব্যবহার করে কিউ (Queue) তৈরি করতে হবে, অর্থাৎ কিউ এর এনকিউ (enqueue) ও ডিকিউ (dequeue) ফাংশন তৈরি করতে হবে।
  4. Triangle – একটি ইন্টিজার অ্যারে দেওয়া আছে, যার সবগুলো সংখ্যাই ধনাত্মক। ওই অ্যারে থেকে তিনটি করে উপাদান নিয়ে মোট কয়টি ত্রিভুজ বানানো যায়, সেটি গণনা করতে হবে।
  5. Difference – একটি ইন্টিজার অ্যারে দেওয়া আছে যার উপাদানগুলো ছোট থেকে বড় ক্রমে সাজানো। এখন একটি অঋণাত্মক সংখ্যা দেওয়া হলে, বলতে হবে যে, অ্যারের যেকোনো দুটি পৃথক সংখ্যার অন্তরফল ওই সংখ্যাটির সমান কী না। 
  6. 3 Sum – একটি পূর্ণসংখ্যার অ্যারেতে তিনটি করে সংখ্যা নিলে কতগুলো পৃথক ত্রয়ী পাওয়া যায়, যাদের যোগফল শূন্য (0) হবে?
  7. Substring – দুটি স্ট্রিং দেওয়া আছে – A ও s. একটি ফাংশন লিখতে হবে, যার কাজ হচ্ছে, s যদি A-এর সাবস্ট্রিং হয়, তাহলে A-এর যেই ইনডেক্স থেকে s শুরু হয়েছে, সেই ইনডেক্স রিটার্ন করতে হবে।
  8. Bit difference – একটা অ্যারেতে কতগুলো অঋণাত্মক সংখ্যা আছে। ওই সংখ্যাগুলোর মাঝে যতগুলো জোড়া (pair) আছে, তাদের মধ্যে বিটের পার্থক্যের যোগফল বের করতে হবে।
  9. Running Median – একটি অ্যারেতে বা লিস্টে শুরুতে কোনো সংখ্যা নেই। অ্যারেতে ক্রমান্বয়ে n সংখ্যক সংখ্যা যুক্ত হবে, আর প্রতিটি সংখ্যা যুক্ত হওয়ার পরে ওই অ্যারের বর্তমান সংখ্যাগুলোর মিডিয়ান বের করতে হবে।
  10. Linked List – লিঙ্কড লিস্টের শুরুর নোড (হেড নোড) দেওয়া থাকবে, আর একটা সংখ্যা দেওয়া থাকবে, ওই সংখ্যার মান যত, লিঙ্কড লিস্টের শেষ থেকে ততঘর বা ততটি নোড আগে এসে যেই নোড পাওয়া যায়, তার মান রিটার্ন করতে হবে।

এরকম 71টি প্রোগ্রামিং সমস্যা ও তাদের সমাধান নিয়ে আলোচনা করা হয়েছে “কোডিং ইন্টারভিউ – প্রস্তুতি, সমস্যা ও সমাধান” বইতে।

বইয়ের লিঙ্ক – http://dimik.pub/book/475/coding-interview-preparation-problem-solution-by-tamim-shahriar-subeen

অ্যারে থেকে ডুপ্লিকেট বাদ দেওয়া – প্রোগ্রামিং ইন্টারভিউ সমস্যা ১৬

সমস্যা – একটি অ্যারে দেওয়া থাকবে যার প্রতিটি উপাদান একটি ইন্টিজার এবং অ্যারের সংখ্যাগুলো ছোট থেকে বড় ক্রমে সাজানো আছে। ওই অ্যারেতে যেসব সংখ্যা একাধিকবার আছে, সেসব সংখ্যা একটি রেখে অতিরিক্তগুলো বাদ দিতে হবে। আর এজন্য অতিরিক্ত কোনো অ্যারে ব্যবহার করা যাবে না, অর্থাৎ ইনপুট অ্যারেতেই কাজ করতে হবে। যেমন, ইনপুট যদি হয় [1, 1, 1, 2, 3, 3], তাহলে ডুপ্লিকেট (duplicate)-গুলো বাদ দিলে অ্যারেটি হবে [1, 2, 3, …]. এক্ষেত্রে প্রথম তিনটি সংখ্যার পরে বাকিগুলো কী হবে, সেটি বিবেচনা করা হবে না। আর অ্যারেটি পরিবর্তন করার পরে অ্যারেতে মোট কয়টি উপাদান আছে সেটি রিটার্ন করতে হবে। অর্থাৎ এই ইনপুটের জন্য অ্যারেটি পরিবর্তন করার পরে 3 রিটার্ন করতে হবে।

সমাধান – সমস্যাটিতে যদি বলা হত অতিরিক্ত অ্যারে ব্যবহার করা যাবে, তাহলে আমরা কী করতাম? একটি নতুন অ্যারে তৈরি করে সেখানে সংখ্যাগুলো এমনভাবে রাখতাম যেন কোনো সংখ্যা একবারের বেশি না আসে।

পাইথন দিয়ে ইমপ্লিমেন্ট করতে চাইলে, প্রথমে একটি লিস্ট তৈরি করতে হবে। লিস্টের প্রথম উপাদানটি হবে ইনপুট লিস্টের প্রথম উপাদান। তারপর ইনপুট লিস্টের প্রতিটি সংখ্যা পরীক্ষা করে দেখতে হবে কোনো সংখ্যা তার আগের সংখ্যার সমান কী না। যদি সমান না হয়, তাহলে সেটি নতুন লিস্টে নেওয়া হবে, আর সমান হলে কিছু করা হবে না। নিচের কোড দেখলেই সহজে বুঝতে পারা যাবে –

def remove_duplicates(nums):
    unique_nums = []
    unique_nums.append(nums[0])
    
    n = len(nums)
    for i in range(1, n):
        if nums[i] != nums[i-1]:
            unique_nums.append(nums[i])

    return len(unique_nums)

প্রোগ্রামটি আরেকভাবে ইমপ্লিমেন্ট করা যায় –

def remove_duplicates(nums):
    unique_nums = list(set(nums))
    unique_nums.sort()
    return len(unique_nums)

এই ফাংশনটির কোড ছোট হলেও টাইম কমপ্লেক্সিটি বেশি। নতুন প্রোগ্রামাররা, বিশেষ করা যারা পাইথন দিয়ে কাজ করে, তারা অনেক সময় মনে করে যে, কোড কম লেখা মানে কোড বেশি ইফিশিয়েন্ট – এটি ভুল ধারণা। যাই হোক, আমাদের কিন্তু শর্ত ছিল যে, অতিরিক্ত মেমোরি ব্যবহার করা যাবে না। তাহলে কী করা যায়? প্রথম যেই ফাংশনটি লিখেছিলাম, সেটি আমরা এভাবেও লিখতে পারি –

def remove_duplicates(nums):
    n = len(nums)
    unique_nums = [0] * n
    unique_nums[0] = nums[0]
    current_index = 1
    for i in range(1, n):
        if nums[i] != nums[i-1]:
            unique_nums[current_index] = nums[i]
            current_index += 1

    return current_index

এই ফাংশনটি ভালোভাবে লক্ষ করলে বুঝে ফেলা উচিত যে, unique_nums ব্যবহার না করলেও চলে। বুঝতে না পারলে একটু চিন্তা করতে হবে, তাহলেই বুঝে ফেলা উচিত।

আর ইন্টারভিউতে কিন্তু স্পেশাল কেস ঠিকভাবে হ্যান্ডেল করতে হবে। যেমন, এই প্রোগ্রামে ইনপুট যদি ফাঁকা অ্যারে বা লিস্ট হয়, তখন প্রোগ্রামটা 0 রিটার্ন করার বদলে ক্র্যাশ করবে, এটি ঠিক করতে হবে।

আশা করি নিচের দুটি সমস্যা সমাধান করতে তেমন বেগ পেতে হবে না –

https://leetcode.com/problems/remove-duplicates-from-sorted-array/

https://leetcode.com/problems/remove-duplicates-from-sorted-array-ii/

ত্রিভুজ গণনা – প্রোগ্রামিং ইন্টারভিউ সমস্যা ৪

সমস্যাঃ একটি ইন্টিজার অ্যারে দেওয়া আছে, যার সবগুলো সংখ্যাই ধনাত্মক। ওই অ্যারে থেকে তিনটি করে উপাদান নিয়ে মোট কয়টি ত্রিভুজ বানানো যায়, সেটি গণনা করতে হবে।

সমাধানঃ সমস্যাটি নিয়ে চিন্তা করার শুরুতেই একটি বিষয় মাথায় চলে আসবে, “ত্রিভুজের যেকোনো দুই বাহুর সমষ্টি তৃতীয় বাহু অপেক্ষা বৃহত্তর।” এই বিষয়টি কাজে লাগিয়ে আমরা সমস্যাটির সমাধান করতে পারি। আমাদের মূল কোড হবে নিচের মতো –

count = 0
for i in range(0, n-2):
    for j in range(i+1, n-1):
        for k in range(j+1, n):
            if A[i] + A[j] > A[k]:
                count += 1

ইন্টারভিউতে অবশ্য একটি ফাংশন তৈরি করে তার ভেতরে মূল কোড লেখা উচিত, আমি সেটি আর দেখালাম না। এখন প্রশ্ন হচ্ছে, এই সমাধানের কমপ্লেক্সিটি কত? O(n^3)। এখন ইন্টারভিউয়ার জানতে চাইবেন, এর চেয়ে ভালোভাবে সমাধান করা সম্ভব কী না, এবং সম্ভব হলে চেষ্টা করতে।

ধরা যাক, মূল অ্যারেতে দেওয়া আছে 1, 1, 2, 3, 4। এখানে প্রতিবার তিনটি করে সংখ্যা নিলে আমরা পাই –

1, 1, 2
1, 1, 3
1, 1, 4
1, 2, 3
1, 2, 4
1, 3, 4
1, 2, 3
1, 2, 4
1, 3, 4
2, 3, 4

এগুলোর মধ্যে, কেবল 2, 3, 4 যখন একটি ত্রিভুজের বাহুর দৈর্ঘ্য হবে, তখন একটি ত্রিভুজ তৈরি করা যাবে। কারণ, 2 + 3  > 4। বাকীগুলোর জন্য a + b > c সত্য নয় (এখানে a, b, c হচ্ছে যথাক্রমে ত্রিভুজের প্রথম, দ্বিতীয় ও তৃতীয় বাহু)। আর সংখ্যাগুলো যেহেতু ছোট থেকে বড় ক্রমে সাজানো, তাই a + b > c পরীক্ষা করলেই হবে, b + c > a, c + a > b এগুলো পরীক্ষা করার দরকার নেই।

এখন প্রশ্ন হচ্ছে, আমাদেরকে যেই অ্যারে দেওয়া আছে, সেটিতো ছোট থেকে বড় ক্রমে সাজানো নেই। তাই প্রথমে আমরা সেটি সর্ট করে নেবো। এই কাজটি করার কমপ্লেক্সিটি হচ্ছে O(n log n), যা O(n^3)-এর চেয়ে অনেক ছোটো। তাহলে প্রথমে আমরা অ্যারেটি সর্ট করে নেবো।

ধরা যাক, অ্যারে A-তে আছে দশটি সংখ্যা – 10, 11, 12, 13, 14, 15, 16, 20, 21, 22। এখন, i-এর মান 0, j-এর মান 1 হলে, k-এর মান 2 থেকে 7 পর্যন্ত প্রতিটির জন্যই A[i] + A[j] > A[k] শর্তটি সত্য হবে, অর্থাৎ A[i], A[j], A[k] ত্রিভুজের তিনটি বাহু হিসেবে ব্যবহার করা যাবে। আর মোট ত্রিভুজ কয়টি হবে? 7 – 1 বা 6টি।

এখন, i-এর মান 0, j-এর মান 2 এর জন্য কিন্তু আর k-এর মান 2 থেকে পরীক্ষা করার দরকার নেই, কারণ k-এর মান 7 পর্যন্ত অবশ্যই A[i] + A[j] > A[k] সত্য হবে, কারণ A[0] + A[1] এর মান অবশ্যই A[0] + A[2] এর মানের  চেয়ে ছোট বা সমান। তাই আমরা k-এর মান আগের চেয়ে এক এক করে বাড়িয়ে পরীক্ষা করবো।

তাহলে, i-এর যেকোনো মানের জন্য, j-এর মান i+1 এবং k-এর মান i+2 থেকে আমরা লুপ শুরু করবো। আর j-এর মান যখন বাড়বে, তখন কিন্তু আবার k-এর মান i+2 থেকে শুরু করবো না, বরং আগে k-এর মান যা ছিল, সেখান থেকেই শুরু হবে।

count = 0
for i in range(n - 2):
    k = i + 2
    for j in range(i + 1, n - 1):
        while k < n and A[i] + A[j] > A[k]:
            k += 1
        count = count + k - j - 1

ওপরের কোড-এর কমপ্লেক্সিটি কত? যারা একটু কম চিন্তা করবে, তারা হুট করে বলে দিবে O(n^3), কারণ তিনটি নেস্টেড লুপ আছে। কিন্তু একটু ভালোভাবে লক্ষ করলে দেখা যাবে যে, j-এর লুপের জন্য ভেতরের লুপটি আর নতুন করে শুরু হচ্ছে না, k-এর আগের মান থেকেই শুরু হচ্ছে। না বুঝলে খাতা কলম নিয়ে বসতে হবে। তাই সবচেয়ে বাইরের লুপ (i-এর লুপ)-এর জন্য ভেতরে j ও k-এর লুপ প্রতিটি সর্বোচ্চ n সংখ্যকবার চলবে (মোট, n + n = 2n)। তাই কমপ্লেক্সিটি হচ্ছে, n * 2n, বা 2 * n^2, বা, O(n^2).

কেউ চাইলে নিচের যেকোনো একটি সমস্যা সমাধানের চেষ্টা করতে পারে

1) https://leetcode.com/problems/valid-triangle-number/

2) https://www.interviewbit.com/problems/counting-triangles

বাইনারি সার্চ ট্রি – প্রোগ্রামিং ইন্টারভিউ সমস্যা ২

সমস্যাঃ একটি ফাংশন তৈরি করতে হবে, যেখানে একটি বাইনারি ট্রি ইনপুট দেওয়া হলে সেটি বাইনারি সার্চ ট্রি (BST) কী না, তা বের করতে হবে।

সমাধানঃ কোনো বাইনারি ট্রি-কে বাইনারি সার্চ ট্রি হতে হলে ওই ট্রি-এর যেকোনো নোডের বামদিকের চাইল্ড ও নাতি-পুতি নোডগুলো ওই নোডের চেয়ে ছোট এবং ডানদিকের চাইল্ড ও নাতি-পুতি নোডগুলো ওই নোডের চেয়ে বড় হতে হবে। যেমন নিচের ট্রি-টি একটি বাইনারি সার্চ ট্রি –

             6
          /     \
         3       12
       /   \    /   \
      1     4  9     13

কিন্তু নিচের বাইনারি ট্রি-টি বাইনারি সার্চ ট্রি নয় (কেন?)

             6
          /     \
         3       12
       /   \    /   \
      1     7  9     13

নোটঃ বাইনারি সার্চ ট্রি নিয়ে আমি বিস্তারিত আলোচনা করেছি, কম্পিউটার প্রোগ্রামিং ৩য় খণ্ড – ডেটা স্ট্রাকচার ও অ্যালগরিদম পরিচিতি এবং পাইথন দিয়ে প্রোগ্রামিং শেখা ৩য় খণ্ড – ডেটা স্ট্রাকচার ও অ্যালগরিদম পরিচিতি বইতে।

এখন আমরা যদি প্রতিটি নোডের বামদিকের নোডটি সেই নোডের চেয়ে ছোট কী না এবং ডানদিকের নোডটি সেই নোডের চেয়ে বড় কী না, সেটি পরীক্ষা করি, তাহলে কিন্তু সমাধান সঠিক হবে না। কেন সঠিক হবে না, সেটি না বুঝলে ওপরে যেই দুটি উদাহরণ দিয়েছি, তা ভালোমতো বুঝতে হবে। তাহলে সমাধান কী? প্রতিটি নোডের বামদিকে যতগুলো নোড আছে, সেগুলো ওই নোডের চেয়ে ছোট কী না এবং তার ডানদিকে যতগুলো নোড আছে, সেগুলো ওই নোডের চেয়ে বড় কী না, তা পরীক্ষা করতে হবে। তাহলে আমরা পাইথনে কোড লিখে ফেলি –

class node:
  def __init__(self, data):
      self.data = data
      self.left = None
      self.right = None


def find_max(root):
    max_v = root.data
    if root.left:
        left_max = find_max(root.left)
        if left_max > max_v:
            max_v = left_max
    if root.right:
        right_max = find_max(root.right)
        if right_max > max_v:
            max_v = right_max
    return max_v


def check_binary_search_tree(root):
    if root is None:
        return True
        
    # find the largest number on the left sub-tree and check if it's smaller/equal to the root
    if root.left:
        max_value = find_max(root.left)
        if max_value >= root.data:
            return False
    
    # find the smallest number on the right sub-tree and check if it's larger than the root
    if root.right:
        min_value = find_min(root.right)
        if min_value <= root.data:
            return False
    
    # now do the same for the sub-trees
    valid_left = check_binary_search_tree(root.left)
    valid_right = check_binary_search_tree(root.right)
        
    return valid_left and valid_right

ওপরে find_min ফাংশনটি আমি ইমপ্লিমেন্ট করলাম না, find_max কীভাবে কাজ করে বুঝলে find_min তৈরি করতে সমস্যা হবে না। এখন প্রশ্ন হচ্ছে, ওপরের ফাংশনটির কমপ্লেক্সিটি কত? ফাংশনটির টাইম কমপ্লেক্সিটি হচ্ছে O(n^2). কীভাবে সেটি বুঝতে না পারলে একটি বাইনারি ট্রি, যেটি কী না বাইনারি সার্চ ট্রি, সেটি নিয়ে অ্যানালাইসিস করলে বুঝতে পারা যাবে (এই লেখার প্রথম উদাহরণের ট্রি-এর মতো)।

আরো ভালো সমাধানঃ আমরা O(n) টাইম কমপ্লেক্সিটিতে সমস্যাটির সমাধান করতে পারি। এজন্য আমরা ট্রি-টি ইনঅর্ডার ট্রাভার্সাল করে নোডগুলো একটি লিস্টে রেখে দেব। তারপরে দেখব যে, ওই লিস্টের সবগুলো উপাদান ছোট থেকে বড় ক্রমে সর্ট করা আছে কী না, যদি না থাকে তাহলে এটি বাইনারি সার্চ ট্রি নয়, অন্যথা এটি একটি বাইনারি সার্চ ট্রি।

def check_binary_search_tree_(root):
    nodes = []
    
    def inorder(root):
        if root is None:
            return
        inorder(root.left)    
        nodes.append(root.data)
        inorder(root.right)
            
    inorder(root)
    
    for i in range(len(nodes)-1):
        if nodes[i] >= nodes[i+1]:
            return False
        
    return True

আমরা কিন্তু সময় বাঁচাতে গিয়ে একটু বেশি জায়গা খরচ করে ফেলেছি। কারণ এখানে আমরা একটি অতিরিক্ত লিস্ট ব্যবহার করেছি। এখন, আমরা যদি একটু চিন্তা করি কিংবা চেষ্টা করি, তাহলে এই অতিরিক্ত জায়গা ব্যবহার না করেও কিন্তু সমস্যাটির সমাধান করা যায়। আমি কোড লিখে দিচ্ছি, তবে আমার কোড দেখার আগে নিজে নিজে কাজটি করার চেষ্টা করা উচিত। আর সমাধান সঠিক হলো কী না, তা যাচাই করা যাবে নিচের যেকোনো একটি লিঙ্কে গেলে –

ওপরের লিঙ্কগুলোতে পাইথন ছাড়াও অন্য ভাষা ব্যবহার করা যাবে।

def check_binary_search_tree(root):
    
    def inorder(root):
        nonlocal last_node
        
        if root is None: 
            return True
        
        left_valid = inorder(root.left)    
        if left_valid is False:
            return False
        
        if root.data <= last_node: 
            return False
        
        last_node = root.data
        
        return inorder(root.right)  
    
    last_node = -1 #assuming all nodes are non-negative
    return inorder(root)

লেখাটি যাদের কাজে আসতে পারে, তাদের সঙ্গে শেয়ার করার অনুরোধ রইলো। ধন্যবাদ।
 

শাহরিয়ার মনজুর – ইন্টারভিউ

এসিএম আইসিপিসি (ACM ICPC) হচ্ছে বিশ্বের সবচেয়ে মর্যাদাপূর্ণ প্রোগ্রামিং প্রতিযোগিতা। পৃথিবীজুড়ে অনেকগুলো আঞ্চলিক প্রতিযোগিতা থেকে বাছাইকৃত দলগুলো অংশ নেয় চূড়ান্ত প্রতিযোগিতায়, যেটি আইসিপিসি ওয়ার্ল্ড ফাইনালস নামে পরিচিত। সেখানে বিচারক হওয়ার অত্যন্ত কঠিন, বিরল ও সম্মানের ব্যাপার। এক যুগেরও বেশি সময় ধরে এসিএম আইসিপিসি ওয়ার্ল্ড ফাইনালসে বিচারক হিসেবে নিয়মিত বাংলাদেশের শাহরিয়ার মনজুর। নিজের একাগ্রতা ও প্রোগ্রামিংয়ের প্রতি ভালোবাসা থেকে বৈশ্বিক এই আসরে তিনি আমন্ত্রিত হচ্ছেন আর সেই সাথে বাংলাদেশকে এনে দিচ্ছেন অনন্য সম্মান।

ACM ICPC World Finals 2016 – Phuket, Thailand.

বুয়েটের ছাত্র থাকাকালীন সময়ে ভ্যালাডলিড সাইটে সর্বোচ্চ সংখ্যক সমস্যা সমাধান করে সবার নজর কেড়েছিলেন শাহরিয়ার মনজুর। পরবর্তী সময়ে প্রোগ্রামিং সমস্যা তৈরিতে বেশি মনোযোগী হন। আমি যখন বিশ্ববিদ্যালয়ের ছাত্র, তখন থেকেই ইমেইলের মাধ্যমে তাঁর সাথে পরিচয়। পরে ঢাকায় একটি প্রোগ্রামিং ওয়ার্কশপ উনি নিয়েছিলেন সাস্টের কয়েকজন শিক্ষার্থীর জন্য। সেখানে উনার সাথে সরাসরি দেখা হয়। ইমেইলের মাধ্যমে নেওয়া এই সাক্ষাৎকারটি শিক্ষার্থীদের যেমন কাজে লাগবে, তেমনি কম্পিউটার বিজ্ঞান শিক্ষার সাথে অন্যান্য যারা জড়িত, তাদেরও এখান থেকে নেওয়ার আছে অনেক।

সুবিন : আপনি তো এবারেও এসিএম আইসিপিসি’র চূড়ান্ত পর্ব বিচারক হিসেবে যাচ্ছেন। এ নিয়ে আপনার আইসিপিসির চূড়ান্ত পর্বে কত বার যাওয়া হবে?
শাহরিয়ার মনজুর : বিচারক হলাম ত্রয়োদশতম বারের মতো কিন্তু যাচ্ছি এগারতম বার, প্রথম দুবার ভিসা পাইনি।

সুবিন : আইসিপিসির চূড়ান্ত পর্বের বিচারক হিসেবে নির্বাচনের প্রক্রিয়াটি কী?
শাহরিয়ার মনজুর : ডিরেক্টর অফ জাজিং কাছে প্রবলেম পাঠাতে হয় ইমেইলের মাধ্যমে। একটি কমিটি প্রবলেম সেটারের নাম না দেখে প্রবলেম বাছাই করে। যাদের প্রবলেম বাছাই করা হয় তাদের মধ্য থেকেই বিচারক নির্বাচন করা হয়। তবে একদম অপরিচিত কারো প্রবলেম নেয়া হয় না হয়ত। আমি যখন প্রথমবার প্রবলেম দেই তখন কিছু কারণে পরিচিত ছিলাম অনেকের কাছেই। যেমন : UVa Online Judge-এর সাথে জড়িত থাকা, ওয়ার্ল্ড ফাইনালস্ ওয়ার্মআপ আয়োজন করা, স্কিয়েনা-রেভিল্লা এর প্রোগ্রামিং চ্যালেঞ্জেস (Programming challenges) বইতে আমার নাম থাকা ইত্যাদি। তাই বলা যায়, আমি চূড়ান্ত পর্বের বিচারক হয়েছিলাম অনেকটা ভাগ্যের জোরেই।

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

সুবিন : এসিএম আইসিপিসি’র চূড়ান্ত পর্ব ছাড়া আর কোন কোন প্রতিযোগিতার জন্য আপনি প্রোগ্রামিং সমস্যা তৈরি করেন?
শাহরিয়ার মনজুর : ভবিষ্যতে কোথায় করব জানিনা কারণ বয়স হচ্ছে। কিন্তু এখন পর্যন্ত ঢাকা, ফুকেট (থাইল্যান্ড), কুয়ালালামপুর (মালয়েশিয়া), SWERC এবং কিছু চাইনিজ রিজিওনালের জন্য প্রোগ্রামিং সমস্যা তৈরি করেছি।

সুবিন : প্রোগ্রামিং প্রতিযোগিতায় তো রাশিয়া ও চীন বেশ সফল। তো এই দুই দেশের প্রোগ্রামারদের গুণগত মান এবং প্রস্তুতির প্রক্রিয়া সম্পর্কে একটু বলেন।
শাহরিয়ার মনজুর : রাশিয়া এবং চীনের প্রতিযোগিদের সম্পর্কে আমার ধারণা খুবই কম, কিন্তু আমি রুজিয়া লিউ (চীনের প্রোগ্রামিং প্রতিযোগি ও পরবর্তিতে বিচারক)-কে দেখেছি তাতেই বুঝেছি – কেন পুড়েছিল ট্রয়। ওরা অনেক পরিশ্রমী, অনেক কম বয়স থেকে শুরু করে এবং ওদের প্রতিযোগিদের অনেকেই দেশেই থাকে পরের প্রজন্মকে গড়ে তোলার জন্য, এই হারটা আমাদের দেশে অনেক কম। কিসমান (ডেরেক কিসম্যান – পৃথিবীর সেরা প্রোগ্রামারদের একজন), রুজিয়া লিউ এদের বয়সের সাথে সাথে প্যাশন কমেনা, কিন্তু আমাদের দ্রুতই কমে যায়। একারণে প্রজন্ম থেকে প্রজন্মান্তরে জ্ঞান প্রবাহিত হয় কম। চীনে ইনফরমেটিক্স অলিম্পিয়াড এর আগে কিছু লম্বা প্রস্তুতিমূলক ক্যাম্প হয় যেটি আমাদের দেশে দেখা যায় না, ওখান থেকেই ওদের নামকরা প্রোগ্রামিং প্রতিযোগিরা বের হয়ে আসে।

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

সুবিন : বিশ্ববিদ্যালয়ে পড়ার সময় আমার মনে হয়েছিল, আমরা যদি স্কুল পর্যায় থেকেই গণিত ও প্রোগ্রামিংয়ের চর্চা করতাম, তাহলে আইসিপিসি-তে অনেক ভালো করা যেত। এখন বেশ কয়েকবছর হয়ে গেল, দেশে গণিত অলিম্পিয়াড ও ইনফরমেটিক্স অলিম্পিয়াড হচ্ছে। তারপরও আইসিপিসি’র চূড়ান্ত পর্বে বাংলাদেশের পারফরম্যান্স কিছু তেমন পরিবর্তিত হয় নি। আপনার কী মনে হয়?
শাহরিয়ার মনজুর : আমাদের প্রোগ্রামিং প্রতিযোগিদের মান যে কমছে তা নয়, কিন্তু অন্যরা আরো এগিয়ে যাওয়াতে আমাদের ফলাফল অত ভালো হচ্ছে না। এখনকার শিক্ষার্থীরা অনেক ভাগ্যবান যে তারা অলিম্পিয়াড, বিভিন্ন ধরনের প্রোগ্রামিং প্রতিযোগিতা, ইন্টারনেটের প্রোগ্রামিং প্রতিযোগিতা এসবে নিয়মিত অংশ নিতে পারছে। আমি যখন স্কুলে পড়তাম, তখন জ্যামিতি বই এর অনুশীলনী ছাড়া আর তেমন কোনো ভালো সমস্যা সমাধান করার সুযোগ পেতাম না। কাজেই আমাদের প্রতিযোগিতামূলক প্রোগ্রামিং এর ফলাফল নিয়ে আমি খুব হতাশ নই, বরং অন্যান্য ক্রীড়া, রাজনীতি ইত্যাদি ক্ষেত্রের চেয়ে আমরা অনেক এগিয়ে।

সুবিন : দেশের প্রোগ্রামারদের মানের উন্নয়ন ঘটানোর জন্য সরকারীভাবে এবং ব্যাক্তিপর্যায়ে কী ধরণের উদ্যোগ নেওয়া যেতে পারে?
শাহরিয়ার মনজুর : সরকার দেশের শিক্ষার মান বাড়াতে পারে যাতে করে মানুষের বিশ্লেষণ করার ক্ষমতা আরো বাড়ে। এছাড়া প্রোগ্রামিং ক্যাম্প, জাতীয় প্রোগ্রামিং প্রতিযোগিতা এর মত ইভেন্ট আরো বাড়ানো যেতে পারে।

সুবিন : আপনি তো অনেকদিন ধরে শিক্ষকতাও করছেন। আট-দশ বছর আগের শিক্ষার্থী ও বর্তমান সময়ের শিক্ষার্থীদের মধ্যে কোনো পার্থক্য আপনার চোখে পরে?
শাহরিয়ার মনজুর : মানের খুব বেশি তারতম্য চোখে পরে নি। কিন্তু এখন অনেকেরই বাসায় ডেস্কটপ অথবা ল্যাপটপ কম্পিউটার থাকায় কম্পিউটার এর সাধারণ ব্যবহারের মান অনেক ভালো। কিন্তু একই সাথে প্রোগ্রামিং এ সময় নষ্ট (!) না করে ফেইসবুক এ সময় নষ্ট করার প্রবণতা অনেক বেশি। আমর প্রথম কম্পিউটার এর গল্প ( ৮ মেগা ram, ৪২০ মেগা HDD ) এখনকার ছাত্ররা অনেক আগ্রহ নিয়ে শুনে কারণ তাদের কাছে এটা শেরশাহ আমলের গল্প মনে হয়।

সুবিন : ভালো সফটওয়্যার প্রকৌশলী হতে গেলে প্রোগ্রামিংয়ে দক্ষ হতে হয়, আবার প্রোগ্রামিংয়ে দক্ষতা অর্জনের জন্য চর্চার কোনো বিকল্প নেই। এখন যারা প্রতিযোগিতামূলক প্রোগ্রামিং করে না, বা অনলাইন জাজেও প্রবলেম সলভ করে না, তাদের জন্য প্রোগ্রামিং চর্চা করার বিকল্প উপায় কী হতে পারে?
শাহরিয়ার মনজুর : মোটামুটি ভালো প্রোগ্রামার হবার জন্য যেকোনো ভালো বই এর অনুশীলনীর সব সমস্যা নিজে নিজে সমাধান করলেই যথেষ্ট। এমন লেখক নামের মধ্যে “শাহরিয়ার” সাবস্ট্রিং (substring) আছে তাদের লেখা বই পড়াও ভালো।
সুবিন : একজন কম্পিউটার বিজ্ঞানের শিক্ষার্থীর জন্য প্রথম প্রোগ্রামিং কোর্সটা খুবই গুরুত্বপূর্ণ। তো এই কোর্সটি আপনি দীর্ঘদিন পড়িয়ে আসছেন। যারা নতুন শিক্ষক হবেন এবং এই কোর্সটি পড়াবেন, তাদের জন্য আপনি কিছু পরামর্শ দেন।
শাহরিয়ার মনজুর : যে কাউকে প্রোগ্রামিং শেখাতে পারব এই বিশ্বাস আমার আছে। কিন্তু মূল সমস্যা হলো প্রোগ্রামিং শেখানোর জন্য যত সময় প্রত্যেক শিক্ষার্থীকে দেওয়া দরকার সেটা সম্ভব হয়ে ওঠে না ক্রেডিট আওয়ার (credit hour)-এর দোলাচলে। এটাও ঠিক যে সবার খুব ভালো প্রোগ্রামার হবার ক্ষমতা থাকে না কিন্তু মোটামুটি মানের প্রোগ্রামার সবাই হতে পারে। শিক্ষক হিসাবে আমি কিছু ভালো প্রোগ্রামার তৈরী করতে পেরেছি কিন্তু আরো অনেক বেশি পারলে ভালো লাগত। আবার সাউদইস্ট ইউনিভার্সিটির একমাত্র গুগলার আমার সি এর কোর্স করেই নি, নিজে নিজেই প্রোগ্রামিং শিখেছে।

নতুন শিক্ষকদের জন্য পরামর্শ হলো, তারা যেন সেদিনগুলোর কথা মনে করে যখন তাদের শিক্ষক প্রোগ্রামিং পড়াচ্ছিলেন এবং তারা কিছুই বুঝছিলেন না, এবং তখনই তারা বুঝতে পারবেন যে তাদের কী করতে হবে। আমি প্রোগ্রাম শেখানোর জন্য ফ্লোচার্ট ব্যবহার করিনা, এবং এটাই আমার কাছে ভালো পদ্ধতি মনে হয়েছে। এছাড়া পরীক্ষায় এমন প্রশ্ন করা যাবে না যাতে করে শিক্ষার্থীরা প্রোগ্রামিং মুখস্থ করার সাহস করে। কিন্তু এটাও ঠিক যে অনেক শিক্ষক সৃজনশীল প্রশ্ন করতে সময় দিতে চান না, কারণ তার কাজের মূল্যায়নে শুধু পেপার এর সংখ্যা দেখা হয়, প্রশ্নপত্রের সৃজনশীলতা দেখা হয় না।
একজন শিক্ষকের দুটি গুণ থাকতে হয়, ছাত্রদের উৎসাহ দেওয়া (যেটি কায়কোবাদ স্যার সবচেয়ে ভালো পারেন) আর অন্যটি হলো নিজের লাভের কথা না ভেবে শিক্ষার্থীরা কিভাবে ভালো শিখবে সেইটা চিন্তা করা। এই গুণ সবচেয়ে বেশি দেখেছি আমি আমার সহকর্মী মনিরুল হাসান তমাল এর মধ্যে। মনে রাখতে হবে যে একজন সিএসই শিক্ষার্থীকে দিয়ে প্রোগ্রামিং মুখস্থ করানো এবং একজন মানুষের হাতে ইয়াবা ধরিয়ে দেওয়া একই কথা, কারণ দুটোই জীবন ধ্বংস করে।

সুবিন : আপনি ছোটবেলায় কোন কোন স্কুল-কলেজে পড়েছেন?
শাহরিয়ার মনজুর : বনানী বিদ্যানিকেতন (কেজি), লিটল এঞ্জেলস স্কুল (৩-৫), ইঞ্জিনিয়ারিং ইউনিভার্সিটি স্কুল (৬-১০), ঢাকা কলেজ। আমার দেখা সবচেয়ে ভালো শিক্ষা প্রতিষ্ঠান ঢাকা কলেজ কারণ সেখানে মুক্ত চিন্তা করার অনেক সুযোগ।

সুবিন : আমাদের স্কুলের লেখাপড়া নিয়ে তো নিয়মিতই বিভিন্ন পরীক্ষা-নিরীক্ষা করা হয়। সিলেবাস, বই ইত্যাদি পরিবর্তন করা হয়। আপনার পর্যবেক্ষণে আমাদের স্কুলের শিক্ষাব্যবস্থায় কি মৌলিক কোনো পরিবর্তন প্রয়োজন বলে আপনি মনে করেন?
শাহরিয়ার মনজুর : খুব ধীরে হলেও সব দেশের শিক্ষার মান বাড়ে, আমরা কেন জানি উল্টা দিকে হাঁটলাম। নতুন যদি কিছু করতে না পারি, আগে যেমন ছিল সেখানে তো অন্তত ফেরত যেতে পারি? SSC , HSC -তে গ্রেডিং সিস্টেম যদি রাখতেই হয় তাহলে ৯০% এ A+ করা যেতে পারে এবং গ্রেড এর ধাপ আরো বাড়ানো উচিত। মনে রাখা দরকার যে শিক্ষা ব্যবস্থা কোনো সার্কাস না যে সবাইকে এসেই চমৎপ্রদ কোনো খেলা দেখাতে হবে।

সুবিন : আপনি প্রোগ্রামিং শেখা শুরু করলেন কবে এবং কিভাবে প্রোগ্রামিং-এর প্রতি আকৃষ্ট হয়েছিলেন?

শাহরিয়ার মনজুর : প্রোগ্রামিং শেখা শুরু করি বুড়ো বয়সে, অর্থাৎ আমার বয়স যখন ঊনিশ, তখন। হুজুগে পরে বুয়েটের কম্পিউটার সায়েন্স ও ইঞ্জিনিয়ারিং বিভাগে ভর্তি হই। শুরুতে প্রোগ্রামিং খুবই ভয় পেতাম। ১০,০০০+ লাইন এর একটি টার্ম অ্যাসাইনমেন্ট করে নিজেকে খুব ভালো প্রোগ্রামার ভাবা শুরু করি, ভাল্লাদলিদ (ইউভিএ) সাইট-এ প্রোগ্রামিং সমস্যা সমাধান করতে গিয়ে সেই ভুল ভাঙ্গে, এরপর ওইখানে বেশ কিছু সমস্যা সমাধান করে আবার নিজেকে ততক্ষণ ভালো প্রোগ্রামার ভাবা শুরু করি যতক্ষণ কিসমান এর সাথে আলাপ হয়নি। সার করা হলো : একমাত্র বোকারাই নিজেদের ভালো প্রোগ্রামার ভাবে।

সুবিন : আমি বর্তমানে একটি প্রবণতা লক্ষ করছি, শিক্ষার্থীরা যখন নতুন প্রোগ্রামিং শেখে, তখন কোনো সমস্যা সমাধান করতে না পারলে তারা সাথে সাথেই কোনো ফোরাম বা ফেসবুক গ্রুপ থেকে সেটার সমাধান জেনে নেয়। এতে কি আসলে তেমন কোনো লাভ হয়?
শাহরিয়ার মনজুর : আমার এক স্টুডেন্ট বলেছিল পাশ করে নতুন চাকরীতে ঢোকার পর, “স্যার উপরে আল্লাহ নিচে গুগল (google), তাই সব কিছুর সমাধান বের করতে পারি”, কিন্তু শিক্ষার্থীরা এমন করলে এতে তাদেরই ক্ষতি। এই জন্য ক্লাসেও যারা প্রোগ্রামিং বেশি পারে তাদের আমি সতর্ক করি যেন অন্যদেরকে তারা তাদের কোড না দেখায়।

সুবিন : আপনি তো অনেকদিন ধরেই প্রোগ্রামিং সমস্যা তৈরি ও কম্পিউটার বিজ্ঞানে শিক্ষকতার কাজ চালিয়ে যাচ্ছেন। ভবিষ্যতে কি অন্য ধরণের কোনো কাজ করার পরিকল্পনা আছে নাকি এ দুটি কাজই চালিয়ে যেতে চান?
শাহরিয়ার মনজুর : কোনো বাঁধাধরা পরিকল্পনা নেই, আমি পেশায়ে শিক্ষক, আর প্রোগ্রামিং সমস্যা তৈরি করা আমার প্যাশন। যে কবিতা আমি মাঝে মাঝে গুনগুন করি তা হলো:

“আজি হতে শত বর্ষ পরে ,
কে তুমি খাবি খাচ্ছ আমার প্রবলেম নিয়ে
আজি হতে শত বর্ষ পরে”

এই সাক্ষাৎকারটিসহ মোট এক ডজন সাক্ষাৎকার নিয়ে প্রকাশিত হয়েছে প্রোগ্রামিং ক্যারিয়ার গাইডলাইনঃ এক ডজন প্রোগ্রামারের কথা। বইটি পাওয়া যাচ্ছে রকমারি ডট কম-এ।

প্রোগ্রামিং ইন্টারভিউঃ কোডিং

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

x = input()
y = input()
print x / y

তখন ইন্টারভিউয়ার তোমাকে বলল, “আপনি একটা ফাংশন লিখে কাজটা করেন”। “আচ্ছা, ঠিকাছে” বলে তুমি নিচের মতো কোড লিখে ফেললে –

def division(x, y):
    return x / y

x = input()
y = input()
print division(x, y)

এবার তুমি পরিতৃপ্ত, তোমার কোড দেখতে বেশ সুন্দর হয়েছে। কিন্তু ইন্টারভিউয়ারের চেহারা দেখে বোঝা যাচ্ছে, তিনি এখনো তেমন খুশি নন। তখন তিনি জিজ্ঞাসা করলেন, আচ্ছা, y-এর মান যদি 0 হয়?

একথা বলতে না বলতেই তুমি ঝট করে নিচের কোড টাইপ করে মুচকি হাসি দিলে:

def division(x, y):
    try:
        return x / y
    except ZeroDivisionError:
        return "Can not divide by zero"

x = input()
y = input()
print division(x, y)

তুমি মনে মনে ভাবছ, “যাক, এবারের কোড বুলেট প্রুফ”। ইন্টারভিউয়ার এবারে বললেন, আচ্ছা, x-এ 5 আর y-তে 2 ইনপুট দিলে কী হবে? পাইথন (2 সিরিজে)-এ সেটার উত্তর হবে 2। কিছুক্ষণ চিন্তাভাবনা করে তুমি তোমার কোড একটু পরিবর্তন করে নিচের মতো করে লিখলে –

def division(x, y):
    try:
        return x * 1.0 / y
    except ZeroDivisionError:
        return "Can not divide by zero"

x = input()
y = input()
print division(x, y)

এরপর আর এই কোড নিয়ে কোনো প্রশ্ন রইল না। ইন্টিজার ও রিয়েল নাম্বারের জন্য এই কোড কাজ করবে। তুমি ইন্টারভিউ দিয়ে খুশিমনে বাড়ি ফিরে গেলে। কিন্তু কয়েকদিন পরে ইমেইল পেলে যে ওরা তোমাকে নিচ্ছে না। কারণ এই ছোট কোড ঠিকভাবে লিখতে যদি এত সাহায্যের প্রয়োজন হয়, তাহলে আরেকটু বড় কাজ তোমার হাতে দেওয়ার ভরসা ঠিক তোমার টিম লিডার করতে পারবেন না (এই কথা অবশ্য ইমেইলে লেখা থাকবে না)। আর হ্যাঁ, ওপরের কোডে ভ্যারিয়েবলের নামও আরো ভালোভাবে দেওয়া যেত। x-এর বদলে numerator বা num এবং y-এর বদলে denominator বা denom। কারণ অর্থপূর্ণ ভ্যারিয়েবল নামকরণও অনেক গুরুত্বপূর্ণ জিনিস। সাথে এক লাইন কমেন্ট যোগ করে দিলে ইন্টারভিউয়ার আরো খুশি হতেন।

def division(numerator, denominator):
    """ Divides numerator by denominator. In case the denominator is    zero, it returns None 
    """
    try:
        return numerator * 1.0 / denominator
    except ZeroDivisionError:
        print "Can not divide by zero"
        return None

আশা করি তোমরা ইন্টারভিউতে প্রশ্ন শুনেই কোডিংয়ে ঝাঁপিয়ে পড়বে না। তাই তোমার জন্য টিপস্ হচ্ছে –

  • প্রশ্ন বুঝেছ কী না, চিন্তা করবে, কোনো জিজ্ঞাসা থাকলে প্রশ্ন করবে,
  • প্রোগ্রামের কর্নার কেসগুলো চিন্তা করবে এবং যথাযথ কোডিং করবে,
  • ভ্যারিয়েবলের নামকরণ ভালোভাবে করবে
  • দরকার হলে কমেন্টও লিখবে

 

অনুপম শ্যাম : সাক্ষাৎকার (২)

অনুপম শ্যাম -এর ইন্টারভিউয়ের দ্বিতীয় (ও শেষ) অংশ।

১ম পর্ব পড়তে এখানে ক্লিক করতে হবে।

দ্বিতীয় পর্ব :

anupom

সুবিন : ডিজনীর মতো বিশ্বখ্যাত কোম্পানীতে কাজ করেছেন, সেখানের অভিজ্ঞতা কেমন? আর স্টার্টআপে কাজ করার অভিজ্ঞতা কেমন?
অনুপম : ডিজনী তে আমি গেমিং ডিভিশন এ কাজ করতাম। ডিজনী বড় কোম্পানি তাই সব কিছুই বড়, অনেক স্তর বিশিষ্ট প্রতিষ্ঠান । আমার ডিজনী তে সর্বশেষ প্রজেক্ট “Star Wars Commander” গেম এ একশ এর কাছাকাছি লোক কাজ করেছে। এভারনোটে মনে হয় প্রায় সব মিলিয়ে ৩৫০ জন কর্মী। আমি ডিজনীর সিইও কে কখনই সামনা সামনি দেখিনি। এভারনোটে আমি প্রায় প্রতিদিন ই সিইও কে দেখি, এমন কি মাঝে মাঝে সে আমাদের জন্য চা কফি ও বানায়।

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

সুবিন : আপনি তো বই লিখেছেন। বইটের নাম এবং বই লেখার অভিজ্ঞতা যদি পাঠকদের সাথে শেয়ার করতেন। ভবিষ্যতে আরো বই লেখার ইচ্ছা আছে?
অনুপম : বই এর নাম CakePHP Application Development, প্রকাশ হয় Packt Publication, UK থেকে ২০০৭ এ। বই লেখাটা যে এত কষ্টকর হবে তা জানলে হয়ত বই লেখা শুরু করতাম না। কিন্তু একবার যেহেতু বেল তলায় গেছি, ইচ্ছা আছে আরেকবার যাবার, তবে কম্পিউটার সম্পর্কিত বই নাও হতে পারে।

সুবিন : যেই ছেলেটি বা মেয়েটি সবে মাত্র কোনো বিশ্ববিদ্যালয়ে কম্পিউটার বিজ্ঞান বিভাগে (বা কাছাকাছি কোনো বিষয়ে) ভর্তি হল, সে আপনার কাছে কোনো পরামর্শ চাইলে আপনি কী বলবেন?
অনুপম : কম্পিউটার বিজ্ঞান অনেক বড় বিষয়, তার মধ্যে কিছু জিনিস আমাদের ভালো লাগবে, আর কিছু খুব বেশি ভালো লাগবে না। কিন্তু কোনো একটা বিষয়ে ভালো দখল রাখতে হলে গভীরতা এবং চত্তড়াই (Depth এন্ড Breadth) দুটোই দরকার। যে গুলো ভালো লাগবে ওগুলো তে পুরো গভীরে যাও, যা খুব একটা ভালো লাগবে না তাও ভালো করে জেনে রাখো, এক সময় দেখবে ওটাও কাজে লাগবে। সবগুলো বিষয়ই কিন্তু আসলে একই সুতোয় গাঁথা, এটা প্রথম দিকে খুব একটা স্পষ্ট নাও হতে পারে।
দ্বিতীয় বর্ষ থেকেই আসলে ভাবতে শুরু করা উচিত তুমি পাস করে কি করতে চাও, এটা জানা থাকলে নিজেকে তার জন্য তৈরি করাটা অনেক সহজ হবে। এই প্রশ্নের উত্তর বের করা টাও কিন্তু বেশ কঠিন, তার জন্য আসলে সবার আগে জানতে হবে তোমার সামনে কি কি করার মতো বিকল্প আছে। তুমি পাশ করে বাইরে এসে মাস্টার্স করতে পারো, তারপর চাইলে একাডেমিয়া তে রিসার্চ করতে পারো, দেশের কোন ভালো সফটওয়্যার কোম্পানিতেও চাকরি করতে পারো, আবার নিজেই কোন সফটওয়্যার ফার্ম দিতে পারো। অনেকে চাকরি নিয়ে সরাসরি বাইরের গুগল, মাইক্রোসফট এর মতো বড় বড় কোম্পানি তে চলে আসছে, সফটওয়্যারে চাকরির বাজার এখন পুরোই আন্তর্জাতিক, চাইলে সেটাও করতে পারো। এরকম আরও অনেক কিছুই করার মতো আছে। এটা ঠিক করে নিলে তুমি কোনটাকে প্রাধান্য দিবে সেটা বের করা সহজ হয়ে যায়।
আমি যখন পড়েছি তখন কিন্তু এতো কিছু বুঝিনি, পরে ঠেকে শিখেছি। Generalized পরামর্শ দেয়া টা আসলে কঠিন। এই পরামর্শ গুলো আমি তখনকার আমাকে ভেবেই দিলাম, হয়তো এখনকার কারো কাজে লাগবে।

সুবিন : ছোটবেলায় কোন কোন স্কুল ও কলেজে পড়েছেন?
অনুপম : ব্লু বার্ড হাই স্কুল সিলেট (প্রাইমারি), সিলেট সরকারী পাইলট উচ্চ বিদ্যালয় (এস.এস.সি. পর্যন্ত) তারপর এম.সি. কলেজ সিলেট ।

সুবিন : ভার্সিটিতে লেখাপড়া কেমন লাগত?
অনুপম : ভার্সিটিতে প্রথম দুই/তিন সেমিস্টার এর পর লেখাপড়া খুব একটা করা হয় নি । তৃতীয় সেমিস্টার থেকে প্রোগ্রামিং কনটেস্ট করা শুরু করি, তারপর থেকে পড়ালেখা পুরোটাই নিম্নগামি। পড়ালেখার বেপারে আরেকটু সিরিয়াস হলে মনে হয় ভালো হত।

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

সুবিন : বাংলাদেশের জনসংখ্যার সবচেয়ে বড় অংশটাই তরুণ। এদের একটা ক্ষুদ্র অংশকেও যদি আমরা তথ্যপ্রযুক্তি খাতে আকৃষ্ট করতে পারি, আমরা অনেকদূর এগিয়ে যাব। সেটা কিভাবে সম্ভব?

এরকম ১২টি সাক্ষাৎকার নিয়ে প্রকাশিত হয়েছে “প্রোগ্রামিং ক্যারিয়ার গাইডলাইন : এক ডজন প্রোগ্রামারের কথা”। বইটি পাওয়া যাচ্ছে নীলক্ষেতের হক লাইব্রেরি ও রকমারি ডট কম-এ। বিস্তারিত জানতে ওপরের ছবিতে ক্লিক করুন।

অনুপম : আমার মনে হয় আমাদের সহজ পথ না খুঁজে লং টার্ম প্ল্যান করতে হবে। আরো বেশি বেশি বিশ্ববিদ্যালয়ে কম্পিউটার বিজ্ঞান বিভাগ চালু করতে হবে। শুধু quantity বৃদ্ধি করে আসলে খুব একটা লাভ হবে না, আমাদের high quality resource তৈরী করতে হবে large scale এ। এর জন্য মনে হয় ভালো বিশ্ব মানের কম্পিউটার বিজ্ঞান বিভাগের বিকল্প নেই। তিন – চার মাসের ট্রেনিং দিয়ে সেটা করা সম্ভব না। আমার মনে হয় বাংলাদেশের ছেলে মেয়েরা এমনিতেই তথ্যপ্রযুক্তি খাতে উত্সাহী , আমেরিকার মত না। ঠিক মত প্লাটফর্ম পেলে আমরা অনেক দূর যাব।

মারুফ মনিরুজ্জামান এর সাক্ষাৎকার

মারুফ মনিরুজ্জামান একজন সফটওয়্যার নির্মাতা। শাহজালাল বিজ্ঞান ও প্রযুক্তি বিশ্ববিদ্যালয়ে কম্পিউটার সায়েন্স ও ইঞ্জিনিয়ারিং বিভাগে লেখাপড়া করেছেন। তারপর ঢাকায় সফটওয়্যার ইঞ্জিনিয়ার হিসেবে ক্যারিয়ার শুরু করলেও, মাইক্রোসফটে চাকরি পেয়ে কানাডা চলে যান। এখন তাঁর বসবাস যুক্তরাষ্ট্রে। মনির ভাই আমার বিশ্ববিদ্যালয়ের বড় ভাই, আমার চেয়ে ২ ব্যাচ সিনিয়র। তাই তাঁর কাছ থেকে দুইঘণ্টা সময় বের করতে কোনো সমস্যা হলো না। আশা করি আমাদের দেশের উদীয়মান প্রোগ্রামাররা তাঁর কথা থেকে উপকৃত ও অনুপ্রাণিত হবে।

সুবিন : মনির ভাই, এখন কোথায় কাজ করছেন?
মনিরুজ্জামান : আমি এখন Caradigm নামে একটা কোম্পানিতে কাজ করি। এটা মাইক্রোসফট আর জেনারেল ইলেকট্রিক কোম্পানির হেলথ কেয়ার ভিত্তিক যৌথ উদ্যোগ।

সুবিন : এখানে আপনি কী ধরণের কাজ করেন? আপনার প্রজেক্ট সম্পর্কে একটু বলুন।
মনিরুজ্জামান : আমি যে প্রজেক্টে কাজ করি সেটা হেলথ কেয়ারের জন্য একটা প্লাটফর্ম। এটা বিভিন্ন উৎস এবং ডিভাইস থেকে তথ্য সংগ্রহ থেকে শুরু করে স্বাস্থ্য সংক্রান্ত যেসব প্রযুক্তি দরকার হয়, সেগুলোর জন্য একটা প্লাটফর্ম সরবরাহ করে। যেটার উপর ভিত্তি করে অন্য ছোটবড় কোম্পানি সফটওয়্যার লিখতে পারে। এখানে মূলতঃ মাইক্রোসফটের প্রযুক্তি ব্যবহার হয়। যেমন ল্যাংগুয়েজের জন্য C#, প্লটাফর্মের জন্য Windows Server, SQL Server, Windows Azure, এছাড়া Natural Language Processing ইত্যাদি ব্যবহার হয়।

সুবিন : Caradigm-এ কবে থেকে কাজ করছেন? এখানে চাকরি পেলেন কিভাবে?
মনিরুজ্জামান : Caradigm এ কাজ করি প্রায় দেড় বছর। এখানে কাজ পেয়েছি মূলতঃ আমার আগের মাইক্রোসফটে কাজ করার অভিজ্ঞতা থাকায়। আমি এর আগে ২০০৮ সনে মাইক্রোসফট অফিসে (যারা Word, Excel, Exchange এই সফটওয়্যারগুলো বানায়) যোগ দেই। সেখানে কিভাবে কাজ পেলাম সেটা বলা যায়। আমি শাহজালাল বিশ্ববিদ্যালয়ে পড়ার সময় জাভা ভার্চুয়াল মেশিন বানিয়েছিলাম একটা প্রোজেক্টের অংশ হিসাবে। সেটা নিয়ে আমি ২০০৮ এ codeproject এ একটা আর্টিকেল লিখি। সেটা ওই মাসে সেরা আর্টিকেল হিসাবে প্রথম হয়। এরপর ওরা আর্টিকেলের লিংকটা ওদের প্রায় ৫০ লক্ষ (৫ মিলিয়ন) সদস্যের কাছে পাঠায়। তাদের মধ্যে একজন মাইক্রোসফটের রিক্রুটার ছিল। উনি আমাকে রিজিউমি পাঠাতে বলেন। এরপর হংকংএ আমার ইন্টারভিউ হয়। এরপর আমি মাইকোসফট থেকে অফার পাই।

সেই আর্টিকেলের লিঙ্ক : http://www.codeproject.com/Articles/24029/Home-Made-Java-Virtual-Machine

সুবিন : বাংলাদেশে সফটওয়্যার ইন্ডাস্ট্রিতে কত বছর কাজ করেছেন?
মনিরুজ্জামান : আমি বাংলাদেশে কাজ করেছি প্রায় ৩ বছর। সাইক্রাফট সল্যুশন এবং কাজ সফটওয়্যার-এ।

সুবিন : এবারে একটু পেছনের দিকে যাই। প্রথম কম্পিউটারের সাথে পরিচয় কবে? প্রোগ্রামার হওয়ার সিদ্ধান্তটি কখন নিলেন?
মনিরুজ্জামান : কম্পিউটার প্রথম হাতে পাই শাহজালার বিশ্ববিদ্যালয়ে ভর্তি হওয়ার পর, ১৯৯৮ সনে। তবে কম্পিউটার নিয়ে আমার আগ্রহ ছিল স্কুলে পড়ার সময় থেকে। একটা কম্পিউটার হাতে পাওয়ার জন্য আমি অনেক চেষ্টা করেছি স্কুলে এবং কলেজে পড়ার সময়। তখন সি এন্ড ই জার্নাল নামে একটা পত্রিকা বের হত। সেটার ১৯৯৭ সংখ্যায় আমার একটা চিঠি ছাপা হয় যেটায় আমি জানতে চেয়েছিলাম Z80 কম্পিউটার বানানোর পার্টস কোথায় পেতে পারি। ওরা লিখেছিল এখন সেগুলো পাওয়া যাবে না। এর চেয়ে ১৫০০০ টাকা দিলে ওরা আমাকে একটা পুরোনো কম্পিউটার দিতে পারে। আর প্রথম প্রোগ্রামটা আমি “খাতায়” লিখেছিলাম সম্ভবত ১৯৯৪ সনে ক্লাস নাইনে পড়ার সময়। যেটা ছিল একটা কার্ড গেম। ১৯৯৮ সনে সেটা প্রথম কম্পিউটারে রান করে দেখি। প্রোগ্রামার হওয়ার সিদ্ধান্ত কবে নিলাম এটা বলা অনেক মুশকিল – তাই একটু ইতিহাস বলে দিলাম।

সুবিন : কম্পিউটার সায়েন্স পড়ার সিদ্ধান্তটি কি আপনার নিজের ছিল? নাকি বাবা-মা বলে দিয়েছে যে আপনাকে কম্পিউটার সায়েন্স পড়তে হবে?
মনিরুজ্জামান : আমার নিজের অবশ্যই। আমার “একটা কম্পিউটার থাকা মানুষের জীবনে কত জরুরী” এইটার বিবরণ শুনতে শুনতে আমার বাবা মা মোটামুটি অতিষ্ঠ হয়ে ছিলেন প্রায় ৫ বছর। আমি কম্পিউটার সায়েন্সে না পড়লেও সম্ভবত প্রোগ্রামার হওয়ার চেষ্টা করতাম।

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

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

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

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

সুবিন : যেসকল কম্পিউটার বিজ্ঞান ও প্রকৌশলের শিক্ষার্থীরা ক্যারিয়ার হিসেবে সফটওয়্যার ইঞ্জিনিয়ারিং বেছে নিতে চায়? তাদের প্রতি আপনার কী পরামর্শ?
মনিরুজ্জামান : প্রথমে দেখতে হবে বিষয়টাতে আপনার উৎসাহ আছে কিনা। আমি মনে করি, কোন বিষয় ভাল না লাগলে সেটা করা উচিৎ নয়। আপনি যদি প্রোগ্রামিং আগ্রহী হন এবং এটাকে পেশা হিসাবে নিতে চান তাহলে প্রথমে সময় নিয়ে চর্চা করুন। ভালভাবে না শিখে কাজ শুরু করলে কখনওই আর শেখা নাও হতে পারে। প্রচুর চর্চা করলে চাকরি নিয়ে চিন্তা করতে হবে না। আমি অনেক কষ্টে (আসলে সহজে, পড়াশোনাই করতাম না- কষ্ট হল কিভাবে?) কম্পিউটার সায়েন্সের ডিগ্রি পেয়েছি। কিন্তু আমি সারাদিন কম্পিউটারে বিভিন্ন কাজ করতাম। আমার কাজে লাগবে সেকারনে করতাম না। মজা লাগত বলে করতাম। কয়েকটি বিষয় ঠিক করুন কী কী করতে চান। একটা কার্টুন সফটওয়্যার বানান। নির্দোষ ভাইরাস বানিয়ে বন্ধুকে পাঠিয়ে দিন। কম্পিউটারকে ১ থেকে ১০০০ বিলিয়নের মধ্যে সবগুলো প্রাইম নাম্বার বের করতে লাগিয়ে দিন। দাবা খেলার প্রোগ্রাম লিখুন, যেটা ১০০০ লাইনের মধ্যে করা সম্ভব বা প্রেয়সীর ছবি দিয়ে গেম বানান, যেটা ছবির বিভিন্ন অংশ এলোমেলো ব্লকে রাখবে। আনন্দ আর কাজ একসাথে করা যাবে না কেন? তারপর একদিন দেখবেন মাইক্রোসফট রিক্রুটারের মেইল পেয়ে গেছেন। আমার ক্ষেত্রে তাই হয়েছে।

সুবিন : ভালো প্রোগ্রামার হতে গেলে অ্যালগরিদমভিত্তিক প্রোগ্রামিং প্রতিযোগিতা, যেমন এসিএম আইসিপিসি-তে অংশগ্রহন কতটা গুরুত্বপূর্ণ?
মনিরুজ্জামান : ভালো প্রোগ্রামার হতে অবশ্যই ডাটা স্ট্রাকচার এবং অ্যালগরিদম জানতে হবে। ডাটা স্ট্রাকচার এবং অ্যালগরিদম না জেনে সফটওয়্যার বানালে সেটার  মধ্যে কাঠামোগত ত্রুটি থাকবে। এই ত্রুটিগুলোর কারণে সফটওয়্যারে নতুন ফিচার যোগ করা বা অধিক সংখ্যক ব্যবহারকারীর জন্য ব্যবহার উপযোগী করা কঠিন হয়ে পড়ে। সাধারনভাবে জটিল ডাটা স্ট্রাকচার এবং অ্যালগরিদম নিত্যদিনের কাজে দরকার হয় না। কিন্তু অনেক ছোট ছোট সিদ্ধান্ত নিতে হয় যেগুলোতে ডাটা স্ট্রাকচার এবং অ্যালগরিদম জানা একজন প্রোগ্রামারের সিদ্ধান্ত অনেক উন্নতমানের হয়। একারনে মাইক্রোসফট, ফেসবুক, গুগলের মত কোম্পানি ডাটা স্ট্রাকচার এবং অ্যালগরিদমের উপরই মূলতঃ ইন্টারভিউ নিয়ে থাকে। ডাটা স্ট্রাকচার এবং অ্যালগরিদমে দক্ষ যে কেউ অন্য প্রয়োজনীয় দক্ষতা সহজেই আয়ত্ব করতে পারে। এসিএম আইসিপিসি মূলতঃ কতটুকু ডাটা স্ট্রাকচার এবং অ্যালগরিদমে শেখা হল সেটার একটা পরীক্ষা। এখানে ভাল করলে ধরে নেয়া যায় যে, শেখা হচ্ছে ঠিকমত। যাদের সুযোগ আছে তাদের এসিএম আইসিপিসি তে অংশগ্রহন করা উচিত এবং প্রতিযোগীতায় ভাল করার চেষ্টা করা উচিত। শেষ পর্যন্ত সবাই প্রথম স্থান পাবে না বা প্রথম ১০ এর মধ্যে থাকতে পারবে না। কিন্তু অংশগ্রহনের মধ্য দিয়ে অনেককিছু শেখা হবে যেটা পরবর্তীতে অবশ্যই কাজে লাগবে। তবে কেউ যদি ইচ্ছা করে তবে জীবনের যে কোনো পর্য়ায়েই যে কোনো কিছু শিখতে পারে। তাই প্রতিযোগিতায় অংশগ্রহনের সুযোগ না থাকলেও পূর্বের বিভিন্ন প্রতিযোগীতার প্রশ্নগুলো দেখা যেতে পারে। এই প্রশ্নগুলো বিভিন্ন বাউন্ডারি কেস নিয়ে চিন্তা করতে শেখায়। যেটা পরবর্তীতে উন্নতমানের সফটওয়ার তৈরির জন্য কাজে লাগবে। আমি ব্যক্তিগতভাবে http://ace.delos.com/usacogate সাইটের প্রশ্নগুলো সমাধান করতাম। এখানে ১০০ এর মত প্রশ্ন আছে যেগুলো জানা একজন কম্পিউটার প্রকৌশলীর জন্য জরুরী।

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

সুবিন : একজন সফটওয়্যার ইঞ্জিনিয়ারের কী কী দক্ষতা থাকা উচিত? দক্ষতা বলতে আমি টেকনিক্যাল স্কিল এবং সফট্ স্কিল দুটোই বুঝাচ্ছি।
মনিরুজ্জামান : প্রথমত, প্রচুর পরিমান অনুশীলন করতে হবে। বিষয়টা অনেকটা ব্যয়াম করার মত। কেউ যদি ১০ টা বুকডন (বা অন্য যে কোন ব্যায়াম) দিয়ে বলে আমি বুকডন দেয়া শিখে গেছি, আমার আর বুকডন দেয়ার দরকার নাই তাহলে যেমন শোনাবে – যখন কেউ বলে আমি এই ল্যাংগুয়েজ শিখে ফেলেছি সুতরাং আমার আর প্রোগ্রামিং করার দরকার নাই তাহলে সেরকমই শোনাবে। অনেক চর্চা করতে হবে। ব্যাপারটাকে ব্যায়ামের মত দেখতে হবে। কম্পিউটারের ভাষায় পুরোপুরি দক্ষতা থাকতে হবে। সফটওয়্যার তৈরি কবিতা লেখার মত। কবিতা লেখার সময় কবি কখনও ভাষা নিয়ে চিন্তা করেন না। ভাষা পুরোপুরি জানা না থাকলে কেউ কবিতা লেখার চেষ্টা করেন না।

আবার শুধু বুকডন চর্চা করলে যেমন ব্যায়ামের লক্ষ্য পূরন হয় না তেমনি শুধুমাত্র একটা বিষয় শিখলে ভাল সফটওয়্যার ইঞ্জিনিয়ার হওয়া যায় না। কয়েকটা বিভিন্ন ধরনের ভাষা জানা জরুরী। প্রত্যেকটা ভাষার কিছু নিজস্ব বৈশিষ্ট্য আছে। বৈশিষ্ট্যগুলো জানা থাকা দরকার। আমি Python, C, C# বা Java, Javascript, Erlang, Assembly অন্তত এই কয়েকটা ল্যাংগুয়েজ শেখার পরামর্শ দেব। প্রত্যেকটা ভাষারই কিছু অনন্য বৈশিষ্ট্য আছে। এবং কেউ যদি শুরু করতে চান তাহলে প্রথমে পাইথন দিয়েই শুরু করুন। তারপর বাকিগুলো শেখা যেতে পারে। ভাষা শেখার জন্য ৫০০-১০০০ ঘন্টা ব্যায় করা হলে এরপর ডাটা স্ট্রাকচার এবং অ্যালগরিদমের দিকে সময় দেয়া দরকার। যদিও ১০০০ ঘন্টা চর্চা করলে কিছু ডাটা স্ট্রাকচার এবং অ্যালগরিদম শেখা হয়ে যাবে।

এরপর দরকার কাঠামো তৈরি শেখা। সেজন্য ডিজাইন প‌্যাটার্ন (http://en.wikipedia.org/wiki/Design_Patterns) শিখতে হবে। এটাও মূলতঃ অনেকদিন ধরে চর্চার মাধ্যমেই আয়ত্ব করতে হয়।

এরপর নেটওয়ার্কিং, প্যারালাল প্রসেসিং এবং সিকিউরিটি সম্পর্কে বিস্তারিত জানতে হবে।

এছাড়া আর যে বিষয়গুলো লাগে সেগুলো হল বিভিন্ন ধরনের ডাটাবেজ সম্পর্কে ধারনা (SQL, NoSQL), বিভিন্ন ফ্রেমওয়ার্ক (ASP .NET, Angular JS ইত্যাদি) সম্পর্কে ধারনা, ক্লাউড কম্পিউটিং, সোর্স কোড কন্ট্রোল (Team Foundation Server, Git), Continuous Integration এবং বিভিন্ন ধরনের সফটওয়্যার ডেভলপমেন্ট মেথড (যেমন agile) ইত্যাদি। এগুলো সম্পর্কে প্রাথমিক ধারনা থাকলে কাজ করতে করতে শিখে ফেলা যায়।

আর সফটওয়্যার তৈরি শুরু করার আগে মোটামুটি একটা খসড়া ডিজাইন ডকুমেন্ট বানাতে হয়। যেটা পরবর্তীতে পরিবর্তন হতে পারে কিন্তু কাজ শুরু করার জন্য একটা থাকতেই হবে। এই বিষয়টা অভ্যাস করলে ভাল হয়।

একটা বিষয় যেটা বাংলাদেশে গুরুত্ব দেয়া হয় না সেটা হচ্ছে যোগাযোগ দক্ষতা। অন্য মানুষের সাথে কিভাবে সঠিকভাবে কোনো বিষয় নিয়ে আলোচনা করতে হবে, বা কিভাবে কোনো বিষয়ে মতের অমিল হলে সেটা আলোচনার মাধ্যমে সমাধান করতে হবে – এগুলো শেখা খুবই গুরুত্বপূর্ণ। কাউকে কোনভাবে আক্রমন বা অসম্মান করলে তার থেকে ভবিষ্যতে কোন সহায়তা পাওয়া অসম্ভব।

আর সবশেষে আরকবার বলি শব্দটা হচ্ছে দক্ষতা – মেধা নয়। মাসে একদিন ৮ ঘন্টা ব্যায়ম করলে হবে না। প্রতিদিন করতে হবে। আর প্রতিদিন কতটুকু পেশি বাড়ল সেটাও মাপা যাবে না। একবছর পর মাপতে হবে কতটুকু উন্নতি হল। প্রোগ্রামিং বা সফটওয়্যার ইঞ্জিনিয়ারিং এর ক্ষেত্রেও তাই। কাজটা অনেক মজার সুতরাং আশা করি সেটা আনন্দদায়ক অভিজ্ঞতা হবে।

সুবিন : বাংলা ভাষায় প্রোগ্রামিং শিক্ষা কতটা গুরুত্বপূর্ণ ?
মনিরুজ্জামান : পৃথিবীর বেশিরভাগ মানুষ নিজের ভাষায় পড়াশোনা করে। আমাদের জন্য সেটা বাংলা ভাষা। প্রোগ্রামিং এর সাথে বাংলা বা ইংরেজি বা অন্য ভাষার সরাসরি কোন সম্পর্ক নাই। যদি ভাল মানের বই থাকে তবে নিজের ভাষায় যে কোন কিছু শেখা সহজ। সেটা প্রোগ্রামিং এর ক্ষেত্রেও সত্য। আর বাংলা ভাষায় বই অবশ্যই দরকার আছে। অনেকেই শুধু ইংরেজি ভাষায় দুর্বল থাকার কারনে প্রোগ্রামিং শেখার উৎসাহ পায় না।

সুবিন : আপনি তো প্রোগ্রামিং শিক্ষা নিয়েও কাজ করেন। শিক্ষক ডট কম-এ আপনার সি প্রোগ্রামিংয়ের একটি কোর্স আছে। এই কাজগুলো সম্পর্কে যদি একটু বলতেন।
মনিরুজ্জামান : আমি যদি কম্পিউটার সায়েন্সে পড়ার সুযোগ না পেতাম তাহলে নিজে নিজে শেখার চেষ্টা করতাম। কিন্তু সেটা মোটেও সহজ হত না। সেকারনে আমি পরিকল্পনা করেছিলাম ১/২টা ভাষা, ডাটা স্ট্রাকচার, অ্যালগরিদম, কম্পিউটার আর্কিটেকচার ইত্যাদি কোর্স আকারে তৈরি করা। আমি মূলত ইউটিউবে ভিডিওগুলো আপলোড করা শুরু করেছিলাম। এরপর ডক্টর রাগিব হাসান ওনার শিক্ষক.কম সাইট চালু করেন এবং আমার ভিডিওগুলো সেখানে দিতে শুরু করি। যেহেতু শিক্ষক.কমে আর্টিকেলও দিতে হয় সেকারনে আমি আর্টিকেলও লিখতে থাকি। তবে আর্টিকেল লিখতে অনেক সময় লাগে। সেকারনে আমি সিদ্ধান্ত নিয়েছি আর্টিকেল না লিখে এখন থেকে শুধু ভিডিও আপলোড করব আর আগের মত http://u.lekhoni.com সাইটে সেগুলো রাখব। এরপর লেখার কাজটা করা যাবে সময় পেলে। আমি এখন ডাটা স্ট্রাকচার আর অ্যালগরিদমের ভিডিওগুলো তৈরি করছি। আর বাংলায় এই বিষয়ে একটা বই লিখছি। তবে এই বিষয়ে আারো অনেকে এগিয়ে আসছেন যারা আমার চেয়ে অনেক বেশি সক্রিয়। এটা অনেক আশার কথা।

সুবিন : এবারে অন্য প্রসঙ্গে যাওয়া যাক। আপনি তো বাংলাদেশে একটি উদ্যোগের (iFeri.com) সাথে জড়িত? সেটি নিয়ে যদি একটু বিস্তারিত বলতেন।
মনিরুজ্জামান : iFeri.com আমরা তিন বন্ধু (আমি, শামস, নাসির) মিলে শুরু করেছি ২০১১ সনে। এটা একটা অনলাইন শপিং উদ্যোগ। ঢাকায় কোনকিছু কিনতে কোথাও যেতে হলে যত সময় রাস্তায় আটকে থাকতে হয় সেটা খুবই অসুবিধাজনক। কেউ যদি বাসায় জিনিসটা ডেলিভারি দিয়ে যায় তাহলে জীবনের অনেক মূল্যবান সময় বাঁচে । এটাই শুরু করার আগে আমাদের “আমরা কি সুবিধা দিতে পারি” এই প্রশ্নের উত্তর ছিল। এটা আসলে একটা ব্যবসা উদ্যোগ। সফটওয়ার উদ্যোগ নয়। একজন সফটওয়ার ইঞ্জিনিয়ার হিসাবে কোন একটা কোম্পানিতে কাজ করলে, সেটা যত বড়বা ছোট কোম্পানিই হোক, সেটা নিজের দাবি করা যায় না। আর পুরোপুরি স্বাধীনতাও পাওয়া যায় না কখনও।

Wolfram এর তধ্য অনুযায়ী ঈদের মাসে ১৫ লক্ষ হিট হয়েছে আমাদের সাইটে। ১ লক্ষ এর বেশি মানুষ এসেছে। কম খরচে এইরকম লোড সাপোর্ট দেয়ার জন্য আমরা বেশকিছু প্রযুক্তি ব্যবহার করেছি। যেটা নিয়ে iFeri.com এ লেখার ইচ্ছা আছে ভবিষ্যতে।

এরকম ১২টি সাক্ষাৎকার নিয়ে প্রকাশিত হয়েছে “প্রোগ্রামিং ক্যারিয়ার গাইডলাইন : এক ডজন প্রোগ্রামারের কথা”। বইটি পাওয়া যাচ্ছে নীলক্ষেতের হক লাইব্রেরি ও রকমারি ডট কম-এ। বিস্তারিত জানতে ওপরের ছবিতে ক্লিক করুন।

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

উদ্যোক্তা বিষয়ক সাক্ষাৎকার – সুবিন

“দেশের তরুণ আইটি উদ্যোক্তাদের গল্প”
বাংলাদেশের তথ্যপ্রযুক্তি খাতে তরুণদের অবদান অপরিহার্য, মূলত তরুণ প্রযুক্তিবিদদের চৌকস দক্ষতা ও অপরিসীম ধৈর্য্যের দ্বারা এই খাত এগিয়ে চলছে প্রতিনিয়ত। বেশিরভাগ দেশী-বিদেশী বিভিন্ন প্রতিষ্ঠানে চাকুরীরত থাকলেও কিছু ব্যাতিক্রমও রয়েছেন। বেশ কয়েকজন প্রতিভাবান তরুণ অন্য জায়গায় চাকরি করার বদলে নিজেরাই গড়ে তুলেছেন প্রতিষ্ঠান, চাকরি দিচ্ছেন অন্যদের, আয় করছেন বৈদেশিক মুদ্রা, অণুপ্রেরণা হয়ে আছেন তাদের নবীনদের মধ্যে!
তাদের সফলতা, ব্যর্থতা, অর্জন আর পেছনের গল্প নিয়ে জানুয়ারি, ২০১৩ সংখ্যা থেকে “কম্পিউটার জগত” ম্যাগাজিনে প্রতি সংখ্যায় প্রকাশিত হবে একটি করে সাক্ষাৎকার। আশা করি এর মাধ্যমে নবীনরা অনূপ্রাণিত হবে তাদের অভীষ্ট স্বপ্ন “আইটি উদ্যোক্তাতা” হওয়ার লক্ষে। এই সিরিজ সাক্ষাৎকারগুলোর প্রথম পর্বে থাকছে দেশের একজন স্বনামধন্য  সফটওয়্যার প্রকৌশলী এবং সফল তরুণ আইটি উদ্যোক্তা তামিম শাহ্‍‍রিয়ার (সুবিন) এর, সাক্ষাৎকারটি নিয়েছেন মৃণাল কান্তি রায় দীপ।

দীপঃ প্রথমে আপনি এবং আপনার প্রতিষ্ঠান সম্পর্কে কিছু বলুন?
সুবিনঃ আমি তামিম শাহ্‍‍রিয়ার। তবে পরিচিতজনেরা আমাকে সুবিন (ডাকনাম) নামেই ডাকে। পেশায় সফটওয়্যার প্রকৌশলী। আমি শাহজালাল বিজ্ঞান ও প্রযুক্তি বিশ্ববিদ্যালয়ের কম্পিউটার সায়েন্স ও ইঞ্জিনিয়ারিং বিভাগ থেকে স্নাতক সম্পন্ন করি ২০০৬ সালে। বর্তমানে আমি কাজ করছি আমার নিজের প্রতিষ্ঠান মুক্ত সফটওয়্যার লিমিটেড-এ। মুক্ত সফটওয়্যার প্রতিষ্ঠিত হয় ২০০৯ সালে। আমার সাথে সহপ্রতিষ্ঠাতা ছিলেন মোহাম্মাদ মাহমুদুর রহমান যিনি বর্তমানে মুক্ত সফটের চেয়্যারম্যান ও প্রধান কারিগরি কর্মকর্তার দায়িত্ব পালন করছেন।

দীপঃ আমাদের দেশের বেশীরভাগ শিক্ষার্থীরা পড়ালেখা শেষে চাকরি খুঁজতে ব্যস্ত থাকে সেক্ষেত্রে আপনি ভিন্ন হলেন কেন?
সুবিনঃ আসলে আমার উদ্যোক্তা হবার কোনো সুনির্দিষ্ট পরিকল্পনা ছিল না। আমার ক্যারিয়ার শুরু হয় একটি বেসরকারি বিশ্ববিদ্যালয়ে শিক্ষকতার মাধ্যমে। সেখানে ২ সেমিস্টার কাটানোর পড়ে আমি বুঝতে পারি যে আমি আসলে কিছু শিখছি না, তাই চাকরী ছেড়ে দেই। তারপরে সফটওয়্যার ইঞ্জিনিয়ার হিসেবে প্রথমে দেশের খ্যাতনামা একটি কোম্পানীতে যোগ দেই। সেখানে দেড় বছর কাজ করার পরে আরো দেড় বছর কাজ করি প্লেডম বাংলাদেশে (তৎকালীন ট্রিপার্ট ল্যাবস)। চাকরী করতে গিয়ে আমার মনে হয়েছে আমার পুরোপুরি মেধা ও শ্রম আসলে কাজে লাগাতে পারছি না। তাই আমার কাছে মনে হয়েছে নিজেই একটি প্রতিষ্ঠান খুলে ফেলি যেখানে আমি আমার মেধা ও শ্রমের পর্যাপ্ত ব্যবহার করতে পারবো।

দীপঃ ব্যাক্তিগত ভাবে একজন ভালো প্রোগ্রামার হওয়ায় আপনার কাছে হয়ত বিদেশী প্রতিষ্ঠানের আমন্ত্রন ছিলো, সেটা উপেক্ষা করে নিজে কিছু করার উৎসাহ এবং অনুপ্রেরণা কেমন করে পেলেন?
সুবিনঃ হ্যাঁ, বিদেশি প্রতিষ্ঠান থেকে আমি চাকরির ইন্টারভিউ অফার পেয়েছিলাম। ফেসবুক থেকে আমাকে চাকরির ইন্টারভিউ-র জন্য আমন্ত্রণ জানানো হয় ২০১০ সালের জুন মাসে, আর গুগল থেকে চাকরির ইন্টারভিউ অফার পাই ২০১১ সালের ফেব্রুয়ারি মাসে। তাদেরকে আমি তখন ইন্টারভিউ দিতে অপারগতা জানাই এবং আরো কয়েকবছর আমার নিজের দেশে কাটানোর ইচ্ছার কথা জানাই। সেগুলো উপেক্ষা করা আমার জন্য মোটেও কঠিন কিছু ছিল না। কারণ আমি দেশে থাকতে চেয়েছিলাম। আর দেশে থাকার অনেকগুলো কারণের মধ্যে প্রধান ছিল বাবা-মা’র সাথে থাকা।
আর এপিজে আবুল কালামের “উইসং অব ফায়ার” বইটি আমাকে অনুপ্রাণিত করেছে।

দীপঃ শুরুটা কেমন? মূলধন কি রকম এবং কতজন পেশাদার নিয়ে শুরু হয়েছিলো “মুক্ত সফটওয়্যার”?
সুবিনঃ তখন রেন্টএকোডার ডট কম (rentacoder.com) নামের একটি সাইটে আমি মাঝে মাঝে কাজ করতাম। সেখানে আমার রেটিং বেশ ভালো ছিল। সেটাকেই মূলত আমাদের ব্যবসার মূলধন হিসেবে ধরতে পারেন। আর টাকা বিনিয়োগ করতে হয়েছে ছয়-সাত লাখের মতো। সেই টাকা এসেছিল আমাদের নিজেদের জমানো টাকা থেকে। এ ছাড়া আমি ব্যাংক থেকে পার্সোনাল লোন নিয়েছিলাম। শুরুর সময় আমি যেহেতু চাকরি করতাম, মাহমুদ-ই কোম্পানী দেখাশোনা করত। ২০১০ এর জুন মাসে আমি চাকরি ছেড়ে পুরোপুরি নিজের প্রতিষ্ঠানে চলে আসি। ২০০৯ সাথে আমাদের কোম্পানিতে ফুলটাইম পেশাদার ছিল ৩ জন, আর ২০১২ সালে সেটি এসে দাঁড়ায় ১২ জনে।

দীপ: লোন পেতে কোনো সমস্যা হয় নি?
সুবিন: না, কারণ তখন আমি ভালো বেতনের চাকরি করতাম। তাই ব্যাংক খুশিমনেই আমাকে লোন দিয়েছে। তবে এখন মনে হয় দিবে না।

দীপঃ আপনার প্রতিষ্ঠান থেকে কি ধরনের সার্ভিস দেয়া হয়ে থাকে বা কি ধরনের প্রজেক্ট আপনারা নিয়ে থাকেন?
সুবিনঃ আমরা মূলত কাস্টমাইজড সফটওয়্যার তৈরি করি। আমাদের কাজের প্লাটফর্মে বেশ বৈচিত্র আছে। আমরা রিচ ইন্টারনেট অ্যাপ্লিকেশন (RIA – Rich Internet Application), সোশ্যাল মিডিয়া ভিত্তিক অ্যাপ্লিকেশন এবং মোবাইল অ্যাপ্লিকেশন ও গেমস (আইফোন, অ্যান্ড্রয়েড, ব্লাকবেরি ও জাভা এম ই) তৈরি করি। তবে সম্প্রতি আমরা ইআরপি (ERP – Enterprise Resource Planner) সফটওয়্যার তৈরি করছি এবং সেই সাথে বিগ ডাটা ও মেশিন লার্নিং নিয়ে কাজ করছি।

দীপঃ গ্রাহক সংগ্রহ হয়ে থাকে কেমন করে?
সুবিনঃ শুরুর দিকে ফ্রিল্যান্স মার্কেটপ্লেস ওয়েবসাইগুলো ছিল আমাদের ক্লায়েন্ট যোগাড় করার একমাত্র উপায়। তবে এখন রেফারেন্সের মাধ্যমেই বেশি ক্লায়েন্ট আসে।

দীপঃ বর্তমানে কতজন পেশাদার/কর্মী রয়েছে আপনার প্রতিষ্ঠানে?
সুবিনঃ বর্তমানে কোম্পানীতে ১২ জন সফটওয়্যার প্রকৌশলি কাজ করছেন। দেশের শীর্ষ প্রোগ্রামাররাই মুক্ত সফটে কাজ করে থাকেন। শুরু থেকে এ পর্যন্ত পাঁচ জন এসিএম আইসিপিসি ওয়ার্ল্ড ফাইনালিস্ট কাজ করেছেন মুক্ত সফটে – তাঁদের মধ্যে দুইজন এখন গুগলের মাউন্টেন ভিউ অফিসে কর্মরত, আরেকজন যুক্তরাষ্ট্রে পিএইচডি করছেন। এছাড়াও গুগল সামার অব কোডে অংশগ্রহনকারি, আন্তর্জাতিক গণিত অলিম্পিয়াডে অংশগ্রহনকারি ছেলেরা মুক্ত সফটওয়্যারে কাজ করছে। এক কথায় বলতে পারেন দেশের সেরা মেধাবী ও উদ্যমী তরুণদের আখড়া হচ্ছে মুক্ত সফটওয়্যার লিমিটেড।

দীপঃ প্রতিষ্ঠান ব্যবস্থাপনার জন্য আলাদা কোন ব্যবস্থাপনা টিম/বিভাগ কি রয়েছে?
সুবিনঃ ব্যবস্থাপনার কাজ আমি আর মাহমুদ মিলেই করি। ভবিষ্যতে আলাদা ব্যবস্থাপনা বিভাগ খোলার পরিকল্পনা আছে।

দীপঃ আপনার প্রতিষ্ঠানের অর্জন?
সুবিনঃ ব্যাক্তিগতভাবে প্রতিষ্ঠানের অনেকেরই জাতীয় ও আন্তর্জাতিক পর্যায়ে নানা রকম অর্জন রয়েছে। সেগুলোর বাইরে প্রতিষ্ঠানের অর্জনও কিছু আছে। vworker.com (পরে freelancer.com এটিকে কিনে নেয়) সাইটে আমরা এক নম্বর বাংলাদেশি প্রতিষ্ঠান। এছাড়া ইংল্যান্ডের একটি কোম্পানীর জন্য আমাদের বানানো একটি মোবাইল অ্যাপ্লিকেশন আন্তর্জাতিক একটি কেইস স্টাডি হিসেবে দেখানো হয় ২০১১ সালে। ২০১২ সালের বেসিস কোডওয়ারিয়র-এ আমাদের কোম্পানীর একটি দল অংশগ্রহন করে এবং পিএইচপি ট্র্যাকে তারা চ্যাম্পিয়ন হয়। এছাড়া ডাটা মাইনিংয়ের উপর একটি আন্তর্জাতিক প্রতিযোগিতায় আমরা সেরা ১০% এ ছিলাম।

দীপঃ আমাদের দেশের পরিপ্রেক্ষিতে একজন আইটি উদ্যোক্তা হওয়া কতটুকু গ্রহনযোগ্য?
সুবিনঃ এখানে আসলে গ্রহনযোগ্যতার কোনো প্রশ্ন আসে না। যেকোনো কাজ, যেখানে অন্যকে ক্ষতিগ্রস্ত না করে সৎপথে উপার্জন করা যায়, তা অবশ্যই গ্রহনযোগ্য। আপনি লক্ষ করে দেখবেন, বর্তমানে তরুণ প্রজন্মের মাঝে সরকারি চাকরির গ্রহনযোগ্যতা বেশ কম – কারণ সেখানে ঘুষ-দুর্নীতির সংস্কৃতি বেশ জাকিয়ে বসেছে। আর তরুণ প্রজন্ম দুর্নীতি-বিমুখ বলেই নিতান্ত বাধ্য না হলে কেউ সরকারি চাকরিতে যেতে চায় না। যদিও কিছু ব্যতিক্রম রয়েছে, তবে তা হাতেগোনা।

দীপঃ এক্ষেত্রে সরকারি সাহায্য কি দেয়া হয় বা সহায়তা কি পাওয়া যায় ?
সুবিনঃ বর্তমানে সফটওয়্যার কোম্পানীগুলোর জন্য সরকার ট্যাক্স মওকুফ করেছে। আর রয়েছে ইইএফ ফান্ড তবে এখন পর্যন্ত সেটার ভালো ব্যবহারের পরিবর্তে লুটপাটের কাহিনীই বেশি শোনা যায়। এ ব্যাপারে আপনারাই (আইটি সাংবাদিকরা) ভালো জানার কথা। এছাড়া অন্য কোনো সরকারি সাহায্য বা সহায়তার কথা আমার জানা নাই। যদিও সরকারের অনেক পরিকল্পনার কথা শোনা যায়, সেগুলো এখনও কল্পনাতেই আটকে আছে, বাস্তবায়ন হচ্ছে না।

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

দীপঃ আইটি উদ্যোক্তা হতে কি কি প্রয়োজন?
সুবিনঃ

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

——-আইটি উদ্যোক্তা হওয়ার জন্য তামিম শাহরিয়ারের কিছু টিপস——–

  • যথেষ্ট পরিমান টাকা সঞ্চয় করতে হবে যেন নতুন প্রতিষ্ঠান থেকে কোনো আয় ছাড়াই কমপক্ষে এক বছর চলা যায়
  •  ব্যক্তিগতভাবে কোনো কিছুর উপর ভালো দক্ষতা অর্জন করতে হবে।
  •  নতুন কোম্পানীতে অভিজ্ঞ ও দক্ষ ব্যক্তিদের নিয়োগ দিতে হবে। কারণ ছোট অবস্থায় অনভিজ্ঞ কাউকে নিয়ে তার দক্ষতা বাড়ানোর পিছনে সময় দেওয়া সম্ভব হয় না।
  •  ব্যাক্তিজীবনে ও প্রতিষ্ঠানের খরচের ব্যাপারে মিতব্যায়ি হতে হবে।
  • কোম্পানীর আয়-ব্যায়ের হিসাব (একাউন্টস) ঠিকভাবে রাখতে হবে।
  •  সকল প্রকার আর্থিক লেনদেন ব্যাংকের মাধ্যমে করার চেষ্টা করতে হবে।

কম্পিউটার জগত  দেশের শীর্ষস্থানীয় বাংলা কম্পিউটার ম্যাগাজিন। তারা ২০১৩ সাল থেকে দেশের তরুণ আইটি উদ্যোক্তাদের উপর একটি নিয়মিত ফিচার শুরু করে। সেই ফিচার সিরিজের জন্য প্রথম ইন্টারভিউ নিয়েছিলেন মৃণাল কান্তি রয় (দীপ)। সেটি ২০১৩ সালের জানুয়ারি মাসের সংখ্যায় প্রকাশিত হয়: http://www.comjagat.com/home/articles/morearticles/6654। 

মূল ইন্টারভিউ এখানে প্রকাশ করা হলো। আগামী দিনের তরুণ আইটি উদ্যোক্তাদের হয়ত কিছুটা কাজে লাগলেও লাগতে পারে।