君は心理学者なのか?

大学時代に心理学を専攻しなぜかプログラマになった、サイコ(心理学)プログラマかろてんの雑記。

オーキド「こういうものには つかいどきがあるのじゃ」〜Rubyよりもシェルのほうが良いときもある。プログラミング技術は要件に応じて使い分けよう〜

上司からの司令

上司「data.txtファイル中の、この数字を昇順にしてくれ。なるはやで」

1
45
31
2

上司が欲しい出力結果はこんな感じ。

1
2
31
45

Rubyを使用した場合

elements = []

File.open('data.txt') do |file|
  file.each_line do |row|
    elements << row.chomp.to_i
  end 
end

p elements.sort_by {|a| a}

7行で出来た。

シェルを使用した場合

$ sort data.txt

1行で出来た。

オーキドの言葉「こういうものには つかいどきがあるのじゃ」

この言葉を思い出した。

f:id:karoten512:20171126080256j:plain

おそらく僕がRubyを選択したら、この言葉を言われたと思う。

求められている要件

txtファイルの内容をソートしたい

なるはやで

要件を満たす手段

1番目の要件を満たす言語は、いくらでもある。

ただ、「なるはや」という2番めの条件を入れると、

エクセルという選択肢も出てくる。

さらに知っているのであればシェルが一番早い。

求められている要件 別パターン

txtファイルをアップロードして、中身をソートしたい

その内容をみんなで共有したい

社内でのみ使うのでセキュリティはあまくて良い

なるはやで

要件を満たす手段

この場合は2番目の要件が重要で、共有サーバで見れる必要が出てくる。

ここで

「ファイルアップロード! データ共有!

 webアプリだ! webアプリならRailsだ!」

わかる。でも他にも方法はある。

3番目の要件は

「セキュリティがそれなりに担保されているフルスタックフレームワークである必要は無い」

と捉えることもできる。

1機能のみをフルスタックフレームワークで書くのは大げさすぎる。

すると、「生phpで書く」という選択肢が出てくる。

ファイル分割したとしても2ファイルくらいで実装できてしまいそう。

(もちろん機能的に大きくなることが予想されるのであれば、

 フレームワークという選択肢もあります)

技術は要件に応じて使い分けるのが大事

プログラミングはあくまで手段。

要件をなるべくすべて満たすような手段を選ぶことが、ビジネス的には大事そう。

とはいえ手段すべてをマスターすることはできない

マスターはしなくて良いので、それぞれの技術の特徴を抑えておくことがまずは大事。

抑えておくと、要件が降ってきたときにいろんな手段を思いつくことができる。

生PHP...小規模開発

Rails/PHPフレームワーク...中規模〜

Java…大規模な業務系開発(実績があるから)

SQL...集計

統計解析…Python, R

組み込み…C

コマンドライン上での簡単な処理...bash

※個人の見解です&ものすごくざっくりです

まとめ

弘法は筆を選ばないが、エンジニアは手段を選ぶほうがよい

そんなエンジニアになりたいと思った。