Hatena::ブログ(Diary)

おおたに6号機blog このページをアンテナに追加 RSSフィード

2008-07-18(金)

[]良い残業? 10:00 良い残業?を含むブックマーク

じゃあどういう残業が人を成長させ、あるいは人を潰すのか。

良い残業というのは、頑張った分だけ評価され、プログラムがどんどん出来上がっていく達成感があり、

結果的に本人のモチベーションが高く保てるようなタイプ仕事。こんな開発チームならきつい状況でもけっこうなんとかなったりする。

たとえば文化祭前夜のような、クラス一丸となって異常なテンションの中、ひとつの目標に向かって深夜まで没頭する感じ。

あんな気持ちでカットオーバーを迎えられればそれは良い経験になるよね。

http://d.hatena.ne.jp/aike/20080717

確かに評価されるっていうのはその当人にとってはありがたいと思うし重要なことだけど、

企業としてはそれでいいのかな?それで利益が出るの?顧客にとってはいいことなの?

本人の家族にとってはどうだろう?友達との付き合いもなくなるけど?何より自分を豊かにする時間は?


極論だと思うけど、自分には良い残業なんて無いと思ってる。残業は基本しちゃ駄目だよ。

自分を伸ばすことはとっても重要。それは間違いない。デスマで成長するっていうのもある一面をみれば真実でしょう。

ただし、自分を伸ばすことは出来るだけ個人の取り組みでやるべきだし、会社の利益はきちんと考えないと駄目じゃないかな。

デスマや急ぎの仕事で、もちろん完了させるために残業は厭わないっていうのはあると思うけど、原則駄目。

残業を減らし、個人の時間をもってそこで自分を伸ばす努力をして、その結果としてより効率的に

仕事をして会社に利益をもたらす。それで残業が更に減って、家族や友達と話したり楽しむ時間をもったり、

社会還元したり、自分の新たな趣味を見つけたりして自分の人生を楽しむのが一番よい姿だと思う。


こういうようになりたいと思ってます。

OSSもその一環だし、執筆とか勉強会に出るのも同じ理由です。



あわせて読みたい


要求を仕様化する技術・表現する技術 - 入門+実践 仕様が書けていますか?  「残業ゼロ」の仕事力 

[]Silverlight2入門記4 - バインディング - 17:26 Silverlight2入門記4 - バインディング -を含むブックマーク

今回はバインディングについてです。

SilverlightバインディングをBinding式で行います。

{Binding xxx}のような形式で、具体的には

<ListBox x:Name="items" ItemsSource="{Binding Mode=OneWay}" ......

のように記述します。


コードビハインド側ではソース元であるDataContextプロパティを設定しています。

どこのオブジェクトバインドするかをDataContextで指定するみたいです。

public Page()

{

InitializeComponent();

items.DataContext = AllBooks;

……

}

ちなみにAllBooksはObservableCollection<Book>です。


バインディング式では、DataContextに設定されたオブジェクトのどのプロパティバインドするかも記載できます。

下記のような感じ。

<ListBox x:Name="items" ItemsSource="{Binding Mode=OneWay}" Margin="5" SelectionChanged="items_SelectionChanged">

……

<TextBlock Text="{Binding Title}" />

この例では先ほど設定したAllBooksの一つ一つのオブジェクト(Book)からTitleプロパティを抜き出して設定するわけです。


またバインディングには幾つかのモードがあります。

  • OneWay

コードビハインドからxamlの方向への更新のみです。

つまりC#側のプロパティが変われば反映はされるけど、XAML側で値を変えても

C#プロパティは反映されません。

  • TwoWay

XAML側とコードビハインド側のどちらが更新されても反映される

  • OneTime

ワンタイムはOneWayの特殊例で、アプリケーションの起動時またはデータ コンテキストの変更時だけ更新されます。

その後はC#をなおしても反映されません。

TwoWayがデフォルトっぽい。


そのほかにもXAML側→C#側というOneWayToSourceってのも用意されているらしいんだけど

おいらが試している限りだとVSが怒る。Beta2でもしかしてなくなった?


で今回のソースコードは下記のような感じです。

<UserControl x:Class="FirstBinding.Page"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:local="clr-namespace:FirstBinding" 
    Width="400" Height="300">
    <UserControl.Resources>
        <local:CustomDateConverter x:Key="dateConverter" />
    </UserControl.Resources>
    <StackPanel Background="AliceBlue">
        <ListBox x:Name="items" ItemsSource="{Binding Mode=OneWay}" Margin="5" SelectionChanged="items_SelectionChanged">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal">
                        <TextBlock Text="{Binding Title}" />
                    </StackPanel>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
        <StackPanel>
            <Rectangle HorizontalAlignment="Left" Width="400" Height="2" Fill="Red" Margin="0,10,0,10" />
            <StackPanel x:Name="BookDetails">
                <TextBlock Text="{Binding Title, Mode=OneWay}" />
                <TextBlock Text="{Binding PublishedDate, Mode=OneWay, Converter={StaticResource dateConverter}}" />
            </StackPanel>
        </StackPanel>
    </StackPanel>
