未経験プログラマーの雑記

元個別指導塾運営者、現プログラマーによるブログです。教育や自身の学びについて発信していきます。

プログラマーとして働く際に大事な3つのこと(実体験)

前回の記事では、「プログラミングの基本である戻り値や関数」について解説していきました。

bottea.hatenablog.com

 

今回は、新人プログラマー向けのアドバイスを3つ、理由を交えてお伝えしていきます。

以前の記事で、「実務未経験でもプログラマーになったら製造工程に携わるべき」ということをお伝えしました。

 

bottea.hatenablog.com

 

 

しかし、これは結構ショック療法というか、ハイリスクハイリターンであることも事実なので、そのリスクを出来るだけ減らすためにも、今回のアドバイスを参考にしていただければ幸いです。

(SESで働く人前提で書いていますが、新人プログラマーの方にはほぼ当てはまる内容かと思います。)

 

  1. まず質問しやすい、かつ分かりやすく教えてくれる先輩社員を見つける

実務経験が浅いと、間違いなく最初は分からないことだらけです。プログラミングの知識だけでなく、仕事で使うツールの使い方や、そのプロジェクト内のルールなど、様々な知らないことを吸収していく必要があります。

その時に、質問しにくい相手に何度も質問するのはお互いストレスです。また、プログラミングの知識が豊富な人が、必ずしも初心者に対して上手に教えられる人であるとも限りません。教えている本人は分かりやすく教えているつもりでも、聞いている側にとってはわかりづらい、ということはものすごく多いです。(賢い人が良い先生になれるかどうかは別、ということですね)

でも聞いている側としては、分かりづらいからと言って何度も繰り返し同じ質問をするのは気が引けてしましますよね。その結果、正しく理解出来ていないことは分かっていながら、何となく返事をしてしまい、結局問題を先延ばしにして後でよりまずい状況になってしまう、ということが起こります。

こうなると多くの場合、「なぜちゃんと質問しなかったのか」、「なぜ教えた通りにやらなかったのか」と責められます。責められるとより萎縮し、自信がなくなり、質問する勇気すら湧いてこなくなります。まさに負の連鎖です。

 

これを防ぐためにも、自分が質問しやすい、教え方の上手な先輩を見つけましょう。

 

  1. 何かあった時に相談出来る相手を作っておくこと

出向先によっては残業がものすごく多かったり、パワハラじみたことをしてくる上司がいたりすることもあると思います。

そんな時に、出向先、自社の人間でそのような状況を相談出来ないと、「自分に技術が無いからこの環境で我慢しないとしょうがないんだ」「この環境ですら頑張れないと自分が働ける場所なんか無いんだ」とどんどん自分の首を絞め、過剰なストレスを抱えることに繋がります。

 

出向先の人がどんな人なのか分からないし、相談した結果上司に報告されたり、評価を下げられたりするのでは、と心配するくらいなら、自社の人間で相談相手を見つけておきましょう。

もし自社の人間に相談した結果、親身に話を聞いてくれなかったり、「技術が無いあなたが悪い」と言われたりするようなら、転職を考えた方が良いかもしれません。

 

もちろん技術を身に着けないといけないのは当然ですが、それを差し引いても我慢しきれないような環境であることを真剣に相談し、その相談すら自己責任だと言ってくる会社は、おそらく何かあっても助けてくれません。

 

また、これは少し厳しい意見ですが、そこまでストレスを抱えながら、本気でやっても出来るようにならないことなら、別のことに挑戦した方が良いのかもしれません。向き不向きはありますし、どうしてもプログラミングを続けたいなら、趣味でやれば良いだけの話です。

 

仕事としてやらないとプログラミングスキルが身につかないということも無いと思うので、やりたいことなら好きなように、ストレス無く楽しみましょう。

 

  1. 一度聞いても分からないことは理解出来るまでとことん聞く

1つめのアドバイスに付け加えようかとも思ったのですが、大事なことなので分けておきました。

プログラマーとして働いている中で、他の業種では全く触れなかったような知識や概念に触れることがたくさんあります。当然分からないことがあった場合、先輩に質問しますが、一度説明されただけではどうしても理解出来ない部分が出てきます。

そんな時に一番やってはいけないことは、「何となく空気を読んで分かったフリをすること」です。一度理解したと言ってしまうと、もう一度同じことを質問しづらくなります。

説明されて少しでも分からないことがあれば、

「○○とは、~~ということで合っていますか?」

と確認するようにしておくと、相手にも自分の理解度を知ってもらうことが出来、間違っていれば指摘してもらえるのでオススメです。

「すみません、分からないのでもう一度教えて下さい」

と言ってしまうと、先輩は自分が何も理解していないのだと捉えるので、最初から全部説明されるか、「自分で調べろ」とさじを投げられます。

 

一度しっかり理解すれば、もし忘れてしまったとしても調べて理解出来るようになったり、途中まで説明されたらわかるようになります。

同じ質問を何度も繰り返してしまう人は、記憶力の問題ではなく、そもそもの理解度が低い可能性があります。理解していないことを記憶しておこうと思うと「丸暗記」のようになるので、記憶することがぐっと難しくなります。

 

終わりに

ここまで書いてきたことは、自分自身が意識してきたことに加え、プロジェクトの内容に付いてこられなかった元後輩の様子も参考にしました。

プログラマーになるにはプログラミングスキルが一番大事、と思っている方は多いと思いますし、自分もそう思っていました。もちろん大事なのですが、高いプログラミング能力を持っていたとしても、質問や相談出来る相手がいなかったり、分からないことをそのままにしてしまうようなタイプは苦労するのではないかと思います。

