質問やフィードバックがありましたら、フォームからお願いします
本文は台湾華語で、ChatGPT で翻訳している記事なので、不確かな部分や間違いがあるかもしれません。ご了承ください
警告:この記事はあくまで私自身の見解や思いを表現したものであり、業界内の他の人々に対して批判の意図はありません。
徐々に成熟しているフロントエンドの分野
現在、フロントエンドの分野(ここではウェブ開発を指します)が徐々に成熟していると考えています。フロントエンドフレームワークは、コンポーネント化の中心思想とレスポンシブなメカニズムを採用しており、フレームワーク固有の構文、開発手法、哲学と組み合わせることで、大部分の使用シーンに対応可能です。現在の改善のほとんどは、例えば esbuild、vite、snowpack を通じて、トランスパイル速度と開発体験を向上させるための構築ツールに向けられています。また、既存のフレームワークに対する様々な最適化も行われており、たとえば vue3 は composition API を導入し、React は最近 React Server Components を発表しました。これにより、開発者のメンタルコストが様々な面で軽減されています。
もう一つのトレンドは、ブラウザと他のセンサー、通信プロトコルとの統合です。例えば、Web Serial API、Web Bluetooth、Web NFC などがあります。ブラウザの助けを借りることで、ユーザーはソフトウェアやドライバーを別途インストールする必要がなく、すべての操作がウェブ上で解決できます。この種のアプリケーションでは、ウェブページはせいぜい外殻に過ぎず、見た目が良い必要はなく、デバイスとスムーズに接続または対話できることが重要です。
一方、CSSフレームワークやコンポーネントライブラリも成熟しており、ウェブページを完成させるハードルがますます低くなっています。多くの場合、GitHubでお気に入りのライブラリを選び、少しコードを修正するだけで済みます。現在のフロントエンドフレームワークが提供する機能は、ほとんどのウェブサイトの必要を徐々に超えていると感じています。すべてのウェブページが Facebook、Netflix、Airbnb というわけではありません。
翻訳者
今、コードを書くことは翻訳者が行うことに似ていると感じています。要求をコードに翻訳し、テストやアクセシビリティ機能を加えることができれば、実質的には翻訳者とほとんど変わりません。このような運び屋は、いつか AI に取って代わられるか、アルバイトと AI の助けを借りてコードを書くことになるでしょう。
以前のライブ配信で Copilot を使って Vue3 を書いたことがあります。ライブ内の機能は比較的シンプルでしたので、参考価値はそれほど高くありませんが、Copilot が生成したコードを見たとき、その発展性に期待を寄せるべきだと感じました。このような簡単な実装のコードを AI に任せることができれば、私たちは他の価値のある事柄にもっと時間を費やすことができます。
以下は、Copilot を使用した他のいくつかの例で、すべて AI が自動生成したものです:
- Serial に現在の変数値を印刷したい場合、buffer を宣言するだけで、Copilot はこの関数の変数に基づいて何を印刷するかを推測します。
- AVR Timer の設定:どのレジスタを使用するかはデータシートを見なければわかりませんが、Copilot が直接教えてくれます(ただし、私が欲しいものでない場合もあります)。
- コードの断片や関数に基づいて、Copilot は私が stop 関数を欲しいかもしれないと推測し、実装は私が想像していたものに非常に近いです。
「基礎に戻るべきだ」という反論があることは承知しています。確かに、基礎がしっかりしているソフトウェアエンジニアにとって、これらは単なるツールであり、正しい心構えを持っていれば変化を恐れる必要はありません。しかし、次に私が不快に感じる点があります。
ウェブページは単なるメディア
ウェブ開発における多くのアプリケーションは「メディア」または「キャリア」に属します。たとえば、オンラインストアで商品を販売したい場合、ウェブページは取引を達成するためのツールです。しかし、商品がなければ、オンラインストアのウェブサイトだけではお金を稼ぐことはできません。開発者が Netflix に似た機能を持つウェブサイトを作成することはできるかもしれませんが、撮影、スタジオ、ポストプロダクション、流通などがなければ、Netflix のウェブサイトを作っても誰もお金を払ってくれません。PCHome のウェブページは見た目が悪いですが、物流追跡、倉庫管理、金銭の流れなど、背後にあるシステムをうまく処理しています。これらは単なるウェブページでは実現できないものです。ブログがさまざまな派手な機能を実装していても、コンテンツがなければ読者を引き付けることはできません。
これらの例を挙げるのは、ウェブページが多くの場合単なるメディアであり、ウェブページ自体が価値を創造することは非常に難しいことを伝えたいためです。その価値は背後にあるサービスや製品から来ています。
この事実自体には良い悪いはありません。インターネットの誕生以来、ウェブページは常にメディアの役割を果たしてきました。それは決して変わりません。しかし、私はメディアという事実に不安を感じ始めています。理由は簡単です。私は直接価値を創造することができないからです。このような考えを持つようになってから、私は不安定な砂塔の上に依存しているように感じています。言い換えれば、他人のために嫁に行くことを好まないような気持ちです。メディアの位置にいても、改良の余地が常にあることを認めているが、メディアが価値がないわけではありません。ただ心の中での障害を越えられないだけです。
ウェブページは巨大な抽象化に依存している
ウェブ開発の本質は、HTML、CSS、JavaScript、そしてブラウザの4つの要素に関係しています。HTML、CSS、JavaScript の進化は、各ブラウザメーカーの実装によります。
開発者にとって、HTML と CSS の構文とルールを知り、JavaScript を組み合わせるだけでウェブページの作成を開始できます。残りの部分はブラウザに任せることができます。HTML はどのように画面にレンダリングされますか?JavaScript はどのようにコンパイルされますか?JIT の背後にはどのような実装がありますか?HTTP リクエストはどのように作成されますか?ビデオはどのようにエンコード、デコードされますか?これらを知らなくても問題ありません。ブラウザがすべて処理してくれます。もう一度強調したいのは、これらのことを理解しているかどうかには正誤はありません。ただ私の心の中での障害を越えられないだけです。しかし、このような抽象化に対して不安を感じており、私は単に技術の発展の成果を享受しているだけだと感じています。各技術の背後には、ある程度の抽象化の概念があることを知っています。そうでなければ、すべての開発者が機械語から書き始めることになるでしょう。しかし、考えてみると、ウェブページの抽象化の程度は本当に驚くべきものです。
ウェブページはピラミッドの頂点に位置する
ウェブページはブラウザに依存しており、HTML、CSS、JavaScript の標準も完全に公開されています。これは、すべての進化が提案、ドラフト、標準の決定を待つ必要があり、最終的にはブラウザの実装が必要であることを意味します。Chrome は他のブラウザよりも常に先行し、さまざまな実験的な API を提供していますが、プラットフォームに限定される場合は使用シーンが大幅に制限されます。前述の Bluetooth、NFC などは、数年前から存在するものであり、他のプラットフォームでは当然のように使用できるものですが、ウェブ上では開発者がブラウザの実装を待たなければ使用できず、技術の発展に制限がかかります。
この感覚は、新技術が登場してしばらくしてから、ブラウザがようやく実装したときの興奮に似ています。しかし、実際には他の人々はすでにその技術の存在を知っており、彼らのサービスに早くから適用しています。
まとめ
私の不安の源は次のようにまとめられます:
- ウェブページは多くの場合「メディア」や「キャリア」であり、価値を「直接」提供するのが難しい
- フロントエンドの分野は成熟に向かっている
- 多くのコードは単なる翻訳であり、AI に取って代わられる可能性がある
- ウェブページ自体は巨大な抽象化に依存している
価値の創造
価値についてこの記事でも似たような概念について触れています。たとえば、キッチンタイマーは外観が良ければ、簡単な機能であっても消費者が購入することができます(薄利多売のビジネスモデルが価値を持つかどうかは議論の範囲外ですが)。しかし、同じ価格でユーザーにソフトウェアを購入してもらうのはどれほど難しいでしょうか?もう一つの例として、最近私が愛用している SwitchBot を挙げます。背後の運用を詳しく観察すると、Bluetooth 機能を持つ SoC を介して接続し、スマートフォンアプリおよびさまざまなサービスと統合されていることがわかります。これは優れた IoT アプリケーションです。
第一歩
私は自分が価値の生産者に近づけることを望んでおり、ここ一年間、その方向に向かっています。私の第一歩は、ハードウェアや IoT アプリケーションの研究です。現在、非常に安価で Arduino(中国製)、AVR チップ、Raspberry Pi Pico、STM32 などの低消費電力のマイコンを購入でき、ブレッドボードやハンダごて、電子部品を揃えればすぐに実験を始めることができます。
この一年を振り返ると、正直なところ、私はますます迷いを感じています。一方で、興味を持って開発する強度は、業界で長く経験を積んだエンジニアと比べると、まだまだ遠い感じがします。もう一方では、関連分野の給与(組み込み?)を見てみると、あまりにも低く、転職する気にはならないほどです。迷いは良いことかもしれません。少なくとも今の生活には余裕があり、これらのことを研究することができ、しかも非常に安価で手に入るのは本当に感謝です。
自分の唯一の優位性は、高校で学んだ知識がほとんど役立つことでしょう。レジスタ、多重処理、加算器などは、高校の時に何度も学びました。トランジスタ、増幅回路、振動子、整流、共振など、試験用に学んだものが、今ではどれほど貴重であるかを実感しています。
第二歩
私の第二歩は、実験回路を製品に近づけることを試み、基本的な 3D プリンティングや Fusion360 で 3D モデルを作成し、PCB の製作を理解しようとしています。例えば、以前は静電容量式キーボードの原理を理解するために、自分で PCB を設計して製品を印刷しました。
後に回路に誤りがあることに気づき、進行を一時中断することになりましたが、全体のプロセスを理解すると、思っていたほど難しくはなく、単に時間と忍耐をかけて全体の流れに慣れる必要があることがわかりました。実際、これは他の分野でも同様です。最近は他のことにも忙しくしているので、一段落したら再び進められることを願っています。そして、いつかその成果を見ることができることを願っています。
第三歩:ソフトウェアとハードウェアの統合
前述のように、ウェブの技術開発はブラウザの実装に依存しているため、最近は可能性の高いプラットフォームを探しています。現在は Macbook と iPhone を日常の開発機器およびスマートフォンとして使用しているため、iOS から入門しています。動画の中では、Bluetooth モジュールを Macbook に接続し、現在のポモドーロタイマーの状態とコンピュータを連携させ、ブラウザを介さずに CoreBluetooth を通じて直接接続できるようにしています。
この例は非常にシンプルで、回路も見栄えが悪いですが、私が伝えたい概念は、ソフトウェアとハードウェアの統合(または IoT の統合)が価値をさらに高めることができるということです。元々は見逃されがちなポモドーロタイマーの通知も、物理的なブザーや LED 表示を通じて解決でき、他のアプリケーションにも応用可能です。
第四歩
第四歩は、Linux カーネルを理解しようとすることです。比較的小型のアプリケーションでは AVR のようなマイコンで処理できますが、多くの組み込みアプリケーションは Linux カーネル上に構築されているか、またはドライバを作成して動作させています。
このステップは私にとってまだ少し遠いです。
次のステップ
正直に言うと、次に何をすべきかはわかりません。もし知っているなら、Twitter で教えてください。
振り返ってみると、私の価値の定義は「形のある」ものに似ているのでしょうか?現段階では確かにそうです。ソフトウェアと比べて、これらのものは価値を創造しやすいと考えています。しかし、機械学習、AI アプリケーション、ゲーム開発、データサイエンス、編集ソフトウェアなど、このようなアプリケーションはソフトウェアであっても、私にとっては直接的に価値を生み出すことができると感じています。UI インタラクションを書くのは楽しいですが、そろそろ他の分野にも目を向けるべき時かもしれません。
この記事が役に立ったと思ったら、下のリンクからコーヒーを奢ってくれると嬉しいです ☕ 私の普通の一日が輝かしいものになります ✨
☕Buy me a coffee