理系ですが専門的にプログラミング(情報工学)を学んだわけではない私が、趣味の範囲とはいえプログラミングを勉強した方法をまとめました。
中の人のスペック
・国立大理系修士卒(理学系物理)・メーカー勤務10数年(3社目)
・非ソフトウェアエンジニア
きっかけ
ラズベリーパイとか流行ってきた。電子工作は前から興味あったけど、はんだ付けはへたくそ。
Arduinoっていうのもあるんだ。
勉強方法(Arduino編)
まずは、何を準備すればいいのか?何が選択可能なのか?何が自分の興味に一番合うのか?を探しました。最初のキーワードとしては「Arduino」と「ラズベリーパイ」。
先人のブログなどを見て回りイメージをつかみました。
電子工作(はんだ付け、トランジスタ、抵抗、コンデンサ)といった技術だけではなく、プログラミングもあわせて習得する必要があるという知見を得ました。
ここで、ラズベリーパイはLinuxで「Linuxのコマンドは難しそう」、というイメージを持ちます。
一方、ArduinoはC言語風のプログラミングで、こちらのほうがまだわかりやすそう、と思いまずはArduinoでやってみようと思いました。
このとき、すでに「自動水やり機」のコンセプトが頭にありました。
s51517765.hatenadiary.jp
(ざっくり、Arduinoで土壌抵抗を検出して閾値を超えたらポンプを動かす、といった。しかし、ポンプを動かすのにトランジスタが必要とか外部電源が必要という知識はない。)
Arudinoの基本的な文法を覚えたいが、プログラミングの基本がわかってないのでArudinoで文法を覚える、というよりはC言語で基本を学習するほうが効率がよさそうと気づく。
9cguide.appspot.com
c-lang.sevendays-study.com
ここでとくに、「苦しんで覚えるC言語」の学習用C言語開発環境
を活用しました。
学習用C言語開発環境
はたしか、Yahoo知恵袋でもおすすめされていました。
- 作者: MMGames
- 出版社/メーカー: 秀和システム
- 発売日: 2011/06/24
- メディア: 単行本
- 購入: 3人 クリック: 600回
- この商品を含むブログ (16件) を見る
ここで、ポインタの手前まで(コンソールプログラム)理解してArduinoを購入。
s51517765.hatenadiary.jp
Amazonだと↓このあたり。
- 出版社/メーカー: スイッチサイエンス
- メディア: おもちゃ&ホビー
- 購入: 64人 クリック: 1,164回
- この商品を含むブログ (50件) を見る
実は↓を、このブログをみたメーカーから「評価してほしい」と提供を受けました(今年初めごろ)。
使ってみたところArduino Uno互換ボードがちゃんと互換として動いて、部品も豊富で安いのにおすすめです。
ただし、初心者が使ったらすべての部品を試すのに何年かかるか…
Arduino用 UNO R3キット Smraza 初心者スターターキット UNO R3 とMega2560 Nano 100%互換(日本語チュートリアル付き))
- 出版社/メーカー: Smraza
- メディア: エレクトロニクス
- この商品を含むブログを見る
勉強方法(C#編)
Arduinoを一通り動かしたら、ネットワークにつながるプログラミング、いわゆるIOTもやってみたいと思うようになりました。Windows上でもっとプログラミングがしたい、とくにGUIアプリをやりたい、と思いました。
ここで、最初はC言語に近いところで始めようと、C++/CLI
というのをVisual C++
だと思いながら始めました。
のちにC++/CLI
だと知ります。
そして、ネットの先輩方にC#のほうがいいよとアドバイスを受けC#に転向しました。
Twiiterクライアントを作ったり、webスクレイピングをするアプリを作りました。
s51517765.hatenadiary.jp
GUIアプリの基本は、webだけでは理解しにくかったので一冊取り組んでみました。
ただし、これも継承
のあたりは読まなくてもOK(アマチュアとしては)。
ゴールからはじめるC# ~「作りたいもの」でプログラミングのきほんがわかる
- 作者: 菅原朋子
- 出版社/メーカー: 技術評論社
- 発売日: 2016/03/16
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (2件) を見る
このぐらいになってくると、もう少し複雑なアルゴリズムを組みたくなってきます。
paizaのプログラミングスキルチェックでいろんな課題に挑戦することでアルゴリズムの引き出しを増やしておきました。
Cランクまで取得すると、基本的なアルゴリズムは不自由しなくなると思います。
paiza.jp
勉強方法(ラズパイ編)
C#で作ったTwiiterアプリのようなものを24時間動かしたい。ラズパイならできそう。
ラズパイなら、pythonだよね?ということでラズパイ(Linux)とpythonを勉強し始めました。
この時点ではLinuxのコマンドはコピペしているだけ、という状態がしばらく続きます。つい最近まで。
pythonもpaizaで勉強しました。
pythonだと文法が簡潔なので、よりスピードもでるようになり、paizaのBランクを取得。
Bランクぐらいまでは想定回答時間が40~60分ぐらいだが、Aランクとなると、60分以上のものが多いので取り組みづらいです。
勉強方法(機械学習編)
pythonを始めたら、流行りの機械学習も興味が出てきます。このあたりから、Qiitaを活用するようになります。
Qiitaだけでは不十分なときは公式ドキュメントに当たります。
s51517765.hatenadiary.jp
s51517765.hatenadiary.jp
s51517765.hatenadiary.jp
勉強方法(セキュリティ編?)
Vectorでプログラムを公開したりし始めました。www.vector.co.jp
プログラムを公開したり、ネットワーク上で動かすようになるとセキュリティといった面も気にする必要があります。
”バグ”はセキュリティリスクにもなりえますので、”安全性が高い” ソフトウェアを作るように気を付ける必要があります。
s51517765.hatenadiary.jp
s51517765.hatenadiary.jp
s51517765.hatenadiary.jp
今後の展開(目標)
競技プログラミング(AtCorder)とかも興味あるし、Linuxの知識はもっと付けたい。KotlinでAndoroidアプリもやってみたい。
C++をやってこそプロプログラマー?