2019年の振り返り

新年エントリと一緒に書こうか迷いましたが別々にして書くことにしました、2020年については年が明けてから書きます。

  • 何があったか
    初出場校枠でトラコン出ました。「ビリにならない」を目標に研究室メンバー5人チームで頑張りました。教授には報告できそうにない順位でした。
    大学も留年しかけましたが卒業できました。卒業後は内定も貰っていたので上京して一人暮らしを始めました。
    特にホームシックになることもなく週末にはブラブラ出かけて出先でコードをちびちび書いています。

  • 買ったもの

    • 生活必需品(服とか鍋とか)
    • switch
    • 分離型BTイヤホン
    • Pixel 3a
    • ラップトップ
    • モニター
    • PS4 Pro
    • 本いっぱい(読めてない)

いまいち書きたいことまとまらないので諸々は新年エントリに書きます

わからなくなってきた

エンジニアとして成長する、とは何だろうと思えてきた。

 

先日のことである。

 

以下、前置き(余談)。

会社の福利厚生の一貫として、社員の方々と飲みに行く機会が設けられている。管理職がいると話がしずらいだろう、という計らいでいわゆる平社員の一部で集まっていた。

いろんな話をしてきた。

現場、趣味、愚痴、前回の飲み会など、1年目として初参加なので他の現場の状況を聴くことが出来て嬉しかった。ランダムでメンバーが決まっていたというものの、なんやかんやで同じプロジェクトの方々が多かった気がする。

 

そのためもあってか、自分が今突っ込まれているプロジェクトについての話がとりわけ気になった。

N年目の方々(N>=10)が新人だった頃の話を聴く限りだと、当時の環境は劣悪のように思えた。よく辞めなかったな、と思うくらいに。

彼らは環境を良くしようと努力してきた。私を含む5年未満のメンバーがある程度やっていけるくらいに。(それでも今一つとおもえることがあるけれども)

しかし、最近は悪くなっているらしい。原因もわかっているらしく、諸悪の根源を打倒せんと血気盛んに盛り上がっていたのも印象深かった(もちろん酒の席での話ということが前提ではあるが)。

 

なんか、そんな話が出てきている時点で役員は現場の意見を汲み取れていない気がする。

彼らは上と下との摩擦が生じないよう、ギリギリのところで食い止めているのはこの話を聴く前から察することができたし、話も聞いていた。この人たちが居なくなったら俺も逃げるしか無いなーと思った。

 

思ったことここまで。これからが本題。

彼らの不満ももう一つあった。現場での教育についてである。

 

彼らは「現場都合の事象が多いせいで若手の成長を妨げている」

と言っていた。

 

しかし以前、会社の誰かが言っていた。

「様々な仕事を任されることがある。成し遂げることで成長につながる」と。

 

後者を聞いたときには確かにその通りだ、と思っていたが、現場で1ヶ月OJT(On the Job Training:職場で実務をさせることで行う従業員の職業教育のこと(Wikipedia))をしているとそれは「適応することとすり替えている」と思えてきた。

後者にバイアスをかければなるほど合点がいく。かけなければわからないが(かけても微妙かもしれない)。

 

私は「エンジニアとして成長する」ということは、既存のシステを学びつつ、常に技術的に新しい『何か』を追い求めていくことだと思っていた。

現場に配属してみると、実際に求められているのは「独自FWやバージョン管理など現場のエコシステムの理解とヒューマンスキル」と、思っていたこととは乖離しているように感じた。新しいものは何も求められていなかった。

 

以上は、どれが正しいのか、どれが間違っているのか。

おそらく、どれも正しい。ただ求められる割合が違うだけなのだろう。

 

そのお陰もあってか、人としてはある程度成長することが出来た気がする。まともになれたという意味で。しかし、技術的にはどうだろう。データ構造を見ても「何でこういう設計にしたんだろう」と思いながらコードを書いたりしている。そういう意味ではコードを読む力は少しついたかもしれない。

 

ハッキリ言うと内部での技術的な評価は正直どうでもよくて、同期や内部の人間での立ち位置から見るような相対的な評価ではなく、絶対的な評価基準が欲しかった。自分自身、何ができて何ができないかを知りたいということもある。

加えて、実務ではやらなくても知識としては欲しいものはたくさんある。なので私は現在応用情報の勉強している。

