プログラミングに関する情報を中心に、デザイン、ライフハックなどの記事を更新していくブログです。

ユウマのブログ

プログラミング

Rubyを学習して転職後、Javaを扱うことになり苦労したこと

RubyからJavaの学習で苦労したこと
ユウマ
こんにちは、ユウマ(@yuuuma_11)です。

僕は「テックキャンプ」でRubyを学んだ後、エンジニアとしての転職を果たし、現在Java(Spring Boot)を用いたWebの開発案件に携わっています。

Progate, Udemy, 実務, 資格取得(bronze, silver)を経て、今となってはある程度Javaを書けるようになったものの、始めはJavaを扱うことにとても苦戦しました。

当記事では、Ruby → Javaを経験した僕が、Javaをある程度書けるようになるまでに苦労したことをお話していきます。

RubyからJavaへシフトする過程で苦労したこと

悩む猫

Ruby→Javaを扱うことになり苦労したことは、主にこんな感じです。

  • 記述量が多く文法が複雑
  • Ruby on Rails → Spring Bootのギャップ
  • エラー解決が大変
ユウマ
上の項目から、具体的に説明していきます...!

記述量が多く文法が複雑

Javaは、Rubyと比較するとコードがとても冗長で、Rubyのように簡潔に記述することができません。

また、文法自体もRubyと比較するとかなり複雑です。

そのため、単純にRubyよりも覚えることが多く、学習には苦労しました。

以下はJavaとRuby、それぞれの文法を比較したほんの一例です。

ユウマ
コード量や型の定義、プログラムの処理などがRubyとは違うことが分かります。

標準出力

【標準出力 - Java】


import java.util.*;

public class Main {
    public static void main(String[] args) {
        System.out.println("Hello World");
    }
}

【標準出力 - Ruby】


print("Hello World")

ローカル変数と定数

【ローカル変数 - Java】


String hoge = "0";

hoge = 0;  //Javaは静的型付け言語のため、String型に整数を代入するとエラーになる

【ローカル変数 - Ruby】


hoge = "0"

hoge = 0  #Rubyは動的型付け言語のため、String型に整数を代入するとInteger型に変わる

【定数 - Java】


final String GREETING = "Good morning";

GREETING = "Good evening"  //定数は再代入が不可能なためエラーが起きる

【定数 - Ruby】


GREETING = "Good morning"

GREETING = "Good evening"  #Rubyの定数は警告が出るだけで再代入が可能

メソッド定義

【メソッド定義 - Java】


public int calc(int num1, int num2) {
  return num1 + num2;
}

【メソッド定義 - Ruby】


def calc(num1, num2)
    return num1 + num2
end

Ruby on Rails → Spring Bootのギャップ

Ruby → Javaの苦労もありましたが、業務では「Spring Boot」というJavaのフレームワークを扱うため、Ruby on Rails → Spring Bootへシフトする苦労もありました。

ユウマ
知らない用語と技術のオンパレードです...

フレームワークに関しても、言語間の違いと同様、冗長なコードを記述しなければいけません。

そしてSpringは、Railsと比べると構成が複雑です。

URLのマッピングを例にすると、以下のようになります。

【Spring】


@Controller
public class UsersContoroller {
    @RequestMapping(value = "/", method = RequestMethod.GET)
    public ModelAndView showIndex () {
        ModelAndView mav = new ModelAndView();
        mav.setViewName("index");
        return mav;
    }   
}

【Rails】


Rails.application.routes.draw do
    get  '/', to: 'users#index'
end

class UsersController < ApplicationController
    def index
    end
ends

Railsでは、routes.rbファイルでURLのマッピングを一括定義しますが、Springでは各Controller内にURLマッピングを記述します。

さらに、Springは@マークから始まる「アノテーション」と呼ばれるものを頻繁に利用して、構成を組み立てていきます。

この例のように細かい部分が複雑で分かりにくくなっているため、Railsでは多少の知識で「なんとなく」動かせるものをすぐに開発できるものの、Springではそうはいきません。

文法が異なり、コード量も多く、構成も複雑。

Javaがプログラミング初心者にとって、習得難易度の高い言語だと言われている理由がよく理解できました。

エラー解決が大変

エラー解決も慣れるまでは大変でした。

ユウマ
過去形ですが、実際今でも苦労してます...

苦労した具体的な要因としては、以下の2つになります。

  • エラーの種類がRuby (Rails)とは異なる
  • エラー解決のためにググると、難しめ(見づらい)記事が多くヒットする

エラーの種類がRuby (Rails)とは異なる

Java (Spring)で出てくるエラーの内容が異なるため、初めて出くわすエラーに対して、毎回調べなければいけませんでした。

代表的なものでいうと、

  • NullPointerException
  • ArrayIndexOutOfBoundsException
  • ClassCastException

などが挙げられます。

ユウマ
Javaの資格学習や、実務経験を経て、エラーの意味を理解し対策を考えられるようになりました。

エラー解決のためにググると、難しめ(見づらい)記事が多くヒットする

正直、これに一番苦労しているといっても過言ではありません。

Javaでエラーが起きた時、検索して調べてみると、解説が難しく見づらい記事が多くヒットする印象です。

『コード量が多くて文法が複雑 = 解説するのが難しい』という理由から、どうしても文章やコード量が多い解説記事が多いため、RubyやRailsと比べると、調べて理解するまでに時間が掛かってしまうことが多々ありました。

ユウマ
毎日のように調べていることもあって、今では難しい記事にも耐性が付いてきました...笑

最後に

今回は、RubyからJavaへシフトする際に苦労した、3つの内容をお話ししました。

Javaは比較的難しいと言われている言語ですが、プログラミング全体における基本的なスキルや考え方を身につけることができる言語です。

一度Javaのスキルを身につければ、他の言語でも十分に応用が効きます。

これからJavaを始める方や、現在進行系で学習している方はめげずに頑張りましょう!

ユウマ
僕も引き続き、学習を頑張ります...!

-プログラミング

Copyright© ユウマのブログ , 2020 All Rights Reserved.