Movatterモバイル変換


[0]ホーム

URL:


はてラボはてな匿名ダイアリー
ようこそ ゲスト さんログインユーザー登録

「テスト駆動開発」を含む日記RSS

はてなキーワード:テスト駆動開発とは

次の25件>

2025-10-21

AIバイコーディングは、既に我々が10年以上前に通った道だ(オフショアリング昔話)

----

追記

「My Job Went ToIndia」の改題改訂版が「情熱プログラマー」なんだ!ありがとう発注したわ。(たぶん達人プログラマー混同して読んだ気になって読んでないパターンだわ)

俺の悪文のせいで意図が伝わらなかったであろうブコメがあったので、要旨だけ書き直しておくな。

ただ忘れないで欲しいんだけど、TerraformメンテしてAWSとかGCPで立ち上げてサービス公開するまでの速度は、相見積取って稟議通して部材調達から入ってた時代に比べると爆速だけど、人間技術屋の需要は増えてる。

俺は、「マスタリングTCP/IP 入門編」を人間が読んで理解するのは古いよね、という時代にはならないと思ってる。

Slerが自前で手元で試すようになるから~ってのも懐疑的SIerメーカーが内製すると必ず子会社作って分離、ぼく発注者きみ受注者にしたがるので。これは技術じゃなくて感情とか経営問題

(ただし、Slerが7payみたいなことやらかすのでは?って疑問なら同意。たぶんそういう生成AIで俺たちでプロダクトなんか簡単に作れるじゃんよギークいらね(仕様バグあり)は一時は増えるだろうね)

追記ここまで

----

VibeCodingでIT技術者は不要になるのか?という話題が花盛りなのは理由があります

ギーク現場コードを書いていたい人)が分かる話からスーツ(人を集めたりお金を集めたり営業をする)が分かる話になってきたからです。

具体的に言うと、OpenAI社をはじめ続々とTDD(テスト駆動開発)でやってますみたいな、具体的な開発スタイルの話が出てきたから。

そうすると、現場の座組チョットワカルという強めの経営者が理解して判断し始めるんですね。

でもね、その道はもう15年も昔に我々は通り過ぎました。前回のブームと何が違うでしょうか?

オフショアリングは、ソフトウェア開発者インターンを全滅させる!

技術者なら電子機械も強電も弱電もお世話になったことのあるオーム社過去に出していた直球の本の話から

「My job went toIndia :オフショア時代ソフトウェア開発者サバイバルガイド」という書籍、何と発行年は2006年です。

かいつまんで話すと、インターネットが整備され、輸送コストほとんどかからないソフトウェア開発では、アメリカエンジニア給与の面でオフショアに歯が立たない、だって、1/10給与インドエンジニアは働くんだぜ?という本です。

そうした、価格競争力で負けるアメリカソフトウェアエンジニアは、如何にして今後サバイブすべきなのか、という本になっています

普通に面白いAIコーディング時代に通づるものがあるので復刊を希望したいところですが、まあ直球過ぎる題名を何とかしないと再販は無理でしょうな)

そして、JTCや外資わず過去オフショア開発経験された技術屋のみなさんははてブにも多く生息されているでしょう。

では、ジュニア開発者不要になりシニア開発者のみになって、いまのソフトウェア開発は主に安い給与で働いてくれるところに遠隔で作業してもらって、レビューだけすれば良い環境ですか?

そうはなっていません。なぜでしょうか。

コミュニケーションコストとは、数値化がしづらいだけで確かに存在しま

さて、今普通にXと連動する中古品売買プラットフォームを開発しようと思ったら、どうやってつくるでしょうか?

この文脈に埋め込まれたいくつもの情報「今」「普通」「連動」「中古品」「売買」「プラットフォーム」「開発」を解釈し、すり合わせ、未来運営者も含めた全員に伝えるためのコストが、コミュニケーションコストです。

そうなると、「ちょっと良い感じにラフでいいかプロトタイプ作って持ってきてよ」で話が通じるのは、受注者マインドがしっかりした日本受託開発現場の精鋭たちになるわけです。

テストケースだけを通過するように、内部テーブルを持たせた関数を大量に持ってこられてレビュー時に頭を抱えた経験が無いひとは、とても幸運なのです。

とは言え、これは何も文化の違いに起因するだけではありません。仕様とは、環境によって定まるものからです。

例えば、うるう年判定の関数は、1581年以前をエラーしますか?1873年以前をエラーしますか?(ヒント:明治六年)

そしてその仕様って、品質にどの程度影響しますか?

成功したすべてのプロダクトでは、最初テストケースを書くべきだった

テスト駆動開発、古い言い方で言えばテストファーストの考え方は、成功したすべてのプロダクトで例外なく、ただの一つの例外もなく、必ず最初から取り入れるべきだったものです。

品質最後に振りかける粉砂糖のようなフレーバーではなく、最初から設計に組み込むべきだからです。

ここに問題があります

ありとあらゆる趣味において、最初から良いものを使えば時間無駄にせずに済んだ、と言われるような初期投資の大切さが説かれます

果たして本当でしょうか?

そうです、その趣味にハマって生き残りサバイブした人から見れば、過去にその時点で投資をすべきだった、というのは正しいのです。

その趣味にハマれなかった人からすれば、少ない投資自分に合わないことが分かったという合理的選択であることと矛盾しません。

そのため、全ての失敗したプロダクトは、テストケースを書く時間プロダクトを作り上げて、さっさと世に問うべきだったわけです。

VibeCodingの境界線は、設計実装の不可分さに起因するが、それは組織構造に起因する

少し昔話をしますが、オフショア開発において重要なのはドキュメンテーションテストケース、それにレビューでした。

他の部署で失敗しつづけていたオフショア開発のやり方は、端的に言えば"教化"でした。

具体的には書けませんが、グッとお安い単価の国に出す仕事を、日本会社に出すのと同じようにすべく、相手会社メンバー教育して仕立て上げるブートキャンプの仕組みを作り上げていました。

発注側を変えずに済むように受注側を教育して、日本会社に出すのと同じように単価の安いところに出せたらお得ですよね?でもこれは必ず失敗します。

何故か。だって日本会社と同じように働けるようになったら、日本会社就職するじゃないですか。少なくとも価値は上がったんだから単価を上げるように交渉しますよね?

結局のところ、当初言われていたような劇的な節約にはつながらないわけです。それなら下手に転職されるよりも自前で現地工場でも立てて地元に貢献しつつ雇用を創出した方が喜ばれるし持続可能です。

小なりとも成果が上がった方法は、フィードバック相手ではなくドキュメントにした場合でした。

例えば先ほどの例で言えば、テストケースは通るが意図したコードにならなかったとき

普通はこういう意図コードを書くからテストケースを通るにしても、関数は次からこう書いて」というのが、相手に対するフィードバック

関数を書く前に、関数意図コメントで残して、レビュー時にはそれを見ましょう」というプロセスの修正が、ドキュメントへのフィードバック

こうすると、担当者退職していなくなっても、次の担当者はその方法を参考にすれば良いわけです。

これ、何かに似てませんか。現在AIコーディングベストプラクティスと呼ばれるものに非常によく似ているんです。

まりオフショア開発というのも、設計実装が分離できるという前提に立って動いていたんです。

そして、実装しながら設計しても問題ないとする場合、それは「技術的な問題」ではなく「組織構造」に起因します。

まりプロダクトの構造を分割して、オフショア開発側に設計実装とを委譲して、実装しながら設計を変えてもらうことが許容できるのは、契約責任分界点輸出入法規を含めた法務領域です。

我々が出来ることを相手が出来ないだろうと侮るのは傲慢です。

少なくとも当時、諸々をクリアにして相手側にプロダクトの一部を荒い設計と共に切り出して、コーディングしながら再設計してもらい、テストケースを完備したコードドキュメントを共に完成までもっていってもらったことは、大きな成果であったはずです。

