システムエンジニアはどうやってプログラムを覚えたらいいのか?
今回は、システムエンジニアはどうやってプログラムを覚えたらいいのか?ということを僕が思うなりに書いてみようと思います。
書こうと思ったきっかけ
ある日、一緒に仕事をしているメンバーから来た以下のSlack。
エンジニアの皆さんにお聞きしたいです。
駆け出しのエンジニアにアドバイスするとしたらどっち?
最初のうちは腰を据えて1つの言語をやったほうがいい
チャンスがあるなら数ヶ月ごとにでも別言語をやったほうがいい
言語の選択について具体的なアドバイス等あればコメント貰えればうれしいです
僕の回答は以下の通り。
Javaがオススメで、言語はなんでもいいから1人で簡単なシステムを構築できるくらいになれたらいいかもですね
1からシステムを作るって意味だと、PHPでもいいかも
僕はJavaを12年くらいやってきて、この言語なら自信を持てる!というものを1つ作ることが自分の強みになると感じています。
なぜJavaなのか?
僕は、新卒で入ってから3年くらいは、ずっとJavaをやっていて、プログラミングの基礎が身についたと思います。
僕が今まで経験してきたプログラミング言語は、
Java、PHP、C#、C、VB、VB.NET、SQL、VBA、Google Apps Script(GAS)、HTML、CSS、JavaScriptなど。
RubyやPythonは経験がなく、詳しいところは分かりませんので、上記の言語の中でということになります。
Javaをオススメする理由は、
・オブジェクト指向を覚えられる
・いろんなところで使われている(業界でメジャーな言語)
・プログラムの構文が他に応用しやすい
・サーバーサイド(バックエンド)の知識、技術を身につけることができる
この辺りが大きな理由かなと考えます。
オブジェクト指向はシステム開発の基礎になると思いますし、サーバーサイドの知識、技術を身につけることで、プログラミングによる問題解決能力が身につくと思っています。
同様の理由で、PHPを覚えるのも良いかもしれません。
JavaよりPHPの方が学習コストが低く、始めやすいと思います。
プログラミングで大事なこと
プログラミングによる問題解決能力、ということを書きました。
僕がこれまでシステムエンジニアを続けてきて、これが一番大切かなと思っています。
どんなシステムやサービスの開発であっても、根本にあるのが何かしらの課題だと思います。
その課題を解決するためのシステム開発。
システム開発によって、日々の業務が効率化できたり、課題を解決することで会社の売り上げアップに繋がったり。
システム開発だけやっていると、あまり気付かないことも多いですが、システム開発による効果まで考えると、システムが与える影響ってのは大きいなと感じます。
実現したいことをプログラムで表現する力
そして、問題を解決する時に必要な能力が、実現したいことをプログラムで表現する力です。
一般的にはアルゴリズムと呼んでいたりします。
アルゴリズムとは、問題を解決するための方法や手順のことです。
解決したい課題があった時、それをどうやって解決するのか?ということですが、解決する手段を思いついてもそれを実現する、ってのは最初は大変かもしれません。
こればっかりは経験するのが一番だと思います。
経験する中で、問題解決までのフローを設計する力も付いていくし、経験を重ねていけば、要件定義もできるようになっていきます。
ある程度、出来るようになってくると、要件さえあれば、様々な方法を用いてそれを実現することが出来るようになっていくと思います。
プログラミングで表現する力が付くことで、開発コストを抑えることもできますし、自分と周りの業務を効率化したりすることもできます。
システムは保守していく前提で作る
あと、大事だなと思うのが、保守性の高いコードが書けるかどうか、ということです。
趣味レベルの開発だったら、開発するのは自分1人ですが、仕事でシステム開発をするとなると、チームで開発することがほとんどです。
そして、自分が作ったシステムを、ずっと自分が保守することもなく、他の人に引き継いでいく、というのも多いと思います。
これはよくあるパターンな気がしますが、作った人以外は仕様が分からないとか、解読できないプログラムとか、作って終わりなシステムもよく見かけます。
動くシステムを作ることは大事なことですが、システムを継続して稼働させていき、より便利なシステムになるように改善していくことも大事なので、自分以外の人が改修することになっても、改修しやすい分かりやすいプログラムを作ることが大事になってきます。
技術は先輩など周りの人から盗む
僕自身も、今でこそ自信を持ってプログラミングできるようになりましたが、先輩から教えてきてもらったことが大きな要因になっていると感じています。
システム開発では、自分が作ったプログラムを他の人にレビューしてもらうことが慣習になっていて、僕もよくレビューしてもらっていました。
最初は、全然思うように作れず、レビューとなると、たくさん指摘をもらったりしていました。
また、先輩の作ったプログラムのレビューに参加することも多く、先輩のプログラムを見て学んできたことが、すごく多かったと思います。
レビューについては以下にまとめました。
そして、若いうちは規模の大きいシステム開発のプロジェクトに携わるのも良いかなと思います。
それぞれが作った機能を結合させて1つのシステムを作る、というのは、すごく勉強になると思います。
自分が作っている目先のプログラムだけじゃなくて、システム全体を見て、実際にユーザーに使ってもらうところまで意識していると、たくさんのことを覚えることができると思います。
技術をどうやって学んでいくかというのは、以下に書いてみました。
簡単なシステムで良いから、1人で全部作れるようになる
覚えていくうちに、様々な知識、技術が付いてくると思います。
ある程度、力が付いてきたら、簡単なもので良いのでシステム全部を1人で作ることをやってみるのがオススメです。
僕も本職はサーバーサイドのエンジニアなので、フロントのHTMLやCSSは、ある程度分かるという状態です。
ただ、サーバーサイドもフロントも自分1人で出来ることによって、システム全体がイメージしやすいですし、様々なところで知識が生きてきます。
最近、Twitterを見ていると、未経験の人がシステムエンジニアになりたいと勉強している人が多いのですが、HTMLやCSSを勉強している人が目立ちます。
僕的には、HTMLやCSSなど、フロントのプログラミング言語ではなく、Javaなどサーバーサイドのプログラミング言語から勉強するほうが良いんじゃないかなと感じてます。
理由はここまで述べてきた通りです。
実現したいものをプログラムで表現する時、サーバーサイドのロジックを組み立てる力というのが生きてきます。
ものづくりの楽しさを感じて、プログラミングを学ぶ
エンジニアを続けてきて、プログラミングを通してものづくりをすることは、やっぱり楽しいなと思います。
プラモデルを組み立てたこと、パズルを完成させたこと、シミュレーションゲームをやり込んだこと、今までの様々な経験がプログラミングに似ているような感覚です。
こういう、ものづくりの楽しさがプログラミングの醍醐味だと思いますので、これからプログラミングを学ぶ人には、楽しく学んで欲しいなと思います。
オススメはJavaなので、ぜひ。
この記事が気に入ったらサポートをしてみませんか?