IT

プログラミングは何から始めればいいのか

これはプログラミングをやったことはないけどプログラミングに興味がある人向けの記事です。
プログラミングと一言で言っても、言語の種類は膨大にあり、間違った言語を学んでも役に立たないことが多いです。したがって、自分がやりたいことを達成できる言語を勉強するべきです。そのための指針を示したいと思いこの記事を書かせていただきました。

お手軽に会社で役に立つことがしたい

結論:エクセルで使える言語であるVBAを勉強するのがお手軽です。VBAは記事や本がかなり多いので学習に困ることもないと思います。
VBA(Visual Basic for Applications)はエクセルの中で動く言語です。エクセルマクロの開発や、エクセルで使える独自関数の定義などに使えます。
VBAのメリット:
  • エクセルマクロや独自関数が作れる
  • 他の言語より簡単
  • 日本語の記事、本が圧倒的に多い
  • エクセルが入っていれば動くので、会社PCですぐに使える
VBAのデメリット:
  • いくら勉強しても、できることには上限がある
  • 極めて複雑な数値計算はできないことがある
  • 文法が若干特殊であり、他の言語に応用が利きにくい

もっと複雑な数値計算もゴリゴリやりたい、汎用的なプログラミング言語をやりたい

結論:そんな方にはPythonがおすすめです。
機械学習、深層学習によってPython人気は沸騰しています。PythonはCやJavaと比べてすごくわかりやすいです。最近は日本語ドキュメントも増えてきて、学習コストも下がっています。
Pythonのメリット:
  • 主観ですが、CやJavaなどと比べてすごくわかりやすい
  • 高水準言語であるため、メモリの状態を考える必要は(最初は)ない
  • 機械学習、深層学習がもっとも活発な言語と思われる
  • VBAでは不可能な複雑な計算が可能
  • Pythonは多くの分野に応用が利く
Pythonのデメリット:
  • CやJavaScriptより低速(numpy, CythonなどPythonでCを使う方法もある)
  • 大規模システム開発ではC++、C#、Javaのほうが良さそうな印象(速度のため)
  • Web開発も可能ですが、他の言語(Node.js, ruby on rails)のほうが若干向いている気がします
  • PythonにはDjango, FlaskなどのWebフレームワークがありますがイマイチです
rubyとの比較では、rubyは一時期人気がありましたが、今はPythonのほうが人気です。
Pythonは、「退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミング」という本が入門書として最適だと思います。これは実際に使えるプログラムをとにかく作ってみる、という本で、プログラミングの楽しさを感じられる本だと思います。CSVを加工したり、自動配信の一斉メールを送ったり、実生活で役に立つプログラムを作ることができます。
データ型など、基礎の基礎から解説されていて、プログラミングを全くやったことがない人でも実際に役立つプログラムを開発することが出来ます。
みんなのPython」も有名ですが、内容が平易なのと、Pythonの素晴らしさや使用例が少ないので読んでも面白くなかったです。しかし、Classの概念など、一部は役に立ちました。
とにかくソースコードをパクって何かを動かして楽しむことが長くプログラミングを続けるコツだと思います。ソースコードはあとからじっくり読めばわかるようになるので、どんどん動かすべきです。習うより慣れましょう。

自分用のブログを作りたい

結論:「ホームページ作成 プログラミング不要」でググる

単純なブログを作りたいだけならむしろプログラミングをしなくていいです。例えばWixなど、プログラミング不要でカスタマイズしたブログを作れるサービスがたくさんあります。利用は広告付きなら無料、広告なしでも月1000円くらいです。
このようなサービスがあるのに、自分で膨大な時間をかけてプログラミングするのは時間がもったいないです。
ちなみに、おすすめは初心者にはWix、はてなブログ、上級者にはWordpressです。

Webサービスを作りたい

結論:udemyなどのオンライン学習サービスで「node.js react」と検索し、JavaScriptによるウェブサービス開発を学習することをおすすめします
これはケース4よりガチな場合です。Wixなどのサービスの弱みは、ユーザーに合わせて切り替わる表示が難しいことです。また、受け取ったユーザの入力に対して、サーバー側で任意の処理をして返すことが難しいです。この場合は自分でプログラミングをしなければなりません。
Webのプログラミングは大きくフロントサイドとサーバーサイドに別れます。

フロントサイド

フロントサイドはHTML,CSS,JavaScriptが使われます。
  • HTML:最低限のページを作るもの、
  • CSS:HTMLに色などをつけて見た目をきれいにするもの
  • JavaScript:サイトに動きをつけて更に見た目をリッチにするもの

