Slide 1

Slide 1 text

JAVAあるある and factory株式会社 江州俊亮

Slide 2

Slide 2 text

自己紹介 • 名前:江州 俊亮 • 所属:and factory株式会社 • 職種:サーバサイドエンジニア – アプリのバックエンド – 社内向けシステムの構築 • RPG:1年 • Java:10年 • Ruby:2年 • Go:5ヶ月(←今ココ!) • 研究とかで触ったもの:R言語,python

Slide 3

Slide 3 text

一番長くやってたJavaについて あれこれ語るとです。

Slide 4

Slide 4 text

まずは言語比較(一部私見) • JAVA,Go,Rubyでよくある比較 JAVA Go Ruby 生産性 △ ○ ○ 経験者採用容易性 ◎ × △ 実行速度 ○ ◎ △ コンパイル速度 × ◎ ◎ 分散処理 △ ◎ ○ コーディングの統 一容易性 ◎ ○ △

Slide 5

Slide 5 text

Javaのメリット • なんといっても経験者の豊富さ。 • コーディングガイドラインを厳格に決めればある程度の統一 性も担保され開発プロジェクト途中からでも参入しやすい。 • 以下のように流動的に参画メンバーが変わるようなプロジェ クトではJavaが圧倒的に優位(逆にGOは人員確保が超ハード。 絶賛募集中!!) →新規プロジェクト発足 →人が足りない →新規採用、協力会社から人員確保 →開発スタート

Slide 6

Slide 6 text

プログラミング言語ランキング TIOBE社が発表するプログラミング言語ランキングでは、2001年のリリース以来、2015年を除い て、Javaが常に第1位を維持しています。このことからも、世界的にJavaのニーズは安定して高い ことが伺えます。

Slide 7

Slide 7 text

Javaのデメリット •単純にコード記述量が多い •コンパイルが遅い →前職のとあるWebサービスではモンスターボリュームだった為 ローカルPCで普通にビルドすると1時間近くかかるという事態に。 (_□_;)!!

Slide 8

Slide 8 text

実際にjavaを書いてみる 整数nが与えられたとき、0からnの間の全ての数を書くのに必要とされる「1」の数を 返す関数があります。たとえば、『f(16)=9』になります。また、『f(1)=1』に注意。 『f(n)=n』となるような、2番目に大きいnを求めなさい。 某G社様入社問題

Slide 9

Slide 9 text

実際にjavaを書いてみる package test; public class SampleForLt { /** * @param args */ public static void main(String[] args) { int ret =0; for(int i=1;i<9999999;i++){ ret +=("(σ´・∀・`)σ" + i + "乁( •ω•乁)").split("1").length-1; if(i <= ret){ if(i != 1) { System.out.println(ret); break; } } } } } 出力結果:199981 整数nが与えられたとき、0からnの間の全ての数を書くのに必要とされる「1」の数を 返す関数があります。たとえば、『f(16)=9』になります。また、『f(1)=1』に注意。 『f(n)=n』となるような、2番目に大きいnを求めなさい。

Slide 10

Slide 10 text

実際にjavaを書いてみる package test; public class SampleForLt { /** * @param args */ public static void main(String[] args) { int ret =0; // いくつでヒットするか分からないのでとりあえず大きい数を入れておく。本来なら入力からとれるようにするべきだが今回は簡単の為割愛 for(int i=1;i<9999999;i++){ // 顔文字は無駄です。絶対にやめましょう。 // 例えばi=1の時split(“1”)で分割すると "(σ´・∀・`)σ1乁( •ω•乁)"が"(σ´・∀・`)σ1”と”乁( •ω•乁)”の2つの配列になる // そのlength-1をとればiに含まれる1の数を導ける。 ret +=("(σ´・∀・`)σ" + i + "乁( •ω•乁)").split("1").length-1; if(i <= ret){ if(i != 1) { // 2番目に大きいnを求めよとのことなのでi=1は除去 System.out.println(ret); break; // 2番目に大きいnを求めよとのことなので3番目以降は不要のためbreakして処理を終わらせる。 } } } } } 解説

Slide 11

Slide 11 text

実際にjavaを書いてみる 10未満の自然数のうち、3もしくは5の倍数になっているものは3, 5, 6, 9の4つがあり, これらの合計は 23 になる。同じようにして、1000 未満の 3 か 5 の倍数になってい る数字の合計を求めよ。 よくある問題

Slide 12

Slide 12 text

実際にjavaを書いてみる package test; public class SampleForLt2 { /** * @param args */ public static void main(String[] args) { int total = 0; for (int i = 1; i < 1000; i++) { if (i % 3 == 0 || i % 5 == 0) { total += i; } } System.out.println(total); } } 出力結果:233168 10未満の自然数のうち、3もしくは5の倍数になっているものは3, 5, 6, 9の4つがあり, これらの合計は 23 になる。同じようにして、1000 未満の 3 か 5 の倍数になってい る数字の合計を求めよ。

Slide 13

Slide 13 text

実際にjavaを書いてみる package test; public class SampleForLt2 { /** * @param args */ public static void main(String[] args) { int total = 0; for (int i = 1; i < 1000; i++) { // 1から999までループさせて3又は5で割った時の剰余が0の時totalに足しこんでいけば良い。 if (i % 3 == 0 || i % 5 == 0) { total += i; } } System.out.println(total); } } 解説

Slide 14

Slide 14 text

実際にjavaを書いてみる package test; public class SampleForLt2 { /** * @param args */ public static void main(String[] args) { int total = 0; for (int i = 1; i < 1000; i++) { if (i % 3 == 0 || i % 5 == 0) { total += i; } } System.out.println(total); } } package test; import java.util.stream.IntStream; public class SampleForLt2 { /** * @param args */ public static void main(String[] args) { int total = IntStream.range(1, 1000).filter(i -> i % 3 == 0 || i % 5 == 0).sum(); System.out.println(total); } } java8から使えるラムダ式で書くと。。 1ステップで書けちゃう!(゚ロ゚屮)屮 でも慣れないとパッと見何してるか分かりにくいというのはありけり。。 私はjava7が長かったので左のが読みやすくて好きだったりします。

Slide 15

Slide 15 text

Javaで良く言われてるやつへの所感 ■学習コストが高くな~い( ,,`・ ω´・)? これは仕方がないのかなと思います。 Javaは、ある程度プログラミングの全体像を理解していないと システム設計がスムーズにできない為知識の幅と深さがより 求められるイメージです。 ■生産性が低くな~い( ,,`・ ω´・)? これについてはそうは思いません。確かに記述量は多めですが その分標準機能やIDEでできることが充実しているし、Webでの 情報量はぶっちぎりでNo1なので記述量=生産性とはならない かと思っています。

Slide 16

Slide 16 text

最後に ■言語に関していえばトレンドもあるし色々触ってみるのが良いと 思っています。 なんでこの言語○○がないんだよ~ヽ(`Д´#)ノ とか思いながら 触ったことない言語で開発するの結構好きです(*´∀`*) Enjoy the work!!

Slide 17

Slide 17 text

ご清聴 ありがとう ございました