のっかーのエンジニア日記

新人SEの日記です。

【CSS】white-space、overflow-wrap

CSSで空白文字や改行をコントロールしたいと思い、 MDNを調べました。 すると、white-spaceとoverflowというプロパティがありました。 しかし、これらのプロパティの役割が少しややこしく、混同してしまいそうだったので、 それぞれのプロパティの持つ意味を記録として書き残しておきます。

white-space

CSSでは、white-spaceプロパティにより、 HTMLソースコードに含まれる Spaces (U+0020), tabs (U+0009) という空白文字と 改行文字とをどう扱うかを設定できるとのこと。

https://developer.mozilla.org/ja/docs/Web/CSS/white-space

種類は、以下のとおりです。

white-space: normal;
white-space: nowrap;
white-space: pre;
white-space: pre-wrap;
white-space: pre-line;
white-space: break-spaces;

preというのはpreservedもしくはpreserveの略だと思われます。 空白文字や改行文字をそのまま保持(preserve)して表示します。 ただし、pre-lineでは、改行文字のみ保持され、連続する空白文字は消去されてしまいます。

wrapというのは、限られた幅の中で文字列を折り返してうまくその中に包み込むことを意味します。 wrapにより、文字列を限られた幅の中に、はみ出させずに収めることができます。 ただし、長い単語の途中に分割を入れることはできないので、 単語が長すぎるとはみ出します。 nowrap、preでは、wrapしないので、文字列ははみ出します。

長い単語を分割したい場合は、overflow-wrapプロパティの方で単語の分割設定をします。

overflow-wrap

overflow-wrapプロパティでは、長すぎる単語をどう分割するかを設定できます。

https://developer.mozilla.org/ja/docs/Web/CSS/overflow

種類は、以下のとおりです。

overflow-wrap: normal;
overflow-wrap: break-word;
overflow-wrap: anywhere;

anywhere、break-wordはともに、単語が長すぎる場合に容赦なく単語のどこででも分割を行います。 ただし、anywhereでは分割後の状態で領域の幅に余りがあればその余分な幅を縮小させますが、 break-wordでは分割前の状態の幅から収縮させることはしません。

PostgreSQLのダンプ・リストアのコマンド

PostgreSQLのダンプ・リストアのコマンドの実行例を記載します。 Bashで実行する場合とPowerShellで実行する場合の両方を記載します。

ダンプ

ダンプしたいデータベースのデータベース名がdumped_database_nameであるとします。 ダンプファイルのファイル名をdata.dumpとします。

(Bashで)

# pg_dumpコマンドを実行。
pg_dump -U postgres -p 5432 -b -o -F c -f "./data.dump" dumped_database_name

(PowerShellで)

# PostgreSQLの実行ファイル格納フォルダに移動。
cd 'C:\Program Files\PostgreSQL\9.5\bin'
# pg_dumpコマンドを実行。
.\pg_dump.exe -U postgres -p 5432 -b -o -F c -f 'C:\Users\username\Documents\data.dump' dumped_database_name

以下、オプションの説明です。 もっと詳細には、以下のドキュメント参照してください。 https://www.postgresql.jp/document/9.5/html/app-pgdump.html

  • -U user
    PostgreSQLサーバへの接続認証を行うユーザ。

  • -p port
    --port=port PostgreSQLサーバのポート番号。デフォルトは5432。

  • -b
    --blobs
    ラージオブジェクト(画像や動画などのラージサイズのデータ)をダンプ対象に含めます。

  • -o
    --oids
    オブジェクトID(PostgreSQLが内部に格納している様々なオブジェクト(テーブル、インデックス、関数、演算子、型定義など)を一意に識別するためのID。)をダンプ対象に含めます。

  • -F format
    --format=format
    出力形式を選択できる。

出力形式formatには以下のものがあります。

  • p
    plain
    平文のスクリプトファイルを出力します(デフォルト)。

  • c
    custom
    pg_restoreへの入力に適したカスタム形式アーカイブを出力します。

  • d
    directory
    pg_restoreへの入力に適したディレクトリ形式アーカイブを出力します。 この場合、ダンプされる各テーブルおよびblobごとに1ファイル出力します。 さらに、目次ファイルを出力します。

  • -f file
    --file=file 出力を指定のファイルに送る。--format=directoryの場合は、ファイルではなくディレクトリを指定します。

