IT業界に入ったらこれだけは知っていて欲しい
こんにちは。
システムエンジニアのtomoです。
先日スマホでニュースを見ていたら最近の若者はPCに関するスキルや知識がほとんどないとの記事を見つけました。
確かに昨今スマートフォン市場の急速な広がりでパソコンというよりスマートフォンを使用する時間がグッと長くなったと思います。当然ながら僕もそれは同じです。
仕事以外でPCを使用するときはこのブログを書くときくらいです。
そのため普段からパソコンに関する知識を磨いたりする機会はそこまでないはずです。
ただ一方でIT業界で働こうと考えている人、現在若手として働いている人は今回紹介する3つのことは最低限知っていてほしいです。
①サーバ/クライアント
IT業界で働いているとサーバ、クライアントといった単語はよく耳にすると思います。
ですが意外にもその意味を知っているひとは少ないように感じます。
それではまずはサーバから説明します。
Wikiによると以下のような定義が書いてありました。
サーバ(英: server)とは、サービスを提供する側を指す用語。 コンピュータ分野のクライアントサーバモデルでは、クライアントからの要求に対して何らかのサービスを提供する機能を果たす側のシステムを指す。
何かを提供する側と書いてあるが釈然としませんね。
ではクライアントとはどのような定義になっているでしょうか。
クライアント(英: Client)は、クライアント・サーバシステムにおいて、サーバに対してサービスの依頼を行いその提供を受けるような、コンピュータまたはアプリケーションやプロセスのことをいう。サーバからサービスを受ける側を指す。
なるほど、提供する側と提供される側と。。。
しかし僕はこの説明だとあんまり理解できない気がします。
では具体的な例を使って考えてみます。
例えばレストランで食事をするとき、その注文を依頼する相手はおそらくウェイターでしょう。そう彼らが提供を受ける側なのでクライアントです。
そして実際にサービスの主体である調理をするのは厨房だと思います。厨房こそがサービスを提供する側であるサーバを指しているのです。
この考え方をしておくとクライアントとサーバ間には通信が必要ですといった説明も納得しやすくなります。そりゃウェイターが注文を受けたまま立ち止まっていても厨房に注文は伝わらないからです。
②プロセス
これもIT業界ではよく耳にする単語です。
特に上で説明したサーバやクライアントと一緒に登場する言葉でもあります。
では例によってWikiの定義を引用しましょう。
プロセスとは、情報処理においてプログラムの動作中のインスタンスを意味し、プログラムのコードおよび全ての変数やその他の状態を含む。オペレーティングシステム (OS) によっては、プロセスが複数のスレッドで構成される場合があり、命令を同時並行して実行する。
わかりました?わかりませんよね・・・
ではまた先ほど述べたレストランをイメージしてください。
皆さんはレストランでサラダとステーキとデザートを頼んだとします。
ウェイターは注文を持って厨房に伝えます。そうするとそれぞれサラダ担当、ステーキ担当、デザート担当の料理人が仕事を始めます。
こういった特定の役割を持っているインスタンス(=ここでは料理人)のことをプロセスと呼びます。
実際のPCで言うと、インターネットを見るためにInternetExplorerやGoogleCromeのアイコンをクリックして起動すると思いますが、これがWebブラウザのプロセスというわけです。
③OS(オペレーティングシステム)
最後はけっこう有名ではあるOSです。
Wiki上では以下のように記載されています。
オペレーティングシステム(英:Operating System, OS)とは、コンピュータにおいて、ハードウェアを機能毎に抽象化したインターフェースを利用者またはアプリケーションソフトウェアに提供するコンピュータプログラムである。
これも例によってわかりづらいですが、ちょっと例をレストランからマクドナルドに変えてみます。
マクドナルドは世界共通どこに言っても同じようなサービスを受けられますよね。
作っているハンバーガーの調理工程や店員の接客マニュアルもある程度統一化されています。
それは店舗の立地や場所に関係なくです。
これがまさにOSと同じで、異なるPCからも同じWindowsであればほとんど同じ方法で操作ができるはずです。これがまさに抽象化したインタフェースと言うわけです。
以上3つ紹介しました。
ぜひこの機会に漠然としたイメージでいいので覚えておいてください。
最近気づいた成長を加速するために必要なもの
こんにちは。
システムエンジニアのtomoです。
今日新人の子の横で仕事をしているとき、彼が「勉強するにも何から手をつけていいかわからないっすねー」と呟いていた。
確かに僕も新人時代は同じような感覚をもったことがある。
仕事で役に立ちたい、できるようになりたい!という強い思いがあるにもかかわらず何をすればいいかわからない。その場で足踏みしているような感じ。。。
IT業界は特に知識がかなり求められる業界です。
つまり覚えること、必要なことは山のようにあります。
というよりありすぎるんです。
そんな状態から抜け出せるきっかけがありました。
今回はそのときのエピソードから成長を加速させるために必要なものを紹介します。
自分の力のなさを痛感した日
以前、プロジェクトのアサインが変わりメンバーがガラっと変わり、クライアントも変わったタイミングがありました。
ほとんど同じシステムを扱っているはずなのに求めれるものまで大きく変わったのです。具体的にはそれまでアプリケーションの知識を中心に学んでいたのですが、新しいチームではITインフラと言われるシステムの基盤となる知識が重要視されていたのです。
もちろん頼まれた仕事の進め方も1ミリもわかりません。
急に断崖絶壁に立たされた気分がしました。
そこから必死になってITインフラの知識を学習するのですが、基礎的な知識もないので何を学べばいいかすらわかりません。。。
そこで僕は関連書籍やサイトをひたすらインプットすることにしました。どれが大事かもわからないのでえり好みなんてしてられなかったのです。
大量のインプットシャワーのなかで全体感が養成された
結果として上記の方法をとったおかげで全体感が自然と育まれました。
そこまで達すると今の仕事では、全体のなかのこの部分の知識が必要だ!とわかるようになりました。
ここまで達したことである程度の仕事は違和感なく入っていくことができましたし、必要な点、足りないところは手に取るようにわかったのです。
大事なのは一歩を踏み出してみること
社会人にとって時間は有限です。
そのため、多くの場合効率的な学習方法に走りがちです。
しかしながら部分的な知識ではその場しのぎにはなるかもしれませんが、いわゆる基礎的な部分は決して養成されません。
ですから何から手を出せばいいか迷った方は自分がこれかな?と思ったところから手をつけてみてください。
辛抱して続ければ気づけば大きく成長しているはずです。
SEはタイムマネジメントに優れている!?
こんにちは。
システムエンジニアのtomoです。
この業界で仕事をしている人にはあるあるネタかもしれませんが、結構な頻度で不可能なスケジュールで仕事を振られたりします。
どんなに頭で見積もっても1か月以上かかる仕事を1週間で完了させろとか上司は平気でのたまうのです。
そんなときシステムエンジニアはなぜかYesと言ってしまうのです。
なぜなら彼らには自分の技術力なら何とかなるという根拠のないプライドがあるのです。
つまりNoということは自分の能力を否定しているに等しいため、よっぽどことがない限りは仕事を断りません。しかもほとんどの場合、彼らは無理なスケジュールにも関わらずやりきってしまうのです。
僕もそういう意味では同じです。
今回はそんな無理なスケジュールを振られた場合のタイムマネジメント術を紹介します。
①超詳細なTODOリストを作る
まずはじめに計画を立てます。
そりゃ当たり前だろと思う方も多いでしょうが、意外と超具体化されたTODOレベルまで考えきれている人は少ないはずです。
では僕の場合、どこまで詳細なTODOを考えているかと言うと、たとえばAという機能の設計書を書く際は・・・
・要件定義書の読み込み(30min)
・上記をもとに機能の概要を洗い出す(30min)
・機能に必要な技術、不明な点を洗い出す(30min)
→ここでおそらく詰まるので上司にヒアリング(10min)
・ヒアリング結果をもとに設計書のドラフトを完成させる(30min)
・ドラフトをもとに詳細な設計書を書く
→①修正に必要な方針を記載する(10min)
→②方針をもとに詳細設計を文章化する(20min)
以上のようになります。
多くのエンジニアはこの作業を単に「設計書を作成する」といったTODOリストにしかしないでしょうが、経験が浅いうちにや時間が迫っている場合はすべての作業とリスクを見極めておく必要があります。
特にここでのポイントは上司にヒアリングが必要な部分が出てくることを想定していることです。こうすることであらかじめ上司の予定を抑えておくことができます。
これにより無駄な外的要素を極力排除できるので、仕事がスムーズに進みます。
②時間のかかる作業はできるだけ自動化する
システムエンジニアの思考回路のひとつとして単調な作業を避けるというものがあります。先ほどの詳細なTODOを作成した段階で単調な作業となるのがあらかじめわかったら、効率的にその作業を進めるにはどうすればいいか考えます。
例えば、以前ものすごい量のデータをまとめる作業を担当した時がありました。
ファイル数にすると1000ファイル以上の中から、一部のデータを集めてExcelにまとめるという作業です。
もちろん、ひとつひとつファイルを開いて必要な部分をコピペするといった無駄なことはしませんでした。この際に実施したのは持ち前のプログラミング力を生かして必要なデータを集めてExcelに貼り付けるツールを作成しました。
そのおかげで寝る前に上記のツールを実行して、朝起きたらまとまったドキュメントが完成していました。時間でいうと10分の1くらいの作業量になったはずです。
上記のようなツールを作るのは実はとても簡単なのです。
具体的なプログラミングでツールを作る方法は別途紹介します。
③新しい技術を利用する
時間を効率化するにあたり、新しい技術を用いることはかなり有効な手段です。
例えば、パソコンで作業する場合に携帯電話では当たり前となった予測変換を使って作業している人はどれだけいるでしょうか。
また過去にコピーした文字列をクリップボードに複数保存しておけるソフトも無料でインストールすることができます。
こうした技術を使うことでちょっとした作業の効率化をはかることができます。
以前はできなかったことでも、時代はどんどん進んでいるので常に情報を集めておくと仕事のスピードは加速します。
この効率化ソフトについても別途紹介したいなと思います。
プロローグ 職業=システムエンジニアのバリューって?
はじめまして。
システムエンジニアのtomoです。
現在東京都にある企業でSEとして修業中です。
ー2016年10月9日
都内の自宅で保守作業をしながら、ふと考えました。
ITという世界に馴染んできたけど、いわゆるバリューって出せてんのかな?
この世界に飛び込んだときは、世界の最先端を駆け抜けるIT業界で活躍してやるって意気込んでいたけど。。。
よくよく考えてみると今は慣れた知識を使い回して、ただ業務をこなしているだけ。。。
ITという世界に飛び込んで1つ思ったことがあります。
エンジニアやプログラマーと言われる人の働き方って端から見ると、何をやっているかよくわからないけど凄い。そう思っているうち成果物が出来上がっている。
それはまるで魔法のようだと。
ただその魔法もIT業界では当たり前の光景です。
入社当初は圧巻されたその魔法も今では自分も少しは唱えられるようにさえなりました。(いわゆるプログラミング言語のことです)
ただその魔法はきちんと修行しないと、上に書いたような凄い働き方はできません。
今みたいに同じような仕事をひらすら繰り返す。
まるでロボットのような働き方では必要ないと思われるほど流動的な業界でもあります。(本当にロボットに奪われてしまいます)
そこでこのブログを使ってインプットした知識をアウトプット可能な活きた知識へと昇華させてることで、最強のシステムエンジニアを目指したいと思います。
そして雲の上の存在である最強のプロジェクトマネージャー(プロマネ)へ。
そこへ至る過程のアウトプットの場として、このブログを活用したいと思います。
実はもうひとつ野望を抱きました。
世間を見るとまだまだプログラミングやITって敷居が高いと思います。
でも多くの人が上に書いたような魔法を使いこなせるようになったら、きっともっと生産性が上がるし、イノベーティブなことが起こせるんじゃないかと。
暗い自宅の一室でカチカチとキーボードを叩きながら、そう確信しました。
そこでその思いをぜひ実現したい。
まとめると、このブログの目標は以下のような感じです。
・僕自身のレベルアップを図るための冒険の書としたい!
・IT技術を使った生産性の上がる魔法を多くの人に紹介したい!
・初級エンジニアに道しるべを示したい!
・最終的にはこのブログを読んだ人が仕事できるヤツと思われるようなバリューを提供したい!
大きな目標を掲げましたが、僕もまだまだ修行中の身です。
強敵に立ち向かうために一緒に経験値を貯めていきましょう!