「リファクタリング」を含む日記 RSS

はてなキーワード: リファクタリングとは

2024-07-21

テキストエディタってなんやろな?

いやぁ〜、テキストエディタ世界めっちゃディープでんねん!聞いてくださいよ〜。

まず、テキストエディタ心臓部、バッファ管理システムについてや。これ、単なるテキスト保持やないんですわ。例えば、Emacsガベージコレクション機構マーク&スイープ方式採用してて、バッファ内のLispオブジェクト効率的管理してんねん。これがあるから、長時間編集作業でもメモリリークせーへんのや。

次に、レンダリングエンジン。これが曲者でんねん。Unicode標準のUAX #9に準拠した双方向アルゴリズム実装せなアカン。さらに、合字処理のためにOpenTypeのGSUB/GPOSテーブル解析も必要や。Harfbuzzライブラリ使うんやけど、カスタムシェーピングエンジン組み込んで、特殊文字体系にも対応せなアカンのや。

構文解析エンジンも侮れまへんで。LR(1)パーサーじゃ複雑な言語構文に対応でけへんから、GLR(Generalized LR)パーサー実装するんや。これで曖昧文法も扱えるようになるんですわ。Treesitterライブラリ使うと、インクメンタル構文解析ができて、巨大ファイルでもリアルタイムハイライティングできるんや。

差分アルゴリズムも奥が深いんですわ。Myers差分アルゴリズムだけやなくて、Histogram差分アルゴリズム実装せなアカン。大規模リファクタリング差分表示に効くねん。さらに、セマンティック差分アルゴリズムも組み込んで、構造的な変更も検出できるようにするんや。

非同期処理システムめっちゃ重要や。単なるPromiseやasync/awaitやのうて、Reactive Extensionsベースストリーム処理実装するんや。これで、複雑なイベントシーケンスも扱えるようになるんですわ。さらに、アクターモデルベースの並行処理システム組み込んで、マルチコア活用した並列処理も可能にするんや。

最新トレンドめっちゃアツいんですわ。例えば、Language Server Protocolの拡張や。単なる静的解析やのうて、シンボリックAI使うた意味解析まで可能にしてるんや。これで、コード意図理解して、より高度なリファクタリング提案ができるようになるんですわ。

WebAssembly統合進化してるんや。Single Instruction, Multiple Data (SIMD)命令セットサポートで、テキスト処理のパフォーマンスが爆上がりしてんねん。さらに、WebAssembly System Interface (WASI)採用で、ファイルシステムアクセス可能になってるんや。

AI支援機能も侮れまへんで。単なる補完やのうて、プログラム合成(Program Synthesis)技術導入してるんや。部分的仕様から完全なコードを生成できるようになってんねん。さらに、説明生成AI組み込んで、生成されたコードの詳細な解説までしてくれるんですわ。

リアルタイムコラボレーション進化してるんや。Conflict-free Replicated Data Type (CRDT)のカスタム実装で、ネットワーク遅延があっても一貫性保てるようになってんねん。さらに、意図ベースの競合解決アルゴリズム導入して、複雑な編集操作の衝突も自動解決できるようになってるんや。

拡張アーキテクチャもすごいんですわ。WebAssemblyベースプラグインシステム採用して、言語依存せんプラグイン開発可能になってんねん。さらに、サンドボックス化されたランタイム環境提供して、セキュアなプラグイン実行も実現してるんや。

性能評価も厳しくなってるんですわ。起動時間は、コールドスタートだけやのうて、ホットスタートも測定せなアカン。メモリ使用量も、物理メモリだけやなくて、仮想メモリ使用状況も追跡するんや。CPU使用率は、マイクロアーキテクチャレベル最適化まで求められるようになってんねん。レンダリング性能は、GPUアクセラレーション効率評価せなアカンのや。応答性は、入力レイテンシだけやのうて、知覚的な応答性(Perceived Responsiveness)も測定するんですわ。

いや〜、テキストエディタ世界マジでディープすぎて、もう頭おかしなるで〜!こんな感じで、テキストエディタの最深部まで潜ってみましたけど、いかがでしたかテキストエディタ、侮れまへんで〜。ホンマに。

2024-06-27

anond:20240627112019

からそういうことを言ってるんだよ。

リファクタリングなんかさせんなバーカってプログラマ側が言ってるから、だったらプログラマ最初から全部やってくれって話をしている。

2024-06-25

Github Copilotとかのソースコード特化したAIってプロジェクト下のファイルも加味して新たなメソッドを作ったりリファクタリングしてくれるの?

たとえばAというファイル内で定義されたAAというクラスで新たなメソッドを追加したい。

