トップページ⇒prog
45コメント23KB

アルゴリズムが・・

■ このスレッドは過去ログ倉庫に格納されています
0001見習いNGNG
僕はプログラマの卵なんですが、アルゴリズムがおかしいらしいです。
人にソースを見せると「ああ、こんなやり方もあるんだ・・」と苦笑まじりに言われます。

僕は頭の構造がおかしいのでしょうか?
プログラマに向いてないんでしょうか?
それとも、慣れてくれば普通のアルゴリズムが浮かぶようになるのでしょうか?

人にプログラム見せるのが恥ずかしいです。
(まだ研修中なので見せない訳にはいかない。)
技術ではなく、考え方は勉強して変わるものなんでしょうか??

0002>1NGNG
「ありゃ、こんなやり方しちゃたんだ」って言われなくて良かったです。
0003>1NGNG
コメント無しではわかりにくいすごいアルゴリズムより
わかりやすい単純なアルゴリズムのほうがいいです
0004>1NGNG
ソースにアルゴリズム書いてるんなら、指導してる奴にも問題がある。
ソースには、アルゴリズムの実現方法を書け。
言ってる意味判るかな?
0005>4NGNG
1 じゃないけど、意味分かんないよ。
00061ですNGNG
>2
ありがとうございます〜。
でも、そのうち言われそうな勢い(笑)

>3
それはわかってるんですけど、自分の思いついたのはわかりにくい・・・
そして、それ以外のやり方が思いつかない・・・
さらに人のを見て落ち込む・・・・
どうしたら良いんでしょうか・・・?

>4
??書き方が悪かったですか?
ソースにアルゴリズムを書いてるわけじゃなくて、プログラムの組み立て方がおかしい・・
のです。なんとか直す方法ないものでしょうか。。。

0007>1NGNG
見習いってことは今春卒業なんだろ。
自分で思いつくだけ立派なもんだと思うぞ。
算法なんてどうやったて動けば良いのだ。
可読性云々は同じ算法なのに余分な事をしてるケースが多いから
後ほど見直せば良い。
一応、算法を実現するには言語を使うので、子供が言葉を覚える
のと同じように他人のマネから始める。普通は。
恐らく片言を覚えて滅茶苦茶な言葉の羅列って雰囲気なのかな、今。
そう言うのは「可愛い」と言います。
片言だろうと、一生懸命意志を伝えようとする子供もは伸びますよ。(笑)
0008うーーんNGNG
>7
アルゴリズムなんてどうでも動けば良いって、その認識にはかなり問題があると思いますが。。。
私は人にアルゴリズムについて説明する時にはいつも「手順だけでなくオーダまで把握して始めてそのアルゴリズムを分かったという資格がある」と言っています。

1 の方も他人のマネの前にしかるべき学習はしましょう。どのような問題に対してどのようなアルゴリズムが知られており、それぞれ空間および時間計算量のオーダがどの程度であるか理解しましょう。
プログラマの卵だとの事ですが、趣味のプログラマじゃないんでしょ?
だったら既に知られているアルゴリズムについては積極的に学んでおくのは至極当然の心構えですよね。慣れだけで仕事をやっちゃいけません。プロならば。
ま、その程度の事もやらない「プログラマ」が多いから、この業界って甘く見られるんだろーけど。。。
0009名無しさんNGNG
4=8と仮定して。
うーん。少々表現が婉曲過ぎやしませんか?

4ではアルゴリズムはドキュメントとして残し、ソースには
その実装手順を書けって事を言いたいんだと思うけど、勘違
いですか?

8での「空間及び時間計算量」ってのは、アルゴリズム実装時
に消費する記憶領域の容量と、そのアルゴリズムの実行時の消
費時間を指してると思うんだけど、どうでしょう。

0010はろーNGNG
プログラム上の問題に解法なんて腐るほどあります。
問題は、それをどう効率良く処理するかです。
オリジナリティとか関係ないです。

適格なアルゴリズムによってプログラムは、数千倍早くなります。
そして早いアルゴリズムはあなたの前に誰かがみつけてます。
大抵の場合はその早いアルゴリズムを使いましょう。
それを処理するライブラリが提供されているなら積極的に
それを使いましょう。

