人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

有能なプログラマが嗜んでいる言語・技法・テクニックとは何ですか?

この場合の、"有能なプログラマ"の定義については以下のURLをご覧ください。
http://d.hatena.ne.jp/fromdusktildawn/20070217/1171679191

すなわち、「つまらない仕事の生産性」をあげるための手法を質問しているのだと思っていただいて結構です。


注意:上記のような「つまらない仕事の生産性」を上げるためには、もちろん心構えや生まれ持ったものも大きいでしょう。

それを答えていただいてもかまいませんが
どちらかというと、技術的な面を聞きたいです。
プログラマを大工に例えるならば
一流の棟梁の道具箱に何が入っているのかを
聞いているのです。

●質問者: harisen
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:URL まら プログラマ 大工 定義
○ 状態 :終了
└ 回答数 : 12/12件

▽最新の回答へ

1 ● ハト
●15ポイント

人それぞれだと思います。一流の棟梁の工具箱中身を知ることが一流の技術を盗むことにはつながりません。

ただ、多く使われる、使っているというのを聞くのはAutoHotKey等の作業の自動化ツールや、正規表現等のテキスト操作の高速化です。

AutoHotKeyなんかはGUIツールで勝手にクリックさせておくなんてのもありますし、正規表現で特定の条件をみたすものをすべて置換させるといった手法もよく見ます。

ツールに関してはエディタ等はそれこそいろいろありますし、お好みだと思いますが、簡単な作業を済ませる程度(特定のプログラムを一度に実行するアプリ)であれば、自分で簡単なCUIなりGUIのアプリケーションを作ってしまうほうが早いという方もいらっしゃると思います。

大事なのは『何を使うか』ではなく『どう使うか』だと私は思っています。

◎質問者からの返答

回答ありがとうございます。

おっしゃる通り、一流の棟梁の道具箱の中身を全て買いそろえたところで、

一流の棟梁になれるはずなんてありません。



実際には、様々な努力や心がけ(ex. これ自動化できないかな? とめんどくさがるようにする)などは必要でしょう。



ただ、一流の棟梁の技を盗むには、最低限その人の持ってる道具を持ってないと、棟梁の技の練習もできないのではないかと思い、聞いてみました。



さて、id:rosylillyさんの回答をまとめますと

ということでしょうか。

確かに、正規表現は分かってないと技術系の雑談掲示板すら読めませんからね。重要そうです。


2 ● garyo
●300ポイント

>「つまらない仕事の生産性」をあげるための手法

基本ですが、

1.車輪を発明しない

2.めんどくさがること

だと思います。

1.については、何かコードがいるときに既に誰かが作っていないか探すことが必要になります。

例えば以下のサイトなどを使って探すといいでしょう。

http://www.codefetch.com/

http://www.codase.com/

http://www.krugle.com/

http://www.koders.com/

後、ring serverとか

http://ring.maffin.ad.jp/

sorce forgeもいいと思います。

http://sourceforge.jp/

何か「こんなツールが欲しい」と思ったときはフリーソフトの検索サイトで探して、もし無ければ自分で作って公開するのもいいかも知れません。

2.のめんどくさがることは、とにかく定型作業を嫌がることです。

頭を使わなくても出来る仕事はLL(Lightweight Language)などでどんどん自動化してしまいましょう。

個人的にRubyが好きなので紹介しておきます。スクリプト言語でエディタで書くだけて使えて文字列操作が得意でCGIでも良く使われます。生産性はJavaの10倍くらいと言われています。

http://d.hatena.ne.jp/epictetus86400/20060101

http://www.ruby-lang.org/ja/

http://jp.rubyist.net/magazine/?0002-FirstProgramming

Ruby以外でも何でもいいのですが、手軽に使いこなせるLL言語を一つ覚えておくといいと思います。

◎質問者からの返答

回答ありがとうございます。

なかなか、具体的でよくわかります。



結構まとってるのですが、いちおうid:garyoさんの回答をまとめると、

という事でしょうか。


上記のサイトは、あとで度々使ってみます。

ありがとうございます。


しかし2番目の件は(別に職業プログラマでないとはいえ)恥ずかしながらLLを一つも使えないので、耳が痛いです。


あと、これは私が今思った事ですが、

やっぱ英語は大切ですねえ。


3 ● hamster009
●0ポイント

http://wiki.sycrc.org/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83...

◎質問者からの返答

404 Not Found

と書かれているように見えます。


4 ● d金魚
●100ポイント

有能なプログラマが嗜んでいる言語・技法・テクニックとは何ですか?

とありますが、主観的ながら

