প্রোগ্রামিং সংক্রান্ত নানান বই ঘরে বসে অনলাইনে অর্ডার করতে ক্লিক করুন এখানে

বাংলা ভাষায় পাইথন দিয়ে প্রোগ্রামিং শেখার ফ্রি বই - http://pybook.subeen.com

প্রোগ্রামিং ভাবনা

লেখক: তানভীরুল ইসলাম, পিএচইডি অধ্যয়নরত, ন্যাশনাল ইউনিভার্সিটি অব সিঙ্গাপুর।

The most profound technologies are those that disappear. They weave themselves into the fabric of everyday life until they are indistinguishable from it. -Mark Weiser [১]


আমরা কি অনুভব করি কী অভাবনীয় একটা সময়ে আমরা বাস করছি? এইতো একটু আগে আমি ডানে ঘুরে তাকালাম, আর পাঁচ ফুট দূরেই জানালার কাঁচে দেখতে পেলাম নিজের প্রতিবিম্ব। আমার ছবিটা কাঁচে প্রতিফলিত হয়ে আবার আমার কাছে ফিরে আসতে অতিক্রম করলো প্রায় দশ ফুট। এটুকু যেতে আসতে আলোর সময় লাগলো দশ ন্যানো সেকেন্ড [২]। আমার ল্যাপটপের প্রসেসরের ক্লক স্পিড যদি ১ গিগা হার্জ হতো তাহলে এই অতি ক্ষুদ্র সময়ে সে প্রায় দশটা ছোট ছোট গণনার কাজ করে ফেলতে পারতো! কিন্তু আমার কম্পিউটারের স্পিড প্রায় ২ গিগা হার্জ। এবং তার প্রসেসরের কোর আছে ৪ টা অর্থাৎ এই সময়েই সে, ৮০ টা গণনা কাজ শেষ করে ফেলেছে [৩]। এ প্রসঙ্গে ভাবা যেতে পারে অ্যাপোলো ১১ নভোযানের কথা যেটাতে করে প্রথম মানুষ চাঁদে পৌছায়। এই নভোজানের নিয়ন্ত্রণকারী কম্পিউটার পুরো ৮ দিনের মিশনে যতগুলো গণনা কাজ করেছে, তা আমার এই ল্যাপটপ করতে পারবে মাত্র ৩ মিনিটে [৪]! আমি নিশ্চিত তুমি যে কম্পিউটারের সামনে বসে এই লেখাটা পড়ছো সেটার ক্ষমতাও এর কাছা-কাছি। কিন্তু কই, আমরা তো চাঁদে চলে যাচ্ছি না। এমনকি চাঁদে চন্দ্রবিন্দুর সাথে তুলনীয় কোনো “অ-সাম” কাজও করতে পারছিনা আমরা কেউই। কী অভাবনীয় এক শক্তির আধার হাতে নিয়ে বসে আছি তা আমরা উপলব্ধি করছি না। আর যারা একটু আধটু উপলব্ধি করি তারাও সেটা ব্যবহারে ব্যর্থ হই কারণ আমরা প্রোগ্রামিং জানি না। আর জানলেও, কখনো নিজের কম্পিউটারের ক্ষমতার আলটিমেট ব্যবহার কী করতে পারি তা নিয়ে ভাবি না আমরা কেউ। কম্পিউটারের সাহায্যে কী অভাবনীয় সব কাজ কর্ম করা হচ্ছে এবং নিজেদের অজান্তেই তার কতকিছু আমরা ব্যবহার করছি সেসব নিয়ে লিখবো অন্য কখনো। আজকের এই লেখাটি যারা প্রোগ্রামিং শিখতে চায় তাদের জন্য। অনেকটা প্রশ্ন-উত্তর ফরম্যাটে লেখা [৫]। পাঠকরা যদি নিজেদের প্রশ্নের উত্তর মূল লেখায় না পান, তাহলে মন্তব্যের ঘরে জিজ্ঞেস করলে পরবর্তী ভার্সনে আপডেট করে নেওয়া হবে। তাহলে শুরু করা যাক,


১) প্রথম কোন প্রোগ্রামিং ভাষাটি শিখবো? সি, সি++, পাইথন, জাভা, হ্যাসকেল, প্যাসকেল, লিসপ, অ্যাসেম্ব্লি, ম্যাটল্যাব, আর, ফরট্রান ... ব্লা ব্লা ব্লা?