よくいわれることですが、「車輪の再発明」は絶対ダメです。
そんなことばっかやってる奴は現場でやくにたちません。
00114NGNG
8ではないです。
アルゴリズムは問題を解決する方法論でしかない、
それがそのまま、ソースに落ちることはありえない。
何らかの言語に落とす時点で、その言語に適したもしくは、
その実行環境に適した形に実装しなければいけないでしょう。
プログラムを書くときの手順として
問題分析→解法の検討・決定→実装
となるはずです。一般にアルゴリズムをどう適用させるかは、
解法の検討・決定に属する問題で、実装の問題ではないでしょう。
1の見習いさんが問題にしているのは、恐らくは、実装の方法論であろうと思うが、その辺が曖昧なんで、4のような書き込みをしたのだけれど。
0012>8NGNG
7です。
>アルゴリズムなんてどうでも動けば良いって、その認識にはかなり
>問題があると思いますが。。。
はい、その通りです。(笑)
でも現実は納期に追われ、それどころじゃないんだよなぁ。
いくら素晴らしい算法使っても動かなくては意味が無いと言うのは現実
です。その辺は皆さん分かってるけどね。
>10さん
>適格なアルゴリズムによってプログラムは、数千倍早くなります。
そうですよね。俺もビルト大先生の本読みました。
sortが良い例で、当時感動ものでした。
で、「車輪の再発明」ってなーに?
00139NGNG
>で、「車輪の再発明」ってなーに?
聞く前にまず検索エンジンを使いましょう。

で、「車輪の再発明」ですが、現実には政治的な問題が
絡んで来て、結構頻発しちゃいます。
思いっきり低水準な感情論から「車輪」の保守の労力や
それに対する評価に至るまで、色々と。
00148NGNG
>9 さん

