হার্ভার্ড, বুয়েট, সাস্ট কিংবা বিশ্বের যে কোনো ইঞ্জিনিয়ারিং ভার্সিটিতে যারা ইঞ্জিনিয়ারিং পড়তে যান তারা ইঞ্জিনিয়ারিং এর সিলেবাসে পদার্থ, রসায়ন, গণিত সহ কমার্সের বিভিন্ন বিষয় দেখে প্রথমেই উৎসাহ হারিয়ে ফেলেন । সবার মনে একটাই প্রশ্ন । আমি কম্পিউটার সায়েন্সের স্টুডেন্ট, আমি প্রোগ্রামিং শিখব, এলগরিদম শিখব, কিন্তু পদার্থ-রসায়নের দরকার কি? আর যাদের জীবনের উদ্দেশ্যই ইঞ্জিনিয়ারিং তারাও ভাববে, “যেই পদার্থ-রসায়ন আমার বাল্যকাল নষ্ট করে দিয়েছে, ইঞ্জিনিয়ারিং শিখতে এসেও কি তার হাত থেকে রক্ষা নেই?” হলফ করে বলতে পারি, প্রায় নব্বই ভাগ ইঞ্জিনিয়ারিং স্টুডেন্ট ইঞ্জিনিয়ারিং শিখতে গিয়ে এসব প্রযুক্তি বহির্ভূত বইকে অপছন্দ করে ।
এছাড়াও হাইস্কুলে পড়ার সময় গণিত করার সময় প্রায়ই সহপাঠীদের বলতে শুনেছি, এসব বীজগণিত, জ্যামিতি দিয়ে আসলেই কি বাস্তব জীবনে কোনো কাজ হবে? আমরা এগুলো শিখছি কেন? এবিষয়েও কিছু উদাহরণ দেয়ার চেষ্টা করব আজকের লেখায় ।
আমার আজকের আলোচনার বিষয়, ইঞ্জিনিয়ারিং শিখতে গিয়ে কি এসব গণিত-পদার্থ-রসায়নের আসলেই দরকার আছে? এই প্রশ্নের উত্তর ছোট্ট একটা উদাহরণ দিয়ে দিব । তার সাথে আজকের পোস্টে যেসব বিষয় নিয়ে আলোচনা করা হবে তার একটা লিস্ট ধরিয়ে দিইঃ-
আজকের আলোচনার বিষয়ঃ-
১। ইঞ্জিনিয়ারিং পড়ার জন্য পদার্থ-রসায়ন-গণিতের দরকার কেন? (উদাহরণসহ)
২। হাইস্কুল লাইফের সবচেয়ে কমন প্রশ্ন “এসব বীজগণিত-জ্যামিতি পড়ে কি হবে?”- এর উত্তর (উদাহরণসহ)
৩। শুধু এইচটিএমএল এবং জাভাস্ক্রিপ্ট দিয়ে কিভাবে সরলরেখা আঁকা যায় ( HTML5 ক্যানভাস ছাড়া)
এসব প্রশ্নের উত্তর আজকে উদাহরণসহ বুঝিয়ে দেয়া হবে । তার আগে আমরা ইঞ্জিনিয়ার, বিশেষ করে প্রোগ্রামারদের শ্রেণীবিন্যাস নিয়ে সামান্য আলোচনা করব ।
প্রোগ্রামার মানেই প্রোগ্রামার । শ্রেণীবিন্যাস বিষয়টা কোত্থেকে এলো এটা নিয়ে নিশ্চয়ই ভাবছেন । হ্যাঁ, প্রোগ্রামারদের মধ্যেও শ্রেণীবিন্যাস আছে ।
সাধারণভাবে দেখলেই বিষয়টা বুঝা যায় । কোনো কোনো প্রোগ্রামার (সঠিকভাবে বললে ডিজাইনার/ডেভেলপার) ওয়ার্ডপ্রেস থিম ও প্লাগইন দিয়ে ওয়েবসাইট তৈরী করে । আর কেউ কেউ জিনিসটাই ওয়ার্ডপ্রেস তৈরী করে । কেউ উইন্ডোজের সফটওয়্যার তৈরী করে । কেউ উইন্ডোজ তৈরী করে । কেউ জেকুয়েরি ব্যবহার করে ওয়েব এপ্লিকেশন তৈরী করে । কেউ জাভাস্ক্রিপ্ট থেকেই জেকুয়েরি তৈরী করে । সুতরাং, আমরা দুই ধরনের প্রোগ্রামার দেখতে পাচ্ছি । কেউ কেউ লাইব্রেরী বা সিস্টেম তৈরী করে, আর কেউ কেউ সেই লাইব্রেরী বা সিস্টেমের সাহায্য নিয়ে প্রোগ্রাম তৈরী করে । সুতরাং, প্রোগ্রামারের সাধারণত দুইটি বিভাগ দেখা যাচ্ছে ।
১। কোর লেভেল প্রোগ্রামার (যারা ভেতরের জিনিস তৈরী করে)
২। ফ্রন্ট লেভেল প্রোগ্রামার (কোর লেভেলের সহায়তায় জিনিস তৈরী করে)
তবে একই ব্যক্তি দুইটিই হতে পারে । কারণ যে লাইব্রেরী বানায় সে লাইব্রেরীর ব্যবহারও জানে তা বলাই বাহুল্য । আমাদের চারপাশে আমরা সবাই সাধারণত ফ্রন্ট লেভেল প্রোগ্রামার । মার্কেটপ্লেসে যারা কাজ করেন বা জব করেন তাদের অধিকাংশই ফ্রন্ট লেভেল যারা বিভিন্ন লাইব্রেরী ও ল্যাঙ্গুএজ দিয়ে কাজ করে থাকি ।
তবে শ্রেণীবিন্যাস কিন্তু কাউকে ছোট করে না । আসলে, লাইব্রেরী ব্যবহারকারী না থাকলে লাইব্রেরী তৈরী করারও যেমন মূল্য নেই, তেমনি লাইব্রেরী তৈরী না হলে ব্যবহার করারও উপায় নেই । তাই টেকনোলজি এগিয়ে নেওয়ার জন্য দুই ধরনের প্রোগ্রামারেরই দরকার আছে ।
তবে মর্যাদার দিক দিয়ে কোর লেভেল প্রোগ্রামার বেশী সন্মানের অধিকারী । একজন কোর লেভেল প্রোগ্রামার ফ্রন্ট লেভেলের সব কিছুই পারে, কিন্তু ফ্রন্ট লেভেল প্রোগ্রামার কোর লেভেলের কিছুই না পারাও অস্বাভাবিক কিছু না । সহজ ভাষায় বলতে হলেঃ-
নিউটন, আইনস্টাইন আমাদের কাছে তাঁদের জ্ঞান দিয়ে গেছেন বলেই আমরা আজ মহাকাশে যাত্রা করতে পারছি । এক্ষেত্রে নিউটন ও আইনস্টাইনকে কোর লেভেল ফিজিসিস্ট এবং যারা তাদের সূত্র দিয়ে কাজ করছি তারা সাধারন ফিজিসিস্ট । যদি কোর লেভেল কেউ মাধ্যম না দিয়ে যেত তাহলে ফ্রন্ট লেভেলের কারও কোনো ক্ষমতাই থাকত না কিছু করার । তাই অবশ্যই ফ্রন্ট লেভেলের কারও চেয়ে কোর লেভেলের কারও মূল্য অনেক বেশী ।
আজকের আলোচনার শেষে আমরা এবিষয়ে আরও স্বচ্ছ ধারণা লাভ করতে পারব ।
কম্পিউটার প্রোগ্রামিং এ সাধারণ বিষয়গুলোতে একাডেমিক শিক্ষার খুব বেসিক লেভেলের বিষয়গুলো প্রয়োজন হয় । বিশেষ করে গণিতের । যেমন ফাংশন, চলক, ধ্রুবক এসব জিনিসের ব্যবহার প্রত্যেক প্রোগ্রামারকেই নিত্যনৈমিত্তিক কাজে করতে হয় । কিন্তু একাডেমিক অন্য সব কিছুরই দরকার আছে আরও দক্ষতা অর্জনের জন্য ।
খুব সাধারণ মানের একটা বিষয় নিয়ে আজকে আলোচনা করব । আলোচনা যথাযথভাবে বুঝার জন্য বেসিক এইচটিএমএল, বেসিক সিএসএস এবং বেসিক জাভাস্ক্রিপ্ট এ ধারণা থাকলেই হবে ।
চমৎকার ব্যাপার হল জাভাস্ক্রিপ্ট পৃথিবীর একমাত্র প্রোগ্রামিং বা স্ক্রিপ্টিং ল্যাঙ্গুয়েজ যা পৃথিবীর সব ধরনের ডিভাইসে (মোবাইল, ট্যাব, কম্পিউটার) এবং সব ধরনের অপারেটিং সিস্টেমে কোনো বাড়তি সফটওয়্যার ছাড়াই এমনিতেই কাজ করতে পারে । তাই আজকে জাভাস্ক্রিপ্টে গণিতের কিছু প্রয়োগ দেখব ।
ওয়েব ডেভেলপমেন্ট ও ডিজাইনে যারা জড়িত আছি, তাদের কাছে একটা সাধারণ প্রশ্ন, “ওয়েবপেজ এ একটা সরলরেখা আঁকবেন কিভাবে?” । আমি জানি সবাই এটা পারবেন । একটা ডিভ নিয়ে কিছু ডিজাইন দিয়ে দিলেই হল । কিন্তু যদি বলা হয়, বাম থেকে ডানে বা উপর থেকে নিচে (আনুভূমিক ও উল্লম্ব বা তাদের সমান্তরাল) বাদে ভূমির সাথে নির্দিষ্ট কোণ (ধরি A) করে কোনো রেখা আঁকবেন কিভাবে? আমি জানি অনেকেই অবাক হবেন, এটা সম্ভব না । অনেকেই বলবেন সিএসএস ট্রন্সফর্ম রোটেশন দিয়ে করা যাবে । আবার কেউ কেউ বলবেন জাভাস্ক্রিপ্ট ক্যানভাসের কথা । হ্যাঁ, বিভিন্ন উপায় আছে । কিন্তু কম্পিউটার একটা সরলরেখা আঁকার জন্য ভেতরে ভেতরে কত কাজ করছে আপনি জানেন কি? আপনি অবাক হবেন যে, সিএসএস৩ এর ট্রান্সফর্ম বা এইচটিএমএল৫ এর ক্যানভাস ব্যবহার না করে শুধু সাধারন কোড দিয়েই এটা সম্ভব । তাহলে শুরু করা যাক ।
স্কুল/কলেজ জীবনে আমরা গ্রাফের অংক সবাই করেছি । যারা করিনি ভয় পাবার কিছু নেই । একটু দেখলেই বুঝা যাবে । একটা সরলরেখা মানে কি? সরলরেখা কাকে বলে?
- দুইটি বিন্দুর সংযোগের ফলে উৎপন্ন জ্যামিতিক আকৃতিকে সরলরেখা বলা যায় ।
এই সংজ্ঞা থেকেই আমরা সরলরেখা আঁকতে পারব । প্রথমে দুইটি বিন্দু নিতে হবে । তারপর তাদেরকে যোগ করে দিতে হবে । আর বিন্দু নিতে হলে বিন্দুর স্থানাংক নিতে হবে । স্থানাংকের জন্য দরকার গ্রাফ । গ্রাফের পরিচয় নতুন করে দেয়ার কিছু নেই । কিছু ক্ষুদ্র ক্ষুদ্র ঘরের সমষ্টিই একটি গ্রাফ । মজার ব্যাপার হল, আমাদের কম্পিউটার স্ক্রিন একটা গ্রাফ পেপারের বেশী কিছুই না । রেজুলেশন ১৯২০*১০৮০ বলতে কি বুঝি? এখানে দৈর্ঘ্যের দিকে ১৯২০ ঘর এবং প্রস্থের দিকে ১০৮০ ঘর আছে । কম্পিউটার গ্রাফিক্স এর ভাষায় এই ঘরগুলোর ক্ষুদ্রতম একককে বলা হয় পিক্সেল । এক পিক্সেল ঘর মানে একটি বিন্দু যার দৈর্ঘ্য এক পিক্সেল এবং প্রস্থো এক পিক্সেল । অসংখ্যা পিক্সেলের সমন্বয়েই আমাদের সিস্টেমের স্ক্রিন তৈরী হয় । আর পিক্সেলের বিভিন্ন রঙ এর পরিবর্তনের জন্যই আমরা দেখতে পাই ।
আমাদের সরলরেখা আঁকার জন্য বোঝার সুবিধার্থে একটা ভার্চুয়াল গ্রাফ পেপার তৈরী করে নিতে হবে । গ্রাফ পেপারের X’OX ও Y’OY অক্ষ থাকবে । নিচের কোডগুলোর মাধ্যমে আমরা গ্রাফ পেপার তৈরী করে নিতে পারিঃ-
এইচটিএমএলঃ
<div class="xox"></div>
<div class="yoy"></div>
সিএসএসঃ
.xox {position:absolute;width:500px;left:15px;top:200px;height:1px;background:black;} .xox:before {content:"X'";position:relative;top:-7px;left:-15px;} .xox:after {content:"X";position:relative;top:-7px;left:490px;}
.yoy {position:absolute;width:1px;height:500px;background:black;left:200px;top:20px;}.yoy:before {content:"Y";position:relative;top:-20px;left:-5px;}.yoy:after {content:"Y'";position:relative;top:500px;left:-7px;}
শুধুমাত্র দুইটি ডিভ নিয়ে তাদেরকে কিছু ডিজাইন দিয়ে এবং নামকরণ করে বিন্দুগুলো আঁকা হল ।
এখন আমরা O বিন্দু, মানে (0,0) বিন্দু নির্দিষ্ট করব । উপরের সিএসএস থেকে দেখা যায় দুইটি ডিভ পরস্পর উপর থেকে ২০০পিক্সেল দূরে এবং বাম দিক থেকে ২০০ পিক্সেল দূরে একত্র হয়েছে । সুতরাং, এটিই গ্রাফের মূলবিন্দু । মূলবিন্দু নির্দিষ্ট করতে নিচের কোড লিখিঃ-
এইচটিএমএলঃ
<div class="o_o"></div>
সিএসএসঃ
.o_o {position:absolute;left:200px;top:200px;background:white;width:1px;height:1px;}
তাহলে মূলবিন্দুর এইচটিএমএল ক্লাস হল “o_o” । এই ডিভের ভেতরে আমরা যেসব কোড লিখব সেগুলোর সবগুলোর পজিশন এই বিন্দু থেকেই নির্দিষ্ট করা যাবে । অর্থাৎ এর ভেতরে লেখা সব কোডের জন্য এই বিন্দুটি (০,০) বিন্দু হিসেবে কাজ করবে এখন ।
এখন আমরা এই গ্রাফে যাবতীয় কাজ করব । ধরা যাক, দুইটি বিন্দু (৫০,১০০) এবং (১০০,৫০) যাদের সরলরেখা আঁকতে হবে । বীজগণিতে গাণিতিক কাজের সুবিধার্থে আমরা বিন্দু দুটিকে (x1,y1) এবং (x2,y2) আকারে দেখতে বেশী পছন্দ করি । এবার স্মরণ করুন হাইস্কুল লাইফে বিভিন্ন সমীকরণ থেকে গ্রাফ কাগজে সরলরেখা আঁকার কথা । সাধারণত সরলরেখার সমীকরণ হয় ax+by+c=0 । সহজভাবে, ধরুন আপনার কাছে একটি রেখার সমীকরণ x+y=150 দেওয়া আছে । হাইস্কুল লাইফে কিভাবে এটিতে কাজ করতেন । প্রথমে y কে x এর মাধ্যমে (অথবা উলটো) প্রকাশ করতেনঃ-
x+y=150
or, y=150-x
তারপর x এর বিভিন্ন মানের জন্য y এর মান বের করতেনঃ-
x | 50 | 75 | 100 |
Y | 100 | 75 | 50 |
আর তারপর এই বিন্দুগুলো গ্রাফ পেপারে বসিয়ে বিন্দুগুলো যোগ করে দিলেই সরলরেখা পাওয়া যায় । এখানেও আমরা একই কাজ করব কম্পিউটার দিয়ে ।
যেহেতু আমাদের কাছে দুইটি বিন্দু আছে, তাই বিন্দুগুলো থেকে আগে সরলরেখার সমীকরণ নির্ণয় করতে হবে । ইন্টারমেডিয়েট লেভেল গণিত বই থেকে আমরা জানি, একটি সরলরেখার দুইটি বিন্দু (x1,y1) এবং (x2,y2) হলে সরলরেখার সমীকরণ হয়ঃ-
(x-x1)/(x1-x2)=(y-y1)/(y1-y2)
=> y-y1 = ((x-x1)*(y1-y2))/(x1-x2)
=> y=(((x-x1)*(y1-y2))/(x1-x2))+y1
এটিই হল সরলরেখার সূত্র । এই সূত্রে ডানদিকে x বাদে অন্য সবগুলোর মান জানা আছে । তাই x এর বিভিন্ন মানের স্থানাংক নেব আমরা লুপিং এর মাধ্যমে । ফলে y এর একটা মান পাওয়া যাবে । আর প্রত্যেকটা x এবং y কে মার্ক করলেই আমাদের সরলরেখা হয়ে যাবে ।
তাহলে, এখন আমরা একটা ফাংশন আঁকব যা উপরের সরলরেখার সমীকরণ থেকে বিভিন্ন স্থানাংক নিয়ে সরলরেখা তৈরী করবে । ফাংশনের বিভিন্ন অংশের তথ্য ফাংশনের ভেতরেই দেয়া আছেঃ-
function sorolrekha(A,B){
var x1=A[0], x2=B[0], y1=A[1], y2=B[1];
//Let's draw the polar dots
document.write("<div class='point' style='left:"+x1+"px;bottom:"+y1+"px;'>("+x1+","+y1+")</div>"); //A
document.write("<div class='point' style='left:"+x2+"px;bottom:"+y2+"px;'>("+x2+","+y2+")</div>"); //B
//Determine the larger value of "x" between "x1" and "x2"
if (x1>x2){x_large=x1;x_small=x2;}
else {x_large=x2;x_small=x1;}
//And the larger value of "y" between "y1" and "y2"
if (y1>y2){y_large=y1;y_small=y2;}
else {y_large=y2;y_small=y1;}
//And now, draw the line with "x" axis as unit
for (i=x_small;i<=x_large;i++){
x=i;
y=(((x-x1)*(y1-y2))/(x1-x2))+y1;
document.write("<div class='point' style='left:"+x+"px;bottom:"+y+"px;'></div>");
}
//Draw again with "y" axis as unit
for (j=y_small;j<=y_large;j++){
y=j;
x=(((y-y1)*(x1-x2))/(y1-y2))+x1;
document.write("<div class='point' style='left:"+x+"px;bottom:"+y+"px;'></div>");
}
}
সিএসেসঃ
.point {position:absolute;background:black;width:1px;height:1px;}
হয়ে গেল আমাদের ফাংশনের সম্পূর্ণ কাজ । মোটামুটি সরলরেখা বানানোর ফাংশন তৈরী হয়ে গেছে । এবার আগের দেখানো মত (৫০,১০০) ও (১০০,৫০) বিন্দু দুটির জন্য সরলরেখা আঁকানোর জন্য ফাংশনটাকে নিচের মত কল করতে হবেঃ-
sorolrekha([50,100],[100,50]);
সুতরাং, দেখা যাচ্ছে একটা সরলরেখা আঁকার জন্য আমাদেরকে গ্রাফ, সরলরেখার কিছু সূত্রের প্রয়োগ প্রোগ্রামে করতে হচ্ছে । এভাবে গ্রাফিক্স এর কাজে প্রয়োজন হয় গণিত । গেম তৈরীতে পদার্থবিজ্ঞানের প্রয়োজন বলার অপেক্ষা রাখে না । আর রসায়নের দরকার তো সব জায়গাতেই । এসব সূত্রের প্রয়োগ করেই কোর লেভেল ডেভেলপাররা তৈরী করেন বিভিন্ন লাইব্রেরী ফাংশন । আর সেসব ফাংশন দিয়েই আমরা কাজ করে থাকি । এখন একটু ভাবলেই বুঝতে পারবেন কোর লেভেল ডেভেলপারের প্রয়োজন কি । তথ্যপ্রযুক্তিকে আরও এক ধাপ এগিয়ে নিয়ে যেতে আমাদেরই কাজ করতে হবে । আমরা ফ্রন্ট লেভেল ডেভেলপাররা বিভিন্ন জিনিস নিয়ে কাজ করলে কেবল তার ব্যবহারই হয়, কিছু জিনিস তৈরী করতে পারব । কিন্তু যা আছে, তা নিয়ে কাজ করলে কেবলমাত্র চর্চা হবে । আমাদেরকে শুধু যা আছে তা নিয়ে কাজ করলে হবে না । তথ্যপ্রযুক্তিকে আরও এগিয়ে নিয়ে যেতে হবে । নতুন নতুন জিনিস আবিষ্কার করে অসম্ভবের সংজ্ঞাকে বদলে দিতে হবে । সম্ভাব্যতার সীমা বৃদ্ধি করতে হবে । আর এজন্য দরকার কোর লেভেলের কাজ । কারণ ভিত্তি যত মজবুত হবে, প্রাসাদ তত মজবুত হবে । আমাদের ভিত্তির পর্যায় থেকেই উন্নয়ন করতে হবে । যা আছে তা নিয়েই খুশী না থেকে নতুন নতুন জিনিস আবিষ্কার করতে হবে । চলুন, পৃথিবীকে আরও এক ধাপ এগিয়ে নিয়ে যাই । প্রযুক্তিকে আরও এক ধাপ এগিয়ে নিয়ে যাই । কম্পিউটারের জগত একটা আলাদা জগত । সেই জগতেও প্রয়োজন হয় আমাদের বাস্তব জগতের গণিত, পদার্থ, রসায়ন আর অন্যান্য সব । আপনি যদি সত্যিই একজন ভালো মানের ইঞ্জিনিয়ার হতে চান, তাহলে আশা করি এখন আর বলবেন না ইঞ্জিনিয়ারিং এর জন্য এসব একাডেমিক শিক্ষার প্রয়োজন কি?
১। সরলরেখা অংকন (সূত্রঃ দুইটি বিন্দুর সংযোগ)
২। ত্রিভূজ অংকন (সূত্রঃ তিনটি বিন্দুর পরস্পর সংযোগ)
৩। চতুর্ভূজ অংকন (সূত্রঃ চারটি বিন্দুর পাশাপাশি সংযোগ)
৪। কুড়ে ঘর অংকন (কয়েকটি বিন্দুর যথাযথ সংযোগ)
To find me on Facebook:
আমি andamus। বিশ্বের সর্ববৃহৎ বিজ্ঞান ও প্রযুক্তির সৌশল নেটওয়ার্ক - টেকটিউনস এ আমি 11 বছর 11 মাস যাবৎ যুক্ত আছি। টেকটিউনস আমি এ পর্যন্ত 6 টি টিউন ও 5 টি টিউমেন্ট করেছি। টেকটিউনসে আমার 0 ফলোয়ার আছে এবং আমি টেকটিউনসে 0 টিউনারকে ফলো করি।
আমি মনে করি ইঞ্জিনিয়ারিং পরতে পদার্থ, রসায়ন, গণিত এগুলোর প্রয়োজন আছে। কিন্তু বাংলা, সোস্যাল সায়েন্স, কমার্সের সাব্জেক্টগুলার কোন দরকারই নাই…
শুধু এই সাবজেক্ট গুলার জন্য সেমিস্টার ফাইনাল পরীক্ষায় পয়েন্ট কম আসে.. 🙁