2015年12月27日日曜日

C++をマスターする方法

以前の記事で
「過去社内で、C++を使っているプロジェクトを横目で見ていたが、習得するためには血反吐を吐くような厳しいOJTを乗り越えなければならないイメージがあった。個人的にも何度かC++ の勉強をトライしたことがあるが失敗に終わっている。あれから大分たったので、多少は状況は改善されているんじゃないかという望みももっていたが、ネット 上で調べると今でも相変わらずのようだ。仕事で仕方なく覚えるのでも困難なものを趣味で覚える場合、時間不足という制約も追加されるので、まず不可能だ。 しかしながら、100人に一人になるためには、なにかしら困難のあるものをやり遂げる必要があるので安易にできないと言うべきではない。ただし、C++を マスターするには根性論では無理なので、何か作戦が必要なのだ。たとえばC++を使うような社内のプロジェクトに加入するとか。(以下略)」
と書いたが、最近仕事でC++の物件をやったのでその際に、もっとこう進めればよかった
と感じたことを書き残しておこう。

自分が最近やったC++の物件も大変な仕事で、残業など体力で乗り切った面も多い。
以前C++を独習したとき大変だった点は、
①オブジェクト指向の機能が複雑で覚えるのが大変。
②しかもウインドウを制御をする仕組みが難しい。OSから受信したメッセージを処理するとか。
③MFCをおぼえるのが大変(MFCの仕様が必ずしも適切でないことが関係あり)
とどめに、DRAWイベントを受信したら、アプリケーションの再描画を自分でやらなければならない。ということがわかって、そんなのやってられるか!!と腹を立ててしまったのだった。


上記を今回の自分の仕事と対比してみると、
>①オブジェクト指向の機能が複雑で覚えるのが大変。
・これは事前に自習しておくしかない。C++を独学するための本は最近はたくさん出ているのでできないことではない。

>②しかもウインドウを制御をする仕組みが難しい。OSから受信したメッセージを処理するとか。
>③MFCをおぼえるのが大変(MFCの仕様が必ずしも適切でないことが関係あり)
>とどめに、DRAWイベントを受信したら、アプリケーションの再描画を自分でやらなければならない。
>ということがわかって、そんなのやってられるか!!と腹を立ててしまったのだった。
・これについては最近のC++は.NET FRAME WORK対応になっていてソフトでOSが送信したメッセージを処理しなくてもよいし、MFCも覚えなくてよくなっていた。
しかしながら.NETの機能を解説している本は少なく、ネット頼みになってしまったが、結局みつかるサンプルはc#のものばかりでc++ではそのまま使用することはできず苦労した。

また、VisualStudioを使い慣れていないことと、VisualStudio自身に不具合が多いことにも本当に困った。
以上のことから、C++をマスターする方法はこんなだろうかと思う。

【C++をマスターする方法】

①まずC言語をマスターする。
もともとC++はCの上位互換だった(今は厳密には違う)のでこれが第一関門となるだろう。今となってはCは必ずしもメジャーな言語ではないのでこれは困難かもしれない。

②C→C++で拡張されたオブジェクト指向の文法的ついても勉強しておく。
VisualStudioのC++を用いコンソールアプリケーションみたいなものを作ってもよい。上でも述べたように、今なら解説された本もたくさんあるのでできなくないはずだ。 ただしここで使う本は、あくまでもC++の文法的な部分に特化したものが良く、一冊で文法からVisualStudioの使い方まで網羅したものは結局解説不足で役に立たないこと多いように思う。

③Visual Studioを使いC#をマスターする。
なぜここでVisualStudioでC++ を使わず、C#かというと、C++は難しいので独学でマスターすることが困難だからである。VisualStudioの使い方を解説した本は少なく、内容は難しい上不具合も多い。不具合が発生した場合の対策に習熟しておく必要がある。また.NET FRAMEWORKの使い方もマスターする必要があるが、.それらはC++でプログラムを作成中に並行してやることは難い。.NETはネット上に解説やサンプルが多くあるが、C#かVBのものが多く、ズバリC++のものは少ない。C++に詳しい人に.NETの質問をしにいくと、「C#の.NETでできることはC++でもできる」といわれることが多く、C#の記事をもとにC++でのコーディング方法を自力で読み替える必要があり、事前にC#をやっとけば良かったと思うことが多かった。またオブジェクト指向の考え方はC#とC++で通じるものがある。

