Программирование и велосипед

Я не собираюсь писать об изобретении велосипеда, которым занимаются многие программисты. Да, каюсь, грешен, сам поступал также, наивно считая, что смогу написать некоторые вещи лучше, чем авторы библиотек. Несколько раз у меня это получалось, и я укрепился в своём заблуждении, что так и нужно поступать. На самом же деле это — ошибка.

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

Сегодня Кирилл сходил на первое занятие клуба программистов 1С. Я записал его на курсы по программированию на Java. С занятия он вышел весьма вдохновлённый, но чуточку расстроенный тем, что нужно делать домашку. Я его успокоил, что это на самом деле очень и очень весело — писать программы.

Дома мы установили русификацию на Eclipse. Оказалось, что материалы учебного курса устарели. В новой версии Eclipse — Oxygen — русификация устанавливается прямо из оболочки путём добавления репозитория проекта Babel и загрузки нужных пакетов.

Установив русификацию, мы стали изучать задание. Это оказалась простая программа с использованием swing, которая создавала одно окно с заголовком. Домашним заданием было написать программу, которая выводила бы не одно окно, а пять — четыре по углам и одно в центре.

Скопировать четыре раза блок кода, который выводит окно, поменять координаты левого верхнего угла было проще простого, но скучно. Поэтому мы принялись умничать — ввели в программу переменные со значениями отступов, ширины и высоты окна. А потом решили, что никак не обойтись без выяснения текущего разрешения экрана, чтобы окна выводились аккуратно на любом разрешении.

Вот что у нас получилось:

package test;
 
import javax.swing.*;
import java.awt.Dimension;
import java.awt.Toolkit;
 
public class MySwing {
    public static void main(String[] args) {
        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        int winHeight = 300, winWidth = 500;
        int leftMargin = 50, topMargin = 20;
        
        JFrame fourWin = new JFrame();
        fourWin.setTitle("fourCraft Это хорошо");
        fourWin.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        fourWin.setBounds(leftMargin, topMargin, winWidth, winHeight);
        fourWin.setVisible(true);
        
        JFrame fourWin2 = new JFrame();
        fourWin2.setTitle("fourCraft Это хорошо");
        fourWin2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        fourWin2.setBounds(screenSize.width - leftMargin - winWidth, topMargin, winWidth, winHeight);
        fourWin2.setVisible(true);
        
        JFrame fourWin3 = new JFrame();
        fourWin3.setTitle("fourCraft Это хорошо");
        fourWin3.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        fourWin3.setBounds(leftMargin, screenSize.height - topMargin - winHeight, winWidth, winHeight);
        fourWin3.setVisible(true);
        
        JFrame fourWin4 = new JFrame();
        fourWin4.setTitle("fourCraft Это хорошо");
        fourWin4.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        fourWin4.setBounds(screenSize.width - leftMargin - winWidth, screenSize.height - topMargin - winHeight, winWidth, winHeight);
        fourWin4.setVisible(true);
        
        JFrame fourWin5 = new JFrame();
        fourWin5.setTitle("fourCraft Это хорошо");
        fourWin5.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        fourWin5.setBounds((screenSize.width / 2) - (winWidth / 2), (screenSize.height / 2) - (winHeight / 2), winWidth, winHeight);
        fourWin5.setVisible(true);
        
        JFrame[] jframes = new JFrame[10];
        
        for (int i=0; i<10; i++) {
            jframes[i] = new JFrame();
            jframes[i].setTitle("fourCraft Это хорошо");
            jframes[i].setBounds(leftMargin+10*i, topMargin+15*i, winHeight, 200);
            jframes[i].setVisible(true);            
        }              
    }
}

Не скажу, что это прямо шедевр — программа не сравнивает размеры диалогов с текущим разрешением экрана, но я решил, что для учебной программы достаточно того, что она красиво выводит окна на любом разрешении компа или ноута.

И ещё одну штуку добавили — чтобы кнопка закрытия любого из пяти окон закрывала всю программу. Иначе приходилось закрывать все выведенные окна.

Цикл в конце — просто баловство. Мне хотелось показать Кириллу, каким образом объявлять массивы и инициализировать значения переменных.

До этого я никогда не писал программы на Java и не работал в Eclipse. Оказалось, что современные IDE сильно шагнули вперёд по сравнению с оболочкой Delphi 7, на которой я писал что-то более-менее серьёзное в последний раз. Опыт с C# и C++ в Microsoft Visual Studio я не считаю.

Предварительная компиляция, все ошибки в коде сразу выводятся. Ну про автозавершение я не говорю, оно и раньше было. Просто кайф. Писать программы сейчас — сплошное удовольствие.

Я думал, что раз давно ничего не писал, то вроде как и не смогу, будет сложно. Как я ошибался!Стоило только начать — и всё пошло как по маслу. А с учётом удобства среды разработки и кучи подсказок в гугле я не то что снова поверил в себя, а вообще даже не вижу причин сомневаться, что смогу написать практически любую программу, которую смогу себе придумать.

Получилось, что программирование для меня как велосипед. Когда долго не катался, кажется, что и не сможешь. Побаиваешься, придумываешь для себя причины, по которым тебе не стоит ехать. Но стоит сделать усилие над собой, сесть на велик, как тут же едешь и уже не думаешь о том, умеешь или нет.

В общем, я уже не думаю, смогу ли писать программы, потому что точно знаю, что сделаю это без проблем. Нужно только задачки себе почаще придумывать.

Поделиться
Отправить
Популярное