リストア

上記でダンプしたファイルをリストアする際のコマンドです。 リストアするデータベースのデータベース名をrestored_database_nameとします。 リストア後のデータベースの所有者をnew_ownerとします。

(Bashで)

# createdbコマンドでリストア先のデータベースを新規作成。
createdb -U postgres -T template0 -O new_owner -E UTF8 -l C restored_database_name
# pg_restoreコマンドを実行。
pg_restore -U postgres -d restored_database_name -F c "./data.dump"

(PowerShellで)

# PostgreSQLの実行ファイル格納フォルダに移動。
cd 'C:\Program Files\PostgreSQL\9.5\bin'
# createdbコマンドでリストア先のデータベースを新規作成。
.\createdb.exe -U postgres -T template0 -O new_owner -E UTF8 -l C restored_database_name
# pg_restoreコマンドを実行。
.\pg_restore.exe -U postgres -d restored_database_name -F c 'C:\Users\username\Documents\data.dump'

pg_restoreコマンドのオプションの詳細は、以下のドキュメント参照してください。 https://www.postgresql.jp/document/9.5/html/app-pgrestore.html

vimの使い方

vimの使い方をまとめます。

保存・終了

コマンド 実行内容
:w 保存
:q 終了
:q! 強制終了
:wq 保存して終了

移動

コマンド 実行内容
h
l
j
k
f 「文字」 次の「文字」まで移動
F 「文字」 前の「文字」まで移動
; 直前の「f 「文字」」での移動を繰り返す
, 直前の「f 「文字」」での移動を逆向きに繰り返す
b ←(1単語)
w →(1単語)
e →(1単語)
0 行頭
^ 行頭(スペース、タブ除く)
$ 行末
gg ファイル先頭行
G ファイル最終行
Ctrl + o ジャンプ前の位置に戻る
Ctrl + i ジャンプ前の位置に進む
% カッコペアでの移動

モード

コマンド 実行内容
I 行頭から挿入モード
i 現在のカーソル位置から挿入モード
a 現在のカーソル位置の直後から挿入モード
A 行末から挿入モード
c 削除してから挿入モード
ciw 現在のフォーカス中の単語を削除してから挿入モード
C 現在位置から行末まで削除してから挿入モード
o 直下の行から挿入モード
O 直上の行から挿入モード
s 一文字削除してから挿入モード
S 1行削除してから挿入モード
挿入モードでCtrl + o 1コマンドを実行するまでノーマルモードに戻り、それが終わったら挿入モードに復帰。
v ヴィジュアルモード
V 行ヴィジュアルモード
Ctrl + v ブロックヴィジュアルモード
gv 直前のヴィジュアル選択範囲

ヴィジュアルモード中の操作

コマンド 実行内容
Shift + i 現在のカーソル位置に挿入
Shift + a 現在のカーソル位置の直後に挿入
o 現在のカーソル位置の、選択範囲 開始位置・終了位置の切り替え

削除

コマンド 実行内容
x 現在のカーソル位置を削除
r 現在のカーソル位置の文字の置換
R 一文字以上の置換
d 「モーション」 「モーション」で選択される範囲を削除
diw 現在のカーソル位置の単語を削除
dd 行削除

コピー・ペースト

コマンド 実行内容
p ペースト
y コピー
yy 行コピー
"0p 明示的にコピーしたものをペースト(無名レジスタはdなどで上書きされるが、レジスタ0はdでは上書きされない。)

検索

コマンド 実行内容
/「検索文字」 「検索文字」を順方向に探す
?「検索文字」 「検索文字」を逆方向に探す
* 現在のフォーカス中の単語を順方向に探す

検索中の移動

コマンド 実行内容
n 次のヒットへ移動
N 前のヒットへ移動

置換

コマンド 実行内容
:s/「置換対象の正規表現」/「置換文字」/「オプション」 行を対象範囲とした置換
:%s/「置換対象の正規表現」/「置換文字」/「オプション」 ファイル全体を対象範囲とした置換