これに対しC#は独学でもある程度マスターできVisualStudioの使い方が解説された本は多い。上で述べたように.NETの疑問点もネット上で簡単に調べられる。このため、回り道のように思えてもC#をマスターしておいたほうが良い。

これを省いていきなり実務でC++をやったら血反吐を吐くことになるだろう。小さなプログラムでよいから、いろんな種類のソフトをたくさん作って環境に慣れておくのだ。またVisual StuioではCやVBも使えるが、Cで.NETを使えるかどうかは良く知らないし、いまからVisualBasicをやる意義があるかどうかもわからないのでC#が良いと思う。

④C#をマスターし自由にプログラムが組める段階に達したら周囲に周知する。

⑤C++で開発をしているチームに加わり作業をする。
今までもさんざん知識を蓄積してきただろうがそれでもわからないことは多いと思う。C++向けに技術解説した本は少ないので、おそらくネット上で調査することが多いだろう。.NETの場合はC#のサンプルが多いかもしれないが、自力でC++に読み替えて使う。また開発チームの人に質問できる体制を強いておく。そして結局最後は仕事でぶっ倒れるぐらいまでC++を使い込んで習得する。


こんな流れだろうか。

こうしてみると、誰にでもできる作業ではないなぁと実感するし不人気なのも納得いく。

というわけで私も2016年は暇があればC#をがんばるよ。

2015年12月26日土曜日

AIや海外に負けませんように!!

最近、あと数十年もすると人間はAIやロボットに負けて大半が失職するという話をよくきく。

一言で言えば、将来、ルーチンワークはAIに置き換わってしまいクリエイティブな仕事をしていない人は失職する。また、AIに変わらなくとも、クラウドや海外での開発に負ける可能性もあるということだ。このようなことから「ルーチンワークじゃない仕事をする」が自分的な合言葉になってきている。

「あと20年でなくなる50の仕事」の中には、AIやロボットに負けてなくなる仕事のことがたくさん書かれていて、その中には弁護士もやばいとあったので真っ青だったが、プログラマーはなくならないだろうとのことだったのでホッとした。しかし下記のような記述があった

かつて優秀で高性能かつ個別企業向けにカスタマイズされていたソフトウエアがパッケージとして販売されユーザはこれを高額で購入し自社システムに導入していたが、クラウドの普及により、高額なパッケージソフトを購入しなくともユーザが必要なサービスだけをこわけにして利用可能になり、個別ソフト作成のためのSIerは不要となるかもしれない。 

これ、業務系ソフトの話?別な本にも同様なことが書かれていたのを読んだことがある。 自分は業務系ソフトじゃなくてよかった・・とおもってしまった。同書ではさらに、

ソフトウエアの開発者は将来的にもいなくなることはないだろう。現在でもたりないとされているし、ソフトの重要性がたかまれば、さらに必要とされるかもしれない。
しかし今のような形で存在し続けるかは疑問だ。今後、多くのシステムがクラウドに移行して企業が情報システムを自社で開発保有することが少なくなれば、それに関係するSIerは減って行き、日本だけで生き残ることはむずかしくなるかもしれない。
顧客と話ができて、それをふまえたアーキテクチャをつくることのできる一部の人を除けばプログラマーが国内にいる必要はない。海外のプログラマーたちとは開発プロジェクト管理もクラウド上のシステムで共有することができるのだがら。

システムのプログラムを請け負う仕事がへっていったとしても、自らのシステムを構築するという仕事は必須であり、プログラマー自体の需要は高いままだろう。しかし、求められるアプリケーションや言語の変化の中、生き残れるのは最上級のスキルを持っていて常に変化に対応できるプログラマーに限られる、ともいえるだろう

といった記述もあった。もっとショッキングなかこともたくさんかかれていたが、ここでは割愛する。常に変化に対応できるようにするには、新しいソフトが出るたびにこちらも負けずに覚えるというイタチゴッコなので大変な作業ではある。それでもAIやロボットが相手ではなく、人対人の勝負なのでまだ救いようがある。よって、顧客と話ができて、それをふまえたアーキテクチャをつくることのできる技術者であり続けることを目標にしよう。

