新卒エンジニアの技術と教養のブログ

技術・教養、色んな情報をシェアしていきます

新卒エンジニアの学習ログ 〜 其の八 〜

プログラミングの問題を解決する10のステップ

プログラミングには問題がつきもの!?

プログラミング学習をしていて、どうしても理解出来ない処理に出くわす、または、エラーや例外が解決できないことに悩まない人はいないでしょう。

 

特に初学者であるほど、知識が単純に不足しているために、どうしても気づけないこともあります。

 

そういった場合には、習熟している人に聞くのが一番早いですが、中々そういった環境が整っている人はいないでしょう。

 

また、質問するにも明確な原因を特定できず、”結局何がわからないの?”と言われてしまうことも多々あります。

 

まず、自分で問題を整理して、様々な切り口から解決を促す力を育てていきましょう。

 

参考になるものが海外の技術コミュニティーサイトに上がっていたので、和訳しながらお伝えしたいと思います。

 

参考サイト

codeburst.io

 

 

自己解決を促す10のステップ

プログラミングの問題に取り組んでいる新人開発者からのフィードバックの中には、どこから手をつけたらいいのかわからないというものがあります。

 

あなたは問題、ロジック、構文の基本などを理解しています。他の人のコードを見たり、指導してくれる人がいれば、それに従うことができます。

しかし、構文やロジックは理解していても、最初は自分でやることに不安を感じたり、自分の考えをコード化するのに苦労したりすることもあるかもしれません。

 

ここでは、私のプロセスとサンプル問題に取り組むためのヒントを紹介します。

 

 

1. 少なくとも3回は問題を読む

まず、わからない/解決できない問題と自分が解いていると思っている問題には違いがあります。

問題の最初の数行を読み始めて、過去に見たことのあるものと似ているからといって、残りの部分を想定してしまうのは簡単です。

たまに友人に説明してみて、私の説明の理解度が課題の問題と一致しているかどうかを確認することもあります。

途中で問題を誤解していたことに気づくのは避けたいものです。

最初に余分な時間を取ることは、それだけの価値があります。

問題をよりよく理解すればするほど、それを解決するのは容易になります。

 

数値の配列を受け取り、偶数のみの配列evenNumbersを返す単純な関数selectEvenNumbersを作成しているとしましょう。偶数がない場合は、空の配列evenNumbersを返します。

 

 

  • Android(Java, Kotlin)iOS(Swift)ごとに異なる言語を使用しなくてもよい
  • AndroidStudioXCodeなど別々の開発環境を用意しなくてもよい
  • Adobe XDからのエクスポートが可能なプラグインもあり、デザイナーと連携が取りやすい

AndroidであればJavaKotliniOSであればObjective-CSwiftなどへのプログラミング言語が可能な技術者を整備せねばいけません。

また、iOSの開発にはWindows環境では実機での確認ができないなど、ハード面でのコストが必要となってきます。

そういった点を考慮するとAndroidStudioからプラグインを追加するだけで、AndroidとiOSの両方で開発が行えるのは良いですよね。

実際使ってみると、様々なデメリットも見えて一長一短ではありますが、、、、

環境構築は簡単

AndroidStudioの環境構築が完了している方であれば、WindowsでもMacでも容易に導入することができます。

下記のサイトであれば、AndroidStudioとXCodeの両方への導入まで確認できます。

qiita.com

Adobe XDのプラグインを導入してUI反映

Flutterの導入が完了したら、Adobe XDでUIを作成してエクスポートできるプラグインを揃えていきましょう!

以下の条件で導入しました。

  • AndroidStudio 4.1
  • Mac OS Catalina
  • Flutter 1.22.1
  • Dart 2.10.1
  • Adobe XD

Adobe XDメニューからプラグイン> プラグインを見つける 

"fu"と検索に入力して、、、 

XD to Flutterを選択してインストールします。

 

インストールが完了したら、Adobe XDで簡単なUIを作成します。

 

XDのメニューからプラグイン>XD to Flutter > UI Panel を開きます。 

AndroidStudioのFlutterプロジェクトのlibフォルダがあるディレクトリをPath指定すれば、後はデフォルトで大丈夫です。

そして、AndroidStudioのFlutterプロジェクトのpubspec.yamlファイルに17行目のようにadobe_xdを加えてあげれば準備オッケーです。(":" コロンの後は入れなくても動作します) 

ビルドするとUIが反映されていることが確認できました!

 

無事に環境が構築でき、Adobe XDでのUIエクスポートも導入できました。

かなり便利!?

メリットづくしのように感じますが、実際に開発を進めていくとそれなりに問題が生じてきます。

UIDartコードにエクスポートできても、その後のアクションを加えるときには、Widget構成がむちゃくちゃで苦労します。

KeynotePowerPoint無理やり変換したような感じでしょうか、、、

あくまでエクスポートであるため、好き放題にXDでデザイナーさんに作成されるとメリットがほぼありません(笑)

それなりに制約があることを把握して、しっかりと事前にすり合わせをしましょう! (XDのコンポーネントがUIに含まれているとエクスポートできない?など私の環境では問題が発生しました)

使いこなせると強力なツールであるのは間違いありません。

今後も時間をかけて学習を継続していきます。

最後に

入社して半年が経過しましたが、まだまだわからないことだらけです。

それでも、自分なりに必要となることや、今時間を積み重ねておくべきことをやれているように感じます。

実際に一人前のプログラマになることを目指してAndroid/iOS開発は毎日必ず手を動かして感覚をなくさないようにしています。

With COVID19の中で新卒のキャリアをスタートさせましたが、少しながら日々に自分の成長 があります。

今年から社会人になった皆さん、大変な中ではありますが、通勤や娯楽にかけていた時間を学びの時間として、今後も一緒に成長を続けて行きましょう!

とりあえず。。。

メモ代わりに書いていますが、これから理解が深まれば書き足していきます。 いつか誰かのお役に立てると嬉しいですね。

初学者から一人前まで、、、

ここでは一人前のプログラマの定義を

「自力で様々なツールを活用しながら、ある程度思い通りの実装ができること」

とします。

また、人生においてプログラミングに向き合う時間として、現時点で2000時間取り組めればある程度の基盤が備わると仮定しています。 (言語やツールに依存しない思考法や情報収集能力)

プログラミングは大学で学んで来ましたが、特に根詰めてやってきていないので、ノーカウントとして取り組みます。

現在までの学習時間

およそ520時間

どんどん更新していきます。

新卒エンジニアの学習ログ 〜Instagram のプログラマー向け技術アカウント5選〜

おすすめのプログラマー向けInstagramアカウント5選

久しぶりの投稿になります。

2020年度に入社してそろそろ1年が経とうとしています。 勉強期間も無事に?終了し、本格的な業務に取り組んでいる毎日です。

では私のことはさておき、Instagramでコーディングに関わるおすすめアカウントを紹介していこうと思います。

プログラマーにとってIT全般コーディングに関する情報は取得し続けていくことが大切です。

というのは、仮に1つの言語に熟達するにしても、その周辺のレイヤにある技術や仕組みへの理解がなければ、学びを深めていくことに限界があるからです。

日々の中にコーディングや、IT全般に関わる情報媒体を取り込んでおくことは、皆さんのプログラマーとしての成長を支えてくれると思います。

SNSでも毎日開くのがInstagram!、ということで、今回はそこに注目して5つのアカウントを紹介しようと思います。

1. internetoftricks

f:id:Nao_RandD:20210214081107p:plain

プログラマー向けのコミュニティとして、世界中の5.8万人(2021/2/14時点)のフォロワーがいます。

コーディングに関わるトピックや、プログラミング学習において大切な思考をシェアしてくれます。

コミュニティーのメンバーとして登録などは一切必要なく、日々のモチベーションを保つのに一役買ってくれます。

f:id:Nao_RandD:20210214081207p:plain

コーディングに必要なロジック強化のポイントなど、独学で進むためのメンタリティを提供してくれます。

f:id:Nao_RandD:20210214081212p:plain

2. itchallenges

f:id:Nao_RandD:20210214081127p:plain

こちらもコミュニティを支えるアカウントです。 世界で16.3万人(2021/2/14時点)のフォロワーがいます。

コーディングチャレンジなど活発な投稿もあります。

ストックのストーリーにC, Python, Javaなどを学ぶと、どんな分野に活かせるかを提供してくれているのもいいですね。

3. lovecoders

f:id:Nao_RandD:20210214081144p:plain

こちらはコーディングに日々取り組む人たちの学習を共有してくれるアカウントです。

各々のデスク環境や、開発内容をシェアしてくれます。

みんながどのように仕事/自学に取り組んでいるか知れるので、モチベーション維持にも一役買ってくれます。

f:id:Nao_RandD:20210214094727p:plain

おしゃれな壁紙を提供してくれている付加価値もいいですね。

4. codecollect

f:id:Nao_RandD:20210214081151p:plain

  1. 2と重複しますがプログラマーコミュニティを管理するアカウントです。 世界で4.8万人(2021/2/14時点)のフォロワーがいます。

f:id:Nao_RandD:20210214095725p:plain

ストックのストーリーにUI/UX, Python, Android, LinuxなどITに関わる重要なものを包括的に知ることができます。

5. dancamdev

f:id:Nao_RandD:20210214081156p:plain

海外の企業家プログラマーのアカウントです。

おすすめの開発ツール、ポートフォリオ、TEDxを記事として投稿してくれます。

終わりに

プログラマーを職業としていくには大量の情報をインプットして、日々アウトプットをし続けていかなければいけません。