新たなメソッドはBというファイルBBというクラスにあるBBBというメソッドを使う必要がある。

現在AA内ではBに関する依存関係はないのでnewしたり依存性の注入をする必要があるが

そこも含めてCopilotは生成したりはできるのだろうか?

まぁChatGPTやClaudeでもいいんだけど

2024-06-12

昨日謎のバグに悩まされてるって言ったけど

過去のイキったリファクタリングミスってた虚空にパケットが消えてたわ

サンキュー

2024-06-06

プログラム文章って似てるなと思った

プログラム文章自体は、いい加減に書こうと思えば結構なんとでもなる。

でも、良いものを書こうと思えば、いきなり書くのではなく構想をしっかり練る必要がある。

大事なのはデバッグ校正をすること。

そして必要ならリファクタリングリライトをする。

たったひとつの正解がないからこそ、何度も角度を変えて見返して、これがベストかと自問自答する。

そういう自省力がある人に向いているもので、パパッとやってパパッと終わらせるなんてノリではできない。

文字数だけでは量れない密度評価できないと駄目だよねこういう仕事は。

2024-04-26

システム移行のときになぜ現場のやり方を維持しようとしてしまうのか?(リファクタリング固執しすぎ問題)」

これ本気で分からない人がいるらしいですよ・・・

ビビり散らかしてハゲしまいそうですわ

端的に言えば、「やり方が変わったらミスが増えるし覚えるまでの仕事が遅くなるから」以外にないですよ。

新しいやり方になって大幅スピードアップならともかく、仕事スピード自体はおおむね一緒だけどやり方だけは変わるってパターン場合現場負担半端ない

現場死ぬ気でやれば解決するわけでもなく、人員一時的に増やした所で初心者ばかり集めては結局ミスが増える。

からコストをかけてでもリフクタリングを目指す。

リファクタリングの方が安く仕上がりると勘違いしてるから目指してるんだろうな」と思ってる人、ただのバカです。

発注側も一次請けも現場もみんな「いっそ根本から作り直したほうがシステム屋さん的には楽なんだろう」ってことは分かってる。

でも作り直してしまった場合に生じる現場の混乱とリファクタリングコストを天秤にかけて現場のやり方を変えないことを選んでるわけ。

そこが分かってないで「まーたアホな仕様システム更新しようとしたんでしょー。学習しないね―」みたいなこと言ってるのいい加減見飽きたよ。

人をバカだと思ってるお前らこそが本当のバカなんだってことをいい加減学んでクリー

2024-04-14

モダンフロントエンドなんか意味ない

タイトル釣りです

去年から稼働している現場で、以前からあったReact Nativeの面倒を見ているんだがまあこれがひどい出来なんだ。

jQuery時代に見かけたようなコードをやたら見かけたので思わず懐かしくなってしまった。

リファクタリングしようとしたけど直す範囲が広すぎてアプリを壊しかねなかったので、早々に諦めてだましだまし保守をしていた。

そんな中今年に入ってアプリリニューアルの話が出てきた。React Native捨ててSwift/KotlinやらFlutterに書き換えるとかそういうのではなく、デザイン刷新といくつかの機能改修。

このままだとアプリが更に魔窟化するので、マネージャーに色々相談したところいくつかの事実がわかった。

ということだった。

結局現状のまま進めるわけにはいかず、要件定義の傍らリファクタリング作業をしている。

そういう経緯もあったので、リファクタリングテスト工数も積んだ上で見積もりだしてもらってる。

レガシーアーキテクチャモダンアーキテクチャ刷新」なんてよく聞く話しだけど、

実態は「長年の増改築とだましだましのリフォーム限界になってきたので新築で建て替えます」何だと思う。

最近は「Vue.jsからRemixマイグレーション」なんて見かけるけど、悪いのはVue.jsじゃなくて禄に設計しないでコード書いてるエンジニアと、

リファクタリングには予算でないけどマイグレーションなら予算取れるという悪しき風習

年がら年中フロントエンド刷新しているような会社地雷なので行かないほうがいい。

いくらRemixやらNext.jsやら最新鋭のフレームワーク使ってても、クソコードで書いたらクソが出来上がるだけだ。

新しいフレームワークを試す暇があったらリーダブルコード最初から読み直せ。

2024-04-04

anond:20240404133919

利用者概念だけでもオブジェクト指向理解してないと、ノーコードはすぐ破綻するんよね^^;

しかも、ノーコードリファクタリングは物凄くやりづらいし。

ノーコード開発アンチパターンみたいなのが蓄積されて、普及していかないと、いろいろ厳しいでしょう。

2024-03-23