相手に正しく聞きたい内容を質問するためにも、自分が考えていることをしっかり言語化する習慣も付けておく必要があります。だからこそ、プログラマーとして働く際、コミュニケーション能力が必要と言われるのでしょうね。

 

最後まで読んでいただきありがとうございました。

今後もプログラミング学習やプログラマーとしての仕事、副業に関することなどを中心に記事を書いていきますので、良ければ読んでいただけると嬉しいです。

Twitterもやっていますので、気軽にフォロー・リプライください。質問などもしっかりお答えします。

 クボ@新人プログラマー (@natsumemix2525) on Twitter

戻り値?return?よくわからん。という人向けの解説【プログラミング初心者向け】

前回の記事では、「プログラミング未経験から独学でどれくらい勉強してプログラマーに転職できたか」という実体験を紹介していきました。

 

bottea.hatenablog.com

 

今回は、プログラミングの基本となる概念の一つ「戻り値」について、出来るだけわかりやすく解説していきます。解説に使用する言語はPythonですが、理解すべき考え方としては他のプログラミング言語とも変わらないはずです。

 

・なぜ戻り値について解説するか

僕が最初意味分からなかったからです。あと、Twitterでプログラミング初心者の方が「戻り値ってなんやねん・・・」と言われているのを結構見るので、「やっぱりわからないよね!」ってことでターゲットにしました。

 

Pythonの基礎知識

1変数の宣言はありません。

2コンソールに出力する際はprint()関数を使います。

3関数を定義する時には

def 関数名(引数):

              処理

という風に記述します。

 

4定義した関数を呼び出す時は

関数名(引数)

 

5戻り値を返す時はreturnを使います。

 

・関数について

簡単に言うと、「引数」という材料を渡すことで、決めておいた処理をやってくれるものです。プログラミング言語ごとにもともと設定されているものもありますが、自分でも作れます。

def 関数名(引数):

              処理

という風に記述します。

関数を一度作っておくと、同じ処理が必要になるたびに毎回処理を書かなくても良くなるので便利です。

 

・引数について

関数に渡す材料です。引数と言われると新しい言葉、概念のように感じる人もいると思いますが、実はみなさん普通に知っているはずです。

EXCELで言えばSUM関数やAVERAGE関数は使ったことがある人は多いのではないでしょうか。=SUM(A1:A10)のように書くと「A1からA10の値の合計」がセルに表示されますよね。()内のA1:A10が、まさに「引数」です。

=AVERAGE(1,5)と書くと、「1と5の平均」がセルに表示されます。この場合は1と5が引数です。

 

 

さて、事前知識の説明はここまでで、ここからは例を出しつつ戻り値の説明をしていきます。

実行結果も載せていますが、実際にエディタに自分で打ち込んだり、数値を変えたり、関数の内容を変えて試すと、より理解が深まると思います。

 

・サンプルコード1

sample1.py

def plus_one(a):

              b = a + 1

              return b

 

c = plus_one(5)

print(c)

 

実行結果

6

 

解説

最初の3行でplus_one()という関数を定義しています。aという引数を渡すことで、その値に1を足したものをbに代入し、そのbを戻り値として返す、という関数ですね。(非常に画期的で、素晴らしい関数ですよね!ね!!)

 

定義したplus_one()関数も、定義しただけでは意味がありません。5行目で、plus_one(5)とすることで引数として5を渡し、その結果をcに代入しています。

定義した関数でaになっている部分が5になるので、b=5+1となり、戻り値は6となります。その6がcに代入され、最後のprint()でコンソールに

6

と出力されます。

 

・サンプルコード2

sample2.py

def plus_one(a):

              b = a + 1

 

c = plus_one(5)

print(c)

 

実行結果

None

 

解説

先程のサンプルコード1と違い、3行目にreturnがありません。つまりこのplus_one()関数は、「足し算するけど、結果は何も返さないよ」という関数になっています。

(「宿題やったけど家に忘れてきました」って言ってる学生と同じです。先生としてはちょっと対応に困るやつです。)

plus_one(5)として引数を渡したものの、結果は何も返ってこないので、cには6ではなくNoneが入り、実行結果がNoneになります。

 

・サンプルコード3

sample3.py

def plus_one(a):

              return a

              b = a + 1

              return b

 

c = plus_one(5)

print(c)

 

実行結果

5

 

解説

サンプルコード1と違い、2行目にもreturnがあります。あまりこれをミスでやる人はいないと思いますが、挙動を一応説明しておくと、関数内の最初の「return a」の時点で処理が終わるので、「return b」は実行されず、結果として引数で渡した5がそのまま返ってくることになります。

ミスでこれをやる人はいないと思いますが、関数を定義する時や、人が作ったプログラムの動作確認をする時、あえて途中でreturnを入れて、何が返ってくるか確認することはわりとあります。バグ発見や動作確認のためにreturnを使って変数の内容を逐一確認する手法はプログラミング初心者の方はぜひ覚えておくと良いと思います。

 

・サンプルコード4

sample4.py

def plus_one(a):

              b = a + 1

              print(b)

 

c = plus_one(5)

print(c)

 

実行結果

6

None

 

解説

サンプルコード1と違い、3行目がreturnではなくprint()関数になっていますね。この関数は、引数に1を足し、その結果を画面に出力し、戻り値としては返さない、ということです。

戻り値が無いので、cにはサンプルコード2同様Noneが入るので、関数の処理結果である6が画面に表示された後、cの中身であるNoneが表示される、という流れです。

 

・print()とreturnの違い

