プログラミングを学ぶ
public.icon
①ProgateでHTML/CSS→JavaScript→jQueryの順にレッスン
②データベース、コマンドライン、開発環境構築をProgate→ドットインストールあたりで学ぶ
③PHP/Ruby→Rails/Javaあたりのどれかに絞って学ぶ
④試しに何か作る
Atcoder
leetcoder
最近エンジニアじゃないけど、プログラミング始めたい人をよく見る。そんな人にはJavaScriptをやり始めるのがとてもおすすめ。最近は機械学習が流行ってるからか、Pythonを勧めるのも見かける。けど、エンジニアじゃない人はJavaScriptの方が役に立つ場面が非常に多い。Googleスプレッドシートで自動化できるGoogle App ScriptはJavaScriptベースの言語だからこれを知ってるだけでかなり高度な自動化ができる。私も業務に必要な幾つかの作業はこれによって自動化したりしています。あとはブラウザで動く言語はJavaScriptだけなので(一旦WASMは置いておくと)、サーバー、クライアントはJavaScriptだけで完結します。Chrome拡張もJavaScriptで書けるし、なんならiOS/Androidのスマホアプリ開発もJavaScriptでできる。あとは、どこで学ぶかだけど、結構難しい。最初はProgateのJavaScriptのコースをやって基本を掴むのが良いかも知れない。その後は自分のやりたいことを実現するのが良さそうだけど、何も知らないとどうやればいいのか分からなくなって挫折してしまう。
プログラミングスクール通うくらいなら応情取った方がよさそう(業務独占資格ではないが) 一応、自分もこの歳になって、それなりに成功した部類に入ると思うから書いとくと、プログラミングやるなら情報系の(もちろん、まともなカリキュラムがあるとこ)学部/学科入っとくのは良いと思う。 ただ、一体何が基礎だろうかとか言わないと、なんかマウンティングぽくなるので、書き出してみる。
1. データ構造とアルゴリズム(計算量込み)
これはまだ独学しやすい方だと思うけど、やっちゃまずいデータ構造の選択して性能悪化させるとかある程度わかる力付けることにつながる。特に木構造は重要。あと、O(n)、O(n log n)とかのいわゆるO記法も。
2. グラフ理論
いや、これが基礎か怪しいし、自分もこの辺の履修度びみょーなんだけど、現実の問題はグラフ上の問題として定式化可能な事はわりかし多いので(たとえば、フォロワー関係とか)、それをRDBMSにエンコードするにせよ、基礎の基礎くらいは知っといた方が楽だと思う。
3. オートマトンと言語理論
これはどちらかというと思考の道具としてかなと思う。正規表現 <-> NFA <-> DFA みたいな、対応関係とかは、インプットしておくと、入力に対してO(n ^ 2)とかの効率悪い正規表現書かずに済むとかにつながったり。
4. オペレーティングシステムの基礎
いや、これも私は色々怪しい理解な気がするんだけど、ユーザーモードLinuxにシステムコール追加したりした実験は、カーネル理解するのに多少なりとも役立った気がする。
5. プログラミング言語論的なもの
言語オタクにならなくていいんだけど、多くのものは木(抽象構文木)で表せるって理解しとくと、必要に応じてテキトーにプログラム変換かますいい加減プログラムとかサクっと書ける。
6. 分散コンピューティングとか
この辺は、講義で履修するシステムで、直接、今に使われてるのは案外少ないんでは思うけど、よーするに新しいぽい何かはRPCの変種なのね、とか、雑にとらえるのには楽だと思う。
7. コンパイラ系授業
簡単なマイ言語くらいは自作出来るようになっとくと、新しい言語出てきても、まあ適応するのにあんまり苦労しない傾向があると思う(これは私の特質であって、バイアスかかってるかも)
人によって、「他のも要るやろ」とか「これは使ってへんのやけど」とかあると思うけど、CS系科目一通りやっとくと「一見の新しさに振り回されない」態度は身に付きやすい気がする。本当に新しいものは意外と少ないのだという話。あ、ツッコミがあったのでぶら下げておくと、情報系大学いっとけばOKというわけじゃなくて、選択として無難って話で、ついでに言うなら、当然ながら実際にちゃんとコード書いて学ぶのも必須だと思います。
ヤバいサイト見つけちまったかもしれん。52個の主要プログラミング言語について、練習問題がそれぞれ100個くらいあってCLIまで整備されてる。で無料。
プログラミング言語を習得するときは、まず一つの言語をすごく深く理解すると、コンピューター自体の理解が深まったり自信がついて開発に抵抗がなくなるから、これが最優先。科目とか分野もそれと同じな気がするんだよな。一回ひとつの分野だけでも伸ばすと他の分野も理解しやすくなる。