Software EngineeringUnit 119 min read
Programming Languages & Tools: Syntax, Paradigms, IDEs & Compilers
Unit 11 of Software Engineering explores programming language paradigms (procedural, OOP, functional), their syntax rules, development tools (IDEs, compilers, debuggers), and how they integrate into modern software workflows—with real-world examples from Nepali apps and global tech stacks.
Core Concepts
1. Programming Languages: Definition & Classification
Programming languages are formal languages designed to communicate instructions to computers. They enable developers to write software by defining syntax (rules for writing code) and semantics (meaning of code).
Classification of Programming Languages
Key Attributes of Good Programming Languages
| Attribute | Description |
|---|---|
| Readability | Code should be easy to understand (e.g., Python vs. Assembly). |
| Writability | Simple syntax for quick development (e.g., JavaScript for web apps). |
| Reliability | Fewer bugs, strong type-checking (e.g., Java vs. Python). |
| Portability | Code runs on multiple platforms (e.g., Java’s "Write Once, Run Anywhere"). |
| Extensibility | Supports libraries/frameworks (e.g., Python’s pip for packages). |
2. Programming Paradigms
A. Procedural Programming
- Definition: Code is written as a sequence of procedures (functions) that operate on data.
- Example Languages: C, Pascal, Fortran.
- Example in Nepali Context:
// Calculating compound interest for a bank loan (Nepal SBI) float calculateInterest(float principal, float rate, int years) { return principal * pow(1 + rate/100, years) - principal; }
B. Object-Oriented Programming (OOP)
- Core Principles:
mindmap root((OOP Principles)) Encapsulation["Data + Methods in a Class"] Inheritance["Reuse via Parent-Child Classes"] Polymorphism["Same Method, Different Behavior"] Abstraction["Hide Complexity (Interfaces/Abstract Classes)"] - Example in Nepal:
Pathao’s Ride-Hailing System:
class Ride { private String driverName; private double distance; public double calculateFare() { return distance * 10; } // Polymorphism for discounts }
C. Functional Programming
- Definition: Treats computation as evaluation of mathematical functions (immutable data, pure functions).
- Example Languages: Haskell, Lisp, Scala.
- Example:
-- Calculate factorial (used in combinatorial algorithms) factorial 0 = 1 factorial n = n * factorial (n - 1)
3. Software Development Tools
A. Integrated Development Environments (IDEs)
| Tool | Features | Use Case |
|---|---|---|
| VS Code | Lightweight, extensions (Python, JavaScript), Git integration. | Web development (eSewa frontend). |
| Eclipse | Java-focused, plugins for Android (used in Daraz’s backend). | Enterprise Java apps. |
| PyCharm | Python-specific, debugging, testing tools. | Data science (Nepal’s NTC analytics). |
B. Compilers & Interpreters
- Compiler: Translates entire code to machine code (e.g.,
gccfor C). - Interpreter: Executes code line-by-line (e.g., Python’s interpreter).
- Example: Khalti’s Payment Gateway:
sequenceDiagram
participant User
participant KhaltiApp as Khalti App (Python)
participant KhaltiServer as Khalti Server (HTTP)
participant Bank as Bank System (SQL)
User->>KhaltiApp: Initiate Payment (Python Script)
KhaltiApp->>KhaltiServer: Send Request (HTTP API Call)
KhaltiServer->>Bank: Verify Funds (SQL Query)
Bank-->>KhaltiServer: Response (Approved/Rejected)
KhaltiServer-->>KhaltiApp: Process Response
KhaltiApp-->>User: Display Result
note right of KhaltiApp: Compiled/Interpreted
note right of KhaltiServer: Compiled (e.g., Java)
note right of Bank: SQL (Interpreted)Compiler/Interpreter workflow in Khalti’s payment system (Python + SQL + HTTP)C. Debuggers & Profilers
- Debuggers: Identify runtime errors (e.g.,
gdbfor C, PyCharm for Python). - Profilers: Optimize performance (e.g.,
cProfilefor Python). - Example:
NTC’s Traffic Simulation:
import cProfile def simulate_traffic(routes): # Simulate Kathmandu’s traffic routes pass cProfile.run('simulate_traffic(routes)')
4. Version Control Systems (VCS)
Git & GitHub/GitLab
- Commands:
git init # Start a new repo git add file.py # Stage changes git commit -m "Fix bug" # Save changes git push origin main # Upload to GitHub - Example in Nepal:
Open-Source Projects:
- NepalGovTech: Collaborative coding for government apps (e.g., eSewa).
- Daraz Nepal: Uses GitHub for multi-team coordination.
In the Real World
eSewa (Nepal):
- Language: Backend in Java (OOP for user accounts, transactions), frontend in JavaScript (procedural for UI logic).
- Tools: Eclipse (IDE), Maven (build tool), GitHub (version control).
- Example: When you pay a bill, eSewa’s Java classes handle authentication (OOP) while JavaScript renders the payment page (procedural).
Pathao (Ride-Hailing):
- Language: Python (functional for route calculations, OOP for user/driver models).
- Tools: PyCharm (IDE), Docker (containerization for scaling).
- Example: The
calculate_fare()function uses recursion (functional paradigm) to compute dynamic pricing based on distance and demand.
NTC’s Traffic Management:
- Language: C++ (procedural for real-time traffic light control).
- Tools: Visual Studio (IDE), Wireshark (network debugging).
- Example: Traffic lights at Thapathali use compiled C++ code to synchronize signals, with debuggers to fix delays during peak hours.
Worked Example: Compiling a Nepali Loan Calculator
Scenario: A bank in Nepal wants to compile a C program to calculate loan interest (procedural paradigm).
- Code:
#include <stdio.h> float calculateEMI(float principal, float rate, int years) { float emi = (principal * rate * years) / (12 * years); return emi; } int main() { printf("EMI: %.2f", calculateEMI(1000000, 8.5, 5)); return 0; } - Compilation Steps:
gcc loan.c -o loan.exe # Compile with GCC ./loan.exe # Run executable - Output:
EMI: 18872.50
Comparison Table: Paradigms in Nepali Apps
| App | Paradigm | Language | Key Tool Used |
|---|---|---|---|
| eSewa | OOP + Procedural | Java/JavaScript | Eclipse, Maven |
| Pathao | OOP + Functional | Python | PyCharm, Docker |
| Daraz | OOP | Java | IntelliJ, GitHub |
| NTC Traffic | Procedural | C++ | Visual Studio, Wireshark |
Exam Tip
- Definitions: Always define terms precisely (e.g., "A compiler translates high-level code to machine code before execution").
- Diagrams: Draw sequence diagrams for tool workflows (e.g., IDE → Compiler → Executable) and mindmaps for paradigms.
- Examples: Relate to Nepali apps:
- eSewa → OOP for user management.
- Pathao → Functional programming for route optimization.
- Code Snippets: Include 1-2 lines of code in answers (e.g.,
git commitor a Python function). - Tools vs. Paradigms:
- Tools (IDEs, compilers) are how you build software.
- Paradigms (OOP, functional) are how you structure the code.
- Common Pitfalls:
- Don’t confuse interpreters (execute line-by-line) with compilers (translate all at once).
- Avoid vague answers like "Git is for version control" → specify
git commit,git push, etc.
Based on the TU BCA syllabus for Software Engineering (CACS253), unit 11.
Discussion
Loading…