質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

Q&A

解決済

3回答

6479閲覧

ループ処理内の分岐処理のアルゴリズムを組むのが苦手

manzyun

総合スコア2244

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

0グッド

8クリップ

投稿2015/02/27 01:26

プログラミングを生業としている人間がこんなことを書くのは恥ずかしい話かもしれませんが。タイトルの通りです。
// そもそもteratailにこういう投稿がふさわしいのかどうか

具体的に言いますと「VB.netやC#でExcelによる印刷データの作成をする」ことなどが苦手です。

たとえば
「ヘッダーフッダーのついたページフォーマットで、明細がある一定の行数になったら、同じシート内で新しいページを作成して詳細を書き込んでいく」
処理の作成(ロジックの構築からコーディング完了まで)に20時間以上かかってしまいました。

すこし脇道にそれますが、よく人から言われるのが「難しく考えすぎだ」ということです。
自分の中で思い当たる点としては

  • 変数を宣言するのに戸惑う
  • else文をなるべく使わずに条件分岐を実装したがる
  • 最初に書いたロジックを尊重しすぎて遠回りになる

といったところです。

こういったアルゴリズムを組む能力は経験による部分が強いものでしょうか、それとも単に問題解決能力が低いだけの話で、競技プログラミングの過去問や、もっと基礎に戻って数学の問題集などをとにかく解いていけば鍛えられるものでしょうか。

「そもそもExcelで印刷データを作るのがクールじゃない」
という回答も受け付けております。

最後までお読みいただきありがとうございます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

先に回答しているmunyaXさんとは違う視点から回答いたします。

ちょうど少し前に、「決めることは捨てること」という話を聞きましたが、プログラミングの世界でもそういうことは多々あります。

例えば、変数宣言で悩みだした時も、(VBAなら)型を決めてしまわずに宣言だけしてしまうのもありです。人様に渡すコードを作る、あるいは複数人で大規模な開発を行うのならともかく、内輪の業務を効率化するための小さなプログラムであれば、コードの見栄えとかはいったん捨てて、まずは動作するものを作ることに集中することも必要でしょう(スッキリしたものを書くのは、慣れてからやっていったほうがぐっとできます)。

あと、「既に書いたコードを捨てる勇気」も必要不可欠です。うまく条件を拾えなかったので別な方法でやり直す、拡張し続けた結果として混沌としてきたコードを捨てて1から書き直す、コピペで作ってダラダラ長くなっているコードを整理する、思い切ってやることでプログラムは洗練されていきます。

投稿2015/02/27 02:15

maisumakun

総合スコア146018

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

manzyun

2015/02/28 01:49

「決めることは捨てること」ですか。 そういえば思い切って今まで書いていたコードを一旦消してから書き直すと、もっとロジックがシンプルになった体験は何度かあります。 そういった勇気を含め、色んな物事に対する勇気が僕には足りないのかもしれません。
guest

0

プログラムは書けば書くほど自分の中で「定石」が生まれてきます。

例えば
・こういったパターンの時はこういう処理を書く、
・変数名や関数名などの命名方法はこの方式、
といった具合です。

最初はこれらの定石が頭の中にありませんから、試行錯誤するためどうしても時間がかかります。これはほぼすべての人が経験します。しかし、ある一定地点を超えると加速度的にスピードが向上します。それがどれくらいで訪れるかは個人差があるのですが、続ければ続けるほどにそれが訪れる確率は高まります。

つまりプログラミングとは語弊を恐れず言えば、頭の中にあるパーツを取り出して組み合わせる作業であるとも言えます。現時点で頭の中に存在しないパーツは自分で用意するしかありません。しかし用意してあるパーツを組み合わせるのは(取り出すだけなので)工程が1つ省略できる分素早く行えるのです。

質問文で「問題解決能力」と書かれている点については
・どのパーツが求められているか
を探し出す力とも言えます。

そしてもう一つ大切なのは、これらのパーツはネットに転がってるコードを考えなしにコピペしているだけでは身につかないという点です。ご自身で考えて最適解を導き出し、頭の中に焼き付けてはじめてパーツとして役立てることができます。

ここらへんの考え方は人によって違うと思いますが、
一部の天才的な人を除けば、誰もがある一定の練習期間を積めば、ある一定レベルまではたどり着けるのがプログラミングであると私は考えています。それ以上は才能や他の資質が必要なのかもしれませんw 私も凡才なのでそういったギフトやタレント性をお持ちの方は正直うらやましいですねw

というわけで、

こういったアルゴリズムを組む能力は経験による部分が強いものでしょうか、それとも単に問題解決能力が低いだけの話で、競技プログラミングの過去問や、もっと基礎に戻って数学の問題集などをとにかく解いていけば鍛えられるものでしょうか。

ここらへんはご自身が長期間続けやすい方法を試行錯誤されるのが良いかと思います。
私自身はプライベートでも何か実践的なことをやった方が刺激的ということもあり、その時興味のある物を作り続けております。

参考までに。

投稿2015/02/27 01:55

munyaX

総合スコア783

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

manzyun

2015/02/28 01:45

そう言われると確かに実務経験実質3年では、定石がまだ身についていないのかもしれません。 精進しようと思います。
guest

0

大体先のお二方と被ってしまいますが少しだけ。

変数を宣言するのに戸惑う
else文をなるべく使わずに条件分岐を実装したがる
最初に書いたロジックを尊重しすぎて遠回りになる

というのは、よく考えて書く初心者が陥りやすいものかと思います。

manzyun様はプログラム歴が浅いように見受けられますが、
単純に経験を積んでいけばこの辺は自然と解消される事が多いです。
むしろ、「俺、天才かも」と思えるプログラムを追及するのは、初期には非常に重要だと思います。
いけてるプログラムを追及しないで、ベテランまでずっと実装優先でやって来た方は、
申し訳ないですが、いまいちなプログラマが多い印象です。
是非大いに悩んで、正面から苦手を克服していって下さい!

話は少しずれますが、元データがCSV,XML,JSON等であるのなら、VBAで書いたほうが手っ取り早いですよ。
何かのシステムから直接引っ張っているのであれば仕方ありませんが。

蛇足:
ちなみに、「俺、天才かも」と思ったプログラムは大抵翌日見るとなんて事のないソースです。

投稿2015/02/27 16:57

utun

総合スコア384

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

manzyun

2015/02/28 01:53

「俺、天才かも」は大事なのですね。「自意識過剰じゃないか」と思ってそういった感情を押し殺しておりました。 もっと自分のできたことも認められるように努めていきたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問