# C programming language ! A mysterious name, isn’t it?

এই আর্টিকেলে আমরা জানবো সি প্রোগ্রামিং ভাষা শেখার কিছু ধাপ এবং বিগিনার হিসেবে কি কি শেখা উচিত তা নিয়ে। তো চলুন শুরু করা যাক।

### সি প্রোগ্রামিং শেখার পূর্বশর্ত

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

### RECOMMENDED BOOKS

- The C Programming Language (2nd Edition) by Dennis Ritchie and Brian Kernighan
- Beginning C (5th Edition) by Ivor Horton
- C The CompleteReference – Herbert Schildt

### কিছু বেসিক জিনিস যা জানা উচিত

- **Setup environment :** একদম শুরুতে আমাদের যদি পার্সোনাল কম্পিউটার বা ল্যাপটপ হয় তবে Code Blocks ইন্সটল করতে হবে এবং ভালোভাবে ভেরিয়েবল পাথ সেট করতে হবে। সেজন্য এই টিউটোরিয়াল ফলো করতে পারেনঃ [https://youtu.be/J9Y71vivV6U](https://youtu.be/J9Y71vivV6U) আর যদি Android মোবাইল হয় তবে Mobile C [ C/C++ Compiler ] অ্যাপটি ইন্সটল করলেই হবে। অপরদিকে IOS ডিভাইসের জন্য CodeSnake IDE ভালো হবে। For Moblie : [https://youtu.be/H7meh3nkIPY](https://youtu.be/H7meh3nkIPY)

- **IDE vs Compiler :** একদমই সহজে বলতে গেলে, কম্পাইলার কোডকে কম্পিউটার ল্যাঙ্গুয়েজ (বাইনারী ফর্ম) তে রূপান্তরিত করে এবং IDE হল একটি সফ্টওয়্যার অ্যাপ্লিকেশন যা সফ্টওয়্যার ডেভেলপমেন্টের জন্য সুবিধা প্রদান করে। এটি সম্পর্কে আরও জানতে, দয়া করে এটি গুগল করুন।

- **Syntax :** প্রতিটি প্রোগ্রামিং ভাষার জন্য সেই ভাষার গঠন সঠিকভাবে লেখার জন্য একটি নিয়ম থাকে। তেমনি সি প্রোগ্রামিং এর একটি দুর্দান্ত সিনট্যাক্স বা গঠনকাঠামো রয়েছে।

- **Structure of C :** এর মোটামুটি কিছু সেকশন রয়েছে। যেমনঃ Documentation, Link, Definition, Global Declaration, main( ) function, Subprogram. এই ভিডিওতে পরিষ্কারভাবে দেখানো হয়েছেঃ [https://youtu.be/K1E47BtYiRQ](https://youtu.be/K1E47BtYiRQ)

- **Basic Mathematical Knowledge :** একজন সিরিয়াস প্রোগ্রামার হতে হলে আপনাকে মৌলিক গণিত সম্পর্কে জানতে হবে। যেমন সংখ্যা, অপারেটর, সূত্র, লজিক ইত্যাদি। শুরুতে এর প্রয়োজন নেই। কিন্তু ধীরে ধীরে এগুলো হবে প্রোগ্রামিং সমস্যা সমাধানের একটি অত্যন্ত গুরুত্বপূর্ণ অংশ হয়ে দাঁড়াবে।

### প্রোগ্রাম রান এবং আউটপুট পেতে ছয়টি (৬) ধাপ

1. **Write Code :** প্রোগ্রামার একটি কোড এডিটরে কোড লিখে এবং এটি সেকেন্ডারি স্টোরেজে সংরক্ষণ করে। ফাইলটির নাম .c (ডট সি) এক্সটেনশন দিয়ে সেভ করা হয়।

2. **Preprocess :** মেশিন ল্যাঙ্গুয়েজে রূপান্তর করার আগে, কম্পাইলার প্রিপ্রসেস প্রোগ্রাম চালনা করে। এটি বিশেষ কমান্ডের সাথে ব্যবহার করে যাকে বলা হয় preprocessor directive.

3. Compile : প্রোগ্রামার ফাইল কম্পাইল করার জন্য কমান্ড দেয়। কম্পাইলার কোডটিকে মেশিন ল্যাঙ্গুয়েজ বা অবজেক্ট কোডে রূপান্তর/অনুবাদ করে এবং ডিস্কে সংরক্ষণ করে।

4. **Link :** লিঙ্কার (Linker) মেশিন কোডকে লাইব্রেরি ফাইলের সাথে সংযুক্ত করে।

5. **Load :** কোড রান করার আগে, এটি মেমরিতে সংরক্ষণ করা আবশ্যক। লোডার ডিস্ক থেকে মেমরিতে প্রোগ্রাম স্থানান্তর করতে সাহায্য করে।

6. **Execution :** অবশেষে, কম্পিউটারের সিপিইউ-এর নিয়ন্ত্রণে একটি একক কমান্ডে প্রোগ্রামটি সম্পাদন করা হয়।

### C PROGRAMMING LANGUAGE এর জন্য যেসব টপিক গুলো শেখা উচিত

**Introduction of C**
- Keywords & Identifiers
- Variables & Constants
- Data Types
- Input/Output
- Operators

**Flow Controls**
- if…else
- for Loop
- while Loop
- break and continue
- switch…case
- Programming goto

**Functions**
- Programming Functions
- User-defined Functions
- Function Types
- Recursion
- Storage Class

**Arrays**
- Programming Arrays
- Multi-dimensional Arrays
- Arrays & Function

**Pointers**
- Programming Pointers
- Pointers & Arrays
- Pointers And Functions
- Memory Allocation

**Strings**
- Programming String
- String Functions

**Structure and Union**
- Structure
- Struct & Pointers
- Struct & Function
- Unions

**Files**
- Files Input/Output

**Additional Topics**
- Enumeration
- Preprocessors
- Standard Library
