Программирование и велосипед
Я не собираюсь писать об изобретении велосипеда, которым занимаются многие программисты. Да, каюсь, грешен, сам поступал также, наивно считая, что смогу написать некоторые вещи лучше, чем авторы библиотек. Несколько раз у меня это получалось, и я укрепился в своём заблуждении, что так и нужно поступать. На самом же деле это — ошибка.
Всё дело в том, что если тратить время на несущественные детали реализации, на мелочи, которые не влияют на функциональность и качество программы, то можно никогда не выпустить готовый продукт. Этому явлению философы от программирования даже название какое-то придумали. Типа, приступ перфекционизма или как-то наподобие. Не помню, давно ничего по этой теме не читал. Сам уже готов поделиться мыслями об этом. Но пока не решаюсь, прокрастинирую.
Сегодня Кирилл сходил на первое занятие клуба программистов 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 я не считаю.
Предварительная компиляция, все ошибки в коде сразу выводятся. Ну про автозавершение я не говорю, оно и раньше было. Просто кайф. Писать программы сейчас — сплошное удовольствие.
Я думал, что раз давно ничего не писал, то вроде как и не смогу, будет сложно. Как я ошибался!Стоило только начать — и всё пошло как по маслу. А с учётом удобства среды разработки и кучи подсказок в гугле я не то что снова поверил в себя, а вообще даже не вижу причин сомневаться, что смогу написать практически любую программу, которую смогу себе придумать.
Получилось, что программирование для меня как велосипед. Когда долго не катался, кажется, что и не сможешь. Побаиваешься, придумываешь для себя причины, по которым тебе не стоит ехать. Но стоит сделать усилие над собой, сесть на велик, как тут же едешь и уже не думаешь о том, умеешь или нет.
В общем, я уже не думаю, смогу ли писать программы, потому что точно знаю, что сделаю это без проблем. Нужно только задачки себе почаще придумывать.