言語もJavaしかできない人間にはなりたくない(業務以外でJavaは書きたくない)ので趣味ではDartやKotlinを書いている。それが今どきのものなのかはわからないが。

 

思ったことを取り留めもなく文脈もメチャクチャで申し訳ない。

 

言いたいことを三行でまとめると

・エンジニアとして成長しているかわからない

・そもそも「エンジニアとして成長する」とは何かわからない

・エンジニア向いているのかわからない

 

 

 

何もわからない

就活の振り返りとこれから

なせこのタイミングなのか

卒業が確定し、他に書きたい内容ができたのと、TLで就活の話が出てきたのでなんとなく

なんか就活解禁日と重なってた

どこに行くのか

都内のSES企業に就職しました

いつから就活して、いつ決まったか

面接を初めて行ったのは去年の一月頃 内定を頂いたのは12月です

何社受けたのか

覚えてないですが、それなりの数行いました

就活はほぼ1年やってました。 就職から進学を考えたけど就職に戻った、ではなくずっと就職希望て1年やってました。 長引いた反省としては

  • 受け答えがきちんとできない

  • やりたいこと、志望動機が明確でない

の2つが挙げられます。

言い訳

受け答え

最初の面接から気づき始めました。話す相手はどの人なのか、ポートフォリオの説明にあたって、ある技術的な側面を説明するにあたってどこから説明すれば良いのか等、様々なことを考えながら話していたら着地点を見失う、ということが非常に多かったです。予め解答を暗記して取り組むことも考えましたが、緊張で内容が飛ぶ人なのでその手段は取らず、聞かれることは大体決まっているので解答を用意し、それに沿った理由をその場で話すようにしていました。しかし考えながら話すことがダメなのにその手段を取っても意味がないことに後から気づいたのでやめました。

志望動機

夏以降こうなりました。というのも、最初はモバイルエンジニアを志望していました。学生エンジニアの就業を支援しているいくつかのサービスを通じて参加していましたが、殆どは1次面接と書類選考で落とされました。僕は主にAndroidですが「iOSは?」と聞かれることが多々ありました。「MaciPhoneを(金銭的理由で)用意できない」と答えると「そっか...」と若干残念がるので、今思えば、別な言い方をすればよかったかなと思います(だからといってそれが原因で落とされたわけではありませんが)。 メンターからも「募集が少なくなったため志望を変えてみてはどうか」という提案を受け、面接の機会を設けていただきました。個人的にもモバイル一本で大丈夫だろうか、という気持ちもあったのでちょうどいいと思っていました。志望動機を考えた時、大学に入学した理由に『コンピュータの世界はどのようなものがあるのか、そのなかで自分が興味が向いたものに取り組む』、というのがあったので、原点に戻り、分野を絞らずに様々なものに触れる機会の多いところを探してました。もうこの時点でダメですね。

追い打ち

そんななかメンターからも弾切れ宣告をされ、メンター不在のまま別なサービスを使って就活を行っていました。されど内定はもらえず、大学院願書受付1週間前には両親から進学せよとの宣告を受けました。留年も考えましたが、先駆者である兄からのストップコールが追い風となり、留年を全力で拒まれるなど厳しい事態も発生しました。加えて、今までの志望業種を自白した後、業種を全否定されたり、(卒論、就活、単位習得等で)研究計画書が書けないでいると「面接のとき志望動機書けてるんだから研究内容くらい書けるよね?」と謎理論を展開させられたりと、夏休み中に内定がもらえなかった罰ゲームとしてマインドクラッシュを受け、気持ちが上を向かないときがしばらく続き、とても辛かったことを覚えています。

最後の手段として内定を頂いた会社に学校から紹介してもらいました。「分野を絞らずに様々なものに触れる機会の多いところ」という点では(業種的に)微妙ですが研修期間中にどこに行くかは自分の意志で決めたいです

就活まとめ・反省点

卒論もあり忙しいときもありましたが、ある程度時間を犠牲にしてでも真面目に面接対策や練習をするべきだったと思います。上手く話せないと自分でもわかっていながら対策を真面目にやらなかったツケとして時間と金が食われました。数をこなしていけばどうにかなるだろうと思っていましたが、その数も減っていくので対策は真面目にやったほうがよかったと今でも思います。 就活は長引くほど非常に厳しくなります。新卒採用が終わる頃に学校やメンターから面接を調整してもらうと「○○さんの紹介なので~」と枕詞が付いたり、始まったときから渋々やってあげているという態度を取られ、自己紹介の後2,3問質問したら打ち切られたりすることも多々ありました。

