今月のプログラマ雑文

目次

脱ヘッダーファイルの風潮

Java言語やSwift、C#みたいに、ヘッダーファイルを無くす風潮は良い事なのかもしれないけれど、公開している関数・変数の把握が困難になってしまった点は大きな損失だと思う。IDE側でヘッダプレビュー機能みたいな物を実装すれば問題無いのだけど、外部ツールに依存しないとまともに使えない言語っていうのもどうなのかなという気はする。

Objective-Cの機能美

Objective-Cの凄い所は、SmalltalkやLispのような論理美を明確に持ちながらもC言語やJavaのような実用性を兼ね備えている所だと思う。C++に出来なかったことを軽々とやってのけている。Objective-Cは機能美に優れた良い言語だと思う。問題は命名規則が冗長的なのと、使える環境が限られてしまう所だけれど、趣味として学ぶ分には最高に面白い言語だと思う。

エンジニアとコミュニティ

インターネット上のエンジニアの世界では様々な属性やコミュニティが形成されている。ツイッタラー、はてな民、スラド民、2ちゃんねら。それぞれ特徴があって面白い。

  • ツイッタラーは変な人が多い
  • はてな民は否定的な人が多い
  • スラド民は意外と建設的な人が多い
  • 2ちゃんねらは支離滅裂な人が多い

海外のコミュニティではツリー形式のコメントシステムがメジャーな気がする。スラッシュドットのスタイルは議論を行うための場としては理想的かもしれない。Twitterや2chで同じような議論をすると空回りしやすい。コミュニケーションの方向性と質はシステムに依存する。

スラッシュドットは明確な目的の元でシステムが成り立っている。議論の場という意味ではもっとも理想的な環境だと思う。情報量の制約や関係性・時系列の曖昧なTwitterや、過剰な汎用性と多様性を備えた2ちゃんねるで、スラッシュドットと同じことをやろうとすると必ず破綻するように出来ている。

Twitterは、はてなブックマークのポジションに収まるのが妥当ではないか。あくまで個人の取るに足らない戯言を垂れ流すだけのメディアであって、それに誰かがいちいち反論したりする必要はないのだ。

もし次に流行るプラットフォームが出てくるとしたら、それはツリー形式のコメントシステムを取り入れたものになるのではないか。

フリーランスという厳しい世界

最近はフリーランスやクラウドソーシング、ノマド、リモートワーク、テレワークなんて言葉がもてはやされている。それらを後押しするマッチングサイトも多く登場している。

ただ、マッチングサイトのユーザは外国人とりわけ中国人のエンジニア/デザイナーが多い気がする。

人件費の安い海外で人を集めれば、仕事を安く請け負っても十分な利益が出せる。日本人は自身を安売りしても太刀打ちできない業界になっていくかもしれない。海外を拠点にして搾取する側に立たないと勝てない世界である。そのうち「日本人フリーランス 〜グローバルネット社会の過酷な競争〜」みたいなドキュメンタリー番組が作られるかもしれない。それくらい悲惨な状況へ向かおうとしているように思える。

この世界では仕事の選び方が大切になってくる。言葉の壁や文化の壁が大きく影響するジャンルでないと生き残れない。ソフトウェア開発に関しては、世界的に見れば言葉の壁は小さいと言って良い。とりわけオープン系の技術は世界共通であり、売り手はいくらでもいる。

対面による打ち合わせが必要な案件や、客先に出向いて作業をするような案件でないとこの先生き残れない。それではアルバイトや派遣と何ら変わらない。

スキルの安売りは大きな問題だ。あれは集団心理なので受注者側ではもうどうにもならないのではないか。今後はあの手の競争原理をいかに抑えるかが重要な課題となっていくだろう。自動マッチングの仕組みも出てくるかもしれない。受注者が自ら案件を探し出すのではなく、スキルにあった最適な案件をシステム側が逆提案してくれるような時代になる。AIによるやり手の営業マンとスキルベースのマッチングで受注価格の均衡を保つわけだ。現行のシステムでは需要と供給のバランスや力関係が偏りすぎている。需要者だけが得をする自由競争に価値はない。

C言語の良き拡張

