春休みに1ヶ月半くらいプログラマーのアルバイトをしたのでその話を書きます。
勤務先、待遇とか
勤務先: キャロットソフトウェア株式会社 八王子開発室
www.carrotsoftware.co.jp
時給: 1200円
勤務時間: 5時間 (11:00 ~ 17:00, 12:00 ~ 13:00休み),週4日
勤務内容: C#、.NET Framework を使ったWebアプリケーションのプログラム作成、テスト
勤務内容は私が行ったときがそれをやっていたというだけで他にも色々やっているようです。
応募の話
1月に春休みにバイトしなきゃなーと思い「八王子 大学生 バイト プログラミング」とググったらこの会社が出てきたので、バイトネットかなにかからメールして応募しました。実務経験はなく(なんならバイトの経験もない)ポートフォリオとかも用意してないので経験不問ということと、自宅から通いやすいということで応募しました。また怪しい会社じゃないかホームページを見て一応確認しました。
数通人事の方とメールのやり取りをしたあと会社に面接に行きました。服装はわからなかったので調べまくりオフィスカジュアル的なのが良いと思い、ジャケットとスラックスをユニクロで買って、買ってから一度も履いてなかった革靴を履いて行きました。面接ではプログラミングの経験について主に聞かれ、最近は毎日競プロやってますという話と1年の頃WEBアプリ作ったりハッカソンに参加したりしてGit周りとかCRUD処理とかMVCモデルとかはまあまあ分かりますみたいなことを話しました。面接の相手の方が競プロは名前は知っているもののどんなものかはあまり知らないようで説明が上手くできず苦労しました。面接の後数日後採用のメールが来て働くことに決まりました。
お仕事の話
環境
職場は30人が入る教室くらいのサイズで7人前後が働いてるという感じで他の人と適度な距離があってよかったです。服装は上に書いた通りの感じで、社員の人はスーツでした。当然パソコンで作業をするわけなのですがパソコンはノートパソコンで若干古め(?)のWindowsでした。私はiphone,iPad,MacBookとなぜかApple信者なのでWindowsをほぼ触ったことがなくショートカットとかでかなり苦戦しました。後、フォントとか画面の微妙なデザインも全体的に気に入らなかったのでやっぱりパソコンはMacに限るなと思いました。
お仕事
最初の2,3日はC#の基本から.NET Framework を使って簡単なアプリを作る本を渡されそれで勉強しました。C#自体はJavaとかC++みたいな感じですんなり入れて、クラスとかの話は大学の授業の復習になってよかったです。勉強してるだけの日もお給料がもらえました。その後は実際にアプリケーションの機能の実装に移ったのですが、プロジェクトに新しい要素を追加するというので、そもそものプロジェクトが何をやっているかとか何をしたらいいか理解するのに数日かかり大変でした。最初は画面周りの作成を任されレイアウトの作成とかボタンを押したら反応するようにとか、テキストボックスの入力を受け取れるようにしたりとかしました。既存のプロジェクトを参考にやるわけなのですが見ても最初はよくわからず大変だったものの、分かってくると嬉しかったです。
その次の期間はテストをやりました。テストはテスト項目があってそのとおり動いたり表示したりできるか確認することをしました。テストするのは間違えないようにやって結果とかをちゃんと確認すればいいので比較的かんたんでした。
最後の方は選択した項目を元に計算を行いそれを表形式にして印刷できるようにする機能の実装を行いました。クラスをいくつも作ったりデータベースとやり取りするためにSQLを埋め込んだり得られたデータを処理したりとかなり大変でした。クラスもインターフェースとか知識としてはあったものの実際に実装したことはなかったので勉強になりました。SQLは参考にできるものがあったものの、数十行にもなりなかなか大変で見たことない文もあって理解に時間がかかりました。大学のデータベースの授業をちゃんとやってたのが役立って良かったです。その後の処理の部分は参考にできるものがなかったりして困ったのですがそこは競プロで培った実装力でなんとかなりました(詳しくは競プロは役立ったのかの項で)。時間はかかってしまったのですが、結局機能の実装までたどりつけて良かったです。
良かったこと
バイト先で良かったこと
・上司の人とか周りの人が優しかった。怖い人とかいなかった。
・バイトの時間の自由度が高かったこと。
・大学生に対する理解があったこと。最初はできるだけ長期で働きたいと言っていたものの3年前期に授業の関係で続けるのが難しそうなことを伝えたらすんなりやめることができた。(ちゃんと辞める一ヶ月前には伝えた)
バイトしてよかったこと
・お金がもらえた。家で使うキーボードを買いました。
・コミュニケーション能力の多少の向上。メールをしなくてはならない場面があったのでたくさんググった。「承知しました」は分かったの意で目上の人に使うというのも知った。
・働くってどういうことなのかが知れた。新しい経験ができた。
・今までの長期休みよりは有意義に過ごせた気がする。
・メモを取るのって大事だなと気づいた。突然新しい知識とか知らないといけないことの雨が降ってきてそれをできるだけ理解し貯めておくにはメモを取るしかなさそう。
不満を持ったこと、上手く行かなかったこと
職場の不満
・windows。というか全体的にツールが使い慣れなかったのでしょうがないのだがストレスではあった。
・静かで人と人との距離もあり過ごしやすさはあったのだが、静か故に少し話しかけにくいというのはあった。
上手く行かなかったこと
・分からないことを分からないなりに上手く質問するということ。分からないことを人に聞くということがほぼないので、(というか分からない時は何がわからないのか分からないので聞きようがなく、逆に今何が分かっていないのかが分かれば調べたりして自分で解決できることが多いと思っている) 理解ができなかったり詰まったりした時にすぐに聞くことができず何が分かっていないのかをわかるようにしてから聞いたりしたので時間がかかってしまった。分からないことを分からないままに自分の理解を促進するための質問をするということが(そんなことできるのか知らないが)もう少しできれば効率的にできたと思う。
また、チャットでのコミュニケーションが多く、今質問のチャットを飛ばしていいものかと躊躇することも多かったので上手く判断ができればよかった。多分どんどん聞いたほうが良かったと後からは思う。
競プロは役に立ったのか
直接的に役立つことはあまりなかったものの、間接的にだったり部分的に役立つことはありました。伝家の宝刀✝二分探索✝を使って実装したりということもなく直接役立ったとはあまり感じなかったのですが、コードの理解とかでは間接的に役立ったのかなと思います。部分的にというのはデータを処理する過程で以下の問題のようなことを考える必要がある場面がありました。
問題
高橋くんはクラスのゴミ拾い活動の結果について送られてきたデータを指定の形式にして報告する仕事を頼まれましたが、当日、高橋くんが休んでしまったので高橋くんの代わりに仕事をするプログラムを作成してください。
送られてくるデータはグループ番号S、生徒名T、生徒Tが集めた可燃ゴミの数A、生徒Tが集めた不燃ゴミの数Bからなります。
出力するデータは送られてきたデータに加えてグループごとの集めたゴミの数、クラス全体で集めたゴミの数を種類ごとに報告する必要があります。
入力
入力は以下の形式で与えられます。
N
S1 T1 A1 B1
S2 T2 A2 B2
...
SN TN AN BN
1行目には整数N(1 <= N <= 10^4)が与えられます。
続くN行は送られてくるデータの内容でi(1 <= i <= N)行目には
グループ番号Si、生徒名Ti、生徒Tiが集めた可燃ゴミの数Ai、生徒Tiが集めた不燃ゴミの数Biが空白区切りで与えられます。
・Siは整数でグループ番号の昇順になっている(1 <= Si <=N かつ i>=2について Si-1 <= Siを満たす)。
つまり1 <= S0 <=Si <= SN <= Nを満たす。
・Tiはa~zの英小文字からなる文字列で(1<=(Tiの長さ)<= 100)を満たし,i≠jならばTi≠Tj。
・Ai,Biは整数で(0 <= Ai,Bi <= 10^3)を満たす。
出力
N+(グループの数)+1行出力せよ。ここで、グループの数とはグループ番号の集合の要素数のことである。
入力で与えられたデータを1行ずつ出力し、あるグループ番号Sxを持つデータをすべて出力したら、その次の行にSxとそのグループに属する生徒が集めた可燃ゴミの合計数と不燃ゴミの合計数を空白区切りで1行出力せよ。
また、入力で与えられたデータN個と、グループごとの合計を全て出力したらN+(グループの数)+1行目に Total という文字列と、クラスのN人全員が集めた可燃ごみの合計数と不燃ゴミの合計数を空白区切りで出力せよ。(入出力例1を参照のこと)
入力例1
5
1 suzuki 0 3
1 tanaka 10 2
2 yamamoto 31 27
2 sato 8 123
4 kato 19 0
出力例1
1 suzuki 0 3
1 tanaka 10 2
1 10 5
2 yamamoto 31 27
2 sato 8 123
2 39 150
4 kato 19 0
4 19 0
Total 68 155
----------------------------------------------
1番目のグループは可燃ゴミを0+10=10個、不燃ゴミを3+2=5個集めたので、3行目にグループ番号の1と可燃ゴミの10と不燃ゴミの5を出力します。
2番目のグループは可燃ゴミを31+8=39個、不燃ゴミを27+123個集めたので6行目にグループ番号の2と可燃ゴミを39と不燃ゴミの150を出力します。
3番目のグループは一人しかおらず、8行目にグループ番号の4と可燃ゴミの19、不燃ゴミの0を出力します。
ここで、N=5行のデータと、グループの合計3行を出力し終えたので、最後に5+3+1=9行目に Total と全員が集めた可燃ゴミの合計10+39+19=68と不燃ゴミの合計5+150+0=155を出力します。
入力例2
1
1 abcdefghijklmnopqrstuvwxyz 0 0
出力例2
1 abcdefghijklmnopqrstuvwxyz 0 0
1 abcdefghijklmnopqrstuvwxyz 0 0
Total 0 0
----------------------------------------------
データが1行しかないときもグループの合計と全体の合計を出力することに注意してください。
(問題終わり)
設定は適当です。問題自体はABCのB問題くらいでしょうか?(作問したことないので日本語的な曖昧さとか不十分な点があったらごめんなさい)
こういった問題に落とし込むことができれば後はやるだけなのですが要件から何が必要なのか見抜くという点と、なれていないとこのような問題もサクッとはできないかも知れないので基本的な実装力という点で競プロが役に立ったかなと思います。
終わりに
初めてのバイトとしてはとても良い経験だったと思います。ただ感想として大きかったのは働くって大変なんだなということで、週20時間程度でも結構疲れてしまったため将来がとても不安になりました。また何かしらアルバイトに挑戦しようかと思います。
読んでくださりありがとうございました。