これから

業務関係の勉強ももちろんですが、モバイル開発も引き続き行います。むしろ今までのなかで一番燃えてきてます。 住まいも都内に決まり距離・金銭的制約がほぼゼロになったので、勉強会にも可能な限り参加していきたいと思います。 スタンスとしてはモバイルに注力しつつも一辺倒ではなく、バックエンドの知見も広げていき、プロトタイプの設計と構築をシュッとできるくらいにはなりたいです

以上、就活の振り返りを勢いのまま書き連ねましたが、これから就活をされる方の参考に少しでもなれればと思います

現代的なJavaを書こう

この記事はAizu Advent Calender 13日目の記事です。 12日の記事はこちら 

qiita.com

14日の記事は公開され次第追加します。

はじめに

入学してから授業でプログラミングを行う弊学生徒向けです。 弊学では2年前期くらいに授業がありますが、(記憶の限りでは)授業は1年次にやるC言語がある程度のベースになっていたと思います。今回は学校の授業で紹介された方法以外にこういう書き方もできるよ〜ということを紹介していきたいと思います。 環境は学内WSに合わせてJava8を想定して紹介していきます。授業で書くときにはチャレンジしてみてはどうでしょうか。

これだけは覚えよう

以下の2つは基本情報処理技術者試験の午後問にはよく目にするものですし、学校でも取り上げることは(僕が受けたなかでは)なかったので紹介させていただきます。 プログラミング言語の問題でJava以外の言語を選択するも思った以上に解けず、最終手段でJavaを選択したとしてもエスパー的な方法で解くのではなく、きちんと理解した上で解きましょう。

for-each(拡張for文)

awkPerlにもありますね。 配列の中身を順に出力するforループを例に取り上げます。

int[] number = {0,1,2,3,4};

for(int i=0;i<number;++i)
  System.out.println(number[i]);

こういった書き方もできますが、線形リストや配列の出力の順が問わない場合は以下の書き方が有用です。

int[] number = {0,1,2,3,4};

for(int value:number)
  System.out.println(value);

1.変数(value)にリスト(number)の中のある要素への参照を代入
2.処理を実行
3.リストの全要素を参照していない場合、1に戻る

といった手順で実行されます。これを行う目的としては

  • 可読性
  • 処理時間の短縮

があります。 特に処理時間についてはリストを使用していると顕著に表れます。

三項演算式

たまにCのサンプルにもあります。 結論から言うと

if(age<20) status="未成年";
else status="成年";

status = age<20 ? "未成年":"成年";

の結果は同じです。
(age<20)と、真の場合:の左辺未成年が代入され、 偽の場合成年が代入されます。

構文は以下のようになります。
(条件式)?(真式):(偽式)
三つの項を?:で結ぶため三項演算子と呼ばれています。

if(条件式1) 処理1
else if(条件式2) 処理2 
else 処理3 

といった場合には

条件式1?処理1  
:条件式2?処理2  
:処理3;  

のように書くことが可能です。

Java8から実装された機能

これから紹介するものはJava8でもメインで取り上げられた新機能(当時)です Java以外でも使用する機会は多いです

Lambda式

Thread threadExec =new Thread(new Runnable(){
    @Override
    public void run(){
        //do something
    }
});

というJavaって感じのThread処理があるとすると

Thread threadExec = new Thread(()->{
  //do someting
});

と簡略化できます

構文も

(引数)->{処理}

とシンプルなものになります
また、それに併せてjava.util.function以下に関数型インターフェースが追加されました
https://docs.oracle.com/javase/jp/8/docs/api/java/util/function/package-summary.html
関数型インターフェースは単一のメソッドをもつインターフェースです。lambdaを実装するには都合の良いものになりますね
また、特定の場合にはかなり省略することができるので具体例を出してみます
掛け算をするインターフェース

@FunctionalInterface
public inteface Multiplication{
  abstract public int culculate(int x,int y);
}

があるとすると,以前は

Multiplication kakezan = new Multiplication{
    @Override
    public int culculate(int x,int y){
      return x*y;
    }
}

これを置きかえると

Multiplication kakezan 
  = (int x,int y) -> {return x*y;};

引数が一つ、または引数の型が一致する場合、引数の型を省略できます

Multiplication kakezan = (x,y)->{return x*y;};