個人的にはこの2つの違いが長らく分かっていませんでした。おそらくProgateで基本的なコードしか書かなかったからだと思いますが、

この違い(使い分け)を示すために、あと2つサンプルコードをお見せします。

・サンプルコード5

sample5.py

def plus_one(a):

              b = a + 1

              return b

 

c = plus_one(5) + 2

print(c)

 

実行結果

8

 

・サンプルコード6

sample6.py

def plus_one(a):

              b = a + 1

              print(b)

 

c = plus_one(5) + 2

print(c)

 

実行結果

6

例外が発生しました: TypeError

unsupported operand type(s) for +: 'NoneType' and 'int'

 

解説

サンプルコード5では、サンプルコード1と全く同じ関数で、cはその関数の戻り値にさらに2を足し、画面に表示します。

サンプルコード6では、サンプルコード4と全く同じ関数で、cはその関数の戻り値にさらに2を足し、画面に表示するものですが、結果としてエラーになりました。

サンプルコード5は関数の戻り値がちゃんと数値の6として返ってくるため、その後2を足す、という風にその後の処理で使用することが出来ましたが、

サンプルコード6では関数の戻り値がNoneのため、関数内で計算した結果得られた6を、その後の処理で使うことが出来ません。戻り値はNoneなので、「Noneと数値を足し算する処理は出来ません」と怒られたわけです。

 

その関数内で得られた何らかの値を、その後の処理で使用する場合は戻り値として返してもらう必要がある、ということですね。

 

関数と戻り値のイメージ

個人的には、returnで戻り値を返している場合、関数全体を「一つの変数」としてイメージすると、簡単に感じるのではないかと思います。

c = plus_one(5) + 2

であれば、plus_one(5)が6という数値を設定された変数、と考えるわけです。

c -= 6 + 2

となるので、答えは8ですね。

 

終わりに

関数や引数、戻り値と、プログラミングの基本でありながら、躓きがちな内容について、僕なりにわかりやすく解説してみたつもりですが、いかがでしたでしょうか。

Pythonを使った書き方ではありますが、戻り値そのものの考え方や、「なぜ戻り値として返す必要があるのか」などは他の言語を学習されている方にも伝わったのではないかと思います。

ただ、理解しても自分で試してみないと定着しないので、この記事を読んだ方でまだ自分で試していない方は、ぜひこの後すぐに実際に関数を定義し、戻り値や関数の定義の仕方・使い方について確認してみてください。

 

最後まで読んでいただきありがとうございました。

今後もプログラミング学習やプログラマーとしての仕事、副業に関することなどを中心に記事を書いていきますので、良ければ読んでいただけると嬉しいです。

Twitterもやっていますので、気軽にフォロー・リプライください。質問などもしっかりお答えします。

 クボ@新人プログラマー (@natsumemix2525) on Twitter

未経験からプログラマーになった時のプログラミングレベル【実体験】

前回の記事では、「新人プログラマーがやってきた業務効率化の工夫」を紹介していきました。

 

bottea.hatenablog.com

 

今回は、プログラミング未経験の状態から、プログラマーに転職するに至るまで、どの程度勉強をして、どんなことが出来るようになっていたか、ということを紹介していきます。もちろん、就職する地域や条件などによっても転職の難易度は変わるので、「あくまで一個人の経験談」として参考にしていただければと思います。

 

簡単な自己紹介

新卒から塾会社で働き、諸々の事情で他の業種の仕事に就きたいと考え、ちょっと触ったことのあるVBAが面白かったこともあり、何となくプログラミングの勉強を始めたところ思いの外続き、運良く独学開始から半年でプログラマーに転職出来ました。今プログラマーになって大体9ヶ月くらいです。SESに入社し、現在のプロジェクトでは製造工程を担っています。

 

  1. どの程度勉強したか

期間としては半年ですが、もう少し詳細に書くと、うち2ヶ月間は前職で働きながら、後の4ヶ月間は転職活動をしながらの学習でした。

在職期間中は平日1時間以上3時間未満、休日長い時で4時間ほど、という状態でした。

独学で使用したコンテンツとしてはおなじみProgateとpaizaスキルチェックの2つです。

 

ただ、最初の2ヶ月間くらいでProgateにあったほとんどの言語をやり終え、「あ、これ以上やってもあんまり意味ないな」と感じ、それからの1ヶ月くらいは何をやって良いのかわからないままとりあえずProgateで復習したり、YoutubePythonのツールを解説を聞きつつ写経してみたり、大学のHPを模写しようとして断念したりと、かなり迷走していました(笑)

この時期がプログラミング学習で一番しんどかったですね。

 

最初に勉強した言語がPythonということもあり、(また、HTMLはデザインのセンスなどが無いため早々に諦め)主に独学時に取り組んでいた言語はPythonでした。

 

ただ、Pythonで何かを作ったということもほとんどなく、Youtubeでたまたま見かけた「英単語の小テストをテキスト形式で自動生成するツール」以外は何も完成させていません。

 

ProgateはPythonの講座をなにかにつけ復習していたように思いますが、つい最近までクラスとかインスタンスを理解出来ていなかったので、定着度は大したことなかったです。

Progateは結構やりこんでました ↓

f:id:bottea:20200525233519p:plain

Progateのやりこみ度

 

そんなこんなで何をすれば良いか分からなかった時にpaizaスキルチェックを見つけ、とりあえずBランクを目標に取り組んだのが独学3ヶ月目あたりだったと思います。paizaのスキルチェックを始めて1ヶ月ほどでBランクは達成し、それからも少しずつスキルチェックの問題をこなして、プログラムを書くことに慣れるよう努力しました。