(当時日本側と仕事をしたという実績があると大きな実力があるとみなされたと聞いたので、今はより良いところで良い仕事をされていると思います

なぜオフショア開発流行らなかったのか

ぼく発注あなた受注者という構造を変える気が無かったから。

(あと、コミュニケーションコスト輸出入の関連法規が複雑だから

少なくとも、納期までに契約たこれを納品してください、という枠組みの中では、実装作業だけ切り出すことはできない、というのが教訓として残ったはずです。

バイコーディングではなく)AIコーディングが主流になるとして起こること

少なくともあと数年、場合によっては10スパンで、日本ではほとんど変わらないと予想しています

これは技術の話ではなく組織構造や、もっと言えばお仕事の進め方と契約の話だからです。

そうは言ってもジュニアエンジニア簡単仕事が減って成長機会が失われているのは事実では?と思うかもしれませんが、そもそもの前提が誤っています

経験(弱経験)者を雇って戦力まで鍛え上げる必要があるなら、AI仕事渡してないでそのジュニアエンジニアやらせるべきなんです。

ジュニアエンジニアAIと両方にOJTさせて、その違いをレビューの場でフィードバックしてジュニアを育てるわけです。

もし、そんな時間は無いというなら、元々ジュニアエンジニアOJTで育てていたというのは幻想です。

(たまに、失敗が経験になるとして、会社に損害を与える方法ジュニアを"教育"しようとする人がいますが、商習慣的にも信義則違反ですし言語道断です)

シニアエンジニアだけで事足りるとしてジュニアエンジニアを雇わなかった企業は、シニアエンジニアが抜けてガタガタになります

これは中核エンジニアがゴッソリやめた会社が傾くなんて言う話で、昔からそうです。(たいてい、もっと人雇ってくれ待遇上げてくれみたいな悲鳴を圧殺した結果だったりします)

から、中堅がやれば手早い仕事新入社員やらせて鍛える、その代わり質は悪いし時間もかかるしフォロー必要だったわけでしょう。

AI時代が到来するとしても全く同じです。AIが出力するコードレビュー悲鳴上げてる場合じゃないんですよ。

レビューできるシニアエンジニアが足りなくなると予想されるなら、当然、ジュニアエンジニア雇ってレビューできるようにする必要があるんです。

そしてそれは、技術的な問題点ではなく、組織的・経営的な決断です。

最後に、なんで10年後は違うかもしれないのか

国産LLM開発の文脈でもそうなんですが、ハードウェア進歩無視して話をする方が多いのが気になります

現時点のコンピューターパワーは、10年後には手の届く価格になる可能性が十分高く、もっと言えば20年後には個人が所有する可能性すらあります

いまから20年前の2005年は、Youtube誕生した年です。その時に、誰もがいつも手元にビデオカメラを持ち、即座に動画世界に公開できるようになるとは思っていなかった頃です。

今もそうだと思いますが、ある分野で必要な性能にはもう十分という期待値があり、10年経てばある程度大きな会社部署単位現在最先端コーディングAIローカルで動くようになると想像するのは容易です。

そうなったときに、果たして営利企業が、エンジニアを育成するというコストを支払うかといわれると、疑問です。その時点で今後のリアルコスト比較対象可能になるので。

だって、筆耕担当者とか、清書担当者を雇わなくなった企業って、多いでしょう?

My job went toAI として、じゃあ残るものは何?というのはオーム社の本を読みましょう。再販しないかなあ。

蛇足

今後数年は変わらないでしょと書いたら今現在進行形で変わっとるわいと突っ込みが来そうなんで防衛的な意味で書いておくんですが、あなた過去数年間同じ仕事してたんすか?

仕事のやり方とか内容とか、言語とかライブラリとか、毎年のように変わってたでしょ。

レビュー比率が多くなったとか、コード書かなくなったとか、そういうの、たぶん管理職になった人が嘆いてたのと同じっすよね?

少なくとも、ジュニアエンジニアが低品質バイコーディング結果を寄越すようになってレビューが大変とか嘆くのなら、まともなコーディング規約一つ作れていない組織の脆弱さを嘆くのが先では?

手癖でバイコーディングしてヒットしたプロダクトに、あとから品質上げるように大工事するリファクタリングと言うよりリビルディング仕事って、別に今もありますよね?

散々テストケースを書かなくて良いプロダクトなんて無いという講演だけ聞きに行って、自分とこでテストケースが自動で走るようになって無いなら、そこが問題でしょ。

最先端企業が、ほとんど生成AIコーディングさせているから、あとは使う人間次第だって

Permalink |記事への反応(4) | 19:12

このエントリーをはてなブックマークに追加ツイートシェア

2025-10-04

テスト品質管理に関する致命的な誤認識

品質管理が僕たちの責務です」

って、最近エンジニアリング界のライザップ的元テスト専門会社のQAエンジニアが、昔、言ってたなぁ……、と。

思い上がるなっ!

君たち如きに背負えるものでは、すでにない。

とあえて言おう。

それほどまでに、最近サービスは、でかく複雑になりすぎた。

いや、マジで、無理なんよ、もう。

例えば、キッチキチにエレベータを作り込んだとして、後から点検してくれ、と言われたら、まぁ、普通は困るよな。

モーター室がモーターが入るギリギリの広さだとしたら、箱の外に出る手段がなったら。

どうやって点検するんだよ。

から目視か?

実際には、設計時に点検方法を決定して、それができる余地を確保してから施工するものだろう。

今時のEV車なんて、テスト用の仕組みがきっちりと、製品に組み込まれている。

品質管理の仕組みって、そもそもそういうもんだろ?

DDD設計してます

マイクロサービスで分割してます

の前に、システムは「検証可能性」を検討するもんです。

検証不可能とまで言わなくても、検証困難な場合ちゃん対策をとるもんです。

作りきってから、「E2Eテストお願いねー」とQAチームに投げるものじゃあないんですよ。

設計時に、テスト戦略からから何まで検討済みになってるもんなんです。

そしてそれが「テスト駆動開発」のキモなんですわ。

別にユニットテスト書いて、カバレッジあげるのがTDDというわけではない。

検証可能システム設計実装し、リリースのたびにシステム健全性を検証できる仕組みを整える。

ってのが「テスト駆動開発」なんですわ。

テスト戦略ちゃんと練れば、マイクロサービスの分割の仕方、連携の仕方等々、多分、今、Web上でよく見る記事とはだいぶ様相が異なってくるはずだ。

で、プロダクトの中身である設計実装理解できなければ、検証のしようがないのがここ10年ほどだ。

金槌を渡されて、「品質検査しろ」と言われたら、まだ何とかなるだろう。

けどボーイング787をポンと渡されて、「品質検査しろ」と言われたら?

マニュアルなしで。

モジュールがどう組み合わされてるか等、中身を理解できなければ、何をどうしていいか分からんだろう?

扉の開け閉めができるとか、主電源入れたらなんか部屋の明かりがつくとか、そういう表面的な検査しかできないだろ?

これは、QAが、設計に飲み込まれることを意味する(10年以上前に、↑のQAエンジニアとした話)。

QAのテストに関する知見を、設計実装するエンジニアは当然持っておかなければならないということとともに、QAエンジニアは消えてなくなるということでもある。

お分かりだろうか?

同じ流れで、SREも不要になる。

そのためのクラウド、DevOpsの概念からだ。

Infrastructureas Code は設計実装エンジニアのためのものだと言っておこう。

決して、Terraformのファイル編集して、SREの許可を、延々と待ち続けて、適応してもらうことをいうわけではない。

そこまで込みで、設計するのだ。

高負荷時にどうスケールさせるかなども、当然設計に入ってくるからな。

ってなわけで、ほとんどの現場では、そういう致命的な誤認識をしていると思う。

認識が古すぎている上に、大型化複雑化した現状を認識できていない。

開発初期はまだ規模が膨らんでいないから、何とかなりそうな勘違いを犯しているだけの話だ。

初回リリース前後で、「あ、やばい……」となっているところがあまりに多すぎる。

また、この誤認識によって、役に立たないエンジニアの頭数だけを並べて札束を燃やし、事業の拡大の足を引っ張っていると指摘しておこう。

本当に、そういう現場が少なく見積もって8割あるとみている。

ここら、どげんかせにゃならんのよな。

Permalink |記事への反応(6) | 09:03

このエントリーをはてなブックマークに追加ツイートシェア

2025-06-28

LLMはエンジニア仕事を奪うのか?否、仕事抽象度を「Why」の次元

序文コード蒸発する時代と、それでも残る「Why」という名の問い

2025年私たちソフトウェア開発の歴史的な転換点に立っている。大規模言語モデル(LLM)の進化は、GitHub Copilotのようなコード補完ツールに始まり、今や「何を作りたいか」を自然言語で伝えるだけで、アプリケーションの雛形が数分で生成される時代現実のものとしつつある。この光景を目の当たりにした多くのプログラマが、漠然とした、しかし確かな不安を抱いているだろう。「私たち仕事は、いずれAIに奪われるのではないか」と。

この問いに対する私の答えは、半分はYesであり、もう半分はNoだ。より正確に言えば、プログラマ仕事本質が、歴史上かつてないレベル抽象化され、その役割が再定義されるのだ。私たちは、コードを「書く」作業から解放される一方で、これまで以上に高度な思考要求されることになる。

本稿では、プログラミング歴史を「How(いかに作るか)」から「What(何を作るか)」への移行として捉え直し、LLMがこの流れをいかに加速させるかを論じる。そして、その先にある、AIには決して代替できない、人間ならではの競争優位性、すなわちWhy(なぜ作るのか)」を定義し、記述する能力重要性について深く考察していく。これは、単なる未来予測ではない。今を生きるすべてのソフトウェアエンジニアにとっての、生存戦略提示である

第1章:プログラミング歴史的変遷 ― HowからWhatへの長い道のり

LLMの登場を特異点として捉える前に、我々が立っている場所を正確に知る必要がある。ソフトウェア開発の歴史は、常に「抽象化」との戦いであった。そしてその歴史は、プログラマの関心が「How」から「What」へと徐々に移り変わっていくプロセスとして描くことができる。

1-1.手続き時代:Howを記述することに終始した黎明期

コンピュータ黎明期プログラミングとは、計算機理解できる命令(How)を、一行一行、丹念に記述する作業のものであった。アセンブリ言語や初期のFORTRANCOBOLといった言語は、ハードウェアの制約を強く受けており、プログラマメモリ管理プロセッサ動作といった、極めて物理層に近いレベルでの「How」を意識する必要があった。

この時代テストもまた、「How」に強く束縛されていた。書かれた手続きが、意図した通りに順番に実行されるか、特定入力に対して期待された計算結果を返すか。テストの関心事は、あくまで「手続きの正しさ」の検証にあった。ビジネスロジック実装の詳細が密結合し、コード特定の処理手順を記述した、硬直的な塊となっていた。

1-2.テスト駆動した振る舞いへの注目:Whatへの小さな一歩

風向きが変わり始めたのは、ソフトウェアの規模が拡大し、その複雑性が人間認知能力を超え始めた頃だ。1990年代後半から2000年代にかけて提唱されたエクストリーム・プログラミングXP)の中で、テスト駆動開発(TDD)という考え方が登場する。