一のことを知ろうとして、十のことが新しくわからなくなるような過程が何度もあるでしょう。

私もまさにその過程にいます。

インプットだけではコーディングできるようになりませんし、とはいえアウトプットに偏りすぎては問題の解決に無駄を生みかねません。

日常的に用いる部分でインプットを増やして、アウトプットに思い切り注力できるようにしていきましょう。

他にもおすすめのアカウントあればコメント欄で是非教えてください。

引き続きこういった情報を共有していきますので、気に入った方は読者登録お願いいたします!

新卒エンジニアの学習ログ 〜GitHub Octoverseは確認されましたか?〜

 

 

説明する必要もないかもしれませんが、GitHubはGitリポジトリのホスティングを行う有名なサービスです。


GitHubは一年に一度、Octoverseと呼ばれる資料を無料で公開しています。
https://octoverse.github.com/#chart-public-oss-creation

資料には、現在のトレンドとなっているプログラミング言語だけでなく、活発な動きがあった地域なども明示されています。

今回はその中で、興味深い内容を三つ取り上げてみたいと思います。

1. トレンドのプログラミング言語
2. オープンソースプロジェクトが活発に!
3. 世界的にプログラミングへの関心が高まる!?

 

1. トレンドのプログラミング言語


GitHubでリポジトリとして管理されている中から、割合の多い言語をランキングにしてくれています。


例年と変わらず、JavaScriptは不動の人気を誇っています。
Javaは少し順位を落としており、Pythonが追い上げを見せているようです。


中でも興味深いのは、TypeScriptが前年と比較して7位から4位への浮上でしょうか。


JavaScriptの代替言語という認識ですが、どうして今になって流行りが見えるのか、有識者の方いらっしゃれば見解を頂きたいです。

2. オープンソースプロジェクトが活発に!


GitHub上で進められているオープンソースプロジェクトも増加傾向にあることがデータで示されています。
オープンソースプロジェクトは、Androidなど世界的に公開して開発を行っているものです。(解釈に間違いあったらすみません:アセアセ:)
新しく開始されたプロジェクトの数やCotributeの数をみても、今後はオープンソースとしてよりよいソフトウェアを開発していく動きが増えていくかもしれません。
特に、新規プロジェクトに関わるトピックとして「COVID-19」が多くありました。
世界中の人が一丸となって、ITの力で打開していこうという動きが見えて頼もしく感じます。

 3. 世界的にプログラミングへの関心が高まる!?


前年と比較して、新しいリポジトリの生成が30%増加しているデータが示されています。
Covid-19で在宅でのリモート勤務が世界的に増加しました。
通勤がなくなることで生まれた時間からプログラミングを新しく始めたり、仕事とは別の開発を進める人が増えたようです。
ロックダウン/外出自粛で自分を見つめ直す時間が多くあったために、ITへの投資を考える人は少なからずいたのかもしれません。

 

最後に


資料の内容は非常に充実しており、無料とは思えないほどです。
今回は私なりに気になった内容のみをピックアップしていますが、他にも色々な切り口から分析がなされています。
(地域ごとに動きが活発だったところや、ビギナーとベテランごとにどのような動きの変化があったかなど、、)
今後のIT業界の動きや、世界的な動向を知る上で有益な情報が隠れているかもしれません。
気になった方は資料資料を手元に落として読み進めて頂ければと思います。
そして、意見も含めて情報をシェアして頂けると嬉しいです!

新卒エンジニアの学習ログ 〜プログラマーとして成長するための10の心得〜

プログラマとして成長するための10の心得

f:id:Nao_RandD:20200927150906j:plain

プログラミングには問題がつきもの!?

プログラミング学習をしていて、どうしても理解出来ない処理に出くわす、または、エラーや例外が解決できないことに悩まない人はいないでしょう。  

特に初学者であるほど、知識が単純に不足しているために、どうしても気づけないこともあります。

そういった場合には、習熟している人に聞くのが一番早いですが、中々そういった環境が整っている人はいないでしょう。


また、質問するにも明確な原因を特定できず、”結局何がわからないの?”と言われてしまうことも多々あります。

まず、自分で問題を整理して、様々な切り口から自分でコーディングできる力を育てていきましょう。  

参考になるものが海外の技術コミュニティーサイトに上がっていたので、和訳しながらお伝えしたいと思います。  

参考サイト

codeburst.io

f:id:Nao_RandD:20201004123016j:plain  

 

10の心得

プログラミングの問題に取り組んでいる新人開発者からのフィードバックの中には、どこから手をつけたらいいのかわからないというものがあります。

 f:id:Nao_RandD:20201017184715j:plain

あなたは問題、ロジック、構文の基本などを理解しています。他の人のコードを見たり、指導してくれる人がいれば、それに従うことができます。

しかし、構文やロジックは理解していても、最初は自分でやることに不安を感じたり、自分の考えをコード化するのに苦労したりすることもあるかもしれません。

 

ここでは、プロセスとサンプル問題に取り組むためのヒントを紹介します。  

 

1. 少なくとも3回は問題を読む

まず、わからない/解決できない問題と自分が解いていると思っている問題には違いがあります。

問題の最初の数行を読み始めて、過去に見たことのあるものと似ているからといって、残りの部分を想定してしまうのは簡単です。

たまに友人に説明してみて、私の説明の理解度が課題の問題と一致しているかどうかを確認することもあります。

途中で問題を誤解していたことに気づくのは避けたいものです。

最初に余分な時間を取ることは、それだけの価値があります。

問題をよりよく理解すればするほど、それを解決するのは容易になります。

 

数値の配列を受け取り、偶数のみの配列evenNumbersを返す単純な関数selectEvenNumbersを作成しているとしましょう。偶数がない場合は、空の配列evenNumbersを返します。

function selectEvenNumbers() {
  // your code here
}

  ここでの私の思考は、、

  • 偶数が何であるかをコンピュータはどうやって見分けることができる?
  • この関数に渡すものは何?
  • その配列には何が含まれている?
  • 1つ以上の数字配列の要素のデータ型は?
  • この関数の目的は何ですか?この関数の最後に何を返せばいいのでしょうか?

といくつかの疑問を元に処理を書いていきます。

単純な処理であっても、これだけの問いをもってコードに起こしていくのです。

しっかりと思考のフローを客観視し、人に説明できるよう書き出し、理解が確かなものか確認しましょう。

2. 少なくとも3つのサンプルデータを使って、問題を手動で処理してみる

紙を取り出して、問題を手作業で処理してください。

使用できるサンプルデータのセットを少なくとも3つ考えてください。コーナーケースとエッジケースも考慮してください。

コーナーケース:通常の動作パラメータの外で発生する問題または状況。

エッジケース:極端な(最大または最小の)動作パラメータでのみ発生する問題または状況

各パラメータが指定された範囲内にあるかにかかわらず、特に複数の環境変数または条件が同時に極端なレベルにある場合を考えるようにしましょう。

特にエッジケースの確認は大切です。

場合分けの際の境界付近では、ミスが生じやすく注意が必要です。

エラーや例外が生じた際にも、要チェックなポイントです。

3. ステップをシンプルに最適化

パターンを探して、一般化できるものがないかどうかを確認してください。

ステップ数を減らすことができないか、繰り返しているステップがないかを確認してください。

関数 selectEvenNumbers を作成します。 偶数を格納する空の配列evenNumbersを新規に作成します。

  1. 配列 [1, 2] の各要素を通過する
  2. 最初の要素を見つける
  3. 2で割れるかどうかで偶数かどうかを判断し、偶数であれば偶数に加算する。
  4. 次の要素を探す
  5. ステップ#4を繰り返します。
  6. この配列の要素がなくなるまで、ステップ#5と#4を繰り返します。
  7. 配列の中に何かがあるかどうかに関わらず、配列evenNumbersを返します。

このアプローチは、あなたが数学的帰納法を思い出させるかもしれません。

  1. n = 1, n = 2, ...に対して真であることを示す。
  2. n = k の場合に当てはまるとします。
  3. n = k + 1 の場合に真であることを証明する。

4. 疑似コードを書く

大まかな手順をまとめた後でも、コードに変換できる疑似コードを書き出しておくと、コードの構造を定義する際に役立ち、コーディングが非常に楽になります。

疑似コードを一行ずつ書き出します。

これは紙に書いても、コードエディタでコメントとして書いても構いません。

もしあなたが始めたばかりで、真っ白な画面を見るのが面倒だったり、気が散ってしまう場合は、紙の上で行うことをお勧めします。

疑似コードには一般的に特定のルールがあるわけではありませんが、プログラミング言語のある側面を十分に理解しているという理由だけで、ある言語の構文を入れてしまうこともあります。

構文にとらわれず、ロジックとステップに焦点を当ててください。

ここでは、偶数を格納した配列を用意する関数を取り上げて、考えてみましょう。

まず、疑似コードの例を示します。

function selectEvenNumbers

配列evenNumbersを作成し、空の配列と設定

for それぞれの要素 in 配列内

  その要素があるかどうかを確認
    if 要素が偶数の場合
      それを配列evenNumbersに追加
return 偶数の配列

この疑似コードを元により近いプログラミング的な書き方に起こして行くのです。

それぞれの処理を自分で書き出して、一行一行を理解するのは遠回りのようにも感じます。

しかし、基礎を整えて、特定のプログラミング言語で写経のように移すより、アルゴリズムとして理解することは長い目で見て有意義です。

5. 疑似コードをコードに翻訳してデバック