উত্তর:- সি

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


২) আমি একবার একটা প্রোজেক্টের জন্য সি(বা ম্যাটল্যাব বা আর বা ম্যাথমেটিকা বা জাভা) ব্যবহার করেছি। আমি কি এখন প্রোগ্রামিং শিখতে গিয়ে বাড়তি সুবিধা পাবো?

উত্তর:- এই তো কামটা সেরেছ। তোমার জন্য প্রোগ্রামিং শেখা একেবারে নতুন কারো চেয়ে অনেকগুণ কঠিন হয়ে গেছে।

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


৩) শুনেছি প্রোগ্রামার হতে হলে খুব ক্রিয়েটিভ হতে হয়। আমার তো অতো ক্রিয়েটিভিটি নেই, আমি কি পারবো?

উত্তর:- একদম বাজে কথা।

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


৪) প্রোগ্রামিং ভাষা শেখার সবচেয়ে উপযুক্ত বয়স কোনটা? 


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

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


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

উত্তর:- ওরে কে কোথায় আছিস ওকে দুটো টাকা দে, কারণ ও সব কিছুতে সবার আগে লাভ খোঁজে।

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


৬) আমি ফিজিক্স, কেমিস্ট্রি, ম্যাথ বা বায়োলজি পড়ছি, কম্পিউটার প্রোগ্রামিং শিখে আমার কী হবে?

উত্তর:- তুমি হয়তো এসব বিষয়ে পড়েছ কিন্তু গবেষণা করছো না, বা এসব বিষয়ের সাম্প্রতিক গবেষণা নিয়ে খোঁজ খবর রাখো না। তাই এই প্রশ্ন করলে।

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


৭) প্রোগ্রামিং শিখে চাকরী পাবো কোথায়?

উত্তর:- যে প্রোগ্রামিং জানে, সে চাকরী খোঁজে না। চাকরীই তাকে খোঁজে।

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


৮) টিচ ইউওরসেল্ফ সি ইন ২১ ডেইজ নামক একটা বই কিনেছি। এটা পড়ে কি প্রোগ্রামিং শিখতে পারবো?

উত্তর:- না, পারবে না। ঠিক যেমন টিচ ইউরসেল্ফ ফ্রেঞ্চ ইন ২১ ডেইজ পড়ে একুশ দিনে ফরাসি ভাষা শিখতে পারবে না তেমন।

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


৯) সি শেখার জন্য কোন বই পড়বো?

উত্তর:- ইংরেজীতে হার্বার্ট শিল্ডের টিচ ইয়োরসেল্ফ সি [১০] বইটা দিয়ে শুরু করা যেতে পারো। এ ছাড়া বাংলায় সুবিন ভাই এর বই[৮] , এবং অন্যা আরো কিছু বই আছে। কয়েকটা ঘাটাঘাটি করে দেখতে হবে কোনটা ভালো লাগে।

কারণ:- একেক বই একেক জনের কাছে আবেদন সৃষ্টি করে। কোনো বিষয়ে পড়ে তেমন ভালো না লাগলে, শুরুতেই ভাবা ঠিক না যে বিষয়টা বোরিং। বরং খুব সম্ভবত তুমি যে বইটা পড়ছো, সেটা তোমার মন মত লেখা হয়নি। হাল না ছেড়ে একই বিষয়ে অন্য কোনো লেখকের অন্য কোনো বই চেষ্টা করে দেখ। এ ছাড়া ইন্টারনেটে অনেক রিসোর্স পাবে [৯]।


১০) প্রোগ্রামিং বই কীভাবে পড়ে?

উত্তর:- আগাপাশতলা।

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


১১) আমি আউটসোর্সিং করতে চাই। কিন্তু আপনি শুরুতে যেভাবে বললেন মনে হলো আউটসোর্সিং কে বাতিল করে দিলেন।

উত্তর:- আমি মোটেই তা বলিনি। আউট সোর্সিং করা খুবই ভালো। কিন্তু “ঘরে বসে আউট সোর্সিং করে বড় লোক হবো”, শুধু এরকম চিন্তা করে প্রোগ্রামিং শিখতে আসলে তুমি প্রোগ্রামিং এর অনেক মজা মিস করবে। এবং সম্ভবত ভালো প্রোগ্রামার হয়ে উঠতে পারবে না।

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


