Showing posts with label CSE. Show all posts
Showing posts with label CSE. Show all posts

Wednesday, November 8, 2017

হার্ভাড ইউনিভার্সিটিতে কম্পিউটার সাইন্স এবং প্রোগ্রামিং এ সূচনা মূলক একটি কোর্স CS50

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

CS50 এর কোর্সটি অনলাইনেও করা যায়। সব গুলো ভিডিও ইউটিউভে রয়েছে। ভিডিও দেখেই আমার কাছে অনেক ভালো লেগেছে। নন মেজর একটা কোর্স এত সুন্দর করে পড়ানো হচ্ছে। এটা ইন্ট্রো কোর্স হলেও অনেক কিছু একটা কোর্সেই আলোচনা করেছে। অ্যালগরিদম, প্রোগ্রামিং, TCP/IP, HTTP, HTML, CSS, PHP, JS, MVC, SQL, Artificial Intelligence ইত্যাদি।

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

কম্পিউটার সাইন্স, প্রোগ্রামিং, অ্যালগরিদম, ওয়েব প্রোগ্রামিং, আর্টিফিশিয়াল ইন্টিলিজেন্স ইত্যাদি সম্পর্কে ব্যাসিক ধারণা নিতে চাইলে দেখতে পারেন এ লিঙ্কটিঃ http://cs50.tv কোর্স, স্লাইড সবই রয়েছে। ইউটিউব চ্যানেলঃ https://www.youtube.com/user/cs50tv যেখানে নতুন নতুন অনেক ভিডিও রয়েছে।

* Jakir Hossain

Wednesday, August 3, 2016

সফটওয়্যার ইঞ্জিনিয়ার হতে চাইলে একজন ইউনিভার্সিটির স্টুডেন্টকে একাডেমিক পড়াশোনার পাশাপাশি কি ধরণের প্রস্তুতি নেওয়া উচিত ?

আসসালামু 'আলাইকুম, নাহমাদুহু ওয়ানুসাল্লি আলা রাসুলিহিল কারিম, আম্মা বা'দ।
Ariful Islam ভাই খুবই সুন্দর একটি উদ্যোগ নিয়েছেন, নবীন ইউনিভার্সিটি স্টুডেন্টদের একাডেমিক সময়ে কি কি প্রস্তুতি নিতে হবে যেন পড়াশোনা শেষে জব পাওয়া ও জব-এ কাজ করার সহজ হয় - এ বিষয়ে তিনি বিভিন্নজনের মতামত সংগ্রহ করছেন এবং কম্পাইল করে পরবর্তীতে কম্বাইন্ড ভার্শন বের করার কাজ করছেন। এটি নিঃসন্দেহে খুবই প্রয়োজনীয় এবং যুগোপযোগী উদ্যোগ। উনার রিকোয়েষ্ট এ আমার কিছু মতামত পেশ করছি, আশা করি কাজে লাগতে পারে। 
 
১। স্কিল ডেভেলপমেন্ট এর জন্য ইউনিভার্সিটির প্রথম ও দ্বিতীয় বছয় প্রোগ্রামিং কন্টেস্ট এ সময় দিলে ভালো হয়, তখন প্রোগ্রামিং এর প্রতি একটা টান তৈরি হবে এবং প্রব্লেম সলভিং এর মজা টা পাওয়া যাবে। একটা সমস্যা কে কিভাবে ছোট ছোট ভাগে ভেংগে সলভ করতে হয়, কোন কোন সময় কোন ধরণের এলগরিদম ব্যবহার করতে হয়, কখন কম্প্রোমাইজ করতে হয় ইত্যাদি বিষয়ে একটা ভালো ধারণা এই সময় তৈরি হয়। ইউনিভার্সিটি গুলোতে প্রায়ই সিনিয়ররা কিংবা স্যারেরা কন্টেস্ট সংক্রান্ত বুটক্যাম্প বা নিদেনপক্ষে গাইডলাইন সেশন করে থাকেন, সেগুলোতে অংশগ্রহন করা উচিত। যারা CSE/ICT এর না, তারা সাধারণত ইউনিভার্সিটি থেকে কন্টেস্ট এ অংশগ্রহণ করতে পারেন না - তাদের অনলাইন কন্টেস্ট গুলাতে সময় দিতে হবে। অনলাইন কন্টেস্ট এর জন্য কয়েকট জনপ্রিয় সাইট হলঃ topcoder, codechef, uva, hackerrank
 
