学生エンジニアという生き方
はじめに
はじめましてasmgです. 僕は, 普段学生をしながら都内の某ベンチャーでデータサイエンティストとしてインターンをしている学生エンジニアです. 今回は僕が思う学生エンジニアという生き方, なりかた, スタンスを記事にまとめていければと思います.
※本記事はどこかを代表した意見などではなく個人的な意見に基づくものです.
学生エンジニアとは?
僕がこの記事でいう学生エンジニアの定義は, 学生をしながらエンジニアリングをしている人のことです.
※エンジニアリングはITに限定します.
学生エンジニアに当てはまる人は?
① 自分でプロダクトを作りたくて日々葛藤している学生
② IT領域において自分の気になる分野を探究している学生
(探究は, 研究と捉えても良いでしょう)
③ オープンソースの活動をしている学生
④ 長期インターンの参加もしくは起業などを経てなどでエンジニアをしている学生
など…
逆に学生エンジニアじゃない人は?
① なんとなく, 工学部(情報系)に所属している人
※専門学生もここに入ると思います
② 漠然とITの勉強をしている人
など…
どうして, 同じエンジニアリングをしているのに学生エンジニアと学生エンジニアじゃない人に分けられるのか?
学生エンジニアじゃない人の特徴
1, なんとなく, 工学部(情報系)に所属している人
よく情報系に所属している学生がこんなことを良く口にします.
「授業で習った中で仕様を元にコードに起こすことはできるけど, それを他に応用しようとするとできない…」
2, 漠然とITの勉強をしている人
よくエンジニアにないたいです!っていう学生のツイートでこんなものを見かけます.
ハッシュタグ例
#駆け出しエンジニアと繋がりたい
#プログラミング初心者と繋がりたい
など…
ツイート例
・どんな言語を勉強すればよいんだろう?
・HTML CSS JavaScriptの勉強を開始しました!
・ポートフォリオ作成の為に, Laravel Rails などの勉強をはじめました!
など…
「手段が目的化していないか?」
授業で勉強することやエンジニアリングを学習することそのものが目的になっていませんか?
これらに, 本質的に意味があると思いますか?
エンジニアリングは本質的に,
「問題を解決する為の手段に過ぎない」
学生エンジニアはどんなポテンシャルがあるのか?
学生エンジニアは常に何かの目的を達成する為にエンジニアリングを実践しています.
ここで一つの疑念が生まれそうです.
「僕たちだって目標は持ってるよ!」
例えば,
・エンジニアになりたい!
・大手IT企業に就職したい!
・フリーランスで副業したいんだ!
僕はこれは結果であって目的じゃないと思います.
結局エンジニアリングというのは, 問題を解決する為の手段だと思うんです.
だから, 僕が学生エンジニアじゃない人と定義した人が持っている目標を達成してもその目標の先がないのではないでしょうか?
逆に, 学生エンジニアはどんな視点を持っているのか?
学生エンジニアの視点
本質的に評価というのは, 行いに対しての結果だと僕は思います.
ただ, ここで注意していただきたいのは評価される為に何かをするというのは違うということです.
では次に, 「授業で習った中で仕様を元にコードに起こすことはできるけど, それを他に応用しようとするとできない…」 を解決するためにはどうしたらいいのでしょうか?
エンジニアを目指す学生が学生エンジニアになるまでのステップ
フェイズ1: 「99%のパクリと1%の工夫」
エンジニアリングの世界には, 「様々な先人達の知恵」が転がっています.
極端な話をすれば, あなたが今やりたいと思っていることのほとんどは先人達が何らかの形できっと実践していることでしょう.
だからこそ, 99%はパクリでいいのです. では, 逆にどんなことはダメなのでしょうか?
「99%パクリだけど「知っている」 と 「できる」 は 違う」
ということ
これは, 今でも僕が気をつけている特に皆さんで陥りやすいことなんじゃないでしょうか?
どうして「知っている」だけではダメか? 逆に, 「できる」じゃないといけないのか?
どうしてだと思いますか?
「知ってるだけじゃ活用できないから」
ダメな例(知ってるだけ)
よい例(できる)
「何事も0から100はできない」だからこそ
「0から1を目指す」
良い知識のストックの方法
ここで一つ僕の良いと思う知識のストック方法を書いていきたいと思います.
それは, 「Note」や「Qiita」 などでアウトプットをしていくことです.
上記の図のような知識の習得方法を取るためには, 「先人達の多くの知恵を借りている」ことでしょう.
だからこそ, 僕たちもその「知識を借りて進展させたら, それを共有していくべき」だと僕は思います.
「知識の最大のインプットは, 最大のアウトプット」
「授業で習った中で仕様を元にコードに起こすことはできるけど, それを他に応用しようとするとできない…」を解決するためには, まず授業で習ったことを「自分事」することが大切です.
自分事にして, 応用させるために必要な関連知識を調べて組み合わせて実装してみてください.
フェイズ2: 「99%のストックと1%のアイディア」
ここまでくると, 「エンジニアリングをする学生」から「学生エンジニア」にフェイズが変わってくると思います.
ストックが溜まってくると, 自分のやりたいことを形にするための方法論が蓄積されるからです.
「0から1を目指す」ができたら
「1から2を目指す」〜「99から100を目指す」
その繰り返し
なので, ストックを増やしていきましょう!
ここからは, 少しエンジニアリングチックな話をしていきます.
フェイズ3: 技術選定の重要性
そもそも, 技術選定とは何なのでしょうか?
技術選定とは?
>どんな技術を使うかを選ぶこと
https://applis.io/posts/criteria-for-selecting-technologies参照
その名の通りです.
それでは, どうして技術選定が必要なのかを考えていきたいと思います.
ケーススタディ:
「簡易的なAPIを組みたい」
pythonのフレームワークflaskとdjangoどちらを選定しますか?
※これは, flaskとdjangoどちらが良くてどちらがダメという話ではなく例えです.
flask
>Flask(フラスク)は、プログラミング言語Python用の、軽量なウェブアプリケーションフレームワークである。標準で提供する機能を最小限に保っているため、自身を「マイクロフレームワーク」と呼んでいる
https://ja.wikipedia.org/wiki/Flask 参照
django
>Django(ジャンゴ)は、Pythonで実装されたWebアプリケーションフレームワーク。MVCデザインパターンに緩やかに従う
https://ja.wikipedia.org/wiki/Django 参照
この場合僕なら, flaskを採用します.
では, どうして僕がflaskを採用したかを書いていきたいと思います.
flaskの選定理由
前提条件
flaskでもdjangoでも同じもの作ることは可能だと思います.
この前提条件を持った上で, 考えていきたいと思います.
djangoはどちらかというと高性能なwebアプリケーションフレームワークであると言えます. 一方で, flaskは, 自身をマイクロフレームワークと称しており, 最小限の機能しか持たないフレームワークです.
※flaskは自分で必要な追加機能を自分で取捨選択して選ぶことができる.
djangoは, 確かに高性能なフレームワークですが, 今回は簡易的なAPIの実装の為おそらくdjangoの高性能をいかすことはできないと僕なら考えます.
また, どちらも触ったことのない技術だった場合djangoはflaskに比べて, 学習コストが高いことも考えられるでしょう.
したがって , 僕ならflaskを採用します.
このように何かを作るときには必ず技術選定というフェイズが入ります.
では, どうして技術選定が学生エンジニアにとって必要なのでしょうか?
おそらく, ここまで読んでくださった皆さんはここまで学生エンジニアに求める必要はないんじゃないか?と思う方もいらっしゃると思います.
でも, 僕はこれが「できるか」「できないか」が学生エンジニアであるか否かだと思っています.
「エンジニアの本質は課題解決」
フェイズ1 〜フェイズ2はどちらかというと, 学生エンジニアになるある種土台だと思っていただけると良いのではないでしょうか?
課題解決をする為には, まず土台を固めなければいけないと思います.
一方で, 土台を固めた後に訪れる課題は蓄積したストックをどう組み合わせてシステムを作っていくかという課題になります.
そうした時に, そのストックをいかにして組み合わせていくかは大きな課題になるでしょう.
そんな時に, この技術選定能力が試されるのです.
ここまでできて僕は, 学生エンジニアだと思います.
少なくとも, 僕はこの形を日々実践しています.
最後に…
「守りに入ったらそれは衰退の始まり」
これは, 僕の話になりますが日々エンジニアをしていてここまで技術を習得したからこのくらいでいいだろうと守りに入ってしまうときがあります.
でも, これを思ったときに自分にいつもこれを言い聞かせます.
「守りに入ったらそれは衰退の始まり」
「エンジニアの本質は課題解決」です. きっと技術習得に終わりはないし常に新しい知識を習得してそれを自分の解決したい課題に適応させていくことが必要です.
これをやめたとき「エンジニア」は, エンジニアとしての「価値」がなくなると思います.
ここまで, 学生エンジニアという生き方, なりかた, スタンスについて自分なりに言語化してきました.
この記事が世の中の誰かに刺さってまたその人がエンジニアになっていくことを願い本記事を終了したいと思います.
この記事が気に入ったらサポートをしてみませんか?