প্রোগ্রামিং শেখার এক ডজন টিপস্

 প্রথম প্রোগ্রামিং ল্যাঙ্গুয়েজ হিসেবে সি (C) বেশ জনপ্রিয় ও বহুল ব্যবহৃত। বিভিন্ন প্রোগ্রামিং প্রতিযোগিতায় (স্কুল-কলেজ-বিশ্ববিদ্যালয় পর্যায়ে) সি ব্যবহার করা হয়। কলেজে আইসিটি কোর্সের সি ব্যবহার করা হয় এবং বেশিরভাগ বিশ্ববিদ্যালয়েও প্রথম প্রোগ্রামিং কোর্সে সি ব্যবহার করা হয়। সি ভালোভাবে শিখতে গিয়ে অনেকেই নানান সমস্যায় পরে। তাই আমার অভিজ্ঞতা থেকে কিছু পরামর্শ দিলাম।

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

১) প্রোগ্রামিংয়ের পেছনে নিয়মিত সময় দিতে হবে। একটানা কয়েকঘণ্টা (২ থেকে ৫ ঘণ্টা)। সপ্তাহে কমপক্ষে ৫ দিন। এভাবে মাসের পর মাস। প্রোগ্রামিং করার সময় অন্য কিছু, যেমন টিভি দেখা, খেলা দেখা, ফেসবুক – এসব করা যাবে না।

২) প্রথমে একটা বিষয় পড়ে বোঝার চেষ্টা করতে হবে। প্রথম পড়াতেই পুরোটা বুঝতে পারা যাবে না (বেশিরভাগ ক্ষেত্রেই) এবং তাতে কোনো অসুবিধা নেই। যেকোনো একটা বই দিয়ে শুরু করতে হবে এবং বইয়ের প্রত্যেকটা উদাহরণ নিজে প্রোগ্রাম লিখে চালিয়ে দেখতে হবে।

৩) প্রোগ্রামিংয়ে অনেক সময়ই কেন হয় প্রশ্নের উত্তর পাওয়া যাবে না (আসলে পাওয়া যাবে, তবে অনেক পরে, কখনও কয়েক মাস পরে, কখনও আরো বেশি সময় পরে)। যেমন: scanf ফাংশনে ভেরিয়েবলের আগে & চিহ্ন কেন ব্যবহার করা হয়, সেটা নিয়ে শুরুতে বেশি মাথা ঘামানো দরকার নাই। কিভাবে ব্যবহার করতে হয়, সেটা জানলেই হবে। তবে প্রোগ্রামিং শিখতে থাকলে একসময় এর উত্তর পেয়ে যাবে। শুরুতে কী করলে কী হয়, সেটাই গুরুত্বপূর্ণ। এজন্য বেশি বেশি প্রোগ্রাম লিখতে হবে, এবং প্রোগ্রামিং করার সময় পূর্ণ মনোযোগ দিতে হবে।

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

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

৬) যেই বই দিয়েই সি শেখা শুরু কর না কেন, সেটা দুইবার পড়তে হবে (এবং সেই বইতে যা বলা হয়েছে, তা করতে হবে)। তারপরে কমপক্ষে আরো একটা বই পড়তে হবে।

৭) ক্লাসের পরীক্ষায় (মানে প্রোগ্রামিং কোর্সের পরীক্ষায়) কম নাম্বার পেলে মন খারাপ করা চলবে না। কে কতটুকু প্রোগ্রামিং পারে সেটা আসলে পরীক্ষায় যাচাই করা খুব কঠিন।

৮) i++, ++i এসব জিনিস নিয়ে শুরুর দিকে মাথা ঘামানো মানে সময় নষ্ট করা, যদিও এটা পরীক্ষায় অনেক শিক্ষকেরই প্রিয় প্রশ্ন। ভেরিয়েবল, কন্ডিশনাল লজিক, লুপ, অ্যারে, ফাংশন – এসব জিনিস ভালোভাবে শিখতে ও এগুলো ব্যবহার করতে পারতে হবে।

৯) সি মোটামুটি শেখা হয়ে গেলে সি দিয়ে যেকোনো ওয়েবসাইট থেকে ৫০-১০০ টা সমস্যা সমাধান করতে হবে, তাহলে হাত ও মাথা পাকবে।

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

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

প্রোগ্রামিং নিয়ে আনন্দে সময় কাটুক সবার!

নোট: প্রোগ্রামিং শুরু করার আরো কিছু গাইডলাইন এখানে আছে : http://programabad.com/questions/1447/-

প্রোগ্রামিং ল্যাঙ্গুয়েজ

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

