Kikuchy's Second Memory

技術のこととか、技術以外のこととか、思ったことを書き留めています。

エンジニアを取り巻く業界の未来予想

DSC_0154.jpg

エンジニアマネージャーに関する話題や技術広報に関する話題を、よく聞くようになりました。
多分、これからは「エンジニア自身」の需要より、「エンジニアをあれこれできる人」の需要が高くなるのかなぁ、なんて思ったりします。

これまで

(IT系の)エンジニアという職の理解がまだ浅かったからか、エンジニアそのものが希少であったからか、エンジニアを名乗る人全員の価値が高い時期だったのかなと思います。
製品のライフサイクルモデルによれば、ライフサイクルは次の順を辿るといいます。

  1. 導入期
  2. 成長期
  3. 発展期
  4. 衰退期

導入が終わって、成長期が少し落ち着いた頃が今、という気がします。

これから

真に必要とされているのは、(ビジネスの要件にもよりますが)「ビジネス上の要求をよく汲み取り、技術的見地から適切に要求を実現する方法を考え出し、高速かつ安価に成果物を生産し、その成果物が長期にわたって価値を生産し続けるようなものを作り出せる」エンジニアであると広く認知されるようになりました。
いわゆる「優秀なエンジニア」というやつでしょうか。

よく言う「エンジニアが足りない」というのは、「事業が必要とする水準で上記の条件に該当するエンジニアが足りない」ということでしょう。

すると、それに該当するエンジニアというのはかなり数が少なくなります。
今やソフトウェア開発は事業を動かす上で必須なのに、それを開発できないとなると問題です。
また、せっかく要求水準を満たすスペックのエンジニアを雇ったとしても、すぐに愛想をつかされて逃げられてしまってはたまったものではありません。

そこで需要が出て来るのが、エンジニアマネージャーと技術広報だと思うわけです。

エンジニアマネージャー

世はエンジニア大争奪時代。
条件や労働環境、人間関係、チームや会社のビジョンなどが自分の欲するものと合致しなければ、エンジニアはほかの良いところにすぐ移動してしまいます。

採用はタダではできません。
採用したのにすぐ他に行かれてしまっては、採用にかけた金銭的時間的人的コストが無駄になってしまいます。

それに、当該エンジニアが果たしていた役割の穴埋めだって容易ではないでしょう。
特に長くいるエンジニアであれば尚更です。
単にポストに穴が空くだけでなく、事業ドメインに関する暗黙的知識や人間関係における役割も欠ける事になります。
その人が居なくなることで、ほかのエンジニアがジワジワとやる気をなくしていくことだってあり得ます。

そこでエンジニアマネージャーが価値を発揮します。

(私が考えるエンジニアマネージャー像ですが)エンジニアマネージャーは、組織のエンジニアのタスクマネージングのみならず、メンタルケア的な役割を果たします。
また、エンジニアが今後どうなっていきたいのかなどの欲求を掘り起こし(あるいはエンジニア自身が気づいていなかった欲求に気付かせ)、それを叶えるために組織内でできることをします。

これらの活動によって、エンジニアの離脱可能性を低減する。これがエンジニアマネージャーの役割ではないでしょうか。

せっかく雇ったエンジニアを逃さないための役割ですし、プログラミングよりもエンジニアマネージングの方が難しいでしょうから、自然とその価値は高くなると思います。


技術広報

さて、そもそもエンジニアをどう雇いましょう?

エンジニア的に何も魅力が無いところに、エンジニアが突然求職してきたりはしません。
すると必然、エンジニアを雇うためには、エンジニアに向けた魅力の発信が必要になります。

(私が考える技術広報の理想像ですが)技術広報は、事業や会社のミッションの宣伝、労働環境や条件のアピールなどをエンジニア市場に特化して行います。
そうした採用広報の役割だけでなく、組織内のエンジニアの様子を外から見えるようにすることで、採用対象に組織にジョインしてもらった後のことをイメージしてもらったり、自己成長に有効な環境であることなどをアピールしたりします。

こうした活動によって、優秀なエンジニアの採用可能性を高める。そうしたことをするのが技術広報ではないでしょうか。

雇いたいと思えるエンジニアを引きつけることができ、またそうそう上手くできることでもないですから、その価値も高くなるのではないでしょうか。

その他

他にも需要が高まりそう(≒市場価値高そうで儲かりそう)なエンジニア関連の仕事があるのかなと。

  • まだ優秀でないエンジニアを優秀なエンジニアに育てる仕事
    • 現在はCTO業がこの役割を担っている気がする
    • CTOは技術的な目線で経営をするのが仕事なはずなので、教育については専門職化するのかも?
  • 専門外の人に専門職の仕事を啓蒙する仕事
    • エンジニア限らずデザイナーとかマーケターとか、場合によってはバックオフィス系とか
    • アジャイルなチームは誰がどのタスクをこなしても良いはずなので、エンジニアでない人が画面レイアウト組んだりコード書いたりしてもよい
    • それを促すためには相互に仕事内容や用いる考え方やテクニックなどを理解してもらう必要があるはずなので、それを促す
    • 今はスクラムマスターの仕事かもしれないけど専門職化するかもしれない?

