みなさん、おはようございます。こんにちは。こんばんわ。
不労所得でFIREしたいYリーマンと申します。
今日もFIREに近づくため発信していきたいと思います。
- SE(システムエンジニア)を目指しているけど、何のスキルが必要なの?
- SEになる人はプログラムが書ける以外に求められるスキルってあるの?
と悩んでいる人に向けて
大学で4年間情報工学を学び、仕事でIT部門を10年以上経験したわたしが
- これからSEを目指すなら、どんなスキルがあればいいのか
- プログラミング以外に必要なスキルは何があるのか
- どういう人材がSEとして求められているか
が、分かる記事を書いていきます。
wikipediaより
SE(システムエンジニア)の職域に関する明確な定義は存在しないが、日本の企業では慣習的にコンピューターシステムやその周辺の情報システムに関わりながら以下のような業務を行う者を指すことが多い
企画、設計、開発、評価、プロジェクトマネジメント、コンサル、工事、保守、運用
では、さっそくいってみましょう。
SEに必要なスキル
SEに必要だと思うスキルを8つの分類に分けて紹介していきます。
1つ1つ自分に当てはめて考えてみてください。
前提編
まずは仕事を始める前に前提条件として持っておきたいスキルがあります。
スキルもありますが、中には生活習慣に近い内容も含みます。
スキル1 コミュニケーション能力がある
それってSEに関係あるスキル?
ご意見はごもっともですが
このスキル、重要です!
いきなりシステムとは全く関係ないと思われるかもしれませんが、大事な要素です。
少し偏見も入ってしまうかもしれませんが、SEを目指す人はコミュニケーション力が人より低い傾向にあると思います。そしてわたしの周りでは、このコミュニケーション力が低いほど仕事が大変に、高い人ほど仕事が楽になっています。
その理由はいくつかあります。
- 仕様を伝えた、伝えてないで揉めることがある
- ユーザが本当に求めていることを仕様に落とせず、結果手直しが発生する
- 運用を知らずに開発して、ユーザが望んだものができない
- 事前に仕様を調整していれば、更に良い解決方法を提案することができる
あげればきりがないですが、コミュニケーション力があるほうが圧倒的に有利です。
ここまで聞いて
コミュ力なんて高められない・・・
と思っている人に朗報です。
今までは電話や直接会話をしに行くことが必要でしたが、最近はツールやITを活用することでコミュニケーションをとることが簡単になってきています。
どうしても対面して話すことが苦手であったり、会いに行くという行動を起こすのが難しい人でも、やり方はいろいろある時代になりました。
更にSEを目指す人にコミュニケーション力が低い傾向があるということは、逆に言えば、少しコミュニケーション力が高くなれば他の人との差別化にもつながります。
正直、プログラムを頑張って覚えることに比べたら、コミュニケーション力を高めることは、そこまで難しいスキルではないと思うので、ぜひ事前に磨いておいて欲しいスキルです。
スキル2 体力がある
2つ目も、一見SEに必要なスキルとは思えないことかもしれませんが、重要なスキルです。
土木工事をするわけでもないのに何で体力が必要なの?
それはいくつか理由があります。
- サーバーなどの機材を運んだりすることがある
- システムが稼働していない休日、夜間に業務をすることがある
- 業務の負荷に波がある
最近は少なくなりましたがシステム構築するための機材を扱うことがあり、持ち運んだりする際に体力があったほうが有利です。
またシステムを管理している立場なので、ユーザが使っている日中は作業ができず夜間にシステム切り替えなどをすることが出てきます。
更にシステム導入後、安定稼働しているときはいいのですが、システム導入が重なると業務負荷が高くなり、それに耐えられる体力が求められます。
もし体力に不安があるならば、普段の生活から運動や体を動かす習慣をつけておくと良いでしょう。
ちなみにわたしの場合は今でも少なくとも年に2,3回程度は休日や夜間による対応があります。
スキル3 効率化を求めて改善する意識がある
これは会社という組織が効率化を求められるものなので、普段から与えられた仕事を自分なりにカスタマイズして改善していこうとする意識があるほうが良いです。
特にSEを目指す人であれば一般的な人と比べて、簡易なシステムを組んだりパソコンに便利な設定を入れる工夫はできるはずなので、仕事のやり方を改善をすることが簡単にできます。
自分に与えられる仕事は基本的に純増することしかありません。そんな時に与えられた仕事を自分で改善して作業時間を短くしていくというスキルが求められます。
仕事量がパンクする前に改善して楽になろう♪
スキル4 エディタを使って文字加工ができる
後で出てくるプログラムが書けることと同じくらい重要なスキルになります。意外とできない人が多いです。
これがいわゆる学校の勉強で学ぶことと実際の現場で重要になるスキルの差というのでしょうか。少なくともわたしもSEを目指している中で、まったく持っていなかったスキルでした。
テキストを加工できると何が良いのかは以下の通りです。
- プログラムを一部加工して流用する際、圧倒的に手数が少なくて済む
- データの検証を行う際、比較しやすいデータを作成可能
- いろんな作業の精度を上げることができる
これも挙げればキリがありません。
例えば、プログラムを一部加工する際、過去に運用しているプログラムの安定性を信頼し、それを一部加工することで流用することになった場合、特定の文字だけを別に文字に置き換える作業が発生します。
2、3ヵ所であればよいのですが、大きなプログラムになれば100、200で収まればよいですが、1000以上の場所があったりします。
人が目視で1つずつやっていたのでは作業が終わらないのに加え、全部終わったと思ったら途中で漏れが発生していたなんてことがあったら目も当てられません。
そんな時にエディタの機能をうまく使って文字加工することができれば圧倒的に楽に作業できます。ツールによってコマンドや利用方法が違うので、得意なエディタを1つは作っておくのがいいでしょう。
ちなみにわたしが愛用しているのはフリーソフトのサクラエディタです。
特定文字だけの抽出、文字列の検索、切り出し、全角→半角変換、重複行の削除、データの昇順・降順並び替えなど、これだけでも一部ですが、やれることで作業効率が格段にアップし、その精度まで上げられる一石二鳥のスキルです。
スキル5 エクセルが使える
これは言わずもがな、マイクロソフトが出している表計算ソフトです。
使い方によっては、これだけでプログラムに近いことを実現できます。
たまにエクセルでやった方が早いじゃんって言われることもありますw
さすが天下のマイクロソフト!
エクセルはエディタの文字加工と組み合わせて使うことが多いですが、単体でも十分に強力なスキルです。
エディタだけでなくエクセルでも文字加工はできますし、それ以外にも便利な関数が多くあります。よく使う関数を覚えておくことで作業効率を格段に上げることができます。
また自分で使わなくても現場では独自に組まれたマクロが動いていることがあるので、その問い合わせに対応するために知っておくべきです。
業務をやるうえで入っていない会社はないのでは?というくらいメジャーなソフトなので使えるようになっておくことは必須です。
コーディング編
やっとSEらしいスキルの紹介になります。
10年前のわたしが、今の仕事に就職する時に必要だと思っていたスキルもあれば、まったく想像していなかったスキルもあります。
スキル6 プログラムが書ける
このスキルはSEを目指している人ならば、おそらく誰もが必要だと思って磨いているスキルです。
まずは何か自分の自信が持てるプログラム言語1つで良いので、プログラムが書けるようになっておくことは必須でしょう。
ただここで注意点があります。
システムを作る際、実現したい動作は決まっていますが、それを実現するためのプログラムは100人いれば100通りの書き方をすることができます。
たまにこの書き方についてこだわりがあり、その人独特のプログラムを書いてしまう人がいます。
そのプログラムを今後もずっと1人で管理していくのであれば良いのですが、たいていは複数人以上や後で担当になった人が見ることになるので、他の人が理解に苦しむことになります。
ただ書ければ良いではなく、みんなが理解できるプログラムを意識するということが大事になります。
プログラムの難しさを少し例えて紹介します。
仮に「池の対岸に渡りたいと」いう目的があったとします。
ある人はエンジン付きのボートで、すぐに対岸にたどりつけますが、他の人はエンジンのかけ方・止め方がわからずエンジン付きボートを使いこなせないことがあります。
そういう時は逆に誰でも確実に進める手漕ぎのボートであった方が、多くの人が対岸に渡ることができる。そんなイメージです。
スキル7 プログラムが読める(処理が想像できる)
プログラムが書けることは紹介しましたが、それとは逆にプログラムが読めること、これもまた必要なスキルになります。
プログラムが書けることでみんなが読みやすいプログラムを作ることを注意点としてあげましたが、どれだけ注意をしていても読みにくいプログラムは出来てしまっているものです。
また過去の資産で、今はあまり使われていない言語で動いている仕組みがあったりします。そういったプログラムに直面したときに必要なスキルになります。
SEに質問をしてくる人が良く勘違いしているのですが、往々にして質問者はSEの誰もが全ての仕組みを知っている前提で質問を投げかけてくることがあります。
人によっては、「あれが動かなくてさぁ」って聞いてくる人も、、、
あれって何よ?(笑)
少し愚痴っぽくなってしまいましたが、質問者はSEがそのプログラムを知らないとか読みにくいプログラムかどうかはお構いなしなので、それに答えないといけない局面が出てきます。
そんな時、自分の知らないプログラムを読むことになったり、ユーザが言っていることから処理を想像してプログラムを解析するスキルが必要になります。
もちろん細かい制御を知る場合には言語ごとの仕様を正確に把握する必要がありますが、プログラムの全体の流れや処理を想像できるスキルはあっても不便になることはありません。
わたしも一つ一つ言語を勉強したというより、問い合わせや業務の中で何度が眺めることで、こんなことをやっているんだろうなと分かるようになりました。
スキル8 プログラムの空気を読める
プログラムにも空気がある?
少し抽象的な言葉になってしまいましたが、「空気を読める」とは過去に書かれている書き方に習って、追記ができるかどうか。ということになります。
少し前にKY(空気が読めない)という言葉がはやりましたが、プログラムでもKYにならないことが重要になります。
もちろん明らかに読みにくい、この書き方はだめだと思うプログラムの空気を読む必要はありませんが、そうでなければ流れを汲んでプログラムを追記するというスキルが重要になります。
あまりに想像できないと思うので、簡単なサンプルを出すと
- if (A = 1 AND B = 2) ・・・ ⇒ 「Aが1」かつ「Bが2」の場合
に「Cが3」かつ「Dが4」の場合という追記をする場合
- if (C = 3)
if (D = 4)
・・・ - if (C = 3 AND D = 4) ・・・
どちらも表面的な動きは同じだとして、あとから見て明らかに2の書き方が空気を読めていると思いませんか?
(細かい書き方があっているかどうかは別にして)
プログラムは書くことでも伝えましたが、複数人で保守メンテナンスをしていく場合、独りよがりのプログラムにならないよう気をつけましょう。
データベース編
このスキルはわたしが学生時代に一番さぼって、さっぱり理解できていなかった分野です。
最低限、基本となるRDB(リレーショナルデータベース)を1つは扱えるようになっておくと良いです。
管理No | 名前 | 年齢 | 性別 |
001 | Aさん | 28 | 男 |
002 | Bさん | 19 | 女 |
管理No | 使用言語 | 使用DB |
001 | C# | Oracle |
001 | Java | SQLServer |
002 | Python | DB2 |
あまり細かい仕様は除いて、ざっくりとデータベースに関連して持っていたほうがいいスキルを紹介します。
スキル9 簡単なSQL文が書ける(※難しいSQLが書ける必要はない)
「簡単なSQLが書けること」これが必要なスキルです。
もちろん難しいSQLを書けるほうが便利ではありますが、実業務ではそれよりもシンプルなSQLが書けることの方が重要になります。
「プログラムが書けること」でも言ったのですが、SQLも実現したい処理に対して書き方はいくつもあります。少し複雑な処理をしようとしたとき、1つのSQLで実行することもできますが、わたしはそれをオススメしません。
なぜなら仕様が変わったときに、そのSQLを怖くて変更できないからです。SQLの沼にはまると抜け出せないこともしばしば。
これは個人差があると思いますが、わたしはSQLこそシンプルであれという思想で作っています。
SQL1回で実行できることも、処理の単位を考えてあえて2回に分けて実行するほうが後で見る人にやさしいと考えています。
わたしの個人的なルールの一部として「見るテーブルは多くても5つくらい。副問い合わせは基本的には使わない。使っても1つまで」などを考えています。
簡単なものだけでいいの?
もちろん書けた方が便利だけど、複雑なSQLを見ると
メンテナンスする気がなくなりますw
スキル10 SQLコストなど負荷について理解がある
最近は技術の進歩やマシンのスペックが上がったことによって意識することが少なくなりましたが、DBにSQLを実行することでコストがかかりマシンに負荷がかかっているということを知っておきましょう。
一人で作業をしているうちは自分にしか影響がないので良いのですが、大勢でDBを扱うようになると、ある一人が負荷が高い処理をすることによって他の人が作業できなくなることがあったりします。
DBが爆発することはありませんが、仕事が炎上することはありますw
SQLは使う人によって同じ結果を得るのに数秒で済む場合と何分もかかる場合があり、そのコストにも違いがあります。
コストについて説明しようとするとインデックスと言われる概念や細かい仕様を説明する必要がありますが、ここではコストや負荷があるということを知っているということだけにとどめます。
このSQLコストや負荷について知っていることで安易にDBを扱うことがなくなり、設計段階でDBレイアウトをどうするか、開発時にどうやってSQLを実行するかなど、全体を考えることができるようになります。
スキル11 NoSQLについて知っている
NoSQLはここ数年でよく聞くようになった言葉で、わたしもまだこれから勉強をしないといけない分野ですが、RDBとは違い関係性(リレーション)がないデータベースの種類を指します。
RDBはSQLを使ってデータを処理しますが、NoSQLは言葉の通りSQLを使わなくてもデータを処理することができます。
このDBについて知っているといい理由としては、最新技術(Iotから取得できるビックデータを処理するためや大量のデータを扱うAIなど)で使われているものだからです。
これから企業が本格的に最新技術を業務に適用していくので、この技術について知っているだけでも有益なスキルになります。
わたしが知っている代表的なNoSQLはMongoDBしかありませんが、今後勉強を進めて個別の解説記事を作ろうと思います。
開発ツール編
ここまで開発をするにあたりコーディングとデータベースについて説明してきましたが、小難しいと感じた人が多いと思います。
全てを1から自力で作るのは無理!
そんな人でも大丈夫です。先人の知識や技術を集約した開発ツールと呼ばれるものがあります。無償・有償いろいろありますが、これらを使うことで圧倒的に開発や保守が楽になるのです。
「お金」を生贄にささげて「開発ツール」を召喚!
SEはプログラムが書ける読めるだけでなく、各ツールに順応するスキルも持っておくと非常に円滑に業務を進めることができます。場合によってはツールを使えるだけでも、十分SEとしてやっていけるケースもあります。
スキル12 統合開発環境を使った経験がある
統合開発環境とはプログラム開発をする際に開発者をサポートする環境のことで、これがあるだけで開発スピードは何倍にもなります。
代表的なものにVisualStudio、Eclipse(イクリプス)などの環境があります。
VisualStudioの開発環境のイメージはこんな感じです。
どちらも開発をするうえで、コードを記述するサポートがついているのとコンパイルはボタン一つで出来ます。わたしが大学時代に習ったコマンドベースのコンパイルとはかけ離れた作業効率を持つ開発環境です。
どちらも無償で使えるバージョンがあるので、自分のパソコンに入れて事前に慣れておくのが良いでしょう。
スキル13 システム間連携ツールに慣れておく
統合開発環境はプログラムを書くために使うツールでしたが、データ連携ツールとは直接コードを書くというよりは設定を入れることでプログラムで実装しているのと同じようなことを裏で処理してくれるようなものになります。
中にはファイルを連携するものからDBを連携するものまでさまざまです。ツールごとの特性を理解して利用できるかどうかが重要になります。
わたしが実際に使って知っているものはAsteria、HULFTなど、最近のツールだとDataSpiderなどがあります。
こういったツールは有償のものが多いので、がっつり事前に触れるというのが難しいかもしれませんが、期間限定の無償版が配布されているので触ってみるといいかもしれません。
ただシステム間連携ツールというだけあって、パソコン1台ではその有用性は分からないと思うので、あくまで使用感をつかむということになると思います。
スキル14 ノーコード、ローコーディングツールを扱える
ここ数年で特に増えてきているのが、ノーコーディング、ローコーディングツールになります。
小学校の教育にもプログラミングが入ったように、プログラムが出来ない人でも簡単にシステムを作ることができるツールで、習得レベルはプログラミングよりも簡単なためスキルとして持っておくのが良いと思います。
またこのスキルは2つの観点から持っていたほうがいいと思います。
- 作る側の立場:コードを書かなくても簡単にプログラムを作れて業務改善ができる
- 作った物を見る側の立場:簡単にプログラムを作れる反面、煩雑に作られたプログラムが蔓延するのを防ぐため、どんなものがあるかを把握しておかなくてはいけない
ツールの例として挙げられるのは「Microsoft PowerApps」に「OutSytems」、「Kintone」なんかもその一つだと思います。
またRPAはどちらかというと挙動を記録するエクセルマクロに近いのですが、この部類の1ジャンルと言っても良いのではと考えています。
サブ技術編
ここでは直接開発には関係ないですが、サブ的に知っておいて欲しい、もしくは詳しいと重宝されるスキルを紹介します。
スキル15 コミュニケーションツールに詳しい
システム開発以外にも最近のSEに求められるのはチャットができるTeamsやSlack、web会議などを行うZoom、WebexやMeetなどコミュニケーションツールに詳しいスキルもあると嬉しいです。
最近は在宅ワークも増えてきているので、これらのコミュニケーションツールが使えることは必須のスキルになってきています。
開発を行う際の情報共有だけでなく、他部門からのweb会議を主催してほしいなどの相談もあるので、サブ的に知っておきたいスキルです。
スキル16 Android、iPad端末を使い倒している
コミュニケーションツールにもあるようにweb会議はパソコンだけでなく周辺機器や別の端末、携帯端末などで行われることも増えています。
そんな時に使うのがAndroid端末やiPadなどです。この辺りを使いこなせると仕事もスマートにできます。
今後さらに実業務での活用が多くなることも予想されるため、普段から使い慣れておくのが良いでしょう。
また場合によっては上でも紹介した統合開発環境で開発ができるので、興味があるのであれば自作アプリを作ってみて、どういう機能があるのか知っておくのもいいと思います。
ちなみにわたしは個人的にiPhoneSE第二世代、iPadAir第四世代、AirPodsProは持ってます。ApplePenとかAndroid端末も、勉強の一環?としてちょっと欲しいなぁ
ネットワーク編
次に必要なスキルはネットワークについてです。社会人になりたての頃は、わたしもSEにそこまで必要なスキルかどうかよくわかっておらず、入社5年目くらいまではあまり知識のない世界でした。
しかしシステムを開発していくにつれ、他の仕組みとの連携を考慮したり社外とのデータ連携を扱うようになり、必然的に必要なスキルになっていきました。
スキル17 プログラムの通信方法を知っておく
最初のうちはそこまで知っていなくてもやっていけるスキルだとは思いますが、年数が経つにつれ徐々に重要になってくるスキルです。
SEも最初のうちは小規模かつ過去のプログラムの改修にあたることが多いと思うので、既に組みあがった技術の上に成り立っている仕組みを扱うことになります。
ただ年数が経つと、新に開発するプログラムを扱いようになり、プログラムの仕様はもちろん通信の方法にも詳しくなっていないと設計ができないようになってきます。
もちろん詳しい人に聞ければいいのですが、いつもうまく聞けるとは限らず、いつか自力で解決して前に進むことが必要になるときがきます。
せっかくプログラムに詳しいのに通信方法に詳しくないのはもったいないことです。プログラムの通信方法まで手のひらの上に収めることができれば、鬼に金棒状態のSEとなれるでしょう。
ただこのスキルの難しい点は、自宅のインターネット環境だけでは簡単には学べないことも多いということです。
もちろん今はネット上にいろんな情報が上がっているので調べれば学べないことはないですが、意識的に知ろうとしなければ学べない技術もありますし、企業のLAN環境内の動作については家庭環境ではなかなか学べない技術もあります。
スキル18 社外との通信方法も知っておく
プログラム開発をしていて一つのハードルになるのが、そのシステムが社外との通信方法に絡むかどうかです。
社外との通信をする場合は通信経路を意識するべき経路が増えるので、この知識があれば社内の環境にとどまらず、業務の幅を広くすることができます。
後で出てくるセキュリティ編とも関連しますが、通信経路を把握していないとプログラムがうまくできていたとしてもネットワークとしての問題があるかどうかを把握することができません。
また漏出してはいけない情報を発信してしまっている可能性もあるので社外との通信方法については知っておきたいスキルです。
プログラムの通信方法と同様に家庭環境だけではなかなか学ぶのは難しいので、まずは社外との通信における「VPN」や「プロキシー」と言うワードだけでも学んでおきましょう。
ネットワークはまだまだ自分も勉強中。
詳しくなると普段の生活でも役立つケースも♬
セキュリティ編
5年前くらいなら、そこまで重要度は高くなかったであろうスキルですが、最近のSEには必須となったスキルです。
このスキルがないと外部に公開したサイトから情報が漏れた、、、なんてことがあった日には大変なことになります。
スキル19 セキュリティ意識を持つ
社外との通信方法とも密接にかかわる内容になりますが、いかにして社外に漏れてはいけない情報を管理・運営していくかを判断するために必要なスキルです。
ここ数年、大企業が外部からの不正アクセスを受けて顧客情報を流出させてたというニュースをよく見かけますが、SEになるとまさにその情報を扱うことになるので、データの扱い方には気をつけないといけません。
サブ技術編でもあったAndroid端末やiPadを社外に持ち出して使うケースも増えるでしょう。またSEは社内の多くの情報にアクセス可能になるので、人一倍セキュリティ意識を持つことが大事です。
資格編
必要なスキルと言いつつ、わたしが資格を持っていないので自分への戒めと思いお伝えしますが、SEになるために持っておいた方が良い資格を紹介します。
スキル20 基本情報、応用情報
おそらく聞いたことがあるであろう資格だと思いますが、「基本情報」は浅く広く情報技術に関する知識を覚えるために持っておくべき資格です。
また「基本情報」をクリアした後には「応用情報」といって範囲は基本情報と同じくらい広いですが、もう少し専門的な要素が入った資格があります。
応用情報も入社前に持っていればいいですが、持っていなくても入社2~3年目くらいでは持っていたい資格です。
スキル21 上級資格
すでに基本情報、応用情報と取得している人がいるのであれば高度な知識・技能にあたる、その上の資格に挑戦しましょう。
ドラクエでいう、戦士と魔法使いを極めると
上級職の魔法戦士になれる。そんな資格です。
上で紹介した基本情報、応用情報をクリアした人が次に取得すべき資格で、これをSEになる前に取得している人がいれば現場でも役立つこと間違いなしです。
具体的には
- データベーススペシャリスト
- ネットワークスペシャリスト
- プロジェクトマネージャー
などがあります。
自分がどういう分野に進むかで取得しておく資格は変わりますが、基本情報や応用情報を合格しているのであれば、一部試験が免除になるので間髪入れず取得に取り組むといいと思います。
たださすが上級職だけあって、簡単には合格させてもらえません。基本情報や応用情報は2割以上の合格者がいますが、これらの資格は2割以下の合格率です。
まとめ
今回は大学で4年間情報工学を学び、仕事でIT部門を10年以上経験したわたしが、SE(システムエンジニア)を目指すのであれば、持っておくと良いスキルを8つの分野にわけて紹介してきました。
それぞれのスキルが多く、細かく説明ができなかったものもあるので、今後さらに解説をしていけたらと思っています。
もし現時点で紹介したスキルをすべて持っているのであれば、自信を持ってSE志望してください。ただ必要になるスキルは時代と共に移り変わるので日々の勉強は欠かせません。
これだけ聞いていると大変だなと思うことばかりかもしれませんが、スキルを習得すれば、どこの企業でも稼げる職種だと思うので勉強しておいて損はないでしょう。
またこの記事が難しすぎると感じたのなら、本当に一からパソコンについて詳しくなるための記事もあるので参考にしてください。
今回紹介したものは生活習慣から細かいスキルまで様々ありましたが、わたしも全て最初はできていないことばかりでした。中にはまだ習得できていないこともあるので、これから勉強していきたいと思っています。
記事を通して、SEを目指す人が何をスキルとして習得したらよいか分かり、少しでも役に立てばと思います。
昨日よりも今日、今日よりも明日。
充実(ワイワイ)した生活を送れる日を目指して
頑張っていきましょう!