# プログラミングで詰まっている所
tags: 情報
satoru-takeuchi.hatenablog.com
流行りなのかな?ということで考えてみます
プログラミング歴
こんなのでも情報系の学部に所属しています
- 大学1年冬...アルゴリズムの授業でPythonを扱った. 二次元配列が分からなかったので挫折して放置
- 大学2年夏...機械学習をやろうと思ってPythonをやった. 二次元配列は理解できたがオブジェクト指向がよく分からなかった. ただライブラリの関数を実行していただけだった
- 大学2年秋...C言語を授業でやった. ポインタというテクニカルタームを覚えた. 理解はしていなかった
- 大学3年春...Lispを書いて再帰を理解した気になった. 関数型言語というテクニカルタームタームを覚えた. 理解はしていなかった
- 大学3年秋(今)...コンピュータ・アーキテクチャ, OS, デジタル回路を勉強したので内部の処理は大体理解した気がしている
理解した気になっていた所
ポインタとかアドレスとか配列とか
コンピュータのメモリ上に変数などが置かれると分かるまではよく分かっていなかった
文法的に*
や&
が付くものだと思っているだけで本質的に配列が何なのかなどを理解していなかった
理解した気になっている所
型推論
型推論と動的型付けの違いがよく分かっていないと思う
ふわふわとした「型推論」について話しているだけ
GC
「RustはGCがない言語です. 素晴らしいです」
うん. GCはコストのかかる処理だからない方が良いかも知れない. でもなんで他の言語はそんなにコストがかかるのにGCがあるのだろう. 書きやすいから?
そもそもGCがのコストって実装もしたことがないからなぁ...分かりたいと思っている
関数型プログラミング
OCamlもLispも書いたことはあるけど, それで関数型プログラミングを理解したことにはならないと思う
本質みたいなのはまだよく分かっていない
これがわかりやすかったけど, 結局大規模なソフトウェアを書かないと本当の良さは分からなそう
ラムダ計算
無名関数は使っていて便利だとは思うけど, それがどう数学的に有用なのかは分かっていない
OOP
オブジェクト指向がメモリをどう使っているか, 抽象化をしているかはわかった気になっているだけで, 結局コードを書かないと分かった気になったままだと感じている
Web
Web系の会社でインターンしたのに未だによく分かっていません
ソフトウェア
ソフトウェアを作るってなんなのだろうか
そもそもソフトウェアが何なのかよく分かっていない
今の自分にアドバイス
コードを書く
コードを書かないと理解は出来ない
自分ではアルゴリズムを理解した気になっても, 本当にそれが理解できたかはコードに落とせるかで判断した方が良いという話
後, 書けるコードばかりを書いていっても書けるコードは増えないので, ある程度書けるようになったら他人のコードを読むことを覚えたほうが良いと思う
理屈も勉強した方が結局早い
理屈とはハードウェアの話から実際にどうソフトウェアで実装されているかまで
コンピュータ・アーキテクチャとOSまで理解できたらC言語とか別にいらない気がするし, 他もおそらくそう
でも理屈を勉強するのと一緒にコードを書くのが一番なのでそれをやるべき
分かっていないのが分かってきてからが本番かも知れない
最初は分かったと思い込んでしまうものだけど, それが徐々に分かってないに変わる時が来てからが本番なのかも
分かったつもりで色々話してしまうのが初心者ならば(周りを見ていてもそうだけど), 分かったつもりでいることを分かったことにできるのが中級者な気がする
上級者は人に分からせるのかな. 例えばC言語を作ったりして.
まとめ
プログラミングを2年近くやっていてもこのザマなのだけど, 未来の自分がどうにかしてくれるはずだと思って生きています