どうも、こんばんは。
先日初めて自分ひとりの案件を任せられました!
簡単な要件のExcelマクロですが、初めて製造からテストまで通して自分ひとりで行えたのでとても嬉しかったです。
実際に開発を行ってみて、技術力もそうですが、やっぱり経験値が不足していると強く感じました。
僕は今の会社に就く前、独学でテキストや学習サイトで勉強し、その後オンラインプログラミングスクールの8週間のカリキュラムを受けました。
JAVAに特化はしていたものの、やっていけるだけの基礎知識を学べたつもりでしたが、やはり実務は違う!
ということで、個人的にエンジニアに転職する前にやっておきたかったことを書きたいと思います。
業務レベルの基礎知識を身に着ける
当たり前のことですが、教本やスクールのカリキュラムの内容は、技術についての内容が書かれています。
しかし、そういった教材はあくまで「学習」にスポットをあてて書かれています。
もちろん役に立ちますが、実務になると「知識」と同様に「応用力」が求められます。
自分が新卒の社会人1年生なら、基礎の基礎から教えてくれる環境もあるかもしれません。
ですが僕は31歳の実務未経験者です。即戦力とまではいかずとも、ある程度の基礎知識があるつもりで仕事は進みます。
分からなければすぐに聞く、取り込んでいて時間がなければ自分で調べる、といったことはもちろん行いますが、最初から知っていて損はありません。
知っているのと知らないのでは、業務内容の理解もぐんと早くなります。
なので、もしエンジニアを目指して学習されている方、小休憩がてら実際の業務に関して調べてみるのもいいかもしれません。
僕はデータベースのGUIツール、git(バージョン管理ツール)、各言語の主要なフレームワークの基礎などについてもっと調べておけばよかったと思ってます。
あと、学習中は文字コードや改行コードのことも全く考えていなかったので、そういったところも抑えられる開発環境を用意しておけば実務レベルを養えたかと思います。
なんにせよ、現代はオープンソースソフトウェアが溢れています。学習のアウトプットとしても、実務になるべく近い環境を用意する事は重要だと思います。
制作物の要件を定義する
もし実際に作りたいものがあるなら、それは積極的に作成するべきです。
僕もWebサイト制作を進めていましたが、僕の場合はあくまで教本ベースで進めていました。
「この本を全て読めば1からWebサイトが作れる!」といった謳い文句の技術書は多くありますが、僕もそういった技術書の内容に倣って制作を行っていました。
そこでプログラミングの基礎を覚え、学習の楽しさを学ぶことができたので後悔はありませんし、決して無駄な行動ではなかったと今でも思います。
ただ、「もう少し踏み込んだ視点でアプリケーションのことを考えればよかった!」とは強く思います。
「どんな機能を持ったアプリケーションなのか」という要件について深く吟味し定義しておきたかった。
今ではそれがどんな重要であるかを痛感しています。
ITはあくまで方法であって、本当に重要なのはその先にある「目的」です。
その目的の要件の定義こそエンジニアの仕事の基本であり、開発よりも重要な指標なんだと思います。
そしてそれは実務だけではなく、自分のために作る制作物に関しても同じことだと考えています。
作りたいものの要件定義を行い、それから作る。途中、追加で実装したい部分が生まれたらToDoとしてメモしておき、大枠を作っていたほうが後から拡張する際も管理しやすいはずです。
もしプログラミングの基礎知識が身についているなら、作りたいものの要件をまとめて、それを逆引きで調べつつ制作することも、技術力を大きく伸ばしてくれるはずです。
オープンソースソフトウェアを活用する
今はプログラミングの学習サービスはたくさんあります。
以前このブログでも紹介したプロゲートもそうですが、少ないコストでプログラミングを楽しく学習できる機会には本当に恵まれていると思います。
そしてそのアウトプットとしてWordpressやEC-CUBE、Salesforceのカスタマイズを行うのは実際の開発での能力を身に着けるにはうってつけだと思います。
今の会社に就くまではWordpressのことを「簡単にブログを始めるためのツール」ぐらいにしか思っていなかったけど(間違いではない)、
プラグインやテーマをカスタマイズするとなれば、本格的なPHPでの開発を行えます。
もしECサイト運営に興味があるならEC-CUBEを導入するといいでしょう。
EC-CUBEならSymfonyというフレームワーク(後述)の知識を付けることができます。
どれも一筋縄ではいきませんが、もしこういったオープンソースソフトウェアでの開発力が身に着けることが出来れば、
プログラミングの能力はもちろん身に付きますし、デザインなどを意識する観点を持つことができます。僕が現在目指しているところでもあります。
あと、Office製品があるのであればVBAはとてもおすすめです。
excelの関数等の知識もつきますし、IT系の会社でexcelを使用する会社はまだまだ多くあると思います。
風のうわさではランサーズ等にも個人向けの案件としてVBAは少なくないみたいです(ちゃんと調べてはないので確証はありませんが)。
いずれにしても開発で実際に使用しているツールやソフトウェアでの開発を行うことは、本当に学びが多いです。
現在の技術のトレンドを把握する
先述したとおり、僕は参考書やスクールのカリキュラムをメインに学習していました。
その中で終始疑問だったことが「今学習している内容は、実際の開発現場では具体的にどう使用されるのか?」ということでした。
というのも、プログラミング学習を始めた人が誰でも通るであろう各言語での「HelloWorld」の出力。
JAVAではeclipseというIDE(総合開発環境)上で「system.out.println('HelloWorld')」と入力して実行するとコンソールに「HelloWorld」が出力される、という確認を
カリキュラムでも参考書でも「まずは出力してみよう!」ってな感じで最初の項で行うんですが、「これは一体どういう時に使うの?」ってのがどうにも腑に落ちませんでした。
なのでなるべく実際の開発に近そうな「簡易掲示板を作ろう!」というドットインストールや参考書の課題でありがちなWEBアプリケーションを作ってみたりしました。
MVCには触れない小規模なシステムで、いくつかクラスを作りDB接続もドライバ等の情報べた書きでユーザと投稿の情報を保持するくらいの少ないテーブル構成です。
そこで僕はより一層疑問が深まりました。
というのも、経験のない僕でもDB接続の設定を開発のたびに書くのは不自然に感じます。そしてコードがあまりに多様性に欠けている感じがします。
うまく言葉にできませんが、何か圧倒的に応用性に欠けるように感じたのです。
そこでスクールのメンターの方に「実際の開発っていつもこんな感じ(自分の作ったコードを見てもらいながら)の内容を書いているんですか?」と聞くと、
「WEB開発においてJAVAをそのままで書くことはすくないですね。基本フレームワークを使います。」とのこと。
「フレームワーク?初耳なんだけど…」となったのがスクールの最終週くらいでした(笑)
そしてその後実務でシステム開発の実務を行うようになるわけですが、基本フレームワークです。
ただ、各言語の基礎が必要ないというわけではありません。言語の概要の理解は基礎中の基礎なのです。
各言語を土台に、さらに利便性・可読性などを高めたのがフレームワークです。
そして実際の現場ではフレームワークというアプリケーションの開発を促進するツールだけではなく、
開発環境の構築の分野においても簡単に行える技術が使用されています。
基礎学習にめどがついた時点で実際の開発現場を覗いてみるのはとてもいいと思います。
今は会社見学なんてしなくてもQiitaなどを見れば実際の開発の一部を垣間見ることができます。
トレンドを知ることで自分の開発環境についても知識がつき、言語をどのように活用するか考えるきっかけにもなります。
あとそういった記事を見るのは有意義でとても楽しいです。
まとめ
当たり前のことばかりですが、とにかく僕が言いたいことは実際の開発を意識することです。
こればかりは教本やプログラミングスクールだけではカバーしきれません。
実際の開発を意識することで違う視点が得られますし、もしスクールに通われているのであれば、メンターさんに聞いてみるのもいいと思います!
そして、世の中、「未経験から即戦力に!!」と謳うスクールが多数存在しますが、あれ半分嘘です!
でも、基礎知識の習得にはなるし、あとは実際の制作物を定義して、実際の開発環境で開発が行えたら、かなり力はつくと思います。
それでも、技術の海は広く、Dockerやらセキュリティ関係のことなど数えたらきりがないほど高難度のことは存在しますが、千里の道も一歩から!
その一歩としてフラームワークを使用した開発やCMSのカスタマイズなどは難易度的にちょうどいいと思うので、共に頑張っていきましょう!(´-`).。oO(仲間が欲しい)
ここまで読んでいただいて本当にありがとうございました!