paiza times

paizaがお届けする、テック・キャリア・マネジメント領域における「今必要な情報」を届けるWebメディア

logo

paizaがお届けする、テック・キャリア・マネジメント領域の「今必要な情報」を届けるWebメディア

情報系なのにコードを書けなかったSEがプログラミングを学び直した話

f:id:paiza:20170502110634j:plain
Photo by University of Minnesota Duluth
f:id:paiza:20180910132940p:plainこんにちは。倉内です。

先日弊社の編集担当が、「プログラミング未経験から学習始めたら結構向いてたみたいでスキルチェックでAランク取ったよ」という記事を書きました。

文系出身おじさんがプログラミング未経験からGASおじさんになるまで - paiza開発日誌

私はその人とはいろんな意味で正反対で、中学生のときに初めて買ってもらったパソコンでWebサイトの作成・公開をしてみて面白いなと思い、高校時代にはIT業界に行きたいと思って理系を選択して、大学では工学部情報学科に進みました。

しかし、大学の授業で「自分はあんまりプログラミングには向いてなさそうだから、これだけで生きてくのは厳しいかもしれないな…」と気づいて、「じゃあ技術とそれ以外の合わせ技でいこう」と考えて大手のSIerでSEになりました。

結局SEになってから業務でコードを書くことはなく、何年も経つと気づいたらプログラミングが全然できないSEになってしまってました。

今回はそんな自分がもう一度プログラミングと向き合って、スキルチェックでBランクを取得するまでにやったことや、学習してみてよかったことなどを書こうと思います。

ちなみにスキルチェックについて詳しくはこちら

paizaのスキルチェック
 

簡単な経歴

大学(工学部情報学科)→メーカー系のSIer→paiza(ギノ)

そもそも向いてないかもって大学で分かったのになぜIT業界へ行ったのかということに少し触れておきます。

まずは大学の専攻を生かしたいって気持ちは前提としてあって、もう1つはITって今後伸びてくだろうし、何より単純に面白い・好きだなっていう気持ちを捨てきれなかったからです。こういうことを考えていたのは10年くらい前の話なので、この10年のIT技術・業界の成長は言わずもがなですよね。

ただそこで無理やり「技術1本で食っていけるように頑張る」って思わなかったのは、大学の同級生に「生まれながらの凄腕エンジニア」みたいな人がいて、これは勝てないなってことに気づいたからです。

情報系の学科を出た方には分かっていただけると思うのですが…別に授業についていけないとかではなく、同じ授業を受けても(もしくは受けなくても)用意された演習課題の基礎・応用・発展をスラスラっと解いてしまう人というのは一定数いて、そういう人を見てきたからこそ、これを仕事にするのは大変だぞという思いがありました。(逆にそっち側だった方は、基礎演習につまずく人を不思議に思ったことはないですか?)

当たり前と言えばそうなんですが、情報学科に入った全員がプログラミング適性があるかっていうとそうじゃないです。なのでIT業界で自分ができることや強みを生かせるのってどういう分野かなぁってのは考えたりしてました。

私が新卒で入ったのはいわゆる「文系・理系関係なく大歓迎!」のSIerです。そうは言っても情報系を出ていることが多少アドバンテージになるのではと思っていましたが、入社後に書いたコードは新人研修の演習課題(Java)のみ。配属先は職種はSEですがITコンサル的な業務に近く、仕事で使わないとなるとプログラミングのことは完全に忘れ去ってしまいました。

まあでもSEの仕事は性に合っていて、お客さんの業務は知れば知るほど面白いし、提案書作ったりプレゼンしたりも嫌いじゃないし…IT業界に身を置いてる上で自分の得意な部分で勝負できてたのかなと思います。

SEがプログラミングできる必要はあるのか?

みなさんがイメージするITエンジニア(フロントエンドエンジニアなど)と区別するため、ここでは私の前職でのSEとしての仕事を「主に上流工程をメインで担当する職種」と定義して話を進めます。

結論から言うとプログラミングができなくても仕事はこなせますし、技術的な部分は優秀な外注さんにお任せしてしまうというのもありだと思います。(今後もずっとそれが通用するのかは分かりませんが…)