「オプション」は、以下のものから好きなだけ選べる。 オプション |内容 ---|--- g |global。全て置換する。 c |check。チェックしながら置換を進める。

取消・再実行

コマンド 実行内容
u 取消
U 行単位の取消
Ctrl + R 再実行
. 直前の変更を繰り返す。(変更とは、挿入モードに入ってから挿入モードを抜け出すまでコマンドを指す。ただし、dなどはノーマルモードのまま変更を行っている。)

ヘルプ

コマンド 実行内容
:help 「コマンド」 ヘルプ表示。Ctrl + Dで候補表示。Tabで補完。

SOAP関連のライブラリの整理

SOAP関連のライブラリで、略称が多く、意味がよくわからなかったので、 簡単に概要をまとめてみました。 誤りなどありましたら、ご指摘いただけますと幸いです。

JAXB

Java Architecture for XML Binding

XMLJavaオブジェクトを相互変換するためのAPI仕様。

  • javax.xml.bind:jaxb-api
    JAXBのAPIを含むライブラリ。
  • org.glassfish.jaxb:jaxb-runtime
    JAXBの実行時に必要。

JAX-RPC

Java API for XML-based Remote Procedure Call

XMLを使用した遠隔呼び出し手続きを実装するためのJavaの標準仕様。 JAX-RPC 2.0として開発されていたバージョンは、対象範囲がWebサービスへ拡大したことから、 JAX-WSへと改称された。

JAX-WS

Java API for XML-Based Web Service

XMLをベースにし、通信にはSOAPやRESTを使ったWebサービスを扱うためのAPI仕様。 以前はJAX-RPCと呼ばれていた。

JAX-RS

Java API for RESTful Web Services

RESTfulなWebサービスを扱うためのAPI仕様。

Apache CXF

WebサービスフレームワークJAX-WSJAX-RSなどのAPIを使ってサービスを開発できる。

データバインディングにJAXBをデフォルトで使用している。

  • org.apache.cxf:cxf-rt-frontend-jaxws
    JAX-WSの実行時に必要。フロントエンドの実装に使う。
  • org.apache.cxf:cxf-rt-transports-http
    HTTP通信に必要なAPIを提供。
  • org.apache.cxf:cxf-rt-transports-http-jetty
    cxf-rt-transports-httpの実行時に必要。

Metro

Webサービスのスタックで、 スタックは、JAX-WS RIとWeb Services Interoperability Technologies (WSIT)から構成されている。 データバインディングにJAXBをデフォルトで使用している。

  • org.glassfish.metro:webservices-api
    MetroのAPIを含むライブラリ。
  • org.glassfish.metro:webservices-rt
    Metroの実行時に必要。

JAX-WS RI

JAX-WS Reference Implementation

WebサービスフレームワークJAX-WSの参照実装。

  • com.sun.xml.ws:jaxws-ri
    JAX-WSの参照実装。
  • com.sun.xml.ws:jaxws-rt
    JAX-WS RI Runtime。 JAX-WS RI の実行時に必要。

【洋楽】Third Eye Blind "Deep Inside of You"の和訳 ~独特な関係の深さ~

私とThird Eye Blind

初めて自分のお金でCDを買ったのが、Third Eye Blindでした。

そんなThird Eye Blindとの出会いは、"Yes Man"という映画でした。 劇中、建物から飛び降りようとしている人に向かって、主人公が Jumper という曲を歌い出すのですが、 それが何ともカッコいい曲で、強烈に印象に残ったのです。 それ以来、よくThird Eye Blindの曲を聞いています。

私はThird Eye Blindの中でも特に、初期の楽曲が好きです。 寂しさと人生のやるせなさ、生きることへの強い思いが詰まった楽曲たちが心に響きます。 今日は、そんな初期の楽曲の一つ、Deep Inside of Youの和訳に挑戦してみます。 (序盤の表現が難解で、解釈に苦労しました。 英語の得意な方の解釈も聞いてみたいです。)

youtu.be

Deep Inside of You 和訳

[Verse1]

When we met light was shed

