みなさまこんにちは。Faber Company 新規開発ラボチームの高田です。
タイトルにもあります通り、
- 文系卒(中国語専攻)
- ついこの間まで新卒1年目(執筆日基準で4週間前)(投稿日基準で7週間前)(K先輩のreviewが遅れたせいです)
という、開発チームの末っ子です。
今日はそんなプログラミング初心者の私が、開発チームの優しくて素晴らしい先輩たちにうまいこと乗せられて(?)、JavaとSQLをかじった話をお届けします。
「文系卒だけど開発に興味がある」
「プログラミングを勉強してみたいけど、何から始めればいいかわからない」
「Faber Companyの開発チームの末っ子がどういうヤツなのか知りたい」
という方は、割と楽しんで読んでいただけるのではないかなと思いますので、ぜひ最後までお読みください。
センパイにやる気スイッチを押されちゃった
なぜ文系卒の私が、JavaとSQLに手を出そうと思ったのか。
一言で言えば、「センパイにやる気スイッチを押されちゃったから」です。
ミエルカシリーズの各ツールは、もちろん複数の言語で書かれていますが、基本的にはJavaで書かれています。 そして、お客様がいつどんな操作を行ったのか、そのデータを引っ張り出す際には、SQLを用います。
つまり、新機能開発や不具合解消を行う上で、JavaとSQLがわかっていると、エンジニアメンバーと圧倒的に話がしやすいのです。
ただ、私はプログラミングのプの字も知らないような超初心者だったので、JavaやSQLに手を出すのはハードルが高いな〜〜と思っていたのです、、、が。
ある日、開発チーム内でのおしゃべりにて、こんな会話が勃発します。
Sセンパイ
「高田さんもJavaとかSQLとかやればいいんじゃないすか?読めるようになるとだいぶコミュニケーションコスト減りますよ」
Kセンパイ
「それはめっちゃたすかる、そうすれば最強になれる、大丈夫そんなにむずかしくないから」
Aセンパイ
「高田さんJavaやるんですか?すごいですね〜〜えらいですね〜〜」
今よりもコミュニケーションがずっとラクになって?しかもそんなにむずかしくなくて?ちゃんとお勉強したら最強になれる?
、、、、そんなに言うならやってみようかな、JavaとSQL。
とまあ、こんな感じでやる気スイッチを押されちゃったわけです。ただただ、末っ子をヨイショしてくれる優しい先輩方に乗せられて、JavaとSQLを勉強しようと思い立ったのです。
プログラミングスクールに通うだけのお金はない、本は実践のハードルが高い
さて、JavaとSQLを勉強しようと決心した高田。どうやって勉強すれば良いのか、調査を開始します。
検索したり、エンジニアの友人に聞いたりした結果、次の3つの学習方法に絞られました。
- プログラミングスクールに通う
- 本で勉強する
- 学習サイトで勉強する
この中で、プログラミングスクールは早々に候補から外れました。
そもそもプログラミングスクールは、通うのにウン十万は必要です。新卒でそんなに貯金もない中、そこまでのお金は出せません。
また、仮に会社にお金を出してもらえたとしても、平日仕事終わりのクタクタな状態で授業を受けるのでは、絶対に身につきません。私にそんな体力はありません。
これらの理由から、プログラミングスクールは諦めることにしました。 (プログラミングスクールを運営されている皆さん、ごめんなさい)
次に、本で勉強する方法。
これは自分のペースで進められる上、圧倒的に安価に済むのですが、実践のハードルが高くなってしまうのが難点でした。
JavaやSQLの本では、実践のセクションになると、必ずと言っていいほど「まずは開発環境を構築してみましょう」という文言が入っており、文系卒の私は、
開発環境を構築する?なんじゃそりゃ?私にできるんか??
と思考停止に陥ってしまったのです。
もちろん、JavaやSQLを使って、実際にサービスを作るのが目標の方は、自分で開発環境を立ててみる方が良いと思います。
しかし、私の目標はあくまで「エンジニアとのコミュニケーションコストを減らす」ことなので、開発環境を構築するほどガチじゃなくても良いのです。
そうして最後に残ったのが、学習サイトで勉強する方法。
今思い返しても、私にとってはこの方法が最も最適だったと思います。
様々な学習サイトから、自分が使うものを選ぶ基準として、以下の3つの基準を設けました。
- 日本語で書いてあること
- 実装環境を立てなくていいこと
- サブスクが安価なこと(できれば無料お試し期間が長ければ長いほどいい)
この条件に当てはまるのが、Progateでした。
※安心してください、決してProgateの回し者ではありません。お金もいただいていません。
こんな経緯で、私はProgateさんに、JavaとSQLを教えていただくことになったのです。
Java学習の思ひ出
Progateにログインし、Javaの最初のレッスンをスタートした高田。ここで早速、最初の関門にぶつかります。
①;つけ忘れ常習犯
ご存知ない方のために簡単に説明すると、Javaは、コードを1文書き終わるたびに;(セミコロン)をつけます。
例えば、これは「1+1を計算して表示せよ」的な指示なのですが、こんな感じで文末に;をつけるのです。
int result = 1 + 1;
System.out.println("1 + 1 = " + result);
この;がないと、コードが終わった(=指示がこれで全てである)とみなされず、計算結果が返ってきません。
しかしこの;、これがまーーーあ忘れやすいのです。
よっしゃこれでどうだ!と思って確認ボタンを押しても、コンソールでエラーが返ってくる。それでよくよく見てみたら;をつけ忘れていた、ということが数えきれないほどありました。
;をつけなくても良いKotlinがいかに画期的なのか、ちょっとわかった気がしました。(Kotlinの凄さはそこじゃないって突っ込まれそうですが)
②データ型 is 何
世の中のデータにはさまざまなものがあります。数値データのこともあれば、文字データのこともありますよね。
Javaでは、こうしたデータの種類ごとに、データ型というものが決められています。コードを書く時に、そのデータ(厳密には変数)が「整数なのか」「小数なのか」「文字列なのか」といった情報を明記する必要があるのです。
例えば、整数のデータ型intを使って、次のようにコードを書いたとします。
int a = 1;
int b = 2;
int result = a + b;
System.out.println("1 + 2 = " + result);
これは「aを1、bを2とした時に、a+bの値を出してください」という指示です。 この時、1と2は整数として扱われるので、a+bの値は3になります。
ところが、同じ「aを1、bを2とした時に、a+bの値を出してください」という指示でも、データ型が文字列Stringだった場合は、話が異なります。
String a = "1";
String b = "2";
String result = a + b;
System.out.println("1 + 2 = " + result);
この時、1と2は文字列として扱われるので、a+bの値は12になります。1という文字と2という文字を並べてください、という指示になるのです。
このデータ型、覚えるのがまず大変だし、求められている出力のためにどのデータ型を使えば良いのかを判断するのも難しいし、いつの間にか知らんデータ型が出てきたりして、結構躓くことが多かったです。
③条件分岐楽しい
条件分岐とは、「Aの時はこう、Bの時はこう」のように、条件によって出力する内容を分けるものです。
例えばこれは、年齢が20歳以上の時は「あなたは大人です。」と出力させ、年齢が20歳未満の時は「あなたは未成年です。」と出力させるコードです。
if (age >= 20) {
System.out.println("あなたは大人です。");
} else {
System.out.println("あなたは未成年です。");
}
この条件分岐の仕組みがわかっているだけで、要件定義や実装依頼、デバッグの時に、「この条件の時はこのエラー文、この条件の時はこのエラー文」のように、解像度をグッと上げて指示できるようになります。依頼する時に、「なんか私エンジニアっぽいこと言ってる、、、!」と楽しい気分になれるのでおすすめ(?)です。
SQL学習の思ひ出
Javaでお腹いっぱい、、、と言いたいところですが、忘れてはいけないものがあります。そう、SQLです。
実は、JavaとSQLは同時並行で学習を進めていたのですが、SQLはSQLで、なかなか気難しい言語(※高田調べ)でした。
①FROMとSELECTがごっちゃになる
SQLはデータベースからデータを引っ張ってくる言語なので、「このテーブル(表)のこのカラム(列)にあるデータをとってきてください」と指定する必要があります。そんな時に使うのがFROMとSELECTです。
例えば、社員というテーブルから、名前と年齢を引っ張ってきて欲しい場合は、以下のように指示します。
SELECT 名前, 年齢 FROM 社員;
こうすることで、「佐藤さんは25歳、橋本さんは30歳」といった、社員の名前と年齢の一覧を出すことができます。
ところがこのFROMとSELECT、最初は良かったのですが、後になるにつれて「あれ、どっちがどっちだっけ、、、」となることが増えていきました。
自分でもなぜここがごっちゃになるのか未だに言語化できていないのですが、おそらく、どちらも「ここからデータをとってくる」という指示だからこそ混ざってしまったのかもしれません。
もしSQL初学者の方で、同じようにFROMとSELECTがごっちゃになった方がいらっしゃったら、その方に「あなただけじゃないよ」と全力で伝えたいです。
②NOT迷子になりがち
SQLにおいては、「~ではない」という条件を指定するときにNOTを使います。
例えば、営業部ではないメンバーの名前と部署を抽出したいときは、このように指示します。
SELECT 名前, 部署 FROM 社員 WHERE NOT 部署 = '営業部';
一見普通に見えるのですが、実際に1から自分で書いてみると、「あれ?NOTってWHEREの前だっけ?後だっけ?」と、NOTが迷子になることが結構ありました。おそらく、SQLを学習する上で不正解になってしまった問題の3割くらいは、NOTの位置が間違っていたことが原因だった気がします。
③語順意味わからん
私にとって、おそらくSQLで最大の関門だったであろうポイント、それはズバリ「語順」です。
例えば、先ほど出てきた、社員というテーブルで、営業部ではないメンバーの名前と部署を抽出したいときのコード。
SELECT 名前, 部署 FROM 社員 WHERE NOT 部署 = '営業部';
なんで!!!最初に!!!SELECTが来るの!!!???WHY!!!!?????
普通に考えたら、「このテーブルの、営業部でないメンバーの、名前と部署を出してください」っていう順番になりません?私だけ? (ちなみにこの記事はSセンパイにreviewしてもらったのですが、「SQL の語順は英語の命令文をもとに決められているので最初に動詞がきます」って言われました。それで「はいそうですか」って理解できるエンジニアってすごい)
この語順が私どーーーーしても苦手でした。未だにわかんないです。未だにわかんないので諦めてChatGPTに「正しいですか?」っていちいち聞いてるくらいです。AIは便利ですね。
SQLで語順を間違えて苦しんでいる皆さん、世はAIの時代です。とことんAIに聞きましょう。それでDBからエラーが返ってきたらそれはAIのせいです()。
かじるだけでは何もできない。でもかじるのは大きな1歩。
そんなこんなで、JavaとSQLをかじったわけですが、
結論、かじっただけなので、何も進化してないです。
先日、「SQLがわかるから」ということでデータベースを閲覧する権限をいただいたのですが、弊社ツールのDB構造が想像の斜め上をいく複雑さで、SQLを書こうにも欲しいデータがどこにあるのかがわからず、手当たり次第先輩方に聞いて回る羽目になっています。SQLを書くところまで辿り着けてない。困った。コンナハズジャナカッタ。
結局、プログラミングができるようになっても、その周辺知識がなかったら何もできないということを、身をもって痛感しました。
ただ、「かじるのは大きな一歩」だということは確かです。
特に、文系出身だったり、プログラミングに縁のない生活を送ってきた方にとって、プログラミングを始めるのはかなりハードルが高いと思います。
だからこそ、「かじったことがある」「どんなものか雰囲気わかる」だけで、それはかなり大きな一歩なのです。
新機能の要件を考えたり、不具合解消の際に「ここってこうなってるんだっけ?」と確認するときに、その言語の雰囲気がわかるだけで、「あ、あのパターンも確認しておいた方がいいかも」と思いつくようになり、解像度がグッと上がります。
また、「ちょっとだけどわかるよ、こんな感じだよね」と伝えることで、エンジニアとの距離が縮まり、色々なことを教えてもらえるようになります。 (うちのエンジニアは布教精神がすごいので、知識皆無でも色々教えてくれるのですが笑)
もし、このブログを読んでくださった方の中で、「プログラミングやりたいけどハードル高いな」「ちゃんと身につくかどうか不安だな」と思っている方がいらっしゃったら、ぜひチョットでもいいので、その言語を「かじって」いただきたいです。
Faber Companyで、色々なものをかじってみませんか?
ここまで、私がJavaとSQLをかじった話をしてきましたが、Faber Companyは、色々なものをかじることができる会社です。
かく言う私も、開発タスクに関わらず、メルマガや広告LP、営業資料、プレスリリース、セミナーなど、ありとあらゆるものをかじりまくっています笑。
私と一緒に、色々なものをかじってみたい方は、ぜひ一度Faber Companyまでご連絡ください。(高田のブログを読んだ、と言ってくれたら泣いて喜びます)
カジュアル面談はこちらからお申し込みいただけます。
また、他の開発メンバーも随時ブログを更新していきますので、ぜひ他の記事も読んでみてください。
以上、Faberの開発チームの末っ子、高田からお送りしました!