MML
  • 数学プログラミング置き場
  • 数学記号記法一覧
  • 機械学習のための数学
    • 確率論
  • 機械学習・データサイエンス
    • 1. 機械学習・データサイエンス(概要)
    • 2. 機械学習
      • 2.1. 機械学習をこれから始める人へ
      • 2.2. 回帰問題
        • 2.2.1. 線形回帰の基礎
        • 2.2.2. 線形回帰モデルと正則化
        • 2.2.3. 線形基底関数モデル
          • いろいろな基底関数
        • 2.2.4. ベイズ線形回帰モデル
        • 2.2.5. カーネル回帰
        • 2.2.6. ガウス過程回帰
        • 2.2.7. 一般化線形モデル
        • 2.2.8. 一般化加法モデル
        • 2.2.9. 分位点回帰
        • 2.2.10. 3層ニューラルネットワーク
        • 2.2.11. 深層学習
        • 2.2.12. 深層学習とガウス過程
      • 分類問題
        • 線形判別分析
        • SVM
        • カーネルSVM
      • 強化学習
    • 3. データサイエンス
      • 主成分分析
      • 白色化
      • 低ランク行列近似
      • 行列補完
      • NMF
      • スパースモデリング
        • LASSO
          • FISTA
          • ADMM
        • 全状態探索法
    • 4. ニューラルネットワーク
      • CNN
      • GAN
      • VAE
      • GNN
      • word2vec
    • 5. ベイズ推論
      • 確率
      • 確率分布
      • ちょっとだけ振り返って
      • MCMC
      • ギブスサンプリング
      • 変分推論
  • 連続最適化
    • 1. Taylor展開と関数近似
    • 2. Taylorの定理と誤差の評価
    • 3. 最適化問題
    • 4. 直線探索法
      • 4.1. 最急降下法
      • 4.2. Armijo条件・Wolfe条件
      • 4.3. ニュートン法
      • 4.4. 共役勾配法
        • 4.4.1. 原始的な共役勾配法
        • 4.4.2. PRP法
        • 4.4.3. HS法
      • 4.5. 準ニュートン法
        • 4.5.1. DFP法
        • 4.5.2. BFGS法
        • 4.5.3. L-BFGS法
        • 4.5.4. Bryoden family of methods
        • 4.5.5. Broyden法
    • 5. 確率的最適化
      • 5.1. 確率的勾配降下法(SGD)
      • 5.2. 確率的準ニュートン法(SQN)
  • 行列計算
    • QR分解
    • コレスキー分解
    • 一般化コレスキー分解
    • 固有値分解
    • 一般化固有値問題
    • 特異値分解
  • その他
    • 位相限定相関法
  • カーネル法
    • カーネル法(概要)
  • Riemannian最適化
    • Riemann多様体って?
    • Riemannian最適化(概要)
    • 概説
    • 詳説
      • 解析学
      • 線形代数学(反変性・共変性・不変量)
      • テンソル解析
      • リーマン積分と微分形式
      • 位相空間論
      • 多様体論(解析幾何学)
      • Riemann多様体
  • プログラミングサイドブック
    • はじめに
    • Step 0. 勉強の仕方
      • いつ始める?どれくらい勉強する?
      • どうやって勉強する?
      • どこから手をつけたらいい?
    • Step 1. インターネットで調べる
    • Step 2. コンピュータの仕組みを学ぶ
    • Step 3. 開発環境を整える
    • Step 4. プログラミング言語を学ぶ
    • Step 5. 次のステップへ進むには
    • Step 6. 情報科学を学ぶ
  • プログラミング
    • プログラミング(概要)
    • システムの構成
    • サーバーのセットアップ
      • OSセットアップ
        • ユーザの作成
        • SSHの設定
        • ファイアウォールの設定
      • ドメインの取得と設定(Google domain)
    • Dockerによる仮想化
    • サーバーサイド(golang/gin)
    • リバースプロキシの設置(nginx)
    • SSL/TLS(Let's Encrypt)
    • フロントエンド(Elm)
    • Authentication(Firebase)
    • DB(MySQL)
    • KVS(Redis)
  • 数学勉強ノート
    • 0. 数学勉強ノート(概要)
    • 1. 第1群(基礎1)
      • 1.1. 集合
      • 1.2. ファジィ集合
      • 1.3. 論理学
      • 1.4. 位相
      • 1.5. 代数学
        • 1.5.1. 群
        • 1.5.2. 環
        • 1.5.3. 体
      • 1.6. 多様体論
    • 2. 第2群(基礎2)
      • 2.1. 線形代数学
      • 2.2. 解析学
        • 2.2.1. 常微分
        • 2.2.2. 全微分/偏微分
        • 2.2.3. 反変・共変と不変量
        • 2.2.4. リーマン積分
        • 2.2.5. 外微分
        • 2.2.6. ベクトル解析
      • 2.3. 複素解析学
      • 2.4. 圏論
      • 2.5. 測度論
      • 2.6. 確率論
    • 3. 第3群(情報科学)
      • 3.1. 情報理論
      • 3.2. 通信符号理論
      • 3.3. 暗号理論
      • 3.4. グラフ理論
    • 4. 第4群(基礎3)
      • 4.1. 位相幾何学
      • 4.2. 微分幾何学
      • 4.3. 関数解析学
      • 4.4. 偏微分方程式論
      • 4.5. 数値解析学
        • 4.5.1. 常微分方程式
        • 4.5.2. 偏微分方程式
        • 4.5.3. 固有値問題/特異値分解
      • 4.6. 数理統計学
    • 5. 第5群(物理学)
      • 5.1. 古典力学
      • 5.2. 剛体力学
      • 5.3. 流体力学
      • 5.4. 解析力学
      • 5.5. 電磁気学
      • 5.6. 相対性理論
      • 5.7. 熱力学
      • 5.8. 統計力学
      • 5.9. 量子力学
    • 6. 第6群(電気・機械工学)
      • 6.1. 電気回路学
      • 6.2. システム制御理論
    • 7. 第7群(基礎4)
      • 7.1. 情報幾何学
      • 7.2. 確率解析
  • 書籍メモ
    • 書籍メモ(概要)
  • 論文メモ
    • 論文メモ(概要)
    • 線形代数
      • The Matrix Cookbook
      • ON THE EARLY HISTORY OF THE SINGULAR VALUE DECOMPOSITION
      • The tensor rank decomposition
    • 行列分解
      • Probabilistic Matrix Factorization
      • Probabilistic Matrix Factorization with Non-random Missing Data
      • Graph Regularized Non-negative Matrix Factorization for Data Representation
      • Alternating least squares for personalized ranking
    • 連続最適化
      • Quasi-Newton Methods: Superlinear Convergence Without Line Searches for Self-Concordant Functions
    • 確率・統計
      • Statistical inference of Langevin distributionfor directional data
      • Bayesian Inference over the Stiefel Manifold via the Givens Representation
      • あとで読む(Langevin distribution)
    • Riemannian最適化
      • A Broyden Class of Quasi-Newton Methods for Riemannian Optimization
      • Riemannian stochastic quasi-Newton algorithm with variance reduction and its convergence analysis
      • Primal-Dual Optimization Algorithms over Riemannian Manifolds: an Iteration Complexity Analysis
      • Extending FISTA to Riemannian Optimization for Sparse PCA
    • RCD空間
      • On the geometry of metric measure spaces. I
      • On the geometry of metric measure spaces. II
      • Cohomology and other analyticalaspects of RCD spaces
      • Untitled
  • 雑記帳
    • 球面幾何(楕円幾何)
    • 双曲幾何
  • なんかの部屋
    • データの表現について
Powered by GitBook
On this page
  • どうやって勉強する?
  • インターネットで調べる
  • 公式/非公式チュートリアル
  • 公式ドキュメント
  • 入門サイト
  • 海外のサイト
  • 注意すべきこと
  • 他のプログラマに聞く
  • 不特定多数に聞く
  • 相手を決めて質問する
  • 入門書を買う

Was this helpful?

  1. プログラミングサイドブック
  2. Step 0. 勉強の仕方

どうやって勉強する?

Previousいつ始める?どれくらい勉強する?Nextどこから手をつけたらいい?

Last updated 5 years ago

Was this helpful?

どうやって勉強する?

現在ではプログラミングを勉強するには様々な方法がある。どのやり方が正しいとか王道だとかはないので、自分に合った方法を探せばよい。ここで説明するのはあくまで参考であり、一般的に重要になる項目である。

インターネットで調べる

もっとも基本的にしてもっとも難しい技術である。あなたは「プログラミング 入門」などと検索欄に入力して調べたかもしれないが、あっという間に情報の洪水に溺れたことだろう。プログラミングにおいてはその情報の洪水の中から本当に必要な情報だけをすくい上げるリテラシーが必要になる。

プログラミングについてインターネットで調べるのは、特に初心者のうちがもっとも難しい。なぜならば

  1. 初心者には正しい情報へたどり着くための専門用語の語彙が備わっていない

  2. 初心者には正しい情報と誤っている情報の区別がつきにくい

  3. 初心者が調べるような簡単な情報は、他の初心者が書いたレベルの低い解説で溢れている

といった現状があるからだ。

正しい情報を見分けるのは熟練のプログラマでもときどき苦労することだが、ポイントは誰かが発信した情報を他者が更正できる仕組みが備わっているかどうかである。不特定多数の人間が閲覧可能であり、なおかつ誤りを指摘できる状態が維持されているならばある程度は信頼してよい情報源だといえる。

初心者がインターネットから比較的確実にたどり着ける情報についていくつか紹介しておこう。

公式/非公式チュートリアル

最近ではプログラミング言語やフレームワークには公式のチュートリアルが存在するケースも増えてきた。また公式でなくとも、有志による良質なチュートリアルが存在することもある。

たとえば「python tutorial」で検索すると、Python という言語について入門書と遜色がないレベルで詳細に網羅した公式チュートリアルに容易にたどり着くことができる。

公式チュートリアルは機能について網羅的に紹介する目的で書かれており、あまり初心者向きではないことが多い。公式チュートリアルが難しいとか不十分だと感じたなら、他の非公式チュートリアルか入門書を探すとよい。

公式ドキュメント

どんなプログラミング言語やフレームワークについての情報も、公式のドキュメントが正しいとみなされる。もしプログラムが公式ドキュメントと異なる動作をしたらそれはバグなので、発見したら公式に報告すること。

入門サイト

海外のサイト

注意すべきこと

良質な入門サイトが増えてきた一方で、最近では情報の適正な価値を判断できない初心者を食い物にした悪質なビジネスも存在する。初心者が置かれている状況を悪用すれば「レベルの低い情報を適当にかき集めて初心者に高額で売りつける」という詐欺まがいの商売は簡単に思いつく。いわゆる情報商材というものだ。

もちろん情報の価値は買う者が決めるものであって、どんな情報でもあなたが納得して買うならばそれでよいのだが、良質な専門書でも相場は1冊あたり2,500円〜6,000円程度だということを知っておこう。つまり月3万円の授業料を払うことは毎月5, 6冊の専門書を買うことと等価であり、それを上回る価値がある情報かどうか一度冷静になって考えたほうがよい。

個人レッスン等についてもなるべく警戒したほうがよい。大抵の場合プログラマは人に教えるよりも普通に働いたほうが給料がよいので、あなたに根気よく教えてくれる人は、

  1. 普通に働いてもそこまで給料がよくない程度の技量である

  2. 普通に働くよりも儲かるように高額の授業料を設定している

という可能性がつきまとう。もちろん人に教えるのが好きだという熱心な教師による、善意とボランティア精神に基づく良心的な個人レッスンも存在するだろうが、基本的に本職のプログラマにはあなたに付きっきりで懇切丁寧に教えるメリットはない。初心者をカモにする人間がいること、自分はカモにされるかもしれないことを心に留めておいたほうがよい。

他のプログラマに聞く

「本職のプログラマにはあなたに付きっきりで懇切丁寧に教えるメリットはない」と先ほど断言したが、その一方でプログラマどうしは頻繁に情報交換を行っているので正しい情報にたどり着くためのアドバイス程度なら喜んで行う人が多い。

プログラミングの世界では互助の文化が比較的根付いているし、プログラミングを真剣に学んだことがある人ならば大抵は学ぶことの難しさと辛さを知っているので、初心者に冷たくすることは少ない。Twitter などで情報発信を行なっているプログラマであれば、初対面であっても快く情報提供してくれることだろう。

ちなみにプログラマがよくいる SNS は Twitter や Slack である。Qiita という情報共有に特化したサービスや GitHub というソースコードの共有と管理を行う SNS もある。また質問サイトを利用するつもりなら Stack Overflow というプログラマ御用達の質問サイトを利用したほうがよい。他の質問サイトは概して回答者のマナーが非常に悪く、回答自体も質が低いことが多いためおすすめしない。

不特定多数に聞く

簡単な質問なら Twitter がもっとも適している。Twitter で多くのプログラマと相互フォローの関係になっていれば「OOがわからないのですが、どなたかご存知の方教えてください!!」などとヘルプを発信すれば大抵は誰かが教えてくれる。残念ながら誰も教えてくれなかったときは諦めて自分で調べよう。

相手を決めて質問する

SNS に限った話ではないが、実際に誰か相手を決めて聞いてみようと思うなら最低限の礼節はわきまえること。すなわち

  1. 最低限自分で調べたあとで質問する

    • 繰り返すが、大抵の人間にはあなたに手取り足取り教える理由はない

  2. 挨拶する

    • 「はじめまして」など

  3. 自分が初心者であり助けを必要としているという事情を説明する

    • 「プログラミングの勉強を始めたばかりで、自分で調べただけではどうしてもわからない点があって」

    • 「最初の一歩を踏み出すのが不安なのでアドバイスをいただきたく」など

  4. なぜその人に質問することにしたのか理由を述べる

    • 「詳しそうな方だとお見受けしたので」など

  5. いったん許可を取る

    • 「質問してもいいですか」

くらいはすること。もしも「いいですよ」と返事が返ってきたならば

  1. 自分が本当に聞きたい内容を相手に伝える努力をする

    • あなたが初心者であるならば、あなたの知識や語彙は不足しており質問を明確に表現することは難しいだろう

    • 相手はその事情を考慮してあなたの質問をなんとか理解しようとしてくれるだろうから、過度に恐れる必要はない

  2. 質問に答えてもらったら必ずお礼を述べる

    • 「ありがとうございます」

という姿勢を忘れないこと。

どの程度の礼儀正しさで接するべきかはあなたの性格や質問する相手の性格にもよるだろうが、他人に質問するという選択肢とその方法を本書を読んで知ったのなら、他のプログラマに失礼な態度を取ることのないように。

入門書を買う

入門書に関しては好みや相性があるので一概には言えない。書店などでパラパラとめくってみて自分でもっともわかりやすいと思う入門書を選べばよい。

もう一度書いておくが、良質な専門書の相場は2,500円〜6,000円くらいの価格帯である。経験的に、2,000円を切ると書いてある内容が薄っぺらになりがちで、4,000円を超えると今度は辞書のように詳しすぎになる。詳しすぎる本は入門書というよりは中級者以上に向けたリファレンスの扱いなので、初心者が読んでわかるような構成にはなっていないことが多い。

初心者向けの良書は経験的にだいたい2,500円〜3,800円くらいの価格帯に多い。

誰かに何万円もする教材を買わされそうになったらほぼ間違いなく悪質な商材なので注意すること。

Python チュートリアル — Python 3.10.0b2 ドキュメント
Logo