嗜んでいる言語:アセンブリ、C/C++/D言語、スクリプト言語(Perl,Ruby,Python等)関数型言語(Lisp、Haskell、Concurrent Clean等)、.NET系言語(C# J# VB?)、JavaやLuaあたりだと感じました。

技法やテクニック等はあまりぱっと思いつかないのですが・・・

google:正規表現置換google:ワンライナー

google:オブジェクト指向google:アスペクト指向google:オートマトンなどでしょうか?


有能なプログラマ"の定義から

とありましたが

私もこの有能なプログラマの条件についてうなずける部分が多々ありました。

プログラムを書くためのプログラムを書くという部分に共感しました。

私はまだ本格的にプログラムを組んだ事のない学生なので生産性に関して誤解している面もあるかもしれませんが、私が今までより成果物の開発速度を上げるためにしている事からこの記事の指す生産性に結びつきそうな事を書きたいと思います。


最も適切なライブラリやAPIを鋭く見抜き、もっともパフォーマンスと安全性と保守性のバランスのとれたシンプルで美しいプログラミングをします。

からあるようにライブラリやAPIの概要を認知している事が必要だと思います。

それには事前の情報収集が不可欠で常に新しい技術やソリューションに関してある程度の概要を頭に入れる作業などが必要だと思います。

私は頭に入れる作業が苦手なので調べた資料は保存しています。

その資料を探すためのソフトウェアを入れています。

http://d.hatena.ne.jp/studiokingyo/20061116#p2

http://d.hatena.ne.jp/studiokingyo/20061211#p1

また、技術やライブラリに関する用語(例:Ajaxやboost等)の簡単な概要を書いたメモもしています。


時間が許す限り興味を持ったツールやライブラリは実際にTutorialを見たりSampleプログラムを実行したりして動作を確認しています。

そのときにあわせてソースコードの構造やライブラリの構成もチェックしたりしています。

これによって

「最も適切なライブラリやAPIを鋭く見抜き」

という部分の予習をしています。


そもそも、プログラム自体を編集するスクリプトプログラムをよく書く。

とありますが、今、私が大変になっている所です。スクリプト言語が沢山あるのでどれを先に覚えれば良いか迷っていたのですが、理想は全部一通り分かる方が良いようです。

google:Perl

google:Ruby

google:Python

google:shell script

google:VB Script

google:Java Script

google:Lua

等・・・他にも沢山あります。

私はPerl、Ruby、Pythonの中からどれか一つ使いこなせる((そのスクリプト言語によってワンライナーやソフト制作が普通にできるくらいの))ものがあればスクリプトプログラミングには困らないかなと感じました。


私は

仕様のエッセンスをコンパクトに記述した簡単な定義ファイルからプログラムを生成するジェネレータを即席で作る。

のような事は出来ませんが、ドメイン固有言語を実装しているソフトウェア等はチェックしています。

私は即席で作るよりはこれらのツールの使い方を覚えているのであればそちらを使った方が速いと思います。

http://d.hatena.ne.jp/studiokingyo/20070215#p1

http://d.hatena.ne.jp/studiokingyo/20060115#p1

そのほかにはBNFからパーサーを生成できるツール(yaccやbison等)

その他、様々な目的に適したツールが存在するのでそれを探すのが最近の日課です。

海外まで手を伸ばしますが、そういう便利なソフトに限って日本語の文字コードに未対応だったりして残念な思いをする事もあったりします。



パフォーマンスと安全性と保守性のバランス

とありますが、それは未だに良く分かりません。ここがプログラマーの職人的スキルなのかなと思っています。

安全性に関してはおそらく

http://ja.wikipedia.org/wiki/%E3%83%90%E3%83%83%E3%83%95%E3%82%A...

のようにならないようにプログラムを組む事だと思います。


保守性は

オブジェクト指向やアスペクト指向など保守に関するコーディング方法の事だと思います。

http://itpro.nikkeibp.co.jp/article/COLUMN/20060228/231310/


パフォーマンスは

沢山のアルゴリズムとそれらの特性を知り、必要に応じて最適化できる能力だと思います。


それら沢山のことを頭に入れなくてはいけないと考えると私はやはり調べた資料は保存してしまうのです。

さらにはそれらのバランスを取らなくてはならないと言うのが大変そうです。


資料を必要な時にキーワードによって検索し閲覧する事ができると言うのは今の時代にプログラミングが出来て幸せだなと思っています。

私の行っている事が客観的に見て生産性が上がっていると言えるかは自分では判断できないのですが、私が生産性を向上させようと行っている習慣でした。


これらの事から今のところ

仕様から決定される

http://ja.wikipedia.org/wiki/%E6%9C%89%E9%99%90%E3%82%AA%E3%83%B...

のような頭の中で考えているFSMをいかに早くコードに落とす事が出来るか?

と言うのが私が考えている生産性です。

その為にはどんなアプローチでもすべきだと思っています。


最後に感覚的な事ですが、全部キーボードで主要な操作が出来るようになると生産性が上がっているような気がするのは気のせいでしょうか?

マウスで選択して右クリックしてメニューを出して必要な操作を選択する・・・というのが時間がかかるし間違った命令を選択をしないように神経を使うのでキーボード操作一発で済むように

プログラム開発環境にマクロをどんどん仕込んでいく。

というような事になるのかなと感じました。

◎質問者からの返答

御回答ありがとうございます。

自らの経験に触れながらの御回答は、大変ためになります。


さて、id:studiokingyo さんの御回答をまとめますと


5 ● fromdusktildawn
●250ポイント ベストアンサー

ちゃんと答えるには、少なくとも、記事を5本ぐらい書かなきゃならないので、ここで答えるには、難しいです。

とりあえず、1/5分だけ、記事にしてみました。

http://d.hatena.ne.jp/fromdusktildawn/20070218/1171791151

◎質問者からの返答

御回答ありがとうございます。


この件に関しては、id:fromdusktildawnさんのご意見も聞きたかったので、誠に感謝してます。


きっとid:fromdusktildawnさんのこの件に関するご意見は、私以外の多くの方も興味があると思うので、平に御願いします。


1-5件表示/12件
4.前の5件|次5件6.
関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