Magnolia Tech

いつもコードのことばかり考えている人のために。

問題が起きた時は、問題が起きた構造に注目する

問題が起きた時に、原因をどこまで追求するかは組織文化だと思うんだけど、組織で起きる問題を個人に追い求めてしまうと、結論は一生懸命頑張る、に行き着いてしまうので、投資要素が見当たらない対策に行った時は何かがおかしいって思わないとですね

『初めてのSQL 第3版』でSQLを学習しなおしました

SQLほど、変化も少なく、かつ長く現役で使える技術もそうそう無いのでは?と思えるくらいずっと生き残っている。ただ、普段から書いてないと確実に忘れる。全体を忘れる、というより色々なことが抜けていくものです。

今やRDBだけでなく、いろいろなデータソースをSQLで操作するインタフェースが用意される時代、改めて素のSQLは手に馴染ませておいた方がいいのかも、と思って『初めてのSQL 第3版』を買ってきました。

MySQL 8.0ベースで実際に動かせるSQLのサンプルや演習問題が載っていて、主にSELECT中心に学ぶことができる1冊。内容的には前半をきっちり写経から始めて、演習問題をやっておけば十分ですね。

巻末にはApache Drillを使ったRDB以外のデータソースへのアクセス例も載っていて、やはり応用が効くな、と思える構成になっています。

ORM経由でしかデータベースへアクセスしていない、という方も多いかと思いますが結局はSQLに変換されるので、内容は必ず押さえておいた方がいいでしょう。

あと、SQLは集合の概念の上に成り立っているので、通常の手続き型のプログラミング言語パラダイムが違うところも、逆に良いというか、違う発想、視点が身につくところがいいですね。

定期的に知識をリフレッシュする

IT系に身を置いていると、つい新しい知識ばかりを追いかけがちになるけど、CS的な基礎知識や、Linuxのコマンドとかの(もちろんソラでコマンド10個のオプションを言える必要は、無い)も当然大事なわけです。というか、土台となる知識が無いと、新しい知識がちゃんと身につきません。

だけど、普段使わない、手を動かさない分野のスキルはどんどん忘れていきます。歳をとると加速度的に忘れていきます。

そしてヤバいのは、分かっていることと、分かっていないこと、できること、できないことの区別がつかなくなることです。

人は分かる範囲でしか物事を理解しないので、「分かっていないことを知る」という行為を行なって「分かる範囲」を広げる、または最低でも維持する営みを続けていかないとどんどん判断する時に必要な材料が狭まっていきます。

Java 1.5の知識で、Java17時代の判断はできないですよね、10倍以上違うんだから(それも違うけど)

そんな時定期的に、過去の知識をリフレッシュするための営みをやっていくには、入門書を改めて読んでコードを書く、ハンズオンをやってみる、ISUCONの問題を解いてみる、みたいなとにかく手を動かすと結果が帰ってくるコンテンツを試してみることではないでしょうか。

(ただ、マネジメント系はなかなか、’試してみる’というわけにはいかないですね)

書名を間違えてしまいましたが『初めてのSQL』、いい本ですね。前半はそれほど密度も難易度も高くないのでさらっと読めるし、後半もトピックごとに読めばいいテーマで拾い読みし易い。SQLは集合が頭の中に上手く描けないと、さらっと書けないけど、その感覚を掴むためにはやっぱりがんがん書くしかないんですよね。

というわけで、みなさんの「スキルのリフレッシュ方法」のおすすめが有ったら、教えてください!!!(ブクマのコメントに書いてください!)

ソフトウェアの再利用性について

ソフトウェアの再利用性、過去から散々研究されてきた大事なテーマだけど、それはどういうコードを書けば汎用性が高まり、再利用性の高いコードを書けるか?という話であって、適合性が検証されていない箇所に雑に当てはめても大丈夫な仕組みが発明されているわけではなくて、結局一つずつ検証していかないといけないし、その検証には相応のコストがかかる。

今動いているものが新しい環境で、それっぽく動くようにできてはいないのだから。

モデルを作っていく、ということについて考えた

モデリングの思考の過程、みたいな時に、関連する要素としてどこまでを考えるか?というのはぜひモデリングの達人に聞いてみたい。当たり前だけど、モデリングする人が純粋にモデルだけを考えられることはなくて、何らかの振る舞いが前提に有って、それがユースケースとして描かれたり、描かれなかったりする中で、どうやってその暗黙知形式知に変えていくか?というところが大事だったりするんだよね。

Software Design 2021年9月号

Rustを題材にしたメモリ管理の特集、でもそもそもメモリ管理とは?他の言語での実装は?など、基礎的なところから入って行ってRustにおけるメモリ管理の考え方と、実際のミドルウェアにおける事例まで一気に進むお腹いっぱいになりやすい充実の内容。

ISUCON11に参加した

isucon.net

一人参加だったとはいえ、かなりのいきあたりばったり感で進めてよくなかったなーと後で反省。

それでもDBサーバを別サーバへ分離したり、インデックスを貼って行ったり、クエリのやり方を変えたりする程度でも初回ベンチより倍以上のスコアが出てちょっと嬉しかった。

事前の準備が全然できていなかったので、直前に『Software Design 7月号』を片手にISUCON10予選問題を少しやった程度で突入してしまったけど、過去問を2〜3回解いてからチャレンジしていればまた手数も変わったんだろうなぁって思った。

そういう意味では基本に忠実にやるだけでもスコアが上がって、その先に色々な方法でスコアを上げる選択肢が有る、奥の深さがISUCONの魅力なんじゃないかって思った。素直にリアルな課題に向き合った結果がフィードバックされて問題が作られているのがよく分かる。だからみんなISUCONの問題は解いた方がいいって言うんだなって改めて実感した。

あと、やっぱり8時間という時間が全然短いし、緊張感が凄まじい。途中全然他のことに気が取られなかった。

また、問題を解く環境としてのホスタピリティというか、気持ちよく、スムーズに競技に参加できるようにするためも環境整備が凄まじくて、競技環境のセットアップとかマジでよく作り込まれている。あの運営ノウハウだけでも凄まじい価値が有る。

本戦にはほど遠い点数だったけど、ぜひまた参加したいな。