১২) এইসব ল্যাপটপ ডেস্কটপ কম্পিউটার আমার ভালো লাগে না। আমার লাগবে সুপার কম্পিউটার। কিন্তু সেটা আমি কোথায় পাবো?

উত্তর:- একেবারে শুরুতেই সুপার কম্পিউটারের অ্যাক্সেস তুমি পাবে না। কিন্তু সুপারকম্পিউটারের মত কম্পিউটার আসলে তোমার হাতের নাগালেই আছে।

কারণ:- সুপার কম্পিউটারে লক্ষ লক্ষ প্রসেসর থাকে, যারা একই সঙ্গে কাজ করে। ফলে এক ক্লক সাইকেলেই লাখ খানেক কাজ হয়ে যায়। নরমাল কম্পিউটারের প্রোগ্রামিং আর সুপার কম্পিউটারের প্রোগ্রামিং একটু আলাদা হয়। কিন্তু জেনে অবাক হবে, গেইম খেলার জন্য উচ্চক্ষমতার যে গ্রাফিক্স কার্ডগুলো তুমি ব্যবহার করো সেগুলো ব্যবহার করে তুমি প্যারালাল প্রোগ্রামিং করতে পারো। সি বা সিপ্লাসপ্লাসেই! [৬] যেটা তোমাকে প্রস্তুত করতে পারে, সত্যিকারের সুপার কম্পিউটার ব্যবহার করে বড় কোনো সমস্যা সমাধানের জন্য!


১৩) প্রোগ্রামিং করলে কি স্কুলের পড়ার ক্ষতি হয়?

উত্তর:- না।

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



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

উত্তর:- সম্ভবত তুমি সময় নষ্ট করছো ঠিকই। কিন্তু প্রোগ্রামিং করে নয়। অন্যকোনো ভাবে। ফলে তোমার রেজাল্ট খারাপ হচ্ছে।

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


পরবর্তীতে এখানে আরো কিছু প্রশ্ন-উত্তর যুক্ত করা যেতে পারে। লেখাটির প্রাথমিক সংস্করণ পূর্বে মুক্তমনায় প্রকাশিত।

সূত্রাবলী-
[১] Weiser, M. The Computer for the 21st Century. Scientific American , September, 1991.
[২] এক ন্যানো সেকেন্ডে আলো যায় 3x10^8x10^(-9)m = 30 cm = 11.81 inch =~ 1 foot
[৩] আসলে একটা ইন্স্ট্রাকশন সম্পন্ন হতে, অনেকগুলো ক্লক সাইকেল লাগে। কিন্তু প্রতি ক্লক সাইকেলে, প্রসেসরের একটা মাইক্রো ইন্স্ট্রাকশন সম্পন্ন হয় ঠিকই। আমরা হিসাবে সুবিধার্থে সেটাকেই ধরেছি। এক গিগা হার্জ মানে প্রতি ন্যানো সেকেন্ডে একটা করে ক্লক পাল্স।
[৪] অ্যাপোলোর পুরো মিশনের সময় ছিলো, 8 দিন 03 ঘন্টা 18 মিনিট 35 সেকেন্ড। তার কম্পিউটারের ক্লক স্পিড ছিলো ১ মেগাহার্জ। এক ক্লকে একটার বেশি মাইক্রোইনস্ট্রাকশন সম্পন্ন করা সম্ভব নয়। ফলে এই পুরো অভিযানের সময় সে যতগুলো মাইক্রো ইনস্ট্রাকশন চালাতে পারলো হিসাব করলে দেখা যায়, আমার ল্যাপটপ সেটা পারবে ৩ মিনিটের একটু কম সময়ে। এছাড়াও আমার কম্পিউটারের রেজিস্টার সংখ্যা, পাইপ লাইনিং, বাস উইড্থ, হিসাব করলে, ঐ পরিমান কাজ আসলে কয়েক সেকেন্ডে করতে পারার কথা এটার!
[৫] এগুলো আমার একান্তই ব্যক্তিগত মতামত। এতদিনের অভিজ্ঞতায় যতটুকু যা জেনেছি, শিখেছি তার আলোকে লেখা। যে প্রশ্নগুলো আলোচনা করেছি, আমার দেওয়া উত্তরগুলোই তাদের শেষ উত্তর নয়। কারণ শেষ কথা বলে কোনো কথা নেই। হা হা হা...
[৬] http://en.wikipedia.org/wiki/CUDA
[৭] http://www.sachalayatan.com/sporsho/43507
[৮] http://cpbook.subeen.com/
[৯] http://www.shikkhok.com/কোর্স-তালিকা/সি-প্রোগ্রামিং/
[১০] http://www.amazon.com/Teach-Yourself-C-Herbert-Schildt/dp/0078823110