f:id:bottea:20200525233908p:plain

paizaのランク

 

ここまでで書いたことが、僕自身が転職するまでに取り組んだ勉強内容と、プログラミングスキルを表すものです。本当に、全く大したこと無いです。

webページの模写でも何でも、自分なりに作ると決めたものをどんどんTwitterで発信してる人たちはみんなすごいなーと素直に尊敬しています。

 

  1. ポートフォリオ

上記の通り、Pythonで写経して作ったツール以外は何も作っていないので、ポートフォリオと呼べるようなものはありませんでした。

 

転職活動中、選考で落とされるたびに「やっぱりなにかしら作った方が良いんだろうな」と思いつつ、実行に移せませんでしたね。そもそも何か作りたいものが全く思い浮かびませんでした。

 

そのため、転職活動では前職での経験をとにかくアピールしつつ、プログラミングのレベルについてはpaizaでBランクです、ということを伝わるか分からないながらも面接で話したりしていました。

 

僕の転職活動時の提示条件が高すぎたこともあるのですが、ポートフォリオを作っていればもっと早く転職先が見つかっていたかもしれませんね。(30社以上落とされました)

 

終わりに

今回の記事は、Twitterでフォローしていただいている方から「こういう内容を聞いてみたい」ということでリクエストいただき、書かせていただきました。ありがとうございました。(出していいものか分からないので名前などは出しませんが)

 

ブログやTwitterで色々偉そうに語っているわけですが、本当に勉強の仕方も下手で、たまたま運良く今の会社に拾ってもらっただけの人間です。

ただ、それだけに拾ってくれた会社にはものすごく感謝していますし、今回の記事では書きませんが拾ってくれたこと以上の恩が現時点で山程あるので、他の会社なら拾わないような状態で転職活動を続けていて正解だったかもしれないと今では思っています。

 

もちろん自分のスキルをしっかり高め、アピールする材料をしっかり準備しておけば、僕のように博打みたいな転職活動をする必要はなくなるはずなので、僕のケースはむしろ反面教師にして、頑張っていただけると良いのではないかと思います。

 

最後まで読んでいただきありがとうございました。

今後もプログラミング学習やプログラマーとしての仕事、副業に関することなどを中心に記事を書いていきますので、良ければ読んでいただけると嬉しいです。

Twitterもやっていますので、気軽にフォロー・リプライください。質問などもしっかりお答えします。

 クボ@新人プログラマー (@natsumemix2525) on Twitter

 

新人プログラマーによる3つの業務効率アップ術

前回の記事では、「エンジニア、プログラマーになりたいならとりあえずなってみれば良い」、ということを中心に自分の意見を説明していきました。

 

bottea.hatenablog.com

 

今回は、新人プログラマーが自分の作業効率を上げるために行った工夫と、何がより効果的だったのか、について理由を交えて紹介していきたいと思います。

 

簡単に自己紹介

新卒から塾会社で働き、諸々の事情から別業種への転職を考え、半年間プログラミングを独学後、プログラマーに転職しました。この記事を書いている段階ではプログラマーになって9ヶ月ほど。業務では設計書からプログラムを書く製造の工程を中心に担っています。

 

1.EXCELマクロの活用

プログラマーになって、もちろん製造工程なのでプログラムを書いている時間が一番長いのですが、自分のタスク管理や日々の業務進捗報告などでよくEXCELを使っています。

 

プログラマーになってみてちょっと驚いたことなのですが、チームで開発するとなると一つのファイルに膨大なプログラムを書いていくのではなく、小さく小分けされたパーツを大量に作っていくようなイメージになるんですね。(もちろんひとつのパーツがめちゃくちゃ大きいこともあります)

この辺は、以前「チームで開発すること」についての記事を書きましたので、まだ読まれていない方はぜひ↓

 

bottea.hatenablog.com

 

そのため、Aというパーツを作っている時に、Bというパーツを急ぎで作らなければいけなくなったり、Bというパーツを作っている時にCというパーツのレビュー結果、少し修正が必要になったり…という風に、結構タスク管理が大変だなと思いました。

 

ただ、タスク管理をするにしても、全て手打ちで状況を入れていくのは大変だったので、必要最低限の情報を入力すれば後はマクロを実行するだけで補完し、その内容を別のマクロ一つで業務報告のメールにする、という風に、決まりきったルーティン部分をマクロに任せて自動化しました。

 

そうすることで、タスク管理のストレスが激減し、プログラムを考えることに専念する時間が増えた分、プログラミングのスキルも早く伸びたのではないかと思います。

 

他にも自動化するツールは色々作りましたが、ツールを作ることが習慣付いたことで、何か業務を行う際には「どの部分なら自動化出来るか」を考えるようになりました。

 

プロジェクト自体がそこまで忙しくなかったのもあると思いますが、EXCELマクロをしっかり活用し、初心者ながらプログラミングに集中する時間をしっかり作れたからこそ、入社してから残業時間を合計10時間未満に抑えられているのだと思います。

 

2.業務で使用するツールの使い方を勉強

EXCELマクロに比べてざっくりした書き方になっていますが…(笑)

例えば、プログラミングをする際にコードを書いていくエディタの機能ですね。僕の場合はサクラエディタを使っていたのですが、入力補完とマクロをしっかり活用することで、コーディングの効率をかなり上げることが出来ました。

 

僕の業務ではSQLを書くことが多いのですが、SQLはSELECT文、INSERT文などでそれぞれ書き方の型があるので、その型を呼び出せるようにマクロを活用し、テーブル名やカラム名が長ったらしいものは、入力補完で素早くミスなく書くことが出来るようになるなど、機能を調べて活用したからこそ出来るようになりました。

 

