フルスタックって比較的新しめのWebアプリ開発業界用語で、フロントエンドとバックエンドの両方あわせたことを示す用語だったりしますよね。
私はJSフロントエンジニアですが、この業界で引き継ぎ仕事していると、下手くそなプログラミングによく出会います。
フルスタックって、フロントもバックエンドも中途半端になりがちですから、フロントのスキルは動けばいいレベルで止まってしまっていて、本当に望ましいコードを作るというところまでスキルを深堀りできる人は少ないような気がします。
なんでArrayのこのメソッドしらないのとか、letとconstを区分けできないレベルの開発者も多いです。React/TypeScriptのプロジェクトを改良しているんだから、それなりのスキルが必要だし、それは普通知っているのではないだろうか、という基礎中の基礎の知識がない、知識の偏りをした開発者のコードをよくみかけます。
行単位で git blame で誰が書いたかわかり、それなりの修正が行われているので開発者としてのセンスがない、というわけではなさそうな人でも、動いているコードをなんとなく改良/修正はできるけど、基礎中の基礎も実はわかってませんよ。という状態があるようです。
私はバックエンドの仕事はしないようにしています。分業ですし、そこまで手が回りませんし、フロントだけでも手一杯です。RubyもPythonもPHPすら知りません。
私がRubyとかPythonとかPHPの修正をする仕事だと、ひどいコードを作ってしまうでしょう。
その代わり、フロントでは大体なんでもうまくやりこなします。jQueryとReact混ぜてなんとかしろとか、ReactとUnityまぜてページ切り替えしてもうまくうごかせとか、ある要素をドラッグ&ドロップしてくれとか、まあ、なんとかやったりします。カーナビやECサイトやお絵かきツールやアニメーションとかいろんなもの作りましたが、私はフルスタックではないです。
例えばですがマンションの内装業者にゴミ屋敷の中の片付けなどはお願いしませんよね。すごい高級家具業者に水漏れトラブル対応もお願いしませんよね。
専門外のところでは、機能できないのが職人というものなのではないかと思います。
先のような場面をちょくちょく見かけるので、フルスタックってスキル的にどうなのかな、と、フロントエンド側からみてて、よく思います。
なぜフルスタックとやらになりたいのでしょうか?
なんでも知識を得たいという願望はとても理解できます。私もそうであったほうが望ましいとは思います。ですが、短期で成果を出すという意味では、専業特化という考え方もよいと思いますよ。
自分はプログラマやSEは20年くらいやっていますが、Webアプリ開発は4年くらいです。フルタイムの仕事で半年間でようやくJavaScriptが少しまともに組めるかなという感じでした。今はそれから数年たってずっとJS書いているので結構いい仕事できていると思います。
そういう意味で半年でフルスタックというのは、ちょっとな、という感じがします。名乗るだけなら自由だとは思いますが。
個人で自分が目指すレベルの仕事を取って来て一人で熟せば、出来上がった物がグダグダで有ろうとフルスタックの Web 開発者と言えると思います。最悪サーバーマシンも必要無く市販 PC 上で動作させ1台で運用しても通信制御とかは含まなくても(アクセス制御は個人用 Windows でも可能)、構図出来にはフルスタック相当の技術が必要となります。DB のチューニングとか、サーバーサイドのプログラム構成とかフロントエンドとのデータ通信の仕組みとか利用者界面の設計とか、業務フロー設計とか。
私の場合最初に手掛けようとした時には周りが実現に懐疑的でメーカー系SEとかにリサーチしても全く情報が得られず、逆にそんな事が出来るのかという疑問すら持たれていました。どうしても実現したいと思った私は、開発者としてでは無く営業の支援としてコピー機販売の営業支援として、コピー機を活用した業務の提案をしました。その内容はコピー機とは全く関係が無い業務の進捗管理をするシステム(システムと言うにはおこがましい単一画面のプログラム:ツール)の提案を Web で提供するという商談を成立させるところからスタートしました。その時に使ったのは全て初めて使う言語やツールでした。全くズブのど素人(プログラミング経験はそこそこ)ですから今から見れば良く納品したなと思うものでした。コピー機のオマケ見たいなものですから顧客もシンプルな機能で納得してくれていました。ところがその納品物に対する評価が以外にも良かったのです。そこで「この程度の物でも利用界面によっては評価されるんだ!」と驚きを基にノートブックにその仕掛けをインストール(データーはでもデータを作成)して既存顧客にヒアリングと称して飛び込み営業を行い、徐々に開発案件を受注して行きました。当然技術は劣悪ですから採算が合うレベルでの商談は困難でした。しかしどこかに教育を受けに行けば費用が掛かる上に当時はまともに教育できそうなところも無い状況ですから、採算が合わなくても売上を立てながら勉強と資産の蓄積が出来ると判断し、この手法で徐々に案件を増やし同時にシステムの技術レベルを上げていきました。この時に重要だったのは既存のインターフェイスの有るべき論は完全に無視し、利用者がこの画面に接する時にどう有れば使いやすいと感じるか、この作業の次にはどういった作業が続くのか等を重視して設計したという事です。自分が直接営業をして設計・施工し顧客のリアクションを基にチューニングするというスタイルで現場の操作に対するニーズを体感しノウハウを蓄積して行きました。最終的に業務系 Web システムは業務パッケージの置き換え目指せるレベルになり、操作面・スピード・印刷等がクラサバシステムを凌駕するためにフロントエンド・サーバーサイドの見直しとロジックの共通化、利用頻度の高いモジュールのクラス化とブラックボックス化、開発環境のフォルダー環境の設計とコマンド類の整備と必要なツールの開発を 15 年以上繰り返して現在に至っています。
つまりどのレベルで開発者に成ったと認識できるかによって回答は変わります。私はとにかく実現したい事が有ればまず自分に可能な事は直ぐ手掛けます。人にあれこれ聞いている時点で思いが弱いと感じてしまうのは老人の思い上がりでしょうか。
無理です、あきらめましょう。
以下余談です。
フルスタックの定義も難しいですが、まぁ一旦フロント、デザイン、サーバサイド、インフラ、データベースを一人で大概のweb開発において商用環境で設計構築出来ることとします。
半年では無理な事は火を見るよりも明らかなので以上ですが、加えて例え10年でも難しいかもしれません。
エンジニアが職業として特定の技術領域に携われるという事はある種のガラガラポンであり、特定のキャリアの延長線上を得意領域として一生を終える事になるでしょう。それを1,2年でオペレーターレベルから育ててもらいPMレベルまで順繰りと担当していく、みたいな事は中々想像しにくいです。
という感じですが、まぁ例えば海外大学に学士ないし博士課程も行きながら時間かけてコンピュータサイエンスを学習し、更に在学中にスタートアップで自分に職歴のない技術領域の仕事を受けまくる、みたいな西海岸モンスターエンジニアになる、という回答で良ければそんな方法ならなり得るんじゃでしょうか。
0 コメント:
コメントを投稿