

とあるIT企業のインフラエンジニア。プライベートでは開発もちょっとやります。
※本ブログの内容はすべて個人の見解であり、所属する企業とは関連ありません。
2023/09/30 暫く更新停止中m




























120 [今日]
1703 [昨日]
【IT入門】実務で困らないITの基礎固め




お疲れ様です。
しらせです。
ITを学んでいるがまだ実務に携わったことのない学生の方や、IT部門を兼ねる総務部門の方も同様の不安は多いと思います。
この記事ではこれからITを学ぼうとしている方から、今まさに学んでいる最中という方まで幅広く対象にしています。
「ITは何からどうやって学べばいいの?」
「どんな知識があれば仕事で活かせるの?」
「ITという見えない大きな存在に自分がついていけるの?」
「プログラミングなんて難しそう。」
「なぜインターネットはつながるの?」
上記は、私がITを学ぼうと思い立った時に感じていた不安です。
いくらウェブを漁っても専門的かつ濃い内容で全く頭に入ってこなかったり、本や参考書を買って読んでも基本的な知識が無いことで読み進められないということをよく耳にします。
様々な姿に形を変えて身近になったITですが、基礎となる技術や考え方には多くの共通点があります。
最低限必要とされる共通の知識さえ身に着けることができれば、あとは自身の探求心に身を任せて知識を吸収して成長していくことが出来るようになります。
まず何から手を付けたらよいか迷っている方、何を学ぶべきなのか不安に感じている方はぜひご一読ください。
※ご注意※
私が初めてITに触れた学生時代からこれまでの経験を元に、ITの基礎として重要だと思う一般的な内容をまとめています。
そのため具体的な業務や実務内容に関しては触れておらず、業種やITの分野によっても重要度や見方が変わる可能性があります。
あらかじめご了承ください。
もくじ
全体のイメージ
概要
1つ1つの説明に入る前に今回ご紹介する内容の全体を見渡してみます。
以下の図のとおり6つの項目に分けてご紹介していきます。
※図は今回の説明のために高度に簡略化しており、正確性や本来の意味を度外視しています。
いろいろなものをグルーピングしてしまっているため、見る人によっては分かりにくいかもしれません。
プログラミングなども実際は全体に言えるものですが見やすさを重視しました。
※画像:いらすとや、Cisco Icon Library
コンテンツ
項目は以下の通りです。
- コンピュータ基礎技術
コンピュータの基本的な仕組みを知ることは全てのITの基礎となります
以後の説明も全てこのパートが基礎となっています - ネットワーク技術
IT業界のどの分野でも必ずネットワークは利用されています
現代においてネットワーク通信は必須の知識です - アルゴリズムとプログラミング
アルゴリズムやプログラミングの基礎知識は開発以外でも使う場面があります
ちょっとした集計やスクリプト作成などで活用できます - データベース理論
同じデータが複数箇所に分散していると重複するだけでなく管理自体も不便になります
データベースの考え方はシステム以外でも重要です - UMLと図表
設計や処理の流れなどを表現する目的で使用するのが図表です
これを知っているか否かで相手への伝わり方や情報共有の速さ・正確性が変わってきます - (おまけ)情報セキュリティ
※セキュリティは重要な要素ではありますが、上記1~5の理解を優先して頂きたくおまけとしています
1.コンピュータ基礎技術
必要となる知識
兎にも角にもまず知るべきはコンピュータ基礎技術です。
ITを理解するためにはまずはコンピュータとは何者か?どんな仕組みなのか?を理解する必要があります。
普段使っているスマートフォンやパソコンをはじめ、複雑な処理や大きなデータを扱う専用の機器であるサーバなどはコンピュータの最たる例です。
その他にも自宅にあるWiFiルータ、ゲーム機、スマートスピーカー、お店にあるレジやATMなどすべて広義のコンピュータです。
一般的にコンピュータ内部では0と1の2進数で情報を取り扱います。
2進数の1桁を1ビットと言い、8桁で1バイトとして1まとまりで扱います。
ネットワーク機器などでは0と1の情報をそのまま取り扱うため通信速度などはb(ビット)の単位で表現し、情報を記録する磁気ディスク(ハードディスク)や主記憶装置(メモリ)などの容量はB(バイト)の単位で表現されます。
このようにシステムや機器によっても考え方が異なっているのです。
ネットワークに接続されたコンピュータ同士はどのようにデータをやり取りしているか?
ハードディスクやメモリはどのような仕組みでデータを記録しているか?
CPUはどうやって大量の情報を処理をしているか?
などなど
いきなり全てを理解することはできませんので、まずはITの最小単位であるコンピュータについてその主な機能である「演算」「記憶」「入出力」「制御」から1つずつ理解する必要があります。
知らないと実務で困ること
ITに携わる予定があるのであれば、コンピュータ基礎知識は真っ先に習得しておきましょう。
他の関係者と同じ目線で会話が成り立たず相手が言っていることが理解できない、そして自分からも正しい説明ができず手も足も出ない状態に陥ります。
コンピュータ基礎技術は最も重要ですが、
- CPUやメモリやHDD(SSD)のようなパーツ単位の役割の違い
- KB/MB/GB/TBのような補助単位と単位の考え
- 2進数・8進数・16進数の変換
- TCP/IPやOSI参照モデルに代表されるネットワークの仕組み
など覚えることも多いものです。
ですが、量に圧倒されて学習が進まないのは良くありません。
最初はどうしてもイメージしにくいことから解釈が間違っていることもあると思いますが、まずは広く浅くそして多くの単語や意味に触れて、
「とりあえず、こういう事で理解しておけばいいか。」
と頭の中で仮決めすることが重要です。
技術や知識を実際に利用する立場になった際に改めて調べ直して、間違っていれば正しい知識を付け直すようなアプローチがおすすめです。
例えば、他の社員から
「 〇〇技術について知っていますか? 」と聞かれた際に
A1.「 知りません。聞いたこともありません。 」
A2.「 聞いたことあります。xxという仕組みですよね? 」
A2のような答えが返ってきた時と、A1のような答えとでは接し方に雲泥の差があります。
仮にA2の理解が間違っていた場合でもその場で補足するだけで済むかもしれませんが、一方でA1のように全くのゼロベースの場合は仕組みの理解から始まり正確な意味を理解するまでにより時間を要します。
親切に1から説明してもらっている最中にさらに別の知らない用語や単語が出てきてしまうともう大変です。
参考として当時私が学習で利用していた書籍をご紹介します。
インフォテックサーブ社の「ITワールド」です。
一般的なコンピュータに対する理解をある程度補うことができ、基本情報技術者試験レベルの内容を充足しています。
次の項目にある「ネットワーク技術」についても触れられておりITビギナーのバイブル的な書籍です。
(参考)ITワールド - www.infotech-s.co.jp
https://www.infotech-s.co.jp/teaching_material/01_it_world.html
※IT専門学校等での教材としても採用されている書籍で個人でも購入することができます。
2.ネットワーク技術
必要となる知識
ネットワーク技術はITエンジニアであれば誰しもが習得しておくべき領域です。
もちろん、ISPや回線事業者が利用するEGP/IGPルーティングや自立システム(AS)などの、より専門的な内容は細かく習得する必要はありませんが、技術の存在と概要は知っておいて損はありません。
前項の「コンピュータ基礎技術」と併せて参考書1冊読破できている状態が望ましいと思います。
◆基本情報技術者試験(レベル2)シラバス 情報処理技術者試験における知識・技能の細目 Ver.7.1
https://www.jitec.ipa.go.jp/1_13download/syllabus_fe_ver7_1.pdf
- 大分類 3:技術要素
- 中分類 10:ネットワーク . 38
- 1.ネットワーク方式.38
- 2.データ通信と制御.39
- 3.通信プロトコル .40
- 4.ネットワーク管理.41
- 5.ネットワーク応用.41
- 中分類 10:ネットワーク . 38
知らないと実務で困ること
現代においてはネットワークに関する知識が欠けることは致命的です。
ネットワーク越しのアプリケーションの動作でパフォーマンスが出ない原因がネットワークであったことも何度かあります。
コンピュータやプロトコルの特性を理解したうえで、ネットワークのチューニングを行うケースも多々あります。
システムの規模が大きくなるほどに、冗長性や遠隔地との連携でネットワークに依存しやすくなりますのでその重要性が分かると思います。
実際にエンジニア同士の会話でも、
- 通信はTCPか?UDPか?
- サーバに通信できないからping(ICMP)を確認しよう。
- ARPどうなってるか?
- 宛先ポート番号いくつ?
- サブネットやCIDRは?
などは比較的日常会話レベルで出やすいワードです。
実際のところ、ネットワークは自分で触ってみないと分からないことも多く、まずは自分の身の回りにあるもの(使わなくなったWiFiルーターなど)を活用して手が届くところから習得するのがおすすめです。
コンピュータ基礎技術と合わせて情報処理推進機構(以下、IPA)が実施している基本情報技術者試験レベルの内容が習得できていれば、実際の実務でも困ることは大きく減ると思います。
3.アルゴリズムとプログラミング
必要となる知識
私自身Atcoderの "D問題" で詰まる人ですので高度なアルゴリズムは知りませんし大したアドバイスはできません。
ですが、学生時代には以下の2冊を元に最低限は身に着けているつもりです。
並び替えアルゴリズムや探索アルゴリズム、圧縮アルゴリズムなどは今でも好きでYoutubeで見たりしています。
(参考)はじめてのアルゴリズム - www.infotech-s.co.jp
https://www.infotech-s.co.jp/teaching_material/45_first_algo.html
(参考)Cプログラミング - www.infotech-s.co.jp
https://www.infotech-s.co.jp/teaching_material/42_c.html
どれくらいプログラミングを習得する必要があるかは断言できませんが、最低限以下は知っておいて無駄にはなりませんし、シェルスクリプトの作成でも有用です。
- 変数
- 関数
- 引数(値渡し、参照渡し)と戻り値
- ポインタ
- 配列と構造体
私は学生時代からVisualStudioでC#を使っていました。
そのため、Windows7から標準で使えるようになったPowerShellと相性が良くオブジェクトをゴリゴリ操作できるため、ちょっとした作業でも活用できていて当時の経験が活きています。
知らないと実務で困ること
アルゴリズムやプログラミングを知らないからと言ってインフラエンジニアが立ち行かなくなることは「まだしばらく」は無いと思います。
ただし近年では、IaC(Infrastructure as Code)と言われるように、システムをなす基盤全体をコードによって管理する流れが続いています。
システムの状態を定義したファイルを利用するものもあれば、シェルスクリプトのようにコマンドを実行するものもあります。
いずれにしても、プログラミングでよく目にする「条件」「分岐」「繰り返し」「関数」などの用語も頻出であるため、どんな言語でもよいのでプログラミングを習得しておくと良いと思います。
また、日常のちょっとした集計作業などでもプログラミングの知識を使ったシェルの操作ができるかどうかで作業効率にも差が出ます。
例えば、フォルダに格納された1,000個のファイルのデータサイズを取得したい場合はどうでしょうか?
WindowsでPowerShellを利用すると以下の1行で取得が可能です。(フォルダは1になります)
フォルダを開いて、ファイルを1つずつ選択して、ファイルサイズをエクセルに転記するようなことはやってられませんよね。。。
4.データベース理論
必要となる知識
4つ目はデータベースです。
データベースには、MySQL、MS SQL Server、Postgres、AWS Aurora、AWS RedShiftなど用途に応じて多くの種類がありますが、これらの使い方をマスターしろというものではありません。
ここでお伝えしたいのはこれらデータベースそのものではなく、データベースを設計する際に必要となる考え方です。
もちろん、担当としてデータベースを使う必要があるのであればマスターしてしまえばよいと思いますが、データベースを使わない場合でも学んでおいた方がよいということです。
中でも特に私が重要だと感じているのが関係データベースにおける「正規化」の理論です。
※データベースにおける正規化とは、繰り返しデータを重複を排除したり(第一正規化)、部分関数従属を排除したい(第二正規化)、推移関数従属を排除したり(第三正規化)することですが、ここでは細かくは紹介しません。
正規化を正しく理解してシステムに実装した場合、データの一貫性が保たれ管理が容易になるだけでなく重複や繰り返しの排除によってデータ量の削減が見込まれます。
実はこれはデータベースだけでなく企業における日常でも当てはまります。
知らないと実務で困ること
例えば、以下のようなケースを想定してみてください。
あなたは複数の商材を扱う企業に勤めていて、複数の顧客に対して①アポイントメントと②説明と③提案までを担当しています。
マニュアルを用意して、いつどの企業にどの商材でどんなアプローチをしたか履歴を付ける必要があります。
この場合どのようにマニュアルと履歴を管理すれば良いでしょうか?
毎回マニュアルを作成して日付と顧客名を載せればひとまず目的は達成できそうです。
しかし、同じようなマニュアルを繰り返し何度も書くのは時間と労力とデータの無駄になります。
そこで共通のマニュアルを手順書として用意して、履歴と分けて別で管理することで効率化を図ります。
これがデータベースで言うところの「連関エンティティ」に相当します。
手順を繰り返し作ることなく、アプローチ履歴で顧客IDや手順書の番号を参照する形にすることで、繰り返しを大幅に削減しつつ一貫性を確保することができます。
あくまでも例えになりますので実際のデータベース設計とは異なりますが、このようにデータベースの理論を応用して当てはめることで、作業の効率化・合理化が実現できることがあります。
データベース理論を知らないことで直接的に困るようなことはありませんが、テクニックの一つとして知っておくと活用できるタイミングが来ると思います。
5.UMLと図表
必要となる知識
UMLは統一モデリング言語と呼ばれ、主にソフトウェア開発の設計における表記方法の総称です。
統一モデリング言語 - ja.wikipedia.org
https://ja.wikipedia.org/wiki/統一モデリング言語
最近では開発手法も多様化していることもあり、実際の開発の現場でどれくらい利用されているかは定かではありませんが、以下のような名前を聞いたことがあるのではないでしょうか?
- クラス図
- ユースケース図
- アクティビティ図
- シーケンス図
また、UML以外の図表として以下のようなものもあります。
こちらは開発とは異なり、品質管理における「QC7つ道具」「新QC7つ道具」と呼ばれているものです。
※QCは「Quality Control」の略です。
- パレート図
- 特性要因図(フィッシュボーン図)
- グラフ
- ヒストグラム
- 散布図
- 管理図
- チェックシート
- 親和図法
- 連関図法
- 系統図法
- マトリックス図法
- アローダイアグラム
- PDPC法
- マトリックスデータ解析法
一般的にプロジェクトでは複数人が分担して作業を進めますが、関係者全員が共通のルールで同じ情報を共有することがとても重要になります。
UMLや図表を用いることでシステム開発にとどまることなく、説明や報告などにおいても情報を整理・成形して正しく伝えるために役立ちます。
知らないと実務で困ること
個人的に重要だと思うのは「QC7つ道具」「新QC7つ道具」の方です。
ITエンジニアという枠だけでなく、社会人として知っておくべきものだと思います。
個人的によく利用して助けられているのが「パレート図」です。
件数を棒グラフで降順に表現しつつ、各項目における累積比率を折れ線グラフで重ねて表現する特徴的な図です。
エクセルのヒストグラムからも簡単に作成できて、件数と比率から傾向を一目で見る事ができる点が便利です。
その他、親和図はグループワークなどにおけるグルーピングに、マトリックス図は行列でメリデメや比較をする際に利用されます。
あと、こちらには記載ありませんがフローチャートやデータフローダイアグラムも頻繁に利用します。
特にフローチャートは、作業の手順やプログラムの処理の順序を図で確認する際に役立ちます。
見る側からすればUMLや図表を知らなくても直接困ることはありません。(見やすいなぁと思うだけです。)
逆に自分が主体となって、相手に伝えたい時や視覚化したいときにこれらの手段が取れるかどうかの違いです。
「話せばわかる。」
「文字だけでも伝わる。」
という自信をもって伝えられればそれで良いのかもしれません。
6.情報セキュリティ
心構え
最後に情報セキュリティ(以下、セキュリティ)について一言記載します。
正直なところセキュリティは範囲がとてもなく広く、形や種類も様々でここで語りきれるものではありません。
TPMや入退出のチェックなどの物理的セキュリティから、SSL/TLSなどのプロトコルレイヤーでのセキュリティ、データの暗号化やACLなどのアプリケーションレイヤーにおけるセキュリティまで多種多様です。
そのため、いきなりセキュリティを勉強しようとしてもさらに混乱する可能性があります。
まずは上記1~5に記載したような基本を理解してから、使う技術・仕様・機能1つ1つに対して深掘りする形でセキュリティを学んでいく方が理解しやすいと思います。
ただし、セキュリティのメジャーな要素であるCIA(機密性:Confidentiality、完全性:Integrity、可用性:Availability)については常に意識するよう心掛けて、同じ量と質で学んでいってください。
まとめ
最後までお読み頂きありがとうございます。
ITを学ぶ上での気づきや迷いの解消につながりましたでしょうか。
恐らく一番難しいのは、自分の頭の使い方をITに変えていくことだと思います。
これは、毎日着実に知識を増やして技術を磨いていく努力で変わってきます。
はじめに戻りますが、IT業界は常に進化し続けています。
自ら最新の情報を収集・吸収して成長し続けることが重要になります。
勉強中のテキストやここに記載した内容もすでに「古い情報」ですのでご注意ください。
以上
お疲れさまでした。