2016年5月1日

プログラミングを勉強しようと思った人へ:概ね高校生含む大人向け

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
友人から質問されたから、まとめてみた。
前職のプログラマやスーパープログラマたちを差し置いてまとめるのは恥ずかしい限りだが、教育従事者や父親としての観点でまとめてみる。


【目次】

1.結論
2.プログラミングの必要性
3.プログラミングを勉強する前に
4.読んでおいた方がいい本
5.学習環境や学習方法
6.プログラミング言語の紹介
7.関連知識の紹介:データベースやネットワークやレンタルサーバ
8.ここまでの話で、現実味がわかない人へ


【1.結論】

①アルゴリズムを通して、課題を解決するのは手順が一番大事だということを意識する。
②マークアップ言語(とりあえずHTML)を勉強して、リッチテキストとプレーンテキストの違いを把握して、パソコンの仕組みを意識する。
③プログラミング言語を勉強して、使えるコマンドを増やして、パソコンをブラックボックスからホワイトボックスに変えて、使いこなす。
④ハッカー系の映画や書籍を読んで、アイデアや想像を膨らませる。
(プラスα)データベースとネットワークを把握して、パソコンの向こう側にある仕組みを意識する。

そのためにやること。

①下のサイトを余裕でクリアする。
- Blockly Games
 https://blockly-games.appspot.com/?lang=ja
 ※「迷路」がオススメ
- アルゴリズム体験ゲーム・アルゴロジック|JEITAソフトウェアで未来をつくる
 http://home.jeita.or.jp/is/highschool/algo/
 ※「アルゴロジック」「アルゴロジック2」がオススメ

②下の動画に沿って、簡単に環境を整えて、HTMLを書いてみる。
- HTML入門 (全24回) - プログラミングならドットインストール
 http://dotinstall.com/lessons/basic_html_v3

③以下のサイトをクリアしてプログラミングの雰囲気をつかむ。
- FightCode - Killing Robots for Fun
 http://fightcodegame.com/
- CodinGame - Play with Programming
 https://www.codingame.com/start
- Ruby Warrior - Popular Free Ruby Programming Tutorial Game
 https://www.bloc.io/ruby-warrior#/
- CodeCombat - Learn how to code by playing a game
 http://codecombat.com/

④できることがわかったら、どんなことに使えるのか、アイデアを他の人からもらう
- ソーシャル・ネットワーク - 作品 - Yahoo!映画
- ダイ・ハード4.0 - 作品 - Yahoo!映画
- ザ・コア - 作品 - Yahoo!映画
- BLOODY MONDAY (ブラッディ マンデイ) 全11巻セット (少年マガジンコミックス)
- 87CLOCKERS【期間限定無料】 1 (ヤングジャンプコミックスDIGITAL)

(プラスα)ぶっちゃけ、上記の技術だけじゃ、システムの開発なんてできない。
だから、データベースやネットワークなんかの勉強をして、パソコンの向こう側にある仕組みを構築できるようになる必要がある。
だから、データベースやネットワークを使わなくてもいいような仕組みのものを開発するようにするか、ちゃんと勉強してから開発するかの二択となる。
後者となると、独りで独学で開発するのは無理だから、仕事でお金もらえるようになってからチャレンジするといいよ。


【2.プログラミングの必要性】

何も考えずに、以下のサイトかYoutubeで動画を鑑賞して欲しい。字幕の設定を日本語にできるので、日本語が得意な人は設定を変更して日本語で鑑賞して欲しい。
- Anybody can learn | Code.org
 https://code.org/
- What Most Schools Don't Teach - YouTube
 https://www.youtube.com/watch?v=nKIu9yen5nc

もう少し細かく書かれたものとしては以下のサイトが有名だ。
- Facebook元役員「プログラミングを学ぶのなら、生涯仕事に困らないことを私が保証しよう。」 | リーディング&カンパニー株式会社
 http://lrandcom.com/facebook_former_executive_learning_programming_guarantee_life_time_work
流行ってますね。バズってますね。
色々と申したい気持ちはあるが、詳細は後ほど。


【3.プログラミングを勉強する前に】

