makotan _at_ gmail dot com

最適化できるかどうか

ここで言ってる最適化は殆どの場合、performanceじゃなくて設計と実装の事

 

流れの中で、無理な部分とか大変な部分を見つけ出す

流れをスムーズにしていく

それを色んなレベルでバランス良く実施する

 

ということに気がついてて、頑張ってやってはみるものの、難しいな〜って思う

 

そんな中で結構重要なキーなのはデータ構造だって事に気がついて早数年。

わかっちゃいるけど、やっぱり難しい

プログラミングが普通の人とか出来る人とかの差

注意:過去の観察に基づいた個人的感想です

 

 

普通の人

過去の経験、知識はある程度持ってるけど、なかなか苦労する人

脳内で過去の経験とか知識が一部しか紐付いてないので、ほぼ類似の作業以外は苦労する

 

 

出来る人

過去の経験、知識を総動員して、方法を見つけ出す人

過去の経験とか学習した知識がちゃんと整理されてる

結果的に何かするときに方法を簡単に見つけ出す事が出来るので、作業が早くて正確

差は知識と経験の量をどれくらい質に転化してるかどうかだけ

結構いっぱい見かけるし、同じ業種をやってると上手く出来るようになるのもこの辺が理由っぽい

 

 

めっちゃ出来る人

最適そうな構造を見つけ出して解決する人

何かをするときに、突然普通に思いつかないようなものをあてにいくタイプ