ただ、プロジェクトの成功って見積もりの精度で決まると言ってもいいくらいなので、外注さんが出してきた工数の精査ができないとか、お客さんになんでこんなにかかるのと言われて説明できないとか…そんなんでいいのかなという疑問はありました。

なので開発業務を仕事のメインにしている人と同じ土俵で戦うわけではないけど、勉強し直してちゃんとコードを書けるようになりたいなとは常々思っていました。

それに加えて、当時一番尊敬していた先輩が折衝や調整、プレゼンなどが抜群にうまいコミュニケーション能力の高い人で社内外から評価が高かったのですが、技術的な勉強も欠かさずしていて「自分もやらなければ」と思ったっていうのもあります。

しかもその人も普段自分では手を動かさないので、外注さんと会話できるレベル・見積もり精査できるレベルかと思ったら、人手が足りなくてやむを得ないときは自ら開発も担当してました。

業務知識が豊富なSEはたくさんいましたが、どういう技術を使えば実現できるとか、いろんな実現手段がある中でこっちがいいとかをお客さんに提案・説明できるSEってそんなに多くないんですよね。その中でコードも書けるとなるとかなりレアでした。年単位でやる公共系の大規模案件ばかりやっていたので、設計後は自分の手を離れてしまう(もちろん管理はするのですが)ことが多かったです。

今思えばさきほど挙げた先輩はコミュ力の強さが前面に出てた人でしたが、技術的な話もできるから外注さんからの信頼がずば抜けていて、お客さんから名指しで担当になってくれって言われるくらい重宝されていたんだと思います。

どうやって勉強したか

◆本で勉強するのはとことん向いてなかった

大学の授業や新人研修でもらったり買ったりしたテキストがたくさんあったんですが、ほとんど使ってなくて完全に積んでました。

強制的にやる環境を作ろうと思って「泊まり込みで3日間C#をひたすらやる研修」に申し込んでみたときもやっぱりテキスト学習(ほぼ自習)中心であまり身が入らず…。

結果的にはpaizaラーニングの動画で学習するスタイルが私にはとても合ってました。贔屓目なしにほんとに初めてプログラミング学習がちゃんと続きました。

とりあえず再生ボタン押せば声で説明してくれるので聞いちゃうし、知ってるところは飛ばして演習課題だけやるとかもできるし。演習課題は全部クリアしないと気が済まないたちというのもあって、分かったつもりで次へ行ってしまうってのも防げてよかったです。

そもそもブラウザで動画解説を聞きながら(見ながら)、あの面倒な環境構築作業もなしに同じ画面内でコードを書いて実行もできるって結構衝撃だったんですよね。本気で学生時代に出会いたかった…。


初めてのプログラミング授業はC言語でした。10年以上前の話ですが今はどうなってるかな…。
 

◆Cランク・Dランクの問題は情報系だったなら簡単にできる?

最初は本気で一つも解けなかった

担当してたシステムがC#で作られていて、コードを読む(眺める)のはほぼ毎日してたので「C#ならいけるやろ」と思って始めてみたんですが…まあビックリするくらい何も手が動かない。読むのと書くのは違うなーと改めて感じました。

確かに思い出したらDランク問題はいける

さすがに生まれて初めてのプログラミングっていうわけではなかったので、記憶を取り戻してきたらDランクの問題は大丈夫でした。

paizaは標準入力・出力必須なので、それを使いこなせれば四則演算と条件分岐で解けるDランク問題はすんなりクリアしました。

これなら別の言語でもやってみたいなって気持ちがあって、話題のPythonに手を出してみました。結果的に文字列や配列の扱いが圧倒的に楽なのでPythonを選んでよかったなと思っています。今はもっぱらPythonで解いています。

ちなみにpaizaラーニングで「Python入門編」のレッスン4まで見たら、Pythonが初めてでもDランク問題はいけます。特別編として「初めてのスキルチェック」講座もありますので合わせてチェックしてみてください。

Cランク問題は意外に難しい(のもある)

Cランクになるとやや問題文が複雑になります。自分の場合は仕様理解はそんなに難はなく、ちょっとややこしくても紙に書き出して整理するというやり方をしていたので特に問題はありませんでした。

でもそれをコードにするとなると別で、たとえば具体的な値ではいけるんですが、一般化(抽象化?)するのが苦手で「テストケース1と2は通るけど、それ以外駄目」となるときもありました。