anond:20240323013829

お前はリファクタリングをした思っているかもしれないが、本当の本当に機能を変更していないと言い切れるのか?

はい、と答えれば現場経験が不足していると叱ろう。

いいえ、と答えればなぜコードを触ったと叱ろう。

2024-03-11

anond:20240311175503

真似て学ぶぐらい憧れを感じる

述べてません。アナタの頭の中の声です。治療法が確立されてます

洗練というリファクタリング極まると最終的に哲学書のような文章になる

そういう見方もあるとは思う。

しかし、リファクタリングかな?コンテキストの深い専門用語を行き当たりばったりで作って無闇に初学者への戸口を狭くする怠惰だと思ったけど。

2024-03-02

anond:20170626005657

この程度のレベルの爺さんが職責を全うできたってことは、そのクソコードリファクタリングした後は天国やん。

好き勝手出来るで。

ワイが昔いた大企業情シスだけで1,000人くらいいたか全然社内SE感なかったわ。

2024-02-26

[] 最小の労力で実施する

コード修正する、システムに変更点を追加する、など色々なことを開発者実施している。

ここで重要なのは、最も少ない労力で実施する方法を探すことだ。

例えばコード修正する場合、100行を追加するよりも、1行だけ追加して実現できないかを探る。

あるいはシステムについても、専用のコード作成するよりも前に、*nix系コマンドの組み合わせでできないかを探る。

最小の労力で実施するために、すこし時間をかけて考えた方が良い。

「最小労力」という基準採用すると、保守性を上げることができる。

これを意識すれば、頻繁にリファクタリング実施せずに済む。

2024-02-25

[] 全部を書き直す必要はない

コードエントロピー機能追加によって増大する傾向にある。

「この関数にこういうパラメータを使ったこういう処理を追加してくれ」などと言われたら、コードは複雑化するのは当然だろう。

かといってこういう要求が来た時に、コード全体を一から作り直して簡潔にしようと思うのはナンセンスだ。

コードの量にもよるが、一定程度の量のコードがそこにあるときは、やはりリファクタリングの方が効率よく進められる。

「僕はリファクタリングなんてしませぇん、一から書いた方がいいでぇす」というのは、特定現場・状況だけにあてはまるものだと認識しておこう。

かにコード全体をリファクタリング」なんてしようと思ったら大変すぎるが、通常は「修正担当する部分をついでにリファクタリングする」でOKだ。

ユニットテストさえかけていれば、そのリファクタリングによって、バグが見つかりやすくなるだろうし、保守性も上がるのである

なお、本当にコードベースが酷いカオス状態で、ゴッドオブジェクトを使っているような状況になったら、「書き直す」という利点が少しはあるかもしれないが、そういう場合関係各位に同意を取らなければやってはいけない。

そういったカオスな状況でさえ、平均的なプログラマーは「良いコード」よりも「慣れているコード」に愛着を持つ傾向にある。

もしあなたが「コードを綺麗にするためにすべてを一から書き直そう」と、無断でそのようなことをやったら、彼らが慣れていないという理由批判の嵐が殺到するだろう。

もう一度言うが、最善の方法修正担当部分だけをついでにリファクタリングすることだ。これだけにとどめておけ。

2024-01-19

SESリファクタリングやり始めてるとこあるのか・・・

ヤバすぎワロタ

完全に人間を木や石とか、人形・道具として見てる思想

共産主義にも通じるな・・・

やっぱトップはあっちの国の人が多いのだろうかね

2024-01-06

プログラマーの三代美徳本能」「感情」「混乱」

プログラマーの三代美徳は、怠惰でもなければ傲慢でもない。本能感情、混乱である

 

本能とは、モチベーション本質的部分であるエロいdeepfakeを作りたい、頭よく見られたい、金儲けしたいといった動機によってプログラマーは手を動かす。

本能がなければドーパミン存在しない。コードを書く誘因は本能衝動によって生み出されている。

 

感情とは、要するに好き嫌いのことだ。たくさんの経験を積み重ねてセンスを獲得するには、好き嫌いに敏感でなければならない。

なぜvscodeがクソで、emacsが素晴らしいのか。なぜマイクロサービスアーキテクチャに強い疑念があるのか。なぜベンダーロックインが金の浪費に繋がるのか。

そういったことは、経験から学び、そして感情という次元に落とし込まれる。感情は少数の次元美的感覚を得るための優れたセンサーである

 

混乱とは、人生である。混乱したことのないものエントロピーを操ることはできない。

コードは常にエントロピー増大の法則に晒されている。高エントロピーの乱雑的コードを読んで混乱したことがなければ、リファクタリングもできないだろう。