プログラミングの勉強となると、言語についての学習を思い浮かべる方がほとんどだと思いますが、僕のように本当に未経験からプログラマーになる人は、エディタに付いている便利な機能をしっかり勉強することも大事だと思います。道具の使い方も知らないのに、良い仕事なんて出来ないですよね。

 

エディタとEXCELについては、おそらくプログラマーはよく使うのではないかと思うので、これからプログラマーを目指す方は今一度、「エディタ 便利機能」「EXCEL 便利機能」などでググってみることをオススメします。思っている以上に色んな発見があって面白いです。

 

僕は業務時間外で仕事のためにプログラミングを勉強する時間はほぼ取ったことが無いのですが、エディタやEXCELの使い方についてはスマホで隙間時間を使ってよく調べていました。

 

 3.キーボード操作を覚える

僕の場合、マウスを使った操作だとどうしても目を使ってクリックする場所を探さないといけないのがネックだなと思っています。

 

目の移動が多くなるとその分気が散るような気がするので、出来るだけ無駄な目の動きをなくすためにも、キーボード操作はある程度身につけて、慣れておくことをおすすめします。

 

EXCELOutlookサクラエディタChromeなどのアプリケーションごとのキーボード操作に加え、Windowsそのもののキーボード操作(と言っても僕が使うのはウィンドウの切り替えくらい)もよく使う操作くらいは覚えておくと、かなり作業効率は上がると思います。

 

特にコーディングの際は設計書のファイルとエディタの画面を行ったり来たりするので、Alt+Tabキーでウィンドウの切り替えに慣れておくと楽です。何かと色んなファイルやアプリを起動していたりするので、マウス操作だと個人的に結構ストレスが掛かります。

 

終わりに

途中で書きましたが、製造工程であっても、プログラマーとして働く時はコーディング以外の部分で頭を使う業務も結構多いです。

 

僕の頭は大して優秀ではないので、色んなことを並行して行おうとするとすぐに限界が来ます。そうならないように、自分の記憶や能力には頼らず、既存の機能やマクロにまかせて、極力自分の頭は使わない工夫こそ大事なのではないかとこの9ヶ月ほどで学びました。

 

「頭と時間を使いたくないから、頭を使わなくても済む方法を頭と時間を使って考える」って、頭良いやつっぽい考えで気に入っています(笑)

 

EXCELマクロで使用するVBAも、サクラエディタのマクロで使用するJavaScriptも、僕の場合は本業ではほとんど使わないので、本来無くても良いスキルではあるのですが、もし今後もEXCELサクラエディタを使ったプロジェクトに配属されることになれば、同じようなことが出来ると思うとかなり気楽です。

 

効率化、自動化をすることで暇な時間を作り出し、その時間をさらにツールの勉強や作成に当てることでさらに効率化し…という循環は、今後どんなプロジェクトに行っても必ずやりたいなと思います。(絶対に残業したくないので)

 

最後まで読んでいただきありがとうございました。

今後もプログラミング学習やプログラマーとしての仕事、副業に関することなどを中心に記事を書いていきますので、良ければ読んでいただけると嬉しいです。

Twitterもやっていますので、気軽にフォロー・リプライください。質問などもしっかりお答えします。

 クボ@新人プログラマー (@natsumemix2525) on Twitter

「エンジニアは甘くないぞ!」という警鐘に対して思うこと

前回の記事では、プログラマーとして仕事をする際は製造の工程に携わるべき、ということを中心に紹介していきました。

bottea.hatenablog.com

 

今回は、Twitterで何度か見かけた、「他業種からエンジニアに転職する時はよく考えてからにしたほうが良い」という意見に対して、自分の考えを書いていこうと思います。

 

前回までのような具体的なアドバイスとは違い、考え方の話なので、絶対に僕が正しい、と言うつもりは無いですが、こういう考え方もあるよ、という意味で、お暇な方は読んでみてください。

 

まず少し自己紹介をしておくと、僕は学生時代にはプログラミングには全く触れておらず、社会人になってから半年プログラミングを独学して、プログラマーに転職することが出来ました。周囲にはプログラマーとして働いている知人もおらず、どんな仕事をしているのか、完全にネットで得た知識しか無い状態でした。そもそも塾業界で働いていたので別の業種の人との交流もなく、「塾での仕事以外何も知らない」と言っても過言ではありませんでした。

 

Twitterで見かける「他業種からエンジニアに転職するのは慎重にしたほうが良い」という方の意見としては、

・今の仕事に不満があるなら、エンジニアになってすべて解決するとは限らない

・エンジニアの仕事は思われているより楽じゃない。むしろきつい。

・エンジニアの仕事はプログラムを書くだけじゃなく、要件定義や保守・運用など、プログラムを書く以外の仕事もたくさんある

・高給取りになれるなどと言われているが、それはごく一部

などなどでしょうか。

 

1.やってみないと分からないことが多すぎる

今回僕の意見は主にこれだけで、「なってみないと分からないんだから、外野が口出ししなくて良いんじゃない?」ってことです。

 

そもそもプログラミングを独学したり、スクールに通ってコストを費やしてまで学んでる人って、ある程度の覚悟を持ってると思うんですね。

(さすがに全くプログラミングを学んでないのにエンジニアになりたいって言ってる人がいたら、僕も「舐めるな!」って言いたくなりますけど・・・)

 

その覚悟の理由は様々あると思います。現在の業種、職場への不満、待遇への不満、将来への不安などなど。

 

