質問: 軽く自己紹介をします。 私は今23歳、高卒です。 来年に専門学校に入学しようと思っています。 大学でない理由は金銭面です。 また、学校に入学しようと考えている理由は言語を基礎から徹底的に学び、その後の就職に有利になるためです。 HTML/CSSはある程度理解できます。 wordpressもテーマ作りをしました。 デフォルトのテーマほどの完成度ではないですが。 将来的にJAVAやPHPも手をのばし、サーバーサイドのwebプログラマになりたいです。 while文やfor文などの基礎はphpで学習しました。 JavaScriptやjQueryは今すぐに学ぼうとは考えていません。 サーバーサイドのものでこれだというものはないでしょうか? 今はPHPで掲示板作成や自宅サーバーの構築、JAVAでアプリ製作を考えています。 JAVAの開発環境はできました。 ビジョンがはっきりせず、時間だけを浪費しています。
回答: まず、ちょっと前置きから。 > > teratailでは、プログラミングに関して困っていることがないと思われる質問を推奨していません。 > > > との事ですが、「エンジニアのためのQ&Aサイト」と謳っている以上、本件のような質問を否定すべきではないと思います。 実装上の問題の多くは時間を掛けてググると自己解決出来る場合もありますが、エンジニアを目指して頑張っているが故に生じる疑問や悩みは、こうした場を借りて**先輩エンジニアの生の意見**を聞くことでしか解決出来ないので。 勿論、人生相談のようになっては困りますが、そこをわきまえてさえいれば、例えマイナス評価を受けようとも臆せずに質問して良いのではないでしょうか。 さて、本論ですが、既に皆様が回答されている通りです。つまり > > ビジョンがはっきりせず、時間だけを浪費しています。 > > > の一番の特効薬は、どんな形でも良いのでとにかく「**実務に携わる**」事です。 教科書をなぞるような勉強を何年続けてもあまり成長は見込めません。 プログラミング言語は道具に過ぎないので、教科書で学ぶ事よりも『実務で使う』ことでしか得られないモノの方が遥かに多いです。 それと、お気持ちはよく分かるのですが・・・今の時点で > > サーバーサイドのものでこれだというものはないでしょうか? > > > といった考え方はしない方が良いと思います。 技術の流行り廃れを正確に予測するのは至難の業ですし、また、たまたま流行りの技術を習得出来ていたからといって仕事面での成功が保証される訳でもありません。 いわゆる**潰しの利く**エンジニアになるには、何を学ぶかよりも**どのように学ぶか**の方が何十倍も重要だからです。 次に、進路について少し。 自分は一応大卒ですが、工学系専門学校で一時期非常勤講師をしていた経験もあるので、両者について幾らか知っているつもりです。 両者共に、自分が高校生の頃に抱いていたイメージとはかなりかけ離れていて、少なからず失望したのを覚えています。 とは言え、それは学校側が一方的に悪いと言う事では無くて、むしろ自分自身の「**能動的に学び取る能力**」の欠如に失望していたのだと、今では思っています。 大学と専門学校は、**似て非なるもの**です。 あくまでも一般論ですが、大学は基礎学問を教え研究する場なので、システム開発の実務的な事は余り教えてもらえません。 一方、専門学校は『実践的』である事を旨としているので実務的な事も多く取り上げられますが、あくまでも教科書的なレベルです。ですから就職後に直ぐに役立つか?と言えばかなり疑問です。 結局どこで何を学んだところで、その内容自体が実務に直結している訳では無くて、その学びや経験、人間関係を通して、どれだけ『**問題解決能力**』や『**コミュニケーション能力**』を培えるかが重要なのだと思います。 ちょっと語弊はありますが、大学が専門学校に勝っている最大の利点は、無駄にダラダラと過ごせる**時間的な余裕**の有ることかなとさえ思っています。 しかし、この一見無駄な時間が実はとても重要であり、**自由な発想**や**柔軟な取り組み方**というエンジニアにとって**重要な資質**を育むのに大いに役立つのだろうと考えている今日この頃です。 さて、最後になりますが、専門学校へ進学されるのであれば是非とも**基礎**と**周辺**に注力してください。 『**基礎**』といっても学者になる訳ではない(プログラミングは基礎学問ではなく**実学**です)ので、知っているに越したことはないですが(学問としての)数学はあまり必要ではなく、むしろ『**基礎技術**』をしっかりと身に着けて頂きたいと思います。出来るだけ若いうちに! その際たるものの一つが「**ネットワーク技術**」です。たとえば下記をしっかりと学習してください。 マスタリングTCP/IP 入門編 第5版 これは、Web系システムに限らず、これからのシステム開発全般において益々重要になってくる分野の知識です。こうした**キーテクノロジーの基礎**をどれほどしっかりと理解しているかで、5年先、10年先の技術力に差がでてくるということに、全てのエンジニアが同意されると思います。 開発で**実際に使用する言語**については、とりあえず**リファレンス**を読めるだけの知識があれば十分です。それ以上深く学習したとしても、実際に使う機会がなければ宝の持ち腐れであり時間の無駄です。必要に迫られてから学習しても間に合います。 それよりも、コードリーディングやテストの手法について学習する方が余程実務に役立ちます。たとえば以下の様な参考書を、最初は拾い読みでも良いので目を通して見てください。 Code Reading―オープンソースから学ぶソフトウェア開発技法 リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック 知識ゼロから学ぶソフトウェアテスト 【改訂版】 これは個人的な見解ですが、システムの性能やメンテナンス性は、**プログラム自体よりもデータ構造**によって大きく左右されると考えております。そういう意味では**データモデリング**の基礎をしっかりと身に着けることも重要だと思います。 業務別データベース設計のためのデータモデリング入門 それから、**周辺**という意味では、インフラ系の知識も毛嫌いせず貪欲に取り入れてください。 インフラ系も非常に広範囲かつ奥深いテーマなので、あまり深入りする余力はないと思いますが、敢えて下記の参考書を推薦しておきます。 絵で見てわかるOS/ストレージ/ネットワーク~データベースはこう使っている プログラミング言語について言えば、折角、環境を構築なさったのであれば、まずは**Java**にじっくりと取り組んでみられると良いです。 プログラミング言語は、誤解を恐れずに書けば、どれが良いとかどれでなければダメということは無くて、要件として定められているのでない限り自分の好きなものをその都度自由に選べば良いのです。 自然言語だって、適切な訳語が見つからず苦労することはあったとしても、だからその言語がダメということはなく、その文化全体も含めて楽しめば良いだけです。 いろいろな言語に触れ、片言でも喋れるようになって初めて、母国語の美しさや奥の深さが分かってくるように、Javaに軸足を置きながら色々な言語に触れてみると良いのではないでしょうか? 中でも、**C**と**JavaScript**については、ほんの入門程度で良いので早めに触ってみることを強くオススメします。(入門程度は既にマスターされているかもしれませんが) **C**はシステムの深層を理解したりアルゴリズムの学習にも有用ですし、**JavaScript**は単純にツールとしての利用価値が高いので、プログラミング自体に直接使用しないとしてもかなり有用だと感じています。 とりとめもなく長文になってしまいましたが、いくらかでもご参考になれば幸いです。