Home » Как написать первую программу на JavaScript
Как написать первую программу на JavaScript

Как написать первую программу на JavaScript

Хотите погрузиться в мир JavaScript и написать свою первую программу? Если вы системный администратор или DevOps-инженер, который привык к терминалам и серверам, то добро пожаловать в мир фронтенда и серверного JS! Эта статья поможет вам быстро освоить основы JavaScript, понять его синтаксис и написать первые рабочие скрипты. Мы разберём всё от установки среды разработки до деплоя на сервер, с практическими примерами и готовыми командами.

Как работает JavaScript: от V8 до Node.js

JavaScript – это интерпретируемый язык программирования, который изначально создавался для веб-браузеров. Но с появлением Node.js он стал полноценным серверным языком. Движок V8 (тот самый, что в Chrome) компилирует JS-код в машинный код на лету, что даёт неплохую производительность.

Основные особенности:

  • Динамическая типизация – не нужно объявлять типы переменных
  • Событийно-ориентированная архитектура – идеально для асинхронных задач
  • Прототипное наследование – отличается от классического ООП
  • Замыкания – мощный инструмент для создания приватных переменных

Быстрая настройка среды разработки

Для начала работы понадобится Node.js. Если у вас Ubuntu/Debian:

curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash -
sudo apt-get install -y nodejs
node --version
npm --version

Для CentOS/RHEL:

curl -fsSL https://rpm.nodesource.com/setup_lts.x | sudo bash -
sudo yum install -y nodejs
node --version

Создаём рабочую директорию и инициализируем проект:

mkdir my-first-js-app
cd my-first-js-app
npm init -y
touch app.js

Для комфортной разработки рекомендую установить VS Code с расширением “JavaScript (ES6) code snippets” или использовать vim с плагином coc.nvim.

Первая программа: Hello World и основы синтаксиса

Создаём файл app.js с классическим примером:

// app.js
console.log("Hello, World!");

// Переменные
let serverName = "web-server-01";
const port = 3000;
var isRunning = true; // лучше не использовать var

// Функции
function startServer(name, port) {
    console.log(`Starting ${name} on port ${port}`);
    return `Server ${name} is running on port ${port}`;
}

// Стрелочные функции (ES6)
const stopServer = (name) => {
    console.log(`Stopping ${name}`);
    return `Server ${name} stopped`;
};

// Вызов функций
console.log(startServer(serverName, port));
console.log(stopServer(serverName));

Запуск:

node app.js

Результат:

Hello, World!
Starting web-server-01 on port 3000
Server web-server-01 is running on port 3000
Stopping web-server-01
Server web-server-01 stopped

Практические примеры для системных администраторов

Пример 1: Мониторинг системы

// system-monitor.js
const fs = require('fs');
const os = require('os');

function getSystemInfo() {
    const loadAvg = os.loadavg();
    const freeMemory = os.freemem();
    const totalMemory = os.totalmem();
    const memoryUsage = ((totalMemory - freeMemory) / totalMemory * 100).toFixed(2);
    
    return {
        hostname: os.hostname(),
        platform: os.platform(),
        architecture: os.arch(),
        loadAverage: loadAvg[0].toFixed(2),
        memoryUsage: `${memoryUsage}%`,
        uptime: `${Math.floor(os.uptime() / 3600)}h ${Math.floor((os.uptime() % 3600) / 60)}m`
    };
}

// Вывод в JSON формате
console.log(JSON.stringify(getSystemInfo(), null, 2));

// Запись в файл
fs.writeFileSync('system-info.json', JSON.stringify(getSystemInfo(), null, 2));

Пример 2: Простой HTTP сервер

// server.js
const http = require('http');
const fs = require('fs');

const server = http.createServer((req, res) => {
    if (req.url === '/') {
        res.writeHead(200, { 'Content-Type': 'text/html' });
        res.end('

Server is running!

‘); } else if (req.url === ‘/status’) { res.writeHead(200, { ‘Content-Type’: ‘application/json’ }); res.end(JSON.stringify({ status: ‘OK’, timestamp: new Date().toISOString(), memory: process.memoryUsage() })); } else { res.writeHead(404, { ‘Content-Type’: ‘text/plain’ }); res.end(‘404 Not Found’); } }); const PORT = process.env.PORT || 3000; server.listen(PORT, () => { console.log(`Server running on port ${PORT}`); }); // Graceful shutdown process.on(‘SIGTERM’, () => { console.log(‘Received SIGTERM, shutting down gracefully’); server.close(() => { process.exit(0); }); });

Запуск сервера:

node server.js

Создание systemd сервиса:

sudo tee /etc/systemd/system/nodeapp.service > /dev/null <

Сравнение с другими языками для системных задач

Критерий JavaScript (Node.js) Python Bash
Асинхронность Встроенная, event loop asyncio, но сложнее Только через & и jobs
HTTP API Отлично, много фреймворков Flask, Django – хорошо curl + jq – базово
Системные вызовы Через child_process subprocess, os – отлично Нативно
Парсинг JSON Нативно json module jq утилита
Производительность Высокая (V8) Средняя Быстрая для простых задач