2015年4月23日木曜日

ARMはじめました

最近、本業が忙しくてブログの更新が滞っている。CPUに、かの有名なARMを使った組み込み系装置の仕事だ。方向性としては、定年後につながる可能性のある仕事なのでがんばんなきゃ!と思い、ARMのことを解説した本を買いに新宿高島屋横の紀伊国屋に行った。以前はここに資料が豊富にあり、事が足りたのだが、いつの間にか組み込み系の本は少なくなってしまったので、しかたなく秋葉原の本屋に移動した。驚いたことに、ARMにも個人の電子工作向け?のDIP-8pinタイプが登場しており、電子工作の本がでまわっていた。ラズベリーパイとかmbedとか名前は聞いたことがあったがそれらもARMとのこと。もはや個人的に組み込み系をやるんでも選択肢はPICだけではなくなったということだ。また、ラズベリーパイにいたってはLinuxも搭載とのこと。もしや、将来、Linuxの内部構造ぐらいは知っていることが組み込み系技術者の常識となる日がくるのだろうか??

そう思っておそるおそるネットで調べてみると、Linuxのカーネルソースを読むのは非常に困難で、誰にでもできることではないとのことだった。・・・なるほど。

ともあれ、本業をそっちのけにしてまでC#をやるのは本末転倒なので、しばらく本業をがんばることにし、ブログ内容も当面、組み込み系に方針変更するかも。結局、仕事と関係の薄いことをやろうとしても、、時間不足な上に必要にぜまられていないのでモチベーションも高まらないという制約がある・・という好例でなった。

さて、携帯はとうとう新SIMが来て、すこしずつ新機能を使い始めている。申し込みをしてから一週間後のある朝、10時頃圏外になり翌日の10時には新SIMが郵送されてきたので、通話できなかった期間は24時間程度だった。その携帯のCPUもARMなんだよね。

2015年4月11日土曜日

プログラミング言語の入門書を選ぼう

過去、C#の勉強をしたことがあるが実は教本選びに失敗して一回挫折している。

入門に使う教本は、当然ながら入門用に書かれた本でなければならない。大筋としては、開発ツールの入手(ダウンロード)→統合環境起動→”hello world”程度の簡単なアプリケーションの作成→だんだんといろんな機能を紹介する といった流れで記述されている本だ。ところが自分はページ数が多い方が丁寧に解説されているんだろうと思いこみ中身を確かめず買ってしまい、ふたを開けてみれば全機能を羅列した百科事典みたいなやつで勉強にならなかったのだ。そこでめげずに違う本を買うべきだったのだが、大枚はたいた後だったので、他の本を買うのが悔しくて買えずENDだった・・。

反省として、
①インターネット上で書評が簡単に検索できるので、ぜんぜんだめと書かれているものは除外する。
使用する言語処理系がCDで付属していることを確認する。入門書で使用するコンパイラのバージョンが古くて入手不能なものやコンパイラのインストール自体が困難なもの(GCC系のものに多いので注意!!)はやめたほうが良い。 書店には、そういう詐欺みたいな本があたりまえのように置かれている場合がある。ひどいものになると、統合環境の使い方はオンラインヘルプなど別なものを参照してくれ なんてのもある。統合環境が複雑でその解説が重要なのに!!

上記①と②は必須である。
さらに

③実物がたくさん並んでいる書店へスマホ持参で出向き、書評を確認したり言語処理系が添付されているかどうかを確認しながら、じっくり一時間程度は立ち読みし、内容をよく確認する。
 
それでもはなっから読者をだますつもりで書かれているものは一時間ぐらい立ち読みしてもわからない場合もあるのだが・・
 
④テキスト選びに失敗したら、さっさと古本屋に売り払い、別なテキストを買いなおす。いちいちめげない。テキストへの投資は結局数万円程度かかることを覚悟する。
 
