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

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

新規登録して質問してみよう
ただいま回答率
85.31%
プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

意見交換

クローズ

14回答

2209閲覧

プログラミング学習の方法について

dreamers

総合スコア61

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

1グッド

3クリップ

投稿2023/06/20 00:59

編集2023/06/20 01:15

1

3

テーマ、知りたいこと

①プログラミング学習の本は、入力したデータがどのような過程を辿り、出力データになるか、について説明(データの変化を説明の柱にする)すべきかと思いますがいかがでしょうか。

②巷のプログラミング学習の本で勉強する前に、コンピュータ科学を学ぶ方がプログラミング学習の近道だと思いますがいかがでしょうか。例えば、下記の様な書籍を利用するなど。
「コンピュータシステムの理論と実装―モダンなコンピュータの作り方」
https://www.kinokuniya.co.jp/f/dsg-01-9784873117126

背景、状況

①PHP,javascript等を学習するための本を読んでみました。
1行づつプログラミングを解説していますが、それでも何故そうなるのか、納得がいかずその先に進むのが嫌になります。理解ができないので、その箇所を暗記という気持ち悪いことをしなくてはなりませんでした。
その原因は、本が、プログラミングの表現のうわっつらの解説に留まってしまっていることに起因している気がしました。
本来は、データの変化を逐次注目することを説明の柱にして、そのツールとして、プログラムを説明すべきだと思います。
たとえば、下記の様にデータの逐次変化を明示しながら、プログラムを説明すべきかと思います。
※そのような書籍が無いように思います。あれば、ご教示願いたいです。
1.入力したデータXを、もとめるべき出力データYに変化させたい
2.そのために、プログラミングAをこのように記載する
3.プログラミングAの結果、入力データXがデータX’に変化し、そのデータX’が記憶領域に保存された
4.データX’を記憶領域から取り出し、プログラミングBを記載した結果、出力データYになる

②プログラミングの表現のうわっつらの解説を読むのではなく、コンピュータの低レイヤーから理解するのが、プログラミング学習の本道であり、急がば回れ、になるとおもいます。そのことにより、多種類のプログラミング言語にも対応しやすくなると思います。

hatena19👍を押しています

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

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

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

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

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

回答14

#1

maisumakun

総合スコア146544

投稿2023/06/20 01:20

編集2023/06/20 01:20

すみませんが、この意見交換を通じて、どのような知見を得たいのでしょうか?

最初の投稿が自身の主張ばかりに集中していて、意見交換を目的とするもののように見えないです。

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

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

#2

fana

総合スコア12151

投稿2023/06/20 01:21

編集2023/06/20 01:36

(言葉が悪いかもですが)
世の書籍に,あなたのいう所の 2.~4. あたりを明言している物が見当たらない,ということであれば,
「さすがにそこを読み取れないような読者を想定していない」というだけの話では.

要は「いちいちわざわざそこまで言わなきゃダメか?」っていう.

何らかの演算コードを書いたならば,何かしらデータを弄る意図があることは言うまでもない事ではないでしょうか?
で,その演算内容が「XからX'を求める」であることをわざわざ明言しないのは,単に,そこの文脈やあるいはコードそのもから「十分読み取れる」と想定されているからなのでは.

X'が記憶域に保持されるのだとしたら,そのことに関しても,あえて言うまでもない事柄であるように思えます.
だって,次にX'を用いるコードがある以上,その値がどこぞに保持されていることは暗黙の前提であるような…
(ただ,この辺に関しては,C言語入門的な本であればポインタとの絡みで「記憶域がどうの」いう話にある程度ページが割いてあるんじゃないでしょうか.)


「筆者の想定する読者のレベル(?)に達していないならば,そこに達するにはより基礎的な本なりを用いて先に学ぶ必要がある」という点は,特にプログラミングに限る話では無いですよね.
例えば数学の本とか,学術論文とか…
ある本ひとつで「1から(0から?)10まで全てを賄え」という要求には現実的に無理があると思います.
なので,おっしゃるように「先に××を学んだ方がよいのでは」と思われるのであれば,自主的に そうすればよい(or そうするしかない)でしょう.

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

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

#3

Zuishin

総合スコア28673

投稿2023/06/20 01:25

小説を書くのであれば語源を学ぶより演出を学ぶ方が良いと思います。
それは上っ面ではありません。

低レイヤーに興味があるなら、半世紀くらい前の本を図書館で借りてやってみればいいと思いますが、実際のところ今はコンパイルの最適化にしても CPU にしても複雑になりすぎていて、JavaScript や PHP が手に負えない人ではついていくことすら難しいのではないかと思います。

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

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

#4

poto568

総合スコア358

投稿2023/06/20 02:06