僕たちが出会ったとき、光が差し込んだ

光が差すという表現により、「君」と「僕」の出会いが革新的な出来事であったことを表現している。

Thoughts free flow, you said you've got something

考えは解き放たれ溢れ出す 君は何かを得たんだと言った

free:自動詞で、(主語が)自由な状態になるという意味。

Thoughts free (and) flow の略か。

「君」が「僕」と出会ったことで、これまでの価値観が変わってしまうほどの何か深い変化が生じた。「悟りを開く」のと似たような、革新的な変化。

Deep inside of you

君の奥深く内側で

変化は「君」の心の奥深く内側で起こった。

A wind chime voice sounds, sway of your hips round rings true

ベルみたいな声がキラキラ鳴っている 君のお尻はグルグル揺れ動いている

ウィンドベル(海外の風鈴)のような声が、君のグルグル回るお尻の揺れ動きが、本物であるように思える

wind chime:風鈴(ここでは日本の風鈴ではなく、海外の棒状のウィンドベルだと思われる)

A wind chime voice が主語(wind chimeがvoiceを修飾している)でsoundsが動詞、sway of your hips round が主語でringsが動詞、trueが目的語だと思われる。難解...。

「僕」が「君」に対し恋に落ちる様子を表現していると思われる。「僕」にとって「君」の声は本当にウィンド・ベルのように美しく聞こえ、「君」のお尻の揺れ動きに魅了され、次第に心惹かれていってしまう。

It goes deep inside of you

やがて君の奥深く内側へと向かっていく

これもまた難解...。「君」の声やお尻に心惹かれて、やがて「君」のもっと奥深いところへと向かって行くという表現により、「僕」が最初「君」の声や外見に惹かれ、やがてもっと奥深い部分に強く惹かれていくようになる過程を描写しているか。

These secret garden beams

この秘密の園の輝きは

「僕」にとって「君」は秘密の園の輝きのようで、「僕」の心を照らした。

Changed my life so it seems

僕の人生を変えてしまったみたいだ

so it seems:it seems so の倒置形。そのようだという意味。

その輝きに照らされて「僕」の人生は全く変わってしまったようだ。

Fall breeze blows outside, I don't break stride

外はそよ風が吹いている 僕はそのまま歩き続ける

外は秋で、涼しい風が吹いている。「僕」は風の中でも確かな歩調で「君」に会うために歩いて行く。「君」に会えるのを心待ちにしている様子が伝わってくる。

My thoughts are warm

僕の心は暖かく

「君」のことを思うと「僕」の心は暖かくなる

And they go deep inside of you

思いは君の奥深く内側へと向かう

そして「君」への思いはもっと深まっていく

Oh, yeah, and I never felt alone

[Chorus]

ああ そうだ 僕はこれまで孤独を感じたことはなかった

All right, oh, oh, 'til I met you

そうだ ああ ああ 君と出会う前までは

「僕」は「君」と出会い、「君」を深く愛するようになって初めて、孤独を知った。

[Verse2]

Friends say I've changed, I don't listen 'cause I live to be

友達は僕が変わってしまったと言う そんなことはどうでもいい だって僕は今生きているんだ

「僕」が以前付き合っていた友達は、「僕」は以前と変わってしまったと言う。

Deep inside of you

君の奥深く内側で

「僕」は「君」の奥深く内側を知るようになった。それ以外のことはどうだっていい。

Slide of her dress, shouts in darkness, I'm so alive

彼女のドレスが滑り落ちる 暗闇の中の叫び声 僕は今生きているんだと強く実感する

「僕」が「君」と、身も心も深く交わるようになったことを表現しているか。「君」との生き生きとした交わりの中で、「僕」は生を実感する。

I'm deep inside of you

僕は君の奥深く内側にいる

You said, boy make girl feel good

君は言った 男の子は女の子を満足させてあげられるんだって

But still, deep inside, still

でもまだ 奥深く内側では まだ

「君」は「僕」に満足を感じていることを伝えてくれたが、実際はまだ奥深く内側では「君」は本当には満たされていなかった。

[Chorus]

I've never felt alone

僕はこれまで孤独を感じたことはなかった

