お子さんがプログラマを目指す方へ

記事
IT・テクノロジー
おはようございます、こんにちは、こんばんは。

先日、息子の中学の卒業式へ行ってきました。
中にはITに興味を持ち、将来は「プログラマ」になるという子もいました。

それを聞いた時の私の率直な感想ですが。
「プログラマは目指すものじゃない」
という事を1番に思いました。

確かにデスクワークではありますし、
IT系の人材が日本には不足しており、
日本はITなどの分野において世界基準よりも下だと思っています。

【プログラマは目指してはいけない?】

では、なぜ「プログラマ」を目指してはいけないかですが。
正直に言いますと、「プログラマ」はITやシステム開発においてですが、
「入口」にすぎません。

全ての会社がそうではありませんが、
システム開発において、新入社員や新人がまず担当するのは
「テスター」
と呼ばれる他のプログラマが作成したプログラムの
「テスト要員」
をさせられる事が多いです。

バグが無いかを時にはテスト手順書に従いテストを順次行っていく作業です。
小さなキャンペーン用のものなどは手順書は無い場合も多いです。
専門を出ていようが、全く違う出であろうがまずはやります。
その後は会社によってばらつきはありますが、
新人にやらせたりするのは、
「受注していない案件をやらせてみる」
というのを行ってみるのがあります。
ただ、「受注していない」とは伝えませんが。

内容的には私がプログラムを組んでテストまで完了するのに
時間にして1時間程度で終わる内容が多いですかね。
ただ、専門出であろうが別出であろうが、
スピードやテスト内容まで同等に出来る人材はほぼ居ません。
しかし、プログラムを書かせてみると、
その人の思考方法がある程度掴めます。

私自身は最終学歴が中卒で、
インターネットが今ほど進んでいなかったので、
独学でC言語の入門本を片手に勉強して、
事務補助のアルバイト募集に応募し、
そこでシステム担当の部長と喫煙室で同席した時に、
事務補助の手際が評価され、C言語を独学でやっていたと話した事から、
短期の事務補助アルバイトだったのですが、
そこから正社員と異例の経歴を持っています。
自分で言うのもなんですが、とにかく運が良かったと思っています。

話を戻して「プログラマ」はなぜ目指すものじゃないのかですが、
実際「プログラムを書く」というのは決して難しい事ではありません。
以前に記事で書いたのですが、
「プログラマ」の先は「システムエンジニア」です。
目指すのであれば「システムエンジニア」かなと。
この2種は上下関係にありますが、大きな違いがあります。

上記している通り「プログラムを書く」は難しくありません。
システムエンジニアの設計に従い、
与えられた要件を満たしたプログラムを書ければプログラマです。

現在、「AI技術」が大きく取り上げられており、
メディアなどでも度々取り上げられていますが、
「将来ロボットやAIに仕事が取られる」
というのが出てきています。
ただ、私個人としてはまだまだ先だと思ってはいますが、
「プログラマ」は「AIに取られる職業になる」と思っています。

「システムエンジニア」はどういったものをどう作るか、
AIを作るのであれば、
「AIにどの様な作業をさせ、どの様な部分を学習させるか」
など、AIをどう作るかを考える職業ですので、
「AIに乗っ取られる職業」ではありません。
「AIではなくここは人間でチェックをしましょう」
などの判断もシステムエンジニアが設計段階で下します。

「プログラマ」を経験しないと、
「システムエンジニア」にはなれません。
プログラムを理解する事が出来なければ生み出す事も出来ないからです。

作業が早く、ミスが少ないプログラマであればある程、
自分独自のライブラリというのを抱えています。
簡単に言うとよく使う機能の集合体です。
これを持つか持たないかだけでスピードや正確性に差が出ます。
まずはミス(バグ)の無いプログラムを書ける事。
そして自分独自のライブラリの構築を目指すと良いでしょう。

【プログラミング言語は何がいいですか?】

これもよく聞かれます。
「何を目指したいか」
によって答えは変わってきたりもするのですが、
私は「PHP」という言語をお勧めしています。

理由は簡単で、
・ほとんどのサーバーで(Windowsでも)動く
・変数の定義などしなくても良い(分からない場合は気にしない)
・開発手法の選択肢が多い
からですかね。

プログラミングに興味がある人なら、
「オブジェクト指向」
なんて聞いた事があると思いますが、
PHP自体はオブジェクト指向でも使えますし、
ガッツリとしたソースコードのみでも使えます。
データベースとの連携も簡単に出来ますし、
現在必要なIT系の基礎はほぼ習得出来ます。

私が所属していた会社の社長とは、
「ifとforさえ分かれば後は得意言語なんて関係無い」
という話もしていましたので、
基本を押さえるという意味では入門にうってつけですし、
言語なんて案件によって変わって当然なのでまずは基礎固めをしましょう。