TDD本質は、単なるテスト手法改善ではない。それは、プログラミングパラダイム根底から覆す思想だった。TDDは、「まずテストを書く」ことを強制することで、プログラマ意識を「これから実装するコード(How)」から「そのコードが満たすべき振る舞い(What)」へと強制的に転換させたのだ。

テストはもはや、書かれたコードの後追いで正しさを検証する作業ではない。それは、これから作られるべきソフトウェアの「仕様書」であり、「振る舞いの宣言」となった。例えば、「ユーザーログインボタンクリックしたら、ダッシュボード画面に遷移する」というテストコードは、具体的な実装方法(`onClick`イベントハンドラの中で`window.location.href`を書き換える、など)には一切言及しない。それはただ、達成されるべき「What」を記述しているだけだ。

この思想は、ビヘイビア駆動開発(BDD)へと発展し、`Given-When-Then`といった、より自然言語に近い形式ソフトウェアの振る舞いを記述するスタイルを生み出した。プログラマだけでなく、プロダクトマネージャービジネスアナリストといった非技術者をも巻き込み、「What」を共通言語として定義する試みが本格化したのである

1-3.宣言プログラミングの台頭とフレームワーク役割

TDD/BDDによってプログラマ意識が「What」に向かい始めると、コードのものもまた、宣言的なスタイルへと進化していく。この変化を劇的に加速させたのが、モダンフレームワーク存在だ。

Reactを例に考えてみよう。Reactが登場する前、フロントエンド開発はjQuery代表されるように、DOMを直接操作する命令的なコード(How)の連続だった。「このボタンクリックされたら、この要素のテキストを書き換え、あちらの要素を非表示にする」といった具合だ。

しかし、Reactは「UIとは、ある状態state)に対する純粋写像である」という宣言的なモデル提示した。プログラマがやるべきことは、UI状態(`state`)と、その状態がどのように見えるか(JSXによるコンポーネント)を宣言することだけだ。状態が変更された際に、DOMをどのように効率的更新するかという面倒な「How」の部分は、Reactの仮想DOM差分検出アルゴリズムがすべて隠蔽してくれる。プログラマは「What(UIのあるべき姿)」を記述するだけでよくなったのだ。

この「WhatからHowへの変換」は、様々な領域で見られる。

これらのフレームワークツールは、いわば特定の制約下における、WhatからHowへの高性能な変換器」として機能してきた。プログラマは、フレームワークが課す「お作法」や「制約」を受け入れることで、退屈で間違いの多い「How」の記述から解放され、より本質的な「What」の定義に集中できるようになった。我々が「生産性が高い」と感じる開発体験は、この優れた変換器の恩恵に他ならない。

現状は、この歴史的変遷の延長線上にある。プログラマ仕事は、手続き記述する職人から、振る舞いを定義し、それを実現するための最適な「変換器(フレームワーク)」を選択・設定するアーキテクトへと、その重心を移してきたのだ。

第2章:LLMがもたらす究極のパラダイムシフト ― 汎用変換器の誕生

フレームワークがもたらした「WhatからHowへ」の潮流は、LLMの登場によって、未曾有のスケールで加速されようとしている。フレームワークが「特定領域に特化した変換器」であったのに対し、LLMは「あらゆる領域対応可能な、究極の汎用変換器」としてのポテンシャルを秘めているからだ。

2-1.フレームワークの制約を超えて

前章で述べたように、ReactやTerraformといったフレームワークは、その恩恵と引き換えに、私たち特定の「制約」を課してきた。Reactを使うならコンポーネントベース思考し、状態管理作法に従う必要がある。Terraformを使うなら、そのエコシステムとHCLの流儀を受け入れなければならない。これらの制約は、WhatからHowへの変換を自動化するための「レール」であり、私たちはそのレールの上を走ることで効率を得てきた。

しかし、LLMはこの前提を覆す。LLMは、特定フレームワーク言語知識を事前に学習しているが、その利用において絶対的な制約を課すわけではない。私たちは、より自由形式で「What」を伝えることができる。

例えば、こうだ。

ユーザー認証機能付きのシンプルブログアプリを作ってほしい。フロントエンドはReactとTypeScriptUIコンポーネントはMUIを使う。バックエンドNode.jsExpressで、データベースPostgreSQLユーザーGoogleアカウントログインでき、新しい記事作成編集、削除できる。記事にはマークダウン記法が使えて、画像アップロードできるようにしてほしい。

この要求(What)は、特定フレームワーク流儀に則ったものではない。複数技術スタックを横断し、機能要求自然言語で並べただけのものであるしかし、現在のLLM、特にGPT-4oやそれに類するモデルは、このレベル要求からディレクトリ構造設定ファイルAPIエンドポイントフロントエンドコンポーネントに至るまで、驚くほど具体的なコード(How)を生成することができる。

これは、フレームワークが担ってきた「WhatからHowへの変換」が、特定のレールから解き放たれ、より広範で柔軟な領域へと拡張されたことを意味する。これまで自動化が難しかった、あるいは特定フレームワーク存在しなかったニッチ領域や、複数技術を組み合わせる複雑なシステム構築においても、AIによる宣言プログラミング恩恵を受けられる時代が始まろうとしているのだ。

2-2. 「What」の解像度がすべてを決める世界

LLMという汎用変換器の登場により、プログラマ生産性は、いかに質の高いWhatをLLMに伝えられるか」に直結するようになる。これは、俗に「プロンプトエンジニアリング」と呼ばれるスキルだが、その本質は、ソフトウェア開発における「要求定義」そのものである

質の高い「What」とは何か。それは、曖昧性がなく、網羅的で、矛盾のない要求である

これらは、優秀なソフトウェアエンジニアが、プロダクトマネージャーデザイナーとの対話を通じて、日常的に行ってきた思考プロセスのものではないだろうか。LLMの登場は、この思考プロセスを、より明確に、よりテキストベースで「記述」する能力を求める。私たちの頭の中にあった暗黙的な仕様が、LLMへの入力プロンプト)という形で、明示的に言語化されることを要求するのだ。

やがて、ほとんどのプログラミング作業は、この「Whatの記述」に収束していくだろう。TDDテストコードという形式で「What」を記述したように、私たち自然言語や、より構造化された要求記述言語を用いて、AIに対して「What」を宣言することになる。コード(How)は、その宣言から自動生成される中間生成物に過ぎなくなる。まさに、コード蒸発していく未来である

第3章:それでもAIには決められない ― 「Why」の不在という致命的な欠陥

「What」を伝えれば「How」が手に入る。この魔法のような世界の到来を前に、私たちは一つの重大な問いに直面する。それは、「そのWhatからHowへの変換は、本当に一意に決まるのか?」という問いだ。

答えは、明確にNoである

ある「What(要求)」を実現するための「How(実装)」は、無数に存在する。そして、どの「How」を選択すべきかを決定するためには、単純な機能要求(What)だけでは情報が全く足りない。そこには、必ずWhy(なぜそう作るのか)」という、背景、文脈、そしてトレードオフ考慮必要不可欠となる。