また、お目にかかったことはないが、個人的に買えないような高価にものも困る。ちょっと脱線するが、かつてC++の勉強をしたときも、色々な困難があったが、
①オブジェクト指向の機能が複雑で覚えるのが大変。
②しかもウインドウを制御をする仕組みが難しい。OSから受信したメッセージを処理するとか。
③MFCをおぼえるのが大変(MFCの仕様が必ずしも適切でないことが関係あり)

とどめに、DRAWイベントを受信したら、アプリケーションの再描画を自分でやらなければならない。ということがわかって、そんなのやってられるか!!と腹を立ててしまったのだった。

継承とかカプセル化などのオブジェクト指向の文法は難しく、まじめにそれを解説をすると何百ページも費やしてしまうので、サラッとしか解説しない本もある。これはオブジェクト指向の言語に共通する問題だ。

とする。C#のテキストを買いに行こう。

2015年4月8日水曜日

勉強する言語を選定しよう

まだiPhone→Android切り替え作業中だが新しいSIMが来るのは一週間先と連絡がきたので他のことをやろう。

以前の投稿したように、趣味・仕事どちらでソフト開発するにしても、WEB系、Androidスマホ、パソコン系の全てで、入門レベルで良いからソフトを開発しておいたほうが良いし、特にパソコン用ソフトは、仕事では簡単なツールを自作することは多々ある・・にもかかわらずウインドウが出るソフトは作れなくなって久しく、早急になんとかしたいと思っている。今回は、今後勉強するパソコン用の言語を選定してみる。

実はこのブログを立ちあげる際、まっさきに、今どんな言語が人気があるかネットで調べたのだ。

旧世代の遺物のように思われたCOBOLですら、いまだに過去の資産のメンテのためにバリバリ使われているときく。だからC言語だってすぐにはなくならないさ・・と思いつつ、ネット上で各言語のシェアを調べてみて・・驚いた。

TIOBE Softwareから、2014年12月のTIOBE Programming Community Index (PCI)が公開された。TIOBE PCIは、複数の検索エンジンの検索結果から対象となるプログラミング言語がどれだけ話題になっているかをインデックス化したもの。2014年12月にお けるインデックスは次のとおり。


順位     プログラミング言語     インデックス値     推移
1     C     17.588%     ↓
2     Java     14.959%     ↓
3     Objective-C     9.130%     ↓
4     C++     6.104%     ↓
5     C#     4.328%     ↓
6     PHP     2.746%     ↓
7     JavaScript     2.433%     ↑
8     Python     2.287%     ↑
9     Visual Basic .NET     2.235%     ↑
10     Perl     1.826%     ↑
以下略

C が一番上?! しかも、C++やc#を抑えて?! 信じがたい。いや上記は検索された言語であって、コーディングされた量ではないし新規システムで採用された本数でもないから、それこそCOBOLみたいに過去開発されたソフト=レガシーのメンテとしての需要が多いということか?
 自分は20年以上、ワークステーション(死語?!)や組み込み系プログラマとしてCとアセンブラを使ってきたがウインドウを制御するプログラムを作るには向 かないし、WEBプログラミングもできず、不便に思っている一人だ。やがてC++やC#などに取って代わられ、ゆっくりとシェアは低下していくのだろう。それでも一旦デファクトスタンダードになったものは簡単にはなくならないのだろう・・と思っていたから意外だった。
調べた見たところ、ここ10年ほど、1位Java、2位Cの順だったのが、最近入れ替わったのだそうだ。Javaは仮想化された環境で動作するものなので、コンピュータがどういう仕組みで動作しているかを理解するのに向かないので、コンピュータの仕組 みを理解するためにC言語は学習される場合があるとのことだった。

 C#とJavaは習得しやすく人気がある。
日経XXなどみてもC#は推薦されている。社内での物件でもC#が増えている。ちなみにJavaもウインドウが表示可能で学習が容易、そしてWindows上で動作可能だが、Windows上のアプリ開発ではC#の方が便利だとのこと。


Objective-CはiPhone用なので自分には無関係だが、最近ではSwiftに置き換えられている。VisualBasicは6.0は 仕事で使ったことがあり、EXCELではVBAと名前を変えて使われているが、.NETとの互換性はなく、どちらかというとC#に近いのでC#をやればよ い。その他のWEB系言語(PHP,JavaScript,Python,Perl)はJavaをやった後で考えればよいと思う。