(このタイプはリアルで数人しか知らないのでレアっぽい

 

 

 

この先にもう一つありそうなんだけど、まだ見たこと無い

まさかここが認知能力の限界?

GitHub Copilot をみてふと思った

これだけでエンジニアが必要なくなるかというとそんなことはないなと思った

ただ、(自分にとって)未知の実装方法を誰かの過去の実装で支援してもらえるのは強いなと思った

 

 

めっちゃ能力の高いエンジニアは希少価値があるとして

その人たちが書いたコードが山のようにgithubに転がってて

能力がそれほどでも無い人がコードを書くときに「こんなコードが書きたい」って言えば適切そうな実装をサジェストしてくれるって

どう考えても凄いなと思った

 

 

色んなアルゴリスムを覚えたり、ライブラリの使い方を1からドキュメントとgoogleに頼って調べて覚えたりしなくて良いんだよなぁ・・・いいなぁ〜

 

 

はやく、こんな実装が欲しいって言えば作ってくれるCopilot欲しいです

ふんわり不思議だなぁって思ってたこと

プログラミングを上手くなりたいって人は一定数まわりで見かける

めったに使わないような技術に詳しい人もある一定数で見かける

でもDB設計に興味を持つ人がめっちゃ周りに少ない

 

個人的にはだいぶ不思議だなと...

 

 

プログラムとデータ構造は切っても切り離せないもの

どんなプログラミング言語もデータ構造に依存してる

DBといえばある意味データ構造の塊

なのにDB設計には興味ない

 

 

全く理解出来なかった〜〜

 

 

ま、別に良いんですけどねw

 

 

キーボードショートカットがアレなのでStream Deck

MSFSでStream Deckを使って操作してるのを見て、これは凄い!って思って

で、Amazonを見に行って金額を見ると...お、おう...ってなったので

流石にこのためだけに買うのはなぁ〜と(今更感)思い

 

そうだ!intelliJでたまにしか使わないショートカットをいっぱい用意すれば

メニュー経由で操作しなくて良いのでは!?

これならMSFSの為だけではなく、IntelliJでも使えるから大活躍!

という思いつきでポチ...るには少々気合いが必要な値段w

 

あ、iOSのアプリがある ... そして手元には旧になってしまったiPad proが...

 

れっつらごー

最初の1ヶ月は無料なのでこの間に試しまくれと

 

普段キーボードショートカットを使わない奴をポチポチ入れていく

そしてIntelliJを開いてポチポチ

 

こ、これは良い!

 

そして気がついた

iPad proこの操作するにはデカすぎない?

ハードだとボタンだけだから小さい?

iPhoneだともっと小さいって?

とりあえず欲しいものリストにポチッ

 

それ以前にショートカットキー覚えれば良くない?

ほら、Optionとかだいぶ押しにくい場所にあるし...ファンクションキーはfnとセットじゃないとダメだし...覚えるの面倒くさいし...ブツブツ

 

ここにMSFSの各種パラメータが表示されるのか〜いいなぁ〜

(結局MSFSの事を考える人だった

 

TCPが人類に早すぎるのでは説

いんたーねっとを使う上では避けて通れないTCP/IPを人類が理解して使うのは早すぎるのでは?ってよく思ってる

 

実際には存在してないコネクションの概念

論路的にTCP/IPの接続が可能なことを相互に確認して、それが次の処理でも使える状態にする程度の意味合いなんだけど、実際にネットワークに何かを繋いでるわけでもなく、パケットのやりとりに変換されるのに存在する謎の概念

 

host名と実IPの変換

host名では繋がらないってなんですか?IPに変換する必要あるんですね?っておもったら、IPアドレスも接続元に応じて実IPアドレスを切り替えれるとか謎なことを言い始める複雑怪奇なIPアドレスの仕組み

 

TCP/IPコネクションの上位のプロトコル

TCP/IP単独ではやりとりにしか使えないので、そこに意味を持たせるプロトコルを理解する必要がある。しかもさらにプロトコルベースのエラーとTCP/IPレベルのエラーも共存するので、実際にどれがどれなのかどうやって識別するんですか??ってなる

 

複雑怪奇なコネクションプール

コネクションは実際には存在してないはずなのに、コネクションをプールして再利用するという挙動な上に、初期設定でNコネクションを自動的に作ろうとする奴もいたり、コネクションプールに溜まって一定時間経つと自動的に閉じられるという謎の挙動。さらにたまに上限数設定があったりして、適切ではない状況を検知するのは至難の業

 

それらを簡単に使えることを目指したライブラリ

一見するとこんな複雑な物を簡単に使えるんだから良いことだと思わせて理解してない人類を集めておいて、謎な挙動をひた隠しにしてエラー時のハンドリングを難しくしていたりする恐ろしい奴

 

サービスによっては存在するリトライルール

なんらかの一時的エラーが返った場合はリトライしましょうって書いてるのにエクスポネンシャル・バックオフとか謎な事を言って、まずはN秒まってそれでもエラーならN*2秒待ってを繰り返してM回エラーになったらエラーとして扱ってくださいというルール

 

サーバに接続するために使うロードバランサー

IPアドレスが実はサーバそのものじゃなくてロードバランサーのもので、ロードバランサーが実際のサーバに接続して・・・って何階層入れるんですか??

なのにコネクションはサーバと接続??よくわかりません・・・

 

SSL接続の謎挙動

SSL接続を有効にするとそれだけで数百ミリ秒の処理時間がかかるとか、SSLにバージョンがあってそれによってエラーになるとか、実は既にSSL接続じゃなくてTLSっていうのが主流なんだよとか、素人殺し感満載なSSL接続方式

 

サーバによって存在する接続上限

TCP/IPの接続に接続の上限があるとかポートの再利用が必要だとか謎の事を言ってくる某OS、しかも環境によっては変更困難だったり色々あるっぽい。この上限にぶち当たってもそういうエラーじゃなくて単なるコネクションエラーになるところが更に状況を悪化させる

 

これら全部を理解した上で、使えって言われても困るよな...

コード生成をぼんやり考えてた

GWなので・・・

 

A型(type-A)

Excel等のツールだけを使ってコード生成する

Excelの式とかmacroとかを駆使する

定義と生成の距離が短い

 

B型(type-B)

既存の何らかの定義を読み込んでコード生成する

DBのSchemaとか、ソースコードとかを入力として使う

一種類の定義からかなりの種類の出力が出来る様になる

 

C型(type-C)

専用の定義を使ってコード生成する

専用のエディタがあったり、yaml/jsonを入力として使う

定義した内容を使った定義が出来る

広範囲のコード生成が出来る

 

1種(type-X1)

生成した物はプログラマには触らせない

専用ツール上で動作するためのコードを生成する

 

2種(type-X2)

生成したコードはプログラマ変更する前提

再生成は出来ない

 

3種(type-X3)

生成したコードは拡張ポイントを使ってプログラマが動作を変える

再生成も可能

 

たとえば・・・って書こうと思って例が懐かしすぎて止めたw

型A,B,C

種1,2,3

はそれぞれ組み合わせが自由なので

YYYってツールはtype-B2とかの表記が出来るよと

 

今のところ自分が認識してるコード生成ツールがこの分類でどれかに当てはまってる

そしてそんなことを考えてると言うことは・・・

 

to be continued(嘘