3-1.トレードオフの海に溺れるLLM

簡単な例を考えてみよう。「1億件のユーザーデータを格納し、ユーザーIDで高速に検索できるシステム」という「What」をLLMに与えたとする。LLMは、どのような「How」を提案するだろうか。

これらの選択肢は、どれも「What」を満たしている。しかし、その特性は全く異なる。案Aは多くのエンジニアにとって馴染み深く開発が容易だが、10億、100億件へのスケールは難しいかもしれない。案Bはスケール性に優れるが、厳密なトランザクション管理は苦手だ。案Cは高速だが、運用コストシステムの複雑性が増す。案Dは安価だが、検索速度は他に劣る。

LLMは、これらの選択肢をリストアップすることはできるだろう。しかし、このプロジェクトにとって最適な選択肢はどれかを、自信を持って決定することはできない。なぜなら、その決定には、LLMが与えられていない「Why」の情報必要からだ。

これらの「Why」こそが、無数に存在する「How」の中から、ただ一つの「正解」を選び出すための羅針盤なのである。そしてこの「Why」は、ビジネス目標組織文化ユーザーの期待、技術的な制約といった、極めて人間的で、文脈依存的な情報の中にしか存在しない。

3-2.エンジニアが暗黙的に行ってきた「Why」に基づく意思決定

ここで重要なのはこれまでもエンジニアは、この「Why」に基づく意思決定を、意識的あるいは無意識的に行ってきたという事実だ。

私たち技術選定を行うとき、単に「流行っているから」という理由だけでReactを選ぶわけではない。「SPA(Single PageApplication)にすることでユーザー体験を向上させたい(Why)」、「コンポーネント指向の開発によって長期的な保守性を確保したい(Why)」、「Reactエンジニア採用市場が活発だからWhy)」といった、様々な「Permalink |記事への反応(0) | 17:09

このエントリーをはてなブックマークに追加ツイートシェア

LLMはエンジニア仕事を奪うのか?否、仕事抽象度を「Why」の次元

序文コード蒸発する時代と、それでも残る「Why」という名の問い

2025年私たちソフトウェア開発の歴史的な転換点に立っている。大規模言語モデル(LLM)の進化は、GitHub Copilotのようなコード補完ツールに始まり、今や「何を作りたいか」を自然言語で伝えるだけで、アプリケーションの雛形が数分で生成される時代現実のものとしつつある。この光景を目の当たりにした多くのプログラマが、漠然とした、しかし確かな不安を抱いているだろう。「私たち仕事は、いずれAIに奪われるのではないか」と。

この問いに対する私の答えは、半分はYesであり、もう半分はNoだ。より正確に言えば、プログラマ仕事本質が、歴史上かつてないレベル抽象化され、その役割が再定義されるのだ。私たちは、コードを「書く」作業から解放される一方で、これまで以上に高度な思考要求されることになる。

本稿では、プログラミング歴史を「How(いかに作るか)」から「What(何を作るか)」への移行として捉え直し、LLMがこの流れをいかに加速させるかを論じる。そして、その先にある、AIには決して代替できない、人間ならではの競争優位性、すなわちWhy(なぜ作るのか)」を定義し、記述する能力重要性について深く考察していく。これは、単なる未来予測ではない。今を生きるすべてのソフトウェアエンジニアにとっての、生存戦略提示である

第1章:プログラミング歴史的変遷 ― HowからWhatへの長い道のり

LLMの登場を特異点として捉える前に、我々が立っている場所を正確に知る必要がある。ソフトウェア開発の歴史は、常に「抽象化」との戦いであった。そしてその歴史は、プログラマの関心が「How」から「What」へと徐々に移り変わっていくプロセスとして描くことができる。

1-1.手続き時代:Howを記述することに終始した黎明期

コンピュータ黎明期プログラミングとは、計算機理解できる命令(How)を、一行一行、丹念に記述する作業のものであった。アセンブリ言語や初期のFORTRANCOBOLといった言語は、ハードウェアの制約を強く受けており、プログラマメモリ管理プロセッサ動作といった、極めて物理層に近いレベルでの「How」を意識する必要があった。

この時代テストもまた、「How」に強く束縛されていた。書かれた手続きが、意図した通りに順番に実行されるか、特定入力に対して期待された計算結果を返すか。テストの関心事は、あくまで「手続きの正しさ」の検証にあった。ビジネスロジック実装の詳細が密結合し、コード特定の処理手順を記述した、硬直的な塊となっていた。

1-2.テスト駆動した振る舞いへの注目:Whatへの小さな一歩

風向きが変わり始めたのは、ソフトウェアの規模が拡大し、その複雑性が人間認知能力を超え始めた頃だ。1990年代後半から2000年代にかけて提唱されたエクストリーム・プログラミングXP)の中で、テスト駆動開発(TDD)という考え方が登場する。

TDD本質は、単なるテスト手法改善ではない。それは、プログラミングパラダイム根底から覆す思想だった。TDDは、「まずテストを書く」ことを強制することで、プログラマ意識を「これから実装するコード(How)」から「そのコードが満たすべき振る舞い(What)」へと強制的に転換させたのだ。

テストはもはや、書かれたコードの後追いで正しさを検証する作業ではない。それは、これから作られるべきソフトウェアの「仕様書」であり、「振る舞いの宣言」となった。例えば、「ユーザーログインボタンクリックしたら、ダッシュボード画面に遷移する」というテストコードは、具体的な実装方法(`onClick`イベントハンドラの中で`window.location.href`を書き換える、など)には一切言及しない。それはただ、達成されるべき「What」を記述しているだけだ。

この思想は、ビヘイビア駆動開発(BDD)へと発展し、`Given-When-Then`といった、より自然言語に近い形式ソフトウェアの振る舞いを記述するスタイルを生み出した。プログラマだけでなく、プロダクトマネージャービジネスアナリストといった非技術者をも巻き込み、「What」を共通言語として定義する試みが本格化したのである

1-3.宣言プログラミングの台頭とフレームワーク役割

TDD/BDDによってプログラマ意識が「What」に向かい始めると、コードのものもまた、宣言的なスタイルへと進化していく。この変化を劇的に加速させたのが、モダンフレームワーク存在だ。

Reactを例に考えてみよう。Reactが登場する前、フロントエンド開発はjQuery代表されるように、DOMを直接操作する命令的なコード(How)の連続だった。「このボタンクリックされたら、この要素のテキストを書き換え、あちらの要素を非表示にする」といった具合だ。

しかし、Reactは「UIとは、ある状態state)に対する純粋写像である」という宣言的なモデル提示した。プログラマがやるべきことは、UI状態(`state`)と、その状態がどのように見えるか(JSXによるコンポーネント)を宣言することだけだ。状態が変更された際に、DOMをどのように効率的更新するかという面倒な「How」の部分は、Reactの仮想DOM差分検出アルゴリズムがすべて隠蔽してくれる。プログラマは「What(UIのあるべき姿)」を記述するだけでよくなったのだ。

この「WhatからHowへの変換」は、様々な領域で見られる。

これらのフレームワークツールは、いわば特定の制約下における、WhatからHowへの高性能な変換器」として機能してきた。プログラマは、フレームワークが課す「お作法」や「制約」を受け入れることで、退屈で間違いの多い「How」の記述から解放され、より本質的な「What」の定義に集中できるようになった。我々が「生産性が高い」と感じる開発体験は、この優れた変換器の恩恵に他ならない。

現状は、この歴史的変遷の延長線上にある。プログラマ仕事は、手続き記述する職人から、振る舞いを定義し、それを実現するための最適な「変換器(フレームワーク)」を選択・設定するアーキテクトへと、その重心を移してきたのだ。

第2章:LLMがもたらす究極のパラダイムシフト ― 汎用変換器の誕生

フレームワークがもたらした「WhatからHowへ」の潮流は、LLMの登場によって、未曾有のスケールで加速されようとしている。フレームワークが「特定領域に特化した変換器」であったのに対し、LLMは「あらゆる領域対応可能な、究極の汎用変換器」としてのポテンシャルを秘めているからだ。

2-1.フレームワークの制約を超えて

前章で述べたように、ReactやTerraformといったフレームワークは、その恩恵と引き換えに、私たち特定の「制約」を課してきた。Reactを使うならコンポーネントベース思考し、状態管理作法に従う必要がある。Terraformを使うなら、そのエコシステムとHCLの流儀を受け入れなければならない。これらの制約は、WhatからHowへの変換を自動化するための「レール」であり、私たちはそのレールの上を走ることで効率を得てきた。

しかし、LLMはこの前提を覆す。LLMは、特定フレームワーク言語知識を事前に学習しているが、その利用において絶対的な制約を課すわけではない。私たちは、より自由形式で「What」を伝えることができる。