というわけで勉強する言語の優先順序は、まずC#、次がJava とする。
中だるみを防ぐため、学習期間一か月と決めているので、一か月でできる程度のことをやってみよう。JavaやC#をマスターした後にはまた違う視点から作成が立てられるかもしれない。



C++について少し書いておこう。
C++はいまだに重要な言語ではあるが習得が困難なので安易に手を出すべきではないと思う。
過去社内で、C++を使っているプロジェクトを横目で見ていたが、習得するためには血反吐を吐くような厳しいOJTを乗り越えなければならないイメージがあった。個人的にも何度かC++の勉強をトライしたことがあるが失敗に終わっている。あれから大分たったので、多少は状況は改善されているんじゃないかという望みももっていたが、ネット上で調べると今でも相変わらずのようだ。仕事で仕方なく覚えるのでも困難なものを趣味で覚える場合、時間不足という制約も追加されるので、ますます困難だ。

 C++をマスターするには他の言語を覚えるとの違い、テキストを読んで自習するとか"がんばる"程度の根性論では無理で、何か作戦が必要なのだ。本件、別な項に自分なりの作戦を記述しておいたので参考にしてほしい。

しかしながら、100人に一人になるためには、なにかしら困難のあるものをやり遂げる必要があるので安易にできないと言うべきではない。

機能を競うならC#でも良いだろうが、性能を競う場合は習得が困難なことで有名なC++をマスターする必要があるだろう。特にフリーソフトの世界は競争相手が非常に多くレベルも高いと予想する。
念のため、自分が日常的に使用しているフリーソフト・シェアウエアの記述言語を調べてみた

・秀丸→ 非公開。ちなみに、これなしには仕事が成り立たないぐらい毎日使い込んでいる。
・FireFox→ C++
・7zip→ C++
・WinMerge→ C++
・Linux→ C
・Tera Term→  ほとんどC,一部C++
だいたい予想通りだ。考え方をガラッと変え、性能は競わない分野で、C++以外の言語を用いてできることを探すという手もあるが・・。


最後に、
世界で最初のCの教本の共著者であるコンピューターサイエンティスト、ブライアン・カーニハンによれば

「大抵の言語は死に絶えることはない。少なくともある一定のレベルまで受け入れられた言語は死に絶えない。今でもCは他の言語より特定の問題を解決するのに役立っており、無くなることはない」

という言葉がある。いや、いつかは無くなるんじゃないの?などと思ったりもするが。

以上

2015年4月6日月曜日

iPhoneからAndroidに機種変更しよう!! Part 1

前回までで、iPhoneは仕事と無関係な上、趣味でもソフト開発不能のため落選と決まった。偶然だが今iPhoneを使っていて毎月の利用料金が高いので格安スマホ(=Android)への乗り換えを考えていた矢先だったので、早速切り替えることにした。

とある予定の無い日曜日の午前中から作業開始。
事前に、格安スマホに乗り換えたほうが良い人 の条件に合っていることは調査済み。
その条件とは・・
(1)電話をほとんどかけない
 音声はほとんど使っていない。

(2)毎月のデータ通信量が少ない
 毎月のデータ量は2GB以下。

(3)キャリアサービスを使わない
 キャリアメールは使用していない。SMSは使用しているがこれは格安スマホでも使えるとのこと。

(4)機種の性能にこだわらない
・今使っている端末より劣るのはいやだなぁと思っていたが、それは問題なさそうだ。

また、日ごろiPhone使っている機能もAndroidで使えるか確認した。
インターネット(WEBブラウザ)→OK
・メール(SMS)→OK
・Google検索・Gdrv・Gmail・Map→OK
・Line→OK
・twitter→OK
・時計・アラーム
・音声通話→OK
・youtube→OK。むしろ対応アプリがたくさんありすぎてよくわからないが。
・カメラ
・メモ帳
・その他いくつかのアプリ

自作アプリが実行可能であることも確認した。安い端末ではできないなんてことになったらシャレにならない。これはDropBoxが使えればできるらしい。パソコンと手持ちのiPhoneにインストールしてみたが問題なく使えた。