そういうものが積み重なって、「新しいことに挑戦する」という覚悟がある程度固まっている人に対して、「いやもうちょっと考えたほうが良いよ」って言うのは野暮じゃないかなと。

 

ただでさえ新しいことに挑戦し始めるのって勇気がいるのに、それ以上の負荷をかける必要がどこにあるんだろう、って思うんです。

 

また、その仕事が自分に合っているかどうかって、

・仕事内容

・仕事で関わる人がどんな人たちか

・仕事環境

・会社の風土

・業務への自分自身の興味関心の強さ

などなど、1つや2つではない様々な要素の集合で判断するものだと思うんですね。

 

これらすべてを転職前に正しく情報収集し、判断することなんてとても出来ませんし、エンジニアの業務内容について、文字だけで情報収集しても全然どんなことしてるかイメージが沸かない、という人も多いんじゃないかと思います。(実際僕もそうでした)

 

エンジニアに限らず、結局はやってみないとわからないと思うので、せっかく新しいことに挑戦しよう!と思った人は、その覚悟をよく知りもしない他人の言葉なんかで疑ったりせず、当たって砕けろ精神で突撃すれば良いんじゃないかなと思います。

 

ただ、強いて言うなら前回の記事でお伝えしたとおり、プログラマーとしての仕事は製造から携わることをオススメします。

 

2.もし合っていなかったとしても

実際にエンジニアになってみて、「あ、自分はこの仕事合わないな」と思ったら、その時にまた次の仕事を考えれば良いんです。

 

その際、プログラミングの能力が多少身についているなら、EXCELをよく使用する事務職などであれば、VBAを少し勉強して「プログラミングをやっているので、現在の業務の効率化が出来ます」とか、転職活動でいくらでもアピール出来るようになると思います。

 

プログラミングを学ぶことの大きなメリットはIT以外の他の業界でこそ重宝される点じゃないかなと思います。

 

プログラミング学習が近年注目されているとはいえ、IT以外の多くの会社ではVBAを使いこなせる人すら稀です。もっと言えばEXCELの関数をちゃんと理解している人すらどれだけいるのか怪しい。

 

もしエンジニアとして思うようなキャリアを歩めそうになければ、そのスキルを活かして他業種で頑張る、という選択肢もあるわけです。

 

プログラミングを勉強していました、と言うより、プログラマーとして働いていました、と言う方が、転職の時にも注目されやすいですしね。

 

そんなわけで、エンジニアとして続かなければプログラミングの習得に掛けた費用が無駄になる、とは全く思いませんし、リターンの可能性はIT業界以外でも十分あるなと思います。

 

終わりに

僕自身がそうでしたが、経験したことのない他業種、しかも専門性の高そうなプログラマーという仕事に転職するのは相当勇気が必要でした。

 

僕自身が置かれていた様々な状況によるプレッシャーのおかげでそれを実現し、今もプログラマーとして働くことが出来ていますが、本当にラッキーだったなと思いますし、転職して心から良かったと思っています。

 

ただ、全員が全員、僕のように「プログラマーに転職してよかった」と思える人ばかりじゃないことも想像出来ます。実際に、僕と同じプロジェクトで働いていた人が複数人、仕事が思うように出来ずに辞めていきました。

 

でもその結果も、挑戦してみたからこそなので、やる前から決めつけて、やらずに時間ばかりが経過してしまい、後になって「あの時やっていれば…」と思うのが一番もったいないし、無駄だと思うんですよね。

 

少なくとも、どこの誰か分からないような人間の言葉で自分の覚悟を曲げたら駄目です。絶対に後悔します。自分で考えて、自分で行動しましょう。

 

最後まで読んでいただきありがとうございました。

今後もプログラミング学習やプログラマーとしての仕事、副業に関することなどを中心に記事を書いていきますので、良ければ読んでいただけると嬉しいです。

Twitterもやっていますので、気軽にフォロー・リプライください。質問などもしっかりお答えします。

 クボ@新人プログラマー (@natsumemix2525) on Twitter

プログラマーになったら製造(開発)業務からやるべき理由(実体験)

前回の記事では、プログラマーとして就職して、チームで開発に携わる際に、どのようなことを感じたか、ということを中心に紹介していきました。

bottea.hatenablog.com

今回は、プログラマーとして働くなら、絶対に製造(開発)から関わるべき理由について、説明していきます。

 

まず少し自己紹介をしておくと、僕は学生時代にはプログラミングには全く触れておらず、社会人になってから半年プログラミングを独学して、プログラマーに転職することが出来ました。おそらくこうした経緯でプログラマーになると、大半はSESという形態の会社に入ることになるのですが、僕もそのSESという形態で働いています。

就職した会社とは別の会社に、技術者として派遣され、その派遣先で仕事をする、というイメージです。

 

このSESとしての働き方の場合、働く場所や業務内容は配属されるプロジェクトチームによって決まります。そのプロジェクトチームが、要件定義、製造(開発)、保守・運用など、あるモノを作る上でどの段階の業務を担っているのかで、スキルアップ出来るかどうかが大きく変わってくると思います。

 

おそらく未経験から要件定義などの重要かつ上流工程を任されることは無いので、配属される選択肢としては、製造、もしくは保守・運用になるのではないかと思います。

 

僕自身、この二択で自社の上司から話を受けていたのですが、「最初は製造とか難しそうだし、保守とかやりながら勉強した方が、安心かな」と思っていました。

結局配属されたのは最初から製造を任されるプロジェクトチームだったので、始まるまでの不安は半端じゃなかったのですが、断然製造から入った方が良かったです。以下がその理由です。

 

  1. 保守・運用はコードを書かない仕事が多い