サーバーサイド

サーバーサイドは選択肢がたくさんあります。PHP, Node.js, ruby on rails, Go, python, Kotlin …などです。どれでも開発できるのですが、個人的にはNode.jsをおすすめします。Node.jsはサーバーサイドでJavaScriptを動かすものであり、フロントサイドと同じ言語で開発できます。余計な言語の勉強が不要なので効率的と言えるでしょう。
今現在は、PHPやRuby on Railsで作られているサービスが多いです。しかし、これらは明らかに遅れたテクノロジーです。アクティブユーザーもどんどん減っているので、これから勉強するのはやめましょう。Node.jsかGo、Kotlinがこれからの言語です。繰り返しますが、PHP, Ruby on Railsは本当にやめましょう。
スマホ対応
近年のウェブサイトはスマホ対応がほぼ必須です。これはレスポンシブデザインという方法でできるのですが、真面目にやると結構しんどいです。しかし、そんなのを一発でやってくれる素晴らしいJavaScriptライブラリがあります。Bootstrapが有名ですが、Material UIやSemantic UIもおすすめです。
Node.jsとReactへの入門方法は下記の記事に書いています。
React+Reduxへの入門!本とUdemyで爆速入門私は仕事でReactを利用しているので、今では思い描いたWebアプリケーションをすぐにReactで作れます。しかし、最初からそうだったわ...

ブロックチェーンやりたい

結論:Dapps開発したいならNode.jsのtruffleからイーサリアムネットワークに接続し、スマートコントラクトはSolidityで書き、フロントはReactなどで開発するのがおすすめです。
Bitcoinの一番有名なクライアントはC++、Ethereumのクライアントはいろんな言語(Golang, Rust, Python)で実装されています。
独自ブロックチェーンを作るときは既存のものをフォーク(コピーして一部変えていくこと)して作るか、Hyperledger FabricやQUORUMといった規格を利用して作ります。Hyperledger FabricはChain codeというスマートコントラクト(ブロックチェーン上で動くプログラム)を作りますが、これはGolangかJavaかNode.jsで書くことになってます。QUORUMは本体がGolangで実装され、スマートコントラクトはSolidityという特殊言語で書きます。
また、独自ブロックチェーンを作らずに、既存のイーサリアム上にDapps(Decentralized Applications)を作る事もできます。その時はSolidityでスマートコントラクトを書きます。
Dappsの開発では、アプリをイーサリアムネットワークに接続する必要があり、それを担うのがtruffleといったフレームワークです。TruffleはNode.jsで動くので、Dappsを開発するならNode.jsがおすすめです。当然、他にもやり方はたくさんありますが、やってる人が多い方法に乗っかったほうがFAQも多いですし有利だと思います。
フロントはReactなどで開発するのがおすすめです。理由はほぼJavaScriptオンリーで開発でき、かつUIを自動でスマホ対応にしてくれます。コンポーネントも他の人が開発したものをインポートできるので、高速な開発が可能です。
例えば、「Ethereum and Solidity: The Complete Developer’s Guide」という講座ですべて網羅できます。ビデオが24時間分のついていて、かつ30日以内なら返金請求もできるので、高くない買い物だと思いました。私もこれをやってブロックチェーンエンジニアになりました。
Solidityの勉強では、例えば「ブロックチェーンアプリケーション開発の教科書」という本が人気です。

コンピュータの構造まで理解してガチのエンジニアになりたい(参考)

これは本当に学習コストが高いと思うので、そんな人がここの読者にいるのでしょうか…いるのであれば、まずは大手企業のエンジニアの中途者採用などを見るといいと思います。例えば、「応募条件 〇〇による大規模開発経験3年以上」などと書いてあるはずです。それで、入りたい企業などで使われている言語を学習したらいいと思います。
コンピュータの構造を理解するには、Cとアセンブリの勉強が良いと思います。アセンブリは機械語と1:1で対応している低水準言語です。機械語を理解するためには、アセンブリの勉強が近道です。アセンブリはこの記事でも紹介してるので、よければ参考にしてください。
アセンブリの勉強法 (1/2)アセンブリ言語は機械語を人間に読みやすいように変換したもので、機械語と1:1で対応しています。アセンブリ言語を理解することはコンピュータ...

おわりに

最後までお読みいただきありがとうございます。
いかがだったでしょうか。あくまで私の主観なので他の意見もたくさんあると思います。違う意見などあったら教えてください。また、疑問などございましたらお気軽にどうぞ!

https://media.itkaikei.com/2019/04/29/book-udemy-programming-school/

COMMENT

メールアドレスが公開されることはありません。