例えば、こうだ。

ユーザー認証機能付きのシンプルブログアプリを作ってほしい。フロントエンドはReactとTypeScriptUIコンポーネントはMUIを使う。バックエンドNode.jsExpressで、データベースPostgreSQLユーザーGoogleアカウントログインでき、新しい記事作成編集、削除できる。記事にはマークダウン記法が使えて、画像アップロードできるようにしてほしい。

この要求(What)は、特定フレームワーク流儀に則ったものではない。複数技術スタックを横断し、機能要求自然言語で並べただけのものであるしかし、現在のLLM、特にGPT-4oやそれに類するモデルは、このレベル要求からディレクトリ構造設定ファイルAPIエンドポイントフロントエンドコンポーネントに至るまで、驚くほど具体的なコード(How)を生成することができる。

これは、フレームワークが担ってきた「WhatからHowへの変換」が、特定のレールから解き放たれ、より広範で柔軟な領域へと拡張されたことを意味する。これまで自動化が難しかった、あるいは特定フレームワーク存在しなかったニッチ領域や、複数技術を組み合わせる複雑なシステム構築においても、AIによる宣言プログラミング恩恵を受けられる時代が始まろうとしているのだ。

2-2. 「What」の解像度がすべてを決める世界

LLMという汎用変換器の登場により、プログラマ生産性は、いかに質の高いWhatをLLMに伝えられるか」に直結するようになる。これは、俗に「プロンプトエンジニアリング」と呼ばれるスキルだが、その本質は、ソフトウェア開発における「要求定義」そのものである

質の高い「What」とは何か。それは、曖昧性がなく、網羅的で、矛盾のない要求である

これらは、優秀なソフトウェアエンジニアが、プロダクトマネージャーデザイナーとの対話を通じて、日常的に行ってきた思考プロセスのものではないだろうか。LLMの登場は、この思考プロセスを、より明確に、よりテキストベースで「記述」する能力を求める。私たちの頭の中にあった暗黙的な仕様が、LLMへの入力プロンプト)という形で、明示的に言語化されることを要求するのだ。

やがて、ほとんどのプログラミング作業は、この「Whatの記述」に収束していくだろう。TDDテストコードという形式で「What」を記述したように、私たち自然言語や、より構造化された要求記述言語を用いて、AIに対して「What」を宣言することになる。コード(How)は、その宣言から自動生成される中間生成物に過ぎなくなる。まさに、コード蒸発していく未来である

第3章:それでもAIには決められない ― 「Why」の不在という致命的な欠陥

「What」を伝えれば「How」が手に入る。この魔法のような世界の到来を前に、私たちは一つの重大な問いに直面する。それは、「そのWhatからHowへの変換は、本当に一意に決まるのか?」という問いだ。

答えは、明確にNoである

ある「What(要求)」を実現するための「How(実装)」は、無数に存在する。そして、どの「How」を選択すべきかを決定するためには、単純な機能要求(What)だけでは情報が全く足りない。そこには、必ずWhy(なぜそう作るのか)」という、背景、文脈、そしてトレードオフ考慮必要不可欠となる。

3-1.トレードオフの海に溺れるLLM

簡単な例を考えてみよう。「1億件のユーザーデータを格納し、ユーザーIDで高速に検索できるシステム」という「What」をLLMに与えたとする。LLMは、どのような「How」を提案するだろうか。

これらの選択肢は、どれも「What」を満たしている。しかし、その特性は全く異なる。案Aは多くのエンジニアにとって馴染み深く開発が容易だが、10億、100億件へのスケールは難しいかもしれない。案Bはスケール性に優れるが、厳密なトランザクション管理は苦手だ。案Cは高速だが、運用コストシステムの複雑性が増す。案Dは安価だが、検索速度は他に劣る。

LLMは、これらの選択肢をリストアップすることはできるだろう。しかし、このプロジェクトにとって最適な選択肢はどれかを、自信を持って決定することはできない。なぜなら、その決定には、LLMが与えられていない「Why」の情報必要からだ。

これらの「Why」こそが、無数に存在する「How」の中から、ただ一つの「正解」を選び出すための羅針盤なのである。そしてこの「Why」は、ビジネス目標組織文化ユーザーの期待、技術的な制約といった、極めて人間的で、文脈依存的な情報の中にしか存在しない。

3-2.エンジニアが暗黙的に行ってきた「Why」に基づく意思決定

ここで重要なのはこれまでもエンジニアは、この「Why」に基づく意思決定を、意識的あるいは無意識的に行ってきたという事実だ。

私たち技術選定を行うとき、単に「流行っているから」という理由だけでReactを選ぶわけではない。「SPA(Single PageApplication)にすることでユーザー体験を向上させたい(Why)」、「コンポーネント指向の開発によって長期的な保守性を確保したい(Why)」、「Reactエンジニア採用市場が活発だからWhy)」といった、様々な「Permalink |記事への反応(0) | 17:09

このエントリーをはてなブックマークに追加ツイートシェア

2025-02-05

データベーステストってどうやるんだ

ユニットテストテスト駆動開発の本は読んでいるんだが、扱っているシステムのメインロジックデータベースプロシージャーや複雑なクエリ構成されている。関連するテーブルも多く、テスト用のテーブルデータを準備するのも大変だ。他の開発現場ではどうやってるんだ。

Permalink |記事への反応(0) | 21:50

このエントリーをはてなブックマークに追加ツイートシェア

2025-01-12

専門分化してるからテスト駆動開発」も専門分野の1つと勘違いされるけど、違うんだよ

TDDってのはLinuxコマンドAWSの使い方と同じように、ソフトウェア開発者が知っておくべき知識の1つなんだよね

「僕の専門はLinuxコマンドです」なんて言わんだろ?

Permalink |記事への反応(1) | 20:52

このエントリーをはてなブックマークに追加ツイートシェア

2024-06-27

anond:20240627223046

テスト駆動開発という言葉そもそも存在しない企業もあるよね

Permalink |記事への反応(1) | 22:34

このエントリーをはてなブックマークに追加ツイートシェア

2024-04-05

[稀ドメインはてブ]2024年3月滅多にホットエントリを出さなドメインからホットエントリ

ここ1年で初めてはてなブックマーク日毎の総合人気エントリ入りしたドメインからホットエントリブクマ数順トップ30

ブクマタイトルドメイン
1900なんとなく使っていませんか? 括弧の種類と使い分け|モリサワ note編集部note.morisawa.co.jp
1309波 2024年4月号 おつむの良い子は長居しない 第12回/高嶋政伸www.shinchosha.co.jp
1241電車の中で座るための戦略アクションプランみずほリサーチテクノロジーwww.mizuho-rt.co.jp
1061無印良品ランドセルの思い出 -プロムナードpromenade.hatenablog.jp
1011謙虚リーダーのもとで心理的安全性が高まりメンバー本領発揮しやすくなる―職場においてリーダー謙虚さと心理的安全性が果たす役割― |東京大学 先端科学技術研究センターwww.rcast.u-tokyo.ac.jp
986いらすと本舗irasutofree.com
921電通人間の消費行動に強く影響する「11欲望」最新版を発表 | AdverTimes.(アドタイby宣伝会議www.advertimes.com
918訃報集英社週刊少年ジャンプ公式サイトwww.shonenjump.com
808日本賃金が上がらない理由大企業中の人目線で) -konanタワリーマンブログkonantower.hatenablog.com
730はじめに | ちいさなWebブラウザを作ってみようbrowserbook.shift-js.info
680あなたが教わってるそのCSSテクニックはもう古い |TAKLOGwww.tak-dcxi.com
664個人開発を7年以上続けて分かった技術選択のコツblog.craftz.dog
648お知らせ 閉店・廃業します。 |新宿curry草枕currykusa.com
638さすがの一言に尽きる!全登山者が求めていた“神アイテム”はモンベルにあった | YAMAHACK[ヤマハック]yamahack.com
618高木浩光@自宅の日記 - Claude 3に例の「読了目安2時間記事解説させてみたtakagi-hiromitsu.jp
590とほほさんの「お茶紅茶入門」の内容を検証する(主に中国茶部分) – あるきちのお茶旅行日記arukichi.teamedia.jp
582翻訳テスト駆動開発定義 - t-wadaブログt-wada.hatenablog.jp
543冬の電気自動車の遠出は本当に厳しい。航続距離も減るし、とにかく充電スピードが落ちます -勝間和代が徹底的にマニアックな話をアップするブログkatsumakazuyo.hatenablog.com
540トーweb創作文芸サークルキャロット通信」の崩壊創作文芸サークルキャロット通信」の崩壊to-ti.in
539ワイヤレスイヤホン価格帯別選び方 -ARTIFACT@はてブロkanose.hateblo.jp
536会議で話されている内容と、ソースコード全然違う」〜イオン発の“新ネットスーパーリリース直前の1年間を語る|イオンネクストCTOインタビュー |AEON TECHHUBengineer-recuruiting.aeon.info
53227歳年収420万非モテ男がマッチングアプリ始めた結果がヤバすぎる -人生万事こじらせるべからwww.gorannosponsor.net
525Python滅ぼす協会に入会したいdev.thanaism.com
514はてなアプリ専用マンガビューワを集英社採用。2,700万ダウンロードを超える「少年ジャンプ+」に提供開始 -プレスリリース -株式会社はてなhatena.co.jp
485無料台湾で収録された自然環境ライブラリ、99Sounds「Nature Sounds」無償配布開始! |ComputerMusic Japancomputermusic.jp
476美しいもの・美しいものcomic-medu.com
451ゲームを途中でやめた理由、ご意見対策集 - SmokingWOLF -Ci-en(シエン)ci-en.dlsite.com
447シェフ考案】チキン南蛮の作り方。衣はザクザク、肉はジューシー甘酢タルタルレシピも必見です |三越伊勢丹の食メディア | FOODIE(フーディー)mi-journey.jp
439業務スーパーラグジュアリッチコーヒーはなぜ美味い?珈琲まめ工房質問攻め -福岡フリーライター大塚たくま.comwww.otsuka-takuma.com
429文字組版教室note版|モリサワ note編集部note.morisawa.co.jp