プログラマーというと、コードをバリバリ書いて、「作る」仕事だと思っている方も多いと思います。僕もそう思っていました。

 

でも実際は、コードを書くのは「製造」段階で、他の業務は基本的にコードを書くのではないため、プログラムを書くスキルは当然身に付きにくいです。

 

保守・運用でもバグの修正などの対応をすれば、ソースコードを見ることもあるとは思いますが、既存のコードの一部を修正するのと、一からコードを書いていくのとでは身に付き方が全く違います。

 

僕と同じプロジェクトチームに配属された社員で、僕よりもプログラマーの歴が長い人がいたのですが、これまで保守・運用ばかりで、開発には携わったことが無いと言っていました。

 

プログラミング関連の資格は持っていると聞いていたので、基礎的なことはもちろん分かっているだろうと思っていたのですが、for文の意味から怪しかったほどでした。

 

プログラマーとして働けばプログラミングのスキルは当然高まるだろう」と思っている方は、「プログラマーとして、どんな業務に携わるかも重要」と覚えておいていただければと思います。

 

  1. 最初から出来るとは思われていない

未経験からプログラマーになった人が製造に入ったとしても、最初から難しい業務をその新人一人に任せるような人はおそらくいません。

 

僕が入った会社では新人研修のようなものも特になく、入社してすぐに業務が始まりました。しかし、業界が初めてということも事前に伝えていたため、「どんなツールを使うのか、どんな資料を見て、どのようにコードを書いているのか」など、最初の1週間でざっと説明してくれました。

 

また、最初に任されたタスクも、今だったら10分で終わるようなものを練習にと振ってもらい、先輩社員にわからないことは逐一確認しながら進めることが出来ました。Progateやpaizaで基礎的な文法を理解していたのですが、実際に設計書やコードを見てみてもわからないことだらけでした(笑)

 

初めて製造に携わる、ということを伝えていれば、もちろんプロジェクトの状況にはよりますが、先輩たちは親切に教えてくれるのではないかと思います。

 

  1. 先輩社員のノウハウをどんどん盗める

個人的にはこれがものすごく大きいです。製造をしていると、どうしても自分では解決出来ないことや、うまく書けたと思っても、「もっとこういう風に書くときれいにまとまる」といったようなことを、仕事をしながら学ぶことが出来ます。

 

製造の業務の中ではコードを書くコーディングが終わったら、他の社員にコードの確認をしてもらう「レビュー」という工程があります。このレビューの時に、プログラミングのプロから直接指摘してもらえるって、むしろお金払うべきなんじゃないかって気になりますよね(笑)

 

もちろん厳しいことを言われたり、細かいことを言われると「はあ!?」ってなることがありますが、厳しい人のレビューをクリア出来た時は、エラーが出ずに処理が完了した時と同じくらい達成感があります(笑)

 

  1. 製造の知識を使ってツールを作れるようになる

何かしらコードを書いて課題をクリアする流れを経験していくと、他の言語であってもある程度感覚が分かってきます。僕の場合、業務でEXCELを使用することが多かったので、VBAを少し自分で学んだ結果、日々の業務でやるべきちょっとした雑務をほぼ自動化出来たり、その知識を活かして副業で利益を得ることが出来るようにもなりました。

 

これも製造でたくさんコードを書いて、プログラミングの基本が身についたからこそ出来たことだと思います。

 

終わりに

ここまで製造の良い面をあげてきましたが、もちろん慣れないプログラミングを毎日がっつりやっていくことになるので、最初のうちは脳みそが腫れ上がってるんじゃないかってくらい頭が痛くなりました。

 

ただ、それだけ負荷が大きい分プログラマーとして働きだして3ヶ月もすれば先輩社員に質問する回数は1日1回とか、その程度まで減りました。最初の頃のように簡単なものじゃなくとも一人でこなせるようになっていったので、成長を実感出来る楽しさも相当味わうことが出来ました。

 

SESについて批判的な意見を見ることが多いですし、確かに悪い面もあるのだろうと思いますが、しっかり製造部分に携わり、先輩社員のノウハウを吸収することで、スキルを身に着け、実績を積み重ねることは出来るのではないかと思います。

 

だからこそ、「最初は保守・運用で…」と弱気になるのではなく、「大変そうだけど製造やりたいです!」と主張するのが良いと思います。

 

逆に、製造の業務にいつまで経っても慣れず、プログラミングのスキルも身につかない、というのであれば、おそらくその後のキャリアアップも難しいと思うので、別の業界を探す、という考え方が良いのではないかと思います。

 

もしIT業界で営業に転向するにしても、プログラミングの知識が無い営業はおそらくロクなことにはならないので…。

 

繰り返しになりますが、これからプログラマーを目指す方は「製造から携わることが大事」ということを覚えていただければ大丈夫です。

 

最後まで読んでいただきありがとうございました。

今後もプログラミング学習やプログラマーとしての仕事、副業に関することなどを中心に記事を書いていきますので、良ければ読んでいただけると嬉しいです。

Twitterもやっていますので、気軽にフォロー・リプライください。質問などもしっかりお答えします。

 クボ@新人プログラマー (@natsumemix2525) on Twitter

チームで開発する、ということ【プログラマーを目指す方へ】

プログラミングを勉強しはじめて1年3ヶ月、プログラマーになって9ヶ月ほどが経ったので、プロジェクトチームのメンバーになってプログラマーとして働く中で感じたことなどをまとめます。プログラミングを勉強していて、「実際プログラマーとして働くってどんな感じなんだろう?」と思われている方は、一例として参考にしていただければと思います。

 

