generalistからspecialistへ

一点集中化計画

時間の流れが速い

日々記録しよう。 ーーーーーー 昨日は毎週の通り、教習所に朝から3本。

学科模擬試験を合間に一つ受けた。94点合格で73点。昨日は1日その試験の設問が意味不明すぎて頭を悩ませた。 何度質問を読んでもひどい。つまり「何通りにも解釈できる」。 ネットで調べると他にも憤っている同士がいる。 というか日本全国民酷いと思っている。

帯広で自動車教習所に通う

何とした事か。免許の更新を忘れていた。

ミッションの普通自動車免許、中型バイク(普通自動二輪)の免許が失効した。

期限が切れて半年~1年以内に届け出たので、完全失効ではなく仮免になったので、不幸中の幸いではあるが。

これが発覚してから、北海道移住をどうするかは少し考えた。

車なしで北海道に住むのはまず無理、と同僚から聞いていたしネットでもそういう論調が強い。

何とかならないかを速攻で調べたが、失効はどうにもならないので帯広で免許を取り直す方向で手続きを進めた。

帯広教習所に電話する。「仮免から入所できますか?」

「できますよ。費用は20 ~ 25万です」

「今大阪に住んでるんですが大丈夫ですか?」

「は?????」

「かくかくしかじか、、、」

「できん事はないです。住民票を帯広に移して、仮免の住所も帯広に移して、、」

という訳で無事入所まで漕ぎ着ける。現在絶賛教習を受けている。

座学の教習は現在ネットから受けられるようになっている。これが結構曲者で、顔をカメラで映しながらでないと受けられない。AIでほんとに受けているかを判定しているらしい。それはいいのだが、結構な確率でエラーになる。改善が待たれる。

「大丈夫、雪が降るまでには免許取れますよ」という教習官の言葉が、ああ、北海道に来たという気持ちにさせてくれた。

帯広の物価

引っ越してきて1ヶ月。スーパーは近くの「フクハラ」を活用しているが、今回は物価について感じる事を1つ。

以前大阪にいた時は地方のイメージは「物価が安い」だった。当然これはあらゆる商品全て、が対象である。

もちろん暖房費が相当掛かる、などは調査済みだったが、それ以外にも結構思う所がある。

以下は大阪と比べて、という意味で書いている。

食費:

普通に高い。肉類は質の幅があると思うがそれでも高い。豚、牛、鳥どれも大体 1g => 1 ~ 2 円で買えるレンジのがあったが、こちらは種類が少ないからだろう、どれも2 ~ 3円はする。 野菜も、魚も同じく高い。おそらく海外からの輸入が少ない?のではと考えた。地産地消が前提なのだろうか。 だがそれでも菓子類など、袋物もかなり高く、例えば「ルマンド」が大阪では110 ~ 120円なのが、こちらは190円とかする。

人口が少ないからスケールメリットが掛からないんだろう。人が多ければ薄利多売で売れるのがここではそうはいかない。

コーン缶なんて十勝はとうもろこしのイメージがあるから安いのか、と思うがそうではない。「フクハラ」で1缶190円とかして「高い!」と感じたから買わなかったが、ネットで調べると amazonの方が安い という。

帯広で駅前の長崎屋やら、イトーヨーカドーやら藤丸やらが閉店しているのはこの辺に原因があるのではないか。

人口が減っているから、が原因ではない。

帯広で一番人口が多かった時は17万人前後だが、今は16万人ほど。17分の16になったからとて、こんなに店が閉店するものだろうか。

単純に買い先がネットに移ったからではないかと予想している(持論)。あと単に競争力の問題。

家賃

家賃は安い。大阪の約半額。築10年以内で 駅前 2LDK 8万円、探せば 築10年 3LDKで8万円も普通にある。土地は有り余っている感じ。

ゴミ出し

北海道でも帯広は高い方ではないだろうか。20Lの燃えるゴミ(生ゴミ)を出すには60円掛かる。缶や瓶は無料で出せるが、大阪市内のようにガンガン電池も紙も混ぜて無料で捨て放題、というわけにはいかない。焼却炉のパワー(市の財政)に依存するからそこは仕方ない。

apiでお天気を引いて来る練習

3日先までの気温、天気を取得して保存する練習をしました

Makefile

weather:
    ruby ./ruby/weather.rb

weather.rb

require "net/http"
require "uri"
require "json"