【アーサー・C・クラーク】
高度に発達した科学技術は魔術と見分けがつかない
Any sufficiently advanced technology is indistinguishable from magic.
という有名な言葉がある。
想像してみて欲しい。
パソコンに詳しくない人が、急に動かなくなったパソコンの前で呆然としていたら、誰かが黒いウィンドウを立ち上げ、いくつか文字を打ち込んだら動くようになった。
パソコンの調子が悪くなり、サポートセンターに連絡したら、自分のパソコンが電話口の人の言う通り動き始めた。
(他に例が思いつかない。。。)
などなど、自分の想像の範疇を逸脱すると、もうその世界はファンタジーでしかない。

そんな状況で、安易に手を出すと、お金の匂いのする世界が手をこまねいて待ってますよね。

私は、プログラミングの前にアルゴリズムが重要と考えている。
だけど、アルゴリズムってのは、概念的過ぎて、ここでお金を稼ごうとすると、チープに見えてしまう。
だから、ここに商機を見出してる人は、もう少し具体性のあるプログラミングを前面にだすような戦略をとっている。

「英語」の勉強の世界も、似たような状況ですよね。
本来は、先に「言語技術」などの根源的な学習をしなければ、多言語を使えても、中身の少ない人間になってしまうように。

それと、プログラミングを勉強したところで、すぐに何か作れるようになるか、というと何もできない。
そりゃアドバイスなんかがあれば、iOS向けのアプリを開発してリリースして小遣い稼ぎはできると思う。
でもそれだけ?本当にそれをしたくてプログラミング勉強するの?

プログラミングを勉強する目的は、最初に明確にしておくべきだ。
そして、その目的は以下の3つに集約される。
①アプリやソフトやゲームといった具体的なモノを開発したい。
②プログラミングと呼ばれるものの理解や知識や技術をある程度知った上で、就職してOJTを通して身に付けたい。
③プログラミングを通して、課題を見つけて解決する力を身に付けたい。

①や②であれば、やることは簡単だ。適当にネットで検索して、目当てのものを見つけて、オンライン学習でも書籍でもスクールでもやってみればいい。
難点があるとすれば、その道でお金を稼ぐぐらいの気持ちが無いなら手をださないことぐらいだ。

問題は③だ。
というよりも、①②以外でプログラミングをやってみたい、という人たちは全てがこの目的を持って、気軽にプログラミングに取り組んで欲しい。
③のような「プログラミング」に興味がある人は、どの言語から始めたらいいのか、という壁が最初に立ちはだかる。
①や②であれば、作りたいものや有名な言語に合わせて選べるから、そんなに選ぶのに苦労しない。しかし、ただ「プログラミング」をしたいだけだと話が違う。

③の人に是非取り組んでもらいたいこと。
【結論】に書いている通り、アルゴリズムを学ぶ。
すると、プログラミングの醍醐味、自動化の効果を実感できる。この感覚があるとないとでは、その後の習熟に大きく差がでる。
面倒な事は人手で解決するのでなく、自動化して機械にやらせよう、すると、大変さが1回で済む。


【4.読んでおいた方がいい本】

この書籍の選別はとても難しい。勧めたい書籍が多すぎる。
- 子どもを億万長者にしたければプログラミングの基礎を教えなさい
- 「アルゴリズム」のキホン (イチバンやさしい理工系シリーズ)
- 図解でかんたんアルゴリズム 情報処理のかなめとなる考え方が手に取るようにわかる! (サイエンス・アイ新書)
- エンジニアのための時間管理術


【5.学習環境や学習方法】

①本で勉強する
②オンライン学習サイトで勉強する
③スクールや塾に通って勉強する

この点に関しては、他のサイトでの紹介がとてもまとまっているので、各自で探していただきたい。


【6.プログラミング言語の紹介】

ぶっちゃけ何をやってもいいと考える。
言語にもある程度流行り廃りがあり、現場によって偏りがあるものだから。

それでも挙げるとしたら、以下の3つの観点で紹介したい。
①プログラミング言語
②マークアップ言語
③OS上のコマンドライン系のツールについて