ハード的なスペックも今使っているiPhoneと比べて劣るものではないと判明
ディスプレー解像度 1136x640ドット→ 1280x720
CPU                         デュアルコア1.25GHz→クアッドコア1.3GHz
ROM/RAM                16GB/1GB→8GB/1GB
カメラ(アウト)             800万画素→800万画素
Bluetoothe                Ver4.0
GPS                         搭載→搭載・・いや、GPSの性能ってチップによりまちまちだけどね・・
Wi-FI                        IEEE802.11 a/b/g/n→ IEEE802.11 b/g/n
                   ”IEEE802.11a”がなくなったが、古い規格なので問題なし
バッテリー容量 1507mAh→2300mAh

携帯番号を移行するためSoftbankに電話した。回線が混雑していて15分ぐらいまたされた後、ようやく係と話ができたとおもったら途中で切れてしまい、もう一回。結局1時間ぐらいかかってしまった。その他の注意事項も頭に入れた後、夕方から電車に乗り新宿の大型量販店へ乗り込んだ。

事前に買う機種は決めていし店頭で確認したことも洗い出していた。
・文字の打ちやすさ
・動作の滑らかさ
・持ちやすさ
   いずれも問題なし。なのに係員に買うことを告げるまでに15分ぐらいためらってしまった・・

・今使っているiPhoneのデータのAndroidへの移行
  アドレス帳しか移行できない上に1500円かかるとのことだったので、まず自分でやってみてだめならお願いすることにした
・iPhone下取り価格→値がつかないとのことだった・・
・カバー→取り扱いなしとのこと。

購入し終え、寄り道せず即座にかえる。なんとか今日中にSIMの購入手続きをし、Wi-Fiの設定までしたい。SIMは無くてもWi-Fiは接続できるんだろうな?

家に戻ってきて一休みしたら、SIMカードの購入にかかった。
SIMカードは端末を購入した店ではデータ通信専用のしかなく、音声がまったく使えないのは不都合だったのでネット通販で購入することにした。またガイドブックに紹介されていたIP電話(050Plus,楽天でんわ)はいずれも回線品質に問題があり評価が低いのでNG

通常回線での着信があった場合は無条件で050plusの回線は途切れるのでご注意を!
ということで、「050plus」は評判通り音質が悪いので、無料期間中はイイですが課金
されるタイミングで解約するのがベストでしょう!

・・それってダメってことじゃないか。

続いて自宅のWi-Fiを設定した。久々だったので少し手間取ってしまったが開通した。
続いてGoogleやTwitter,Facebookのアカウント設定をした。

今後の課題
・iPhoneのデータの引き継ぎ
  可能ならアドレス帳以外のものもバックアップを取りたい。フリーソフトで可能らしい。
・SIM到着後の電話の開通
・知人・友人らへ端末が変わったことを連絡するなど?

夜、Wi-Fi開通を記念しネット配信の動画を見て、寝た。

以上。疲れた

2015年4月4日土曜日

今、自分に何ができるか・何をすべきでないか

これまで、ソフトの実行環境として、パソコン・WEB系・スマホ・組み込み系があることを述べた。定年までにそれら全部をマスターしておけば万全だが、時間も金も能力も有限で、無理なことは明白だ。そこで今回は、マスターできる見込みがあり、定年後の趣味や再就職に役に立つものが何かを考えてみる。

評価ポイント
・開発マシン:自分としては使い慣れたWindowsが好ましく、次点Linux。
・開発ツール:何よりも開発ツールは個人で入手可能なものであること。個人向けに販売されていないものや個人で買えないほど高価なものはNGだが、後に取り上げる開発ツールは無料で入手可能なので問題ない。
・将来性:将来、廃れているものはNG。
・自分の仕事や強みとの関連:過去の経験上、仕事と関連がある方が習得が容易である。逆に仕事と全く関係がない場合、いったん覚えても忘れてしまう可能性すらある。また、自分の強みは組み込み系OS・ドライバ・ハード回りなのでそれと関連するものはポイントが高い。
・競争相手が少ないこと
  趣味でも仕事でも、「他に人がまだ作っていないものを作る・他の人が作れないものが作れる」ことが重要だ。結果として、競争相手が少ないカテゴリを選ぶことは重要となる。

