こんにちは、ユウマ(@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とは違うことが分かります。
標準出力
import java.util.*;
public class Main {
public static void main(String[] args) {
System.out.println("Hello World");
}
}
print("Hello World")
ローカル変数と定数
変数の違い
String hoge = "0";
hoge = 0; //Javaは静的型付け言語のため、String型に整数を代入するとエラーになる
hoge = "0"
hoge = 0 #Rubyは動的型付け言語のため、String型に整数を代入するとInteger型に変わる
定数の違い
final String GREETING = "Good morning";
GREETING = "Good evening" //定数は再代入が不可能なためエラーが起きる
GREETING = "Good morning"
GREETING = "Good evening" #Rubyの定数は警告が出るだけで再代入が可能
メソッド定義
public int calc(int num1, int num2) {
return num1 + num2;
}
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のマッピングを例にすると、以下のようになります。
@Controller
public class UsersContoroller {
@RequestMapping(value = "/", method = RequestMethod.GET)
public ModelAndView showIndex () {
ModelAndView mav = new ModelAndView();
mav.setViewName("index");
return mav;
}
}
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を始める方や、現在進行系で学習している方はめげずに頑張りましょう。