①プログラミング言語とは、いわゆるプログラミングをするための表記法、ルールの総称である。
有名なものやオススメなものとしては
・C言語
・Perl
・Ruby
・PHP
・JavaScript
・iOS向けアプリを開発するために使われているSwiftやObjective-C
・Java
といったところ。他にも沢山あるが、どれか一つできるようになっていれば、その後の習熟速度は速い。 ※若干相性があるが。

②マークアップ言語は、プログラミングと実態は違うものの、初心者向けへの説明が面倒なので、一緒にくくられているもの。
代表例としては
・HTML
・CSS
・Wiki記法
何かを動かすためじゃなく、何かを表示を整えるためのもの。

③実はこのGUIとCUIを把握して、OSをコマンドラインで操作できるようにならないと、プログラミングをするための環境構築などができない。
てっとり速いのは、Linux系のOSを自作でインストールしてみると理解できる。
一行で雑に説明しているが、この言葉からネットで調べ、1ヶ月ぐらいあれば実現可能なレベルである。


【7.関連知識の紹介:データベースやネットワークやレンタルサーバ】

ここまでの話だけでは、何かを作っていくための技術にはまだ足りない。
何かを作っていくには、そのためのデータを保存する方法を考えなければならない。
そのための知識がデータベースである。

それと、オンラインで何かを構築するのであれば、ネットワークについての知識も不可欠である。
IPアドレスって?PINGで疎通確認?VPNトンネルって?ファイアウォールでセキュリテイ対策?
その辺りが弱いと、自分の作ったものが、外から丸見えになってしまう。

こういったデータベースやネットワークの環境を構築するのは、とてもレベルが高いし、手間。
なので、面倒な人はレンタルサーバを借りるのがてっとり速い。
手続きも簡単で、月500円程度で、普通の環境がすぐに揃う。
セキュリテイも概ね問題ない。
困ったら、とりあえずお金に物言わせて、環境を整えてチャレンジするのが近道だ。


【8.ここまでの話で、現実味がわかない人へ】

技術的な話が多く、結局何をどうしたらいいんだろうか。
私は「プログラミング」はバズワードの一つと考えている。いわゆる意識高い系の人向けだったり、「英語」は勉強しておいた方がいいよ、という話だったり。
でも、そんなバズワードであっても、珍しく中身のあるものだ、とも考えている。

それは、「プログラミング」を通して本当に身につくのは「課題発見能力」と「課題解決能力」だからだ。
プログラミングができる人は、ここ最近とても増えているが、それはあくまでもプログラミング言語の読み書きができるだけに過ぎない。
それも一つの能力だと思う。

「英語ができる」人がいたとする。その人は「英語」で何ができるんだろうか?
日常会話?ビジネス会話?交渉?スピーチ?営業?医療従事?カウンセリング?コーチング?

「プログラミング」はあくまで手段。
自分がやりたいことの実現方法の一つに「プログラミング」が候補に挙がるようになれば、最初のゴールにたどり着けたものと言える。
その先にあるものは何か。
それが「課題発見能力」と「課題解決能力」だと私は考えている。
「プログラミング」は、他のツールと違って、正否の結果が一瞬で返ってくる。
他の分野における手段に比べたら、比較にならないスピードだ。
この特性はいかすべきである。

すると何が起きるか。全ての事象の具体性が排除され、抽象化されていく。
だから最後に残るのは、自分が何をしたいのか、何が問題なのか、という「課題」意識だけ。

それでもまだ察しがつかない人は、とりあえずExcelでじゃんじゃん関数使って、今まで電卓使ってたり、面倒な表計算をしていたりしたところを、置き換えてみるといい。
一つの数式で10個くらいの関数を入れ子にして、複雑な計算も抽象的に書けるようになるところまで目指してみるといい。
いつも同じような作業をしていて、自分じゃなくてもできそうな作業があれば、それを機械にまかせてみればいい。
何か違った世界が見えてくるよ。

【アーサー・C・クラーク】
高度に発達した科学技術は魔術と見分けがつかない
Any sufficiently advanced technology is indistinguishable from magic.
目指せ魔法使い。

2016年3月21日

Kindle Fireの一番安いのを買ってみて、PDFビューワを設定してみた話

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
半年ほど前に、Kindle Fireの一番安いのを買ってみた。

Fire タブレット 8GB、ブラック
Amazon (2015-09-30)
売り上げランキング: 2