また、趣味で作る場合に限って言えば
・作りたいソフトがあること
・出来上がったソフトを世間に公開する場があること

以上を踏まえて選択肢を評価していくと

(1)スマホ
スマホにはiPhoneとAndroidがあるが、iPhone用アプリの開発をするには開発マシンであるMACを持っていない・未経験な独自OSと独自言語を覚えなきゃいけない・仕事と無関係。スマホの将来性は有望なものの、iPhoneは廃れていたり技術の変化が激しくて追従できない可能性があるなど、自分には不利要因が多いので、iPhoneは完全に落選となる。簡単なものを何かつくりたくてもスタートラインにすら立てない。
同じスマホでもAndroidだと状況はマシになる。開発マシンはWiindowsでOK。OSは組み込み用として業界標準のLinuxがベースとなっており、自分も若干経験がある。また、Linuxの世界はオープンソースで、OSやドライバをカスタマイズする話は良く聞くので、自分の強みを生かせるかもしれない。言語は未経験ながら業界標準のJava。Androidも将来的には廃れてしまうリスクはあるが、それでもLinuxとJavaは業界標準なので覚えるメリットはある。できて間もないカテゴリなので、競争相手は比較的少ないと予想する。
趣味で開発する場合、今現在は特に作りたいものがないが、作ったソフトは世間に公開する手段があるし、Androidスマホに入れておけばいつでも他人に自慢できるかと思うとそれも愉快かもしれない。
しかしながら、Androidアプリ開発入門の本・記事を見てみると、Javaの基本的な知識は持っていることが前提となっているようなので、まずPCブラウザ上でJavaを勉強すべきだろう。

(2)WEB系
開発マシンはWiindowsが使えるから問題なし。言語はたくさんあるが第一にはJavaを勉強することになるだろう。しかしながら自分の仕事や強みとは全く縁がない。特にJavaの場合、仮想マシン(VM)上で動作するため、ハード周りを意識することはないだろうし、VM用のドライバ作成もないだろう。しかも競争相手は多い。以前にも書いたとおり、定年後の仕事でWEB系をやることはありえないだろう。
将来性については、シェアは増加方向だが、主な用途は業務系ソフトなので、このカテゴリで100人に一人になる策は想像もつかない。しかしながら前にも述べたようにAndroid用のソフト開発につながる可能性があるのでPC上でJavaを勉強しておくことも有意義であろう。
趣味での開発と考えると、今現在はつくりたいものはない。作ったものを世間に公開する手段は未調査。

(3)パソコン(PCアプリ)
パソコン用OSとしてはWindowsまたはLinuxの二つがあるが、Linuxについては不勉強なのでWindowsに絞って評価する。開発マシンはWiindowsで問題なし。将来性は、シェアは下がるものの2025年まではなくならないだろう。開発ツール(言語)は豊富だが、何を選択すべきかは熟慮する必要がある。自分の仕事は組み込み系でありパソコン上で動作する製品の開発はないが、開発能率を上げるため簡単なPCツールをが自作できたらなぁと感じることは多々ある・・にもかかわらずウインドウが出るソフトは作れなくなって久しく、早急になんとかしなきゃならんと思っている。(以前はVBとかC++Builderで作っていた時もあったのだが・・)
ただし、自分との強み(OS・ドライバ・ハード周り)との関連性を見ると、ハード周りはアクセスできず、OSはブラックボックスで手出しできない。ドライバ作成は不可能ではないが、非常に困難なことで知られているので、100人に一人になることはきわめて困難だろう。

趣味でPCアプリを開発する場合フリーソフトのように、出来上がったものを公開する場はある。ただし、パソコン用のフリーソフトの世界は競争相手は非常に多くレベルも高い。直感だが、習得が困難で悪評高いC++を習得しないと、張り合えるものは作成できないだろう。C++の勉強は個人的に何度かトライしたことがあるが失敗に終わっている。また作りたいものは今のところ思いつかない。
早急にウインドウが出せる言語を習得したいということと、時間はかかっても良いからC++を習得したいという矛盾については、今後策を考えよう。