Permalink |記事への反応(0) | 22:38

このエントリーをはてなブックマークに追加ツイートシェア

2024-04-01

anond:20240401163549

実践できないのは難しいからって考えてる

テスト駆動開発のものというよりその前提にあるクラス設計の部分も含めて

Permalink |記事への反応(1) | 16:54

このエントリーをはてなブックマークに追加ツイートシェア

anond:20240401153531

個人的な話だとテスト駆動開発

どうしても後からテスト書いてしま

作り始める前にクラスイメージがはっきりできてないからなんだけど

臭いおじさんなので大雑把な思い付きで作り始めて作りながら調整してく作り方から抜け出せない

Permalink |記事への反応(1) | 15:42

このエントリーをはてなブックマークに追加ツイートシェア

2024-03-11

テスト駆動開発時代プライベートメソッドテストとかないわ。

せやかて工藤

Permalink |記事への反応(0) | 07:41

このエントリーをはてなブックマークに追加ツイートシェア

2023-12-14

プログラマーのワイが読んだ中で良かった本ベスト10

1.UNIXという考え方 Mike

2.プログラミング作法 Brian and Rob

3.テスト駆動開発Kent

4. 達人プログラマーAndy

5.リファクタリング Martin

6.プログラマーが知るべき97のこと

7.ソフトウェアアーキテクトが知るべき97のこと

8.レガシーコードからの脱却

9. DesignIt!

10.少年メイドクーロ君

Permalink |記事への反応(3) | 08:14

このエントリーをはてなブックマークに追加ツイートシェア

2023-10-29

達人プログラマーゾルラーク

anond:20231027224113

プログラミング話題と相性がいいんじゃないかと思って、昔読んだことがある達人プログラマー (1999年出版された第1版の方、2019年出版された第2版ではない) をぱらぱら見返してみた。プログラマーとしての姿勢プラクティスなどは一般に普及したかどうかの判断が難しい。間違いなく一般的になったなと思えるものに絞って書く。インフラ面の進化が大きいと言えそう。

フリーレン「わずか数年で人類の開発方法論に組み込まれ、新しいインフラによってシステム開発生産性を向上させた。」

17ソースコード管理

でも今のチームはソースコード管理システムを使っていないんだけど…

恥ずかしいと思ってください! そして、これが伝道師となる機会だと受け止めてほしいのです。しかし、彼らが自ら進むべき道を見つける時まで、あなた一人ぼっちであってもソース管理を使うようにしてください。

フェルン「いまのはバージョン管理システムです。」

33リファクタリング

いつリファクタリングを行うべきなのか?

コードがうまくなじんでいないと感じたり、まとめるべき 2つの事柄を見つけたりといった何か「おかしもの」に遭遇した場合、手を入れることを躊躇してはいけません。

34テストやすコード/43 容赦ないテスト

テスト文化

あなた記述したソフトウェアはすべてテスト対象になりますあなたあなたのチームの人間テストをしなければ、最終的にユーザーテストを強いられるのです。このため、テスト計画を徹底的に練る必要がありますしかし、事前にものごとを少し考えるだけでメンテナンス費とヘルプデスクへの呼び出しを大幅に削減できます

(中略)

テスト技術というよりは文化なのです。こういったテスト文化は、使用する言語関係なくプロジェクトに植え付けることが可能なのです。

フェルン「いまのはテスト駆動開発です。」

42 どこでも自動化

多くのプロジェクトでは、こういったレベルビルドは毎晩自動的に実行されています。つまりプロジェクト特定部分を夜間ビルド作成すると同時に、個別テストよりも完全なテストを実行できるのです。これによって、完全なビルド実行時に行うテストをすべて実行させることも可能になります。結果として、その日のうちに回帰テスト問題を見つけられるようになるわけです。ソースの変更後、できるだけ早い時点で問題を検出できれば、バグの検出と修正を円滑に進められるようになるはずです。

フェルン「いまのはCI/CD です。」

Permalink |記事への反応(0) | 18:27

このエントリーをはてなブックマークに追加ツイートシェア

2023-09-19

anond:20230919110606

これ、応用情報技術者試験のR4春の午後の問3前半のコードと似ていて読めないようなコードではない。

https://www.ipa.go.jp/shiken/mondai-kaiotu/gmcbt80000009sgk-att/2022r04h_ap_pm_qs.pdf

応用情報のほうは添え字を一次元に展開しているのをChatGPTは二次元でやってるだけ。

問題後半では探索の効率化をやっていて、人間が解くように候補数字リスト作成してそこから処理するんだけど、ChatGPTのコードも少しの変更で速くなることはコード読んで短時間判断できるから決して保守性の悪いコードではないでしょ。

しろVBAかじった素人や、派遣自称エンジニアコードのほうが一般に酷い。

応用情報の方は誘導がありコメントの通り書くだけのラッキー問題で1問あたり30分で設問3つのうちの2つを占めるから制限時間20分だけど、ChatGPTはこれを一行命令誘導なしで即答する。

一定水準の網羅性を考慮した動作確認用のいくつかの入力と出力の組を過去業務データから用意して、テスト実行マクロもChatGPTに書かせてしまえば、変更があったときコードベース修正しないでプロンプトから出し直してしまえば中身がブラックボックスでもテスト品質確保するテスト駆動開発ができる。レビューなんかテストパターン網羅性とテスト結果で十分よね。

業務をよく知っている人が業務内容をプロンプトに落とし込んでテストパターンを適切に準備できればVBA知識ほとんどいらないし、その知識すらChatGPTのコードと会話から学ぶことができるんよね。

Permalink |記事への反応(0) | 15:28

このエントリーをはてなブックマークに追加ツイートシェア

2022-09-01

IT系企業

なんかイベントかに登壇してうちはテスト駆動開発からバグが少ないとか言ってる割に

しょうもないけど絶対これテストで引っ掛かるだろ・・・って内容のバグを見つけてしまうと

理想だけ高くて内実うまくまわってねぇんだろうなぁって思ってしま

Permalink |記事への反応(0) | 18:01

このエントリーをはてなブックマークに追加ツイートシェア

2022-08-18

anond:20220818113853

DRY原則KISS原則YAGNI法則

をなど有名な格言がある

コメントを残すのはあまり良いことではない

コード自身意味が込められてないという証明から

必要最低限のコメントだけにするひつようがある。

独学ならテスト駆動開発などの動画を見て

https://www.youtube.com/watch?v=Q-FJ3XmFlT8

動画のとおりに写経する。

この動画にはプログラムの基礎が詰まっている

Permalink |記事への反応(1) | 11:44

このエントリーをはてなブックマークに追加ツイートシェア

2020-11-21

ソースコード品質を保つために真に効果的な手段は3つしか無い

  1. バージョン管理システムを使う
  2. 静的型付け言語およびlintを使う
  3. テスト駆動開発をする

どんなに優れたツール設計思想などがあっても、使う奴がダメだと全く無意味。弊社もWebアプリを作ってて、RESTだのFluxアーキテクチャだのいろいろ導入を試みたが、ほとんど無駄に終わった。

どんなクソ組織でも効果があると確信持って言えるのは上の3つだけ。1つ目は初歩的すぎると思われるかも知れないが、筆者の想定するダメ組織ダメプログラマというのは、このレベルの連中を含む。