1万円切るし、初めてのAndroid端末にもなるので、お試しの気持ちで。
自分はiPad miniを持ってるので、不自由していないから、使う場面は無い。

なので、妻に使ってもらうことにした。

妻としては、読書が進むので、とても助かっている様子。
特に「ブラックジャックによろしく」が破格の値段で読めるのには驚いていた。

ただ、少しマンネリしてきたようなので、次にどうしたものかと悩んだところ、PDFビューワとしての利用を思案してみた。

そこで、アプリを入れてみた。

Perfect Viewer
Perfect Viewer
posted with amazlet at 16.03.21
RookieStudio (2016-02-15)
売り上げランキング: 3

Perfect Viewer PDF Plugin
Perfect Viewer PDF Plugin
posted with amazlet at 16.03.21
RookieStudio (2015-10-01)


i文庫HDに比べたら、動作は遅いものの、まぁそれなりには使えそうだ。

しばらく妻に使ってもらうと思う。

2015年9月6日

MoodleをさくらインターネットからさくらVPSに移行した

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
※きれいにまとめてる余裕がないので作業メモ

さくらインターネットではメモリが少なく、問い合わせたところ目安200MBと言われた。
LMSのMoodleは同時アクセスがとても多い運用となってしまい、メモリが足りずに落ちることが多々あった。
2年ほど誤魔化しながら運用してきたが、限界。

というわけでさくらVPSに移行した。

やったこと。

・さくらVPSのセットアップ。おもに公式サイトの手順に従ったが、まとめ直してくれているブログがいくつかあったので、それらを参考にした。
・Moodleの最新版を公式サイトからダウンロード
・とりあえず最新版をインストールしてみた
・データ移行をバックアップとリストアで済ませようと思ったら、ユーザデータやコーホートが取り込めないことに気付いて、公式サイトの手順に切り替えた。
・moodledataフォルダが6GB近くあり、ダウンロードとアップロードに思わぬ時間をとられる
・データベースのdumpとimportでエラー発生。
・データベース名やテーブル定義に差分があり、一発でインポートできず、dumpしたコードを微調整してからインポート
・インポート後、moodleのinstall.phpにアクセスするとデータベースのアップグレード処理が走って、手軽な作業で済んだ


Moodleを使って授業する!なるほど簡単マニュアル
濱岡 美郎
海文堂出版
売り上げランキング: 168,453

Moodle入門―オープンソースで構築するeラーニングシステム
井上 博樹 奥村 晴彦 中田 平
海文堂出版
売り上げランキング: 394,384

2015年2月28日

MacのSaffariで左下に広告が出てきて鬱陶しい

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
職場で「Macがウイルスに感染した」と相談を受けた。

確認したところ、Safariの左下に広告が表示され、ページ内の正規のリンクを踏むと別タブでMacKeeperのページが表示されるという状況。

機能拡張のページや不要なアプリがないか確認するも外れ。

色々と調べた結果、

- AdwareMedic
 http://www.adwaremedic.com/index.php

このソフトで駆除できた。

ウイルスとアドウェアの違いの説明が面倒なので、そのあたりはスルーする。

2015年1月18日

息子(5歳)のiPadに「さんすうチャレンジ 楽しく学べる算数シリーズ」をいれてみた

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
今日は息子の体調が悪いので、iPadを使って遊ぶことにした。

アプリを色々と探してみたところ、次のアプリが、説明もしっかりしてるし、良さそうだったので、試してみた。


まずは小1から。

黒板をイメージした書き込みエリアに数字を書き込んでいくタイプ。
数字の認識が結構シビアなので、なかなかイライラしている。
書き順や位置も認識しての判定なので、運筆力も含めて鍛えられるんじゃないかと期待。

販売しているのはこの会社
- ミライプロジェクト
 http://miraiproject.info/
色々なアプリを出していて、すでにいくつか使っているものもあった。

シリーズで、3年生まであるようなので、パックで買って試してみている。



通信の学研やベネッセやZ会の資料請求をしてみて比較検討しているが、こういった学習アプリが充実してくれれば、とても安く勉強が進む。
Related Posts Plugin for WordPress, Blogger...