Imperative programming | defines computation as statements that change a program state |
Procedural programming | structured programming – specifies the steps a program must take to reach a desired state |
Declarative programming | defines program logic, but not detailed control flow |
Functional programming | treats programs as evaluating mathematical functions and avoids state and mutable data |
Object-oriented programming (OOP) | organizes programs as objects: data structures consisting of datafields and methods together with their interactions |
Event-driven programming | program control flow is determined by events, such as sensor inputs or user actions (mouse clicks, key presses) or messages from other programs or threads |
Automata-based programming | a program, or part, is treated as a model of a finite state machine or any other formal automaton |
About Node.js
As an asynchronous event driven JavaScript runtime, Node is designed to build scalable network applications. In the following “hello world” example, many connections can be handled concurrently. Upon each connection the callback is fired, but if there is no work to be done Node is sleeping.
This is in contrast to today's more common concurrency model where OS threads are employed. Thread-based networking is relatively inefficient and very difficult to use. Furthermore, users of Node are free from worries of dead-locking the process, since there are no locks. Almost no function in Node directly performs I/O, so the process never blocks. Because nothing blocks, scalable systems are very reasonable to develop in Node.
# HelloWorld.js const http = require('http'); const hostname = '127.0.0.1'; const port = 3000; const server = http.createServer((req, res) => { res.statusCode = 200; res.setHeader('Content-Type', 'text/plain'); res.end('Hello World\n'); }); server.listen(port, hostname, () => { console.log(`Server running at http://${hostname}:${port}/`); });