エンジニアになってゲームを作りたい!エンジニアになってお金稼ぎたい!タワマン住みたい!モテたい!クリエイティブなことしたい!海外在住なのにリモートワークで悠々自適に働きたい!南国住みますエンジニアとしてスローライフを楽しみたい!
そんな未来に目を輝かせているエンジニアの卵は大勢いるでしょう。僕もそうです。
とはいえプログラミングは挫折の多い職種とも言われています。それもそのはず、専門用語や英語、数学、ロジカルな思考、、理系と文系が入り乱れているので挫折しないわけがありません。
>>【残念】転職したいけどスキルがないなら無理ですよ。解決策を教えます
そして、そんな修羅の世界であるプログラミングを無料で勉強しようとしているあなたは、修羅の道をわざわざ重りを背負って歩いているようなものです。非常に回り道です。
なので、結論からお伝えすると、勉強は置いといて、とりあえずエンジニアに就職してください。となります。
ということで、30代未経験の僕がどのようなステップでエンジニアに転職したかをご紹介します。あなたの何かしらのきっかけになれば幸いです。
リクルートエージェント:最大手エージェント。多くの職種と膨大なデータが魅力
LiBzCAREER:女性専用エージェント。キャリア女性の転職をサポート※無料登録でお試し
IT企業への転職やエンジニア志望なら↓
テックキャンプ:未経験から99%の受講生が転職に成功
IT求人ナビ:就職のプロが相談相手・内定が早く取れる・優良企業
ウズキャリIT:既卒・第二新卒・フリーター・ニートの内定率83%以上
レバテックルーキー:新卒でITエンジニアになりたい学生必須
30代未経験からエンジニアに転職するまでにやったこと
30代未経験からエンジニアに転職するまでにやったこと、、
- IT企業に転職する
- エンジニアにジョブチェンジする
以上となります。簡単でシンプルですね。
とりあえずIT企業に転職してください。30代未経験からいきなりエンジニアに転職できるなんて虫の良い話はほぼありません。まずは事務でも広告運用でも保守でも営業でもなんでも良いので、志望するIT企業内であなたが採用されそうな職種に転職してください。エンジニア以外であればどうにかして転職できるはずです。
これは、他の職種を馬鹿にしているわけではなく確率の問題です。
そして頃合いを見て上司に相談しましょう。「〇〇さん、いつかエンジニアになりたいです!」と。良い上司ならすぐにでも次のステップを示してくれるはずなので、頼りましょう。
もちろん上司に頼りきってる場合ではなく、IT企業に転職した時点でプログラミングの勉強をしましょう。社内のエンジニアと仲良くなることができれば尚良いです。僕も社内の仲良いエンジニアから勉強方法やエンジニア事情など聞いたりなんたりで情報収集しています。
プログラミング初心者であれば
- htmlとcss
- progate
- ドットインストール
- paiza
この順で網羅していけばとりあえず十分だと思います。オンラインスクールに通って何十万も払う必要ありません。なぜなら社内のジョブチェンジはその「社内」という強みがあるからです。ただでさえ有益な情報が耳に入りやすいので、できれば上司やエンジニアと仲良くしつつ最適な状況を作っておきましょう。
はい、以上、僕が30代未経験からエンジニアに転職するまでにやったこと、です。以下、プログラミングを勉強してきた記録を載せていますので何かしらの参考になれば幸いです。
プログラミング学習の記録
二人三脚(配列の要素の中で最も差分が小さい要素を取得)(JavaScript)
//入力値を数値化 lines = lines.map(Number); //クラスの人数を取得 let N = Number(lines[0]); //身長を取得 let arrayA = []; for (let i = 1; i <= N; i++) { arrayA.push(lines[i]); } //身長の高い方と低い方を初期化 let taller = 200; let shorter = 100; //身長の高い方から低い方の差分を初期化 let diff = 100; //身長の差分を収束させる for (let i = 0; i < N; i++) { for (let j = i + 1; j < N; j++) { if (Math.abs(arrayA[i] - arrayA[j]) < diff) { //身長の差分を減らしていく diff = Math.abs(arrayA[i] - arrayA[j]); if (arrayA[i] < arrayA[j]) { taller = arrayA[j]; shorter = arrayA[i]; } else { taller = arrayA[i]; shorter = arrayA[j]; } } } } console.log(shorter); console.log(taller);
配列の要素同士の差分を二重ループで比較していき収束させていく
傾斜配点、配列と配列の各要素を掛け合わせる(JavaScript)
//受験者数を取得 let n = Number(lines[0]); //各科目の重みを取得 let weight = lines[1].split(" ").map(Number); //受験生のとった点数を取得 let score = []; for (let i = 2; i < 2 + n; i++) { score.push(lines[i].split(" ").map(Number)); } //各受験生がとった合計得点を配列で取得 let totalScoreArray = []; for (let i = 0; i < n; i++) { //5教科の重みを考慮した合計得点を取得 let totalScore = 0; for (let j = 0; j < 5; j++) { totalScore = totalScore + (score[i][j] * weight[j]); } //受験生の合計得点を配列に追加 totalScoreArray.push(totalScore); } //受験生の合計得点で作成された配列の中から最大の点数を取得して出力 let max = totalScoreArray.reduce((pre, cur) => Math.max(pre, cur)); console.log(max);
二重ループで二つの配列の各要素を掛け合わせる
行の長さが変化する配列の出力(JavaScript)
//数列Mの要素数を取得 let arrayMLength = Number(lines[0]); //数列Mを配列化 let arrayM = lines[1].split(" ").map(Number); //配列Mの各要素を取得 for (let i = 0; i < arrayMLength; i++) { let n = arrayM[i]; //1から順番に出力する配列を作成 let array = []; for (let i = 1; i <= n; i++) { array.push(i); } console.log(array.join(" ")); }
二重ループを使うことで配列の各要素分の長さの出力ができる
1 × 2 × ... × (N-1) × Nを2で何回割れるかを求める(JavaScript)
//要素数を取得 let n = Number(lines[0]); //1からnまでの数を2で割り切れる回数を取得 let count = 0; for (let i = 1; i <= n; i++) { //2で何度も割れる数の場合、現在値を定義し、2で割れなくなるまで処理を繰り返す let now = i; while (now % 2 === 0) { now = now / 2; count = count + 1; } } console.log(count);
配列にすると分かりやすい。数列を配列にし、2で割れる回数を各要素に対して求める。
素数の個数を取得する(JavaScript)
//入力値を取得 let n = Number(lines[0]); //1から入力値までの数値を配列にする let arrayA = []; for (let i = 1; i <= n; i++) { arrayA.push(i); } //素数であればtrue、素数でなければfalseを返す関数を定義する function primeNumber(n) { if (n === 2) { return true; } for (let i = 2; i < n; i++) { if (n % i === 0) { return false; } } return true; } //配列Aの要素から素数を検索してカウントする let count = 0; for (let i = 0; i < n; i++) { if (primeNumber(arrayA[i]) === true) { count++; } } console.log(count - 1);
素数であればtrue、素数でなければfalseを返す関数を定義し、その関数を利用して素数の個数を取得する
掛け算の表作成(JavaScript)
//配列Aの長さを取得 let arrayALength = Number(lines[0]); //配列Aを取得 let arrayA = lines[1].split(" ").map(Number); //配列Bを作成 let arrayB = []; for (let i = 0; i < arrayALength; i++) { for (let j = 0; j < arrayALength; j++) { arrayB.push(arrayA[i] * arrayA[j]); } //配列Bを配列Aの要素数毎に出力 console.log(arrayB.slice(arrayALength * i).join(" ")); }
【処理】二重ループにより新たな配列Bを作成し、配列Aの要素数毎に出力
配列の転置(JavaScript)
//N行K列を取得 let N = lines[0].split(" ").map(Number)[0]; let K = lines[0].split(" ").map(Number)[1]; //入力値からなる配列を作成 let array = []; for (let i = 1; i <= N; i++) { array.push(lines[i].split(" ").map(Number)); } //転置するための関数を作成 let transpose = array => array[0].map( (_, i) => array.map(r => r[i]) ); /* 配列の最初の要素のインデックスを出力 array[0].map((_, i) => console.log(i)); 配列の要素の1行目を出力 array.map(r => console.log(r)); */ /* array = [ [ 1, 2, 3 ], [ 4, 5, 6 ] ] */ /* [ [ 1, 4 ], [ 2, 5 ], [ 3, 6 ] ] */ //新しい配列に代入 let newArray = transpose(array); //配列の各要素を空白で繋げて順番に出力 newArray.forEach(el => console.log(el.join(" ")));
【処理】転置するための関数をmapメソッドを利用して作成
配列の全ての要素を掛け合わせてさらに重複しているものがあれば削除(JavaScript)
//入力値を数値化 lines = lines.map(Number); //配列Aの長さを取得 let arrayALength = Number(lines[0]); //配列Aを作成する let arrayA = []; for (let i = 1; i <= arrayALength; i++) { arrayA.push(lines[i]); } //掛け合わせる数値を初期化 let ans = ""; //配列Aの要素同士を全て掛け合わせる for (let i = 1; i < arrayA.length; i++) { for (let j = 0; j < arrayA.length; j++) { //掛け合わせる数値を結合 ans = ans + String(arrayA[i] * arrayA[j]); } } //全ての要素を掛け合わせた配列を作成 let array = ans.split(""); //重複を削除した配列を新たに作成 let newArray = [...new Set(array)]; //1行ずつ出力 newArray.forEach(num => console.log(num));
【処理】配列Aの各要素を二重ループで掛け合わせ、結合した配列を新たに作成
二重ループで積の最大値を求める(JavaScript)
//配列AとBの要素数を取得 let arrayALength = lines[0].split(/\s/).map(Number)[0]; let arrayBLength = lines[0].split(/\s/).map(Number)[1]; //文字列AとBをそれぞれ数値の配列で取得 let arrayA = lines[1].split(/\s/).map(Number); let arrayB = lines[2].split(/\s/).map(Number); //最大値を初期化する let ans = -10000; //配列Aの各要素に配列Bの各要素を掛け合わせる for (let i = 0; i < arrayALength; i++) { for (let j = 0; j < arrayBLength; j++) { let ab = arrayA[i] * arrayB[j]; //abが最大値より大きい場合、最大値を更新する if (ans < ab) { ans = ab; } } } console.log(ans);
【処理】まず最大値を最小の値に初期化した変数を用意しておき、積の値がその変数を超える度に最大値を更新させる
階段状に数値を出力する(JavaScript)
1
1 2
1 2 3
1 2 3 4
1 2 3 4 5
//配列要素数Nを取得 let N = Number(lines[0]); //配列arrayに要素を追加する処理をN回繰り返す for (let j = 1; j <= N; j++) { //空の配列に1ずつ加算した要素をN(j)個追加していく処理 let array = []; for (let i = 1; i <= j; i++) { array.push(i); } //配列arrayの要素を空白を挟んで連結する console.log(array.join(" ")); }
【処理】まず入力値Nを長さにもつ配列を作成し、さらにその処理を繰り返す
終了の判定(奇数の手前までの要素の和を求める)(JavaScript)
//配列の長さを取得 let arrayALength = Number(lines[0]); //配列Aを作成 let arrayA = lines[1].split(/\s/).map(Number); //奇数が現れる手前までの和を求める let sum = 0; for (let i = 0; i < arrayALength; i++) { if (arrayA[i] % 2 === 0) { sum = sum + arrayA[i]; } else { break; } } console.log(sum);
【処理】配列を2で割る際に0であれば足していき、0でなければfor文を終了させる
二つの配列から同じ値の個数を求める(JavaScript)
//数列の和を取得 let arrayLength = Number(lines[0]); //二つの数列を配列にする let arrayA = lines[1].split(/\s/); let arrayB = lines[2].split(/\s/); //二つの配列を比較して同じ数値があった場合にカウントを1足す let count = 0; for (let i = 0; i < arrayLength; i++) { if (arrayA[i] === arrayB[i]) { count ++; } } console.log(count);
【処理】二つの配列を要素0から比較していき、同じ値があれば1足す
二次元配列から最大値を取得する(JavaScript)
//N入力される二次元配列Aの行数と列数を数値で取得 let arrayALength = Number(lines[0].split(/\s/)[0]); let K = Number(lines[0].split(/\s/)[1]); //配列Aを作成 let arrayA = []; for (let i = 1; i <= arrayALength; i++) { arrayA.push(lines[i]); } //配列Aの各要素を配列化し、全ての数値を結合する let array = arrayA.map(array => array.split(/\s/)); let array_str = array.join(); //結合した文字列を配列化し、その中から最大値を取得する let arr = array_str.split(","); let max = Math.max(...arr); console.log(max);
【処理】二次元配列を全て結合し、Math.maxで最大値を取得する
二次元配列で要素を検索し、行と列を取得する(JavaScript)
//配列Aの要素数numAを数値で取得 let numA = Number(lines[0].split(/\s/)[0]); //配列Aを作成する let arrayA = []; //1がある行を調べるためのカウント変数を初期化する let count = 0; //配列Aの要素を順番に見ていく for (let i = 1; i <= numA; i++) { let arrayA = lines[i].split(/\s/); //何回見たかカウントする count ++; //配列に1が含まれている場合、その要素の要素番号を取得する if (arrayA.includes('1')) { let indexA = arrayA.indexOf('1'); console.log(count + " " + (indexA + 1)); break; } }
【処理】空の配列を作成し、for文で順番に要素を見ていく。includesメソッドを使って1がある場合のみ要素番号を取得し、breakで処理を終了させる。
九九表の作成(JavaScript)
//段を作成する処理 let array = []; for (let i = 1; i <= 9; i++) { array.push(i); } //段の要素に段数をかける処理を繰り返す for (let i = 1; i <= 9; i++) { //各段の要素に各段数をかけて文字列にして出力 console.log(array.map(num => num * i).join(" ")); }
【処理】一つの段を作成する処理を書き、for文で9の段まで繰り返す処理
配列の指定位置に要素を追加する(JavaScript)
//配列Aの要素数を取得する let arrayALength = Number(lines[0]); //配列Aを作成する let arrayA = []; arrayA.push(...lines.slice(1, arrayALength + 1)); // 最後の行を取得し、空白を削除して配列を作成 let arrayLast = lines[arrayALength + 1].split(" "); //追加する要素番号を取得 let num = arrayLast[0]; //追加する要素を取得 let numB = arrayLast[1]; //配列Aの要素番号numに要素numBを追加 arrayA.splice(num, 0, numB); //配列Aを1行ずつ出力 arrayA.forEach(num => console.log(num));
【考察】空の配列にpushメソッドで入力値を入力される順番に追加していく。作成した配列の指定位置への要素の追加はspliceで可能
10個の数値からなる配列から偶数と奇数を判定してカウントする(JavaScript)
let N = 10; let arr = [1,2,3,4,5,6,7,8,9,10]; let count = 0; for (let i = 0; i < N; i++) { if (arr[i] % 2 === 0) { count = count + 1; } } console.log(count + "" "" + (N - count));
【考察】偶数なら数値を2で割るとあまりが0になることを利用
【結果】残念ながら入力値によって変わってしまいます
1日が月曜、2日が火曜の場合、与えられた日付を元に曜日を判定する(JavaScript)
let N = 10; if (N % 7 === 1) { console.log(""月曜""); } else if (N % 7 === 2) { console.log(""火曜""); } else if (N % 7 === 3) { console.log(""水曜""); } else if (N % 7 === 4) { console.log(""木曜""); } else if (N % 7 === 5) { console.log(""金曜""); } else if (N % 7 === 6) { console.log(""土曜""); } else { console.log(""日曜""); }
【考察】取得した日付を7で割った際の余りで曜日を判定する
【結果】残念ながら入力値で結果が変わってしまいます。
足し算と引き算を行った条件分岐(JavaScript)
let arr = [5,3,20]; let N = Number(arr[0]); let A = Number(arr[1]); let B = Number(arr[2]); if (N + A + B === 0) { console.log("YES"); } else if (N + A - B === 0) { console.log("YES"); } else if (N - A + B === 0) { console.log("YES"); } else if (N - A - B === 0) { console.log("YES"); } else { console.log("NO"); }
【考察】if構文を用いて条件を網羅する
【結果】成功
偶数と奇数の数列を奇数の手間で終了を判定し、その和を求める(JavaScript)
let N = 5; let arr = [2,6,4,8,5]; let sum = 0; for (let i = 0; i < N; i++){ if (arr[i] % 2 === 0) { sum = sum + Number(arr[i]); } else { break; } } console.log(sum);
【考察】for文とif文を用いて偶数の和を求め、奇数と出会ったら終了する
【結果】成功
while文による終了判定。N<Kを条件とする間、Nは2倍で更新する。その更新回数Mを求める(JavaScript)
let arr = [4,21]; let N = Number(arr[0]); let K = Number(arr[1]); let M = 0; while ( N < K) { N = N * 2; M = M + 1; } console.log(M);
【考察】while文を用いてN<Kが成り立つ間はNを2倍、Mを1ずつ足していく
【結果】成功
与えられた整数を半角スペース区切りで1行で出力する(JavaScript)
let N = [1,2,3,4,5,6,7]; let a = ""; for (let i = 1; i <= 7; i++) { a = a + i + " "; } console.log(a.slice(0, -1));
【考察】整数を文字列に変換し、for文で出力。出力する際は末尾の空白を削除
【結果】成功
数値を 3 けたごとにカンマ区切りで出力(JavaScript)
console.log(Number(数値).toLocaleString());
【考察】数値に対してtoLocaleStringを使うことで可能