ひよっこゲームブログ

なにもかも初心者のひよっこがゆったりと何かする

くっそ久々に文章を書く

書くネタは溜まっていたんだけど
なかなかやる気が出なかったのでリハビリ程度に書いていく
最後にブログを書いたのが2022-01-22ってマジ?




年を取ること

5月21日に年を取った。気が付けばもう29です。

ちょっと前まで自分の誕生日にはとても無関心で心底どうでもいいと思ってたんよね。
なぜかっていうと人類は平等に年を取るから。

その人がどういう人間か関係なく年月というのは勝手に過ぎるもので
何もしてないのに「おめでとう」って言われてるの変じゃない?って

まぁ人間生きていれば考えも変わるもので
これは僕の好きなゲームでも言ってたことなんだけど
「今日まで何事もなかったことを祝う日」と受け取るようにした。

この言葉、当時はあんまり気にならなかったんだけど
ある時ふと納得してから「今年も安全に生きてこれた」と自分に言い聞かせるようにしている。

身体は資産



労働のこと

精神的なリハビリが終わって、ようやく心の余裕ができたって感じ。
半年~1年くらい燃え尽きてから復帰できなかったんだよね。
でも本読んだり自主的に何かする気力は確実に減った。

そういえば最近ちょっと昇給したんだけど、まぁ全然低いよね。
一番頑張ってた時に全く評価されなくて、今評価されるのすげーもにょる。

転職みたいなのは今あんまり考えてない。
今の自分の能力で他のとこ行ける気がせんのよな。

かろうじて生きてる感じ



書こうと思ってるネタ一覧

  • 格ゲーの「リュウ」というキャラの呪い
  • ストⅤを10人くらいに送り付けた結果と見えてきたもの
  • Inscriptionのレビュー(文句が山ほどあるのでクリアしたら書く)
  • ゲーム観戦の解像度の話
  • 技術系のなんか
  • etc.


だらだら過ごすのをやめるためにリハビリとして文章を書くのは良い

Kotlinのソート

先週にLeetCodeのデイリーをやってて知らなかったことをメモ

Kotlinにソートがあったことを知らんかった
今まで使う機会なかったしなぁ

公式ドキュメントを見たら結構色々できることを知った

kotlinlang.org



Merge Sorted Array

Solution
Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array.

The number of elements initialized in nums1 and nums2 are m and n respectively. You may assume that nums1 has a size equal to m + n such that it has enough space to hold additional elements from nums2.

Example 1:

Input: nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3
Output: [1,2,2,3,5,6]

Example 2:

Input: nums1 = [1], m = 1, nums2 = [], n = 0
Output: [1]

検証時に書いたコード

fun merge(nums1: IntArray, m: Int, nums2: IntArray, n: Int): Unit {
        
        var numsArray: IntArray = intArrayOf()
        
        for(i in 0..m-1) {
            numsArray += nums1[i]
        }
        for(i in 0..n-1) {
            numsArray += nums2[i]
        }
               
        val result: Unit = numsArray.sort()
        println(numsArray.contentToString())
        
        return result
    }

fun main() {
    merge(intArrayOf(1,2,3,0,0,0), 3, intArrayOf(2,5,6), 3)
}

Result:

[1, 2, 2, 3, 5, 6]

本来はソートのアルゴリズムを書くべきなんだけどな・・・

続・転職に向けて

このご時世、自分の身に危機を感じております。
出社の危険性が高いので再び転職を考え始めました。

一人暮らしならいいんですけど、実家暮らしなので家族に何かあったら嫌なので。

以前コーディングテストを受けたとき
それはもうひどい点数を取ったので(もちろん落ちた)勉強しようと思いました。

最近LeetCodeを始めてみました。
leetcode.com

時間を縫ってちまちま進めていきたい。


本もいくつか積んでるので読んでいきたい。

これの電子版を買いまして peaks.cc

あとこれも買った techbooster.booth.pm

今だとこれを待ってます peaks.cc