</UserControl>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Collections.ObjectModel;
using System.Windows.Data;

namespace FirstBinding
{
    public partial class Page : UserControl
    {
        public Page()
        {
            InitializeComponent();
            items.DataContext = AllBooks;
            AllBooks.Add(new Book("汁バラ教本2", new DateTime(2008, 1, 17)));
            AllBooks.Add(new Book("汁バラ教本特別編-もう一度最初から!-", new DateTime(2008, 6, 14)));
            items.SelectedIndex = 0;
        }

        private ObservableCollection<Book> AllBooksValue = null;

        public ObservableCollection<Book> AllBooks
        {
            get
            {
                if (AllBooksValue == null)
                {
                    AllBooksValue = new ObservableCollection<Book>();
                    AllBooksValue.Add(new Book("汁バラ教本1", new DateTime(2008, 7, 17)));
                }
                return AllBooksValue;
            }
        }

        private void items_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            ListBox listBox = sender as ListBox;
            BookDetails.DataContext = AllBooks[listBox.SelectedIndex];
        }

    }

    public class Book
    {
        public string Title { get; set; }

        public DateTime PublishedDate { get; set; }

        public Book(string Title, DateTime PublishedDate)
        {
            this.Title = Title;
            this.PublishedDate = PublishedDate;
        }

        public override string ToString()
        {
            return Title + "(" + PublishedDate.ToLongDateString() + ")";
        }
    }

    //このPage専用のカスタムConverter。どうやら同じnamespace内に含めないと動かないみたい。
    public class CustomDateConverter : IValueConverter
    {
        #region IValueConverter メンバ

        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            DateTime date = (DateTime)value;
            string s = date.Year.ToString() + "/" + date.Month.ToString();
            return s;
        }

        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            throw new NotImplementedException();
        }

        #endregion
    }

    
}



今回はSilverlight.netソース写経しました。


このまま次回はカスタムコンバータの作り方とかやります。

habuakihirohabuakihiro 2008/07/18 10:20 ん〜、そもそも「1日8時間労働」って前提自体がどうなんだろって思ったりする。
その日に終わらせるべき仕事が残ってるから残業と考えると、別に1日1時間でもいいかも知れないわけだよね。そしたら1日2時間でも残業。そもそも働くって何ですか? ってことだと思うんだよね。
結局、残業ってことを考える時点で、労働時間という概念から離れてないように思うのですよ。それはつまり成果や貢献での測定じゃないってことです。だって誰がやっても同じ時間働いたら同じアウトプットってのが暗黙の前提ってことでしょ。それって結局人月ってことだよね。
1日30分の仕事でもちゃんと評価されるようになればいんじゃね? って思う。というわけで価格重要ってことになる。

shot6shot6 2008/07/18 11:36 自分は1日8時間労働って枠にはこだわってるわけではないです。
定時というのは、会社と個人との約束(契約)として時間で一線引いているってだけに過ぎないです。
で、むしろ短くても評価されて(または時間じゃない軸で評価されて)、フェアに評価できるならばそれに越したことはないと
思います。1日30分の仕事でもちゃんと評価される仕組みがもし成立して、きちんと対価をもたらすのであればそれは素晴らしいことです。

ただ現在の仕組み上、早く終わる分にはいいですが、遅く終わる分(もっと悪いのはいつ終わるかわからない)には
どうにも良くないんじゃないですかね。
言いたかったのは現在の1日8時間の仕組みの上では、残業したら想定していないコストがかかり、
そこは個人の能力を伸ばすところという観点より個人の能力を発揮して会社に利益をもたらすところで、
残業のコストを上回りつつ成果を挙げるっていうのは難しいし非効率じゃないかなって事です。
想定として時間でコストがかかるという場合ですよ。

個人の能力を伸ばすことと会社に利益をもたらす事は人が資産として重要であればあるほど
簡単に切り離せるものではないのは重々承知してますが、そういう心持ちは重要じゃないかなと。

kensir0ukensir0u 2008/07/19 00:27 残業については見積もりに含めてないのが問題な部分もあると思います。
ちゃんと残業しないで作業が完了する見積もりができてればそれは発生しないものでしょうし。
ある期間に作業が集中するのがわかっているならばそのほかの期間は仕事させるべきじゃない。
そういうときこそ有給を取得させる。
こんな上司がいる会社が理想。

shot6shot6 2008/07/19 01:11 有給取得をきちんとさせてくれる上司の存在は大事ですね。
メリハリつけれる職場は良い職場だと思います。

Connection: close