২। এর পরের ২ বছরে একটা নির্দিষ্ট track (PHP/.NET/Java/Android/iOS/C) বেছে নিয়ে তার উপর স্পেশালাইজেশন তৈরি করা উচিত। এর জন্য প্রথমেই যেটা প্রয়োজন হবে সেটা হল কমপক্ষে ২-৩ টা ভালো বই কাভার টু কাভার পড়া এবং এর বিষয়গুলো আত্বস্থ করা। বইয়ের প্রতিটা কোড ব্লক, এক্সারসাইজ, প্রব্লেম সলভিং নিজ হাতে টাইপ করে করে রান করে দেখতে হবে। অনেক সময় বিরক্তি আসতে পারে, কিন্তু তারপরও এটি চালিয়ে যেতে হবে ততদিন পর্যন্ত যতদিন নিজের মনে কনফিডেন্স না আসে। অনেক সময় এরকম হতে পারে যে একটা track এ অনেকদিন সময় দেয়ার পরও হচ্ছে না, তখন অন্যান্য track নিয়ে চেষ্টা করা যেতে পারে। অনেকে চিন্তা করেন যে কোনটা দিয়ে শুরু করবেন - একটু ঢুঁ মেরে দেখুন প্রত্যেকটির সাইট ও অনলাইন ডকুমেন্টেশন এ, কাছের বড় ভাইদের জিজ্ঞেস করুন, ইন্ডাস্ট্রিতে কাজ করছে এমন কোন বন্ধু বা আত্বীয়কেও জিজ্ঞেস করে দেখতে পারেন। যেটা নিয়েই শুরু করুন না কেন, লেগে থাকতে হবে আর যথেষ্ট সময় দিলে যেকন লাইনেই ভালো করা সম্ভব।
 
৩। যখন মনে হবে যে একটা কনফিডেন্স আসছে, অনেক গুলো ছোট ছোট প্রজেক্ট হয়ে গিয়েছে আর সহজেই একটা প্রব্লেম সলভ করা যায় একটু চিন্তা করলে, তখন পার্সোনাল কিছু প্রজেক্ট তৈরিতে হাত দেয়া উচিত যেখানে এই জ্ঞান পরিপূর্ণ ভাবে কাজে লাগবে। হতে পারে একটা Small POS system / Student Management System / HR Management / URL shortener / Invoice Generator / Job site / Blog / Twitter clone / University Portal / E-commerce store etc এরকম যেকোন কিছু যা আপনার ভালো লাগে। অনলাইনে এধরণের ভালো ভালো সলিউশন গুলো থেকে ফিচার বাছাই করে সেগুলা ইম্প্লেমেন্ট করলে একটা আইডিয়া তৈরি হবে যে আসলে কি থাকে এধরণের সফটওয়্যার এ। যেমন একটা Invoice Generator বানানোর জন্য freshbooks.com, invoicemachine.com ইত্যাদি সাইট এ ফ্রি একাউন্ট করে দেখতে হবে কি কি ফিচার তারা দেয় এবং সেখান থেকে ৮/১০ টা মূল ফিচার নিয়ে নিজের একটা ভার্শন বানাতে হবে।
 
৪। একই সাথে ভালো ওপেন সোর্স প্রজেক্ট খুঁজে খুঁজে সেগুলার কোড পড়তে হবে ও ডাউনলোড করে চালিয়ে দেখতে হবে। কিছু কিছু যায়গায় মডিফাই করে দেখতে হবে কি ইম্পাক্ট হয়, কোন অংশ কিভাবে কাজ করে ইত্যাদি। একজন অভিজ্ঞ প্রোগ্রামার মাত্রই সে অন্যের লেখা প্রচুর কোড পড়ে এবং ভালো কোড দেখে নতুন নতুন জিনিস শেখে। যেমন ওপেন সোর্স Invoice Generator এর কোড হিসেবে invoiceninja.com এর কোড দেখা যেতে পারে, E-commerce store হিসেবে sylius.org এর কোড দেখা যেতে পারে।
 