最近睡眠の質が浅いのか
すごく疲れてるのでよくない。寝よう

おやすみ。

「完全SIer脱出マニュアル」読了

あけおめ~~~

新年早々なんやかんやありまして、また転職活動を続けることになりました。

転職活動ということで、前々から気になっていた本を1冊読みました。
今年から読んだ本はブログに書き残そうと思って筆を執った次第です。


読んだ本はこちら

books.rakuten.co.jp

本の名前をtwitterで見たことがあったのと
本屋で見たときの名前のインパクトが強くて頭に残ってたんですよね
(このご時世なのでしばらく本屋に行ってませんが・・・)


さてさて本のご紹介。新書程度の量なのでサクッと読めました。
書いてあったことは軽くまとめるとこんな感じですね


各項目の内容と、軽い感想を込みで書いていきます。


SIerが転職する背景の話

悪い意味でのSIerで心をすり減らしながら働くのってどうなん?って話。

こんな地獄もあるんだなとちょっとぎょっとしました。
僕は今の会社だと2年働いて1年半はAndroid開発できたので、だいぶ恵まれてましたね。


働く環境の話

自分にとってどういう環境が働きやすいのか。
もし今の会社に所属しながら環境を変えられるならそれでもいいんじゃない?って話。

これ大事ですよね。わりと上に持ち掛けたらどうにかなったりするんですよねこれ。
直談判して解決する可能性が少しでもあるのならば
勇気だして当たって砕けろくらいの気持ちで動くといいです(体験談)
失敗してもなんだアイツってなるだけなので

あとはIT業界ってどういった働き方があるの?って話がちょいちょい。
自分のキャリアだと働いているとこって2つ(うち1つは非IT)なので参考になりました。

自分がどういった環境下だとパフォーマンスが出るのかなって見直せました。


転職するための下準備・面接の話とか

心壊すくらいなら今すぐ辞めた方がいい!って話が冒頭に出てくるのですが
これはマジです。みんな気を付けましょう。僕もそうだったし、知り合いが何人かやられてます。

あとは内容としては

  • インプット・アウトプットするために
  • 転職サービスやエージェントの利用について
  • 履歴書と職務経歴書
  • 面接や企業とのマッチのノウハウ

ざっと読んで、転職するための下準備を見直す感じですかね。
僕自身は「まぁそんなもんだよな」くらいの感覚で読みました。

ただ、「技術のインプット」の話にちょっと問題があるかなと・・・。
これは後で書きます。


キャリアの話

IT業界で働く際にはこんな企業・業種があるよーって話ですね。
本当に触りだけ書いてあるのでそんなに参考にならなかったかな。


楽しく働くために

自分のキャリア含めてどうしたら良い方向に進めるかなって話。
長い目で見た時、何ができるようになればいいかなという指針というかそんな感じ。



< 総評 >

「マニュアル」というよりは「アドバイス」って感じの本ですね。
本当に基本的なことは書いてあります。
この本だけでは解決はしないので、これをベースに必要な情報を仕入れる必要があります。
何もわからないよ!って人には最初の一歩の指針になると思いました。

良い意味で全体的に広く浅くって感じでした。
肝心なとこがもうちょっと深掘りされていればなぁって本でした。



ただ、前述した通り「技術のインプット」に関しての記述には賛否両論だなと感じました。

何も分からん人がどうやってまずは何でインプットしたらいいの?という答えに

  1. 技術系のポッドキャストを聞いてみる
  2. Railsチュートリアルをやってみる

Railsについては正直なところあんまり同意できませんでした。

ひとまずRailsチュートリアルみたいなの良くないと思うんですよね・・・。
Railsを否定しているわけではないですよ!)
この辺はいろんな人が記事を書いていると思うので詳しくは語らなくていいや。

分かってる人が読めば「まぁそういう選択肢もあるよね」って感じだとは思うんですけど。
安易にこれってお勧めするのって結構危険だと自分は考えてます。

