柔軟な発想

ある機能をプログラムで実現する為に、
少し視点を変えて、別の方法を思いつくと、
意外と簡単に実装ができてしまう事があります。

例えばバックグラウンドで読み込みを行っている時に、
「Loading…」と表示される画面はよくあります。
ユーザーから見れば「Loading…」の画面が、
新たに作られて、表示されたように見えますね。
そのままコードにするとこんな感じでしょうか。
(クラスやメソッドなどは仮のものです。)

LoadingView loadingView = new LoadingView();
loadingView.Show();
// バックグラウンドで行う処理
loadingView.Close();

これでも問題ありませんが、
複数のバックグラウンド処理が重なった場合などは、
さらに処理を考える必要があったり、
表示の部分がシーケンス的であったり、少し複雑です。

視点を変えて、
「Loading…」画面の可視性が切り変わると考えた場合はこうなります。

loadingView.Visible = true;
// バックグラウンドで行う処理
loadingView.Visible = false;

「Loading…」の画面が表示されていない場合でも、
見えていないだけでずっと画面内に存在しているイメージですね。

実際には loadingView.Visible の部分は、
LoadingView の可視性を表すプロパティなどにしておきます。
こうすると、シーケンス的だった表示がステート(状態)となり、
制御しやすくなります。

難しい問題には頭を柔らかくして、
様々な視点から柔軟な発想ができると、
もっと単純に解決できるかもしれませんね。

コレクションのループ処理で、要素とインデックスを使用したい場合の書き方

C#のお話です。

以下のようなコレクションitemsの各要素にたいして処理を行なう際に、処理内でインデックスが必要な場合はどのようなコードにするのが良いかについて。


var items = new[] { "a", "b", "c" };

 
レガシーな書き方だと以下です。
いまどきfor文でループしたくないですよね。


for(int index = 0; index < items.Length; index++) {
    var item = items[index];
    //indexとitemを使用する処理
}

 
foreachだと以下です。
forよりはマシですが、itemsからインデクサを使用して要素を取得するところが残念です。


foreach(var index in Enumerable.Range(0, items.Length)) {
    var item = items[index];
    //indexとitemを使用する処理
}

インフォテックの社内ライブラリを使用する場合、IListの拡張メソッドForEachが実装してあるので、以下のように実装できます。


items.ForEach((index, item) => {
    //indexとitemを使用する処理
});

上記の方法でだいたいは問題ないのですが、処理をラムダ式で実装出来なかったり、出来ても複雑になってしまう場合、インフォテックの社内ライブラリにIListの拡張メソッドAndIndexが実装してあるので、以下のように実装できます。


foreach (var (item, index) in items.AndIndex()) {
    //indexとitemを使用する処理
}

追加した拡張メソッドはとても単純な実装内容ですが、たったそれだけでコードが非常に分かりやすくなっていると思います。

プログラマーの金額の難しさ

mtjです

ここまで様々なソフトの金額を計算してきましたがいつ計算しても難しいと感じます。

例えばAの物を1日と3日で作れる人がいる場合 そのままの日数で考えると売上は3日で作る人の方が多くなります。

時間給の人の場合早く頑張って作る人より 知識のない時間のかかる人のほうが売り上げは多くなってしまいます。
雇う側が相手の技術力がわからない場合何かを指標に金額を決めるでしょう。
資格数、年齢、経歴等

基本は年齢で決まっているので頑張らない年齢が上の人より 勉強等頑張っている年齢下の人のほうが金額が低くなり
技術系は割に合わないと感じる事が多いのではないかと思います。

現在はオンラインプログラムテスト等あるのでそういったものを元に交渉したりし正当技術が評価されるといいのではないかと思います

特化した強みの必要性

mgcです。

最近良く”自分にしか作れないプログラム”という言葉を耳にします。
正直こういう言葉を使う制御屋さんは自分の価値を上げたいのだと思いますが
自分にしか作れないプログラムなど存在しないと思います。

誰でも勉強をすれば時間はかかれどいずれそのプログラムを書くことが出来るからです。
100人の制御屋さんに同じ装置の設計を依頼すると
全く同じラダーは1つもできませんが
100人全員同じ動作をさせることができるでしょう。

自分にしか作れないプログラムではなく
それ以外の何か他の制御屋さんにはできない突出した部分
実装スピード、正確性、等を磨けばよりいい制御屋さんになれるのではないでしょうか。