৫। এরপর যদি সুযোগ থাকে তাহলে এরকম ১/২ টা প্রজেক্ট এ কন্ট্রিবিউট করতে পারলে খুব ভালো হবে। এক্ষেত্রে শুরু করতে হবে কোন বাগ সলভ / ডকুমেন্টাশন আপডেট / খুব ছোট কোন ইম্প্রুভমেন্ট ইত্যদি দিয়ে। এখানে অনেকের মধ্যে একটা হেসিটেশন কাজ করে যে "আমি করতে পারি এমন কিছু কি এখানে আছে?" / "আমার চেয়ে অনেক অনেক বড় বড় ডেভেলপার রা কাজ করছে, আমি কি পাত্তা পাবো?" ইত্যাদি - এগুলো মাথা থেকে ঝেড়ে ফেলে দিয়ে দেখতে হবে ছোট ছোট কাজ কি আছে এবং সেখান থেকে শুরু করতে হবে। গিটহাব এ এধরণের প্রজেক্ট এর কন্ট্রিবিউটর পেজ এ গেলে দেখা যাবে যে মাত্র ১টা কমিট করেছে এমন লোকও অনেক আছে। তারা যদি করতে পারে, তাহলে আমিও পারবো এমন মানসিকতা রাখতে হবে। যেমন invoicenija.com এর কন্ট্রিবিউটর পেজে দেখা যাবে যে ৮৫ জন কন্ট্রিবিউটর এর মধ্যে ২৯ জনের আছে ১টা করে কমিট, ১০ জনের আছে ২টা করে কমিট, ৭ জনের ৩টা করে কমিট, ৭ জনের ৪টা করে কমিট ইত্যাদি।
 
৬। স্কিল ডেভেলপমেন্ট এর পাশাপাশি আপডেটেড থাকার জন্য track এর রেগুলার আপডেট ফলো করতে হবে। এজন্য reddit, stackoverflow, quora, sitepoint, etc সাইটে সবসময় চোখ রাখতে হবে, পাশাপাশি নিজের track এর এগ্রেগেটেড সাইট গুলো ও ফোরাম গুলোও দেখতে হবে। যেমন PHP তে যারা কাজ করেন তারা planet-php.net, phpdeveloper.org, laravel-news.com, laracasts.com, symfony.fl ইত্যাদি সাইট এ চোখ রাখতে পারেন, অংশগ্রহণ করতে পারেন phpXperts গ্রুপ এ - http://bit.ly/phpxperts। নতুন কোন ফিচার / লাইব্রেরি / কোড স্নিপেট ভালো লাগলে ডাউনলোড করে চালিয়ে দেখতে হবে। আর এই ফিল্ডের বড় বড় অভিজ্ঞ প্রোগ্রামারদের ব্লগ এ নিয়মিত ভিজিট করতে হবে, তাদের পোষ্ট পড়তে হবে এবং তাদের চিন্তাধারা গুলো বুঝার চেষ্টা করতে হবে। দেশে কাজ করছেন এমন অভিজ্ঞ প্রোগ্রামারদেরদের সাথে যোগাযোগ রাখার চেষ্টা করা যেতে পারে, এজন্য তাদেরকে ফেসবুক/টুইটারে ফলো করতে হবে।
 
৭। এভাবে নিজের স্কিল যখন একটা পর্যায় পর্যন্ত পৌঁছে যাবে, তখন সম্ভব হলে কিছু ফ্রিল্যান্সিং কাজ করা যেতে পারে। এজন্য সরাসরি আপওয়ার্ক বা এধরণের ফ্রিল্যান্সিং সাইট থেকে বিড করে কাজ নেয়া যেতে পারে বা অন্য কোন টিম / বড় ভাইয়ের সাথে জয়েন্টলি কাজ করা যেতে পারে। উদ্দেশ্য হল হাত পাকানো - ক্লায়েন্ট এর সাথে কমিউনিকেশন, রিকোয়রমেন্ট বুঝা, এস্টিমেট করা, মাইলষ্টোন এ ভাগ করে কাজ করা, কাজের ডেলিভারি দেয়া, কমিটমেন্ট ধরে রাখা ইত্যাদি বিষয়গুলো এই ফাঁকে আয়ত্তে এসে যাবে। অনেক সময় বিভিন্ন কোম্পানী পার্ট-টাইম বা ইন্টার্নশিপ এর সুযোগ দেয়, সেরকম ম্যানেজ করতে পারলে আরো ভালো। এখানে খেয়াল রাখতে হবে যে কাজ করতে গিয়ে যেন ওভার কমিটমেন্ট না হয়ে যায় - এমন যেন না হয় যে সময় মত কাজ না দিতে পারার কারণে কিংবা লো কোয়ালিটির কাজের কারণে নিজের বা নিজের কমিউনিটির বা দেশের সুনাম নষ্ট হল। এই বিষয়ে অনেক সুন্দর সুন্দর আর্টিকেল ও গাইডলাইন অনলাইন এ পাওয়া যায় - সেগুলা পড়তে হবে এবং নিজেকে যতটা সম্ভব ডিসিপ্লিন এর মধ্যে রাখতে হবে। 
 
