アカウント名:
パスワード:
エディタはviのみその他は認められない
マジヤメt
頑としてIDEに移らず:・「面倒だ」とユニットテストも殆ど書いてくれず、たまに書いても実行しないままコミット&リリースする。・リファクタリングもできないので、やたら抽象度を上げて過剰な柔軟性を作りこむ。
…という頑固一徹なvi使いが残したスーパー・バギーなプログラム30万行(ドキュメントは独自用語満載で仕様もよくわからない)を来年からリライトする羽目になりそうなんだからッ!
…もちろんviは単なるテキスト・エディタであって、それ自身が悪いわけじゃなく、適したツールと今時のテクノロジをちゃんと利用しないそいつが悪いってのはわかる。
IDE をまともに使ったことが無いのでぜひ教えて下さい。
> ユニット・テスト書く手間と本体コードを書く手間が正味ダブって面倒な上に、
IDE 使うとユニットテストと本体コードを書く手間がダブらないの?
> エディタと別にコマンド打って一々テスト実行しないといけないわけで
コードを書いたり、変更したりする度に IDE が自動でコードをテストして結果を評価してくれるのかな?
> リファクタリングできないので後からクラスの構造や継承関係を変更するのが面倒だからつい作りこみすぎる。
IDE を使わないとリファクタリングできない、っていうが良くわからないんだけど、IDE が勝手にコード最適化をしてくれる、ってこと?
ううむ、そんなに便利なら IDE 勉強してみようかな。# 職業プログラマじゃないけど C++ のコードを読まなくちゃならんのよ~
まず最初にIDEは銀の弾丸ではもちろんないのでなんでも自動でやってくれるわけではないです。各種の細々とした手間を削減して、実際にはちゃんと計測しないとわからないけれど、体感0.7倍くらいにはしてくれる感じ。コンテストの切り替えが減って作業の流れがスムーズになると思考の中断が減ります。
* テストを書く手間とIDEテストをちょっとしたユースケース代わりに書いておいてコンプリーション(補完)を使うと型宣言、定型コメント、import文等の決まり文句/おまじない部分を書く手間ガッツリ減ります。メソッドの中身を書く必要はあるから完全に半分とは言わないけれど、大したことない内容のメソッドって結構数あるので意外と効果は大きいです。極端な例だけどgetter/setterの類や等値演算のメソッドなら多くの場合本体より型宣言とかの決まり文句部分の方が多いわけだし。
* テストの実行とIDE保存した時の自動ビルド&テストはやって欲しくない時もあるから、私はそういう設定は外すけど、テスト実行のボタン一発でビルドはしてくれますね。別の端末開けておいて、あるいは一旦終了・中断して別途makeとかする必要はありませんし、IDEがある程度ファイルをロックするのでうっかり参照中のファイルを書き換えるミスも減ります。ユニットテスト・フレームワークとIDEが連携しているとテスト結果とテストのメソッドはワンクリックで移動できるし、そのままデバッガでテストをデバッグできる。#あと意外とユニットテストの進捗バーは癖になるw
* リファクタリングとIDEリファクタリングは手作業や汎用の置換とかでやるとミスもあるのでリファクタリングのありがたみががっつり減る。IDEから独立したツールもあるかもしれないけど改名やメソッドや変数の括りだしとかコード書いてる途中で思い立つことが多いわけでエディタと一体化しててくれた方が思考は途切れない。
#IDE…あとは翻訳と辞書を統合してくれると英語の識別子を考えたり英文コメント書いたりするのにいいのだがw#最近TeXもIDE上で書いてたりするから英語論文書くにもよさそうだ…。
>コンプリーション(補完)を使うと型宣言、定型コメント、import文等の決まり文句/おまじない部分を書く手間ガッツリ減ります。
逆に言うと、テストを作る手間のうち、一番簡単なひな形を各部分がチョット減るだけです。
>リファクタリングは手作業や汎用の置換とかでやるとミスもあるので>リファクタリングのありがたみががっつり減る。要するにJava用のEclipseやNetBeansあたりに限定の話でしょ?Javaは静的な型付けが強力だから、初歩的なリファクタリングが自動的にできるだけ。IDE一般の話ではない。
変数名がi,i1,tp,tp1,tp2,ni,ntpみたいな意味不明な時に、変数名を変更しながら読む時は、この機能はむっちゃ便利。
しかしその問題はviでもIDEを使わないからでも言語の種類でもなく、プログラマーのスキルが低いだけです。
>># 職業プログラマじゃないけど C++ のコードを読まなくちゃならんのよ~C++とかその他大半の言語では、言語仕様的にそんなことはできません。
Javaしか知らない人だと、その辺を知らないんですよね~。
そのちょっとの手間を惜しんで必要なことをしなかったり、ちょっとしたスキルの差でマズい設計をするのが問題なのでそういうことがちょっと減ったことでやってくれるようになるなら万々歳w
モラルもスキルも満点の開発者を数揃えられるようなら最初から何の問題もないわけで、現実はそうはいかない。そこらが多少欠けていてもツールが支援してくれて多少なりとも埋められるなら喜んで採用するね。
#ウチの場合だと研究所だから応用分野の知識と数学の基礎知識くらいは期待できても、#プログラミングとソフトウェア開発の知識・スキルは多くを期待できない
まぁプログラマに技能と十分な能力があればなんでもOK的な極論が通るならアセンブリ言語(可搬性ならVM)で書けばいいわけでIDEどころかプログラミング言語だっていらないって話にw
昔は私も「ひな形」バカにしてたけど中々どうして結構違う。補助的な小さなメソッド/関数を沢山書くスタイルだとコードのロジックに対して決まり文句(コメントや型宣言やインポート)の量も馬鹿にならない。元コメでは決まり文句の方が長くなることが多い例としてsetter/getterや等値演算を上げたけども。
決まり文句の冗長性は検証や人間が読むときに役立つので、書かない言語がいいとばかりは言えないし。
そもそも静的な型付けがない言語であんまり大きなものを書く気にはならないなぁ。#型推論にしたって陽に書く量が少ないだけで静的に型付けはするしなぁ…。
ライブラリ設計するときに値の集合とその上での演算、他の型との対応関係考えるからどうせ型の構造は考えるわけだし、読むときにもそう考えながら読みたいし…。もちろん動的に決定される部分があってもいいけど、静的にある程度は限定されててくれないと却って面倒…。
ちなみにクダンの彼は動的型付けと動的ロードとデータを文字列にコードするのが大好きで静的に型が決定できるところ、データ型を作った方がよいところで過剰にその技法が取り入れられており、彼のコードの読みにくさはそこに起因する分もある。
彼が元々はライトウェイト系というかスクリプト系の言語(Rubyだった)で文字列の置換処理でC言語のフロントエンド・プロセッサを書くところから仕事を始めたことを考えればこの性向もわからなくはない所はある。#私も17年くらい前にFORTRANのソースを処理をして#C++から呼び出すためのヘッダファイルを生成するプログラムを#sedとシェルスクリプトでお手軽に書いた経験はあるわけで…。
ただまぁ開発対象が置換で片がつくプリプロセッサ的なものから本格的なコンパイラの最適化モジュールへと変化し、規模も大きくなったところで諦めて移行してくれればよかったのだが、そういう考え方の変更が必要になった経験が恐らくそれまでの彼のキャリアにはなかったのだろうと思う。#こっちはこっちでもう少し彼がプログラミングとソフトウェアについて「わかってる」ものだと思っていたしね。#そのあたりは、そのチームに来たのは私の方が3年も後だったってのもあるし、彼が基本的に自信たっぷりキャラだったってのもある。
>IDE を使わないとリファクタリングできない、っていうが良くわからないんだけど、IDE が勝手にコード最適化をしてくれる、ってこと?JavaとEclipseの話限定で考えて欲しいけど、たとえば「 i,t,p,aみたいな一文字の変数名がメソッド内で大量に使われていて、読みにくいし 検索もしにくいので、意味のある xxxStartTime などに変更したい。」みたいな場合は、Eclipseが一発変換してくれます。(もちろん変数名は自分で入力ですよ。)
たまたま"t"という文字/文字列が他で使われてなければエディタ等の置換でもできますが、そうでない場合はほとんど手作業ですし、間違いの発生する確率も高くなります。
># 職業プログラマじゃないけど C++ のコードを読まなくちゃならんのよ~ですがこれはCやC++では、まず不可能です。
ポインタとか(void *)への型キャストが入ると、自動解析なんて無理でしょ。
>コードを書いたり、変更したりする度に IDE が自動でコードをテストして結果を評価してくれるのかな?変更/セーブする度にテストを実行されると、さすがにウザイような。。。Eclipseあたりだと書き換え途中でもコンパイルエラーを出してくれるけど、これでさえも鬱陶しいと感じることはあります。#IMEでも「。」や「、」を打つたびに自動変換してくれる機能があったりするけど、#自分の思ったとおりのタイミングで変換できないのでかえって不便。ある意味でそんな感じ。
普通は一定間隔で手動実行でしょうね。だったらコマンドで実行しても大差ない。そもそもjunitもcppunitも、本来はコマンドラインから使うツールでしょ?
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
「科学者は100%安全だと保証できないものは動かしてはならない」、科学者「えっ」、プログラマ「えっ」
重要条件 (スコア:2, すばらしい洞察)
エディタはviのみ
その他は認められない
もしや、あいつが闇プログラマだったのか? (スコア:1)
エディタはviのみ
その他は認められない
マジヤメt
頑としてIDEに移らず:
・「面倒だ」とユニットテストも殆ど書いてくれず、たまに書いても実行しないままコミット&リリースする。
・リファクタリングもできないので、やたら抽象度を上げて過剰な柔軟性を作りこむ。
…という頑固一徹なvi使いが残したスーパー・バギーなプログラム30万行
(ドキュメントは独自用語満載で仕様もよくわからない)を
来年からリライトする羽目になりそうなんだからッ!
…もちろんviは単なるテキスト・エディタであって、それ自身が悪いわけじゃなく、
適したツールと今時のテクノロジをちゃんと利用しないそいつが悪いってのはわかる。
Re:もしや、あいつが闇プログラマだったのか? (スコア:1)
IDE をまともに使ったことが無いのでぜひ教えて下さい。
> ユニット・テスト書く手間と本体コードを書く手間が正味ダブって面倒な上に、
IDE 使うとユニットテストと本体コードを書く手間がダブらないの?
> エディタと別にコマンド打って一々テスト実行しないといけないわけで
コードを書いたり、変更したりする度に IDE が自動でコードをテストして結果を評価してくれるのかな?
> リファクタリングできないので後からクラスの構造や継承関係を変更するのが面倒だからつい作りこみすぎる。
IDE を使わないとリファクタリングできない、っていうが良くわからないんだけど、IDE が勝手にコード最適化をしてくれる、ってこと?
ううむ、そんなに便利なら IDE 勉強してみようかな。
# 職業プログラマじゃないけど C++ のコードを読まなくちゃならんのよ~
IDE (スコア:1)
まず最初にIDEは銀の弾丸ではもちろんないのでなんでも自動でやってくれるわけではないです。
各種の細々とした手間を削減して、実際にはちゃんと計測しないとわからないけれど、
体感0.7倍くらいにはしてくれる感じ。
コンテストの切り替えが減って作業の流れがスムーズになると思考の中断が減ります。
* テストを書く手間とIDE
テストをちょっとしたユースケース代わりに書いておいて
コンプリーション(補完)を使うと型宣言、定型コメント、import文等の決まり文句/おまじない部分を書く手間ガッツリ減ります。
メソッドの中身を書く必要はあるから完全に半分とは言わないけれど、
大したことない内容のメソッドって結構数あるので意外と効果は大きいです。
極端な例だけどgetter/setterの類や等値演算のメソッドなら多くの場合本体より型宣言とかの決まり文句部分の方が多いわけだし。
* テストの実行とIDE
保存した時の自動ビルド&テストはやって欲しくない時もあるから、私はそういう設定は外すけど、
テスト実行のボタン一発でビルドはしてくれますね。
別の端末開けておいて、あるいは一旦終了・中断して別途makeとかする必要はありませんし、
IDEがある程度ファイルをロックするのでうっかり参照中のファイルを書き換えるミスも減ります。
ユニットテスト・フレームワークとIDEが連携しているとテスト結果とテストのメソッドはワンクリックで移動できるし、
そのままデバッガでテストをデバッグできる。
#あと意外とユニットテストの進捗バーは癖になるw
* リファクタリングとIDE
リファクタリングは手作業や汎用の置換とかでやるとミスもあるので
リファクタリングのありがたみががっつり減る。
IDEから独立したツールもあるかもしれないけど
改名やメソッドや変数の括りだしとかコード書いてる途中で思い立つことが多いわけで
エディタと一体化しててくれた方が思考は途切れない。
#IDE…あとは翻訳と辞書を統合してくれると英語の識別子を考えたり英文コメント書いたりするのにいいのだがw
#最近TeXもIDE上で書いてたりするから英語論文書くにもよさそうだ…。
Re:IDE (スコア:2, 興味深い)
>コンプリーション(補完)を使うと型宣言、定型コメント、import文等の決まり文句/おまじない部分を書く手間ガッツリ減ります。
逆に言うと、テストを作る手間のうち、一番簡単なひな形を各部分が
チョット減るだけです。
>リファクタリングは手作業や汎用の置換とかでやるとミスもあるので
>リファクタリングのありがたみががっつり減る。
要するにJava用のEclipseやNetBeansあたりに限定の話でしょ?
Javaは静的な型付けが強力だから、初歩的なリファクタリングが
自動的にできるだけ。IDE一般の話ではない。
変数名がi,i1,tp,tp1,tp2,ni,ntpみたいな意味不明な時に、変数名を
変更しながら読む時は、この機能はむっちゃ便利。
しかしその問題はviでもIDEを使わないからでも言語の種類でもなく、
プログラマーのスキルが低いだけです。
>># 職業プログラマじゃないけど C++ のコードを読まなくちゃならんのよ~
C++とかその他大半の言語では、言語仕様的にそんなことはできません。
Javaしか知らない人だと、その辺を知らないんですよね~。
Re:IDE (スコア:1)
そのちょっとの手間を惜しんで必要なことをしなかったり、
ちょっとしたスキルの差でマズい設計をするのが問題なので
そういうことがちょっと減ったことでやってくれるようになるなら万々歳w
モラルもスキルも満点の開発者を数揃えられるようなら最初から何の問題もないわけで、現実はそうはいかない。
そこらが多少欠けていてもツールが支援してくれて多少なりとも埋められるなら喜んで採用するね。
#ウチの場合だと研究所だから応用分野の知識と数学の基礎知識くらいは期待できても、
#プログラミングとソフトウェア開発の知識・スキルは多くを期待できない
まぁプログラマに技能と十分な能力があればなんでもOK的な極論が通るなら
アセンブリ言語(可搬性ならVM)で書けばいいわけでIDEどころかプログラミング言語だっていらないって話にw
ひな形 (スコア:1)
昔は私も「ひな形」バカにしてたけど中々どうして結構違う。
補助的な小さなメソッド/関数を沢山書くスタイルだとコードのロジックに対して
決まり文句(コメントや型宣言やインポート)の量も馬鹿にならない。
元コメでは決まり文句の方が長くなることが多い例としてsetter/getterや等値演算を上げたけども。
決まり文句の冗長性は検証や人間が読むときに役立つので、書かない言語がいいとばかりは言えないし。
静的な型付け (スコア:1)
そもそも静的な型付けがない言語であんまり大きなものを書く気にはならないなぁ。
#型推論にしたって陽に書く量が少ないだけで静的に型付けはするしなぁ…。
ライブラリ設計するときに値の集合とその上での演算、他の型との対応関係考えるからどうせ型の構造は考えるわけだし、
読むときにもそう考えながら読みたいし…。
もちろん動的に決定される部分があってもいいけど、静的にある程度は限定されててくれないと却って面倒…。
Re:静的な型付け (スコア:1)
ちなみにクダンの彼は動的型付けと動的ロードとデータを文字列にコードするのが大好きで
静的に型が決定できるところ、データ型を作った方がよいところで過剰にその技法が取り入れられており、
彼のコードの読みにくさはそこに起因する分もある。
彼が元々はライトウェイト系というかスクリプト系の言語(Rubyだった)で
文字列の置換処理でC言語のフロントエンド・プロセッサを書くところから仕事を始めたことを考えれば
この性向もわからなくはない所はある。
#私も17年くらい前にFORTRANのソースを処理をして
#C++から呼び出すためのヘッダファイルを生成するプログラムを
#sedとシェルスクリプトでお手軽に書いた経験はあるわけで…。
ただまぁ開発対象が置換で片がつくプリプロセッサ的なものから本格的なコンパイラの最適化モジュールへと変化し、
規模も大きくなったところで諦めて移行してくれればよかったのだが、
そういう考え方の変更が必要になった経験が恐らくそれまでの彼のキャリアにはなかったのだろうと思う。
#こっちはこっちでもう少し彼がプログラミングとソフトウェアについて「わかってる」ものだと思っていたしね。
#そのあたりは、そのチームに来たのは私の方が3年も後だったってのもあるし、彼が基本的に自信たっぷりキャラだったってのもある。
Re: (スコア:0)
素のviはともかくvimならコーディングのサポートは結構やってくれるし。
#「ユニットテストを書くけど実行しない、さらにそれをコミット」なんてのはネタと信じたい。
Re: (スコア:0)
Re:もしや、あいつが闇プログラマだったのか? (スコア:1)
>IDE を使わないとリファクタリングできない、っていうが良くわからないんだけど、IDE が勝手にコード最適化をしてくれる、ってこと?
JavaとEclipseの話限定で考えて欲しいけど、たとえば
「 i,t,p,aみたいな一文字の変数名がメソッド内で大量に使われていて、読みにくいし
検索もしにくいので、意味のある xxxStartTime などに変更したい。」
みたいな場合は、Eclipseが一発変換してくれます。(もちろん変数名は自分で入力ですよ。)
たまたま"t"という文字/文字列が他で使われてなければエディタ等の置換でもできますが、
そうでない場合はほとんど手作業ですし、間違いの発生する確率も高くなります。
># 職業プログラマじゃないけど C++ のコードを読まなくちゃならんのよ~
ですがこれはCやC++では、まず不可能です。
ポインタとか(void *)への型キャストが入ると、自動解析なんて無理でしょ。
>コードを書いたり、変更したりする度に IDE が自動でコードをテストして結果を評価してくれるのかな?
変更/セーブする度にテストを実行されると、さすがにウザイような。。。
Eclipseあたりだと書き換え途中でもコンパイルエラーを出してくれるけど、
これでさえも鬱陶しいと感じることはあります。
#IMEでも「。」や「、」を打つたびに自動変換してくれる機能があったりするけど、
#自分の思ったとおりのタイミングで変換できないのでかえって不便。ある意味でそんな感じ。
普通は一定間隔で手動実行でしょうね。だったらコマンドで実行しても大差ない。
そもそもjunitもcppunitも、本来はコマンドラインから使うツールでしょ?