でもCランクの問題は基本的にはDランクの問題を解くときに使った基礎知識の組み合わせなので、値の範囲(境界値や最大・最小値、0含む・含まないなど)に気をつけて、自分でテストケース考えてオンライン実行環境のPaiza.IO使ってテストするようにしてから正答率が上がりました。

◆Bランク問題との戦い

Bランク問題になると一気に難易度が上がった感じがします。まず問題文がC・Dランクとは桁違いに長くなりますし、出てくる変数や条件も増えます。コードを書き始めるまでの準備時間がしっかり必要になってきますね。

私の場合、解けるようになるまで4段階くらいあった気がします。

問題文は理解できるけどコードが浮かばない期

Bランク問題では問題文を紙に整理するのは必須で、それで何が言いたいかはなんとなく分かるのですが、最初はコードがまったく浮かばない状態でした。「Cランクとは格が違うぜ……」という気持ちになりました。

惜しいところまでいけてる気がするけど結局解けない期

本問題を無駄に消費するのが嫌だったので、プログラミングゲーム(POH)練習問題を解くようにしていました。

いくつか挑戦しているうちにある程度書けるようにはなるのですが、どうやって実装したらいいか分からない部分もあって一番もどかしい時期でした。

このころ、なんて調べたらやりたいと思っていることのヒントを得られるのか分からず、コードを書くにあたって自分の検索する力の低さを思い知りました。

解けるけど時間オーバー期

そんなこんなしつつ数をこなすと、時間はかなりかかりますが80~100点を取れるコードが書けるようになってきました。

諦めの悪い性格のためムキになって、金曜夜から解き始めて朝までぶっ続けでやったこともありました(平均回答時間40分くらいの問題なのに…)。でも解けたときのやってやったぞ感は半端ないです。

(余談)過去のゲームイベントや練習問題の解答コード・解説を見る

自分で書いただけだとものすごく冗長なコードで、実行速度も考慮できていないので、解答コードと解説が公開されている問題を解いて答え合わせするようにしました。

ここでは最新のゲームイベントの全問題の解答コードを掲載している記事と、参考にAランク問題の解答コード・解説を掲載している記事も紹介しておきます。

paiza.hatenablog.com

paiza.hatenablog.com

また、一部練習問題の解答コードはpaizaラーニングの公式Twitterアカウントのツイートにリンクがあります。解説動画はYouTubeにあります。

www.youtube.com

この学習法は結構よくて「こんな解き方ができるのか…!」という発見とともに、これまで分からない・解けないところが理解でき、あとで別の問題を解くときに「あ、これはあのやり方でできるのでは?」とひらめくことができるようになりました。

なんとかBランク取得

そしてついにBランク問題を時間内に解け(100点でした!)Bランクを取得することができました。

私はあんまりパズルっぽいのや図形の問題は得意ではなかったので、それを避けつつ正解率が高めでかつ平均回答時間が短いのを狙って解きました。

途中Bランクへのモチベーションが落ちてた時期もあり、学習し始めてから数ヶ月は経ってしまいましたが、落ちている間も一応C・Dランクの問題は頻繁に解くようにしていたのもよかったのかなと思います。

◆基本的にはスキルチェック問題を解きまくる

前述のとおり、本などで勉強して身につけてから実践するっていうのが苦手で、実際の問題を見て以下を繰り返してました。

こういう処理書きたい → 書き方分からんから調べよう → 書いてみる ↔ うまくいかなかったら改良する

開発が業務のメインのエンジニアだとコードの書き方の作法や、書籍から学ぶべきことはあると思うので、このやり方ばっかりでもよくないんでしょうけど自分は「とにかくプログラミング学習を続けてコードを書けないSEから脱出する」のが目的だったんでひとまずはいいかなと思います。

◆自作アプリを作ろうとしてみる

結局完成はさせられてないんですが、コードを少し書けるようになると何か作りたいなと思うようになりました。

「今はサーバを自分で立てるよりAWSかGCPあたりを使うのかな?」と思って調べてちょっと触ってみたり、「Excelで管理してるソシャゲごとの課金額集計をスマホアプリでできないかな…今月使いすぎやぞとアラートも出したい」と思って作りかけたりしました。