৮। গ্রাজুয়েশেন এর পর জব এর জন্য প্রস্তুতি হিসেবে একটা ভালো রেজুমে বানাতে হবে - এখানে হাইলাইট করতে হবে পার্সোনাল প্রজেক্ট, ওপেন সোর্স কন্ট্রিবিউশন, নিজের ব্লগ, পছন্দের সাইট/রিসোর্স এর লিঙ্ক ইত্যাদি। একটু খুঁজলেই সুন্দর সুন্দর রেজুমের ফরম্যাট পাওয়া যায় অনলাইন এ, একেবারেই না পেলে গুগল ডকস এর টেমপ্লেট থেকে বেছে নেয়া যেতে পারে। রেজুমে তে গৎবাঁধা সব টেকনোলজির নাম না দিয়ে স্পেশালাইজেশন গুলা হাইলাইট করতে হবে। ইউনিভার্সিটির প্রজেক্টওয়ার্ক গুলো যদি রেলেভেন্ট হয়, তাহলে সেগুলোর নাম দেয়ার পাশাপাশি হাল্কা বর্ণনা দেয়া যেতে পারে।
 
এভাবে প্রস্তুতি নিলে আশা করা যায় একজন নিজেকে জব ফিল্ডের জন্য তৈরি করতে পারবে। এখানে একটা কথা না বললেই নয়, সেটা হল কোন শর্টকাট উপায়ে রাতারাতি স্কিল অর্জন করার কোন উপায় নেই - সফল হতে হলে অবশ্যই সময়, মেধা ও শ্রম ব্যয় করতে হবে। কেউ যদি এরকম আশ্বাস দেয় যে একটা কোর্স করলেই চাকুরী পাওয়া যাবে, বা কয়েকটি টিউটরিয়াল পড়েই ফ্রিল্যান্সিং করে টাকা কামানো যাবে তাহলে বুঝতে হবে যে এখানে কোন ফাঁক আছে। এসব বিষয়ের দিকে না ঝুঁকে মূল লার্নিং এ সময় দিলেই সফল হওয়া যাবে।
 
সবার জন্য অনেক অনেক শুভকামনা। 
 
* Mohammad Emran Hasan

Monday, September 8, 2014

সিএসইর স্টুডেন্টরা হতাশ কেন ?

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

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

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

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

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

~যখন দেখি চার বছরের প্রকৌশল কোর্স সম্পন্ন করে কাউকে চাকরি পাওয়ার জন্য আবার ক্র্যাশ কোর্স করতে হয় তখন আসলে খুব অসহায় লাগে।

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


** লিখেছেন - Muhammed Hedayet

Tuesday, September 2, 2014

কম্পিউটার সায়েন্সের স্টুডেন্টদের কোন কোন বিষয়ে দক্ষ হতে হবে ?

১। স্ট্রাকচার্ড প্রোগ্রামিং
২। অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং
৩। ডিসক্রিট ম্যাথমেটিকস
৪। ডাটা স্ট্রাকচার
৫। অ্যালগরিদম
৬। ডাটাবেজ
৭। কম্পিউটার আর্কিটেকচার
৮। ওয়েব প্রোগ্রামিং
৯। সফটওয়্যার ইঞ্জিনিয়ারিং
১০। সফটওয়্যার অ্যানালাইসিস ও ডিজাইন
১১। কম্পিউটার নেটওয়ার্কিং
১২। আর্টিফিশিয়াল ইন্টেলিজেন্স

মোটামুটি সব ভার্সিটিতেই এগুলো পড়ায়। এসব বিষয়ে ওস্তাদ হয়ে যেতে হবে।

*পরামর্শ দিয়েছেন- তামিম শাহরিয়ার সুবিন