私自身、上記の通りC言語の独学から始まりましたが、
主に使う言語はPHPでした。
でも、業務によってはJavaScriptを使う事もあれば、
Javaを使う事もありましすし、Unityでアプリも作りましたし、
別言語のプログラム同士をデータベースを介さずに、
独自データファイルを作成してそこからデータベースへ登録や、
POSレジ(お店のレジの機械)と連携したポイントシステム
なんかもやっていました。

【今注目の言語は?】

使う場面がそれぞれ違いますが、
・Python
・Rust
はまだまだ伸びると思っています。
上記しているPHPもまだまだ現役ですし、Javaも現役です。
ただ、まずはプログラムに慣れるのが先決です。

【システムエンジニアを目指すには】

以下が最低限必要だと思っています。
・プログラムへの理解力
・倫理的思考
・プログラムへ依存しすぎない
・人間はミスを犯す事を前提として考える
・工程管理
・仕事を渡す勇気
といった所でしょうか。
では、1つずつ解説します。

1.プログラムへの理解力
 「何」がプログラムで出来て「何」が出来ないのか。
 そして仕様書から「何」をしなければいけないか。
 それが分からないとまず始まりません。
 この「何」には応用も含まれます。

 プログラムではデータを変数という箱に入れます。
 プログラミング初心者は文字列や数値を勉強で教えられますが、
 画像データや音声データや音楽データなどなんでも入ります。
 写真投稿アプリを作ったとして、
 送られてくる写真の形式は統一されているでしょうか?
 iPhoneでも別の形式で送られてきたりします。
 それを同じ形式に変換してから保存し、
 ついでに写真データのプロパティも真っさらにしてあげないと、
 利用者にとってデメリットが多くなってきます。

 ただ、仕様書には、
 「送られてきた写真データは〇〇形式に変換を行い保存する」
 としか書かれていなくても、
 「プロパティの削除」
 「現在使われている写真データの保存形式」
 「全ての保存形式から指定された保存形式への変換」
 が出来ていないとプロの仕事ではありません。

 外部からアクセス出来る場所(WEBサーバなど)に、
 元の写真データを保存したりするのであれば、
 それこそ暗号化を行い写真データを、
 「特定のキーでしか復元出来ないデータ」
 にして保存したりもしなくてはいけません。
 写真データには位置情報や使用機種なども入りますからね。

 「送られてきた写真データは〇〇形式に変換を行い保存する」
 というプログラムを作るだけでも上記は最低限必要かなと思います。

2.倫理的思考
 「倫理的思考」また「ロジカルシンキング」とも言われますが、
 簡単に言うと複雑な物事でも要点を見つけ、
 分解してそれぞれに対してアプローチ出来る思考です。

 1で言った写真データの保存に関してもそうです。
 写真のデータを保存するプロセスを分解し、
 各段階において必要なアプローチを行う必要があります。

3.プログラムへ依存しすぎない
 システムを作るという事は、
 「本来人間がやっていた事をプログラムにさせる」
 ということが多いです。
 莫大なデータを処理する事も人間に出来ない訳ではりませんし。

 ただ、プログラムに全てを渡すという考え方は危険です。
 ペッパー君(Softbankのロボット)でも、
 首の後ろに緊急停止ボタンがあったりなど、
 プログラムだけではなく、
 人間の手、人間の目というのは大事だという事を忘れてはいけません。

 倉庫にある商品をロボットのみに集めさせた場合、
 バーコードが汚れていて読み取りを間違えても気付けません。
 商品の形状、材質、名前、全てを理解はしていないからです。

4.人間はミスを犯す事を前提として考える
 人間である以上、絶対にミスが無いとは言えない事は理解しましょう。
 2重、3重のチェックを入れてもミスは出ます。
 そのミスを極力減らす、効率化を促す事が大切です。

 また、このミスはプログラマにも言えます。
 プログラマも人間です。
 ミス(バグ)はあります。
 そこを責めてもしょうがありません。
 「なぜそのバグは生まれてしまったか」
 「なぜそのバグが最終段階まで残ったか」
 が重要であり、バグが発生した事自体は大した問題ではありません。

5.工程管理
 これはシステムエンジニアだけではなく、
 管理者として必須です。
 プロジェクト全体から、どのプログラムをどのタイミングで作成し、
 連結したテストが行えるようにするか、
 また、プログラマにも早さや正確性など個人差はあるので、
 割り振りも重要です。

6.仕事を渡す勇気
 正直、自分がやった方が正確で早い事なんて、
 どんな職業でも長年やれば出てきて当たり前です。
 ただ、渡す勇気は必要です。
 人間1人に持てる量は限られています。
 部下が育たなければ自分も上を目指せません。
 部下に勇気をもって任せ、
 自分は上を目指さないと部下が自分のポジションに上がれません。
 上司と部下で言っていますが、
 先輩と後輩でも一緒です。
 任せて失敗しても躓いてもフォロー出来る体制を作れるかどうかです。

といった所で唐突ですが今回はここまでにしておきます。
サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す