回答編集履歴

2

突っ込んだ話を追加

2021/01/03 18:09

投稿

A_kirisaki
A_kirisaki

スコア2853

test CHANGED
File without changes

1

突っ込んだ話を追加

2021/01/03 18:09

投稿

A_kirisaki
A_kirisaki

スコア2853

test CHANGED
@@ -17,3 +17,87 @@
17
17
 
18
18
 
19
19
  ついでにですが、プログラミング言語について理解するには「プログラミング言語そのもの」を実装してみると良いかもしれません。すごく難しそうに聞こえますが、すごく簡単な言語だったら自分の手で実装できます。そうすると特定のプログラミング言語によらない、プログラミング言語の知識がつくことになりますのでわたしとしては是非オススメしたい方法です。
20
+
21
+
22
+
23
+ ### 「IT 系の会社」という幻想
24
+
25
+ IT 系の会社と申されましたが、将来は全てが IT 系の会社になっていくのではないかと考えています。どういうことかというと今までは IT ができる会社がそうでない会社のシステムを請け負って作ることが多かったのですが、プログラミングのノウハウが標準化され、それが日本にも広がるにつれ「普通の企業が IT を活かしてサービスを作る」ということも多くなってきました。また**スタートアップ**という会社のあり方もこの動きに拍車をかけていますし、政府はスタートアップに対して支援も行っています。
26
+
27
+
28
+
29
+ こういった流れの中で「IT がわかること」はだんだんと差別化にならなくなってきています。もはや「IT はわかって当然」になりつつあるのです。そうした中 IT 系の大学、IT を売りにした企業に進むというのは人一倍コンピューターに詳しくないといけません。一つプログラミング言語を書けただけでは全く話にならないでしょう。数学もできる必要があります。すごくできる必要があります。
30
+
31
+
32
+
33
+ もう一つの道はコンピューターにそこそこ(プログラミング言語が 2, 3 書ける程度)詳しくなっておいて、その他になにか特別な知識を持つことです。例えば会計の知識を持てばプログラミングと合わせて会計ソフトの企業に就職したり、もしくは自分で起業するなんていうこともできるでしょう。農業に詳しかったら農家の人を助けるソフトウェアが書けるかもしれません。このように IT のやり方は「IT に詳しくなる」だけではないのです。
34
+
35
+
36
+
37
+ ### それでもコンピューターに詳しくなるために
38
+
39
+ とにかくコンピューターとプログラミングを好きになりましょう!いや、もうすでに虜のはずです。すぐにコードを書いて、試していじってください。今日日コンピューターはすぐ壊れません。壊れたら直すのもコンピューターの仕組みを知るよい機会です。きっとそのうち寝ても醒めてもコンピューターのことしか考えられなくなっているはずです。
40
+
41
+
42
+
43
+ #### 具体的な方法
44
+
45
+ そうは言っても具体的な方法はやっぱり知りたいですよね。特に追加で質問をもらった「コンピューターの仕組み」とか。どうやって勉強したか書いてみます。
46
+
47
+
48
+
49
+ ##### 本
50
+
51
+ 本はネットの情報と違ってそう簡単に修正できない分、まともな内容が書いてあることが多いです(そうでないことも多いが……)。おすすめの本をいくつか挙げておきます。
52
+
53
+
54
+
55
+ [『CODE コードから見たコンピュータのからくり』](https://www.amazon.co.jp/gp/product/4891003383/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&psc=1)Charles Petzold 著, 永山 操 訳, 日経BPソフトプレス
56
+
57
+ コンピューターはなぜ 0 と 1 を使うのか、0 と 1 を使ってどう整数や文字を表したりその計算を行うのか、その仕組みはどうやって実現しているのか。難しそうに見える概念を簡単な部分に分けてていねいに解説し、「コンピューター」という概念を詳しく説明してくれます。
58
+
59
+
60
+
61
+ [『ネットワークはなぜつながるのか』](https://www.amazon.co.jp/%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E3%81%AF%E3%81%AA%E3%81%9C%E3%81%A4%E3%81%AA%E3%81%8C%E3%82%8B%E3%81%AE%E3%81%8B-%E7%AC%AC2%E7%89%88-%E7%9F%A5%E3%81%A3%E3%81%A6%E3%81%8A%E3%81%8D%E3%81%9F%E3%81%84TCP-IP%E3%80%81LAN%E3%80%81%E5%85%89%E3%83%95%E3%82%A1%E3%82%A4%E3%83%90%E3%81%AE%E5%9F%BA%E7%A4%8E%E7%9F%A5%E8%AD%98-%E6%88%B8%E6%A0%B9/dp/4822283119/ref=sr_1_2_sspa?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&dchild=1&keywords=%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E3%81%AE%E4%BB%95%E7%B5%84%E3%81%BF&qid=1600068641&s=books&sr=1-2-spons&psc=1&spLa=ZW5jcnlwdGVkUXVhbGlmaWVyPUExTTRZUVVNTFpWS1ZYJmVuY3J5cHRlZElkPUEwNTMxMzU1MURESUQ2S1FWT1lBNyZlbmNyeXB0ZWRBZElkPUFSRjdYQktEREgwRlAmd2lkZ2V0TmFtZT1zcF9hdGYmYWN0aW9uPWNsaWNrUmVkaXJlY3QmZG9Ob3RMb2dDbGljaz10cnVl)戸根 勤 著, 日経BP
62
+
63
+ ネットワークの仕組みをブラウザに URL に打ち込んで サーバに届くまでをテーマに、上の層から下の層まで一通り巡って解説していきます。普段意識せずに使っているインターネットがどういう考え方でレイヤー化されているか、どのようにして通信を行っているかが技術自体にそれほど深入りせずにわかるようになっています。現代のプログラミングにはネットワークの知識も必須だと思われますので読んでおいて損はないでしょう。
64
+
65
+
66
+
67
+ [『C言語によるはじめてのアルゴリズム入門』](https://www.amazon.co.jp/%E6%94%B9%E8%A8%82%E7%AC%AC4%E7%89%88-C%E8%A8%80%E8%AA%9E%E3%81%AB%E3%82%88%E3%82%8B%E3%81%AF%E3%81%98%E3%82%81%E3%81%A6%E3%81%AE%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0%E5%85%A5%E9%96%80-%E6%B2%B3%E8%A5%BF-%E6%9C%9D%E9%9B%84/dp/4774193739/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&dchild=1&keywords=C%E8%A8%80%E8%AA%9E%E3%81%AB%E3%82%88%E3%82%8B%E3%81%AF%E3%81%98%E3%82%81%E3%81%A6%E3%81%AE%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0%E5%85%A5%E9%96%80&qid=1600071722&sr=8-1)河西 朝雄 著, 技術評論社
68
+
69
+ 昨今競技プログラミングが注目されつつありますが、そのアルゴリズム(算法)を C 言語で実装しましょうというものです。リストなどのデータ構造もポインタを使って自分の手で実装しなければいけません。アルゴリズムやデータ構造なんて便利なライブラリや実行環境に任せればいいじゃないか、と思うかもしれませんが、中身を知って使うのとそうでないのとではパフォーマンスに差が出たり、違った結果が出たりしてしまいます。また、ライブラリとちょっと違うことをしたくなって自分で実装しなければいけなくなった時困ることになります。
70
+
71
+ この本では基本的なアルゴリズムを C 言語で実装する方法が書いてあります。グラフィックなど多少毛色の変わったものもありますが、良い息抜きになるでしょう。他の便利な言語で実装するのも良いのですが、プリミティブな C 言語で実装することによりアルゴリズムとコンピュータを結びつける実力がつくと思います。
72
+
73
+
74
+
75
+ [『C言語ポインタ完全制覇』](https://www.amazon.co.jp/C%E8%A8%80%E8%AA%9E%E3%83%9D%E3%82%A4%E3%83%B3%E3%82%BF%E5%AE%8C%E5%85%A8%E5%88%B6%E8%A6%87-%E6%A8%99%E6%BA%96%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9E%E3%83%BC%E3%82%BA%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA-%E5%89%8D%E6%A9%8B-%E5%92%8C%E5%BC%A5/dp/4774111422/ref=sr_1_2?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&dchild=1&keywords=C%E8%A8%80%E8%AA%9E+%E3%83%9D%E3%82%A4%E3%83%B3%E3%82%BF&qid=1600072585&sr=8-2)前橋 和弥 著, 技術評論社
76
+
77
+ メモリを扱うプログラミングをする上で避けて通れない概念が「ポインタ」です。その中でも C 言語のポインタを徹底解説している本が本書になります。「C 言語に配列は存在しない」とのっけからぶち上げ困惑させますが、その理由をていねいに解説し、ポインタの型宣言、ポインタのポインタ、メモリ上の配置などコアな内容に触れていきます。内容は多少難しいですが、メモリの扱いを把握して置かなければプログラムの挙動を最終的に把握することは難しく、避けては通れない道であると考えます。ポインタとメモリについて理解を深め、ソフトウェアエンジニアとして差をつけましょう。
78
+
79
+
80
+
81
+ ##### ネット
82
+
83
+ 一番確実な情報源は**ソースコード**です。ぜひ使っているライブラリのソースコードを読みに行きましょう。最初は読むのがとてもつらいかもしれませんが、エラーがでた時きちんとライブラリを追って読みに行く癖をつけるとプログラムの仕組みがわかるようになってきます。現代はソースコードが GitHub ですぐ手に入り、しかも全文検索出来たりする時代です。活用していきましょう。
84
+
85
+
86
+
87
+ 次に確実な情報源は**ドキュメント**です。わたしもめんどくさがってそのへんの記事読んで済ますことが多いですが、それで痛い目をみることがよくあります。ドキュメントを読みに行きましょう。英語を読むのが大変かもしれませんが、大学受験の良い勉強だと思えばしめたものです。
88
+
89
+
90
+
91
+ それ以外の情報源は**あなたが判断するしかありません**。つまり実力が無いと何が正しいのかわからないのです。オンラインスクールも下手なことは出来ないので間違ったことは教えないとは思いますが、あまり突っ込んだところまでは教えてくれない可能性があります(この回答もそうだよ)。
92
+
93
+
94
+
95
+ ##### 壊してもよいコンピューターを手に入れる
96
+
97
+ 今日日 5 万円もあればそれなりのノート PCが中古で買えます。これに Linux を入れて遊びましょう。自分で Linux を入れてみるのはコンピューターの仕組みを垣間見る良い勉強になります。また、壊しても良い環境を手に入れると色々試すのに臆することがなくなります。ガンガン壊しそうなコードを書いて試すことが出来ます。その過程で得るものは大きいでしょう。
98
+
99
+
100
+
101
+ ##### C 言語をやる
102
+
103
+ 現状コンピューターの仕組みを知る上で避けて通れないのが C 言語です。世の中のほぼすべての OS がこれで書かれているからです。そうでなくともメモリを直接扱うなどの操作は C 言語がやりやすい(**安全とは言っていない**)でしょう。コンピューターのデータはほぼメモリを通ってやり取りされますから、メモリの操作の仕方や仕組みを学ぶということは他のプログラミング言語でも通用するコンピューターの知識を学ぶということでもあります。