৩১টি মন্তব্য:

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

    উত্তরমুছুন
    উত্তরগুলি
    1. though i know a little, but i think if freelancing is not your dream and your true dream is to be a better computer programmer then you should use c.

      by learning php you can do things easily whereas c will let you opportunity to understand how things are happening

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

    উত্তরমুছুন
  3. আমার কিছু প্রশ্নের উত্তর পেয়ে গেলাম আজ। অনেক ধন্যবাদ।

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

    উত্তরমুছুন
  5. আপনার লেখা পড়ে অনেক ভাল লেগেছে.....আপনাকে অনেক ধন্যবাদ।

    উত্তরমুছুন
  6. খুবই অনু্প্রেরণামূলক লেখা ।ভালো লাগলো ।

    উত্তরমুছুন
  7. আমার মতো নবীন প্রোগ্রামিং এ আগ্রহীদের কাছে লেখাটি দারুন অনুপ্রেরণামূলক। তবে আমি একটি বিষয়ে জানতে আগ্রহী যে, একজন ভাল প্রোগ্রামার হতে হলে সি এস ই(CSE) সাবজেক্ট নিয়ে পড়া কি জরুরি, অন্য সাবজেক্টে পড়ে কি একজন ভালো প্রোগ্রামার হওয়া সম্ভব ?

    উত্তরমুছুন
  8. I want to knows something, how I can learn programing? I don't have certificate but I know English very well. if possible then please reply me, this is my request to you.

    উত্তরমুছুন
  9. Thanks for your writing regarding Programing. It will help me in future.

    উত্তরমুছুন
  10. এবার চেষ্টা চালিয়ে যাব। আপনাকে অনেক ধন্যবাদ...

    উত্তরমুছুন
  11. অনেক ধন্নবাদ, খুব ভাল লাগল

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

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

    উত্তরমুছুন
  14. ১২ নাম্বার পয়েন্ট টা ভালো করে বুজলাম না

    উত্তরমুছুন
  15. ধন্যবাদ এমন একটা লেখার জন্য যেটা প্রোগ্রামিং এর জগতটাকে আরো আকর্ষনীয় করে তুলেছে আমার কাছে।

    উত্তরমুছুন
  16. অনাক অনুপ্রানিত হলাম ভাইয়া। অনেক ধন্যবাদ।

    উত্তরমুছুন
  17. বেশি মানুষকে বুঝানোর জন্য চমৎকার পোস্ট। পড়ে মনে হয়েছে আপনি যা বূঝাতে চেয়েছেন সেটি যথাযত ভাবে লিখতে পেরেছেন। খুব ভাল লাগল। অনন্ত শুভেচ্ছা। ভাল থাকবেন। আপনার লিখা পড়ে লোকজন উপকৃত হবেন।

    উত্তরমুছুন
  18. অসাধারণ পোস্ট, এমন অনুপ্রেরণামূলক আরো পোস্ট চাই যেন আমরা আমাদের প্রোগ্রামিং এর সূদুর ভ্রমনে উজ্জীবিত থাকতে পারি

    উত্তরমুছুন
  19. লেখাটি পড়ে খুবি ভাল লাগছে। ধন্যবাদ!

    উত্তরমুছুন
  20. আমার কিছু প্রশ্নের উত্তর পেয়ে গেলাম আজ। অনেক ধন্যবাদ।

    উত্তরমুছুন

এখানে বিষয়সংশ্লিষ্ট মন্তব্য কিংবা প্রশ্ন করা যাবে। বাংলায় মন্তব্য করার সময় বাংলা হরফে লিখতে হবে। আর রোমান হরফে লিখলে ইংরেজিতে লিখতে হবে। নতুবা মন্তব্য প্রকাশ করা হবে না। ধন্যবাদ।