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

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

ただいまの
回答率

90.62%

  • アルゴリズム

    392questions

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

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

解決済

回答 3

投稿

  • 評価
  • クリップ 8
  • VIEW 2,417

manzyun

score 1834

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

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

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

すこし脇道にそれますが、よく人から言われるのが「難しく考えすぎだ」ということです。
自分の中で思い当たる点としては
  • 変数を宣言するのに戸惑う
  • else文をなるべく使わずに条件分岐を実装したがる
  • 最初に書いたロジックを尊重しすぎて遠回りになる
といったところです。

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

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

最後までお読みいただきありがとうございます。
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

checkベストアンサー

+3

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

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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/02/28 10:49

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

    キャンセル

+3

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

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

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

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


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

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


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

というわけで、
こういったアルゴリズムを組む能力は経験による部分が強いものでしょうか、それとも単に問題解決能力が低いだけの話で、競技プログラミングの過去問や、もっと基礎に戻って数学の問題集などをとにかく解いていけば鍛えられるものでしょうか。 
ここらへんはご自身が長期間続けやすい方法を試行錯誤されるのが良いかと思います。
私自身はプライベートでも何か実践的なことをやった方が刺激的ということもあり、その時興味のある物を作り続けております。

参考までに。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/02/28 10:45

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

    キャンセル

+2

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

変数を宣言するのに戸惑う
else文をなるべく使わずに条件分岐を実装したがる
最初に書いたロジックを尊重しすぎて遠回りになる
というのは、よく考えて書く初心者が陥りやすいものかと思います。


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


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


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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/02/28 10:53

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

    キャンセル

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

  • ただいまの回答率 90.62%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    Excel VBAについて質問させていただきます。初心者です。

    初めまして。お世話になります。初めてこちらのサイトで質問させていただくので、何か不備があった場合は先にこの場でお詫び申し上げます。 私はExcel VBAで、セル内の空白で区切ら

  • 解決済

    【エクセル】データが存在する一番上のデータを取得したい

    上記の表で増加率を出したいです。 青のりアジサイは =(B16-B3)/B3+100% でできましたが、横にスライドすると開始データがC3になってしまい取得できません。 Cの場合

  • 受付中

    エクセルである1列にあるすべての名前を合計部分で表示させたいです。

    出来ればエクセル関数で表示出来るようにしたいのですが、 不可能であればVBAでも構いません。 名前と点数の列名があるとします。 合計の部分ではすべての人物の表示と、それぞれの点数

  • 受付中

    Excelグラフでの山の数え方について(VBA)

    前提・実現したいこと ExcelのA列で、a1セルから数百~数千個、データが並んでいます。 小数点を含む数字で、だいたい-20から+30までの間の値です。 折れ線グラフを作成

  • 受付中

    何故IT業界に入りたかったか?

    はたから見るとふざけた質問、クソみたいな質問になってしまいますけど、私は聞きたいです。 私は学生の頃将来こういうものが作りたい、開発したと思っていましたが、現実は甘くないもので、

  • 解決済

    Excel VBA

    Excel VBAを勉強始めて一ヶ月くらいです。 文は大体読めるようになってきました。 ですが、本とかなしで、いざ表とモジュールのみになるとどうに書いたらいいのかわからなく

  • 解決済

    VBA高速化

    お世話になっております。 ここで質問し、皆様のご協力の下、なんとか差分抽出マクロを完成させましたが、 実行してみると、すごく遅いです。処理が終わるまで、133秒程度かかり、

  • 解決済

    excel で アコーディオン みたいな事出来ますでしょうか?

    お世話になっております。 excelで 下記URLのアコーディオンのような表って作れますでしょうか? http://9-bb.com/css%E3%81%A0%E3%

同じタグがついた質問を見る

  • アルゴリズム

    392questions

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