今月のプログラマ雑文

目次

スポンサーリンク

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

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

Objective-Cの機能美

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

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

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

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

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

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

対面による打ち合わせが必要な案件や、客先に出向いて作業をするような案件でないとこの先生き残れない。それでは派遣と何ら変わらない。名ばかりフリーランスとでも言おうか。

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

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

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

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

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

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

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

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++言語は肌に合わない。政治の世界もマイナンバーも確定申告も、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を存命させる必要があるのか。

広告