人によって異なるから難しいんですけど
技術への興味の持ち方のノウハウとかとかを書いていればなー、と思いました。


そういえばつい最近この記事を読んだんですよね。

qiita.com

Railsチュートリアルやって、スクール通って
この記事のようなコンボが完成する可能性があって怖いなって思いました。

僕個人としては、面白そうだなって思ったのを自分でいくつか試してみて
そこから「一番興味がわいた〇〇をもうちょっとやってみよう」みたいな感じの方がいい気がします。

だいたいチュートリアルなんてどこにでもあるし(英語だけど)
本とか買うと1冊きちんとやろうってなるのでいいと思います。

明日からアルゴリズムのお勉強します。

Kotlinをちまちまやり直してる

ちまちまやり直す

基礎的なやつ

// デフォルト引数つきで簡単に関数書く
fun add(i: Int = 0): Int = i + 1

// 再起呼び出し
fun sum(numbers :List<Int>): Int = 
    if (numbers.isEmpty()) 0
    else numbers.first() + sum(numbers.drop(1))

fun main() {
    // "1 add 0 = 1"(関数だけ呼び出すとデフォルト引数が参照される)
    println("1 add 0 = " + add())
    // "1 add 1 = 2"(ふつう)
    println("1 add 1 = " + add(1))
    
    // "sum = 6"
    println("sum = " + sum(listOf(1, 2, 3)))

    // 関数をオブジェクトとして扱う
    val functionAddDefault = ::add
    // "functionAddDefault = 1"
    println("functionAddDefault = " + functionAddDefault(0))
}


ラムダ式と無名関数

fun main() {
    // ラムダ式の例
    val squareA: (Int) -> Int = { i: Int -> i * i }
    // "squareA(1) = 1"
    println("squareA(1) = " + squareA(1))

    // ↑ を省略
    val squareB = { i: Int -> i * i }
    println("squareB(1) = " + squareB(1))
    
    // 引数が1つならitで呼べる
    val squareC: (Int) -> Int = { it * it }
    // "squareC(1) = 1"
    println("squareC(1) = " + squareC(1))

    // 無名関数を利用 returnが使える
    val squareD: (Int) -> Int = fun (i: Int): Int {
        return i * i
    }
    // "squareD(1) = 1"
    println("squareD(1) = " + squareD(1))

    // ↑ を省略 returnが使えない
    val squareF: (Int) -> Int = fun (i: Int) = i * i
    println("squareF(1) = " + squareF(1))
}

忘れるという話

今週は天候ぐちゃぐちゃで全然きちんと寝れなかった
だるーん、つかれたーん

最近仕事でAndroid開発してないので
空いた時間で今までやってきたことの復習をしてるんだけど

結構色んなこと忘れてる
やばい、あと結構ショック受けてる

1回実装したっきりのやつとか完全に忘却してる
仕事でAndroid担当外れて2ヶ月くらいでこれか

ちょっと前に久々にKotlin書いたら
エルビス演算子の書き方忘れてたんだよね

やべーよやべーよ
面接でコーディングあったら確実に即死する

今週は身体だるいしやること色々積もって死んでたけど
連休で挽回しないとまずい

今までと、これからのこと

おかげさまで転職ドラフトで自身の過去最多指名を頂きましたーん

そのうち職務経歴書を書かないといけないので
今まであったこと&思ったこととか整理したいので書き残す

あとは個人的には、転職ドラフトの指名体験記書いてる人って
「学生時代はベンチャーインターンしてて~」とか「OSSコミッターでした~」とか
指名されるの当たり前じゃねーか!みたいな人ばっかだったので
こういった話に需要がないかなーって感じでのんびり書いてきます


おちこぼれの這い上がり経験談です
前半はプログラミング関係ないです



学生時代

高校は全科目ほぼドベ。でも数学はマジで死ぬほど大好きだった
プログラミングの勉強ができたらいいなってなんとか情報系の大学へ進学した

