Friday, May 28, 2021

গুগল এর #ইঞ্জিনিয়ার হতে গেলে যে প্রাতিষ্ঠানিক শিক্ষা কোন ফ্যাক্ট নয়, এটা গুগল এর সফটওয়্যার ইঞ্জিনিয়ারিং এ চান্স প্রাপ্ত একজন গুগলার এর কাছেই জেনে নিন।

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

১. প্রথমে লক্ষ্য অর্জন কর। আগেই লাফায়ো না। লক্ষ্যে পৌঁছানোর আগ পর্যন্ত ভান ধরে থাক।

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

২ মাস পর আমি অনলাইনে গেমের একটা ডেমো রিলিজ দিলাম। খুব আহামরি কোন গেম ছিল না। সিম্পল top down space shooter গেম। ডেমো রিলিজ দেয়ার পর দেখা গেল CodeFire নামের একটা স্টার্টআপ কোম্পানী একই টাইপের একটা গেম নিয়ে কাজ করছে। তারা আমার সাথে যোগাযোগ করল। হিসাব-নিকাশ করে বললাম যদি তোমরা আমাকে এই কাজের জন্য হায়ার কর তাহলেই আমি এটার কাজ বন্ধ করে তোমাদের প্রোজেক্টে কাজ করব। তারা একটা অফার করল আমাকে। আমি রাজি হয়ে তাদের সাথে কাজ করলাম।

ওয়েট! ওয়েট!! ওয়েট!!! আমাকে চিটার-বাটপার বলা শুরু করো না প্লিজ! আমি আমার কোম্পানীর সাথে এই পুরো বিষয়টি বেশ সুন্দর ভাবে মিটমাট করেই গেছি। তারাও খুশি, আমিও খুশি! :)

২.এমন কারো বন্ধু হও যে তোমাকে একজন মেন্টর হিসেবে গাইড করবে

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

যাই হোক, Double Helix এ কাজ করার সময় আমার মেন্টর ছিলেন Nathan Hunt. তার মত ধৈর্য্যশীল আর নরম মনের মানুষ আমি আর দেখি নি। আমি অসংখ্য বার অনেক সাধারণ সাধারণ বিষয় জানতে এই চমৎকার মানুষটির অফিসে দৌঁড়িয়েছি। প্রশ্নগুলো হয়ত একদিনের ছিল এরকমঃ “how can I smoothly interpolate from one rotation matrix to another?” অথবা আরেক দিন জিজ্ঞেস করতামঃ “how should I implement moving capsule-to-cylinder collision detection?” তিনি প্রতিটি প্রশ্নের উত্তরই সুন্দর ভাবে আগ্রহ ভরে আমাকে বুঝিয়ে বলতেছ। এর এক বছর পর আমার গুগলে চাকরি হবার এক মাস পর তিনিও গুগলে যোগ দেন। :)

আমার প্রতিটা মেন্টরই আমাকে একটু একটু করে সঠিক পথের সন্ধান দিয়েছেন। কোন একটা প্রবলেমের ব্যাপারে আমি যেভাবে চিন্তা করছি তারা হয়ত আমার চিন্তা করার লাইনটাই অন্য দিকে ডাইভার্ট করে দিয়েছেন। আমাকে নতুন করে চিন্তা করতে শিখিয়েছেন। আমি কৃতজ্ঞ তাদের কাছে।

৩. শূণ্যস্থান পূরণ কর

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

তুমি যেভাবে নিজের ঘাটতি পূরণ করতে পারবে তার একটা লিস্ট দেয়ার চেষ্টা করছিঃ

এই ল্যাঙ্গুয়েজগুলোর যে কোন একটির উপর এক কথায় Master হয়ে যাওঃ C, C++, Objective-C, Java, PHP, Python বা Ruby. আর অন্য কোন একটাতে মোটামুটি fluency নিয়ে আসো। আর এই ল্যাঙ্গুয়েজগুলোর ব্যাপারেও টুকটাক ঘাটাঘাটি করে পরিচিত হওঃ Scala, Haskell বা Lisp.

Data structure-গুলো শিখ। যতগুলোর নাম জানতে পারো পারলে সবগুলো নিজে নিজে কোড করে implement করো। সেগুলোর Time complexity সম্পর্কে জানো। (কমেন্টে আবার জিজ্ঞেস কইরো না কোন কোন ডেটা স্ট্রাকচার শিখব? উইকিতে গিয়া সার্চ দাও। যত বেশি পারো শিখ। ভালোর কোন শেষ নাই।)

প্রচুর প্রবলেম সলভ কর। এই লিংকটা দেখো আর যতগুলো পারো সলভ করো।