混乱したことのあるものけが、秩序を作り出すことができる。

2023-12-14

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

1. UNIXという考え方 Mike

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

3. テスト駆動開発 Kent

4. 達人プログラマー Andy

5. リファクタリング Martin

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

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

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

9. Design It!

10. 少年メイドクーロ君

2023-12-10

技術負債を返済すること

コードを書いていて、2つの選択肢に襲われる。

一つは少し時間をかけて整理された読みやすコードを書くこと。

もう一つはすぐに仕事を終わらせるためにそれっぽいコードで終わらせること。

後者を選ぶと、どんどんと技術負債のしかかっていく。

開発のイテレーションの中では、過去コードリファクタリングする時間など無いことが多い。

から今、少し時間をかけるべきことが多い。

このような技術負債意図的負債と言われる。

意図しない負債というのは、きれいコードを書くようにしていても、問題領域のものが難しくて整理するのが難しくなってくることだ。この場合は、設計の方に重点を置くのが良い。

2023-12-09

anond:20231209145500

誰にも相談せずに

リファクタリングしろという命令があったんだよ

命令した上司リファクタリングして良くなったと言ったが、他のコーダー意図を分かってなかったみたい

最短時間理解可能コードとは

コードを書く上で重要なことは?という質問に対して、アスペならば「実行できること」と答えるだろう。

当たり前なことしか言っていない。「実行できること」という文からは全く有益な知見を得られない。

実行できることは重要性ではなく、必要性である重要性とは、必要なことをすべてやった上でなおやる価値のあることを意味する。

そう考えた時に私がよく思うのは「最短時間理解可能であることが重要であると思うわけである

しかしここに宗教がある。そもそも人間物事理解するプロセスは人それぞれである

私は一度、関数モジュールで適切に分離するためのリファクタリングというものを行ったことがある。

というのも、一つの関数に万を超える行が書かれていたため、上司リファクタリング命令したためである

具体的詳細はprivateメソッドに、公開する必要のあるものはpublicメソッドに移した。

そして当初働いていた職場での反応はどうだったかというと、「スパゲッティコード」だというのだ。

スパゲッティコード?一つの関数に万を超える行があるほうがスパゲッティだと普通は思うだろう。

ところが、彼らの脳内では、「常にコードの詳細が見えていなければ気がすまない」という、カプセル化無視する思想で動いていたため、関数化すると関数の最下層まで辿らないと気がすまないらしかったのである

このようにして、教育の無い人間コードの読み方もカプセル化も知らないので、非生産的方法が最短の方法になってしまうのである

コードを最短で理解するためにはどうするのか。基礎知識教育された集団の中に身を置くのがまず先決である

例えばcalc_monthly_salary_yen(Person p)という行が存在した時、いちいちcalc_monthly_salary_yenの中身を常に見に行くような人たちはダメだ。

人間データ入力すれば円単位で月の給料計算してくれるんだろう」とざっくりと自然言語的に読み進められる人たちでなければ「最短理解」は難しい。

まり最短理解するためのコードを書いた時に、それが本当に最短理解されるためには事前の教養必要なのである

教養のないところに生産性はない。悪いことは言わない。ゴッドオブジェクト管理するような会社からは逃げ出せ。

2023-12-08

Tracer Bullet Development

開発手法でしっくり来てるのがAndy HuntさんのTracer Bullet Developmentで、開発の方向性を示すのに試作を作る方法

1. 主要なシステム オブジェクト定義UIサーバーロジックビットデータベース抽象化レイヤー等。

2. システム オブジェクトを介したデータ フロー定義

3. データフローを実現するために API とその戻り値コーディング

4. 単体テスト使用して API の予想される使用法を文書化。

5. 各 API必要な量の既定のデータ (別名、ダミー データ、偽のデータハードコーディングされたデータ) を追加して、API が「実行」されるようにする。

6. あらかじめ用意されたデータを実際の機能に段階的に置き換える。

7. コードリファクタリングし、システム オブジェクトを調整し、完了するまでこれを続ける。

実用上最小限の実装というプラクティスにも似ているが、ステークホルダーに動くサンプルを素早く見せられるのがポイント

2023-12-03

ドキュメントを整備しないまま会社やめてすみませんでした

リファクタリング不十分なまま会社やめてすみませんでした

ドキュメントを整備しないまま会社やめてすみませんでした

リファクタリング不十分なまま会社やめてすみませんでした

ドキュメントを整備しないまま会社やめてすみませんでした

リファクタリング不十分なまま会社やめてすみませんでした

ログイン ユーザー登録
ようこそ ゲスト さん