1.チームメンバー内で分担してタスクをこなす

まず、当然ですがプログラマーの仕事にも、初心者でも出来る簡単なものから、ベテランじゃないと出来ないような難しいものまであります。

初心者にいきなり難しいものを振るようなことはおそらく無いですが、簡単なものでも最初は何もわからず、先輩に確認しつつやっていくことになると思います。

僕が入っているプロジェクトチームでは、ソフトウェアの開発を行っており、現在は製造と単体テストをメインでやっています。

設計も最近は少し任されるようになりつつありますが、基本は他の先輩社員が設計書を作成し、その設計書を見て僕が実際にコードを書く、というような流れになっています。

分担の方法としてはこのように、難易度による分担と、作業工程による分担の2種類がありますね。

 

作業ごとに納期が決められており、それをチーム内で分け合って、全員でこなしています。

個人としてではなく、チームとして作業を問題なく進められているかが僕のプロジェクトでは重視されているので、余裕がない人のフォローを積極的にするような流れが出来上がっています。

働きはじめてすぐに難しいタスクを任された時も、ありがたいことに先輩社員が22時頃まで残業して付き合ってくださったこともあり、ありがたかったですね・・・。

※それ以降、ほぼ残業をしたことはありません。

 

2.人が多ければ多いほど楽になるというわけではない

チームとして、複数人でプログラムを完成させていくイメージが、独学ではわかりにくいと思います。

例えば、Twitterアプリで例えると、ツイートを投稿する機能、ツイートを削除する機能、ツイートを表示する機能などなど、一つのアプリでもいろんな機能がありますよね。

そういう機能をアプリの部品として分担し、一つのアプリを作り上げていくイメージです。

一つひとつの部品ごとに、正しく作られているかをテストするのが単体テストですね。

もちろん部品が正しく作られていなければ単体テストで止まり、コードを修正して再度テストをして・・・の繰り返しになるので、

「確実に正しいコードを書ける人」と「正しくないコードを書きがちな人」だとタスクをこなすスピードが大きく変わってきます。

単純作業であれば、誰がやってもそこまで大きく作業スピードに変化が無いので人数を増やせばその分早く終わる、ということになりますが、そうならないのがプログラミングです。

結局どうにもならずに先輩社員に任せるにしても、どこからどこまでが正しいのかを確認して、どこから修正していけば良いかを確認する必要があるので、かなりロスに繋がります。

 

初心者のうちや、納期に多少余裕がある時ならこうなってもある程度許されますが、繰り返せばもちろん能力不足というレッテルが貼られ、自分に任されるタスクがどんどん減っていくことになると思います。

僕よりも後でプロジェクトに参加した社員が、3ヶ月経っても初歩的なタスクすら一人で正しくこなせず、結果としてプロジェクトを離れることになりました。

途中からその社員のフォローを僕が全部やっていたので、自分のタスクをこなしつつ、その社員の質問に答え、コードのレビュー(正しく書けているかの確認)をして、不備を指摘し、状況確認をして・・・というのは、なかなか大変でした。

オブラートに包まずに言えば、人数が減った今のほうが確実に楽に作業が進んでいます。

 

それだけ個々の能力も必要とされるので、初心者でもしっかり成長が求められる(じゃないと居場所がなくなる)、シビアな仕事だなと思います。

 

一刻も早く一人前になり、他のメンバーを助けられるようにならなければ、チームの中で必要性の低い人材(何かあった時に切られる対象)になってしまうのではないかと思います。

僕より後に入った2人の社員はどちらも切られているので、ただの予想ではなく事実に基づいた話です。

 

3.「何を作りたいか」は求められない

これは企業に入って、決められたものを開発する仕事に携わるなら、という場合です。もし自分でアイディアを持っており、それを作りたいという場合は、そういうアイディアを求められる会社に入らないと、「本当はこういうものが作りたいのに全然違う・・・」と、ギャップに悩むことになるかもしれません。

 

僕の場合は、何か作りたいものがあったわけではなく、実際の現場でプログラマーとして働いてみたいという気持ちだけだったので、そういう人にとっては良い環境だと思っています。(逆にアイディアを求められたところで、困っていたと思います)

ただ、実際にプログラマーとして開発に携わる中で得た知識を元に、「Webアプリを自分で作ってみたいな」という考えにもなりつつあるので、「とりあえずプログラムを書く経験」をすれば、僕のようなタイプでも少し先のビジョンや自分の興味関心が見えてくるかもしれないなと思います。

 

終わりに

とりあえず、色々なプロジェクトに当てはまりそうな内容を中心に書いてみました。

個人的には、シビアな仕事ではあるものの、だからこそ能力が付くまでは必死に頑張れますし、成長速度も独学の時に比べると段違いだなと思います。

また、プログラミングに長く触れている方々とコミュニケーションを取ることで、自分だけでやっていたら絶対に得られないような知識や考え方も得ることが出来ます。

半年の独学期間で得た知識の10倍以上の知識を実務の中で身につけることが出来たと思います。

 

実際にコードを書く経験もかなり積めたので、相当慣れることが出来ました。

なので、これからプログラマーを目指す方は、僕の経験談を読んでビビるんじゃなく、「大変かもしれないけど、その分成長して活躍出来る可能性もある!」と前向きに捉えてプログラミングの学習に取り組んでいただければ良いんじゃないかと思います。

 

プログラマーとしての仕事や、学習方法など、何か個人的に聞きたいことがありましたら、Twitterのリプライ等でお気軽にご質問ください。

最後まで読んでいただきありがとうございました。

 クボ@新人プログラマー (@natsumemix2525) on Twitter