'Til I met you

君と出会う前までは

I'm all right on my own

僕は一人でうまくやっていけていた

And then I met you

そんなときに僕は君と出会った

And I'd know what to do if I just knew what's coming

もしこれからどうなるのかがわかれば 僕はどうしたらいいかわかるのに

「僕」はどうしたらいいか全くわからない。

[Bridge]

I would change myself if I could

もし変われるなら 僕は変わりたい

もし「君」なしで生きられるように変われるなら、変わりたい。でも決して変われない。

I'd walk with my people if I could find them

もし一緒に歩んでいけるような人たちが見つかるなら 僕はその人たちと歩んでいきたい

以前友達と一緒に歩んでいた「僕」みたいに、また誰か「君」以外の人たちと一緒に歩んでいけるなら、そうしたい。でも、もうそんな風には戻れない。 ここでいうpeople(人たち)は、女性に限らず、男性も含むと思われる。「君」と出会い、「僕」のこれまでの男女の友達との人間関係(恋愛・友情など)は、相対的に軽薄なものに変わってしまった。以前はそのような関係の中で生きていても平気だったが、「君」と出会い、かつてない関係の奥深さを知ってしまった今、「僕」はもうそのようには生きられなくなってしまった。

And I'd say that I'm sorry to you

君にはごめんねと言って

「君」にはごめんねと言って別れを告げて、また誰か別の人たちと生きていけるならそうしたい。

I'm sorry to you

ごめんねと言って

And I don't wanna call you

僕は君に電話したくない

「僕」は「君」に別れの電話をかけたくない。

But then I wanna call you 'cause I don't wanna crush you

でも僕は君に電話したくなる だって僕は君を壊したくはないから

一方で、「僕」は「君」を壊してしまわないように別れを切り出したいと思う。

But I feel like crushing you

でも僕は君を壊したくなる

その一方で、「君」を掴んだまま壊してしまいたいと思う「僕」もいる。

And it's true, I took for granted you were with me

本当なんだ 君が僕と一緒にいることを僕は当たり前だと思っていた