空間計算量、時間計算量というのはそれぞれ space complexity@` time complexity の訳です。complexity なので複雑度と訳される事も多いです。
これはある入力があった時、そのアルゴリズムの実行にどの程度の空間(メモリ等)および時間が必要かを表すものです。
また、オーダというのは入力のサイズが増加した時に計算量がどのように増加するかを表します。
例えばソーティングではソートするデータの数が入力のサイズという事になりますが、このサイズが二倍になった時に計算量が何倍になるかという事を表現しようとするものがオーダです。
例えば単純な選択ソートでは入力が二倍になるとおよそ四倍(三倍になれば九倍)の時間がかかりますがクイックソートではそこまでひどくはありません。

もし使っているアルゴリズムの空間計算量のオーダが大きい事に気付いていない場合、予期しない所でメモリが足りなくなって実行できないなんてハメになりかねません。

>7 さん
>でも現実は納期に追われ、それどころじゃないんだよなぁ。
>いくら素晴らしい算法使っても動かなくては意味が無いと言うのは現実です。

それをなんとかするのがプロってもんでしょう?
プログラマというのは充分に誇りを持てる仕事だと思うのですが、誇りを持てるほどの仕事をするプログラマは非常に少ないように感じています。
0015駄目よNGNG
>人にプログラム見せるのが恥ずかしいです。

見られてびしばし指摘される方が上達するって。
0016でもNGNG
プログラミング能力ってある日突然目覚めません?前はサンプルプログラム
をそのまま使って全くなんのことやら(なぜ動くのか)分からなかったのが
ある日突然理解できたりとか...
うちの会社の新人君(と言っても私より年上)はWindowsのメッセージの概念
が理解できない様子。はやく目覚めてね...
00171ですNGNG
みなさん回答ありがとうございます。。
新卒で先日から仕事が始まりました(研修長い会社です)

今は仕様書見て上の人の言うがままに作ってます。
サンプルプログラムまで渡されてます。
このまま何もせずに行ったら使えない人間違いなしと言う感じです。

よくわからないんですが、プログラム言語(今はCです)を勉強していれば
自然と良いアルゴリズム(と言うかプログラム?)が組めるようになるのですか?

ここにいる方はみなさんプログラマ歴はどれくらいなんでしょうか?
もしかしたら自分は向いてないかも知れないと思っています。
非常に不安です。
新人の頃はみなさんこんな感じだったのでしょうか・・・

0018>17NGNG
>非常に不安です。
>新人の頃はみなさんこんな感じだったのでしょうか・・・
自慢とかそーゆー事じゃなくて、新人で入社して2ヶ月目(小さい会社なので)
からごく普通にドライバ書いてました。その時点でC歴は7年だったし
中学生の頃に、プログラマが初期にぶち当たる壁を乗り越えるか、新卒就職して
から壁にぶち当たるかの違いだと思います。
在学中は「就職したらすぐに仕事が出来るようになってないと...どっこも雇っ
てくれない」と考えていたのですが、世の中は「仕事は就職してから覚えるも
の」と言う考えが学生にも企業にもまかり通っていて驚きました。

でも、がんばってください。
0019↑追加NGNG
もちろん、「お客さんとまともに話しが出来るか」とか「名刺をちゃんと渡せるか」
とか「現場の人に受け入れてもらえるか」なんて不安はもちろんありましたよ
0020>17NGNG
不安を感じない人は居ないと思いますよ。
ただし不安を表に出さない人は大勢います。
結構、横柄に振る舞ってる人の方が、意外に小心の方が多いです。
今後10年20年と経験を積んだとしても、やる事は常に新しい事を含み
ますから、不安感に関しては永久に無くならないでしょう。
0021大学4年生NGNG
プログラミングの時なんか、
職歴ある奴とか昔からやってた奴
に見てもらって「こんなんおえんわー」
とか、「はぁ???これで何したいの???」とか言われた。
(彼らに悪意わ無い)

そりゃグサっとくるけどさ。
ずばっと言われた方が印象に残って同じ失敗しないしね。
ちゃんと助言くれるし(解答ぢゃなくて、あくまで助言)。
0022#10423NGNG
>17
>よくわからないんですが、プログラム言語(今はCです)を勉強していれば
>自然と良いアルゴリズム(と言うかプログラム?)が組めるようになるのですか?
アルゴリズムの勉強がしたいなら、雑誌とか書籍とかの
C言語のソースを片っ端に解析するのが一番いいと思います。
それと、C言語やOSなどの勉強も必要だと思います。
0023というかNGNG
段階的詳細法って知ってます?>1
0024#10423NGNG
1の人は段階的詳細化なんてしらない気がする...
半年以上も研修してて、要件を満たすアルゴリズムが
作れないっていうのは精進が足りませんな。
もっと、勉強しないと。

0025AONGNG
うーん、要件からプログラムに落とすまでの手順を
ちゃんと、整理しておかないと、いつまでたっても、
スキルは上がらないと思うんだけどなぁ。。。
「半年以上の研修」で、段階的詳細化も教えてないとは思えないけど
そんなものなのかなぁ。。。
コーディング手法ばかり覚えてもしょうがないよなぁ。。。
0026便乗質問君NGNG
便乗質問で申し訳ないのですが、私は
「まずは即座に思いつく簡単なアルゴリズムで各ルーチンを作り、
それらのルーチンを繋げた後に各ルーチンのアルゴリズムを再考する」
っていう形で作っています。
そうすれば、「動かない」っていう最悪の事態は防げるし・・・。
でも、これって危ういですか?
0027>26NGNG
それって良くやるけど、結局時間が無くて再考する時間が
無い。エラー処理なんかも抜けちゃったりして...ちゃんと
チューニングすれば1.4倍ぐらい軽くなるんだろうな...

そんな訳で始めから、完全に近いコード書くように心がけて
います。みなさまは?
0028AONGNG
APIの動作検証するとか、実験プログラム書く等の時意外は、
いきなりコード書かないですよ。。。

大体、大まかな構造設計から、機能分解とかIPCをどうするかとか、
決めてドキュメントした後、ライブラリ化可能な部分なんかの抽出します。
まぁ、プログラムの骨組みになる部分機能とか、機能の橋渡しになる部分は
割と先に作ってしまいますが。。。
エラー処理は機能の一部なんで、構造設計時点で織り込んでおきますね。。。
あと、どんなに忙しくても、関数、class、templateなんかは、
部品化、ライブラリ化を考慮して作るようにしてますが。。。
00291です。NGNG
このスレッドをたてたものです。

ああ、毎日残業残業です。
こんなに厳しいとは・・研修時代は毎日17:30上がりだったのに・・・

相変わらず、仕事ができず上司の人から冷たく扱われています。
このスレッドに書いてある事を読んでも何がなんだかわかりません。
勉強する気はあります。通勤電車の中で「初めてのC」読んでます。(そんなレベルです)

とりあえず、何から勉強すれば良いのでしょう?
UNIXの使い方もC言語もプログラムもプロジェクトもさっぱりわかりません。
わかってないことが多すぎて何からやって良いのやら・・・

助けてください・・・・
0030これはNGNG
向いてないので転職しましょう、
というのが一番の助言か?
0031最初はそうだよNGNG
あまり気にしなさんな。
最初は俺も言語以外は何もできなかった。
makeもコマンドもわからなかった。
だから最初は仕事上で覚えることで充分。
わからないことは怒られても上司にちゃんと聞きなよ。
んで覚えたことはメモしとくこと。
何回も聞いたら切れるよ(笑)
0032#10423NGNG
>31
そうかなぁ?
「1」の人は研修期間が半年もあってこんな状況なんだから、
気合入れて勉強しないと、使えない人で終ってしまうんじゃない?
というか、なりつつあるみたいだけど...

0033>32,1NGNG
31だけど,俺のときは2ヶ月間Cとviだけやって現場に放り出されたから
状況ちがうけど,研修と現場は違うでしょ?
現場で得るもののほうが大きかったけど。
Cだってどうせ研修だと,現場で使わないような関数ばっかだろうしね。

だから,大丈夫でしょう。
あ,そうそう。もう,pcの安い時代なんだから,
自前で家に1台買って,WinのほかにLinuxくらいいれて
勉強しようね>1
00341ですNGNG
どーも、1です。
今日やっと一本プログラム終了しました。(予定期間の約2倍)

>30、32
やっぱ向いてないんですかね・・・
でも研修ではCOBOLをやってたんですよ〜
しかも簡単な練習問題みたいな奴ばっかりで後は2種の勉強。
ま,言い訳なんですけど・・

>31、33
暖かい励ましどうもありがとうございます。
とりあえず一本できたのでなんだかほっとしています。

やっぱりLinux入れた方が良いんですか。
新しいパソコンか・・・うちの会社は残業代はきっちり出るので
それで買います。頑張ります。

今後もこの掲示板でくだらない質問すると思いますが、
暖かく見守ってやってください。

みなさん、どーもありがとうでした。
0035>34NGNG
今の時代に研修でCOBOLですかぁ…
言語教えるんならCかC++以外考えられんのだけど、研修担当者って
一般的に使えない人がやるからねぇ。
(検査にも多いけど…)
Linux入れるのは出来るだけ早い方が良い。
昔と違って、現代は只で色々な処理系が手に入るから、勉強には全く
困らないんだよね。
書籍もいろいろ読まれる事をお勧めしたい。
ご健闘をお祈りします。
0036#10423NGNG
>33
研修と現場で状況が違うのはよく分かっています。
まして、「1」さんは、研修ではCOBOL言語だったんだから
わからないことがあるのは当然だと思います。
しかし、半年の期間があって、きちんとしたアルゴリズムが
組み立てられないのは問題だと認識させたほうが「1」さんの
ためになるのではないでしょうか?
0037AONGNG
いまでも、研修でCOBOLをやるところってあるんですねぇ。。。
研修で教えることは、その会社の色が出ますよからねぇ。。。
まぁ、COBOLで作ったシステムをリプレースする時は、システム調査で
ソース解析しなくちゃいけないこともありますが。。。
やっぱり必要なのかな?>COBOL

本当は、手続き型の言語なら、Cでも、COBOLでも、たいした差はないんですがね。。。
0038名無しさんNGNG
ここではありませんが、今年内定もらった人の書き込みで、
「内定式でCOBOLの教科書を渡された」
というのを見た事があります。

まだ相当数研修でCOBOLをやらせているようです。でもなぜ?
0039>38NGNG
>まだ相当数研修でCOBOLをやらせているようです。でもなぜ?
担当者がCOBOLしかしらんのでしょう。
そもそもソフトウエアの世界も、ハード並に変化してることを
知らないような気がする。
0040>39NGNG
本能的に進歩するのを避ける、ソレがCOBOL屋の体質なのです。
0041名無しさんNGNG
最近は研修でVBやってる会社もありますね。
0042>41NGNG
(T_T)。一生M$の牢獄から抜けられなくなる気が。
0043>37NGNG
>本当は、手続き型の言語なら、Cでも、COBOLでも、たいした差はないんですがね。。。

そうですか?COBOL育ちの人間って、極度に引数渡しを嫌う傾向がありませんか?
Cのライブラリを設計する時ですらテーブル渡しの仕様を出して来たりしませんか?
どうも彼らはポインタを不気味な物として捉えているのではなかろうか?と。
0044きっとこう言うだろうNGNG
だって、COBOLにはポインタなんて概念は無いんだもーん。
べーしっくみたいにに、変数に直接格納して渡した方がシックリくるんだもーん。
0045AONGNG
>43
うーん、ポインタは言語仕様の一部に過ぎないんですがね。。。
手続き型言語自体の共通性を言いたかったんですが。。。
ライブラリ設計と言ってる局面がどういう物か分かりませんが、
引数渡しでも、テーブル渡しでも、そのケース毎に考える問題だと思います。。。

どちらかというと、COBOL経験の長いひとは、ファイル渡しを好む気がしますが。。。
何故か、機能ごとにプロセスが立ち上がるとか。。。
■ このスレッドは過去ログ倉庫に格納されています