似非エンジニアのエンジニアへの道(1)

ボクは、エンジニアだった。
小学校高学年でパソコンに興味を持ち、中学校のときにPC8801mkIIを親に買ってもらった。
今から思うと、すごく高価な買い物をしてくれた。両親に感謝だ。これがなかったら、今のボクはない。
そこから、プログラムに取り憑かれた。動くものを作る楽しさを覚えた。
大学では、情報科学科でプログラムの基礎を学んだ。FORTRANに始まり、Pascal、C、LISP、Prologとプログラミング言語を使った。
自分では、C/C++をよく勉強し、オブジェクト指向プログラミングもだいぶ勉強した。
就職してからは、68kのアセンブラ、C/C++、Perl といった言語での開発が中心だったが、20代後半になり主にプロジェクト・リーダとしてマネジメント、基本設計〜機能設計が中心で、自分でプログラムを組むのはプロタイプ止まりになってきた。
転職してから、C/C++のプログラミングが復活。そしてPHPも加わった。
その後、リーダになってからはマネジメントが中心になり、プログラミングから遠ざかっていった。
そして現在、ボクは、エンジニアではない。

完全にエンジニアではなくなっているのである。エンジニアと言いたいが、言えない元エンジニア… 似非エンジニアなのである。
現在の技術トレンドが全くわからない。
なので、すでに技術トレンドとしては当たり前で先端ではないかもしれないが、ちょっとずつ現在の技術を学び直そうと思っている。

そして、その最初のお題は、「node.jsを使ってみよう」である。
さて、どこからいくか。
ま、まずは、本家のサイトを見てみることにしよう。

https://nodejs.org/ja/
むむ、いきなり
「Node.js® は、Chrome の V8 JavaScript エンジン で動作する JavaScript 環境です。」
という記述。
ちょっと、細かいことはあとから調べるとして、まずは「node.js って?」てところからだ。

https://nodejs.org/ja/about/
そうなんだよ、JavaScript なんだよ。
ボクの技術知識は、だいぶ古い。なので、無名関数とか、ほんと違和感が拭えない…
イベント駆動型だから、発火したときに受け取る手続きが必要なだよね。
それを簡単に書けるのが無名関数なんだろうなぁ。
ま、とにかく慣れない😅

ふむふむ。
Non-blockingで動くということなのですな。
確かに、マルチプロセスやマルチスレッドのプログラミングでは、競合を考えないといけなかった。セマフォによる競合回避をすると、どうしてもセマフォを取ったプロセスやスレッド以外は、待つ(ブロック)か終了するかだった。そして、プログラムを組むのも面倒だ。
その手間がないのは、だいぶシンプルでいい。
裏返すと、競合のことも考慮しておかないといけないということか… いや、node.jsでは、Non-blockingで問題ないような設計を考えておくのがいいのだろう。
データ書き込みのような競合を回避しないといけない、あるいはセッション間でデータを保持しないといけないような場合、うまくnode.jsの処理と切り離せるといいのかもしれない。
Blocking vs Non-Blocking にもう少し詳しい記事があるそうだが、これは後で確認しよう。

「Ruby の Event Machine や Python の Twisted のシステムに影響を受けていて、同様の設計です。」
なんだ、気になるではないか… が、これも後で確認しよう。

「HTTP はストリーミングと低遅延を念頭に置いて設計された Node.js の第一級オブジェクトです。」
むむ… 気になる言葉が出てきた。「第一級オブジェクト」ってなんだ?
これも後で調べよう。

なるほど。fork してマルチプロセスでの動作もできるのですな。
プロセス間のソケット共有もできると。

まずは、超入門から。

後で確認すること:
・Chrome の V8 JavaScript エンジン https://v8.dev/
・Blocking vs Non-Blocking https://nodejs.org/en/docs/guides/blocking-vs-non-blocking/
・Ruby の Event Machine https://github.com/eventmachine/eventmachine
・Python の Twisted https://twistedmatrix.com/trac/
・第一級オブジェクト

次は、環境を作って、動かしてみることにしよう。
後で確認は、ちょっと動かしてみてから調べることにしよう。

いいなと思ったら応援しよう!