疑似コードの各行を実際のコードにした結果、以下のようになりました。 (// は、その行が疑似コードの中にあったものです。)

// function selectEvenNumbers
function selectEvenNumbers(arrayofNumbers) {

// 配列evenNumbersを作成し、空の配列と設定
  let evenNumbers = []

// for それぞれの要素 in 配列内
  for (var i = 0; i < arrayofNumbers.length; i++) {

// if 要素が偶数の場合
    if (arrayofNumbers[i] % 2 === 0) {

// それを配列evenNumbersに追加
      evenNumbers.push(arrayofNumbers[i])
    }
  }

// return 偶数の配列
  return evenNumbers
}

混乱を避けるために疑似コードを削除します。

function selectEvenNumbers(arrayofNumbers) {
  let evenNumbers = []
for (var i = 0; i < arrayofNumbers.length; i++) {
    if (arrayofNumbers[i] % 2 === 0) {
      evenNumbers.push(arrayofNumbers[i])
    }
  }
return evenNumbers
}

時々、新しい開発者は構文に夢中になってしまい、前に進むのが難しくなることがあります。

構文は時間が経てば自然に身につくものであり、コーディングの際に後から正しい構文の資料を参照することは恥ずかしいことではありません。

6. あなたのコードを最適にそして、シンプルに

プログラミングを進めていくと、シンプル化と最適化が繰り返されるテーマであることと、気づいていくでしょう。

“Simplicity is prerequisite for reliability.”
"シンプルであることは信頼性の前提条件である"

— Edsger W. Dijkstra: オランダのコンピュータ科学者であり、コンピュータ科学の多くの研究分野における初期の先駆者でもある。

ここでは、心に留めておくべき質問をいくつかご紹介します。

  • シンプル化と最適化の目標は何ですか?

  • どのようにしてコードをより読みやすくすることができますか?

  • 余分なステップはありませんか?

  • 必要のない変数や関数はありませんか?

  • いくつかのステップを繰り返していませんか?

  • エッジケースを処理する良い方法はありますか?

目標は、チームのスタイルや個人的な好みによって異なります。色々な問いかけをしながら進めていきましょう。


"プログラムは人が読むために書かれなければならず、機械が実行するためには付随的にしか書かれていない"

— ジェラルド・ジェイ・サスマンとハル・アベルソン、"コンピュータプログラムの構造と解釈 "の著者

様々な切り口から、状況に応じてふさわしい、コード作成を進めていきましょう。


チーム開発を考えて、、とか、初心者は気にしなくてよいと考えてしまいますが、何より自分にとって読みやすいコードが書けないといずれ挫折することになります。

7. デバック

このステップは、プロセス全体を通して行う必要があります。

全体を通してデバッグを行うことで、構文エラーやロジックのギャップを早期に発見することができます。

統合開発環境 (IDE) とデバッガを活用してください。

私はバグに遭遇したときは、コードを一行一行トレースして、何か期待通りにいかなかったことがないかどうかを確認します。


私が使っているテクニックをいくつか紹介します。

  1. コンソールをチェックして、エラーメッセージの内容を確認する。
    →チェックすべき行番号を指摘してくれることもあります。これはどこから手をつけたらいいかの大まかな見当をつけてくれますが、問題がこの行ではない場合もあります。

  2. コードの塊や行をコメントアウトして、これまでのコードを出力する。
    →必要に応じて、いつでもコードのコメントを外すことができます。

  3. 予想外のシナリオがある場合は、他のサンプルデータを使用する。
    →コードがまだ動作するかどうかを確認しましょう。

  4. 全く異なるアプローチを試している場合は、異なるバージョンのファイルを保存する。
    →やはり、元に戻したくなったときに、今までの作業を失うのは避けたいですからね。

"最も効果的なデバッグツールとは、やはり慎重に考え、適切に配置されたprint文と組み合わせることです。"

- ブライアン・W・カーニガン、プリンストン大学コンピュータサイエンス教授

8. コメントを書く!

一ヶ月後に一行一行の意味を覚えているとは限りません。

また、あなたのコードを書いている他の誰かも、その意味がわからないかもしれません。

だからこそ、後になって問題を回避して時間を節約するために、役に立つコメントを書くことが重要なのです。

このようなコメントは避けましょう。

// これは配列です。これは配列です。

// これは変数です。

何が起こっているのかを理解するのに役立つ、簡潔でハイレベルなコメントを書くようにしています。

これは、より複雑な問題に取り組むときに便利です。

特定の関数が何をしているのか、その理由を理解するのに役立ちます。

明確な変数名、関数名、コメントを使用することで、あなた(および他の人)は理解できるようになるはずです。

常に以下は念頭において、コメントをつけましょう。

  • このコードは何のためにあるのか?
  • 何をしているのか?

f:id:Nao_RandD:20201017181737j:plain

9. コードレビューからフィードバックを得る

チームメイトや教授、他の開発者からフィードバックを得ましょう。

Stack Overflow をチェックしてみましょう。他の人がどのように問題に取り組んでいるかを見て、彼らから学びましょう。

問題へのアプローチにはいくつかの方法があります。

それが何なのかを知ることで、あなた自身がそれを思いつくことができるようになり、より早く上達できるようになるでしょう。

"たとえどんなにゆっくり綺麗なコードを書いても、根本から台無しになればもっと遅くなる。"

- ボブ・マーティンおじさん、ソフトウェアエンジニア、アジャイル宣言の共著者

10. 訓練、訓練、訓練!

経験豊富な開発者であっても、常に練習して学んでいます。

有益なフィードバックを得たら、それを実装しましょう。

問題をやり直したり、似たような問題をやってみましょう。

自分を追い込み続けてください。

問題を解決すればするほど、開発者としての腕は上がっていきます。

成功を祝い、自分がどれだけ進歩したかを忘れないようにしましょう。

プログラミングは、何事もそうですが、時間が経てば自然と簡単にできるようになるということを忘れないでください。

"自分がここまで来たことに誇りを持ちましょう。自分がどこまで行けるかを信じてください。しかし、旅を楽しむことを忘れないでください。"

- マイケル・ジョセフソン、ジョセフ・アンド・エドナ・ジョセフソン倫理研究所の創設者

f:id:Nao_RandD:20201004130255j:plain

最後に

今回は初心者から中級者まで、プログラミングに取り組む際に心がけるべきポイントを紹介してみました。

海外では、日本以上にプログラミング教育が活発な国が多いので、教育面において参考にしていくのは良いですね。

入社して半年が経過しましたが、まだまだわからないことだらけです。

それでも、自分なりに必要となることや、今時間を積み重ねておくべきことをやれているように感じます。

実際に一人前のプログラマになることを目指して、Android/iOS開発は毎日必ず手を動かして感覚をなくさないようにしています。

With COVID19の中で新卒のキャリアをスタートさせましたが、少しながら日々に自分の成長 があります。

今年から社会人になった皆さん、大変な中ではありますが、通勤や娯楽にかけていた時間を学びの時間として、今後も一緒に成長を続けて行きましょう!

とりあえず。。。

メモ代わりに書いていますが、これから理解が深まれば書き足していきます。 いつか誰かのお役に立てると嬉しいですね。

初学者から一人前まで、、、 ここでは一人前のプログラマの定義を

「自力で様々なツールを活用しながら、ある程度思い通りの実装ができること」

とします。

また、人生においてプログラミングに向き合う時間として、現時点で2000時間取り組めればある程度の基盤が備わると仮定しています。 (言語やツールに依存しない思考法や情報収集能力)

プログラミングは大学で学んで来ましたが、特に根詰めてやってきていないので、ノーカウントとして取り組みます。

現在までの学習時間

およそ520時間 どんどん更新していきます。

新卒エンジニアの学習ログ 〜FlutterとAdobe XDプラグインの導入〜

FlutterとXDプラグインの導入

f:id:Nao_RandD:20200927151111j:plain

Androidなどモバイルアプリ開発に従事するに当たって、Flutterでの開発も視野に入れる必要性が増してきました。

FlutterAndroidiOSなど、本来は異なるプラットフォームを使用して開発するものを一元化して開発ができるというものです。

flutter.dev

Dartと呼ばれるプログラミング言語を使用して開発を行います。

JavaJavaScriptが理解できていれば、比較的容易に踏み込めるというのもメリットが大きいですね。

ザックリ以下のメリットがあると思われます。

  • Android(Java, Kotlin)iOS(Swift)ごとに異なる言語を使用しなくてもよい
  • AndroidStudioXCodeなど別々の開発環境を用意しなくてもよい
  • Adobe XDからのエクスポートが可能なプラグインもあり、デザイナーと連携が取りやすい

AndroidであればJavaKotliniOSであればObjective-CSwiftなどへのプログラミング言語が可能な技術者を整備せねばいけません。

また、iOSの開発にはWindows環境では実機での確認ができないなど、ハード面でのコストが必要となってきます。

そういった点を考慮するとAndroidStudioからプラグインを追加するだけで、AndroidとiOSの両方で開発が行えるのは良いですよね。

実際使ってみると、様々なデメリットも見えて一長一短ではありますが、、、、

環境構築は簡単

AndroidStudioの環境構築が完了している方であれば、WindowsでもMacでも容易に導入することができます。

下記のサイトであれば、AndroidStudioとXCodeの両方への導入まで確認できます。

qiita.com

Adobe XDのプラグインを導入してUI反映

Flutterの導入が完了したら、Adobe XDでUIを作成してエクスポートできるプラグインを揃えていきましょう!

以下の条件で導入しました。

  • AndroidStudio 4.1
  • Mac OS Catalina
  • Flutter 1.22.1
  • Dart 2.10.1
  • Adobe XD

Adobe XDメニューからプラグイン> プラグインを見つける f:id:Nao_RandD:20201020192626p:plain

"fu"と検索に入力して、、、 f:id:Nao_RandD:20201020192649p:plain

XD to Flutterを選択してインストールします。

f:id:Nao_RandD:20201020193207p:plain

インストールが完了したら、Adobe XDで簡単なUIを作成します。

f:id:Nao_RandD:20201020194302p:plain

XDのメニューからプラグイン>XD to Flutter > UI Panel を開きます。 f:id:Nao_RandD:20201020194424p:plain

AndroidStudioのFlutterプロジェクトのlibフォルダがあるディレクトリをPath指定すれば、後はデフォルトで大丈夫です。

そして、AndroidStudioのFlutterプロジェクトのpubspec.yamlファイルに17行目のようにadobe_xdを加えてあげれば準備オッケーです。(":" コロンの後は入れなくても動作します) f:id:Nao_RandD:20201020194741p:plain

ビルドするとUIが反映されていることが確認できました!

f:id:Nao_RandD:20201020194940p:plain

無事に環境が構築でき、Adobe XDでのUIエクスポートも導入できました。

かなり便利!?

メリットづくしのように感じますが、実際に開発を進めていくとそれなりに問題が生じてきます。

UIDartコードにエクスポートできても、その後のアクションを加えるときには、Widget構成がむちゃくちゃで苦労します。

KeynotePowerPoint無理やり変換したような感じでしょうか、、、

あくまでエクスポートであるため、好き放題にXDでデザイナーさんに作成されるとメリットがほぼありません(笑)

それなりに制約があることを把握して、しっかりと事前にすり合わせをしましょう! (XDのコンポーネントがUIに含まれているとエクスポートできない?など私の環境では問題が発生しました)

使いこなせると強力なツールであるのは間違いありません。

今後も時間をかけて学習を継続していきます。

最後に

入社して半年が経過しましたが、まだまだわからないことだらけです。

それでも、自分なりに必要となることや、今時間を積み重ねておくべきことをやれているように感じます。

実際に一人前のプログラマになることを目指してAndroid/iOS開発は毎日必ず手を動かして感覚をなくさないようにしています。

With COVID19の中で新卒のキャリアをスタートさせましたが、少しながら日々に自分の成長 があります。

今年から社会人になった皆さん、大変な中ではありますが、通勤や娯楽にかけていた時間を学びの時間として、今後も一緒に成長を続けて行きましょう!

とりあえず。。。

メモ代わりに書いていますが、これから理解が深まれば書き足していきます。 いつか誰かのお役に立てると嬉しいですね。

初学者から一人前まで、、、

ここでは一人前のプログラマの定義を

「自力で様々なツールを活用しながら、ある程度思い通りの実装ができること」

とします。

また、人生においてプログラミングに向き合う時間として、現時点で2000時間取り組めればある程度の基盤が備わると仮定しています。 (言語やツールに依存しない思考法や情報収集能力)

プログラミングは大学で学んで来ましたが、特に根詰めてやってきていないので、ノーカウントとして取り組みます。

現在までの学習時間

およそ520時間

どんどん更新していきます。

一般教養の補強 〜銀行業界って何で苦境?〜

 

 

一般教養を補おう!

社会人になると突然、ニュースが分かるようになったり、世の中の仕組みがわかるようになるわけではありません。

やはり、どこかで自分なりに補っていくしかないのです。

 

日々のニュースと関係の深い話をこのシリーズ

”一般教養の補強”

では取り上げていきたいと思います。

 

私が学んでいくのに合わせて、皆さんにもまた一つ世の中を知っていただければ幸いです。

f:id:Nao_RandD:20201004130222j:plain

 

まず”銀行”に関しての基礎知識

日常的に目にしているし、利用していますよね。

地銀(地方銀行)から、都銀の赤い所や青い所。

 

日常的に用いているだけでは、中々本来の銀行の構造には気づけないのではないでしょうか?

まず、メガバンクに関して学んでいきましょう。

 

メガバンクとは?

メガバンクを指すのは大きく3つの銀行、またはグループを指します。

  • 三菱UFJフィナンシャルグループ
  • みずほフィナンシャルグループ
  • 三井住友フィナンシャルグループ

の3つですね。

 

基礎知識

メガバンクは都市銀行や長期信用銀行の再編で生まれた銀行。傘下に信託銀行や証券会社、資産運用会社を抱え、総合金融グループを形成している。

 

私達が日常的に口座に振り込みや引き出しをしている部分は、銀行のもつ要素のほんの一部にすぎません。

 

世にいう金融系で銀行に加えて証券などを指しているのも、こういったメガバンクがグループ内に銀行と証券を両立させていることが挙げられます。 

”僕は金融系に携わっているのさ!”

と聞くだけでは、銀行で資産運用で個人に営業して回っているのか、証券会社で企業再編をしているのかも特定はできません。

 

金融系の定義に関しても触れておきましょう。

金融とは、

資金に余裕がある人が、資金を必要としている人に資金を融通すること

通するため、「金融」とされている

 

つまり、お金がある人が、お金を必要とする人に貸すことで、新しい経済の動きを促して利益を生むのです。

その仲介を担うのが、金融における銀行の主なビジネスモデルです。

 

私達が預金として預けたお金から、銀行が必要とする人に貸し付けて利益を出し、利子として分配しているのです。

 

f:id:Nao_RandD:20201004130315j:plain

 

 

銀行業界なぜ苦境?

ニュースでは、”銀行解体が進む”とか、”就職先で銀行は今や安泰ではない”と耳にしますね。

これで、「ただニュースで言っていたから」と、その業界に対してマウントを取るようでは安直過ぎます。

 

そして、もちろん全ての銀行が危なくて、今後解体されるということを言っているわけではありません。 

どういった側面から、どの銀行に対して影響があるニュースなのか把握していきましょう。

 

大きな要因 

  • 少子高齢化
  • 地方経済の衰退
  • 新型コロナウイルスの感染拡大

主に3つの要因が銀行の体力を奪っています。

 

上2つの少子高齢化、地方経済の衰退は最近に始まったことではありません。

こういった要因は構造問題と言われます。

 

少子高齢化は人口の偏りが問題なわけですから、経済においては30代〜40代の最も消費が多い層が少なくなることで影響を及ぼします。

分母が多い年代(断崖ジュニア)が消費の少ない層に映ると影響が大きく、昨今で叫ばれているのですね。

 

次に地方経済の衰退です。日本は特に都心部に人が集まり、ほとんどの消費を賄っています。

地方の経済が衰退すれば、地方銀行はより厳しい状況に置かれることになります。

 

そして、トドメの新型コロナウイルスの感染拡大です。

コロナウイルスによって、経済は戦後最悪の状態となりました。

 

オリンピック前のコロナは痛かった?

銀行のビジネスモデルは、

お金のある人が、お金を必要とする人に貸すことで利益を生む

というわけですから、みんなお金を必要としている状況では、当然破綻してしまいます。

 

また、お金を貸す際には、貸出金利というものが重要になります。

融資(企業または個人にお金を貸すこと)の際に、”これくらいの額を返済までは、継続して元金とは別にもらいますね。”という設定をしています。

 

この金利は、返してもらえる見込みがあるときは低くなり、見込みが無いとき・低いときは高くなります。

 

当然ですよね。返してもらえなさそうなら、高い金額で設定して少しでも返ってこなかったときのリスクを下げるのです。

 

これが、新型コロナウイルスの影響ではより悪く出ています。

 

不景気でも考えようによっては、

”不景気で借りたい人が多いなら、今ある資金をうまくやりくりすればいけそう、、、”

とも予測できるでしょう。

 

しかし、コロナ前にはオリンピックを控えており、日本企業の成長も見込めていました。

そのため、金利を低く設定してお金を貸していたんですね。

よって、これまで貸していた企業などが、返済できないことが起きれば大ダメージとなります。

 

倒産した企業も多くいたわけですから、それに融資していた銀行も巻き添えを食らうわけです。

 

デジタル化の遅れも苦境の原因に

外部環境のせいばかりではありません。

 

積極的な経営改革を進めてこなかった銀行にも原因があります。

とりわけ、デジタル化への対応は遅れています。

 

対面業務にとことんこだわってきた銀行では、コロナ禍で弱点がより浮き彫りとなりました。

 

貸し付けの他にも、送金ビジネスも主力といえる銀行の業務です。

 

送金において、かかるコストとスピードは非常に重要なファクターです。

その中では、コストも安く決済スピードも速いフィンテック企業が台頭しています。

 

危機感を募らせる銀行は、いま急いでデジタル化(金融DX)を推し進めています。

そのため、自前主義を捨てて、IT企業との提携にも積極的になっています。

 

例えば、みずほフィナンシャルグループソフトバンクはスマートフォンを活用した金融事業で包括提携することを決めました。

 

三菱UFJフィナンシャルグループは銀行やネット証券の分野でKDDIと連携、三井住友フィナンシャルグループはネット証券最大手を抱えるSBIホールディングスと包括提携しました。

 

メガバンクの意向は当然、他の都銀や地方銀行に影響していきます。

 

銀行にとって、デジタルを活用した新しいビジネスの開発はもちろん、コスト構造を大きく見直すことが苦境を脱する鍵となっています。

 

f:id:Nao_RandD:20201004130306j:plain

 

 

最後に、、、

ざっと今の銀行、または金融業界が置かれている状況を紹介してみました。

 

ここまで、読んだ方であればわかるように、銀行だけ異常に被害を被っているということはないのです。

 

とりまく問題は銀行にとどまった影響ではありません。

 新型コロナウイルスであれば、観光業界はもっと深刻な被害をこうむっています。 

 

しかし、”銀行に入れば、人生安泰”ということは、昨今薄まってきているのは事実です。

f:id:Nao_RandD:20201004130214j:plain

どの企業・業界にいれば今後は絶対安泰であるかは全く読めません。

 

それでも、自分で情報を集めて、知ろうとする姿勢が大切なのです。

決して考えることを放棄してはいけません。

 

これからも、私と一緒に一般教養も合わせて学びながら、自分にとっての理想実現の確率を少しでも引き上げていきましょう。

 

ではまた次の投稿でお会いしましょう!

 

 

 

 

 

新卒エンジニアの学習ログ 〜新人エンジニアとして必要なこと〜

f:id:Nao_RandD:20200927151111j:plain

エンジニアとして必要なこと

最近は実際の業務に関わることが増えてきました。

その上で必要と感じていることは現状以下の項目です。

  • 素直さ(一番大事)
  • 仕事の丁寧さ
  • 自学する意欲
  • IT開発への理解
  • Gitへの理解

素直さや仕事の丁寧さ、自学する意欲は当然必要です。

次に、プロジェクトにチームとして関わっていく上では、IT開発への理解Gitへの理解が必要であると感じました。

今回は新人としてまず必要なIT開発Gitについてお話していこうと思います。

新人が関わるIT開発

即戦力としての力は有していない新人であれば、多くが私のような段階を踏んでいくと思います。

まず、IT開発においてSIerなどが行う、一般的な流れとしては以下のようになります。

(自社開発企業や戦略コンサルからする企業等は除きます)

  1. プロジェクト計画
  2. 要件定義
  3. 設計
  4. テスト
  5. 移行
  6. 運用

このフェーズにおいて、詳細な説明は省略しますが、受注してからそれぞれの専門的な人が役割分担して関わっていくことになります。

私の会社では、少数でプロジェクトをアジャイルにまわして行くので、全てのフェーズにおいてそれなりに理解が必要になってきます。

新人がまず関わるフェーズは?

この中で、新人として携わることが多いのが4に当たる試験(テスト)フェーズです。

試験には総合試験や単体試験、結合試験など、開発の知識がなければ難しいものもプロジェクトではあります。

最も携わりやすいのは、まずユーザーテストでしょう。

ユーザーテストはその名の通り、開発したものをユーザーとして使ったときに正常に動作するかを確認することです。

実際の設計や仕様どおりにできているか確認する意味もありますね。

ほとんどの場合には、受注案件であればお客様の会社側で確認してもらう作業がほとんどです。

それでも、全く動作を確認せずにお客様には渡せないので、一応ひと通りしていくことになります。

その案件で開発したものに触れる良い機会になりますし、ソースコードも閲覧できる状態にしてもらえていたら、実際の動作から学ぶとより理解を深めていきやすくなります。

試験は退屈でも魂を込めて

試験は実際のところ、単純作業であり退屈で適当にやってしまおうと思いがちです。

しかし、こういったことの積み重ねは馬鹿にしてはいけません。

細かなことを綿密にこなせない人間は信頼を得ることはできません。

若者で血気盛んであると、”もっと開発でゴリゴリコード書きたい!” と思う気持ちをぐっと堪えて頑張りましょう。

試験は実際にやってみると、意外と細かなことを考える気配りが大切です。そして、開発とお客様の両方の視点を想定する必要があります。

これは非常に学びの多いフェーズなのです。

開発においても結局はユーザー(プログラマでない人)に使ってもらうことがほとんどなわけです。

ユーザー視点を欠いた開発者であると、技術やツールに支配された駄目な人材となってしまいます。

様々な試験ごとに色々な視点を感じて見るように私は心がけています。

Gitはやはり外せない

それでもやはりGitは外せませんね!

チーム開発をするなら当然使用されている優れたツールですし、ITで開発周りで携わる人間であれば必ず必要と言っても過言ではないでしょう。

イチから丁寧に教えてもらえればいいですが、私の会社(外資で手取り足取りは教えられない)や、ましてや今のリモート勤務が進む世の中では、自ら学んでおくとより良いでしょう。

付け焼き刃に知識だけ入れておくより、一度それなりにしっかり学ぶほうが良いと思います。

私はUdemyの講座で仕組みから理解を進めていきましたが、下記のサイトもかなり学びの助けになると思います。

www.slideshare.netこわくない Git

いずれは、この記事でもGitの解説をしてみようと思っていますのでお楽しみに!

最後に

入社して半年が経過しましたが、まだまだわからないことだらけです。

それでも、自分なりに必要となることや、今時間を積み重ねておくべきことをやれているように感じます。

実際に一人前のプログラマになることを目指してAndroid/iOS開発は毎日必ず手を動かして感覚をなくさないようにしています。

With COVID19の中で新卒のキャリアをスタートさせましたが、少しながら日々に自分の成長 があります。

今年から社会人になった皆さん、大変な中ではありますが、通勤や娯楽にかけていた時間を学びの時間として、今後も一緒に成長を続けて行きましょう!

とりあえず。。。

メモ代わりに書いていますが、これから理解が深まれば書き足していきます。 いつか誰かのお役に立てると嬉しいですね。

初学者から一人前まで、、、

ここでは一人前のプログラマの定義を

「自力で様々なツールを活用しながら、ある程度思い通りの実装ができること」

とします。

また、人生においてプログラミングに向き合う時間として、現時点で2000時間取り組めればある程度の基盤が備わると仮定しています。 (言語やツールに依存しない思考法や情報収集能力)

プログラミングは大学で学んで来ましたが、特に根詰めてやってきていないので、ノーカウントとして取り組みます。

現在までの学習時間

およそ450時間

どんどん更新していきます。

成功を目指す前にこの準備!折れない心の作り方!

 

メンタルを鍛えることの重要性

皆さんは理想的なメンタルのコンディションを維持できているでしょうか?

いかに様々な夢や理想を持っていても、それを実行するメンタル面が整えられていないと成果は望めないのは当然のことです。

「今日は調子が悪い」「今日はとても頭が冴えている」というような、身体や脳みその働きを偶発的なものと捉えていないでしょうか。

 

f:id:Nao_RandD:20201004123016j:plain

 

それはとても勿体ないことかもしれません。やりたいことをとにかく行動して実践する前に、常に最高の状態で迎え撃つ準備をしておくべきです。

 

今回は毎日の生活でも重要であるメンタルの整え方について、以下の本を要約してお伝えしていきます。

 

ペンタゴン式 ハードワークでも折れない心のつくり方 | カイゾン・コーテ, 中津川茜 |本 | 通販 | Amazon

 

 

ペンタゴンで実践されているメンタルの鍛え方を紹介する

CIAやFBIと並び、数々のハリウッド映画の舞台としても知られています。

アメリカ国防総省、通称「ペンタゴン」。

傘下に軍を携え、アメリカ国防の要として君臨する、世界最大の組織でもあります。

時には命がけの任務を遂行し、国の命運すら担うことすらあります。

軍隊においても最高のエリートとして位置づけられる集団はどのように、最高のコンディションを構築しているでしょうか。

 

 

 

ペンタゴン式「折れない心」のつくる5つのステップ

ペンタゴンにおいて「折れない心」とは、以下の5つのステップより構築されるとされています。

  1. 折れない心のメカニズムを知る
  2. 逆境や困難に強くなる心のキャパシティを増やす
  3. 逆境や困難を受け入れ、いかなる場面にも準備可能な自分をつくる
  4. 目の前の逆境や困難に対処するためのスキルを磨く
  5. 起こってしまった辛い出来事から回復するための力を培う

わかるような、わからないような、といった感じでしょうか。

まずそれぞれの話の前に前提を確認していきましょう。

 

ペンタゴンが定義する「折れない心」とは

自分の弱点や弱みを素直に直視することでそれを受容すること、そしていかなる変化にも対応可能な柔軟性を持ち、たとえ困難に陥り失敗するようなことがあっても、そこからしなやかに回復できるタフさ

つまり、自分をしっかりと受容して、素直さと柔軟性を保つことが大切なのですね。

単純に筋トレして強靭な身体を手に入れること以上にこのメンタリティを重視しています。 

 

そのため、心と身体は相関しているとしっかりと認識されています。定期的な運動、姿勢を正す、食生活を整えるなど、一般人が心がけるような習慣が徹底されています。

 

「心が折れる」反応は、萎縮・怒り・諦め・無視のように現れる

恐怖等を感じたときにどの要因で現れるかを客観視してみる

それぞれの状況を主観的にしか考えられないために、恐怖や諦めが生まれると定義されています。

 

そのため、そうならない習慣をつけるステップがあります。

成果への障害となるのは、やはり言い訳です。

ペンタゴンでは、言い訳をあぶり出してまた、正しい状態へと導く方法があります。 

 

ペンタゴン式言い訳のあぶり出し2ステップ

  1. 「やるべきではない」「やっても無駄だ」「どうせ無理だ」と思うシチュエーション、事柄を列挙
  2. なぜ心がおれる思考に陥るのか分析していく

 常に客観視していくこと、そして、冷静に自分の状況や事柄を判断することが強靭な精神を育てていくのです。

 

 

「ストレストリガー」を特定する

次に、ストレスが何から生じているかをカテゴリわけして行きます。

以下の6つでほとんどのストレスの原因は分類できます。

  • 家族が健康問題を抱えているケース
  • 自分自身に健康問題があるケース
  • 引越し、結婚、離婚など、新シ環境に馴染まなければならないケース
  • 恋愛や結婚で、諸問題を抱えているケース
  • タバコ、食べすぎ、飲みすぎなど、依存的悪習慣を抱えているケース
  • 金銭的問題を抱えているケース

 

日頃からメンタルを鍛えるためのトレーニング

ペンタゴンではメンタルを鍛えるトレーニングとして、これまでに上げてきた思考法の他に実際に行っていることがあります。

それが、「タクティカル・ブリージング」と「マインドフルネス瞑想」です。

  • 「タクティカル・ブリージング」
    • 姿勢をしっかりと正してリラックス
    • 4秒間かけて鼻からゆっくりと吸う
    • 4秒間息を止める
    • 4秒間かけて口からゆっくり息を吐く
    • 4、5回繰り返す

 

  • 「マインドフルネス瞑想」
    • 基本呼吸を行い、姿勢を正しリラックスする
    • 肩のちからを抜き、ゆっくりと目を閉じ、今この瞬間に起こっている周囲の状況にフォーカスする。雨音、風の音、自分の呼吸のリズム
    • その間もゆっくりと呼吸を続ける

はじめは3分程度、ペンタゴンでは平均12分行っているそうです。

f:id:Nao_RandD:20201004130342j:plain

 ペンタゴンには様々な儀式がある

命がけの任務もあるペンタゴンでは、常に感謝の気持ちをもつことを徹底されています。

そして、隊員もまた、それを実行することで日々全力で困難に立ち向かっていきます。

  • 毎朝、必ず星条旗の掲揚、ベッドメイク

当たり前の1日などない、毎日が始まり、終わることへの感謝や遠くで危険任務にあたる同士たちへの敬意を思い出す 

 

PDCAではなくOODA!? 意思決定の助け「OODAループ」

  1. Observe(問題を取り囲む状況を観察)
  2. Orientate(観察をもとに取るべき行動の方向づけ)
  3. Decide(シミュレーション後に決定)
  4. Act(行動)

PDCAは有名ですよね。Plan(計画)、Do(実行)、Check(評価)、Action(改善)のサイクルを回すことで、精度を高めていくことができるというものですね。

 

ペンタゴンではOODAループが推奨されています。任務において、経験したことがあるということはまれです。

常に、目の前の情報を集めて、より正確に状況を把握して、最善の行動を取らなければならない彼らにとって、観察してシミュレートすることの再現性がとても重要なのです。

 

しかし、実際に私達の仕事においても、日々改善することは重要ですが、トラブルが起きたりすれば、初めての状況への対応を強いられます。

 

今まで経験したことのないような場面に力を発揮できるかが、私達にとっても大切ではないでしょうか?

そのような場面にこそ、その人の真価が問われるものです。

日本人はルーティン的な仕組みがあると強いが、その場で判断して行動していく力は弱いと言われています。

 

来たるべきチャンスを逃さないためにも、日頃から新しい習慣を取り入れてみてはどうでしょうか?

 

終わりに、、

いかがだったでしょうか?

おおよそ人の日常ではない任務でこなしている彼らも、このように私達でもできることを真に徹底することで常人離れの心を整備しています。

 

もちろん、彼らと同じ境地に至る必要はありませんが、プレゼン前に緊張したり、周りの反発を恐れて発言できないことは心に起因します。

それが、本当に大切な場面に現れてしまったら、後悔してもしきれないでしょう。

 

毎日の調子の浮き沈みを冷静に分析して、常にベストなコンディションで、ベストな判断を下せる準備をしておきましょう。

 

f:id:Nao_RandD:20201004130331j:plain

 

 

新卒エンジニアの学習ログ 〜Kotlinのあれこれ〜

f:id:Nao_RandD:20200927151111j:plain

Kotlinのあれこれ

Android StudioでKotlinを使用しながら、Androidアプリ開発に関して学んでいます。 Javaの基礎知識があればKotlinの学習は必要ないと上司から言われていましたが、全然そんなことないと思っています。(泣)

確かにオブジェクト思考を前提としたプログラミングではありますが、Javaと比較してKotlinは型推定が常識のように行われるためにいきなりライブラリの仕様等を見ると心が折れます。

基礎知識

Kotlinでは関数も、数値や文字列のなどの値のようにして扱うことができます。 そのため、変数に代入したり関数の引数として与えたり、関数の結果として返したりできます。

このような性質のオブジェクトは第一級オブジェクトに分類されます。

よくみる "::関数名" とは?

Kotlinのコードを見ているとよく::関数名のような記述をよく見ます。 以下のコードをご覧ください。

fun square(i : Int): Int = i * i

fun main(){
   val functionObject = ::square
   println(functionObject(5))
   println(square(5))
}

前述したように=(イコール)を用いて関数squareを定義していますね。 この関数は引数にInt(数字)を受け取ってInt(数字)を返す関数ですね。

これをmainでは変数functionObjectの初期定義を::squareで行っています。 出力は以下のようになります。

..> 25

..> 25

squareの引数に5を与えた結果の25が二回出力されていますね! ::squareで関数オブジェクトを生成し、その結果をfunctionObjectに与えているので、 関数squareと同じ動作を実行できるようになっていますね。

どちらも引数に数値を受け取って数値を返す関数になっていることが確認できますね。 これが関数オブジェクトと言われるものの基本となる知識です。

最後に

JavaやC言語でなれている人にとってはあまり馴染みのない書き方ですね。 次回はこの関数オブジェクトを使用して、関数を引数に持つ関数高階関数に関して記事を書いてみたいと思います。

とりあえず。。。

メモ代わりに書いていますが、これから理解が深まれば書き足していきます。 いつか誰かのお役に立てると嬉しいですね。

初学者から一人前まで、、、

ここでは一人前のプログラマの定義を 「おおよそ自力で様々なツールを活用しながら、ある程度思い通りの実装ができること」 とします。

また、人生においてプログラミングに向き合う時間として、現時点で2000時間取り組めればある程度の基盤が備わると仮定しています。 (言語やツールに依存しない思考法や情報収集能力)

プログラミングは大学で学んで来ましたが、特に根詰めてやってきていないので、ノーカウントとして取り組みます。

現在までの学習時間 およそ410時間 どんどん更新していきます。

日本経済の礎を支えた理論!「論語と算盤」渋沢栄一

「論語と算盤」とは?

「論語と算盤」は日本実業界の父と呼ばれた渋沢栄一によって書かれた仕事と人生の指南書です。

麻生太郎財務相から発表があったように、2024年度に行われる紙幣刷新に向けて絶対に抑えておきたい人物ですよね。来年の2021年の大河ドラマ「青天を衝け」では主人公として物語が描かれます。

渋沢栄一

明治維新後に日本の実業界、ひいては資本主義の制度を設計した人物。

政治の世界で言えば日本の基礎をつくりあげた大久保利通伊藤博文と同じように「近代日本における偉人」の一人である。

彼が設立に関わった会社は481社に及び、それ以外に500以上の慈善事業にも関わり、ノーベル平和賞の候補にもなっている。

彼の功績を知るためにいくつかの企業名を上げてみよう。

みずほ銀行、JR東日本、帝国ホテル、サッポロビール、明治神宮、日経新聞、東京海上日動、東急電鉄、東京ガス、東京証券取引所、いすゞ自動車

現代の日本を代表する企業の設立に関わっていることがわかるだろう。

要約対象

今回は守谷淳の「現代語訳 論語と算盤」を元に読み進めた内容を要約していきます。

元々、渋沢栄一の原書も孔子の論語をより読みやすくと念頭にあり、学者のように専門的な言い回しを避けて書かれています。

www.amazon.co.jp

論語こそ最高のバイブルである!

渋沢栄一にとっての人生の指針は孔子の書いた論語への深い理解から構築されています。

日本人なら大和魂を基盤とすべきでは?と感じますが、以下のように述べています。

日本人たるもの、何より日本に特有のヤマト魂というものを基盤としなければならない。 しかし、中国は国も古いし、文化もはやくに開けて孔子や孟子のような聖人・賢人を出しているため、政治方面、文学方面他において日本より一日の長がある。

決して日本を虐げている訳ではなく、あくまで広く、中立的に世界を観てみれば先に文化が開けていた国の賢人から学ぶのは必要と考えているんですね。

偏った考えにならず、現代におけるグローバルな視点ですよね。この視点を明治時代に備えており、なおかつ人生の指針としていたわけですから驚きの先見性です。

そして、因みに日本の歴史においては、徳川家康の手腕を非常に高く評価しています。

徳川家康は全国統一がなった後に三百年あまりの平穏を実現しています。それを成せたのは、適材適所に人を配置していたことに他ならないというのです。

実際に以下のように述べています。

我が国の古今を通じて、徳川家康という人ほど、うまく適材を適所に配置して自分の権勢を上手に広げたはかりごとの達人を他に知らない。

徳川家康孔子の考えに近い思想を以て様々な格言を残しており、それも交えて本書では世の治め方から個人の日々の心がけを指南してくれています。

何が読み解けるのか?

これを読んでの所感としては、正しいビジネスの倫理観を身につけるべきであるということが一貫して述べられています。

いくつかをピックアップして紹介していきましょう!

立志と学問(第二章)

ここでは現在の学問の習得精神の豊かさの重要性が述べられています。

学問つまり学ぶことにおいては、物質的な豊かさとともに精神教育も進めていくことが必要だそうです。

渋沢が経済から日本を豊かにすることで、日本人は富を得ることができる人が増えていきました。 しかし、反対に武士道という元々多くが有していた社会的な道徳心は失われてしまったといいます。

詰まるところ「嫌な金持ち」が日本に増えてしまったと言うんですね。

もちろん富を得ることは簡単ではなく、人より努力したことは間違いなく報われていいと渋沢は考えています。

それでも、物質的に豊かになっても、その富や権力を使って、他人を虐げたりすることは決して許してはいけないのです。

私は地獄も極楽も気にかけない。ただ現在において正しいことを行ったならば、人として立派なのだ、信じている

・自ら箸をとれ

若いうちは大きなことばかりに気を取られてはいけないといいます。

やはり血気盛んな若者は、「もっと大きなことがしたい」「小さなことは私に向いていない」と考えてしまいます。(これは私も思い当たる節がありますね苦)

若いうちこそ細かなことを、本当に細部に至るまで詰めておくべきだというのは驚きです。

渋沢栄一ほどの傑人であれば、夢はでっかく小さなことは気にするな、くらい言ってそうですが、決してそうではないのです。

今、やりたい仕事がもらえないとか、やりたくない仕事ばかりさせられる、自分を正しく評価してくれる人がいない、とは世間でもよく聞く話です。

しかし、本書では以下のように述べられています。

些細なことを粗末にするような大雑把な人では、しょせん大きなことを実現することはできない。

そして、豊臣秀吉の例からよりこの考え方を固めていきます。

千里の道も一歩からであるという続きに、

秀吉が、信長から重用されたのもまさにこれであった。草履取りの仕事を大切に務め、兵の一部を任されたときには、武将としての務めを完全に果たした。だから信長が感心して、ついに破格の抜擢をうけて、柴田勝家や丹羽長秀といった重臣たちと方を並べる身分になったのである。

焦る気持ちを抑えて、まずは小さなことをきちんと正確に、いや、詰まるところ完璧にこなせる地盤こそ若いときに必要なのです。

・大きな志と、小さな志との調和

もちろん、小さなことをきちんとすることは大切だけれども、大きな志をもつことは必要です。

ここでの注意点としては、自分の本質を本気で見極めて大きな志を立てるべきであるという点です。

”そんなん当たり前やんんn”となりますが、ここでは先程の小さなことに気を配ることとも結びついてきます。

大きな志の元に枝葉として、小さな志が成り立っていきます。そして、教えのように小さなことに魂を込めて取り組みます。

しかし、人生は大きなことを成すためにはあまりにも時間はありません。

大きな志を立て、それがもし違って小さなことに魂を込めているならば、それほど時間を浪費することはないのです。

「これなら、どこから見ても一生を貫いてやることができる」という確かな見込みがたったところで、初めてその方針を確定するのがよい。

大きな志を決めるための工程を決してサボるべきではないのですね。

そして、もう少し言葉を足して、

ちょっとした世間の景気に乗じて、うがうがと志を立てて、駆け出すような者も少なくない。これでは到底、最後までやり遂げられるものではないと思う

”まず体験してから”、”まず行動してから”、と体力任せに奔走する前に、じっくりと自分を知りそれに見合う志を本気で見定めろ、と言うんですね。

最後は論語で有名なこの言葉を紹介しています。

「吾、十有五にして学に志す(私は十五歳で学問に志した)

 三十にして立つ(三十歳で自立した)

 四十にして惑わず(四十歳で迷わなくなった)

 五十にして天命を知る(五十歳で天命を知った)」

渋沢は「孔子はおそらく十五歳から三十歳までで志を立てている」と読み解いています。

そう、賢人でもこれほど綿密に時間をかけて、立てていくのがであるのです。

もちろん、人生に回り道は避けられませんし、天命と感じられるほどの志を見つけれる人はごく僅かでしょう。

つまり、賢人でも十五年かけて志を本気で探求して行くのですから、もし、凡人である我々もそうあろうと考えるなら、三十年、四十年という期間を積み上げていくことを念頭に置くのです。

そして、その期間はずっと己を知り、身の程を考え、それに応じてふさわしい方針を決定する必要があるのです。

その前には、考えることを放棄してその場任せに繕うことも、不満を言っている暇も、他者の志に惑わされる暇のないのです。

P.S..

ここでの解釈は私なりの解釈である、ということにご注意ください。

昨今よくある一つのテーマに沿って書かれた自己啓発本と違い、読む人の考え方や背景、はては時代によって理解にも広がりができる本であります。

「その解釈は間違っている!」、「私はこのように解釈したよ」ということあれば、どしどしコメントいただければと思います。

新卒エンジニアの学習ログ 〜android studio CreateProsesse error=2, 指定されたファイルが見つかりません〜

f:id:Nao_RandD:20200927151111j:plain

エラー処理(CreateProcessエラー)

このエラーでドツボにハマッたので、ここに書き残しておきます。

 環境

  • Windows 10
  • Android Studio 4.0.1

概要

Android Gradle Pluginのアップデートか何かをきっかけに、どのプログラムを実行しても下記内容のエラーが表示されるようになりました。

Android Studioエラー:android studio CreateProcess error=2, 指定されたファイルが見つかりません。

私の場合では原因はJDKのクラッシュでした。 JDK Locationで示しているディレクトリ内にjava.exeがなければ、私と同じ原因となっている可能性が高いです。

プロジェクトを開いている状態のAndroid Studio上から、FileOther SettingsDefault Project Structure... と開いてパスの先を把握し、PCの実環境で上記の内容を確認してみてください。

解決方法

JDKを再インストールすることで解決しました。 Android Studioで現在使用しているものと同じバーションを.zipファイルでダウンロードします。 (https://developer.android.com/studio?hl=ja) 解凍したファイル内のJDKに現在のインストール済みAndroid StudioのJDKのパスを通せば完了です。

とりあえず。。。

メモ代わりに書いていますが、これから理解が深まれば書き足していきます。 いつか誰かのお役に立てると嬉しいですね。

初学者から一人前まで、、、

ここでは一人前のプログラマの定義を 「おおよそ自力で様々なツールを活用しながら、ある程度思い通りの実装ができること」 とします。

また、人生においてプログラミングに向き合う時間として、現時点で2000時間取り組めればある程度の基盤が備わると仮定しています。 (言語やツールに依存しない思考法や情報収集能力)

プログラミングは大学で学んで来ましたが、特に根詰めてやってきていないので、ノーカウントとして取り組みます。

現在までの学習時間 およそ360時間 どんどん更新していきます。

新卒エンジニアの学習ログ 〜Androidアプリ開発 MVVMとは?〜

f:id:Nao_RandD:20200927151111j:plain

App Architecture

Codelabsをとりあえず一周、手を動かしながら進めてみました。

その中で、書かれているコードのパターンが、MVVM(Model-View-ViewModel)と呼ばれるアーキテクチャです。 Googleより推奨されているライブラリを用いた実装パターンで、これに従うことでメンテナンス性、可読性に優れたプログラムとして開発を行うことができるとされています。 しかし、普及としては割と最近のようで、Androidアプリ開発者用の参考書ではまだまだ異なるパターンの記述が多い印象です。

MVVMとは?

先述の通りModel-View-ViewModelを表しています。

Model

データを管理する役割を担います。 APIやデータベースを扱う際のDaoやdataクラスに当たります。

View

UIコントローラーの役割を担います。 画面表示や遷移、Fragmentの切り替えやユーザーのアクションを検知するリスナーをここで設定します。 Viewの管理はDataBindingのライブラリによって行っています。 下記のコードではフラグメントでの実装です。

class MainFragment : Fragment() {

    // OnCreateView以外でも参照するため、lateinitで定義しておきます
    private lateinit var binding: MainFragmentBinding

    private lateinit var viewModel: ViewModel

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
                              savedInstanceState: Bundle?): View? {

        binding = DataBindingUtil.inflate(
                inflater,
                R.layout.game_fragment,
                container,
                false
        )
        Log.i("MainFragment", "Called ViewModelProviders.of")

        // viewModelの取得
        viewModel = ViewModelProviders.of(this).get(GameViewModel::class.java)

        binding.sampleButton.setOnClickListener { onClick() }
        
       
        return binding.root
    }

    /** ボタンクリック時に実行するメソッド **/

ViewModel

Modelからデータを取得するViewとModel間の仲介的役割を担います。

とりあえず。。

メモ代わりに書いていますが、これから理解が深まれば書き足していきます。

初学者から一人前まで、、

ここでは一人前のプログラマの定義を 「おおよそ自力で様々なツールを活用しながら、ある程度思い通りの実装ができること」 とします。

また、人生においてプログラミングに向き合う時間として、現時点で2000時間取り組めればある程度の基盤が備わると仮定しています。 (言語やツールに依存しない思考法や情報収集能力)

プログラミングは大学で学んで来ましたが、特に根詰めてやってきていないので、ノーカウントとして取り組みます。

現在までの学習時間 およそ340時間 どんどん更新していきます。

今こそ読もう!「学問のすゝめ」第三弾(正しい実行力)

「学問のすゝめ」とは?

近代日本最大の啓蒙思想家とも言われる福沢諭吉の大ベストセラーです。

国家と個人の関係を見つめ、世のために働くことで自分自身も充実するという生き方を示してくれています。

言わずとしれた名著であり、日本だけでなく世界でも大いに評価されている傑作と言えます。

私は以下の本を参考に読み進めました。日本屈指の教養人として呼び名の高い斎藤孝が現代の人にも伝わりやすい表現で訳してくれています。非常に読みやすいです。

f:id:Nao_RandD:20200922214037p:plain
学問のすすめ 現代語訳

学問のすすめ 現代語訳 (ちくま新書) | 福澤 諭吉, 斎藤 孝 |本 | 通販 | Amazon

正しい実行力をつける

・実行のためには独立が必要

第16編では、正しい実行力について書かれています。

まず、前提として実行とは独立することを目標に行うものだとあります。

独立には二種類あり、

独立には二種類ある。一つは、形あるもの。もう一つは、形のないものである。

これはどういうことかといいますと、形あるものは物質的な独立を指しています。

住む家や日々の食事といった品物について、他人の世話や厄介になることなく自分と自分の家の始末をすることです。

世間一般に言われる自立/独立はたいてい、この形あるものの独立を指すことが多いのではないでしょうか?

しかし、真に重要なのは形のないものの独立です。

形のないものとはつまり、精神的な独立を指します。

社会や世界を前進させるために、己ができることに明確な芯をもつこととも「学問のすゝめ」では解釈を広げることができます。

・物に支配されるべからず

ここでの面白い指摘は、「形のないものの独立」ができていなければ、「形のあるものの独立」すら侵害されかねないということです。

ひとつのことわざから理解を深めていきます。

一杯、人、酒を呑み、三杯、酒、人を呑む

このことわざの指すところは、酒を好む欲望の方が人間の本心を支配し、その独立を邪魔するということです。

付き合いや娯楽として、お酒を飲む方にはギクリと刺さる言葉ですね。

お酒は人生を豊かにする一つの嗜みとしても、人とのコミュニケーションのツールとしても用いることができます。

しかし、それを正しく扱う中身がなければ、それは品物に人が支配されていると捉えられるんですね。

お酒だけでなく、高級品などを買い漁って贅沢三昧することもここに当てはまりますね!

・どうすればいいの?

ここで、福澤諭吉の言わんとすることは、独立とは単にお金を一定の水準以上儲けることでは決してないということです。

いくらお金を儲けても、それを嗜好品にばかり使って今後の自分の中身を育てる糧としていかなければ、形のない独立(精神的独立)が追いついておらずよろしくないと申されています。

ましてやお金があるからと言って贅沢三昧し、その挙げ句に事業が失敗したら、ガラクタと厄介な贅沢グセだけ残り始末に負えないのです。

では、そうならないためにはどうすれば良いのか?それは、、、

心と働きのバランスをとること。つまり、「議論と実行とを両立させていくこと」

これはつまり、人から言葉を借りてばかりで行動しないことや、目的を明確にせずに行動してばかりで結果を出すことへの配慮が欠けていることにならないようになりなさい、ということです。

贅沢をしたいがためにお金をとにかく稼ぐのも結構だが、本当にそうなのかを常に問いかけてお金や品物に支配されないように心がける必要があるんですね。

P.S..

ここでの解釈は私なりの解釈である、ということにご注意ください。

昨今よくある一つのテーマに沿って書かれた自己啓発本と違い、読む人の考え方や背景、はては時代によって理解にも広がりができる本であります。

「その解釈は間違っている!」、「私はこのように解釈したよ」ということあれば、どしどしコメントいただければと思います。

話題の映画「TENET テネット」(ネタバレなし)

 

f:id:Nao_RandD:20200927165025j:plain

TENET テネットhttps://wwws.warnerbros.co.jp/tenetmovie/index.html

話題の映画「TENET テネット」を観て

 昨今、話題のテネットを観てきました!

いやー流石に難しい!

クリストファー・ノーラン監督の作品はいくつか観てきましたが、今回はとても1回では理解しきれないですね。

とりあえず、二回目を来週にまた観に行くことは確定しました(笑)

 

TENET テネット

 「インセプション」、「バットマン」シリーズ三部作、「インターステラー」など、緻密なストーリーと圧倒的な表現力で世界を驚かせてきた映画監督、クリストファー・ノーランの最新作。

f:id:Nao_RandD:20200927165427j:plain

あらすじ

満席の観客で賑わうウクライナのオペラハウスで、テロ事件が勃発。罪もない人々の大量虐殺を阻止すべく、特殊部隊が館内に突入する。

部隊に参加していた名もなき男(主人公)は、仲間を救うため身代わりとなって捕らえられ、毒薬を飲まされてしまう…。しかし、その薬は何故か鎮痛剤にすり替えられていた。

昏睡状態から目覚めた名もなき男は、フェイと名乗る男から“あるミッション”を命じられる。それは、未来からやってきた敵と戦い、世界を救うというもの。未来では、“時間の逆行”と呼ばれる装置が開発され、人や物が過去へと移動できるようになっていた。

ミッションのキーワードは<TENET>。「その言葉の使い方次第で、未来が決まる」。謎のキーワード、TENET(テネット)を使い。第三次世界大戦を防ぐのだ。突然、巨大な陰謀に巻き込まれた名もなき男。相棒ニールと共に、彼は任務を遂行する事が出来るのか?彼の名前が明かになる時、大いなる謎が解き明かされるーー。

 

何が難しい?

テネット TENETの難しさはなんと言っても凝った設定です。

これまでのクリストファー・ノーラン監督の作品ももちろん設定は凝っていたんですが、TENETでは時間が密接に関わり、なおかつ、純粋なタイムトラベルではないところがポイントです。

あまり述べすぎるとネタバレになるので言えませんが、一瞬で時間を飛び越えて過去や未来を変えるようなものではないのです。

「プレステージ」のように作品が進むにつれて、謎が解明されていくわけではなく、この映画独自の時間の捉える設定を明確に理解しないと今何が起きているか全く把握できません(笑)

後半はテンポが早く、ストーリーがどんどん進んで行きます。

それ故に1回目の視聴では、話の伏線やストーリーを掴むのはかなり難易度が高いです。

観た感想は?

f:id:Nao_RandD:20200927165223p:plain

兎にも角にもド迫力の映像は見どころです!

話が掴めなくても、ハンス・ジマーの手掛ける音楽や映像の迫力、演者の鬼気迫る演技のすべてで満足感を与えてくれます!

注意点としては、吹き替えだとセリフが聴こえづらいことです。

迫力満点のシーンでは爆発音や環境音が遠慮なく大音量で流れます。そのため、演者の声が聞き取りが難しいことがあります。

そのため、吹き替えより字幕が圧倒的におすすめです。

私は基本的に字幕派なので大丈夫でしたが、吹き替えで観られた方は映画の難しさに加えて、セリフが聴こえず更に難易度を上げることになります。

さらに臨場感を求めるなら、IMAXでの視聴だとより楽しめると思います!

また二回目の視聴後にも投稿したいと思います!

 

新卒エンジニアの学習ログ 〜Hello Worldから始めよう!〜

本記事の目的

基本的には自分用の学習ログとして投稿していきます。

そのため、誤った解釈や方法をとっている可能性があることは否めません。 ご指摘いただければ修正し、今後の学びで気づくことがあれば随時加筆していきます。

投稿者の背景

2020年度より外資系IT企業で新卒エンジニアとしてのキャリアをスタートしました。

With Covid-19で新卒入社から完全リモート勤務という、 この状況下でプログラマとして成長をしていけるように色んなことを模索しています。

大学でもプログラミングは学んできましたが、実務経験は皆無なのでまだまだわからないことだらけです。

業務に関わる内容や取り組みはもちろんここに書くことはできませんが、自学的に取り組んだことを今後書き留めて行きたいと思います。

f:id:Nao_RandD:20200927151111j:plain

Android アプリ開発

アンドロイドでアプリを開発するのであれば、Android StudioはIDEとして優秀なツールです。

その基礎構築としてGoogleが提供しているCodelabsは非常に有効な学習ツールとなるでしょう。 (https://codelabs.developers.google.com/)

そのため本記事においてもCodelabsにあるAndroid Studioによる、基礎構築講座を通して学習を勧めていきます。 (https://codelabs.developers.google.com/android-kotlin-fundamentals/)

内容は全文英語となっていますが、図も多く使用して説明があるため、特に詰まることなく進めることができると思います。

環境

  • Mac OS Catalina
  • Android Studio 4.0.1

環境構築はこのサイトを参考にしてすんなりできました。 (https://akira-watson.com/android/adt-mac.html)

Hello Worldから始めよう!

やはりプログラミングで何か始めるならこれからですかね。 Codelabs Android Kotlin Fundamentals 01.1: Get started の手順に従って進めれば簡単に表示することができました。

初学者から一人前まで、、

ここでは一人前のプログラマの定義を 「おおよそ自力で様々なツールを活用しながら、ある程度思い通りの実装ができること」 とします。

また、人生においてプログラミングに向き合う時間として、現時点で2000時間取り組めればある程度の基盤が備わると仮定しています。 (言語やツールに依存しない思考法や情報収集能力)

プログラミングは大学で学んで来ましたが、特に根詰めてやってきていないので、ノーカウントとして取り組みます。

現在までの研修を含めて およそ320時間 どんどん更新していきます。

これまで取り組んだ内容

  • C言語

    • 基礎的な文法理解
    • Atmel Studio を使用した組み込み開発
      • データシートから複数のデバイスの組み込み機器の実装
      • I2C通信によるデバイス制御
  • Java

    • 基礎的な文法理解
    • オブジェクト指向
  • Kotlin

    • 基礎的な文法理解
    • Android Studioによるアプリ開発