この業界に必要なのはC++やRustではなくてC言語の良き拡張だと思う。C言語にメンバ関数や型推論、名前付き引数、名前空間を追加するだけでもかなり良くなるはずだ。言語仕様の追加とまでは言わないが、各ベンダーが言語拡張やコンパイラマジックとして独自機能を提供するくらいが丁度よいのではないか。できればGCC拡張なんて甘っちょろいものではなく、もっとぶっ飛んだ感じの機能が欲しい。しかしそういうのを追求していくと結局最後はC++みたいな言語やRustみたいな全く異なる文法を持った言語が生まれてしまうのかもしれない。

struct T { void f() {} };
void g(struct T *ptr, int param) {}

auto t = (struct T){};
t.f();
t->g(param: 9);
*u := &t;
u.g(param: 9);

C言語をやっておくと他の言語も簡単に理解できるようになる

C言語をやっておけば他の言語もすんなり理解できるようになるというのは本当だと思う。メソッドや例外機能、オーバーロード、オーバーライドなど一部の例外はあるけれど、プログラミング言語の本質を学ぶには最適な言語だと思う。上記の機能はあくまで多様化や応用技術の類であって、本質ではないのだ。C言語で本質を学んでおくと、他の言語で多様化した技術や応用技術に対する理解がより深まるように感じる。C言語とは「基礎」であり、すべての言語の始まりのような存在とも言えそうだ。C言語は尊い。

自作ライブラリの有効性について

ライブラリやクラス、関数をきちんと作って処理を抽象化すれば、ソースコードはえらくシンプルになる。そしてそういう開発スタイルに慣れてくると、制御文に対する波括弧の記述がわずらわしく感じるようになる。

俺々ライブラリの有効性は度々議論になる。出入りの激しいIT産業やSIer、OSSの世界では余計な学習コストで逆効果となる。逆に仲間内や個人で行う開発ではとても効果的なものになると感じる。

そもそも俺々ライブラリを自作しないとまともに開発も出来ないような言語を使い続けているほうが問題なのかもしれない。JavaやC/C++言語がまさにそれである。使い勝手の良い軽量ライブラリを言語側が提供するようにすれば、既存の言語の価値はより大きくなると思う。今思えば、スクリプト言語の価値はまさに充実したライブラリそのものにあった。PHPの言語仕様に価値はないが、あの充実した関数群にはそれなりの価値を感じる(命名規則やメンバ関数の件については不満が残るが)。

C++と社会の深淵

C++は最初、深淵のように底の見えない存在だと思っていたが、実際にやってみるとそこまで難しい言語でもないような気がしてくる。簡単なことをわざと難しく表現する言語。政治や法律、資格勉強が好きな人には合ってると思う。

私は携帯の契約プランや行政の仕組みを理解するのを億劫と感じる人間なので、C++言語は肌に合わない。政治の世界もマイナンバーも確定申告も、Yahoo! JAPANや楽天のサービスの仕組みや規約も、色んな意味で理解できない。C++はそういうジャンルの言語だと感じる。生きていく上で必要だから、得体の知れない物でも仕方なく受け入れなければならない。そういう妥協と諦めの存在だ。

逆にLisp、あれは素直に受け入れられる良い言語だと思う。合理的で美しい。世の中の仕組みもLispみたいに単純になれば苦労はしないのだろう。

しかし美しさや合理性などという綺麗事だけでは上手く回らないのがこの世の中だ。だからこそ、ややこしくわかりづらいルールが生まれる。背くことの許されないルールは今日も我々をきつく縛り付け続けている。

HTML/CSS/JavaScriptの抽象化が進まない世界

冷静になって考えてみると、HTML/CSS/JavaScriptは人間が書くべき代物ではないと思えてくる。巨大で複雑なXMLを手作業で入力する人がいないのと同じで、この手の技術は人工知能や自動化の仕組みに組み込まれるべき技術だと思う。2017年にもなって未だCSSのプロパティをググり、最新のECMAScript規格を追っている自分がバカらしく思えてくる。昔はGWTに期待していた時期もあったが、今はどうなっているんだろう。Titanium MobileはたしかHTML5ではなくネイティブコードを吐いていた気がする。HTML/CSS/JavaScriptがバックエンド側の技術と見なされる時代はいつ来るのか。そもそもHTML/CSS/JavaScriptを存命させる必要があるのか。

広告