大学でも勉強はからっきしで、とにかく人から教わるのが苦手
今そこにあるものの理論の根っこが気になって仕方がないのですぐに物事を覚えられない
(でもこの考え方がプログラミング的には有用かも)

自分に見合ったやり方じゃないと
勉強ができないということにようやく気が付いたのはつい最近

プログラミングの実力に関しては、情報系大学出身とは言えないレベルだった
研究もお粗末だった。よく卒業させてもらえたな・・・


社会人1年目

めちゃくちゃでっかいメーカー企業
エンジニアで入ったはずがなぜか品質保証部になった

過去にブログで書いたように色々ありすぎた
この経験があったから、身体を壊すような働き方をしないと一生誓った

身体を壊して1年たたずに退職


無職1年目

数ヶ月療養してからはしばらく遊んでた
幸いにもお金を全く使ってなかった上に実家住まいだし貯金はあった

興味があったWebとか(今ではもう役に立たない知識ばかりだけど)触った
あとはラズパイとかで無意味な鯖立てたりした


無職2年目

どうせならやりたかったことをしようとゲーム会社を目指してみる
結論から言うとこの就活には失敗した

Unityで半年ちょっとでゲームを作った
ついったーのもーめんと
"作ったゲームのzipリンク(クリックでダウンロードが始まります)"

このとき一人で開発してた経験がめちゃくちゃ役にたってる
一人でものを1つ完成させることの大事さを知った。完成は正義

コーディングのアンチパターンを踏みまくって開発したので
何をしたらダメなのかを身をもって実感した

溢れかえるグローバル変数
1つのメソッドに大量の処理が書き込まれ
1つのクラスに様々な機能が盛り込まれ
めちゃくちゃな命名規則に始まり
複雑な条件分岐が構成され
〇〇フラグが大量に散在し
次の日には見たくないようなコードが生成された

マジで全部踏みつくした

再就職の活動には失敗し、貯金も底をつき
病院や年金が財布を襲い、どこでもいいから就職しないとって感じで
ひとまず働けるとこをって就活し始めた


再就職

なんか勉強意欲あるし、Javaちょっとやったことあるんでしょ?
って感じでAndroid開発にまわされた

給料は一般の新卒くらい
前職よりちょっとあがったけど賞与ないし見込み残業だったからトントン


入りたての頃

開幕Android担当が3人⇒2人になった
もちろんマニュアルなんてあるわけもなく、仕様も分からず
コードを片っ端から泣きながら読んでった。Javaを復習した


Kotlinに触れ始める

Kotlinがイケてるらしいからに脱Javaしようぜって空気が社内に流れ始めた

ここがエンジニアとしてのターニングポイントな気がする
もちろんKotlinなんて初めて触った
ひとまず本を買って必死に勉強した


プロジェクトが大きくなった

新人がぶわっと入ってきた
何人か抱えることになって、教えなきゃと思ってgitの復習とかした
間違ったことを教えないようにと思って基礎を固めた

コーディングの基礎とか、丁寧に書けるように意識し始めた
この辺で人へ教える技術のノウハウを入手する


技術書をあさり始めた

とにかく新しいことを覚えることが楽しくなり
家で勉強する機会が増えて、この辺でぐーんと実力が伸びた

CoroutineとかJetpackとかその辺をそこそこ使えるようになった
ようやくエンジニアとして働いてますって言えるかなって思い始めた


役職が上がった

給料が変わるわけじゃないけどサブリーダーにランクアップした
上の人がいないときに代替で色々やるようになった
チームビルディングとかの本を読んだ

GitHubの使用許可が下りなかったので
コードレビューをほぼペアプロ状態でやってた


転職を考え始めた

今いる会社ではやれることに限界があるなぁと感じ始めた
自分よりもっと強い人に囲まれて開発がしたい


プロジェクト強制異動

色々あって異動になった。原因は資金まわり
納得がいかなかったので近々の転職を決意する


現在

無理くりしてリモートワークを勝ち取って、ある程度平和に働いてるけど
まだAndroidに未練たらたらなので転職がしたい