{}の中身が単一の場合は{}とreturnも省略できます

Muitplication kakezan = (x,y) -> x*y;

引数が一つの場合は括弧も省略できます

Stream

最後です
Collection に対する処理をパイプライン処理を行います

実行する流れは以下のようになります 1. CollectionからStreamを取得 2. 中間操作を欲しい結果が得られるまで実行 3. 終端操作を実行

どの処理が中間、終端なのかはJava Docを参照してみてください

Stream (Java Platform SE 8)

九九の結果が格納されたlistの中の5の倍数の合計を取得するとします

Mulitplication kakezan = (x,y)-> x*y;
ArrayList<Integer> list = new ArrayList<>();

for(int i=1;i<10;++i)
  for(int j=1;j<10;++j) 
    list.add(kakezan.culculate(i,j));

従来では

int count=0;
for(int n:list){
    if(n%5==0) ++count; 
}

ここでStreamを使用すると以下のようになります

long sum = list.stream()
               .filter(n-> n%5!=0)
               .count();

ここでは中間操作にfilter,終端操作にcountを使用しています。
Streamを使わない場合では5で割り切れる場合にカウントを行う
使う場合では5で割り切れる数のみを含むStreamを生成→合計を生成 と、使う場合では2つの処理に分かれていて、可読性や抽象度高いです

おわりに

いろんな方面から忌み嫌われたり 自分から恨みを買ったり(Oracle) しているJavaではありますが、オブジェクト指向を学ぶ上で一番取っ掛かりやすいものだと思います。RPELが導入されたり、実行までの煩雑さを解消したJShell,Java10だと型推論使えますし、使われている幅もまま拾いので決して馬鹿にはできない存在だということは認知していただきたいと思います。

業務以外では書かないけど

健忘録::ubuntu再インストール時にやること

アップデート失敗したり挙動がおかしくなって再インストールする度にやってる設定を毎回調べながらやるのも面倒になってきたのでまとめた自分用メモです

照度調整

こちらのサイトを参考にさせていただいています tkyma.hatenablog.jp

Dockを常に非表示

参考にさせていただいてます www.archlinux.site

必要に応じて追記していきます

twitterアカウント復活しました

簡単な経緯と報告

Twitterは13歳未満の利用を禁止しているとのことだったので、13歳はどうなのだろうかと、2005年生まれにして試してみたらロックされた

 

解除のためにはユーザの本名と本人確認のための公的機関が発行した身分証明書のコピーをアップロードする必要がある。アップロードしたコピーは解除と同時に削除されるとのことだったので問題なかったが、この本人確認の仕方がいまいち納得できなかったのと面倒だったので解除申請をするつもりはなかったが、いろいろと不都合が生じてきたので解除申請をすることにした

 

日付は覚えていないが解除までに2週間ほどかかった。申請を受理したというメールが送られてくるはずだったが送られてこなかった

 

登録年より後に生まれた設定にするとどうなるのか申請中ふと思ったが、恐らく年齢しか見ていないのでロックされると思う

逆求人に初めて行ってきた話

エンジニア志望の学生を支援している会社の逆求人に行ってきた
19卒最後、交通費支給されるというのと、周りが内定や最終面接まで行っているなか自分一人が1次落ちばっかりしていて焦りもあり、初めてではあるがものは試しと参加してきた

※この記事は帰りの新幹線のなかで書かれているが、「上野駅周辺でのんびりする予定が誤って乗車券で入場してしまったので仕方なく上野駅改札内で過ごそうとあちこち歩きまわるも飲食店が総じてまあまあな値段がするので結局N○w○aysで軽食買って待合室で待機していた」という状況のなかで書かれているのを了承していただきたい。
要するに心身共に疲れきっている※

 

参加の動機

以上に述べたのが主ではあるが、就活資金が底をついていたので一気にケリをつけようという理由もある。

(現在は奨学金振り込まれたので回復はした)

 

実際行ってみてどうだったかというと、期待していたような結果にはならなかったがいい経験にはなった。自分の目標や今までやってきたことを聞いて企業側はどのような評価をするのか、どこが良くてどこが悪かったのか、今後に活かせる内容があったので参加してよかった

1日の流れを順を追って振り返っていく

 

お昼前
イベントの説明と企業の紹介
最初はしっかりメモを取っていたが、緊張のストレスからか目眩がしていたので話がまともに聞けなかった。話の要点となる部分(企業理念、会社が何をやっているか等)
はなんとかメモを残した

 