নিজের একটা পোর্টফোলিও বানাও। যেই প্রোজেক্টগুলো শেষ করেছ সেগুলো তো দিবেই, যেগুলো শুরু করে শেষ করতে পার নাই সেগুলোও add করে দিবা। প্রোজেক্টগুলো হতে পারে প্রোগ্রামিং এর বিভিন্ন ফ্রেমওয়ার্ক, মোবাইল এপ্লিকেশন বা ওয়েব এপ্লিকেশ, গেমস ইত্যাদি।

৪. আত্মবিশ্বাস অর্জন কর

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

এর এক বছর পর আমি আবার এপ্লাই করি। এইবার “Education” এর পার্টটা পুরোপুরি চেপে যাই। একদিন হয়ত ঠাট্টা-বিদ্রুপ করার জন্যেই একজন ভদ্রমহিলা ফোন দিয়ে একটা technical phone-screen interview নেয়ার জন্য সময় চাইলেন!!! আমি তার কাছে প্রস্তুতি নেয়ার জন্য দুই সপ্তাহ সময় চাইলাম এবং তিনি রাজি হলেন। এরপর শুরু হল আমার প্রচন্ড প্রস্তুতি নেয়ার। এই দুই সপ্তাহের মধ্যে যত data structure আর algorithm একজন মানুষের পক্ষে মাথার মধ্যে গুজে দেয়া সম্ভব সেগুলো করতে লাগলাম। দিনের মধ্যে ১২-১৪ ঘন্টা কোড করতাম তখন। প্রতিদিন প্রায় ১০০ টার মত প্রবলেম সলভ করতাম। আমি রীতিমত চোখে অন্ধকার দেখা শুরু করলাম। আমি ততক্ষণ পর্যন্ত নিজেকে এরকম অমানসিক পরিশ্রম করা থেকে থামাতে পারছিলাম না যতক্ষন না পর্যন্ত গুগলের ইন্টারভিউয়ের ভয়টা আত্মবিশ্বাস বা উত্তেজনায় রূপান্তরিত হয়।

আমার মনে আছে ইন্টারভিউয়ের সময় ওদের প্রতিটা প্রশ্নের উত্তর একরকম ছুড়ে দিচ্ছিলাম। রীতিমত বোমা বিস্ফোরণের মত শোনাচ্ছিল আমার উত্তরগুলো। ইন্টারভিউ বোর্ডের লোকজন আমার সাথে বেশ মজা করছিলেন। আমার বিশ্বাস তারা বুঝতে পারছিলেন গুগলে যাওয়ার ব্যাপারে আমি কতটা উত্তেজিত আর তাদের দেয়া প্রবলেমগুলোকে আমি ঠিক কিভাবে welcome করছিলাম।

ইন্টারভিউ বোর্ড থেকে দেয়া কয়েকটা প্রবলেম নিচে উল্লেখ করছিঃ

1) Given a set of 2-dimensional points, compute a skyline. This was easy. I drew upon a common data structure known as a max heap. There are several solutions, here is a good one.

2) Design Microsoft Paint. This was by far the most fun problem. I started by drawing up interfaces and a class diagram. I made mention of a Paint Bucket and the interviewer asked me to implement it. Luckily, I knew how to implement an iterative, breadth-first traversal with my eyes closed thanks to TopCoder.

3) Describe your software virtues. This was an “open-ended” discussion interview. I talked about the types of testing and when they are valuable (e.g., unit, integration, acceptance). I talked about consistent style for maintainability of code. And so on. Things you would find in books like Code Complete or Effective Java.

গুগলের ইন্টারভিউয়ের প্রতিটা রাউন্ড আমি খুব উপভোগ করেছি। প্রতিটা প্রবলেম সলভ করে দারুণ ভাল লেগেছিল। ইন্টারভিউয়ের পর নিজের কাছেই বেশ ভাল লাগছিল। কিন্তু মনের মধ্যে ভয় থেকেই যাচ্ছিল ‘যদি ওরা না ডাকে?’ ভয়ে ভয়ে দিন কাটাচ্ছিলাম। একদিন Santa Clara-য় sushi দিয়ে lunch সারছিলাম। তখন আমার কাছে কল আসল। আমাকে সফটওয়্যার ইঞ্জিনিয়ার পদের জন্য একটা অফার করা হল। আর আমি অত্যন্ত আনন্দের সাথে তা গ্রহন করলাম। আর সেদিনই আমি নিশ্চিত হলাম যে, ইঞ্জিনিয়ার হবার জন্য আমাকে আর কলেজ/ইউনিভার্সিটিতে ফেরত যেতে হচ্ছে না!

No comments:

Post a Comment

Googles Salary

#GooglesSalary অনেকেই আমাকে বলেছিলেন, ভাইয়া গুগল এর বেতন নিয়ে একটা পোস্ট করবেন..? অনেকেই এটা নিয়ে কনফিউজড। তবে আমি জানি না, আপনারা কেন গুগ...