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系、スマホ、パソコン系とも、入門程度の開発を実施する
 新しい言語を勉強し、何本か小さいソフトを作ってみる。

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

 

0 件のコメント:

コメントを投稿