ID非公開さん
2022/5/21 15:54
12回答
初学者がC言語の習得を目指すためにどうしようか、いろいろ調べてみたのですが
初学者がC言語の習得を目指すためにどうしようか、いろいろ調べてみたのですが 「初学者が最初からC言語を学習するのは非常にハードルが高い。なので初学者向けのBASICから始めるが、BASICとC言語は考え方が異なるため、そのまま移行しようとすると大混乱する。そのためマシン語(アセンブラ)を間に噛ませることでC言語が理解しやすくなる。」というようなBASICをスタートラインとするロードマップを知りました。 一方で、知恵袋でBASICから始めるとC言語など実用的なプログラミング言語の習得で、むしろ害になりかねないため、C言語の習得を目指すなら最初からC言語を学ぶべきという回答も見ました。 私は就職や転職のためにC言語の習得をできるだけ急がなければならない環境にいるわけではなく、趣味でやりたいと考えています。皆さまは、初学者がC言語の習得を目指すにあたっての、このロードマップについてどう思われますでしょうか?
左の図を作成されたのは福野泰介さんという方です。
ベストアンサー
既に同様な回答がいくつもありますが、 BASIC→アセンブラ→C言語→他へ という、ラインは確かに王道であり、多くの人が通ってきた道でした。 ただし、それには時代背景があります。 1980年代のまだパソコンがマイコン(マイクロコンピュータ)と呼ばれていた時代には、 BASICがただの言語では無く簡易OSも兼ねていて、パソコンを起動すると直接BASICが起動しました。 つまり、パソコンを使う=BASICのプログラミングを行う、もしくは、BASICのコマンドを使ってBASICのプログラムを呼び出して実行する。 というのが、パソコンの使い方だったのです。 その為、BASICの利用は必須でした。 今で言えば、「マウスでWindowsを操作してアイコンをクリックする」みたいな事が「BASICを使う」事と同義だったのです。 しかし、BASICだけでは、パソコンの性能を引き出す事は難しく、本格的な処理や個別のパソコンの独自のハードを使いたくなったら、 アセンブラやマシン語で直接ハードを操作してやる必要がありました。 OSだのドライバだのの支援のない時代、自分で直接やるしか無かったのです。 そうやってBASICに満足できない人たちがアセンブラを覚えてゆきました。 やがてホビーマイコンの時代から、ビジネスにも使えるパソコンの時代になると、 C言語が使われる様になりますが、C言語のコンパイラは基本的に有料のソフトウェアであり、数万円のお金がかかりました。 中高生には高額でなかなか手が出せませんでした。 (お試し版として無料で使えたLSI-Cが流行したりしました) なぜ次がC言語だったのかといえば、当時の標準OSである、MS-DOSのマイクロソフトが、MS-CというC言語を売っていましたし、 実質、一般人が手に入る言語としては、C言語ぐらいしかなかったのです。 (唯一例外として、ライバルBorlandが出していた、TurboPascalという、Pascal言語も人気でした) そういう時代背景もあり、多くの人が、BASIC→アセンブラ→C言語というラインを辿りたました。 それを選んだというより、当時は実質それしか選択肢は無かったという理由によるものです。 1990年代には、C言語はありとあらゆる場所で使われた覇権言語でした。 1990年代後半になると、Windows化と共にC言語によるプログラミングの難易度が上がり、 VisualBASICやDelphiといったより簡単にプログラミングが可能な環境が登場します。 2000年代には、インターネットが主流になるに連れ、JavaやC#といった現代のおなじみの言語が主流になってゆき、 より簡単に、素早くかけるようにと、PythonやJavaScriptの様な、スクリプト系言語が伸びて来て、現在に至ります。 なので、BASIC→アセンブラ→C言語→他へ、というのは、気持ちはとても良くわかるのだけど、 1980年代からコンピュータの進化と共に育ってきた人達の方法であって、 流石に今となっては古いやり方です。 メリットとしては、 BASICで、基礎的なプログラミングの考え方を学びます。 変数や配列、順次、分岐、反復という基本構造やそれを使ったロジックの組み立て方が、 難しいルールを覚える事ににとらわれずに学べるのはとても良いです。 さらに、BASICのメリットとして、いきなり最初から標準でグラフィックス関係の命令を備えている事です。 画面に絵を描いたり、キャラクターを動かしたりという事がBASICではとても簡単にできました。 これは、現代のJavaやPythonにも無い特徴で、とにかく最初から遊べるので、挫折しにくさに一役買っていたと思います。 BASICはパソコンで遊ぶ為のものでしたので。 これを現代で再現するなら、Scratchが向いています。 難しい文法にとらわれることなく、純粋にロジックの構築に専念することができ、 標準で画面上にキャラクターを動かしたり、絵を描いたりして遊べます。 次に、アセンブラですが、これは概念だけ分かっていれば十分です。 CPUがメモリをどのように使って処理をしているのか?という低レベルの理解は、 C言語のポインタの理解にとても有効ですが、その為だけにアセンブラを学ぶというのも微妙です。 C言語のポインタも含めてざっくり覚えるくらいで、とりあえずは十分です。 C言語で学べるのは、変数のスコープや関数といった、プログラムが大きくなっても、 小さな単位のままで扱えるようにする為の仕組みです。 これにより、指数関数的に上昇するプログラムの複雑度を抑えられます。 あとは、式の概念や複雑な式が、演算子の優先度と結合法則に従って、 どうロジカルに処理されてゆくのかみたいな感覚も、ここらで身につけておくと役立ちます。 それに加えて上のポインタの概念を学べれば、C言語そのものは、今はそれほど重要では無いです。 今の時代により重要なのは、そこから先の、Java等のオブジェクト指向の言語達です。 オブジェクト指向の根底には、C言語の小さく分割して、複雑さを抑え込む考えがあり それをより高度に実現しています。 なので、C言語を土台にすると分かりやすいのですが、 C言語自体の大変さを考えると、 今の時代では、Scratchの後に、Python等のスクリプト言語まで飛ばしてしまい、その後にJavaできちんとしたオブジェクト指向を学び、 興味があれば、C言語、アセンブラと逆に掘り下げてゆくことで、コンピュータへの理解を深める的なラインもありかと思います。 (Javaの後にC言語やアセンブラをやって再びJavaに戻って来るとより深くJavaを理解できるように成っていることに気づきます。私の場合はJavaではなくDelphiでしたが) 個人的には、Scratchで基礎概念を学んだ上で、C#で画面設計を部品で行い、コードを文字で書くという世界に進むと、 文字ばかりでつまらない期間が無くて挫折しにくいようにも思います。
1人がナイス!しています
ID非公開さん
質問者2022/5/22 15:24
回答ありがとうございます。 BASICをスタートとするプログラミング学習ラインの時代背景は、当時を知らない上、ネットで BASIC等について調べていてもなかなかそういったことが見られなかったので参考になります。 とても興味深く拝読させていただきました。 BASICのメリットとして基礎的なプログラミングの考え方を学べること、これを現在で再現するならScratchが向いていることを挙げられていらっしゃいますが、 初学者のプログラミング学習について調べている過程でプチコン4というものを知りました。 これはBASICを現代風にリファインしたSmileBASICを搭載したNintendo Switch用プログラミングソフトだそうです。
質問者からのお礼コメント
ベストアンサーにはコメントでたくさんのことを教えていただいた、あみやさんを選ばせていただきました。 皆さんのさまざまな意見、とても興味深いものでした。 回答ありがとうございました!
お礼日時:5/28 23:15