せっかくなので、CPUとかメモリとかがどのように動作しているのかを知るために、
電子回路とか量子力学あたりまでさかのぼると楽しいと思います。
(そちら方面の専門書もたくさん出版されているので手を出しやすいです。
偏差値高そうな大学のシラバスに書いてある教科書/参考書がおすすめ。)

最終的には哲学とか宗教とかの領域にたどり着いちゃうかもしれませんけど。
(私は興味ないのでそこまでは踏み込んでませんが。)

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

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

#5

tanat

総合スコア18778

投稿2023/06/20 05:47

編集2023/06/20 05:47

1行づつプログラミングを解説していますが、それでも何故そうなるのか、納得がいかずその先に進むのが嫌になります。理解ができないので、その箇所を暗記という気持ち悪いことをしなくてはなりませんでした。
その原因は、本が、プログラミングの表現のうわっつらの解説に留まってしまっていることに起因している気がしました。

PHPやJavaScriptの入門書籍は「プログラミングの学習」というよりは「webアプリケーション開発の学習」の比重が大きいので、基礎的なことを知りたい場合は不向きなところがあるのはそうかなと思います。

②プログラミングの表現のうわっつらの解説を読むのではなく、コンピュータの低レイヤーから理解するのが、プログラミング学習の本道であり、急がば回れ、になるとおもいます。

学習方法に対する適性は向き不向きがあるので、まずはご自身が良いと思う方法を試してみると良いかと思いますよ。
個人的には、いきなり低レイヤー過ぎるところを狙うとプログラミングにたどり着くまでが大変なので、

  • 専門学校や大学の入門クラスで採用されているC言語の入門書(大体は基礎的なアルゴリズムの学習書を兼ねている)

とか

  • IPAの基本情報処理技術者試験の午後試験の疑似言語でアルゴリズムを学習

あたりが教材も豊富でお勧めです

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

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

#6

otn

総合スコア86295

投稿2023/06/20 06:45

前半「テーマ知りたいこと」はごもっともです。ただ、そのための本としてその本を薦めるのが良いかどうか。
「図解コンピュータの仕組み」的な本でも十分な気がします(ちゃんと読んだこと無いので、全然駄目な内容かもですが)。
かなり昔(前世紀)ですが、Cのポインターを理解することだけに特化した書籍がでて、驚きました。
そんなピンポイントな本読むくらいなら、基礎を学べよと思った物ですが、視野が狭くなって人にはピンポイントが受けるのでしょうね。Amazonを検索すると今も数冊ありますね。

最近では、入門書すら読まずに、検索してコピペだけでなんとかしている人が多いかも知れません。
このサイトでも入門書の前3分の1以内に書いてありそうなことを質問している人多数。
読んだけど理解できなかったので質問している風ではなくて、全く読んでいないか、読んだけど全く頭に残ってないのかどちらか。

「背景状況」①の1~4は当たり前のことなので、言わずもがなと言うのは他の人の意見と同じ。
「テーマ知りたいこと」①②や「背景状況」②の内容と乖離があると思います。

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

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

#7

68user

総合スコア2043

投稿2023/06/20 07:51

かなり昔(前世紀)ですが、Cのポインターを理解することだけに特化した書籍がでて、驚きました。

https://www.amazon.co.jp/dp/4774111422
これですかね。
ポインタわかんねぇなぁと言ってた私にとっては大変勉強になったよい本です。
一方でとりあえず K&R 読んでおけ、という人もいるんでしょう。

ということをふまえると、対象レベルもアプローチも様々なものがあってよく、こうあるべきという唯一の勉強法などないんではと思いました。

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

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

#8

meg_

総合スコア10898

投稿2023/06/20 09:11

1行づつプログラミングを解説していますが、それでも何故そうなるのか、納得がいかずその先に進むのが嫌になります。理解ができないので、その箇所を暗記という気持ち悪いことをしなくてはなりませんでした。

1回で全て理解しようとしていませんか?何回か同じ書籍を読むことで理解できるようになれば良いと思います。初回で「難しいな」と思ったら一旦読み飛ばして、後で読み返すと不思議とすんなり理解できたりします。
1冊まるまる全ての解説が自分にとって分かりやすいことは稀なので、分からない箇所は他の書籍やサイトの説明にあたると良いです。同じ内容を様々な見方(視点)で解説されると理解が深まるかと思います。

また、人によっては書籍よりも動画学習の方が向いていることもあるのでCourseraなどのオンライン学習はどうでしょうか? 教え方もトップダウンが分かりやすいのか、ボトムアップが分かりやすいのか人によって様々ですので色々試すのも良いかと思います。

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

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

#9

thkana

総合スコア7733

投稿2023/06/20 14:32