あとAndroidが見せてくれる世界をまだまだ楽しみたい
Android11Betaきたし、Kotlinの1.4の正式リリースもそろそろかなぁ

今年で27歳なので、なるべく早めに動きたいなって思ってる
そんなに時間は残されてないのかな・・・


現在使えるもの

基礎的なコーディング技術
Androidライフサイクルへの理解
Kotlinの基礎的な理解
Coroutine
DataBinding
Espresso
UIAutomator
GooglePlayConsole
Git

ぼんやり使えるもの

Androidアプリケーションに必要な機能実装(いつも調べながらやる)
xmlによるレイアウト記述(割と適当に書いてるのでよくない)
LiveData
Room
Retrofit2
MVVMアーキテクチャ
Androidにおけるマテリアルデザイン
スクラム開発

勉強したもの(未実践)

RxJava
CleanArchitecture

今後勉強したいもの

Android Architecture Components(AAC)
CI / CD
Unitテスト
ドメイン駆動開発
テスト駆動開発


つまづいたこととか感じたこととか

自主学習する人は一握りである

「この本とか参考になるから」とか「これ覚えとくといいよ」とか
自分の中では親切にアドバイスをしたつもりなんだけど、特に意味をなさなかった

彼らにとって「プログラミング = 仕事」であり
プライベートで仕事はしたくないと
別にこの思想自体が悪いとは全く思わない(個人の自由だし)

僕もそりゃあプライベートの時間を削って仕事はしたくない
でも新しいものを知ることが好きだからときどき勉強する
もちろん勉強よりゲームやってる方が好き


Androidの環境変化のスピード

とにかく色々なツールが使えなくちゃならない
新しいライブラリやGoogle I/Oで発表されることとか
AndroidのOS Verは1年ごとに上がっていくし

僕はそれが楽しかったんだけど
チームで使えるツールなどはある程度制御していかないと
やたらと便利にしても使えない人が出てきてしまう

あとリファレンス読まないで
個人ブログの古い記事参照にして書いちゃう人とかで事故る

一部機能は担当の人しかメンテできないみたいなことが起きた


設計

スタートとゴールだけ考えてなんとなく作っていくのは明らかに難しい
ソフトウェア設計で使う図とか色々あるけど、なんとなくしか読めない
(そもそも使える人いなかったから書いても意味なかったんだけど)

世間では何がどのくらい使われているんだろう

今は何をどう実装したらいいかなーって紙に書いてから手を動かしてる
流石にこの辺は今後やっておいた方がいいな・・・

アーキテクチャの理解はまだまだ足りないなぁ、実践経験が少ない


世の中で使ってるツールが使えない / 実践できない

わりと重めな悩みのタネ
1人だと実践できなかったりで、解決もできない

GitHubのプルリクとか


日本語を母国語としない人とのコミュニケーション

日本語は難しい。文章もそうだけど、はなし言葉も難しい

単語だけで分節を区切って、日本語だと不自然だけど
短い文章で簡潔にすると伝わりやすかった

敬語も「です、ます」くらいに抑えて
やたらと礼儀正しい文章は使わない方がお互いに楽だった・・・
できればこんどこそ日本人の方が多いところで働きたい(切実)


今後

ひとまず転職したい

転職するする詐欺みたいになってたのは
自分の実力がまだ足りないなぁって思ってたのと
どうせならアプリ1個くらい作りたいなぁって考えてたのがあって
なかなか足が動かずにいた

世の中のAndroidエンジニアは誰しもが個人開発して
アプリのリリースを1回くらいはしてるよなぁ
って思ってたけど、実際に企業の人と話してみたら
「家庭がある人はそもそも時間取れないし、そうでもないよ」って言われた

ちょっと安心した
でもそのうち何かリリースしたいなぁ。ネタはあるので

転職ドラフトでちょこちょこ指名されたりしてるので
今のスキルでも必要としてくれる人はいると信じて

やってみてダメならまた考える