আমি যখন কলেজে পড়তাম, তখন কিউ-বেসিক (Q Basic) নামে একটা প্রোগ্রামিং ল্যাঙ্গুয়েজ শেখার ব্যর্থ চেষ্টা করেছিলাম। কিউ-বেসিক ল্যাঙ্গুয়েজটা আমাদের সিলেবাসে ছিল আর কী। এইচএসসি পরীক্ষার পরে কম্পিউটার কিনি, তখন এইচটিএমএল (HTML) শিখলাম কিছুটা, যদিও এটা ঠিক প্রোগ্রামিং ল্যাঙ্গুয়েজ না। তারপরে ২০০১ সালের শুরু থেকে সি (C) শেখা শুরু করি। আমাদের ভার্সিটির ক্লাস শুরু হয় ২০০১ সালের মে মাসে, আর ততদিনে সি এর বেসিক কিছুটা শেখা হয়েছে। আমি আমার বাকী ভার্সিটি-জীবন এর সুবিধা ভোগ করি। আমার যদি ভার্সিটির সি কোর্সের ক্লাশ থেকে সি শেখা লাগতো, তাহলে একটু অসুবিধাই হতো হয়ত, যেটা আমার অনেক ক্লাসমেটকে দেখে বুঝতে পেরেছি। সি শেখার সময় প্রথম বছরে ৩-৪টা বই কিনেছিলাম, যদিও সবগুলো বই শুরু থেকে শেষ পর্যন্ত পড়ি নাই। এক বছর সি শেখার পরে আমি হার্বার্ট শিল্ডের টিচ ইয়োরসেল্ফ সি প্লাস প্লাস বইটা পড়ি। কিন্তু এরপরে আর আমার সি প্লাস প্লাস (C++) চর্চা করা হয় নাই।

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

ভার্সিটির সেকেন্ড ইয়ারে অবজেক্ট ওরিয়েন্টেড কোর্স ছিল। সেই কোর্সে জাভা (Java) শিখি। আর তারপরের সেমিস্টারে একটা প্রজেক্টও করি জাভা ব্যবহার করে। তারপরে ২০০৬-২০০৭ সালে কিছু টুকটাক কাজ করতে জাভা ব্যবহার করেছিলাম।

সম্ভবত ফোর্থ ইয়ারে আমাদের মাইক্রোপ্রসেস কোর্স ছিল, সেই কোর্সের ল্যাবের জন্য এসেম্বলি ল্যাঙ্গুয়েজ (Assembly Language) শিখতে হয়েছিল।

আমার প্রথম প্রফেশনাল চাকরি ছিল টাইগার আইটি-তে, ২০০৭ সালের মাঝামাঝি। সেখানে আমি যেই প্রজেক্টে জয়েন করলাম, সেই প্রজেক্টে পার্ল (Perl) প্রোগ্রামিং ল্যাঙ্গুয়েজ ব্যবহার করতে হয়। কিন্তু আমি আগে কখনও এই ল্যাঙ্গুয়েজের নাম শুনি নাই। তাই বলে আমার কিন্তু চাকরি পেতে সমস্যা হয় নাই। কারণ ভালো কোম্পানীগুলো বেশি গুরুত্ব দেয় প্রবলেম সলভিং স্কিলের ওপর, প্রোগ্রামিং ল্যাঙ্গুয়েজ শেখার ওপর নয়।

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

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

২০১৫ সালের মাঝামাঝি আমি সিঙ্গাপুরের গ্র্যাব নামক কোম্পানীতে ইন্টারভিউ দেই। বেশ কয়েকটা ইন্টারভিউ হয় এবং সেখানে আমি সি ব্যবহার করি, প্রবলেম সলভ করার জন্য। ইন্টারভিউ শেষে অফার পেয়ে জয়েন করি। জয়েন করার পরে জানতে পারলাম যে এখানে গো (Go বা Golang) ব্যবহার করা হয়, তাই প্রথম কিছুদিন গো শিখি। লক্ষ্য করার বিষয় হচ্ছে এত বড় কোম্পানী এত বেতন দিয়ে অন্য দেশ থেকে ইঞ্জিনিয়ার হায়ার করছে, ওরা কিন্তু এই বিষয় নিয়ে মাথা ঘামায় নাই যে আমি গো পারি কী না। সুতরাং বোঝাই যাচ্ছে যে কয়টা প্রোগ্রামিং ল্যাঙ্গুয়েজ পারি, এটা আসলে বিবেচ্য বিষয় নয়। কম্পিউটার সায়েন্সের বেসিক জ্ঞান (ডাটা স্ট্রাকচার, অ্যালগরিদম, অপারেটিং সিস্টেম, ডাটাবেজ, অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং, নেটওয়ার্কিং ইত্যাদি) এবং প্রবলেম সলভিং স্কিল-ই একজন ভালো সফটওয়্যার ইঞ্জিনিয়ার হওয়ার পূর্বশর্ত। আর কাজ করতে করতে সফটওয়্যার ইঞ্জিনিয়ারিংটাও শেখা হয়ে যায়, তবে তার জন্য ভালো কোম্পানীতে কাজ করাটা জরুরী।