「この世は(時間を)奪ったもの勝ち」という状況は変えられるのか

人間という生き物は失うことについて敏感らしいです。
なんでも、「今10ドル失うが将来に25ドル手に入る選択肢よりも、今5ドル手に入る選択肢を選ぶ」ことが多いのだとか。
総合的には前者のほうが得なのですが、本能的に失うことを回避しようとするもののようです。


ところで、人間には時間という、非可逆な財産があります。
時間というのは便利なもので、将来的な自分への投資(勉強)や、他者へ提供することでお金に変える(労働賃金など)ことができるという性質を持っています。


時間は財産であり、他者から奪うこともできるのです。
例えば仕事を他人に押し付ければ、他人の時間を消費させて自分の時間を浮かせることができるわけです。
押し付けられた側にとって仕事から得られるお金が大きな価値を持つのならば、それは「仕事を巻き取ってもらった」ということになるので奪ったことにならないかもしれません。
が、押し付けられた側が、お金より時間に価値を感じていたら、もしくは押し付けられた仕事が何も産まないとしたらどうでしょう。
あるいは、押し付けられたものが仕事ではなくただの苦痛であったら?
価値が釣り合わないのですから、これは略奪、もしくは搾取です。


ところが奪われた時間を取り返すことはできません。
時間には不可逆性があり、何を持ってしても補填することができないのです。
いくらお金を積んだところで、時間は帰ってこないのですから。


(「時間を経過させる」ということは「人の命を削る」ことでもあるので、人間を若返らせる方法が開発されれば、また状況は変わるかもしれませんね! いつになるかはわからないですが)


つまり、奪われれば奪われただけ損が嵩んでいきます。
電気やお金は刑法で財産とされていますが、時間はそうではないので、司法に裁きを求めることもできません。
すると、時間を奪われたことで被った損失は本人にしか補填できないのですから、ますます損は積もっていきます。




この状況、変えられるのでしょうか。
私にはそうそう変えられないように思います。
奪われないようにするにはどうしたら良いのか、という学びを得られて、それだけです。
(または、人から時間を奪う方法の学びかもしれませんね)




奪い返せば良いのかもしれません。
しかしそれは新たな負の連鎖を生みそうでもあります。
それで精神をすり減らすのもまた、避けたい。


できることならこの状況を変えたい。
一体どうすれば、この状況は変えられるのでしょうか。





GPD WinにXubuntuを入れてコーディングする

以前
GPD Winで通勤中にコーディングしたいという記事を書いたのですが、
やっぱりWindows (bash on Ubuntu on Windows)での運用は辛かったのでLinuxに乗り換えることにしました。



何が辛かったのか


satさんが性能比較をしてくださっているとおり、ファイル入出力が遅いのが一番つらいです。

qiita.com


コンソールでvimを使ってスクリプトを書いて…というのがメインだったのですが、
ファイルを開くのも10秒くらい待たされ、保存でも数十秒待たされ、
という感じだったので流石に我慢できなくなって乗り換えを決意しました。

どのLinuxディストリビューションを使おうか

GDP Winは非力なUMPCです。
でもサクサク動いて欲しい。

開発のために色々とプログラムを動かすため、OSなど常駐プログラムがたくさんメモリを食ったりするのは許せません。

そこで、ウィンドウマネージャにXfceを使えばまあ軽量だろう、という安直な考えで、まずはXubuntuを導入することにしました。

じつはその前にManjaro Linuxという、Arch Linuxベースのディストリを導入しようとしたのですが、どうしてもWifiが繋がらずにあきらめてしまいました。
またLinuxの知識がついたり、Debian系で満足できなくなったら、いつかArch系にも挑戦してみたいと思います。
GentooはCPUが非力なのでちょっと…

XubuntuをGPD Winに入れる障壁


GPD Winはそこそこ特殊な端末で、普通にXubuntuを入れようと思っても期待通りに動いてくれません。

  • 画面が横になってしまう
  • Wifiがつながらない
  • 電源ボタンを押しても反応しない

など、いくつかの不具合がコミュニティに報告されています。

その不具合報告をベースに有志の方々がカスタムディストリを作る方法を公開してくださっているので、それを参考にXubuntuをカスタムしました。


カスタム方法はこちらのページを参考にさせていただきました。

[GPD Pocket]GPDPocket向けにUbuntu系ディストリビューションをリビルドできるツール – BOOLEE STREET.net

