フリーランスエンジニアは何を勉強すればよい?
2021/09/16
フリーランスエンジニアは給与が安定せず、きちんとニーズがある技術を取得しないと食べていくにも苦労します。
しかし、技術の移り変わりが激しいITのこの業界において、AWSを勉強すべきとかPythonを勉強すべき、と言うのはあまりにも一過性で、情報の賞味期限が短すぎると思います。
またこの手の話をすると、ロジカルシンキングとかコミュニケーション能力、と答える人が山のようにいますが、今回はそれらについても割愛させて頂きます。
理由は、あまりにも抽象的すぎる上に当たり前すぎるからです。システムエンジニアがロジカルシンキングやコミュニケーション能力をつけるのは、プロスポーツ選手が基礎体力をつけたり健康に気をつけるのと同じくらい当たり前の事です。
そこで、今回は勉強すべき技術の大まかな領域について話したいと思います。
余程の技術革命が無い限り、例えばデータベースの事を勉強しなくて良い、つまりデータベースが無くなった社会、等と言うのはやってこないです。
キャリアプランについて
そもそもキャリアプラン、つまりゴールが決まっていないと何を勉強すべきかわかりません。
手段を決めるには、まず最初に目標を決めなくてはいけません。
ずっとプログラマーとして、プレイヤーとして働いていくのか?それとも要件定義等の上流工程に行くべきかによって勉強すべき領域は異なってきます。
また、インフラエンジニアか開発系のエンジニアかによっても当然異なります。
今回は私が開発系エンジニアの上流工程を担当している事もあるので、開発系の現場で上流工程を担当できるようなエンジニアに成るために勉強すべき技術領域を紹介します。
IT用語
大体どんな業界でも業界用語がある物ですが、この業界用語を覚え無い限りは出世などあり得ないですし、当然収入も上がりません。
アジャイル開発、バイナリーファイル、Ajax通信、等の単語の意味が分からなければ設計や部下のマネージメントが出来るはずもなく、それどころか現場に入場して業務経験を積む事すら難しいです。
もし現場に入場できたとしてもこれらの単語に首をかしげているようでは上司から白い目で見られ、信頼を得る事は難しくなります。
業界用語と言うのは沢山あり、勉強法と言ってもわからない単語を逐一メモして後でそれを調べる、という方法くらいしか思い浮かばないかもしれませんが、もっと良い方法もあります。(この方法が悪い訳ではありません。)
その方法については最後の章で説明します。
Excel
Excelなんて誰でも出来る、なんて馬鹿にしてはいけません。
そもそも開発の仕事というのはとても大規模になりがちです。
沢山の人材や物資を管理する必要がありますが、多くの場合エクセルで管理しています。マクロなどが組めて質の良い管理ファイルを作成する事が出来れば、現場からの評価が上がります。
またピボット検索等の機能や前述したマクロ関数を上手く使う事によって、仕事のミスを少なくし、正確性の高い仕事をする事も出来ます。
サーバーサイドのプログラミング言語
殆どの社内システムやアプリケーションはJavaやC言語等の、サーバーサイドのプログラミング言語を使用しています。
よって、開発系の現場で上流工程の仕事をするにはサーバーサイドのプログラミング言語の機能についてある程度は知っておかなければなりません。
必ずしも得意になる必要はありませんが、最低でもJavaやC言語の現場に入場して改修が出来るくらいの腕前にはなる必要があります。
そうでないとそもそも顧客の希望する機能が作れるのか、作れるとしてどの位の期間や人員が必要か、中々わかりません。
フロントサイドのプログラミング言語
サーバーサイドのプログラミング言語同様、HTMLなどのフロントサイドの言語についても知っておく必要があります。
理由はサーバーサイドの言語と同じですが、近年フロントサイドの言語も新たな技術が加わってきているので、重要性が高まっています。
フロントサイドの言語は苦手なエンジニアが意外に多いのですが、上流工程を担当したいのであれば、此方も勉強すべきです。
近年、WordPressなどの台頭によりフロント側の言語がわからなくてもホームページが作れるようになりました。
この点はサーバーサイドの言語も似たような物で、ローコードツールが少しづつ浸透してきています。
しかし上流工程の仕事をするのであれば、実際にプログラミング言語を触って感覚を覚えないと、マネージメントや設計の際に支障をきたします。
データベース
会社のシステムやアプリケーションは、利用者それぞれ異なるデータを保存し、時には変更する事で進化を発揮します。
よって、データベースについても上流工程を担当する人材は勉強する必要があります。
主なデータベースとしてはOracleやSQLサーバー、DB2等があります。
データベースの仕組みや正しい管理の仕方を覚えておかないと、極めて保守性が悪く、且つ脆いシステムになってしまいます。
つまり、サーバーサイドのプログラムが記述してあるコードのファイルの修正が面倒になる上に、バックアップが上手く取れず、不測の事態が起こった際はデータが全て消えてしまいます。
どちらも現場としては絶対に防がないといけない事態です。
OS
どんなプログラム、つまりシステムやアプリケーションもWindowsやLinux等のOSの上で動いています。という事は上流工程で仕事をするにはOSの事も知っていないといけません。
特にOSコマンドを覚えておかないと、何らかの不具合が起こった時の原因調査やセットアップで苦労する事でしょう。
他にも、プログラムのパフォーマンスが悪くなるなどの影響も出てきます。
クラウド
AWSやAzure等のクラウドは現在トレンドになっていますが、これだけは今後も廃れることが無い領域の技術、と言えるでしょう。
理由はオンプレミスでシステムやアプリケーションを運営するよりもコストパフォーマンスが格段に上だからです。
オンプレミスの場合ですとアクセス頻度が最も高い時に合わせてサーバーやシステムを買わなければいけないので、アクセス頻度がそこまで高くない時は余分な分のサーバーの料金が全て無駄になります。
予想が外れて想定よりもアクセス頻度がもっと高くなると、サーバーがダウンしてサービスが停止する等のビジネス上の悪影響が生じます。
つまり予想を当てるだけでも大変なのに、予想が当たってもお金を無駄にするのです。
クラウドを運用できるようになればこの懸念が全てクリアになるので、企業側からするとクラウドの事を熟知しているエンジニアは工程に関係なく重宝されます。
ネットワークの仕組み
社内システムやホームぺージ等インターネットを活用しているサービスは沢山あります。
よって、仮に開発系のエンジニアだとしてもネットワーク等のインフラ系の知識を仕入れておくべきです。
ネットワークの仕組みを理解しておくと、トラブルが起こった時の原因調査やセキュリティ対策に役立ちます。
また、自分でアプリケーションやホームページを作って運用、ビジネスに活用する時もネットワークの仕組みがわかっていた方が、ビジネスの計画を立てやすいです。
お勧めの勉強方法は?
近年のITのブームにより、上記で上げた技術領域の情報は書店やECサイトにアクセスすれば山のようにあります。
しかし一番時間とお金のコスパが良い方法は、IPA主催の国家試験の1つである基本情報処理者です。
今まで書いた領域の事の中でExcel以外の全ての領域が勉強できますし、難易度も丁度良いのでIT初心者でも取得しやすいです。
一個上のグレードの応用情報処理者でも良いのですが、難易度を考えると基本情報処理者の方がお勧めです。
知識と言うのはアウトプットしなければ使い物になりません。そのアウトプットを一番簡単かつ確実に出来るのが資格試験です。
G7どころか韓国やインドなどの新興国から見ても日本のIT関連の知識の量と質は残念な部類に入る、などとワイドショーは盛んに煽っていますが、少なくとも制度自体はそれなりに整っているので積極的に活用すべきです。
書店でも基本情報処理者の書籍は豊富に取り扱っており、初心者に特化したテキストもあるので、初心者でも独学で何とかできる場合が多いです。(勿論、知識が成熟した人に教えてもらった方が確実です。)
勿論、各ベンダーが運営している民間資格もおすすめです。(お金はかかりますし、定期的にテストに合格して資格をアップグレードしないと効力が消えてしまいますが。)
言うまでもない事ですが、資格に合格すれば就職や転職に有利に働きますし、国家資格の場合は一定の領域の技術職の任用資格も得ることが出来ます。
仕えるものは何でも使ってエンジニアとしての実力と信用を上げていく。
フリーランスのエンジニア、特にフリーランスのエンジニアに成りたての時はこの精神がとても大切です。