কম্পিউটার সাইন্সে পড়ার সময় নিজেকে প্রস্তুত করবেন যেভাবে

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

“Never settle for anything less than what you deserve. It’s not pride, it’s self-respect.” ― Chanakya

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

প্রথম বর্ষ

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

প্রোগ্রামিং সম্পর্কে ব্যাসিক আইডিয়া নেওয়ার পর অনলাইন জাজ গুলোতে গিয়ে প্রোগ্রামিং প্রব্লেম সলভ করার চেষ্টা করতে পারেন। অনেক গুলো অনলাইন জাজ রয়েছে। শুরু করতে পারেন https://codeforces.com/ অথবা https://onlinejudge.org/ দিয়ে। শুরুর দিকে Ad Hoc প্রব্লেম গুলো সলভ করার চেষ্টা করতে পারেন। প্রথম দিকে হয়তো বুঝতে অসুবিধে হতে পারে। দুই একটা সলভ করার পর সব সহজ লাগবে। যেমন UVA অনলাইন জাজের 100,102, 111, 113, 119, 120, 133, 136, 146, 147, 347 সমস্যা গুলো দিয়ে শুরু করতে পারেন। এগুলো তুলনামূলক সহজ। ICPC সম্পর্কে জানার চেষ্টা করুণ। যারা ICPC তে অংশ নিচ্ছে, তাদের সাথে যোগাযোগ করে জেনে নিতে পারেন কিভাবে আপনি নিজেও ICPC কন্টেস্ট করতে পারেন।

অনেকের কাছে হয়তো কম্পিটিটিভ প্রোগ্রামিং ভালো নাও লাগতে পারে। তারা একাডেমিক কোর্সের বিষয় গুলো ভালো করে শিখলেই হবে।

দ্বিতীয় বর্ষ

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

অনলাইন জাজ গুলোতে গেলে ক্যাটেগরি অনুযায়ী সমস্যা গুলো সর্ট করে নেওয়া যাবে। সমস্যা গুলো কঠিন মনে হলে গুগল করে সহজ সমস্যা গুলো বের করে নেওয়া যাবে। যেমন  Beginning Algorithm Contests (Rujia Liu)  এর সমস্যা গুলো দেখতে পারেন। একই ভাবে গ্রাফ থিউরি, ডেটা স্ট্র্যাকচার, ডাইনামিক প্রোগ্রামিং রিলেটেড সমস্যা গুলো সমাধান করার চেষ্টা করতে পারণে।

তৃতীয় বর্ষ

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

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

যাদের কম্পিটিটিভ প্রোগ্রামিং ভালো না লাগবে, তারা নিজের পছন্দের প্রোগ্রামিং ল্যাঙ্গুয়েজের জনপ্রিয় কোন ফ্রেমওয়ার্ক শিখতে পারেন।

কম্পিটিটিভ প্রোগ্রামিং করেন বা নাই করেন, তৃতীয় বর্ষের মধ্যে নিচের কনসেফট গুলো ভালো ভাবে জানা উচিত।

  • ডিসক্রিট ম্যাথেম্যাটিক্স ও এই সম্পর্কিত অ্যালগোরিদমঃ Tree (BST, Tree Traversals), Graph, DFS, BFS, Topological Sorting, Minimum Spanning Tree (Prim’s Minimum Spanning Tree (MST), BackTracking (n-Queen’s Problem), Shortest Paths (Dijkstra’s shortest path algorithm), Maximum Flow ( Ford-Fulkerson Algorithm for Maximum Flow Problem)  ইত্যাদি।
  • সর্টিং অ্যালগরিদমঃ Insertion Sort, Selection Sort, Merge Sort, Quicksort, Counting Sort, Heap Sort ইত্যাদি।
  • ডেটা স্ট্র্যাকচার সম্পর্কিত অ্যালগোরিদমঃ Stack, Queue,  Linked List, Min Heap and Max Heap ইত্যাদি।
  • অন্যান্য অ্যালগোরিদম গুলো যেমনঃ Brute Force, Divide and Conquer, Greedy Programming, Dynamic Programming সম্পর্কিত অ্যালগরিদম সম্পর্কে জানা থাকা দরকার।

চতুর্থ বর্ষ

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

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

যারা কম্পিটিটিভ প্রোগ্রামিং করে, তাদের বেশির ভাগই গুগল, অ্যাপল, মাইক্রোসফটের মত কোম্পানিতে খুব সহজে যেতে পারে। দেখতে পারেন সফটওয়ার ইঞ্জিনিয়ার হিসেবে ইন্টারভিউর প্রস্তুতি

কেউ যদি এখানেই থামতে না চায়, সাজেস্ট করব মেশিন লার্নিং, ডেটা সাইন্স ইত্যাদি সম্পর্কে পড়তে। এছাড়া ক্যাগেল কম্পিটিশন শুরু করতে।


এখন কেউ বলতে পারে, আমি এসব কম্পটিটিভ প্রোগ্রামিং টোগ্রামিং করব না। ফ্রিল্যান্সিংই করব। তার জন্যও সহজ একটা গাইডলাইন দিতে পারি।

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

মোবাইল অ্যাপ ডেভেলপমেন্ট

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

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

ওয়েব ডেভেলপমেন্ট শিখতে চাইলে

এর জন্য সবার আগে শিখতে হবে HTML এবং CSS। খুবি সহজ লাগবে শিখতে। এরপর যে কোন একটা ওয়েব প্রোগ্রামিং ল্যাঙ্গুয়েজ শিখে নিলেই হবে। অনেক গুলো ল্যাঙ্গুয়েজ আছে। ওয়েব ডেভেলপমেন্টের ক্ষেত্রে সবচেয়ে বেশি ব্যবহৃত হয় PHP, JavaScript, Python ইত্যাদি। এসব শেখার পর একটা ফ্রেমওয়ার্ক সম্পর্কে জানলে ওয়েব ডেভেলপমেন্ট শুরু করা যাবে। বিস্তারিতঃ ক্যারিয়ার গাইডঃ ওয়েব ডেভেলপমেন্ট

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

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

“Never settle for anything less than extraordinary.”

এই পোস্টে অনেক গুলো লিঙ্ক দেওয়া আছে। লিঙ্ক গুলোতে গেলে প্রতিটা বিষয় সম্পর্কে আরো বিস্তারিত জানা যাবে।

Leave a Reply