# 参考 https://auto-worker.com/blog/?p=7739
# https://www.weatherapi.com/my/ で取得
API_KEY = "XXXXXXXXXXXXXXXXXXXXXXXX"
CITY = "Obihiro"
# 無料プランは3日先までforecastできる
DAYS = 3
# 履歴保存場所
HISTORY_PATH = "./ruby/history/weather.txt"

def main
    url = URI.parse("https://api.weatherapi.com/v1/forecast.json?key=#{API_KEY}&q=#{CITY}&days=#{DAYS}&aqi=no&alerts=no")

    response = Net::HTTP.get_response(url)
    forecastdays = JSON.parse(response.body)["forecast"]["forecastday"]

    filtered_data = filtered(forecastdays)

    insert_dates(filtered_data)
end

def filtered(forecastdays)
    forecastdays.map do |f|
        {
            "date": f["date"],
            "mintemp_c": f["day"]["mintemp_c"],
            "maxtemp_c": f["day"]["maxtemp_c"],
            "condition": f["day"]["condition"]["text"]
        }
    end
end

def insert_dates(filtered_data)
    # dateがすでに存在していたらその日付のデータは書き込まない
    filtered_data.each do |f|
        File.open(HISTORY_PATH, "a") do |file|
            file.puts "#{f[:date]}, #{f[:mintemp_c]}, #{f[:maxtemp_c]}, #{f[:condition]}" \
            unless existed_dates().include?(f[:date])
        end
    end
end

def existed_dates
    existed_dates = []
    File.open(HISTORY_PATH, "r") do |file|
        file.each_line do |line|
            existed_dates << line.split(",")[0]  # 既存のdateを代入
        end
    end
    existed_dates
end

main

実行

$ make weather

こんな感じでtextファイルに保存 履歴はずっと残っていく

date, min_temperature, max_temperature, condition
2023-10-08, 6.3, 15.6, Partly cloudy
2023-10-09, 4.7, 16.3, Sunny
2023-10-10, 8.3, 17.3, Moderate rain

契約しているサブスクが多くて見てないのにお金払ってないか

悔しいので全メディアを開くようにした。

Makefile

media:
    # NHK ondemand
    open "https://www.nhk-ondemand.jp/user/availableList/index.html"
    # FOD
    open "https://fod.fujitv.co.jp/member/resume/"
    # videonews
    open "https://member.videonews.com/login.php"
    # amaozon anime
    open "https://www.amazon.co.jp/gp/video/genre/anime"
    # rebuild
    open "https://rebuild.fm/"
    # backspace
    open "https://backspace.fm/podcast/"
    # abema
    open "https://abema.tv/"
    # youtube app
    open -a /Users/sdk/Applications/Chrome\ Apps.localized/YouTube.app
$ make media

全部をちゃんと消化するようになって気分が良くなった。

1ボタンで好きなジャンルの曲を流す

毎回PCでyoutube開いて2~3回クリックして音楽再生するのが面倒。

スマホでタップするのもしんどい。

Makefileで実行することにした。

Makefile

lofi:
    ruby ./lofi.rb

lofi.rb

# 好きなyoutube channelのplaylist をいくつか配列に入れる
list = [
    "https://www.youtube.com/watch?v=7ZguAEoNpZw&list=PLt7bG0K25iXhOFpYjk1uCqkPtkNDZwqub",
    "https://www.youtube.com/watch?v=Ot6d3l9r-Lk&list=PLt7bG0K25iXi9KIt6P6yStMp9ObzXjApm",
    "https://www.youtube.com/watch?v=CSOsK6Dy58U&list=PLt7bG0K25iXjvB28Upp4YU_LvLS2MFbLr"
]

system "open #{list.shuffle.first}"
$ make lofi

エンジニアが行動に出る時

シェークスピア氏は言った。転職するかしないか、それが問題だ。 (生きるか死ぬか、それが問題だ。live or die, that’s the question)

この数ヶ月、その事ばかり考える。

倒れて行く戦士達。私と同じ日に入社した同僚は先月転職を表明した。 更にその先月、最も有能なエンジニアが胃腸炎と共に退職した。 私自身も以前から企業のカジュアル面談を複数受けている。

1年前、入社した瞬間に、いかにこの会社がまずいかはすぐに分かった。 バージョン管理しない、自動テストしない、一番歴が長い先輩のIDEがdream weaver。

面接の時githubで管理してるって言ってませんでした?と聞くと、やる予定であってやっているとは言ってない、と。

やるだけやったか

入社当日に退職を決意した訳だが、、否定するだけなら簡単である。 どんな環境でも一定、学ぶべき事柄、自身が活躍するスポットはあるはずで。

自分にできる事は何か。何をすべきか。 現状の分析から入った。