「プログラミング学習の本道」がどうとかは知りませんが、プログラムとはコンピュータを動かす命令であることや、そこで動くコンピュータってナニモノなのか、コンピュータに何ができるのかを知らずに「プログラミング」している/させられている人は結構居そうな気がしています。
その場合、いわゆる「写経」、参考書に書いてあるプログラムをそのまま入力して動いたと喜ぶところから先に進むのは難しいでしょうね。
ただ、その対応として「コンピュータ科学を学ぶ」のかというそれも走りすぎな気はします。少なくとも「近道」ではないと思います。道具として使えさえすればよいので。

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

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

#10

otn

総合スコア86295

投稿2023/06/20 15:38

学習方法は人それぞれというのも皆さんの言うとおり。
・それを実現する仕組みをきちんと解説した方が分かり易いという人
・それはどう見えるか、どうやって使うかに重点を置いて説明した方が分かり易いという人
・・・・・

最初のタイプの人はコンピューターの基礎を学んだ方が後が楽でしょう。万人がそうではない。

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

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

#11

ziopuzzle

総合スコア90

投稿2023/06/21 02:17

プログラミングは目的ではなくて手段です。
学ぶべきは、プログラミングではなくアルゴリズムだと思います。
データXをYにするために必要なことは、自分で考えなくてはいけません。
いくらデータの遷移を追うことができていても、なぜそうしたかが分からなければコピペしかできません。

単に、内部の状態変化を追いたいならデバッガーを使えばいいと思います。
コンピュータの内部動作を理解したいなら、低水準言語について調べれば良いと思います。

記憶領域についての話を深掘りすると、メモリ→IC→トランジスタ/キャパシタ→電子回路→…となるように、原理を深掘りしていくと終わりません。
通信について考えても、TCP/IPや通信時の誤り訂正なども要素として含まれているはずですが、JavaScriptでは単にfetchを使用するだけでデータ取得出来ますよね?

現時点で全てを理解する必要はありません。
「○○をすると○○が起こる」という理解でいいのです。

それでも気になるというのであれば、解決方法は調べ続けるしかないと思います。

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

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

#12

tae256

総合スコア58

投稿2023/06/21 06:39

編集2023/06/21 07:13

①プログラミング学習本が何を指しているかわからないが、言語の本の事だとして、気持ちが全くわからないわけではないが、それくらい読めばわかる事が殆どではないか。
わからないのであれば自分の理解が足りないか、または偶々あなたが手に取った本が悪書だったとか、単にあなたとその本の著者の相性の悪さかもしれない。
何にせよ色々読めばわかる話。
終わり。

②言語の前にCSを学ぶべきかってこと?だったらそれこそ基本情報技術者でも学べばいいと思いますけどねぇ、網羅的なんで。資格も取れるし。
最近の中学校の情報の教科書もいいと思う。学習の近道をしたいのはタイパ主義ってやつすかね。でも近道をしても結局は同じでまた戻ってくるかもしれないよ?知らんけど。
あげてくれた本は読んだ事ないかもしれないわ。

学習背景について
①PHPとジャバスクは学んだ事ないんでわかんないすけど、そこら辺を使うなら通信とかサーバー周りの知識は確かにあった方が理解はしやすそうな予感はありますねぇ、ええ。
あなたの「すべき」が他人ひいては社会の「すべて」でないことは往々にしてあることです。社会は多数派に合わせて営まれているのであなたが少数派で苦労していたとしても主張をして直ちに社会は変わらないしそれを待っている間に死んじゃうかもしれない!コワイ!
自分が歩み寄った方が手っ取り早いと思いますぜ、hehehe。
どうしてもそう言う書籍やwebサイトが社会に必要だと思うのであればあなたが苦しんで学んで習得したのちに満を持して自分が発信する側になればいいのではありませんかね。
知らんけど。

つうかさ。
同じ言語で同じ目的であっても、書き方なんていくらでもあると思うんスよね。それでアルゴリズムの話に通じていくんだけど。
だから先ずあなた個人に話を絞るけどあなたはアルゴリズムとデータ構造を学んだらいいのかもしれないね。知らんけど。
で、書き方がいくらでもあるのでデータの遷移なんかもそれによって変わってくるんだよね。
ある程度経験や知識があればこの書き方はこうなりそうだなとかがわかることもある。分からず疑問なら自分でデバッカーで値を見るなりできるしすることもある。
ただそれだけの話。なんだと思うよ。わたしはね。

いいえ、低レイヤを学ぶことは遠回りでしかありませんね。
そもそもなんで学習するんですか?
学習するのが目的ならそりゃ低レイヤを学んだらいいですよ。
でもなんか作りたいものがあるとか、プログラミングで金を得たいとか思ってんなら低レイヤは止した方がいい。


時代に逆行し、役に立たない、職にならない、金にならないような、そんな一部の低レイヤへと、興味から目指していった者としては「わかりたいなら、わかればいい」と思う。

