# প্রোগ্রামিং ভাষা এবং টুলস অফ দ্য ট্রেডের পরিচিতি এই পাঠে প্রোগ্রামিং ভাষার মৌলিক বিষয়গুলো আলোচনা করা হয়েছে। এখানে আলোচিত বিষয়গুলো আজকের আধুনিক প্রোগ্রামিং ভাষার জন্য প্রযোজ্য। 'টুলস অফ দ্য ট্রেড' অংশে, আপনি ডেভেলপার হিসেবে সহায়ক কিছু সফটওয়্যার সম্পর্কে জানতে পারবেন। ![Intro Programming](../../../../translated_images/webdev101-programming.d6e3f98e61ac4bff0b27dcbf1c3f16c8ed46984866f2d29988929678b0058fde.bn.png) > স্কেচনোট: [Tomomi Imura](https://twitter.com/girlie_mac) ## প্রি-লেকচার কুইজ [প্রি-লেকচার কুইজ](https://forms.office.com/r/dru4TE0U9n?origin=lprLink) ## পরিচিতি এই পাঠে আমরা আলোচনা করব: - প্রোগ্রামিং কী? - প্রোগ্রামিং ভাষার প্রকারভেদ - প্রোগ্রামের মৌলিক উপাদান - পেশাদার ডেভেলপারের জন্য সহায়ক সফটওয়্যার এবং টুলস > আপনি এই পাঠটি [Microsoft Learn](https://docs.microsoft.com/learn/modules/web-development-101/introduction-programming/?WT.mc_id=academic-77807-sagibbon) এ নিতে পারেন! ## প্রোগ্রামিং কী? প্রোগ্রামিং (কোডিং নামেও পরিচিত) হলো একটি ডিভাইস যেমন কম্পিউটার বা মোবাইল ডিভাইসের জন্য নির্দেশনা লেখার প্রক্রিয়া। আমরা এই নির্দেশনা একটি প্রোগ্রামিং ভাষার মাধ্যমে লিখি, যা পরে ডিভাইস দ্বারা ব্যাখ্যা করা হয়। এই নির্দেশনার সেটগুলো বিভিন্ন নামে পরিচিত হতে পারে, যেমন *প্রোগ্রাম*, *কম্পিউটার প্রোগ্রাম*, *অ্যাপ্লিকেশন (অ্যাপ)* এবং *এক্সিকিউটেবল*। একটি *প্রোগ্রাম* হলো কোড দিয়ে তৈরি যেকোনো কিছু; ওয়েবসাইট, গেমস এবং ফোন অ্যাপগুলো প্রোগ্রাম। যদিও কোড না লিখেও প্রোগ্রাম তৈরি করা সম্ভব, কিন্তু এর অন্তর্নিহিত লজিক ডিভাইস দ্বারা ব্যাখ্যা করা হয় এবং সেই লজিক সম্ভবত কোড দিয়ে লেখা হয়েছে। একটি প্রোগ্রাম যখন *চালানো* বা *এক্সিকিউট* করা হয়, তখন এটি নির্দেশনা সম্পাদন করে। আপনি যে ডিভাইস দিয়ে এই পাঠটি পড়ছেন, সেটি একটি প্রোগ্রাম চালাচ্ছে যা এটি আপনার স্ক্রিনে দেখাচ্ছে। ✅ একটু গবেষণা করুন: কে বিশ্বের প্রথম কম্পিউটার প্রোগ্রামার হিসেবে বিবেচিত? ## প্রোগ্রামিং ভাষা প্রোগ্রামিং ভাষা ডেভেলপারদের ডিভাইসের জন্য নির্দেশনা লেখার সুযোগ দেয়। ডিভাইস শুধুমাত্র বাইনারি (১ এবং ০) বুঝতে পারে, এবং *বেশিরভাগ* ডেভেলপারের জন্য এটি খুবই অকার্যকর যোগাযোগের মাধ্যম। প্রোগ্রামিং ভাষা হলো মানুষের এবং কম্পিউটারের মধ্যে যোগাযোগের মাধ্যম। প্রোগ্রামিং ভাষাগুলো বিভিন্ন ফরম্যাটে আসে এবং বিভিন্ন উদ্দেশ্যে ব্যবহার করা হয়। যেমন, জাভাস্ক্রিপ্ট প্রধানত ওয়েব অ্যাপ্লিকেশনের জন্য ব্যবহৃত হয়, আর Bash প্রধানত অপারেটিং সিস্টেমের জন্য ব্যবহৃত হয়। *লো লেভেল ভাষা* সাধারণত *হাই লেভেল ভাষার* তুলনায় ডিভাইসের জন্য নির্দেশনা ব্যাখ্যা করতে কম ধাপ প্রয়োজন হয়। তবে, হাই লেভেল ভাষার জনপ্রিয়তার কারণ হলো এর পাঠযোগ্যতা এবং সাপোর্ট। জাভাস্ক্রিপ্ট একটি হাই লেভেল ভাষা হিসেবে বিবেচিত। নিম্নলিখিত কোডটি জাভাস্ক্রিপ্ট (হাই লেভেল ভাষা) এবং ARM অ্যাসেম্বলি কোড (লো লেভেল ভাষা) এর মধ্যে পার্থক্য দেখায়। ```javascript let number = 10 let n1 = 0, n2 = 1, nextTerm; for (let i = 1; i <= number; i++) { console.log(n1); nextTerm = n1 + n2; n1 = n2; n2 = nextTerm; } ``` ```c area ascen,code,readonly entry code32 adr r0,thumb+1 bx r0 code16 thumb mov r0,#00 sub r0,r0,#01 mov r1,#01 mov r4,#10 ldr r2,=0x40000000 back add r0,r1 str r0,[r2] add r2,#04 mov r3,r0 mov r0,r1 mov r1,r3 sub r4,#01 cmp r4,#00 bne back end ``` বিশ্বাস করুন বা না করুন, *দুইটি কোডই একই কাজ করছে*: ১০ পর্যন্ত একটি ফিবোনাচ্চি সিকোয়েন্স প্রিন্ট করছে। ✅ ফিবোনাচ্চি সিকোয়েন্স [সংজ্ঞায়িত](https://en.wikipedia.org/wiki/Fibonacci_number) হয় এমন একটি সংখ্যার সেট হিসেবে, যেখানে প্রতিটি সংখ্যা পূর্ববর্তী দুইটি সংখ্যার যোগফল। এটি ০ এবং ১ থেকে শুরু হয়। প্রথম ১০টি ফিবোনাচ্চি সংখ্যা হলো ০, ১, ১, ২, ৩, ৫, ৮, ১৩, ২১ এবং ৩৪। ## প্রোগ্রামের উপাদান একটি প্রোগ্রামের একক নির্দেশনাকে *স্টেটমেন্ট* বলা হয় এবং সাধারণত একটি চরিত্র বা লাইন স্পেসিং থাকে যা নির্দেশনার শেষ বা *টার্মিনেশন* চিহ্নিত করে। একটি প্রোগ্রাম কীভাবে শেষ হয় তা প্রতিটি ভাষার জন্য ভিন্ন। প্রোগ্রামের স্টেটমেন্টগুলো ব্যবহারকারীর দেওয়া ডেটা বা অন্য কোথাও থেকে প্রাপ্ত ডেটার উপর নির্ভর করতে পারে নির্দেশনা সম্পাদনের জন্য। ডেটা প্রোগ্রামের আচরণ পরিবর্তন করতে পারে, তাই প্রোগ্রামিং ভাষাগুলো ডেটা সাময়িকভাবে সংরক্ষণ করার একটি উপায় নিয়ে আসে, যা পরে ব্যবহার করা যায়। এগুলোকে *ভেরিয়েবল* বলা হয়। ভেরিয়েবল হলো স্টেটমেন্ট যা ডিভাইসকে তার মেমোরিতে ডেটা সংরক্ষণ করতে নির্দেশ দেয়। প্রোগ্রামের ভেরিয়েবলগুলো অ্যালজেব্রার ভেরিয়েবলের মতো, যেখানে তাদের একটি অনন্য নাম থাকে এবং তাদের মান সময়ের সাথে পরিবর্তিত হতে পারে। কিছু স্টেটমেন্ট ডিভাইস দ্বারা সম্পাদিত নাও হতে পারে। এটি সাধারণত ডেভেলপার দ্বারা পরিকল্পিতভাবে লেখা হয় বা দুর্ঘটনাক্রমে ঘটে যখন একটি অপ্রত্যাশিত ত্রুটি দেখা দেয়। এই ধরনের নিয়ন্ত্রণ একটি অ্যাপ্লিকেশনকে আরও শক্তিশালী এবং রক্ষণাবেক্ষণযোগ্য করে তোলে। সাধারণত, এই নিয়ন্ত্রণের পরিবর্তন ঘটে যখন নির্দিষ্ট শর্ত পূরণ হয়। আধুনিক প্রোগ্রামিংয়ে একটি সাধারণ স্টেটমেন্ট যা প্রোগ্রাম কীভাবে চলবে তা নিয়ন্ত্রণ করে, সেটি হলো `if..else` স্টেটমেন্ট। ✅ আপনি এই ধরনের স্টেটমেন্ট সম্পর্কে পরবর্তী পাঠে আরও শিখবেন। ## টুলস অফ দ্য ট্রেড [![Tools of the Trade](https://img.youtube.com/vi/69WJeXGBdxg/0.jpg)](https://youtube.com/watch?v=69WJeXGBdxg "Tools of the Trade") > 🎥 উপরের ছবিতে ক্লিক করুন টুলিং সম্পর্কিত একটি ভিডিও দেখার জন্য এই অংশে, আপনি কিছু সফটওয়্যার সম্পর্কে জানবেন যা আপনার পেশাদার ডেভেলপমেন্ট যাত্রা শুরু করার সময় খুবই সহায়ক হতে পারে। একটি **ডেভেলপমেন্ট এনভায়রনমেন্ট** হলো টুলস এবং ফিচারের একটি অনন্য সেট যা ডেভেলপাররা সফটওয়্যার লেখার সময় প্রায়ই ব্যবহার করে। এই টুলগুলো ডেভেলপারের নির্দিষ্ট প্রয়োজন অনুযায়ী কাস্টমাইজ করা হয়েছে এবং সময়ের সাথে পরিবর্তিত হতে পারে যদি ডেভেলপার কাজের অগ্রাধিকার পরিবর্তন করে, ব্যক্তিগত প্রকল্পে কাজ করে, বা ভিন্ন প্রোগ্রামিং ভাষা ব্যবহার করে। ডেভেলপমেন্ট এনভায়রনমেন্টগুলো ডেভেলপারদের মতোই অনন্য। ### এডিটর সফটওয়্যার ডেভেলপমেন্টের জন্য সবচেয়ে গুরুত্বপূর্ণ টুলগুলোর একটি হলো এডিটর। এডিটর হলো যেখানে আপনি আপনার কোড লিখেন এবং কখনও কখনও যেখানে আপনি আপনার কোড চালান। ডেভেলপাররা এডিটরের উপর নির্ভর করেন আরও কিছু কারণে: - *ডিবাগিং* কোডের ত্রুটি এবং ভুলগুলো খুঁজে বের করতে সাহায্য করে, লাইন বাই লাইন কোড পরীক্ষা করে। কিছু এডিটরে ডিবাগিং সুবিধা থাকে; এগুলো নির্দিষ্ট প্রোগ্রামিং ভাষার জন্য কাস্টমাইজ এবং যোগ করা যায়। - *সিনট্যাক্স হাইলাইটিং* কোডে রঙ এবং টেক্সট ফরম্যাটিং যোগ করে, যা পড়া সহজ করে। বেশিরভাগ এডিটর কাস্টমাইজড সিনট্যাক্স হাইলাইটিংয়ের অনুমতি দেয়। - *এক্সটেনশন এবং ইন্টিগ্রেশন* হলো ডেভেলপারদের জন্য বিশেষায়িত টুল। এই টুলগুলো বেস এডিটরে অন্তর্ভুক্ত ছিল না। উদাহরণস্বরূপ, অনেক ডেভেলপার তাদের কোড ডকুমেন্ট করে ব্যাখ্যা করার জন্য যে এটি কীভাবে কাজ করে। তারা ডকুমেন্টেশনে টাইপো খুঁজে বের করতে সাহায্য করার জন্য একটি স্পেল চেক এক্সটেনশন ইনস্টল করতে পারে। বেশিরভাগ এক্সটেনশন নির্দিষ্ট এডিটরের জন্য ব্যবহারের উদ্দেশ্যে তৈরি করা হয়েছে এবং বেশিরভাগ এডিটর এক্সটেনশন খুঁজে বের করার একটি উপায় নিয়ে আসে। - *কাস্টমাইজেশন* ডেভেলপারদের তাদের প্রয়োজন অনুযায়ী একটি অনন্য ডেভেলপমেন্ট এনভায়রনমেন্ট তৈরি করতে সক্ষম করে। বেশিরভাগ এডিটর অত্যন্ত কাস্টমাইজযোগ্য এবং ডেভেলপারদের কাস্টম এক্সটেনশন তৈরি করার অনুমতি দেয়। #### জনপ্রিয় এডিটর এবং ওয়েব ডেভেলপমেন্ট এক্সটেনশন - [Visual Studio Code](https://code.visualstudio.com/?WT.mc_id=academic-77807-sagibbon) - [Code Spell Checker](https://marketplace.visualstudio.com/items?itemName=streetsidesoftware.code-spell-checker) - [Live Share](https://marketplace.visualstudio.com/items?itemName=MS-vsliveshare.vsliveshare) - [Prettier - Code formatter](https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode) - [Atom](https://atom.io/) - [spell-check](https://atom.io/packages/spell-check) - [teletype](https://atom.io/packages/teletype) - [atom-beautify](https://atom.io/packages/atom-beautify) - [Sublimetext](https://www.sublimetext.com/) - [emmet](https://emmet.io/) - [SublimeLinter](http://www.sublimelinter.com/en/stable/) ### ব্রাউজার আরেকটি গুরুত্বপূর্ণ টুল হলো ব্রাউজার। ওয়েব ডেভেলপাররা ব্রাউজারের উপর নির্ভর করেন তাদের কোড ওয়েবে কীভাবে কাজ করে তা দেখার জন্য। এটি এডিটরে লেখা HTML এর মতো একটি ওয়েব পেজের ভিজ্যুয়াল উপাদানগুলো প্রদর্শন করতেও ব্যবহৃত হয়। অনেক ব্রাউজার *ডেভেলপার টুলস* (DevTools) নিয়ে আসে, যা ডেভেলপারদের তাদের অ্যাপ্লিকেশন সম্পর্কে গুরুত্বপূর্ণ তথ্য সংগ্রহ এবং ধারণ করতে সাহায্য করে। উদাহরণস্বরূপ: যদি একটি ওয়েব পেজে ত্রুটি থাকে, কখন তা ঘটেছে তা জানা কখনও কখনও সহায়ক হতে পারে। ব্রাউজারের DevTools কনফিগার করা যেতে পারে এই তথ্য সংগ্রহ করার জন্য। #### জনপ্রিয় ব্রাউজার এবং DevTools - [Edge](https://docs.microsoft.com/microsoft-edge/devtools-guide-chromium/?WT.mc_id=academic-77807-sagibbon) - [Chrome](https://developers.google.com/web/tools/chrome-devtools/) - [Firefox](https://developer.mozilla.org/docs/Tools) ### কমান্ড লাইন টুলস কিছু ডেভেলপার তাদের দৈনন্দিন কাজের জন্য কম গ্রাফিকাল ভিউ পছন্দ করেন এবং কমান্ড লাইন ব্যবহার করে এটি অর্জন করেন। কোড লেখার জন্য প্রচুর টাইপিং প্রয়োজন এবং কিছু ডেভেলপার তাদের কীবোর্ডের ফ্লো ব্যাহত করতে চান না। তারা ডেস্কটপ উইন্ডো পরিবর্তন, বিভিন্ন ফাইল নিয়ে কাজ করা এবং টুল ব্যবহার করার জন্য কীবোর্ড শর্টকাট ব্যবহার করেন। বেশিরভাগ কাজ মাউস দিয়ে সম্পন্ন করা যায়, কিন্তু কমান্ড লাইনের একটি সুবিধা হলো অনেক কিছু কমান্ড লাইন টুলস দিয়ে সম্পন্ন করা যায় মাউস এবং কীবোর্ডের মধ্যে পরিবর্তন না করেই। কমান্ড লাইনের আরেকটি সুবিধা হলো এগুলো কনফিগারযোগ্য এবং আপনি একটি কাস্টম কনফিগারেশন সংরক্ষণ করতে পারেন, পরে এটি পরিবর্তন করতে পারেন এবং এটি অন্য ডেভেলপমেন্ট মেশিনে ইমপোর্ট করতে পারেন। যেহেতু ডেভেলপমেন্ট এনভায়রনমেন্টগুলো প্রতিটি ডেভেলপারের জন্য অনন্য, কিছু ডেভেলপার কমান্ড লাইন এড়িয়ে চলেন, কিছু সম্পূর্ণভাবে এর উপর নির্ভর করেন, এবং কিছু মিশ্র পদ্ধতি পছন্দ করেন। ### জনপ্রিয় কমান্ড লাইন অপশন কমান্ড লাইনের অপশনগুলো আপনার ব্যবহৃত অপারেটিং সিস্টেমের উপর নির্ভর করে ভিন্ন হবে। *💻 = অপারেটিং সিস্টেমে প্রি-ইনস্টল করা থাকে।* #### Windows - [Powershell](https://docs.microsoft.com/powershell/scripting/overview?view=powershell-7/?WT.mc_id=academic-77807-sagibbon) 💻 - [Command Line](https://docs.microsoft.com/windows-server/administration/windows-commands/windows-commands/?WT.mc_id=academic-77807-sagibbon) (CMD নামেও পরিচিত) 💻 - [Windows Terminal](https://docs.microsoft.com/windows/terminal/?WT.mc_id=academic-77807-sagibbon) - [mintty](https://mintty.github.io/) #### MacOS - [Terminal](https://support.apple.com/guide/terminal/open-or-quit-terminal-apd5265185d-f365-44cb-8b09-71a064a42125/mac) 💻 - [iTerm](https://iterm2.com/) - [Powershell](https://docs.microsoft.com/powershell/scripting/install/installing-powershell-core-on-macos?view=powershell-7/?WT.mc_id=academic-77807-sagibbon) #### Linux - [Bash](https://www.gnu.org/software/bash/manual/html_node/index.html) 💻 - [KDE Konsole](https://docs.kde.org/trunk5/en/konsole/konsole/index.html) - [Powershell](https://docs.microsoft.com/powershell/scripting/install/installing-powershell-core-on-linux?view=powershell-7/?WT.mc_id=academic-77807-sagibbon) #### জনপ্রিয় কমান্ড লাইন টুলস - [Git](https://git-scm.com/) (💻 বেশিরভাগ অপারেটিং সিস্টেমে) - [NPM](https://www.npmjs.com/) - [Yarn](https://classic.yarnpkg.com/en/docs/cli/) ### ডকুমেন্টেশন যখন একজন ডেভেলপার নতুন কিছু শিখতে চান, তারা সাধারণত ডকুমেন্টেশনের দিকে ঝোঁকেন এটি কীভাবে ব্যবহার করতে হয় তা শিখতে। ডেভেলপাররা প্রায়ই ডকুমেন্টেশনের উপর নির্ভর করেন টুলস এবং ভাষাগুলো সঠিকভাবে ব্যবহার করার জন্য এবং এটি কীভাবে কাজ করে তার গভীর জ্ঞান অর্জনের জন্য। #### ওয়েব ডেভেলপমেন্টের জনপ্রিয় ডকুমেন্টেশন - [Mozilla Developer Network (MDN)](https://developer.mozilla.org/docs/Web), Mozilla থেকে, যারা [Firefox](https://www.mozilla.org/firefox/) ব্রাউজার প্রকাশ করেছে - [Frontend Masters](https://frontendmasters.com/learn/) - [Web.dev](https://web.dev), Google থেকে, যারা [Chrome](https://www.google.com/chrome/) প্রকাশ করেছে - [Microsoft's own developer docs](https://docs.microsoft.com/microsoft-edge/#microsoft-edge-for-developers), [Microsoft Edge](https://www.microsoft.com/edge) এর জন্য - [W3 Schools](https://www.w3schools.com/where_to_start.asp) ✅ একটু গবেষণা করুন: এখন যেহেতু আপনি একজন ওয়েব ডেভেলপারের এনভায়রনমেন্টের মৌলিক বিষয়গুলো জানেন, এটি একজন ওয়েব ডিজাইনারের এনভায়রনমেন্টের সাথে তুলনা করুন। --- ## 🚀 চ্যালেঞ্জ কিছু প্রোগ্রামিং ভাষার তুলনা করুন। জাভাস্ক্রিপ্ট বনাম জাভার কিছু অনন্য বৈশিষ্ট্য কী? COBOL বনাম Go এর ক্ষেত্রে কীভাবে তুলনা করবেন? ## পোস্ট-লেকচার কুইজ [পোস্ট-লেকচার কুইজ](https://ff-quizzes.netlify.app/web/quiz/2) ## রিভিউ এবং সেলফ স্টাডি প্রোগ্রামারের জন্য উপলব্ধ বিভিন্ন ভাষা সম্পর্কে একটু পড়াশোনা করুন। একটি ভাষায় একটি লাইন লিখুন, এবং তারপর এটি অন্য দুইটি ভাষায় পুনরায় লিখুন। আপনি কী শিখলেন? ## অ্যাসাইনমেন্ট [Reading the Docs](assignment.md) **অস্বীকৃতি**: এই নথিটি AI অনুবাদ পরিষেবা [Co-op Translator](https://github.com/Azure/co-op-translator) ব্যবহার করে অনুবাদ করা হয়েছে। আমরা যথাসম্ভব সঠিকতার জন্য চেষ্টা করি, তবে অনুগ্রহ করে মনে রাখবেন যে স্বয়ংক্রিয় অনুবাদে ত্রুটি বা অসঙ্গতি থাকতে পারে। মূল ভাষায় থাকা নথিটিকে প্রামাণিক উৎস হিসেবে বিবেচনা করা উচিত। গুরুত্বপূর্ণ তথ্যের জন্য, পেশাদার মানব অনুবাদ সুপারিশ করা হয়। এই অনুবাদ ব্যবহারের ফলে কোনো ভুল বোঝাবুঝি বা ভুল ব্যাখ্যা হলে আমরা তার জন্য দায়বদ্ধ নই।