会社は受託メインで売上ているが、自社サービスが少数あり、全売上の2割を占める。社長はどんどん新サービスをリリースしたいとの意向がある。

しかし現状の数字を踏まえるに、サービスの売上のほとんどが、ある1つのアプリに偏っている。

この場合取るべき戦略は確定している。自社サービスに関しては、その1つに全リソースを投下するという事。

だが社長は新しい事をどんどんやりたがる。0 => 1が自分の仕事である、と公言しているように。そして失敗の検証はしない(ここが致命的)。

その新サービスも3種類ぐらいアイデアがあるらしく、同時進行で進めて欲しいと言う。


やばい人だと直感するには十分である。

私は問うた。その3つの内で一番自信があるのはどれなのかと。無論優先順位を付ける為である。 社長答えて曰く「全部」

私「競合はどこで、自社のはどこが優っていて、売れると確信している根拠とかをざっくり教えて下さい」

社長「....そこまで考えてない」

、、

念押しするが、これはマジで開発させようとしている直前の状態での会話である。

今までこれでやって来たらしい。言い返す社員はいなかった。いや、反論を唱える、憂える戦士は去って行った、と表現する方が正しい。

華麗なる丸投げ

私が入社当初に任された仕事は、、その新サービスの改善だった。 開発を進めているアプリがすでにあり、しかも暗礁に乗り上げていると言う。

事情を聞いた私はとにかく辛かった。 しょうもなすぎて、、と言えば他人を貶める気がしてすまない気持ちになるが、、

遠い目になりながら、一部を説明すると、

  • 社長のjust idea状態(<= 重要 = 超危険)のアプリをとにかく早く開発したい。が、社内にリソースはない。最近よく聞くオフショア開発なら安くできるし最高!と思ったらしい。
  • そもそも「仕様」がない。なので「とりあえず作っておいて」で進めたらしい(何を)
  • 後から追加される仕様。依頼したマレーシアの会社のスキルも高くないと発覚するというダブルパンチ
  • 結局頓挫。バグだらけだが無理やりそれらしくさせて納品させた。しかも社長は「完成してないから」という理由で約束の半分の料金しか払わなかった

すさまじい。しかもこの外注先の会社は出る所に出たようで、社長は結局残りの半分を1年後に払っている。

この頓挫したプロジェクトが私の初仕事となった。

人はコードで酔えるか

このプロジェクトのコード解析に入る。フロントはember、frameworkはlaravel。

最初はvueで開発すると言ってたのが、途中でemberに変わったらしい。 (それにOKする弊社もどうかと思うが)

、、

開始5分で吐きそうになる。

controllerはコピペ の連続、共通化は皆無。一部挙動を変更したが、それをコピペ 先全部に反映し切れてない事によるバグ。

ルールがない命名規則、プロジェクト内は不要ファイルやマジックナンバーで溢れかえって、、

1つのメソッドが500行以上というのが一番きつい。しかもその半分は「コメントアウト」という、、

依頼側の指示が破滅的であったかもしれないが、開発者の手元も狂っていたのではないか。

2つが掛け合わさるとこのような相乗効果が生まれるのか、、という絶好の例である。

勝算を確認

私はこのアプリの改善を任された。それはいい。私は開発してそれを売りたいと思う。

しかし「売れるアプリ」を開発したい。マーケティング会社でセールスを数年やって来たので、いくらか売上も気になる所。

しかしこのアプリの挙動を確認して最初に思った事は「こんなの売れる訳ない」

他社が普通にやってて、下手したら無料でできる事を、自社は月額何万も取ってしかも超低機能。速攻会議開いた。開発はやめるべき。もしくはキラー機能のideaはないのかと。

周囲はこのアプリのウリは○○です、と言うが、、いやそんなの他社がやってますけど、、しかも大企業が低価格で。

たくさん同じような商品が並んでて、そこからウチの商品を選ぶ理由はなんですか??

一斉に静まり返る社内、、

スパイラル into hell

すでに開発に入ってしまっているから、リリースしないと勿体ない。 もうこれまでに外注もして、社内エンジニアも数人が参画して1年経つ。

しかし即やめるべきである。単なるサンクコスト。 経営者の力量が分かる判断の一つ。 止血するのか。出血を続けるのか。

別にエンジニアとしては、開発を任されたのだから、ただ仕事をすればいいとも考えられる。

しかし、明らかに売れない(と私は思う)商品を、開発する気にはとてもなれない。

商品が売れなければ会社は儲からない => 儲からなければ開発環境が改善しない、給料が増えない => 採用にお金掛けられない、いい人材が集まらない