お昼から夕方
企業との面談は25分の面談と5分の準備時間を8回、4,5回目の間に30分の休憩を挟んで行われた(最大8社との面談)。事前に主催のサイトに登録していたプロフィールを企業が読み、話をする相手を選んでその相手と話をする方式が取られていた。私は7社と面談した

 

1社目
話上手の30代半ばの人
「なるほど〜」「面白そうですね〜」と聞き上手な上に時間ギリギリまで話が絶えなかった(相手の話し方がうまかった)が、私の話していた内容がしっくりと来なかったのか、話し手にとって気持ちの良い返事しかして来なかったので「これ、社交辞令ってやつでは」と思いながら話していたらフィードバックがまさにその通りだった。お祈りに等しい内容だった
「なぜこれ(制作物)を作ろうと至ったのか、というのをスライドに書いたほうがいいかもしれません」
それは書きませんでしたが話しましたよ

 

 

2社目
比較的若い人
自己紹介を終えた後あれこれ質問をされて受け答えをしていたのだが、期待どおりの返事がなかったのか、早々に自分への会社について質問をされた

 

 

3社目
中年の男性2人
この会社が正直手応えがあったというか、私の話を真摯に受け止めてもらえたと思う。言いたいことも言えたし、その後の懇親会も少しだけ話が弾んだ

 

 

4社目
30代手前くらいの人
非エンジニアらしく、話をしていてもほとんど知らない内容だったのか、フィードバックも過大とは言わないまでも1番良かった。TwitterMastodonの違いを説明したけれどもうまく伝えられなかったのが悔やまれる。このあたりで喉が痛みだした

 

 

休憩 のど飴を買いに近くのコンビニへ。かりん味結構好き。

 

 

5社目
若手社員と役職のある人
スマートフォンのケースやアプリを作ってるというのを最初の説明で聞いていたのは覚えていた。私はスマートフォンのアプリの開発をほとんどメインにしているため、ある程度の手応えあるかな〜と期待していたが、どうやらiOS周りがわかるけどAndroidの話はわからないような反応だった。フィードバックはまだない

 

 

6社目
社長とエンジニア採用担当
自己紹介にちょっとだけ書いた趣味に社長が食いついてきた。「この話で時間全部使いそうだな」と言われ「まともに話聞く気無いな」とは思った。
技術周りの話をもう一人のほうに丸投げの状態で、興味を引いた内容や目標等、自身がどう考えているのかを明確に言う場面では質問してきた。それに対しては今まで明確に言えた内容がはっきりと言えず、フィードバックもボロボロだった。
言い訳をすれば、このあたりから生命線の水分がなくなり、疲労も相まって頭が回らなくなっていた。だが明確に言えなかったのは事実なので反省している。

 

 

7社目
体つきの良い元エンジニアのエンジニア採用担当
疲労もピーク、喉も枯れ、思考もままならない。相手の話すスピードに合わせてしゃべっていたので滑舌よく喋れていたかは自信はなかった。フィードバックにきっちり反映されていたようで、1社目と同じくお祈りに等しい評価だった。卒論で自分がやろうとしていることにだいぶ興味を引かれたが、勉強中の内容なのではっきりと答えられなかったのが残念だった。

 


1コマ空けて懇親会 
乾杯前後に3社目の人とちょっとだけ話をした。
フィードバックの良かった順に挨拶をしていこうとするも、懇親会に参加する予定だったのに参加しなかった方が何人かいたので挨拶回りは諦めた。一人でいた参加者の人と少し話をした。

 


今回の逆求人でどこかといい感じに事が進めばいいなとは思っていたが、そうはうまくはいかない。何事も相性である。
ただ、気になったのが「ぜひ選考を受けて欲しい」とフィードバックのコメントには書かれていたが、受けの良し悪し(手応えやフィードバックを見て自分が思った具合)によってはニュアンスは違う。履歴書なりESなりを提出して受けろという意味なのか、やるなら実質1次免除なのか。今後のやり取り次第ではあるが、前者の可能性が高い。

 

だとすると私がこの1週間ゴリゴリ書いていたプロフィールやプレゼン資料は何の意味があるのか。就活だと思えばそこまでだろうけど。 (父曰く「それを採用される側が気にすることではない。聞かれたら同じことを言えばいい」とのこと。いまいち納得はできない)