(4)組み込み系
自分の仕事自体が組み込み系主体なので、この方向で再就職口があればベストだ。また少しだが趣味でHWを開発した経験もある。開発マシンはWindowsが使用でき、言語は自分には使い慣れたC言語とアセンブラ。カテゴリ自体も消滅する危険性がない。少子高齢化で若者が少ない上、ハードに詳しい技術者は減っていることを考えると、このカテゴリでなら100人に一人を目指すことも不可能ではないと思う。その場合、ソフトの開発よりもハードの勉強に重点をおくことになるだろう。
反面、趣味で組み込み系ソフトを開発するには不利な面も多い。たとえば組み込み系用のフリーソフトって聞いたことがない。これは物件毎にハードが異なることが原因だ。また、自分はハード設計のプロではないので、趣味で組み込み用のハードを作成することも困難だ。ちょっと以前なら”不可能”だったが、最近ではPICという、外部に簡単な回路をつけるだけで動作可能で安価な組み込み用CPUがあり、簡単な回路は自作したことがある。ネット上ではPICを使用した電子工作例がたくさん検索できるので、それらを参考に、理論的には多少怪しくとも,回路を作りソフトを作成することもできなくないだろう。しかしながら、世間様に公開できるクオリティのハードを作るのは困難だろう。

また、以前述べたような「ライフワーク的な壮大なテーマを一つ持っていて、長期間作り続ける」ためには必然的に巨大なソフトを動かせる環境でなければならない。つまりROM/RAM領域も大きくなければならない。 ちなみに現時点で一番メモリ容量が大きいPICはPIC32MXでROM512KB,RAM32KBで、メモリ容量は今後さらに大きな製品がでることが期待できると思う。ソフトが大きくなってメモリが不足するよりも前に自分のハード設計能力不足に苦しむだろう。

今なら聖地・秋葉原にも近いので部品の調達も簡単。
そういえば作りたいものもいくつかある上に本もたくさん買い込んでいた・・・

というわけで、まとめると
自分が勉強できるソフトの実行環境は、パソコンかWEB系かAndroidスマホか組み込み系であり、iPhoneは失格。
・Androidをやる前にPC用のブラウザ上でJavaをマスターするべき。
・仕事との関連の強さでは、
   組み込み系>パソコン>>Android>WEB系 

・将来100人に一人になれる可能性
   組み込み系>>Android>パソコン>>WEB系

また、趣味・仕事どちらでソフトを作るにしても、WEB系、スマホ、パソコン系とも、入門レベルで良 いから広く浅くソフトを開発しておく必要があるだろう。面白そうだからという理由もあるが、仕事で再就職先を見つける際、職歴を尋ねられて、組み込みオンリーだというと、業界の進歩に取り残されているんじゃね?と思われて 不利なはずだからだ。あと、将来をもっと正確に予測するためにも、それらの知識を有しておくべきだ。ザックリだが、どれも一ヶ月ぐらいをメドに入門書を買ってやってみるべきか。一ヶ月以上ということになると中だるみする可能性がある。

ただし、入門レベルを超え、エキスパートを目指す場合、仕事とは別に余暇を利用して勉強するスタンスでは、時間不足という大きな制約があるので、それ専門のプロには太刀打ちできないことを肝に銘じておく必要がある。可能なら、ある程度作れるようになった後は、自分から希望してその方向のソフト開発プロジェクトには入ることを提案したほうが良い。また、仕事でやるようになった後も、自分の強みである、組み込み系・OS・ドライバ・ハード周り とリンクした展開にできるようにすべきだ。つまり、パソコン+組み込みとか、WEB+組み込み、スマホ+組み込み など。

ともあれ、手持ちの情報が少な過ぎる。趣味でソフトを作るにしても仕事で作るにしても今より情報をもっと集め、じっくり考える必要がある。
 以前は日経XXとかインターフェース誌とか一生懸命読んでいたのにやめてしまったが、もう一度読んでみよう。
・平行して、WEB系、スマホ、パソコン系とも、入門程度の開発を実施する
 新しい言語を勉強し、何本か小さいソフトを作ってみる。

情報収集に疲れたら、ソフトを作るというスタンスだろうか。