I breathe by your looks and you look right through me (And we were broke and didn't know)

君の姿にため息が出る 君は僕には正しく見える そして僕たちは壊れてしまった 知らない間に

「僕」にとって「君」は美しく、正しく完璧に思える。今もそうだ。しかし、気づかないうちに「君」と「僕」の関係は破局を迎えてしまっていた。

And we were broke and didn't know

僕たちは壊れてしまった 知らない間に

二人は完璧に思えた。しかし、知らない間に破局してしまっていた。

And we were broke and didn't know

僕たちは壊れてしまった 知らない間に

And we were broke and didn't know

僕たちは壊れてしまった 知らない間に

[Verse3]

Something's gone, you withdraw and I'm not strong like before

何かが行ってしまった 君は去っていく 僕はもう前みたいに強くはない

I was deep inside of you

僕は君の奥深く内側にいた

I can go nowhere

僕はどこへも行けない

I burn candles and stare at a ghost

僕はろうそくを燃やし 亡霊を見つめる

Deep inside of you

君の奥深く内側で

And some great need in me

そして僕の内側の強烈な渇望が

Starts to bleed

疼きだす

I've lost myself there's nothing left, it's all gone

僕は自分を見失ってしまった 何も残っていない 全て去って行ってしまった

[Outro]

Deep inside of you

君の奥深く内側へと

Deep inside of you

君の奥深く内側へと

Deep inside of you

君の奥深く内側へと

最後に

歌詞を通して、男女の関係の特別な「深さ」を感じさせられます。 男女の関係には、友達とも違う、独特な深さがあって、だからこそ、別れるときにも特別な痛みが伴うのかな、と考えさせられました。 最後まで読んでいただき、ありがとうございました。

私とプログラミングの出会い~大学時代~

今、私は社会人2年目です。今回は、私とプログラミングとの出会いを振り返りたいと思います。

初めての出会いは大学の授業

私がプログラミングと出会ったのは、大学1年生のプログラミングの授業です。 私の専攻は情報系ではなく、土木系でした。そのため、土木系でよく使用されているFortranという言語を学びました。 Fortranは非常に長い歴史のある言語で、知る人ぞ知る言語です。

当時の私は、プログラミングに対して、「高度でカッコよくて、アプリとか何でも作れる技術」というイメージを抱いていました。 私は目をキラキラさせて授業を受け始めたのですが、思ったよりもFortranでのプログラミングは地道でした。 そもそもFortranは科学計算用の言語で、アプリ開発向けの言語ではなかったのです。 「プログラミングを勉強したら、すぐに自分のアプリを作れるようになる」と思っていた私は、早々に挫折してしまいました。 アプリを作れるようになるまでの道のりが遥か遠くに感じられて、気力を失ってしまったのです。

挫折感を味わった私ですが、まだ自分のアプリを作れるようになりたいという思いを捨てきれずにいました。 でも結局、どうしたら自分のアプリを作れるのかはわからないままでした。 図書館で、XAMPによるアプリ開発の本を見つけて借りてみたのですが、持ち前の継続力のなさを発揮してしまい、10ページほど読んで返却してしまいました。

挫折からの心機一転

挫折しまくりの私でしたが、大学院への進学を機に意識が変わります。 奨学金で借金をして大学院まで行くのだから、しっかりと目標を立てて大学院生活を過ごしたいと強く思うようになったのです。

私が立てた目標は2つです。

  1. プログラミング言語Pythonを使えるようになる。
  2. 英語力を高める。

今振り返ってみると、良い目標だったのではないかなと思います。 結局、研究者の道に進むことはなかったのですが、大学院で自主的に勉強したプログラミング言語と英語は、今の仕事でも役立っています。 (ただ、プログラミング言語については完全に独学だったため、今思えば、もっと効率よく学習すべきだったと反省しています。)

プログラミング言語Pythonに決めた理由は、研究室で使用する解析ソフトがPythonに対応していたためです。 当時はあまりPythonの情報が豊富ではなく、むしろRubyの方が人気でした。 しかし、科学計算ならPythonの方が得意とのことだったので、プログラミング言語Pythonに決めました。

恥を忍んで子ども向け教材からスタート

私は豊富な挫折実績があったので、恥を忍んで、超カンタンそうな本から学習をスタートすることにしました。

たのしいプログラミング Pythonではじめよう! https://www.amazon.co.jp/dp/4274069443/www.amazon.co.jp

この本は、子ども向けのPython入門書で、とても読みやすかったです。 ただ、この難易度でも途中で何度も心が折れかけました(笑) 最後の方は飛ばし飛ばしでしたが、辛うじて読み切りました。

この本で、リストや辞書といった基本的なPythonの文法を身に着けることができました。

実際に使用しながら学ぶ

Pythonの基本を身に着けたので、次は実際に自分の研究課題で使用してみることにしました。 一通りの基本はわかっていたので、不足している知識をググりながら、簡単な計算プログラムを自分で書くように努めました。 この時期にプログラム力が一番伸びたように思います。 自分で書くことで、理解が深まり、また新たな疑問が湧いてくるようになりました。

クラスの存在意義に戸惑う

自分でプログラムを書く中で、クラスの存在意義に疑問を抱くようになりました。 「関数があれば、クラスはいらないのではないか」という疑問です。 この疑問に対する答えは、実際に自分でクラスを使ったプログラムを書く過程で得ることができました。

その答えというのは、
"クラスを使うことで、関連のある「データ(メンバ変数)」と「関数(メソッド)」を一まとまりにして扱える"
というものです。 (クラスには他にも、ポリモーフィズムカプセル化などのメリットがあるのですが、当時はそこまでは理解できていませんでした。) クラスの存在意義がわかったことで、クラスを使ってプログラムを書くようになりました。 新しい概念を使ってプログラミングすることに、とてもワクワクしていました。

もっとキレイなプログラムを書きたい

簡単なプログラムを自分で書けるようになり、次は、もっと読みやすい、キレイなプログラムを書きたいと願うようになりました。 そこで、キレイなプログラムを書くための原則を本で勉強しました。

https://www.amazon.co.jp/dp/4798046140/www.amazon.co.jp

私にとって、この本と出会ったのはとてもよいタイミングでした。 当時は、ある程度自分でプログラムを書いてきて、ちょうど我流になりかけていた段階だったのです。 私はこの本を通して、我流ではない「普遍的なプログラミングの原則」を学ぶことができました。 独学の私にとってこの本は、正しい道を示すメンターのような存在でした。 この本を読みながら自分の書いたプログラムを書き直してみることで、プログラミングの原則に対する理解を深めることができました。 もしもプログラミングを書く経験が不足している段階だったら、この本が言いたいことを全く理解できなかったと思います。 その意味でも、ちょうどよいタイミングだったと思います。

以上が、私がプログラミングと出会った大学時代の話です。就活時代の話も含めようと思ったのですが、結構分量が多くなってまとまりが悪くなってしまいそうだったので、割愛しました。またいつか、機会があれば書きたいと思います。ここまで読んでいただきありがとうございました。

「オリジナルなモノ」にぶつかり続けていくということ

エンジニアとして働き始めて、最近学んだのが、「オリジナルなモノ」に接し続けることの大切さです。

エンジニアにとって「オリジナルなモノ」といえば、

が挙げられます。

公式ドキュメントは大体、公式ホームページとか、ソフトに付属の電子マニュアルとかで確認できます。 オープンソースソフトウェアであれば、ソースコードGitHubなどで確認できます。

どうして「オリジナルなモノ」に触れ続けることが大切なのか。

以下の講演の質疑応答で、 講演者の方が 「公式ドキュメントが一番」とおっしゃっていて、 その言葉が心に刺さりました。

youtu.be

ああ、そうだ。 公式ドキュメントが一番確実で詳細な情報源なんだ、とストンと胸に落ちました。

それと同時に、学生時代の経験を思い出しました。

私は学生時代、情報工学の専攻ではなく、力学を専攻していて、研究でシミュレーションソフトを使っていました。 そのソフトは海外の会社が作ったもので、 公式ドキュメント(マニュアル)は英語を翻訳機にかけたかのような有様で難解でした。

「離散的ファスナ」「運動学的カップリング」など、カタカナ語の連発でした。 「いや、その単語の意味が分からんねん。」とツッコミながら公式ドキュメントと格闘していました。

しかしながら、カタカナ語の連発に打ちのめされ、 かといって原典の英語の公式ドキュメントを読むには英語力が足りず。。。
遂には公式ドキュメントから逃げ出して、 数少ない日本語の解説サイトを探して簡単なチュートリアルをやったりしていました。

チュートリアルをいくつかした後は、実際に自分でもモデルを作り、 公式ドキュメントもわかる範囲でめげずに読むよう努力していました。

そうやってけっこう長い期間、悪戦苦闘していたのですが、ある時、 転機が訪れます。

気づかないうちに、カタカナ語だらけの公式ドキュメントを理解できるようになっていたのです。 そこで、はっと気がつきます。 たくさんググるより、公式ドキュメントを読む方が一番確実で詳しい情報を得られることに。

それ以降は、

  • 公式ドキュメント

  • ソフトでの実験

の2つを主軸にして、勉強を続けていました。

ソフトでの実験というのは、 気になる疑問点を、実際にソフトを動かして検証してしまおう、というものです。

ソフトでの実験は、公式ドキュメントを補うかたちで行っていました。

例えば、 「この条件では、ソフトはどんな挙動をするのだろう。」 と疑問に思って公式ドキュメントを調べてみても、 よくわからない時に、 その挙動を再現するような最小のモデルを構築して、 実際にシミュレーションすることで、 ソフトの挙動を検証したりしていました。 または、公式ドキュメントを細かく調べるより、 実際に動かして確認する方が早いときにも、ソフトでの実験をしていました。

これらの勉強を通してソフトへの理解が深まっていったのを思い出しました。

私は今、ひよっこITエンジニアです。 これからはもっと公式ドキュメントと向かい合っていこう、と思わされました。 ただ、いきなり公式ドキュメントは難しいので、まずは親切な解説サイトや書籍から始めて、徐々に公式ドキュメントに比重を移していけたらなと思います。