題名の通り私は今ITエンジニアになる為に、もう勉強中です(笑)スクールも卒業し今は転職活動に入ってます。ここからは、そんな私がスクールで学んだ体験談と知識を記事にしていきたいと思ってます。まずは、基本知識関連→需要→独学→スクール体験談→ITエンジニア転職と進んで今後記事にして書いていきたいと思います。今回の記事は基礎知識です。
目次
まずプログラミングとは?
簡単にいうと「コンピューターを動かす為に指示すること」を意味します。
コンピューターが処理を行う際には必ずプログラミング言語を用いて動作命令しなければなりません。たとえば、スマホや家電製品の動作処理、AIやWebサイトの開発などなど身の回りのありとあらゆるシステムでプログラミングが使われます。また、プログラミング言語にはさまざまな種類があり、それぞれ用途や得意な処理が異なります。システム設計に基づいて適切なプログラミング言語を使う事が大切です。複数のプログラミング言語を扱う事が出来るプログラマーであれば活躍の場が広がります。
プログラミングを習得する為の目安時間600時間〜1000時間と言われています。
独学だと1日:約3時間で1年、スクールだと1日:約5時間で半年「プログラミングを勉強するための本を買ってみたけど、わからない用語が多すぎる」「まずは基礎知識を身につけて、プログラミング学習をスムーズに進められる状態にしたい」こう考えていませんか?本記事ではこれからプログラミングを学習しようとしている方に向けて、学習前に必要な知識を紹介します。プログラミングの基本知識を身につけ、学習を効率的に進めたい方は必見です。
アルゴリズムとは
アルゴリズムとは、日本語に訳すと「計算手順」となります。つまり、コンピューターに処理してもらいたい一連の流れの手順書のようなものです。コンピューターに「まっすぐ行って右に曲がれ」と指示を出しても、あなたの思った通りには動いてくれません。もし、適切にコンピューターを動かしたいのであれば、「どれくらいの距離まっすぐ行って、どれくらいの角度でどのタイミングで曲がるのか?」までを具体的にアルゴリズムとして示さなければいけないです。
また、その過程でアクシデントが発生した場合は、どのように対処させるのか?までプログラムしておかなければコンピューターはエラーを起こしてしまいます。よく出来たアルゴリズムはエラーも起こさず、より精密にコンピューターを動かし続けます。一方で、スキル不足のプログラマーが作ったアルゴリズムは、コンピューターをスムーズに稼働させることが出来ないです。プログラミングにとって、アルゴリズムは非常に大切になります。また、アルゴリズムのようにプログラミングの分野ではよく使われる用語はたくさんあります。プログラミングの基礎知識として覚えておくことをおすすめします。
システムエンジニアとプログラマーの違いは?
プログラマーと似たような仕事に「システムエンジニア(SE)」があります。この2つはどう違うのでしょうか?システムエンジニアはSEと呼ばれる仕事で、システムの設計から携わる仕事になります。つまり、システムエンジニアをするのであれば実際にお客様と打ち合わせをするところから始まるというわけです。お客様がどんな不便を抱えていて、どんな仕組みを構築すれば、その不便が解消できるのか?
また、実際に仕組みを導入してみて、その不便は解消されたのか?さらには、その後本当に仕組みが問題なく稼働しているのか?までを管理するのがシステムエンジニアなのです一方のプログラマーは、プログラミングのプロなので、システムエンジニアが要求するプログラムを作り込んでいく人の事です。そのため、システムエンジニアとプログラマーは常にチームになって作業を進めていく必要があります。
プログラミングは一見、なんでも出来るとても難しいもののようなイメージを持ちます。その実プログラムの中身は決まった命令の組み合わせで表現された文章にすぎません。仕事のマニュアルなどで分かりやすく処理を表すフローチャートはまさにプログラムそのものです。つまり、プログラミングとは機械が文章を上から読んで順番に処理をして、読み進めて仕事をしてくれるものを作ることです。
チュートリアルをやってみる
まず目的を明確にして学習計画を立てることが重要です。そして、学習しながら自分の作りたいものを作ることで、学習のモチベーションを保ちながら進めることで技術や知識を身に付けることが可能です。また、単にプログラミングを学習したい方も、書籍や後で紹介するWebサイトなどを参考に手を動かして技術を学ぶのも良いでしょう。学習ツールでいえば、プロゲート・ドットインストールがおすすめです。ドットインストールのチュートリアルは、3分動画を観て同じように手を動かすことで、初心者でもサクサク学習が進みます。
プログラミング初心者が基礎から学べる環境も豊富と知る
Webサービスや学校、ゲームなど、プログラミングを学ぶ環境は整備されてきています。こうした環境をうまく利用すればだれでもエンジニアになれる時代に、文系だから・若くないからといった理由でプログラミングの上達を避けているのはとてももったいないです。まずは、学ぶ環境を知って一歩一歩前進していきましょう。
プログラミングを進めるオススメ方法
プログラミングは全ての命令を覚えて何も見ないで作るものと思われている方も多いかと思います。もちろん仕事としていつもプログラミングを行っている人は、体が命令を覚えてしまっているのでスラスラ書けてしまいます。ただ、実際はインターネットや本で命令の書き方を調べながら作るのが一般的です。日本語しか話せない人が伝えたいことを英語で手紙にしたいときに、辞書を引きながら英作文するような感覚です。
もちろんプログラミングの基礎学習は必要ですが、やろうと思えば誰にでも簡単なプログラムは作れます。どう調べればほしい情報が手に入るのか?という問題解決能力を養いながらステップバイステップで実施していきます。プログラミングは文章を作ることなのでもちろん良いプログラムと悪いプログラムがあります。一通り伝えたいことを表現したり、読み解くことがスムーズに出来るようになったら、次なるレベルアップの為に良いコードを書けるよう気をつけるようにしていきます。プログラミングでいう「良いコード」とは主に次のようなものがあります。
バグが少ない
当たり前ですがそもそも論理破綻していて動かないアプリは意味がありません。プログラミングにおいてはしっかり動作の確認をして、意図したとおりに動くように確認する行為がとても大切です。プログラミングは思った通りには動きません。「書いた通りに動きます。」ロジカルに考えて実際に起こり得るパターンを「全て」考える必要があります。
可読性が高い
プログラミングはワードなどで作られる文章と同じように、人によって読みやすい読みづらいが有ります。段落や改行がおかしな所でされていると文章も読みづらいですよね。また誤解をまねく表現があると思わぬミスにも繋がります。プログラミングには人の気持ちになってどう表現するかを考えたり、他の人の行動を先読みする能力も必要になってきます。
拡張性が高い
上記2つにも関連しますが、良いプログラムは『拡張性』というものにも配慮されています。後からでも新しい機能を加えたり、変更を加えたりしやすいように作っておくということです。もし、あなたがプログラミング学習にあたり、ひとりでの学習は不安プログラミングを応用する際に切っても切り離せないのがインターネットです。最低でもどういう仕組で成り立っているのかはざっくり抑えておきましょう。
インターネット通信はデータのやり取り
インターネットは、電気通信を行う物理的な回線によって繋がっているものですその回線の中を、数字で表現されたデータ行ったり来たりすることで通信は成り立っています。例えば、このサイトを見ているあなたのパソコンからも、このページの情報が存在するコンピュータへ「情報がほしい」とリクエストがあり「こんなことが書かれているページです」とレスポンスを受け取って閲覧ができています。
データの運び方
インターネット回線を行き交うデータは、それぞれデータを運ぶための方法が違います。例えばこのページを見ている時には、HTTPというWEBサイト見るためのデータの運び方をします。URLという部分をクリックすると「http://〜」という表示になってますよねHTTPとういう通信方法でこの場所から報をダウンロードしたという意味です。このインターネット上でやりとりするデータの運び方、通信方法のことを専門用語で「プロトコル」といいます。
標準的なWEBサイト閲覧するためのHTTPというルールの他にも、HTTPS/FTP/SSHなど様々なものが存在します。専門的なものは、はじめはあまり知る必要はありませんが、HTTPというルールに基いて普段データがやり取りされていて、WEBサイトが見れているという常識は抑えておきましょう。
WEBサービスの仕組み
普段何気なくこうして使っているWEBサイトなどはどのようにして閲覧できているのでしょうか。車を運転するのにエンジンやタイヤの構造を知る必要はありませんが、少なくともエンジンやタイヤから成り立っていることは知っておくべきでしょう。ここでは簡単にWEBサイト及びWEBアプリケーションについて解説します。
WEBサイトの仕組み
WEBサイト(ホームページ)を閲覧する時に「GoogleChrome」など様々なブラウザを用いるかと思います。現在このページを閲覧するために開いているアプリがそうです。具体的には、ブラウザからインターネットに接続されている相手のコンピュータに「ファイルをダウンロードさせて欲しい」とリクエストを行い、HTMLやCSSやJavaScriptと呼ばれるファイルをダウンロードしてきます。そして、ブラウザ上でそれらのファイルで表現されている「見た目」を再現して、WEBサイトとして見えるように翻訳してくれています。
WEBアプリケーションの仕組み
WEB上で動くものはただデータを一方的にダウンロードさせるサイトだけではありません。例えば、「FacebookなどのSNS」では利用者が近況を投稿したり、画像を投稿したりしています。つまり、データをブラウザから発信して、WEBサーバにアップロードしてます。このアップロードにも対応して、WEBサーバ上で処理を行ってくれるプログラムをWEBアプリケーションと呼びます。WEBアプリケーションはアップロードされた情報を保存したり、あるいは引き出してからブラウザにダウンロードさせるHTMLを作ったりしています。
テキストエディタ・統合開発環境とは?
テキストエディタとは、文章の記述や編集、保存ができるソフトウェアです。具体的には、Windowsにインストールされている「メモ帳」やMacにインストールされている「テキストエディット」がテキストエディタに当たります。プログラミングは、このテキストエディタに記述していくことで、プログラムを作成していきます。しかし、テキストエディタの中には機能的な面からプログラミングに不向きなものがあります。そのため、テキストエディタを選ぶ際には注意が必要です。初心者がつまずきやすいのが、実際プログラミングをしていく前の環境構築です。主なポイントとしては、次の通りです。
- WindowsかMacか
- プログラミング言語やフレームワークはなにが向いているか
- サーバー環境が必要か
- エディタや統合開発環境
実はパソコンとプログラミング言語が決まれば、ほかは選択肢が限られてきます。汎用性を考えるならば、仮想マシン上にLinuxを用意する開発環境の構築をおすすめします。構築方法はプログラミング学習サイトなどに逐一紹介されているので、その通り作業すれば問題なく完了します。ローカル開発環境であればWebサーバーなども簡単に用意できます。しかし、パソコンのスペックや事前知識の量によっては、ローカル開発環境の構築にも大変な時間がかかってしまうので、これらを飛ばしてとにかくコードが書きたい場合は、PythonやNode.jsなど開発環境の構築が最小限のものを選ぶといいです。
また、言語によってはWebブラウザ上で初歩的なプログラミングを試すことができます。コードをなにに書くかですが、デバッグや入力コードの補完などもしてくれて本格的な開発に使われるのは以下のような統合開発環境というものになります。プログラミング実行環境が最初から用意されていたり、表記ミスやエラーを表示してくれたりといった初心者の学習効率を高めてくれる機能が備わっていますので、使い方に慣れておくことをおすすめします。
- Xcode(Mac)
- Visual Studio
- NetBeans
- Android Studio(Androidアプリ開発)
使っているマシンのスペックに自信がない、まずは最小限のプログラミングを動かしてみたいという方は、シンプルで使いやすいエディタを選ぶのがいいでしょう。エディタには以下のようなものがあります。
- Emacs
- Vim
- Atom
- 秀丸エディタ
- サクラエディタ
- Sublime Text
- Notepad++
- TeraPad
それぞれ便利に使えますが、初心者には癖がなくメモ帳に近いサクラエディタなどから入るのがいいです。ローカル開発環境上で使うならVim、コードの補完などが必要なら無料で使えるAtomやVisual Studio Codeなども人気です。
データベースを選ぶ
「Hello World!」を表示させるだけならデータベースはいりませんが、Webサービス・アプリなどでは、ある程度の種類と量のデータを活用する必要があるので、それらを関連付けて取り出しやすいかたちにするデータベースが必須です。これにもいくつかの種類があるので、候補のものを列挙しておきます。
- MySQL
- PostgreSQL
- SQLite
- MongoDB
使う言語によって規定されるものもありますが、一般的なMySQLを準備しておけば間違いないでしょう。
プログラマの三大美徳(怠惰・短気・傲慢)
最後に基礎知識とは少し離れますが、知っておきたいこととしてプログラマの三大美徳の考え方について紹介します。怠惰・短気・傲慢と言われてもネガティブな印象しかないかと思いますが、その捉え方が優れたプログラマーには必要と言われています。
怠惰:面倒に感じること
優れたプログラマは「自力で仕事をすること」を良しとはせず、出来るだけコンピュータに仕事をさせて自動化します。[br-xs]また、同じような仕事を何度も行うのは面倒なので、過去にした仕事を活かして再利用します。プログラマとして業務効率を改善する根底には「様々な便利なモノを知って面倒くささからどんどん開放されたい」と強く願う面倒くさがりの精神があります。
短気:すぐにストレスを感じること
優れたプログラマは効率の悪いことや合理的でないものが大嫌いです。つまり、どうにかこの作業をより質の高いものに出来ないかと考えます。「人一倍気を配りストレスを感じること」も改善ポイントを見つけられるプログラマの才能になります。
傲慢:高いプライドを持つこと
優れたプログラマは高いプライドをもって顧客にケチを付けられないものを作ろうとします。また、「もっと便利にしたい!これも出来るはずだ!」と飽くなき探究心と実現可能性を追い続けます。すぐに出来なくても学習を行って、傲慢に「もっと」を求めるのもプログラマの才能になります。
まとめ•••プログラミングを始めてみよう
ここまで、文系でも知っておきたいプログラミングの基礎知識と題してプログラミングについてご紹介しました。プログラミングは理系のスキルと思われがちですが、現在では文系・理系関係なく身につけるべきスキルに変わりつつあります。2020年からはプログラミングが義務教育化され、将来的には必須スキルといってもいいでしょう。でも文系だとプログラミング習得は難しいでしょ?いざはじめようとしてもこのようにお考えの方が多くいらっしゃいます。確かに昔はプログラミング=理系というイメージが浸透していましたが、最近では学習環境などの変化によって文系理系関係なく習得できる環境が整っています。文系だからできないと敬遠するのではなく、まずはプログラミング学習の第一歩を踏み出してみてください。
大事なのはあなたの意欲次第!!学ぶには、あなたのやり切る意思がとても大切です。