エンジニア志望の学生です。
https://www.codereading.com/algo_and_ds/algo/binary_search.html
プログロムの意味は分かったのですが、半年後に何も見ずにこのプログラムを書いてくださいと言われてもかけないと思います。
まだ理解が足りてないのか、エンジニアの人もかけないのか教えてください。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/10/03 15:57
退会済みユーザー
2019/10/04 01:49
2019/10/08 10:33
2019/10/08 10:42
回答10件
0
まだ理解が足りてないのか、エンジニアの人もかけないのか教えてください。
まだ理解が足りていないのです。
他人のプログラムの意味が理解できてもアルゴリズムの仕組みを理解していなければ自分でコードを書くことはできません。逆に言うと、一定レベル以上のエンジニアであれば、アルゴリズムの仕組みさえ理解すれば誰かの書いたコードなど見ずとも自力で書けます。サーチやソートなどの基本的なアルゴリズムは理解しておくべきでしょう。
より上級レベルになれば、データの動きや振る舞いなど分析して目的の結果を得るためのアルゴリズムを自ら導き出すということも要求されます。
投稿2019/10/04 04:47
総合スコア5944
0
ベストアンサー
主に「エンジニア」とは、何かしら要件や設計があって、それをもとにアプリケーションを製作していく人たちです。
(もちろん要件定義や設計も仕事のうちです)
その「何も見ずに」がどの程度の制約を想定しているか分からないのでなんとも言えませんが、要件も設計もなしに作るのは無理です。
確固たる目的があり、それを達成する(または現状を改善、問題を解決する)ためにアプリケーションは作られます。
リンク先のコードもそのさきは何かしらの目的を達成するために利用される考え方のひとつと言ってもいいでしょう。
ですので、
「こんな考え方がある」と引き出しにしまう程度で良いと思います。
そして「どういうときに使えそうか」を考えるだけで良いと思います。
コードは暗記するものではありません。
それぞれの言語には様々な機能がありますが、「ある機能を使うためにアプリケーションを作る」ということは現場ではありません。
機能を持つ言語すらあくまで「目的達成なための道具」です。
お前(機能)のためにチーム(アプリ)があるんじゃねぇ
チーム(アプリ)のためにお前(機能)がいるんだ
です。(分からなかったらごめんなさい)
確かに道具はたくさん揃えておいた方が良いですが、すべてをなんの参考もなしに空で出せる人っていません。言語を作ったチームの人ですらマニュアルを一字一句覚えてはいないと思います。
学生とのことで、レポートを提出することはあると思いますが、自身の書いたレポートをどれくらい覚えていますか?一字一句間違えずに言えるでしょうか?
「こんな風なものがある」「こんな項目で大体こんな内容で書いた」
そんなものだと思います。
リンク先も「コードを読む」「暗記する」のではなく、「こういうアルゴリズムがある」程度の、概念をおさえておくにとどめて、「どういう場面で使えるか」を考える方向にシフトされては如何でしょうか?
その何の根拠かわからない「半年」という期間をコードの理解に努めるのではなく、あくまで「アルゴリズムの適用」「応用」にあてては?
初めのうちは「このアルゴリスムを適用する前提の何か」で良いと思います。
そのうち「これを実現するためにはこのアルゴリズムが使える」と、論理的な思考が育っていると思いますし、その思考は現場で充分通じるものになります。
投稿2019/10/04 01:32
編集2019/10/04 01:35総合スコア80875
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
この程度の「アルゴリズム」であれば,最低限のプログラミングができる人であれば
「二分探索」という言葉の意味自体を知らなくて,且つ,その説明も与えられない場合を除いては,「自分は書けない」なんてことは無いと思います.
あなたが書けないと思う理由は,
- アルゴリズムの内容を理解できていない
- このレベルのコードをまだ自身で書けないだけ
のどちらでしょうか?
後者に関しては,まぁそんなのは(学習を続けていれば)「半年後」には余裕で解消されているでしょうから,
現在そこが不安なのだとしても,とりあえずアルゴリズムの内容側を紙とペンとかを使ってでも理解しておけばよいのではないでしょうか.
投稿2019/10/04 01:25
総合スコア11985
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/10/04 01:55
2019/10/08 10:38
0
まだ理解が足りてないのか、エンジニアの人もかけないのか教えてください。
職業プログラマーであればプログラムの詳細を覚えていなくても二分探索の概要を覚えていれば、何も見ずにコードを書けると思います (「バイナリサーチってどういうアルゴリズムだっけ……?」というレベルで忘れていれば書けませんが)
あなたの書けないと思うのは、理解が足りないのではなく、目的の動作をコーディングする経験が足りないからではないでしょうか。
ただChironianさんの書かれているように、わざわざ参考にできる資料を見ないという縛りを入れることは通常ありませんし、今の時代に二分探索のような基本的なアルゴリズムを自前で実装することはほぼ無いと思います。
(そういうのはライブラリやミドルウェアがやってくれるので)
投稿2019/10/03 16:30
総合スコア4524
0
コードをまるごと理解するのではなく、コードが「何をしたいのか」=アルゴリズムを理解していれば、コードを別の場所で書き直すこと自体はできます。
むろん、前のコードと一字一句同じにはならないでしょう(使う変数名とか違ったりしますから)。それは当たり前で、気にすることではありません。
コードとはアルゴリズムを(プログラミング言語で)表現したものなのですから、どちらを覚えるかと言われればアルゴリズムを覚えるべきですね。
あと、コードで覚えるとそのプログラミング言語に拘束されてしまいますが、アルゴリズムで覚えているなら別のプログラミング言語でもそれを書くのは難しくありません。それぞれの言語毎の癖があるにせよ。
そういう意味でも、プログラミングを学ぶことはプログラミング言語を学ぶこととイコールではあり得ません。
割と多くの人が勘違いしていることですが。
投稿2019/10/04 05:24
総合スコア13703
0
アルゴリズムの本質は実装とは無関係です。
プログラミングで書けるかどうか以前に、自分の手を動かしてできるかどうか考えてみましょう。
バイナリサーチなら、番号付きのカードの束とかを自分の手でバイナリサーチしてみてください(二分するときは大雑把にでいいです)。手でできるならアルゴリズムの基本はわかっていると思います。
アルゴリズムの考え方がわかっていれば、原理的には使いこなしているプログラミング言語があれば書けます。
(ただこういうのって、実際に書くとインデックスの扱いが面倒臭かったりはするが……よく考えてデバッグしながらやればいつかはできる)
投稿2019/10/04 05:19
編集2019/10/04 05:31総合スコア30935
0
推奨されない内容のご質問かもしれませんが、エンジニア志望なものの不安があるのだろうと思ったのと、私自身も興味をおぼえましたので回答をひとつ。(そういう意味ではこの回答も推奨されないものかもしれませんね)
一応現役のつもりの私の場合ですが、少なくともバイナリサーチ/2分探索に関して、書け!と言われれば一応は書けるつもりです。ですが、2分したときに奇数になる場合のケースで少し悩む気がしますし、単体テストしたらバグではまるかも。
コーディング自体の速度だと、特に競プロerのような方々には惨敗するのは覚悟しています。
2分探索の考え方は、意外と実生活でも役に立ちますよ。ある項目でソートされた大量のものからひとつ探す様なケースがあったりします。その考え方を思い出してコードを書くようなかんじです。一発で動く完璧なコードを書く自信はとてもありません。
業務で自分で実際に書くか、と言われれば他の方の回答やコメントにあるように、書きません。衆知で、充分テストされ、荒波にもまれた既存のコードや製品を使わせてもらいます。
投稿2019/10/03 16:19
総合スコア9254
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
私は書けません。
エンジニアでないから、書けなくてもいいかも?
というより、バイナリサーチなんて、必要な時に本を見ればいいです。
何処を探しても見つからないようなものでなく、何処にでも転がっているものを
わざわざ覚える必要はありません。
必要に成ったらそのサイトを見ましょう。
エンジニアなら「何処にもないもの」を作り出す努力をしましょう。
それに、バイナリサーチを自分で書く必要って、あまり無いような気がする。
投稿2019/10/04 01:34
総合スコア711
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。