上記はGPD Pocket向けですが、GPD Winも使用しているWifiモジュールが同じものだったりするので、問題なく使用できています。


当方、母艦はMacなので、まずはXubuntuをインストールした仮想マシンを用意します。
今回はVirtual Boxで作成。

作成した仮想マシン内でrespinしていきます。

$ sudo apt install -y git wget genisoimage bc squashfs-tools xorriso libssl-devel dpkg-dev
$ git clone https://github.com/stockmind/gpd-pocket-ubuntu-respin.git
$ cd gpd-pocket-ubuntu-respin
$ wget (どこか近いところからXubuntu17.04のisoを落としてくる)
$ ./build.sh xubuntu-17.04-desktop-amd64.iso 

仮想マシンだったのもあって時間はかかりました。確か3時間くらい。

あとは適当な方法で出来上がったISOファイルをUSBメモリに焼けば準備完了。

焼きあがったUSBメモリをGPD Winに挿して、Boot MenuをいじってUSBから起動、指示に従ってインストールするだけ!!

今回はWindowsを残さず、全部フォーマットしてLinux向けにパーティショニングをやり直しました。

これで完成。
後はDPIやマウスカーソル速度などを調整して出来上がりです!


出来上がりはこちら。
実機で動いている様子を撮りたかったので画面は見づらいですが、ご勘弁を!

f:id:kikuchy:20171003235513j:plain


IntelliJも動きます。
時々補完の表示が遅いかなと感じる程度で、Kotlinのプログラムもバッチリ書いて動かせます。
問題だったvimもストレスなく動作します。
zshも問題ない速度で補完してくれるので、普段使いにも支障ありません。
これで通勤中もコードを書ける!

さて、何を書こうかな。

感情処理のはなし

エンジニアは情報処理が得意だったりしますが、人間として生きていると感情処理もしていかないといけません。

 

 

 

昔から他人にネガティブな感情を向けるのが苦手です。

 

そりゃ、そんな感情を他人に向けないに越したことはないのでしょうが、それを差し置いても苦手です。

どうしても怒らないといけない時があるかも知れません。

そんなときも怒れる気がしないのです。

たぶん、ははは仕方ないよ、と言うのが精一杯だと思うのです。

 

自分の中だけで感情が暴れていて外にエネルギーが出ていかないので、なんとなく自分が磨り減っているのでは、という感覚はあります。

しかしそれを避けたいという気持ち以上に、他人にネガティブな気持ちを向けた結果、自分にネガティブな感情を突きつけ返されるのが怖いのです。

 

要は意気地無しということなのですが。

 

多分、感情をぶつけ合って、その末に仲直りするのがベストなのでしょう。

ところが仲を直す方法がわかりません。

 

きょうだい喧嘩などは昔よくしましたが、お互いその感情が一過性のものであることはわかっていたので、何をせずとも仲は良くなっていました。

きょうだいほどよく理解できていない人に対しても、それを求めて良いのでしょうか。

 

もしくは感情のぶつけ合いの末に決裂することもあるかも知れません。

そうなるなら、それまでの相手だったと割り切ってしまうのが良いのかも知れませんが、それによって自分の立場が悪くなるようだと、それはそれで別の恐ろしさがあります。

 

自分の中で暴れ続けるエネルギーをどうしたら良いのか、

この意気地無しをどう正せばいいのか、

今抱えているこの感情をどう処理したら良いのか、

未だにわかっていません。

GPD Winで通勤中にコーディングしたい

GPD Winが安くなっていたので衝動的に買ってしまいました。

この端末は元々ゲーム用ですが、何と言ってもボタン式キーボードがついているのが魅力。
日本の通勤電車の中でも使用できる、学生/サラリーマンの味方です。
パンタグラフ式キーボードは、立っているときに両手で使用できないので却下)

普段は家でも会社でもMacを使っていて、コードを書く場合もVimスクリプトを書くか、IntelliJJavaを書くか、という使い方をしています。
GPD WinにはWindows 10 Homeが入っているので、とりあえずBash on Ubuntu on Windowsで運用して遊んで見ることにしました。
気に食わなかったら適当にLinuxのディストリを見繕って入れるつもり。

Windowsで快適に過ごす環境を整える

Zeal

Macでは言語やライブラリのマニュアルを引くのにDashを使っています。

Windowsでも使える同じようなZealというものがあるようなので、これを使ってドキュメントを引くことにします。

Zeal - Offline Documentation Browser

フォント

SourceCode Pro for Powerlineを入れます。
Vimでlightlineを使っているので、対応したフォントを使えるのは嬉しい。

github.com

ランチャーは検討中