とにかく最低限の品質保証強制する仕組み以外は無意味

静的型付け言語サーバーサイドならJavaC#フロントエンドならTypeScript)を使わせれば、少なくともコンパイル時に分かるエラー修正させられる。

というか、ダメプログラマに動的型付けの言語は触らせてはいけない。必ずそのプロジェクト半年後には保守できなくなる。

テスト強制的に書かせるし、テストのないクラスや、通らないテストあったらコミットできないようにする(それは容易にできる)。

番外編:ものすごくマイナー言語を使う

もう一つの方法は、そもそも優秀なエンジニアしか参加できないようにすること。たとえば、ScalaHaskellErlangCommon Lispなどで書かれていれば必然的にそれが分かるエンジニアしか開発できないし、こういう言語自主的学習しているエンジニアは優秀である可能性が高い。

Permalink |記事への反応(0) | 23:18

このエントリーをはてなブックマークに追加ツイートシェア

2020-04-29

ここ2週間でやったこ



なんかいろいろやってるようで、それでも暇に感じてしまうし、ついつい遊んでしま

アプリ一本仕上げるだとか、何か一つに没頭した方が良いかなぁ

Permalink |記事への反応(2) | 14:36

このエントリーをはてなブックマークに追加ツイートシェア

2017-06-30

https://anond.hatelabo.jp/20170630201448

まあJavaだと意味が無いよね。テスト駆動開発とか言いだした人たちはSmalltalkユーザーだし、スクリプト言語だと仕様変更時にエラーが何も検出されないかテストコード必要なだけでJavaなら全く必要いからね。

Permalink |記事への反応(0) | 20:20

このエントリーをはてなブックマークに追加ツイートシェア

2017-02-15

http://anond.hatelabo.jp/20170214114736

ここまでテストの話一切無し。日本技術者レベルって低いね

バグを0にするのは難しいが、テストを書いて、ある程度の動作保証を行うことは出来る。普通はこれで十分。

テスト駆動開発とか継続的インテグレーションとか勉強しようね。

Permalink |記事への反応(1) | 02:08

このエントリーをはてなブックマークに追加ツイートシェア

2016-06-19

全てのRubyエンジニアはだいたい糞である

汎用系のエンジニアからRubyエンジニアとして転職して1年。

コボラー(笑)なんて言われることも多いが、この1年で出会ったRubyエンジニアは全て糞だった。

その特徴はだいたいこの3つだ。

1.テストを甘く見ている

やれテスト自動化だ、やれテスト駆動開発だの口だけ達者なエンジニアの多いこと。

そもそもブラックボックステストホワイトボックステストを分かっていない奴が多すぎ。

テストコードカバレージが100%だったとしても実際の打鍵結果でエラーは弾けることが多いのにリリースしてしまう。

そもそもテストケース表を若いうちに書く習慣が無いからだ。

ドキュメント揶揄し机上デバッグも行わない、こんな状態で「アジャイルですから」とかドヤ顔でいってしまRubyエンジニアは糞である

2.パフォーマンスを考えない

Rubyエンジニアパフォーマンスを考えない。

どのメソッドがどれくらいの負荷なのか意識せず実装を行う。

便利だから、ただそれだけの理由なのである

そもそも自分が行おうとしているソートが何ソートなのか知っているのか?計算回数を考慮した上での実装か?

便利なメソッドがたくさんあるのは知っている。

ただ、中身くらいは知っておこうよ。

eachで回してばかりだから複雑なループ対応もできない。

新人に教えたらバカにされたけど、まずフローチャート書くようにしようぜ。

3.外部ライブラリに対する絶対的根拠の無い信頼

Gemに対する絶対的な信頼感、あれなんなの?

Githubで公開されてましたんで導入しました」じゃねーよ。

結局他のGemバッティングしているじゃねーか。

得体の知れないコードをたくさん詰め込んだプログラムをよく動かせるな。

そんで都合の悪いところだけコードを読んでオーバーライドする。

影響範囲を全く調査せず、Gem絶対神話を唱える。あれなんなの?



いや、Rubyが便利なのは認めるよ。俺だってPLIとかCOBOLより書いてて楽しいよ。

インデント合わなくてコンパイルエラーとかないしな。

でもあまりにもRubyエンジニア糞すぎだろ。

エンジニアもどき量産言語だね。どれか1つでも当てはまった奴は小学校からやり直せ。

日本の将来が心配だわ。


追記

意見がたくさんもらえて喜ばしい。

文化の違いという意見もあったが、「よくわからないけどなんかうまくいく」コードだとデバッグも大変だし不具合も起きやすい。

それで納品するのはプロとしておかしい。

主語が大きい

「だいたい」とあるだろう。全てのだいたいだ。

フローチャート

ロジックを整理するツールとしては優秀。

精神論に聞こえるかもしれないが、フローチャート書いて育ったエンジニアは頭の中でロジックの組み立てと凡その演算回数が計算できるようになるよ。

カバレージが100%だったとしても実際の打鍵結果でエラーは弾ける

あー、ここは誤タイピングだわ。

自動テストカバレージ100%です、そして画面数回触ってリリースしますーっていう奴が多いってこった。

単体だけじゃなく画面使ったテストもケース表書いて網羅性を担保しないとダメだろ。

もちろん慣れて頭に入ってくれば勘所がわかるんだが、そんな属人的ものよりもケース表書くのが無難だろう。

Permalink |記事への反応(7) | 18:57

このエントリーをはてなブックマークに追加ツイートシェア

2015-06-17

6/16の日記

日記なのだから日記を書こうと思う。

■7:00 起床

 最近使い始めたアラームアプリは簡単な計算問題を解く必要がある。

 今日は27-13。

 最初は良かったけど、最近は寝ながらでも問題を解けそうなので、

 問題難易度を上げようと思う。

■7:05

 ベットに寝ながらネットサーフィンをする。

 昨日Newspickで書いたコメントいいねがついていた。

 やっぱりアイコンを女の写真にしておくと食いつきがいい。

■7:30 出社準備

 ベットから這い出て軽いストレッチの後シャワーを浴びる。

 またネットサーフィン

 未だにテスト駆動開発とか言ってるのを見つけて懐かしい気持ちになる。

 去年死んだでしょ?

■8:40家出

 自宅を出て駅へ。

 どういうことか、行くときに反対方向にすれ違ったおばちゃんと

 5分後ぐらいに別の交差点で会う。

 数年かけて最短コースを探索したつもりだったけど、

 まだ他に抜け道でもあるのか。

■08:57電車に乗る

 今日電車が遅れてきた。

 最近時間通りだと驚くぐらいだ。

 同じ車両に綺麗な女性を見つける。

 彼女に会えただけで今日家を出てよかったと思える。

■09:30会社最寄駅到着

 今日フレックス出社。

 09:15には出社する予定だったはずだけど気にしない。

 コンビニでお昼ご飯を買う。

 今日会計モバイルSuicaで払おうとしたら、

 言う前に店員がSuicaタンバイしてくれていた。

 有能。一緒にLINEIDも渡してくれたら完璧だった。

■09:45会社到着

 遅刻した気がするがいつものごとく何も言われない。

 この会社就職して良かったと思える瞬間。

 スマホロッカーに入れて、PCの電源を入れて一休みする。

 今日も一仕事終わった感。

10:00仕事開始

 くだらないメールを読んでくだらない電話に回答して

 ネットサーフィンする。

 近くにいる今年配属された新人ちょっかいを出す。

 相変わらず真面目で面白味のないやつだ。

 2ch二次裏ニコ動ネトゲはてな発言小町も知らないらしい。

 うむ、その生き方が正しい。

11:30 まだ仕事

 やっと雑用が終わってEclipseを立ち上げる。

 起動を待ってる間にネットサーフィン

 木村岳史の極言暴論コラム、今度は「中国にも抜かれるIT後進国ニッポン

 人月商売が引きずり込む奈落」らしい。

 この記事Facebookいいねランキング一位なんだけど…IT後進国だと実感するわ。

12:30 昼休み 

 朝コンビニで買ったごはんを食べる。

 今日は早く帰るだろうと思い、残業用に残しておいた菓子パンも食べる。

12:45

 「達人プログラマー」を読み返す。本に書いてあるようには上手くいかない。

 自分けがDRY原則割れ窓理論を守ってもしょうがないんや…

 昼寝。

■13:00 午後の仕事再開

 人から質問を受ける。

 「この社内業務用のサイトがやたら遅いんだけどなんで?」

 あーとりあえずF12押してからF5押してください。デバックできます

 …このサイト、ただプルダウン表示するだけでサーバと六千回通信してる…!?

