こんにちは!
溜まりに溜まった本を片っ端から読んでるchimoです。
前回『Webエンジニアという職業から逃げた話』では、私が過去webエンジニアを辞めてしまった経緯と理由を簡単にお伝えしました。
今回はもう少し踏み込んで、プログラミング初心者やこれからWeb系のお仕事をしようと考えてる方向けに、この業界で仕事していく上で覚悟すべきことをお伝えします。
私は努力を怠り、すぐに諦めた結果、ついていけなくなり、Web系のお仕事を辞めてしまったので、この経験を反面教師にして読者の方にはWebエンジニアとして活躍してほしいと考えています。
まずはプログラミング未経験者もしくは初心者の方向けに書きます。
1.HTML・CSS・Javascriptは必ず覚える
プログラミングすらも未経験、初心者の状態でも私のように拾ってくださる会社はあるかもしれません。
しかし、そこで頑張る上で覚悟してほしいのは「プログラミング」に関わる部分では非常に覚えることが多いです。
Web系であればフロントエンドからバックエンドまで幅広い知識と経験が必要なのです。
その中でまずはHTML, CSSの基礎はしっかりと押さえましょう。
これはWebの基礎の基礎となる部分です。
ウェブサイト制作をしている会社のコーダー(コーディングする人)は皆、HTMLとCSSでレイアウト部分(「見た目」)を作り込んでいます。
こういったレイアウト部分の工程を「フロントエンド」といいます。(厳密には違うかもしれませんが、イメージしやすいので、ここではこのように定義します。)
フロントエンドで活躍する人は、HTMLやCSSでコーディングしていくだけでなく、「Javascript」というプログラミング言語で、ウェブページに「動き」を加えていく方もいらっしゃいます。
例えば、名古屋のネット企業「エイチーム」のウェブサイトは以下のような感じです。
株式会社エイチーム(Ateam)
ご覧の通り、こういう動きのあるウェブサイトを実現するのがCSSやJavascriptの役目です。ウェブサイト制作のコーダーは大体この「HTML+CSS+Javascript」でフロント部分のコーディングをしていることでしょう。
2.プログラミングを習得する
WebエンジニアあるいはWebプログラマを目指すのであれば、ここのレイアウト部分をやりつつ、機能部分(「動き」)を作っていかなくてはなりません。
これが要するに「プログラミング」のことです。
当然ですが、プログラミング言語を覚えなければなりません。
先ほどご説明した、HTMLやCSS, Javascriptを覚えないといけませんが、それらに加えて、「 PHP」「Ruby」「Java」「Python」などのWebアプリ向けのプログラミング言語を習得する必要があります。
これらはWeb系では人気かつよく使われている言語です。
HTMLやCSSと異なり、サーバやデータベースと連携する必要があります。
ここがWebプログラミングの核となる作業です。
会社によっては、HTMLとCSSでレイアウト部分を作る人、PHPやRubyなどで機能部分を作る人、という様に分担制を採用しているところもありますが、大抵はこれらを一人でやることが多いとおもいます。
ちなみに私は初めて触れたプログラミング言語は「Ruby」でしたし、就職してからはまずは「Java」、次に「PHP」に触れていました。
最初からプログラムの方に力を入れてやっていたので、HTMLやCSSの部分をあまりがっつり勉強していなかったことも続けられなかった原因だとおもいます。
基本的にはプログラミングの練習をしながら、HTMLやCSSを同時に習得していくのがベストだとおもいます。
しかしこれを独学でやるのは忍耐力と根気が必要です。
自宅にいながらプログラミングを学習できるサービスとして、Progateやドットインストール、Codeacademyなどがあります。有料ではありますが、Udemyも動画形式の教材が豊富で独学には最適かと思います。
これらを上手に活用しながら、プログラミングを習得していければ幸いですが、これだけに永遠と取り組んでも基礎は理解できても上達は見込めません。
やはり自分で0から何かをつくってみることが上達への一番の近道です。
もし頼れる人がいるならその人を頼りましょう。
もし頼りがいない場合は、オンライン・対面問わず、プログラミングスクールで習得していくのが近道かもしれません。また、ココナラやMENTAなどのスキルシェアサービスを利用するのも一つの手ですね。
自分の場合は、上司がいたこととお金をかけたくないという想いから、プログラミングを無理に独学で身につけようとしました。
しかし、結局何もできないまま月日が流れてしまったので、多少お金はかかっても有料で専門家から学ぶことをお薦めします。
3.フレームワークの使い方を覚える
2のプログラミングと関係してくる部分で、各言語(CSSやJavascript含む)にはよく使う機能をあらかじめ準備し、コードの書き方をシンプルかつ共通化して扱う「フレームワーク」というものが存在します。
フレームワークについての詳細は以下を参考にしてください。
www.gixo.jp
基本的には各プログラミング言語のコードの書き方を覚えることが最優先なのですが、多くのWebサービス企業はこの「フレームワーク」をつかって、プログラミングにかける時間と労力を最小限にして、コードの書き方の共通化を実現しています。
各言語、代表的なものに以下の様なフレームワークが存在します。
・CSS → Bootstrap, Renaissance.css, Skelton
・Javascript → jQuery, AngularJS, Nodejs
・PHP → CakePHP, Laravel, Symfony
・Java → Apache Struts, Spring, Jakarta EE(旧Java EE)
・Ruby → Ruby on Rails
・Python → Django, Bottle
通常のプログラミング言語とフレームワークでは処理部分で書き方が少し異なっているのですが、ベースとなる考え方は同じです。まずはプログミングそのものを覚えましょう。そして、同時並行でフレームワークでの書き方の規約を身につけましょう。
4.サーバの使い方を覚える
フロントエンドで「HTML + CSS + javascript」でレイアウトのコーディングをしている方と最も異なるのが、この「サーバ」周りを扱うかどうかだとおもいます。
フロントエンドと対をなす意味で「バックエンド」と呼んだりします。
そもそもサーバとはウェブサイトはもちろん、各サービスのコードやデータベースを置く「土地」みたいなもので、これがないとウェブ上に公開してサービスを使ってもらうことができません。
web系であれば、アプリケーションサーバ・データベースサーバ・ウェブサーバなどがあります。
ウェブサービスをサーバ上で動かすならば、サーバ上にウェブサーバ(ApacheやNginxなど)を構築しなければなりません。
また、サーバは物理で購入し、OSをインストールするかクラウドで借りるかしなければなりません。
格安でサーバをクラウド上で借りれるレンタルサーバや全てブラウザからボタン一つでサーバを構築・運用できるクラウドサーバが人気ですね。
よく使われるレンタルサーバとしては以下があります。
- さくらクラウド、さくらVPS(提供:さくらインターネット)
レンタルサーバの代表格。気軽にサーバをレンタルできる。
- X Server(提供:エックスサーバ)
WordPress運営で豊富な実績あり。
- GMOクラウド(提供:GMOクラウド)
グループのGMOインターネットのクラウドサーバも有り
- Amazon Web Service(AWS)(提供:AWSジャパン)
- Google Cloud Platform(GCP)(提供:Google)
- Microsoft Azure(提供:Microsoft)
今やクラウド全盛期なので、AWSやGCP, Azureなどのlaas型のクラウドサーバがWeb系でも人気になってきています。
いずれを選ぶにしても、サーバOSのLinuxの使い方をある程度習得しておく必要があります。Linuxについてはこちらで説明しています
UbuntuでもCentOSでもいいので、CUIのコマンド操作に慣れておくことが重要です。Windowsサーバを利用するのもいいですが、こういったレンタルサーバやクラウドサーバ事業者の多くは安く安定的なサーバとしてLinuxを採用しています。
ウェブサービスを作ったり、運用するなら、このサーバ構築や運用の仕方も覚えなければなりません。
5.データベースの使い方を覚える
次にデータベースです。
データベースてなんだかわかりますか?
例えば、昨今様々なサービスが各社から提供されていますが、どれもかならず初めて利用するときにはログインアカウントの登録をするとおもいます。
Gmailにしろ、Facebookにしろ、Twitterにしろアカウントや個人情報を登録しないと使えないですよね?
このアカウントを登録するときに入力した情報が「データベース」上に書き込まれ、ここに保存されます。
データのやりとりが発生するWebサービスを作るなら、このデータベースも必要です。具体的にはデータベースサーバ(DBサーバ)を構築しなければなりません。
DBサーバを実現するソフトウェアに「MySQL」, 「PostgreSQL」, 「Oracle」などがあります。
総くくりで、RDBMS(Relational DataBase Management System)と呼びます。
最近ではこれらを覆す、NoSQL仕様の「Mongo DB」なども出てきました。
以前勤めていた上司に言われて最も印象に残った教えがあります。
それはWebサービスを作るときに重要なのはデータベースの構造を理解し、きちんと設計・構築することです。
プログラムをつくるときも改修するときも、またサーバやネットワークの設計をするときもこのデータベースの構造をきちんと把握し、精密に設計・構築することで良いウェブサービス・アプリケーションができると言われました。
データベースの構造がむちゃくちゃだと、新規の機能追加をするときもすごく大変になります。
ですので、このデータベースの作り方・運用の仕方はしっかり学ぶべきです。
6.原理原則を把握する
プログラムを作ったり設計する上で最も大切なのは、原理原則を理解することです。
プログラムが動く仕組み、インターネットに繋がる仕組み、サーバが処理する仕組み、データベースが処理する仕組み、など数え上げたらキリがありませんが、それぞれに基礎となる原理原則があります。
ここはどんな時代になっても必要となる基礎です。
特にWeb系の技術の移り変わりは非常に早いです。昨年使った流行った技術が今年は枯れ始めているなど、よくあることです。
そんな移り変わりの早い業界だからこそ、原理原則を身につけることが重要だと教わりました。
これからプログラミングやサーバを勉強しようと考えている方は、それぞれの仕組みを理解することを念頭に置いてください。
7.根気強く努力する
最後ですが、未経験者や初心者に最も心に刻んで欲しいことがこれです。
辛抱強く、根気強くプログラムを書き続けてください。
特に初めの頃はエラーばかりでさっぱりわからないとおもいます。
そのエラーがどこが原因で発生しているのか見つけるのに最初は苦労します。
例えば、
・プログラムの書き方に問題があるのか
・サーバ側の設定が間違っているからなのか
・動作に必要なソフトがインストールされていないからか
・必要ツールも揃い、書き方も正しいが、導入されているソフトやツールのバージョンが古いもしくは新しいから不具合が発生したのか
考えられる原因は一つずつ追っていかなければなりません。
ですので、エラーログをしっかり見ましょう。
ログと友達になるつもりで、ログの内容を把握し、わからなければググるということが大切です。
とにかく最初はトライ&エラーの繰り返しです。
エラーを根気強くググってください。
ここが続けられるか続けられないかの山です。
私は途中挫折してしまいました。ですので偉そうなことは何も言えません。
しかし、これからWeb系の仕事、あるいはプログラミングが必要な仕事に就こうとおもうなら、休みを返上してでも勉強する覚悟があるほうがいいかもしれません。
先ほど、この業界は技術の移り変わりが早いと説明しました。常に新しい技術にチャレンジするくらいの意気が必要です。便利だと思うツールはすぐに試しましょう。
個人でフリーランスで考えているならば、技術にこだわる必要はないとおもいます。
しかし、スタートアップやベンチャーの会社でアプリ開発をやるなら、技術を駆使するのは重要な要素です。
覚えるべきことがたくさんありますが、こういうことも含めて楽しいと思えればきっと立派なエンジニア・プログラマになれます。
最後に
自分のように中途半端な状態でやめてほしくないという想いから、今回記事に書きました。
Web系は本当に技術開発が早いです。常にトレンドをウォッチすることもエンジニアとして必要です。
一度挫折してやめてしまった私ですが、今もう一度挑戦しようと考えています。
インフラ周りのお仕事でもプログラミングのスキルが求められることは間違いありません。
これからプログラミングを始める人、プログラミングを始めて少ししか経ってない人にこの内容が少しでも手助けになれば幸いです。