MacではAlfredを使っていてDashもそこから引けるようにしているので、できれば同じようなことをしたいところ。
アプリケーションランチャーとしてはスタートメニューだけで事足りるのですが、Zealを引くことのできるランチャーが果たしてあるのかはまだわかりません。


Linux環境を整える

Creators Updateを入れる

Creators UpdateからUbuntuが16.04になったらしいので、新しいものは良い、の精神で放り込みます。

放り込んだらば、WifiSSIDを認識しても接続ができない、という状態に陥ったので、Wifi Patchをあてます。

www65.atwiki.jp


あとは Bash on Ubuntu on Windows をインストールして、bashをぺちぺち叩いていきます。

git, gcc, zsh

何がなくともgitもgccもないと何もできません。
clangではないのは、この世にはgccじゃないとビルドできないものがまだまだたくさんあるから…

zshの保管機能が優秀すぎてそれなしでは生きていけない体になってしまったのでzshも入れます。

$ sudo apt install git build-essential zsh

vim

aptにはまだvim 8が来ていないので、有志が作ってくれたppaを使います。
tipsonubuntu.com

普通に install vim するとluaだとかが有効にならずneocompleteが使えないので、gnome全部込みのやつを放り込みます。

$ sudo apt install vim-gnome

dotfile

私は個人用のdotfileをgithubで管理しているので、gitもvimも入ったところでおもむろに放り込みます。

github.com


そしてvimを起動したらプラグイン類をインストール。

:call dein#install()

もしかしたら先にX Server入れておかないと、githubのユーザー名とか聞かれたときに動かなくなるかも?
githubのユーザーIDとかを聞かれて、プロンプトに入力できずタイムアウトで死んだ)

anyenvとphpenv

今書きたいプログラムはPHPなので、phpenvを入れておきます。
phpのビルドにはなんだかんだたくさんパッケージが必要なので、この際全部放り込んでおきます。

インストールはこちらを参考にしました。
qiita.com

PHP7.1.6ではbisonは最新でも問題なかったです。
あと、このままではビルドが通らなかったので、いくつかパッケージを足しました。

$sudo apt install libssl-dev libmcrypt-dev libreadline-dev libxslt1-dev libxml2-dev libbz2-dev libcurl4-openssl-dev libpng-dev libjpeg-dev libmcrypt-dev libsqlite-dev libtidy-dev libltdl-dev make autoconf automake re2c lemon libsasl2-dev pkg-config bison

Windows環境とLinux環境を上手く両立させる

WSL Terminal

流石に標準のcmd.exeではフォントとか選択肢が狭すぎるしコピペもままならないのがつらすぎるので、WindowsSSHしたりmingw使ったりしてたときに使ってたminttyを使いたいところ。

あと、Explorerで開いているディレクトリをbashでも開きたいときが多分出てくるので、そこも対策したい。
カレントディレクトリからbashを起動できるようにしてくれるWSL Terminalなるものがあるということなので、とりあえずこれを使ってみることにしました。

github.com


etc/wsl-terminal.conf にシェルを指定できる項目があるので、bashからzshに書き換えておきました。

X Server

gvimを使いたくなることもある気がするので、VcXsrvを入れてスタートアップで起動するようにしておきます。
あとはprofileの方にもDISPLAY環境変数を設定しておきます。
sourceforge.net

export DISPLAY=localhost:0.0

今のままだとgvimのメニューなど日本語部分が文字化けするので、Windowsで使えるフォントを放り込んでフォントキャッシュを再作成します。
こちらを参考に行いました。
d.hatena.ne.jp


これで無事にgvimも使えるようになりました。
WindowsデスクトップにUbuntuのウィンドウが出てるってなんだか新鮮。

現在の感想

CPUがAtomなので、非力さは否めない感じ。
コンパイルとかとても時間がかかるので、もしできることなら別のマシンでクロスコンパイルしたものを持って来たい気分になる。

キーボードは全体的に端末の左側寄りに配置されているので、右手はいつも突っ張った感じになる。
ホームポジションにポッチがあるのでタイピングはそこそこしやすい。
WindowsではAlt + F4をよく使うけれども、Function類はFn + 数字キーでの入力なので、とても入力できない。せめてAltとFnが隣同士になっていてくれれば良いのだけれど…

ジョイパッドはそこそこよい操作感。
細かいマウス操作は慣れが必要。
スクロールは上下しかできないので、左右にもできたらもっと嬉しかった。

画面がタッチパネルなのは嬉しい。
ブラウザで前のページに戻るときや、いちいちマウスカーソルを移動させるには遠かったりするときに、指で操作しちゃうと便利。
というか日々スマホを使っていると「手持ち端末の画面は触るもの」という意識になっているので自然と触ってしまうので、触れるのは嬉しい。

しばらくはこのまま運用してみたいと思います。
飽きたら…どのLinuxディストリを試そうかなぁ。