@Cpratra_31200814

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

C++ これからの勉強について

C++の超初心者からの勉強についての質問です。
現在、とある企業でUI開発や解析AIの導入を行っている部署で働いています。
使用言語は、C++、C#、Pythonです。(自分の知る限り)

私は学生時代、化学を専攻しており、プログラミングに全く触れてきておらず、その部署に配属され、右左わからないまま1か月が経ちました。
この1か月は、上司の指示で「独習C++ 新版」「かんたんVisual C++」の順に、C++のみをひたすら勉強していました。
(ポインター、ムーブセマンティクスの部分はまだ不安ですが、それ以外の基礎は理解したつもりです。)

この先は、設計変更や保守の業務から始めていく予定になっています。
C++の勉強はとても楽しめたのですが、テキストとこれからの実務のギャップにとても不安を感じています。

そこで質問なのですが、

1.プログラミング初心者のころ、どのように勉強を進めていましたか?
  テキストは?いきなり実務?

2.設計変更や保守の業務から得られた学びはなんですか?
  業務中に意識すると学びにつながること、基礎勉強が活かされたことなど

素人で知識はありませんが、これからも成長意欲だけは絶やさず勉強も仕事も続けていきたいと思っています。
そんな私の質問ですが、回答いただけると幸いです。

0 likes

2Answer

私はプロのプログラマではなく趣味でプログラミングしていることを先にお断りしておきます。 つまり必要に迫られて C++ を使っているわけではなく気がのらなければやらないということが出来る立場であるということです。 実務の事情をわかってない替わりに、逆に実務なら必要ないであろう規格の細部を深掘りすることもあります。

どちらかというとテキストは重要であると考えます。 C++ の規格は未定義動作としている項目がかなり多いからです。 どのような動作をするのか保証されないけれど状況によって問題が表面化せず動いてしまうことがあるので間違っていても気づかないということが起こります。 何が保証されていて何が保証されていないのか把握するには既存のプログラムをいじっているだけではわかりません。 思った通り動くものが出来ても保証はないかもしれないのです。

ただ、 C++ の設計者がその著書に書いている設計思想によれば C++ は現実的な道具です。 現実は完璧に習得するまで業務を止めて待ってもらうわけにはいきません。 未経験から C++ の実務を始めることになる場合は想定されていて、高度な言語機能を使われなければ使わないなりでも (綺麗なプログラムとは言えなくても) 動くものが作れるように配慮されています。 実務でプログラムを書きながら平行して学習してより高度な言語機能を習得していくという学習ルートが想定されているのです。

つまりテキストと実務のどちらが優先ということはなく平行してやりましょうというのが C++ の思想です。 少なくとも大元の設計者である Bjarne stroustrup 氏はそういう思想で作ってます。

1Like

Comments

  1. 回答していただきありがとうございます。

    「テキストと実務のどちらが優先ということはなく平行してやりましょう」という言葉
    今月から始まる実務に向けて、頭の引き出しに入れておきたいと思います。

    「設計者がどういう想いでC++を作ったのか」について興味が出たので、すぐに自分の設計思想に活きるかはわかりませんが少し調べてみることにします。

  2. 具体的には、 C++ の設計と進化 という本に設計者の思想や経緯が書かれています。 この本の「7.2 C++ の教育と学習」で学習方法について言及されています。

    正直言って C++ の文法は無茶苦茶です。 仕様を改定するときにも整理されずに野放図に機能を追加しているようにしか見えません……が、実務に使う道具であるという前提を置くと互換性を壊すような変更は出来ないというとても強い要求があって、たとえそれで良くなるのだとしても簡単には変えられないのです。 今までの部分を変えずに強引に新機能との辻褄合わせをすることを繰り返してきたので無茶苦茶になって今があります。

    逆に言えば歴史を辿ると理解しやすい部分もあります。 単に文法を学ぶというだけでなく経緯が分かる資料を読むのは良い学習方法になると思います。

    ちなみに C++ の規格は 2011 年以降は 3 年ごとに改定する運用ルール1です。 たとえば C++11 とか C++14 とか改定年の下二桁をとって呼ぶ通例です。 保守対象のプロジェクトがどの年の C++ を想定しているかは意識したほうが良いです。 参考書籍が対象にしているのがどの改定かというのも確認するのが望ましいでしょう。 あまり古い書籍だと今の実態から離れているかもしれませんし、古いプロジェクトが古いスタイルで書いてあるのに新しい参考書で学んだ知見を使おうとしても無理があるかもしれません。

    1. 2003 年から 2011 年までの間が空きすぎて現実との乖離が大きくなりすぎた反省によります。 用意したトピックを納得するまで議論してから仕様に入れるよりは三年ごとにその時点で決まったものを入れる運用のほうが現実的という判断です。 ただ、 C++26 候補が承認されないという事態が起こったのでどういう対応になるのか注目が集まっています。 ↩

プログラミング初心者のころ、どのように勉強を進めていましたか?

何らかの要素(文法とか,std に用意されている物とか)の存在を新たに知ったら→それについていろいろ実験(?)してみる.
もちろん実務とは無関係の場所で.

  • それを使ったら何が嬉しいというのか
  • それを使うコードは初心者たる自分にとってどれほど優しくない呪文の塊に変貌するのか
  • それを使うコードをうまく書けなかった場合(:大抵最初はそうなる)にどのような意味不明なエラーコードが湧いてくるのか,何が原因なのか.どう修正するのか
  • 間違った使い方 とか 使うべきところでもないところに強引に使ってみたり とかしてみたら,どんだけくっちゃくちゃなことになるのか
  • etc

こういうのを暇を見つけてはやる.

1Like

Comments

  1. 回答していただきありがとうございます。

    自分で課題を決めて、それが思い通りに出力させられるかを試してみるということですよね。(わざとエラーを起こさせるというのも意味がある?)
    「自力で書く」というのが基礎を学んだあとの課題(壁)になるだろうと思っているので、早速実践してみようと思います。

  2. んー,なんと言えばよいのかな?

    N通りのやり方がある(ありそうに見える)ときに,「俺はこれを選ぶぜ! なぜならば… 」という判断ができるのか?
    そこで別のやつを選ぶのだと どう良くないのか? どのくらい良くないのか?

    ……というところ…かなぁ.

    そこで選び間違うと

    どんだけくっちゃくちゃなことになるのか

    というのを先に実際に経験してみておく,みたいな.
    (それを本番で経験することにはなりたくない)

    「実験」という範疇なので,まぁ,「わざと」とは言えるだろうけども,その時点ですでに「どう考えてもダメだよね」と明確にわかっているようなことではなくて,「これって別にこうでもいいんじゃねぇの? こう使ったっていいんじゃねぇの?」と見えるようなやつを試してみる感じ…かな.

  3. どの書き方を使えば、安全で読みやすい処理が書けるかってことを思いつく限り試してみるってことですかね。その中で、良い・悪い経験両方積めるという。先ほどのコメントは少し理解がずれていました。
    (例えばnew・deleteで確保と解放を自分で書く方法とstd::unique_ptrで自動解放する方法の両パターン書いてみる的な...)

  4. 「実験」するのにも,ちょっとした規模(?)が欲しい場合もあり,そのような場合には

    自分で課題を決めて

    ということになりますね.

    • 動くものとして完成させる
    • (何らかの意味で)良い コードを目指す

    ということを目指すけれども,そのことに対する外圧は無い世界 みたいな.
    とりあえず「自分で書く」世界ですね.
    (昨今,業務のコードというのは「自分では書かない」方向に急速に行っているらしい.知らんけど.)

Your answer might help someone💌