見出し画像

内向的な働き方 - 技術系の話 - Haskell | 5月13日 木曜日 8:00 | 雑記・日記

つらつらと手が動くままに雑記・日記を書く。

内向的な働き方

自分が開発を担当しているサービスは、特定のクライアントの業務に向けたフルカスタマイズのシステムか、もしくは、クローズドでOEM的にシステム部分を開発して提供しているかのどちらかだ。

一般の人がストアなどで買えるようなアプリを作っているわけではないし、企業の一員としてプロダクトを開発しているわけでもない。単に個人事業主として、また、システム領域については単独で一通り必要なものを開発することを生業としている。

システム案件の仕事を自分が直接取ることはほぼなく、懇意にしてくれている会社さんやフリーでコンサルタントなどをしている方を経由して仕事を受けるようにしている。フリーのエンジニアの働き方にはいろいろなスタイルがあると思うが、自分の場合は、限定されたクライアントとロングテールでお付き合いさせていただくことに注力したスタイルである。とても地味な働き方なので、周りとわいわいやりながら仕事をしたい人にはとても向かない(耐えられない)と思う。

自分の場合は、特に仕事においては、自宅で孤独に集中してなにかに取り組んでいるときが最も充実感を感じる。その次に特定の相手と1on1で対話的に話をしているときが仕事をしている実感を持つことができる。自分の仕事に対する集中力はここまでだ。複数で話をする場面になると、仕事人としての自分の価値を感じることができない。仮に周りが評価してくれたとしてもそれはたまたまだ。継続は期待できない。

みんなと集まってわいわい楽しい時間を過ごすのは感覚的に好きだ。しかし、それはプライベート/遊びにとどめたい。

そういう性格・体質なので、毎日の仕事への取り組み方として今の働き方は合っている。フリーで独立する際、自分を「商品」のように見立ててマーケを考え、認知を広げるにはどうしたらいいか、とか、手離れの良い案件をいかにたくさん受けてたくさん消化するか、などに焦点をあてたハウツー本なども何冊か読んだ。しかし、まったく性に合わないと感じた。そういうことはそういう売り方が得意な人がやるから効果が出るのであって、内向的に仕事をすることでパフォーマンスが向上するタイプの人間にはそれ相応の働き方があると思う。

自身の仕事人としての性質が内向的で、ロングテールのお付き合いを重視していると、結果として自分の時間が作りやすいという恩恵に与れる。技術職ゆえにたくさんの勉強が必要で、かつ、その勉強が好きでたまらない自分にとっては天職のように感じる。勉強のベクトルにしても浅く広くという感じじゃない。それは要らない。とても抽象的な表現になってしまうが、ある程度の深さを持った穴が地下階層のトンネルでネットワークを作っているような知識構造が最も役に立つ。表層にはとりとめがなくて溢れ返るほど大量の情報、ハウツー的知識、感情的な誘惑、感覚的快感・不快感・共感・反感…などなど…が渦巻いている。その荒波の中をサーフィンするのが得意な人たちも実際にいるが、僕の仕事はそれじゃないし、それをやると単に疲弊してしまう。ではどのようなアクションが得意なのかというと、地上に住む人達が入っていくのをためらってしまう地下世界へ赴き、中を淡々と探求し、なにか役に立つことを持って帰ってくるようなイメージの働き方だと思う。一人で考え、シンプルな道具と意外な資源の組み合わせでデライトなものを作り出すのが本懐だと感じる。

技術系の話

※ 以下は技術用語が織り込まれてくるので、読みたい人だけどうぞ。

***

4/23からはじめた Go 言語の勉強もだいぶ進み、実務に適用している。

今はちょうど次の新しいプロジェクトが始まるまでの待機時期なので、この時間を使って、2つのことに取り組んでいる。

ひとつは Go のように前から習得したいと思っていた言語の勉強。
もうひとつは、既存で動かしているものを可能なところまでメンテしようということ。

この2つはつながるようになっていて、過去に別言語で書いたプログラムを新しく学んだ言語で置き換える作業をする。

こういったことは過去に何度も行っている。当初 Perl で書いたものを Ruby や Python に置き換えたり、ときには部分的に Forth 系のスタック型言語や Lisp のような関数型言語に置き換えたこともある。また自分の場合は Bash のシェルスクリプトを書くのが好き、というか、慣れているので、いろんなところに差し込まれている。物によっては処理の中心的な機能をシェルスクリプトが行っているサービスもある。

シェルスクリプトはよく「グルー言語 glue language」などと言われたりする。グルーは「糊(のり)」という意味だ。実行速度やコードのメンテナンス性を重視して局所的に特定のプログラミング言語で書いたスクリプトやバイナリーをつなぎ合わせて全体を構成する役目をシェルスクリプトが行う。この発想で Linux をプラットフォームにして仕事をしてきた。職業プログラマになった当時は Windows 向けの業務用アプリケーションを作っていたが、その仕事を卒業して以降、独学でいろいろ勉強するようになってからは(Windows であれこれするのに飽きていたというのは正直あるが) Mac や Linux 機を使っていた。

今の自分の流れは、この10年くらいの間 Linux 環境で培ってきたノーハウを Windows ユーザ向けのアプリケーション開発に活かそうという方向に向かっている。この開発の主力になる言語の位置に Go を持ってきた。実際に書いてみているが非常にコーディングが愉しい。並行して、WEB アプリケーションや WEB API として提供できるように調整しているプロダクトもあり、こちらはサーバサイドの Linux OS の中ではこれまで通り Python やシェルスクリプト、それに、新しく Go が加わるような感じになるだろう。GAS や Node.js などのプラットフォームで JavaScript や TypeScript が活躍する場面も増えるだろう。全体を俯瞰すると、稼働しているサービスの中の既存の部分では主に Python とシェルスクリプトが頑張ってくれており、改築工事の手が入る部分や新しく増設される領域では Go や JavaScript が活用されるシーンが増えると言う感じ。

Haskell

Go の勉強法(途中をどんどんアウトプットしていくやり方)で調子づいたのもあるのだが、もうひとつふたつ学びたい言語がある。Haskell と Rust が主なターゲットだ。どちらも以前に触りだけやってみたがほとんど身につかないまま放置していた。

まずは Haskell からと思っている。まだ Go の学習も途中な部分はあるのだが、実務コードを書き始めたのもあり、単に書籍やチュートリアルなどからインプットするだけの期間は終了したと感じている。というわけで、興味の赴くまま Haskell の書籍をぱらぱらとめくり始めている。

まず教科書にしようと思っているのはこれ。

プログラミングHaskell 第2版 単行本(ソフトカバー) – 2019/8/2
Grahum Hutton (著), 山本 和彦 (翻訳)

それから、試し読みして興味を惹かれたこの本も気になっている。

関数プログラミング入門 ―Haskellで学ぶ原理と技法― 単行本(ソフトカバー) – 2012/10/26
Richard Bird (著), 山下伸夫 (翻訳)

昨日はなにはともあれ、今メインで使っているマシン(Windows10 に WSL2 で Ubuntu、という環境)には Haskell の開発環境をインストールしていなかったので Haskell Platform をインストールした。

sudo apt update
sudo apt upgrade
sudo apt install haskell-platform

Haskell も Go 日記のようなアウトプットができればいいなと考えているが、さて、どうだろうか。まずやってみよう。

SN

この記事が気に入ったらサポートをしてみませんか?