Если нельзя, но очень хочется, то нужно обязательно и ничего в мире не стоит того, чтобы делать из этого проблему!


Интересна Java? Кликай по ссылке и изучай!
Если тебе полезно что-то из того, чем я делюсь в своем блоге - можешь поделиться своими деньгами со мной.
с пожеланием
столько времени читатели провели на блоге - 
сейчас онлайн - 

суббота, 11 июня 2011 г.

Рефакторинг: Замена рекурсии делегированием. Часть 2

В первой части было сформулировано задание - избавиться от рекурсии. Тут я приведу лишь результат рефакторинга, а в результате этом остался всего один класс. Его я назвал OOPTree и поместил в новый пакет. Описание того, как это было пошагово сделано - выложу позже.
package com.binarytree.oop;

import com.binarytree.Node;

public class OOPTree implements Node {
    
    private int value;
    private Node left;
    private Node right;

    public OOPTree(int value) {
        this.value = value;
        left = null;
        right = null;
    }
        
    @Override
    public int getMaxLeafDepth() {
        int depth = 0;
        
        if (left != null) {
            depth = left.getMaxLeafDepth();
        } 
        
        if (right != null) {
            depth = Math.max(depth, right.getMaxLeafDepth());
        } 
                    
        return 1 + depth;            
    }    
    
    @Override
    public void addValue(int newValue) {
        if (newValue < value) {
            if (left == null) {
                left = new OOPTree(newValue);
            } else {
                left.addValue(newValue);
            } 
        } else if (newValue > value) {
            if (right == null) {
                right = new OOPTree(newValue);
            } else {
                right.addValue(newValue);
            } 
        }
    }
    
    @Override
    public String toString() {
        return String.format("(%s, %s, %s)", value, left, right); 
    }    
}

Может показаться, что от рекурсии мы не избавились, потому как каждый из методов (addValue, getMaxLeafDepth и toString) вызывают в своем теле те же методы. Но разница с прошлым в том, что тут вызываются одноименные методы *других объектов*, а это уже скорее делегирование чем рекурсия.

Time management: День сурка или каждый день - суббота

Занимаясь личным таймменеджментом, как-то задал себе вопрос: "а какой день недели у меня самый продуктивный?" Оказалось - суббота. Второй вопрос был "почему?". Потому, что в субботу у меня все гармонично:
- рабочая неделя позади, а впереди самый выходной день в неделе - воскресенье.
- можно поваляться в постельке не переживая, что где-то там впереди важное собрание в офисе.
- можно поработать в свое удовольствие над не срочными но важными и ценными делами - над тем, что в кайф.
- в любой момент принимается решение пойти прогуляться с семьей, и дела компьютерные отходят на задний план тут же.
- в любой момент можно пойти поспать, если хочется.
- да что угодно можно сделать!

И вот подумал - а что, если каждый день просыпаться с мыслью "сегодня суббота"? Для начала потребовалось записать эту мысль. Дождавшись субботы, я включил внутреннего наблюдателя и стал мысленно фиксировать все, что я делал по привычке. Утром встаю не сразу, кушаю, читаю немного книгу, душик, потом немного дискавери по телику, потом мысль "а чем бы заняться?" - кайфую от того, что впереди весь день и выбираю таску по душе, занимаюсь ею пока не надоест, задаю очередной "а чем бы заняться" и так до конца дня. Все просто.

И я решил для себя, что одну неделю попробую поработать в таком режиме. Спустя неделю, могу сказать наверняка: хоть и время, которое провожу за компьютером уменьшилось, зато как результативность подскочила. Метрика одна - удовлетворенность проделанными результатами к концу дня, ощущение, что день был уникальным и ценным.

Кстати, сейчас суббота (настоящая) и я в офисе, потому, что мне в кайф тут находиться. Я поработаю немного и пойду дальше. А это "немного поработал" будет более полезным, чем любой, даже самый продуктивный, будний день.

Если бы я попал в "день сурка" я бы сделал этот день субботним.

Это работает.

суббота, 4 июня 2011 г.

Браться за все, что предлагают в команде и находить это интересным

Помню, как впервые вляпался в мир IT. Это случилось по рекомендации друга. Он тогда сказал - "ты программируешь, так почему бы тебе не попробовать устроиться в какую-то компашку?" К этому времени я закончил физфак и устроился работать в институт. Там программировал для нужд лаборатории, но все как-то не то. А тут реальная айтишная компания. Только вот трудность в том, что кодил я только Delphi и то по своему (как научился). И вот пришел я в эту компанию, прособеседовали меня и поняли - все, что надо компании - я этого не знаю. Тут же решил, или сейчас или никогда и сказал "берите меня не пожалеете, я буду все-все делать и всему быстро научусь".

Т.к. для меня мир айти был чем-то наподобие Олимпа, то и отношение моей новой работе было трепетное. Я брался за все задачи, которые предлагали. Находил их интересными и выполнял с энтузиазмом, предлагая нестандартные пути решения. Позже я заметил, что есть большая категория задач, которые никто не хочет выполнять по разными причинам. Замечательно! Их буду выполнять я. Тогда же я открыл, что любая, даже самая нудная задача может быть решена множеством разных способов - а поиск их (с целью оптимизации трудозатрат) задача далеко не нудная. В общем понеслась!