売上は全ての職種に直結する。

真っ裸の王様

何よりタチが悪いのは、自身を有名起業家になぞらえている点である。

イーロン、ベゾス、ジョブズ。みんな型破りだ。俺が破天荒なのも同じだ、と。

女性社員と飲みに行った時に「将来経費でロケット買うからな」との発言、 そしてそれを聞いた社員は「何の為に」というつっこみが喉元まで出たという証言もある。

他にも、、

酔って格闘家に喧嘩売って、ボコボコにされたり、 路上で寝て財布無くしたり、 ホテルの備品盗んで部下に返しに行かせたり(本人は「借りた」と主張)。

社長という名刺があるから何とか人は話を聞いてくれる。

井の中の蛙が、お山の大将と悪魔合体した。

そんな感じ。

、、、

別にそれでもいい。

めちゃくちゃ怖い社長よりも、ダメな社長の方が仕事しやすいって面もあると思うから、、

だけど、、

以下の4つをgoodな順に並べた時、どんな順になると思う?

A: 優秀、ハイパフォーマー B: 普通 C: 仕事しない D: 全然仕事できないけど行動しまくる

焦点はC、D。どちらがマシか。

、、

正解は断然C。Dは他人に迷惑掛けるからだ。パフォーマーの足を引っ張る。何もしない方が遥かにマシ。

、、

こんな話はゴマンとある。 書き切れないから、もうここからブレット(箇条書き)にする

自分なら以下のような時、どう行動するかを考えながら読んで欲しい。

蟹工船への乗船リスト

  • 採用ではコードを見ない
    • 理由: エンジニアなんて誰でも同じだと思っているから
    • 証拠: 未経験でも1ヶ月研修したら1人で仕事できると思っているし、それ前提で予定組んでる
  • ITは基本無料だと思っている
    • 理由: 現に世間は無料アプリで溢れているじゃないか
    • 証拠: セキュリティソフトやIDE導入などを進言すると、まず最初に「それは無料か」を聞かれる
  • パフォーマンスの概念がない
    • 理由: そんなの目に見えないよ。それより即効果が出て売上が上がるの、何かない?
    • 証拠: エンジニアに終始話しかけてくる。電話も出るよう促す。リモート禁止。成果を労働時間で測る
    • 証拠: 支給PCはメモリ8GB。基本3年以上前の中古。安さが全て
    • 証拠: また海外に外注しようとしてる。安さが全て。外注管理を計算に入れてない?そんなの気持ちでカバー!
    • 証拠: 採用メディアがマイナビ。安いから!
    • 証拠: 仕事の効率をテーマに、第1 ~ 第4領域の話をするも、全く通じず
  • 開発を知らない開発会社
    • 理由: プログラマなんて誰でもできると思ってるから。ちょっと勉強したらすぐできるようになると思ってるから
    • 証拠: phpの会社なのにC#の案件取って来る。「何でも一緒でしょ?」
  • ブレる
    • 理由: 自分でも自分が何してるか分かってない。短期記憶が2秒
    • 証拠: コロナで手ピカジェル販売がメインに。業種変わった。開発関係なし

ボトルネック

TOC的に言うと、会社の障害は間違いなく彼である。この結論が出た時、私は目を覆った。

開発環境がどれだけ悪くても、未経験の人材ばかりでも、改善の努力はして来た。

すなわち自動テスト導入を促し、勉強会を開き、reviewの文化を取り入れ、評価制度を作って、、

しかし、、、彼がボトルネックと分かった今、どうする事ができよう。 私は社長を変更できない。彼を排除するのが最適解だと分かっていても。 全ての問題の発生源は彼なのである。

ビジネスの格言「会社は社長で全て決まる」は真理である。例えどれだけ社員が優秀だとしても。

メモリやHDDがどれだけ高性能でも、CPUがダメなら、ダメなのである。

再掲: やるだけやったか

しかし彼と会社を全否定する気にはなれない。

これまでそれなりに生き残って来た訳で、今年で8期目になる。 彼の仕事の取り方、進め方、決断で今までやって来たのだろう。

古株の社員もいる。固定された得意先もある。

彼らからしたら、新しく入って来た奴が、

「なんかパフォーマンスとかcircleCIとか、ポモドーロとかメモリ16GBじゃないとかありえんとか言うとる」

って感じなんだろう。

、、、

誰も、何も悪くない。

価値観が、違った。

その一言でまとめたい。


※自身の投稿をback up する目的でここに保存しています。 qiita