■13:30

 摩訶不思議サイトの件はもっとPHPに詳しい人に投げる。 

 いつも思うけど、どうやったらあんなつくりにしようと思えるのか。

 IT後進国

 やっと自分コーディング作業を開始する。

 といっても朝だらだらしているうちにだいたい考えていたので、

 あとはタイプするだけ。

■14:00

 タイプに飽きてきた頃に別の人から質問を受ける。

 「去年君が作ったプログラム見てるんだけど、

  あれなんで実コード10行程度なのに10画面もあるの?」

 一時期私の中ですべてXMLに書くのが流行った時期があるからですよ。

■14:30

 本気で飽きたので業務と関係のない自動プログラムを作って遊ぶ。

 あとは上司にこのExcelを開かせれば楽しいパーティーの始まりだ!

 だいたいこういう調子に乗っているときはよくないことが起きる。

■15:10

 そして顧客から障害発生の連絡を受ける。

 幸い運用は止まっていないけど今まで見たことのない挙動をしてる。

■15:30

 障害の原因特定。現地の担当に連絡して対処してもらう。

 一段落したけど、担当から

 「今日は様子を見るので遅くまで残っておいて」とのこと。

 昼に菓子パン食べたの後悔。

■16:00~

 記憶がない。

 たぶん仕事ネットサーフィンしてた。

■21:00

 帰宅準備。

 帰り際に同じフロア女の子からしかけられる。

 「いつも椅子に浅く寝るみたい座ってますよね。

  落ちないかな、と思っちゃいます。」

 これはプログラマー伝統的なポーズなんだよ。

 古事記にもそう書いてある。

■21:30

 スマホを取り出すとこの前の日曜に遊んだ女子大生からLineが来てた。

 「ブラック企業って本当にあるんですか??」

 大学生らしい質問だと思う。

 企業ブラックホワイトで分けられないんだよ。

 

 他に一つ下のフロアで働いてる女性に送ったLine

 もう一週間未読放置されてる。徹底的すぎるでしょ。

 事務連絡っぽく送ったんだからせめて既読ぐらいつけてくれてもいいのに。

■22:00晩御飯

 スーパー惣菜を買って帰って食べる。

 スプラトゥーンの対戦実況動画にもそろそろ飽きてきた。

 ココア神拳動画はよ。

23:50

 この日記を書き始める

Permalink |記事への反応(0) | 00:33

このエントリーをはてなブックマークに追加ツイートシェア

2014-05-08

Google先生TDDテスト駆動開発)の評価を尋ねてみたよ

検索窓にふとtdd is って打って出た候補にワロタwwww

容赦なさすぎやろw

さらに、"tdd is a-z"の結果な。

tdd is a
tdd is awaste oftimeTDD時間無駄
tdd is b
tdd is bullshit(TDDはたわ言)/tdd is bad(TDDは悪い)
tdd is c
tdd is crap(TDDは糞)
tddid d
tddis deadTDDは死んだ)
tdd is h
tdd is hard(TDDは難しい)
tdd is n
tdd is not a silver bullet(TDD銀の弾丸ではない)
tdd is o
tdd is overrated(TDD過大評価されている)
tdd is p
tdd is pointless(TDD無意味
tdd is s
tdd is stupidTDDは愚か)/tdd is slow(TDDは遅い)/istddstill used(TDDはまだ使われているの)
tdd is u
tdd is useless(TDDは役に立たない)
tdd is w
tdd is awaste oftimeTDD時間無駄

肯定的な文句がまったく出てきませんでした。事実はともかくとして、このように思われているということでしょうね。啓蒙は難しそうですね。大変ですね。

こちらからは以上です。

Permalink |記事への反応(0) | 19:19

このエントリーをはてなブックマークに追加ツイートシェア

2014-04-20

SIerを辞めさせてくれなかったのでエロサイト作りました

結論から申し上げますエロサイト作成いたしました。

ゆーすけべーさんが以前に作ってたimeeroみたいな感じです。画像Blogスクレイピングしてエロ画像効率的に見るサイトです。

だらだらエロ画

なお、先程解約手続きを済ませたので4月末くらいに見れなくなりますエロサイト自体にあまり興味がなく、ローンチしたらやる気が無くなったのです。

主要な技術

生産性よりも憧れの昇華を重視しました。

テスト駆動開発がやりたく、DSLに強いロック魂を感じたRSpec

はやりに乗ってBootstrap

特にCapistrano名前キュートでやっていることがカッコイイのでどうしてもやりたい技術でした。

あと、メインとなるRailsこの記事に書いているスキルの中で唯一経験が無かったというのが一番の理由です。Rubyが好きなのもありますけどね。

辞めたい理由
会社を辞められない理由

いやぁ、退職しようとすると会議室で8時間説教されるって都市伝説じゃないんですね〜。

ところで転職活動をした感覚だと、今より給与が2倍出るところでも簡単に内定が出ることが分かりました。

転職活動やエロサイト作成を通して精神的な余裕も出ましたので、もう少しSIerのものの問題、仕事の進め方などを熟考した上で、本当に正しいSIerのあり方を考えたいと思います。無理そうなら逃げます

以上、よろしくお願いいたします。

Permalink |記事への反応(0) | 18:38

このエントリーをはてなブックマークに追加ツイートシェア

2014-02-25

初音ミクオンラインかるたゲーム「ミクミクかるた」を作ってみた

初音ミクオンラインかるたゲーム「ミクミクかるた」をリリースしました

http://mikumikuplay.com/karuta/

個人で開発して、開発期間は3週間くらいです。

■紹介動画URL

http://www.nicovideo.jp/watch/sm22964822

リリースしたものの過疎ってるので、増田宣伝をさせてくださいなと!

「ミクミクかるた」はブラウザで簡単に遊べるオンラインかるたゲームです。ゲームルールは簡単で、ボカロ曲が流れたら、歌詞の先頭文字の札をクリックするだけです。「みっくみ~くにし~てあげる♪」と流れたら「み」の札を取りますかるたの札の読み上げの代わりにボカロ曲が流れるというシステムです。オンライン対戦することも出来ますボカロ好きな人たちが集まって遊べる場になればと思っています

ゲームで使わせて頂いた曲はpiapro(ピアプロ)でお借りしました。改めて素晴らしい曲がたくさんあることを知り感動しました。このゲームによって素晴らしい曲が、より多くの人に聴かれることを願っています

実はこのゲーム開発者である私もボカロPをちょびっとやっています。私の場合、曲を作ってニコニコ動画にアップしても2日も経てば再生数の伸びが止まってしまます毎日すごい数の曲がアップされている為、すぐに埋もれてしまうのでしょう。私の曲は大したことがないのでいいのですが、中にはすごく良い曲でも再生数が少ないものが多々見られます。このゲームによって埋もれている隠れた名曲に、光を当てられたらと思っています

以前、「ミクミクすごろく」というオンラインすごろくゲーム(http://mikumikuplay.com/sugoroku/)を作り、ユーザーイラストと文章を作ることによってゲームコンテンツ拡張していくことが出来るCGG(Consumer Generated Game)の仕組みを作りました。CGGはブログなどでおなじみのCGM(Consumer Generated Media)のゲーム版に当たります

今回開発した「ミクミクかるた」では、開発作業をニコニコ生放送で配信していました。すると視聴者の方がゲーム機能デザインについてのアイデアコメントしてくれました。コメントしてくれたアイデアほとんどを採用しています。言わば、生放送駆動開発(Live Driven Development)と言えるのではないでしょうか?まぁ、これは悪乗りですが・・・

最近流行している開発手法としてテスト駆動開発(Test Driven Developement→略してTDD)というものがありますTDDをするとテストやすインターフェースモジュール設計が出来るようになりますが、この生放送駆動開発すると、ユーザーが望んでいる設計が出来るのではないかと思います。新たな開発手法発見することが出来ました。

■特徴一覧

ボカロ曲歌詞の先頭文字の札を取るかるたゲーム

ニコニコ動画等で埋もれてしまっている隠れた名曲に光を当てるシステム

Webブラウザのみ、ユーザー登録なしでプレイ可能

・開発作業を生放送で配信して視聴者から貰った意見を反映

HTML5Node.jsによりWebブラウザゲームにおけるリアルタイム処理を実現

ユーザー登録なしで簡単に遊べるのでぜひPlayしていただいて感想とかダメ出しとかしてくれると嬉しいです!よろしくです!

Permalink |記事への反応(0) | 22:04

このエントリーをはてなブックマークに追加ツイートシェア

次の25件>
ログインユーザー登録
ようこそ ゲスト さん
Copyright (C) 2001-2025 hatena. All Rights Reserved.

[8]ページ先頭

©2009-2025 Movatter.jp