プログラミング素人のはてなブログ

プログラミングも電気回路も専門外の技術屋の末端が勉強したことや作品をアウトプットするブログ。コードに間違いなど見つけられたら、気軽にコメントください。 VC#、python3、ラズパイ始めました。

プログラミング素人がプログラミングを勉強した方法

理系ですが専門的にプログラミング(情報工学)を学んだわけではない私が、趣味の範囲とはいえプログラミングを勉強した方法をまとめました。

中の人のスペック

・国立大理系修士卒(理学系物理)
・メーカー勤務10数年(3社目)
・非ソフトウェアエンジニア

きっかけ

ラズベリーパイとか流行ってきた。
電子工作は前から興味あったけど、はんだ付けはへたくそ。
Arduinoっていうのもあるんだ。

勉強方法(Arduino編)

まずは、何を準備すればいいのか?何が選択可能なのか?何が自分の興味に一番合うのか?を探しました。

最初のキーワードとしては「Arduino」と「ラズベリーパイ」。

先人のブログなどを見て回りイメージをつかみました。
電子工作(はんだ付け、トランジスタ、抵抗、コンデンサ)といった技術だけではなく、プログラミングもあわせて習得する必要があるという知見を得ました。
ここで、ラズベリーパイはLinuxで「Linuxのコマンドは難しそう」、というイメージを持ちます。
一方、ArduinoC言語風のプログラミングで、こちらのほうがまだわかりやすそう、と思いまずはArduinoでやってみようと思いました。

このとき、すでに「自動水やり機」のコンセプトが頭にありました。
s51517765.hatenadiary.jp
(ざっくり、Arduinoで土壌抵抗を検出して閾値を超えたらポンプを動かす、といった。しかし、ポンプを動かすのにトランジスタが必要とか外部電源が必要という知識はない。)

Arudinoの基本的な文法を覚えたいが、プログラミングの基本がわかってないのでArudinoで文法を覚える、というよりはC言語で基本を学習するほうが効率がよさそうと気づく。
9cguide.appspot.com
c-lang.sevendays-study.com

ここでとくに、「苦しんで覚えるC言語」の学習用C言語開発環境を活用しました。
学習用C言語開発環境はたしか、Yahoo知恵袋でもおすすめされていました。

苦しんで覚えるC言語

苦しんで覚えるC言語

書籍にもなっていますが、私はwebだけで挑戦しました。

ここで、ポインタの手前まで(コンソールプログラム)理解してArduinoを購入。
s51517765.hatenadiary.jp
Amazonだと↓このあたり。

Arduinoをはじめようキット

Arduinoをはじめようキット

実は↓を、このブログをみたメーカーから「評価してほしい」と提供を受けました(今年初めごろ)。
使ってみたところArduino Uno互換ボードがちゃんと互換として動いて、部品も豊富で安いのにおすすめです。
ただし、初心者が使ったらすべての部品を試すのに何年かかるか…

勉強方法(C#編)

Arduinoを一通り動かしたら、ネットワークにつながるプログラミング、いわゆるIOTもやってみたいと思うようになりました。
Windows上でもっとプログラミングがしたい、とくにGUIアプリをやりたい、と思いました。

ここで、最初はC言語に近いところで始めようと、C++/CLI というのをVisual C++だと思いながら始めました。
のちにC++/CLI だと知ります。
そして、ネットの先輩方にC#のほうがいいよとアドバイスを受けC#に転向しました。

Twiiterクライアントを作ったり、webスクレイピングをするアプリを作りました。
s51517765.hatenadiary.jp

GUIアプリの基本は、webだけでは理解しにくかったので一冊取り組んでみました。
ただし、これも継承のあたりは読まなくてもOK(アマチュアとしては)。

ゴールからはじめるC# ~「作りたいもの」でプログラミングのきほんがわかる

ゴールからはじめるC# ~「作りたいもの」でプログラミングのきほんがわかる

このぐらいになってくると、もう少し複雑なアルゴリズムを組みたくなってきます。
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++をやってこそプロプログラマー