ので、「何故そうなるか」は簡単に教えてもらおうとするんじゃなくて、自分でデバッカ使ったりして中身を追ったらいいじゃんアゼルバイジャン。

低レイヤって言ってもWindowsを使ってる限りは限度がある。
より低レイヤを知りたいならLinuxの方がOSによる制約も少ないと思う。
先ずはやっすいPCでいいからLinuxをインストールしてみるなりしてみては。
とはいえ、PC98とかの時代ならわからないが、高度に複雑化したこの時代において、全ての仕組みや流れを追うのは不可能だと思うし、不毛でもあると思うナァ。

一般的な高校で化学を履修していたならば半導体がどういう仕組みかとかは学んだ筈なので、そういう一般教養を元に技術書を読み漁るなり、今時風にUdemyやらYoutubeで学ぶなりすればいいじゃん豆板醤。

言っておくが低レイヤを理解することは大変興味深くとも、恐らくは需要が少ないと言うか、他人が求めていることではないと思うよ。

先人たちがシコシコ頑張って難しいことは全部ライブラリとかモジュールとかインターフェースとかフレームワークとかエンジンとかにまとめられてたりしてて、「目的を果たす」のであればそれを「ただ使えればいい」

結果さえ出せればこうあるべきみたいなのはガン無視でも自分は困らないのだから(周りには疎まれるかもしれない。それが回り回って自分も困るかもだが、とりあえずは。)

冷蔵庫も電子レンジも洗濯機も掃除機も、仕組みを知らずともただ使い方を知っていればいいのだから。
寧ろ仕組みは高度であったり隠されていたりして変に改造とかされないし安全!つってね。

疑問を持つこと自体は個人的にいいことだと思う。
職とか金とか需要とか、そんなんじゃ、好奇心はとめらんねえんだ🐰

でも機能が提供されていてその実装が隠蔽されている時にそれを掘り起こして自分、何がしたいん?
という自問自答を忘れるとあっちゅうまに時間が経っちまってヤバいヤバイ。
先人ぶってアドヴァイスするなら「ほどほどに」ね、と。

やっぱり金は得られない道だと思いますよ?
低レイヤ理解の求人とかって、現役で昔の環境を味わってきた人とか、大学でCSやら関連して電気やらすらもみっちり学んだ人を採したいのではないかと思うので…
なんでもない最近の素人が低レイヤをやっても、他人の役にはあんまり立てないと思うよ。
頑張り次第なとこはあるけどさ。
時代に逆行次手の根性論ってヤツさ。

じゃあどうすればいいか。
目的に合わせた最短経路を考えるなり模索してそこに行けばいい。
「まず〜から」ってそれキリがないし、寿命が何倍あっても足りないように思うから。

的外れだったらごめんあさーせ
マサカリやツッコミは真摯に受け止めます

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

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

#13

kurokoSin

総合スコア133

投稿2023/06/21 15:03

①プログラミング学習の本は、入力したデータがどのような過程を辿り、出力データになるか、について説明(データの変化を説明の柱にする)すべきかと思いますがいかがでしょうか。

根本から理解しているのは理想ですが、PHPの言語領域から離れた話になってくると思います。
計算過程を基礎から理解したいのであれば、まずはソースコードを覗いてみてはいかがでしょうか?
PHPであれば、OSSですので「php github」で検索したらソースコードが出てきます。そしてソースコードは主にC言語で書かれています。そしてC言語でもメモリの過程までは厳密に辿れません。そこまで辿りたい場合、ソースコードをアセンブラに直してやっと辿れるレベルです。
PHPを学習するはずが、他の言語を高度なレベルで学習することになり私には本末転倒に思えます。
大半の言語はそういったメモリ管理等の煩わしさを減らすために生まれた言語の認識ですので、そういうものかと割り切って良いと思います。

とはいえ、気になったこと自体は悪くないと思います。突き詰めて勉強したらあなただけの武器になれると思います。

②巷のプログラミング学習の本で勉強する前に、コンピュータ科学を学ぶ方がプログラミング学習の近道だと思いますがいかがでしょうか。

目指すところのレベルによると思います。
"高効率で動く巨大なプログラム"を作りたいのであれば必要なスキルだと思いますが、"ボタンを押したらテキストボックスに「A」を表示する"ところを目指していたら遠回りになります。

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

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

#14

xebme

総合スコア1109

投稿2023/06/23 20:19

計算モデル

プログラミング言語のパラダイムによっては「記憶領域」を考慮しないものがあります。計算モデルによってプログラミング言語を分類したらどんな世界が見えるのか。

計算モデルとプログラミング

あなたが考えているのは「命令型計算モデル」に相当します。本は入門程度のやさしい内容です。ぜひ読んでください。

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

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

最新の回答から1ヶ月経過したため この意見交換はクローズされました

意見をやりとりしたい話題がある場合は質問してみましょう!

質問する

関連した質問