- プログラミング初心者でもソフトウェアエンジニアになれる?
- プログラミング初心者だと会社に入ってから大変?
ソフトウェアエンジニアに憧れている人の中には、そういった疑問を持っている方がいると思います。
私は現在ソフトウェアエンジニアとして働いて7年目になります。
ですが、会社に入る前はプログラミングができたかと言われると決してそんな事はなく、世間一般的に見たらほとんど書けないレベルでした。
- ポインタ?なにそれおいしいの?
- オブジェクト指向?クラス?あ!高校3年生の時は7組だったよ!
こんな感じでした。
こんな私でしたが、現在は会社では技術力のあるエンジニアとして評価されつつあります。
現在のポジションに至るまでの経緯を振り返ると、プログラミング初心者でもソフトウェアエンジニアとして働くために大切なことが4つあることに気づきました。
この記事では、私の経験を踏まえて、その大切な4つのことを紹介したいと思います。
ソフトウェアエンジニアとしての軌跡
タイトルで「プログラミング初心者」と書きましたが、初心者ってどの程度をイメージするかは人によって違いがあると思います。
その点を明確にするため、私がエンジニアとして働く以前の実力を紹介します。
大学生時代はプログラミングスキル皆無!
大学生時代は工学部の電気系に所属していました。
プログラミングスキル?そんなものあるはずありません。当時はプログラミングなんてやったこともありませんでした。
大切なのでもう1度。
プログラミングなんてやった事はありません。
そんな中、必修科目の1つにプログラミングの講義がありました。事前のテスト結果により3つのクラスに分けられたのですが、なぜか1番上のクラスに。イミワカラナイヨネ。
ではなぜ1番上のクラスだったのか?
タイピングがそこそこ早かったのです。
中学生や高校生の時、ozawa-ken※という格闘ゲーム風のタイピングゲームにはまっていたり、友達とYahooメッセンジャーを使って連絡をとっていたりしていました。
そのおかげで、周りの人たちと比べてタイピングだけは早かったです。
それだけの理由でプログラミング講義が1番上のクラスに振り分けられたのですが、そこからは大変は日々の始まりでした。
※懐かしいですね(笑)
調べたらまだありました。リンクを貼っておくので興味ある方は是非遊んでみてください。
Ozawa-ken - The Typing Game
大学生の時に初めてプログラミングを経験するも全く身につかず
プログラミング講義はC++を使った授業でした。
1番上のクラスに割り振られた人たちの大半は、プログラミングができる人たちだったため、講義はその人たちのレベルに合わせて進みました。
当然、初心者の私には理解できるはずがありません。お経のような意味がわからない何かを浴びせられていました。しかも、1コマ1時間半を2コマ続けて。もう軽いノイローゼでした。。。
かといって自分で勉強しようという気も起きませんでした。この頃はプログラミングの楽しさなど感じてなかったです。早く終わって遊びに行きたい!と思ってましたね。
ダメ押しで辛かったのは、プログラミングに関する課題を与えられ、それを提出する事で単位がもらえることでした。
さぁどうしよう・・・
先輩の過去レポートを名前だけ変えて提出しました!!(ドヤ顔
提出した時に、教授にあれこれ質問されましたが、
「え?あぁそうですね、そこは少し難しかったですね(白目)」
てな感じで乗り切りました。1ミリも理解していなかったですね。
という事で、学部生の時はプログラミングスキルは一切身についていません。
大学院に入ってPerlを使ってシミュレーション
大学院に進学した時に、Perlという言語を用いてシミュレーションを行うことになります。
Perlを使うことになった理由は、当時の研究室の先輩の研究テーマを引き継ぐ事になり、その研究のシミュレーションにPerlを用いていたからです。
「Perl?真珠のこと?食べられないじゃん・・・(×Pearl)」
この時にプログラミングというものを真面目に取り組み始めました。
使ったことも聞いたこともない言語だったので、当然最初からうまくできるはずもなく、わからないことだらけでした。
研究室の他のメンバーの中にPerlを使っている人はいなかったので、分からない事はインターネットで調べるか、通称「ラクダ本」と呼ばれるオライリー社の「初めてのPerl」を読んで勉強しました。
思い返すと、相談できる人もいなかったので寂しい思いもしました。
ただ、幸か不幸か、この当時にプログラミングに関してわからないことを自分で調べて勉強するというスタイルが身についたと思います。
たった2年程の時間でしたが、プログラミングって楽しいなという感覚に目覚めたのはこの時期でした。
プログラミングを使うことで、自分のやりたいシミュレーションを自分の力で作り上げることができる、ということに楽しさを覚えました。
また、どうやったら自分のやりたいことが実現できるだろう?とロジックを考え、そのロジックを実現するためにどうやってソースコードを書いたら良いだろう?と考える過程も、数学の問題を解いているような、パズルを解いているような気分で面白いと感じていました。
この経験がきっかけで、ソフトウェアを作る仕事をしてみたいと思い、ソフトウェアエンジニアの道を歩み始めることになります。
会社に入ってからどうなったか?世の中そんなに甘くない・・・
学生時代に体験したプログラミングの楽しさとソフトウェアエンジニアへの憧れを抱き、会社に入社してソフトウェアエンジニアの道を目指し始めます。
入社後、再びC++を学ぶ技術研修の機会がありました。
これがまた不思議なことに、大学生の時にさっぱり理解できなかったC++が少し理解できるようになっていました。
大学院の時にPerlを学んできたことで、なんとなくプログラミングに対する毛嫌いがなくなっていたのか、はたまた自信がついていたのかもしれません。
ポインタ等のC++特有の難しさはまだ感じましたが、それでも前向きに取り組むことができました。
ソフトウェア開発の難しさを痛感する日々
研修が終わり、職場で開発を行うようになってからが本当の戦いでした。
職場に入ってからはC++とC#を使って開発を行うことになりました。ですが、残念ながら研修2ヶ月程度のスキルでは現場でまともに戦える事はありませんでした。
プロジェクトの中で開発を行うためにはスケジュールを立てる必要があります。ですが、自分がどれくらいの早さでソースコードが書けるかの実力値が分からないため、自分が立てたスケジュールはめちゃくちゃでした。
また、プログラミングスキルもままならないため、作るソフトは不具合だらけでした。不具合が出る事でスケジュールはどんどん遅れ、挽回するために残業時間が増える、そんな毎日でした。
もうね、ただただつらかったです。
かといって誰か助けてくれるわけもないので必死に足掻くしかありませんでした。
ただ、つらかったのですが、悔しかった気持ちが大きかったです。もっとうまくなりたい、周りに認めてもらいたい。そんな風に思っていました。
そんな悔しさが原動力となり、休みの日はプログラミングの勉強に時間を費やしていました。
専門書を買っては見よう見まねで自分でプログラミングをする、そんな生活を送っていました。
ソフトウェアエンジニアとして会社から評価される立場に
現場でもまれ、休みの日ももがくような生活を1年ぐらい続けると、不思議なことにプログラミングができるようになってきます。
以前は何かをプログラミングしようとしても、分からないことの方が多くて調べている時間のほうが多かったです。
これがだんだんと調べる時間を要する事なくできるようになってきました。
感覚としては、日本語で自分の気持ちを文章で表現するような感じです。頭で考えなくでも自然とできる感覚です。半分うたた寝しながらでも書けるようになっていました。もはや病気。
この意識しなくても書けるようになってくる事がエンジニアとしては非常にプラスに働きます。
ソースコードがすらすらと書けるようになると、クラスの作り方やデザインパターンによる保守性の向上、さらには拡張性に優れた全体構造などを考える余裕が生まれてきます。より良いコードの書き方をどんどん追い求め、ソフトウェアエンジニアのスキルが加速度的に向上します。
こうなってくるとソフト開発をするのが非常に楽しいですね。
やはりできないことをもがくより、できることを生かして開発するのはメンタル面で健康的です。
こうした成長や開発実績の積み重ねがあり、会社からも評価されるようになってきています。
プログラミング初心者でもソフトウェアエンジニアとして働くために大切な4つのこと
大学生時代にプログラミング初心者だった私でも、会社から評価されるソフトウェアエンジニアへと成長することができました。
このことから、プログラミング初心者でも一人前のソフトウェアエンジニアに成長していけることがわかると思います。
では、プログラミング初心者を抜け出し、評価されるエンジニアへと成長するためには何が大切だったのでしょうか?
振り返ってみた時、ソフトウェアエンジニアとして成長するためには大切なことが4つあると感じています。
プログラミングが好きであること
やはりプログラミングが好きであることは大切です。というより、好きという気持ちがないと、はっきり言ってソフトウェアエンジニアとして成長するのは無理だと思います。
学生の時にプログラミングがそれほど好きでなかった時は講義の時間が苦痛に感じていました。結果としてプログラミングスキルは雀の涙ほどしか身についていません。
一方で、大学院生時代はプログラミングを楽しんでいました。わからないことを調べることに苦痛を感じることもなく、あっという間に時間が過ぎていく感覚でした。
この気持ちの差がエンジニアの成長を考えた時、非常に大きい差となります。
毎日会社で8時間、週5日同じようにプログラミングをします。好きじゃなければ会社に来るのですら嫌になると思いますよ。
私はソフトウェアエンジニアという職業で仕事をしていますが、今でも遊び感覚を持ちながら仕事をしています。ゲーム感覚というかパズルを解いているというのか、とにかく楽しんでいます。
エンジニアを目指すのであれば、自分なりで良いんです、プログラミングの楽しさを是非見つけてください。
上手くなりたい、他人に負けたくない気持ち
エンジニアは技術職なので、技術力がそのままその人の評価に直結します。
技術者である以上、周りのエンジニアはチームメンバでありつつライバルでもあります。エンジニアとして技術力を高め、周りの人たちとの競争に勝っていかなければなりません。
そのためには、もっと技術力のある人になりたいと思う気持ち、上手くなりたいと思う向上心があるかないか。これに尽きます。
では、上手くなるためにはどうするか?
練習するしかありません。練習こそが成長するための最短の道です。
プログラミングが上手くなりたいと毎晩祈りながら寝て、起きたらできるようになっている!なんて事はありません。それはよくある二度寝で見る夢です。
上司に上手くなれ!と言われる事はあっても、努力せずに技術が身につく事はありません。
お互い刺激となる仲間を作る
上手くなりたければ練習しろ!とは言われても、人間一人で努力し続けるのは難しいことがあると思います。人間どうしても楽な道に流れがちですからね。
そんな時、同期や友人の存在が大きな役目を果たしてくれます。
普段チーム開発をするときは仲良く楽しく開発をしましょう。ただ、心の中でこいつらには負けたくないと静かなる闘志を燃やします。
プログラミングが好きでもっとうまくなりたいという思いと、周りに負けたくないとう悔しさがかけ合わさると、成長のスピードは格段に早くなります。
私も同期の存在に恵まれたおかげで、エンジニアとして今の成長に繋がったと思います。
ロジカルに物事を考える
芸術家に多いアイデアや発想を大切にする左脳で物事を考えること、研究者に多い仮定や原因をロジカルに分析する右脳で考えること、人によって得意不得意があります。
では、プログラミングを行うソフトウェアエンジニアにおいて、どちらの思考が大切でしょう?
私は右脳派です。ロジカルに物事を考えることを大切にしています。
ソフトウェア開発をする際、どうやったら保守性に優れたコードを書くことができるか、処理速度が早いコードはどうやったら書けるか、といった課題と向き合うことが多々あります。
こういった課題の解決には、どこに問題があるかをひとつずつ分析して解決していく作業の積み重ねが必要です。ぱっとひらめいたアイデアなどの芸術的センスで作り上げるものではありません。残念ながらソフトウェア開発の分野では役に立たないです。
技術の進歩が著しいソフトウェア分野ですが、開発の本質的部分にはセオリーや鉄則があります。それらをいかにロジカルに積みあげていくことができるかがソフトウェアの品質を作り上げます。
普段からロジカルに物事を考えている人はソフトウェアエンジニアに向いていると私は思います。
まとめ
いかがでしたでしょうか。この記事で紹介したことをまとめます。
- プログラミング初心者でもソフトウェアエンジニアになれます!私も学生時代にプログラミングできませんでしたが今ではエンジニアとして働いています。
- プログラミング初心者がエンジニアとして成長するために大切なこと3つ
- プログラミングが好きであること
- 上手くなりたい、負けたくない気持ちを持つこと
- お互い刺激し合える同僚や仲間を作る
- ロジカルに物事を考えること
偉そうなことを言ってしまいましたが、私もまだまだエンジニアの端くれとして上を目指して努力していこうと思っています。みなさんとソフトウェア業界を是非盛り上げていけたらいいなと思います。
ソフトウェア開発を楽しむことをいつまでも忘れずに。素敵なエンジニアライフを!