今って本当に学ぼうと思えば無料~少額でなんでもできちゃって、技術者としてプロを目指すとなるとまた別の話にはなりますが、プログラミングを始めるハードルとちょっとなんか作ってみるハードルはすごく下がっているなと実感しました。

paizaラーニングにもWebアプリケーション開発の講座があります。スキルチェック問題を解くのも楽しいのですが、もう少し実践的なところ(実務的なところ)を身につけるにはこういうのをやってみるといいですね。

◆学習時間の確保について

プログラミング学習は帰宅後(毎日ではない)がメインで土日にも少しやってました。

ただ、目の前の業務に追われているとなかなか手を付けられないっていうのはあって…残業や休出がある中でも自分を律して学習できる人は尊敬します…。「自社開発のITエンジニアに転職するぞ!」と頑張っていた同期もいたので、そういう強い気持ちが必要だなと感じました。

特に業務で開発をする必要がないと、プログラミング学習が業務に直結している感じはしないので後回しになっちゃいますよね。

そういう中でも「せめて1チャプターだけ動画再生して寝よう…」とか「今日はDランク問題解いたらお前は偉いって言って寝よう…」とかそういうので細く継続していけたらなという気持ちでやってました。

まとめ

仕事でコードをまったく書かないSEがスキルチェックでBランクを取得するまでの話をしてきました。

今はまだBランクの問題も内容によっては解けないこともあるので、多分実力的にはCランクに毛が生えた程度です。まずはBランクを安定して解けるようになって、そのあとはAランクにも挑戦します。

私はもう転職してSEでもなくなってしまいましたが、プログラミングを改めてやってみると昔よりずっと情報量が多く変化のスピードも速くて、やっぱり開発業務を仕事にしている人はすごいな…と感じました。

自分はITエンジニアになって技術を極めるという道を選ぶのか、ベースは別にあって付加価値としてプログラミングを身につけてみるのか…実際に手を動かしてから判断しても遅くはありません。

皆さんも少しでも興味があるなら、ぜひプログラミング学習を始めてみてください。思った以上に楽しくて夢中になっちゃうかもしれません。


現在paizaラーニングの学習動画1,000本突破記念として、6/4(火)23:59までにスキルチェックを受験&結果をツイートしていただくと、抽選でAmazonギフト券が当たるキャンペーンを実施中です。

全ての問題がキャンペーン対象となっていますので、プログラミング初心者の方もぜひ挑戦してみてください!問題一覧と詳細はこちら

 
また、プログラミングを勉強したあとにエンジニアを目指そうと思っている方には「EN:TRY」がおすすめです。paizaが運営する、これからエンジニアを目指そうと考えている若い人のための転職サービスで、開発の実務経験が少ない人でも応募できる若手チャレンジ求人を中心に掲載しています。上で紹介しているプログラミングスキルチェックの獲得ランクしだいで、書類選考なしで複数の会社へ応募ができますので、ランクが取れたらぜひのぞいてみてください!

“EN:TRY"





paizaラーニング」では、未経験者でもブラウザさえあれば、今すぐプログラミングの基礎が動画で学べるレッスンを多数公開しております。

詳しくはこちら

paizaラーニング

そしてpaizaでは、Webサービス開発企業などで求められるコーディング力や、テストケースを想定する力などが問われるプログラミングスキルチェック問題も提供しています。

スキルチェックに挑戦した人は、その結果によってS・A・B・C・D・Eの6段階のランクを取得できます。必要なスキルランクを取得すれば、書類選考なしで企業の求人に応募することも可能です。「自分のプログラミングスキルを客観的に知りたい」「スキルを使って転職したい」という方は、ぜひチャレンジしてみてください。

詳しくはこちら

paizaのスキルチェック

paizaのおすすめコンテンツ

Webセキュリティ入門 ハッカー入門 Webセキュリティ講座がスタート!CVは内田真礼さん! Python✕AI 機械学習入門講座 CVに上坂すみれさんを起用!人気の機械学習講座を公開中!
paiza転職 paiza新卒 EN:TRY paizaラーニング 記事内に記載している情報は、記事公開時点でのものとなります。 Copyright Paiza, Inc, All rights reserved.