Продвинутые возможности и автоматизация

Работа с файловой системой

// file-operations.js
const fs = require('fs').promises;
const path = require('path');

async function processLogFiles(directory) {
    try {
        const files = await fs.readdir(directory);
        const logFiles = files.filter(file => file.endsWith('.log'));
        
        for (const file of logFiles) {
            const filePath = path.join(directory, file);
            const stats = await fs.stat(filePath);
            const content = await fs.readFile(filePath, 'utf8');
            
            console.log(`File: ${file}`);
            console.log(`Size: ${stats.size} bytes`);
            console.log(`Lines: ${content.split('\n').length}`);
            console.log(`Error lines: ${content.split('\n').filter(line => line.includes('ERROR')).length}`);
            console.log('---');
        }
    } catch (error) {
        console.error('Error processing files:', error.message);
    }
}

// Использование
processLogFiles('/var/log/');

Мониторинг с уведомлениями

// monitoring.js
const { exec } = require('child_process');
const https = require('https');

class SystemMonitor {
    constructor(webhookUrl) {
        this.webhookUrl = webhookUrl;
    }
    
    async checkDiskSpace() {
        return new Promise((resolve, reject) => {
            exec("df -h / | awk 'NR==2 {print $5}' | sed 's/%//'", (error, stdout) => {
                if (error) reject(error);
                resolve(parseInt(stdout.trim()));
            });
        });
    }
    
    async sendAlert(message) {
        const data = JSON.stringify({ text: message });
        const options = {
            method: 'POST',
            headers: {
                'Content-Type': 'application/json',
                'Content-Length': data.length
            }
        };
        
        const req = https.request(this.webhookUrl, options);
        req.write(data);
        req.end();
    }
    
    async monitor() {
        const diskUsage = await this.checkDiskSpace();
        
        if (diskUsage > 80) {
            await this.sendAlert(`⚠️ Disk usage is ${diskUsage}% on ${require('os').hostname()}`);
        }
        
        console.log(`Disk usage: ${diskUsage}%`);
    }
}

// Запуск мониторинга каждые 5 минут
const monitor = new SystemMonitor('https://hooks.slack.com/your-webhook-url');
setInterval(() => monitor.monitor(), 5 * 60 * 1000);

Деплой на сервер

Для деплоя вашего приложения понадобится VPS сервер. Рекомендую взять VPS с предустановленной средой или выделенный сервер для более серьёзных проектов.

Создаём Dockerfile для контейнеризации:

# Dockerfile
FROM node:18-alpine

WORKDIR /app

COPY package*.json ./
RUN npm ci --only=production

COPY . .

EXPOSE 3000

USER node

CMD ["node", "server.js"]

Сборка и запуск:

docker build -t my-js-app .
docker run -d -p 3000:3000 --name js-app my-js-app

# Или с docker-compose
cat > docker-compose.yml << 'EOF'
version: '3.8'
services:
  app:
    build: .
    ports:
      - "3000:3000"
    restart: unless-stopped
    environment:
      - NODE_ENV=production
EOF

docker-compose up -d

Интересные факты и нестандартные применения

JavaScript можно использовать не только для веб-разработки:

  • Автоматизация браузера – Puppeteer для скрейпинга и тестирования
  • Десктопные приложения – Electron (VS Code, Discord, Slack)
  • Мобильные приложения – React Native, Ionic
  • Системные скрипты – замена bash скриптов для сложной логики
  • Serverless функции – AWS Lambda, Vercel Functions
  • IoT устройства – Johnny-Five для Arduino

Забавный факт: JavaScript был создан за 10 дней в 1995 году, а сейчас это один из самых популярных языков программирования в мире!

Полезные ресурсы

Заключение и рекомендации

JavaScript – это мощный инструмент для современного системного администратора. Он отлично подходит для создания API, автоматизации задач, мониторинга систем и интеграции с различными сервисами. Асинхронная природа языка делает его идеальным для network-задач и обработки событий.

Когда использовать JavaScript:

  • Создание REST API и микросервисов
  • Автоматизация задач с HTTP запросами
  • Реальное время мониторинг (WebSocket)
  • Интеграция с облачными сервисами
  • Обработка JSON данных

Когда лучше выбрать другой язык:

  • Простые системные скрипты – bash
  • Машинное обучение – Python
  • Высокопроизводительные приложения – Go, Rust
  • Системное программирование – C/C++

Начните с простых скриптов, изучите асинхронность и модульность Node.js. Со временем вы сможете создавать сложные системы мониторинга, автоматизации и интеграции. JavaScript превратился из “игрушечного” языка в серьёзный инструмент для backend-разработки и системного администрирования.


В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.

Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.

Leave a reply

Your email address will not be published. Required fields are marked