はてなキーワード: バックエンドとは
こういう仕事は割とあるんだがなかなかのヤバさだったので紹介したい
ちなみにサービスの内容は非常に良くてユーザーも万単位で付いているらしい
バックエンドはAWS EC2で動作しているがログインアカウントは共通化されていてパスワードを全員で共有している
ユーザーを追加しようとしたら「そのような勝手な行為はセキュリティ上許可されていません」とのこと
本番環境とStagingはインスタンスが分かれているが運用は同じ方法
Staging上で5人ぐらいが作業しているが、ホームの下にそれぞれのユーザーが自分の名前でディレクトリを作って作業している
バックエンド側のシステムは詳細は伏せるが、某システムで動いている
仮にNode.js系だとすると、package.jsonがあってnpm run installでインストールするのだが、普通にインストールしようとするとエラーになる
内容は依存関係で失敗しているのだが、本番も同じソースで動作している
動作させるにはnode_modulesをまるっとコピーして、とのこと
さっきの自分の名前のディレクトリ配下にコピーしてきて、適当なポート番号でサーバを立ち上げれば一応は動く
このため、新しいモジュールを入れようとすると依存関係で失敗するため、便利なモジュールがあってもインストールできないし
セキュリティアップデートも当てることはできない(現にバージョンがすごく古い)
ソースコードはGitHub管理されているがセーブポイント感覚でcommitされているのでコミットログを見ても何が起きているのかさっぱり分からない
おまけにPRも使わずにmainにマージしまくっていてわけがわからない
加えてソースコードはコメントアウトの嵐でどこに何が書いてあるのかさっぱりわからない
データベースはPostgreSQLだが山ほどテーブルがあるのに外部キー依存は入っていないしVIEWも作られていない
まぁ、他にもテーブルを見ていくとアンチパターンのオンパレードで、EAV、ジェイウォークあたりは確認できたしHTMLやSQLが格納されているテーブルも見つけた
ソース上でクエリを作ってAPIを作っているが、ザッと見ただけでもインジェクションし放題の状態になっていた
フロントエンドも詳細は伏せるが、いわゆるReact的なものを利用している
こちらは npm run installでインストールできるし npm run devでちゃんと動く
ただ前述の通りバックエンドはローカルで構築できないのでEC2を利用するしかなく、CORS対応のためのプロキシを自前で用意する必要があった
バックエンド同様にGitHub管理されているが、管理しているだけ
バックエンドは5人ぐらいが利用しているが、ソースコードを編集するのは実質1人なのでコンフリクトはほとんど起こさないらしいが
フロントエンドは5人ぐらいが編集するのでコンフリクトしまくっている
解消するときにデグレすることが日常茶飯事でその都度Hotfixしている
コードもコメントアウトだらけなのに加えて、不必要なコードが大量にあるので可読性が著しく低い
(難しい処理を読み解いて追いかけていったら最終的に使われていない、などが大量にある)
2000行ぐらいあるコードとかChatGPTに突っ込んだら20行ぐらいになる予感がある
また、DBがご覧の状態なので取得されるデータも全然抽象化できておらず、コードが膨れ上がっている
例えばProductの一覧データをサーバから取得して、ユーザーがクリックしたProductをCartに投入するのだが、投入する情報はProductではなく、CartItemにする必要があるし
OrderするときはOrderItemにしてAPIを叩く必要がある
ほとんど同じ情報なのだが微妙に変わっていたりKey名が違っていたりするのでそれぞれ変換する
他にも数え上げればキリがないが、コピペして少しだけ改変している部分などが大量にあってバグがあるのかどうかすら判別できない
DBにHTMLやSQLが入っていると言ったが、調べて見るとDBから取得したHTMLをそのまま埋め込んで表示していたりした
SQLについてはフロントエンド側でSQL生成しており、そのテキストをAPIに送り込んでサーバ側で実行して貰った上で格納とかしていたので
「ここにDROP TABLEとか書けばTABLE消えるんですか?」
と聞くと
とか言われたのでことの重大さを伝えたが、まだ対処できていないようだった
認証等はOAuth2を使っていたので大丈夫そうだったが、本当に大丈夫かどうかは自信がもてない
システム内容はゴミのような状態だがサービス的には良いので、幹部やプロダクトオーナーからは追加要望が山盛り来ている
開発チームが「稼働が足りない」という理由で断ったので「じゃぁ支援して」ということで自分のところに来たのだが
「申し訳ないが、そもそもそういうレベルに無いし、全て作り直しが必要」
と伝えてもどうやら伝わっていない様子
ちなみに元々の開発チームは過去にもこんな感じでサービス作ってたらしいが売れないので問題になってなかった様子
ぱっと見は動いているように見えるのが厄介なところ
正直逃げたいところではある
バックエンドがRDBのCRUDだけだと確実にスマートUIのクソプログラムだけど大丈夫なんか?
高校生が1日でできるようになるようなことは確かにあるけど高校生が1日でできるような仕事は高校生が1日目でもらうような給料しか出ないよ
業務内容に触れない時点で嘘だと丸わかりなんだよな。
普通、どんなフレームワークにどういう手を加えてCICDやってるかって話になるでしょ。
そういう具体性がない時点で給料1000万を信じてもらおうなんて無理無理w
ちなみにrailsが流行ってた2015年頃、railsとruby本体のコミッターを並行しながらC社のバックエンドやってた人が給料1380万で話題になってたね。
でもその人は技術顧問の立ち位置で、シニアリードアーキテクトが800切るくらいだった。わかる?その水準だと技術と組織のマネジメントも自然とやるのよ。
バックエンドのリードだけで1000万出すなんて経営判断はありえないってエンジニアからしたらわかるわけw
まぁこの増田が唯一当ててる所は、三角関数はバックエンドでそこまで使わないって所かな。
あとは全部的外れだねw
最初の数年はWindowsプログラミング、そのうちWebプログラミングにうつり、必要があればミドルウェア等の修正もしていました。
その中で特に印象深いのは、当時存在していなかったDBの接続ライブラリを制作した経験です。
これは私にとって未知の挑戦であり、それを克服することで得られた達成感や、新しい技術の習得が自分の世界を広げてくれる感覚は何物にも代えがたいものでした。
また、自分の会社を立ち上げ、一人でプロジェクトを進めるのもとても楽しかったです。こちらもやったことないことをやるということで、とても良い経験をしたと感じています。
それとは別に、テックリードとして2年、プレイングマネージャーとして半年の経験もありますが、正直マネージメントの世界は自分には合わないと感じました。
そもそも人にお願いすることが苦手であり、自分でやってしまおう、ってなってしまうのです。
基本的に一人で作業するのが好きで、最近の「みんなで開発していきましょう!」みたいなのには辟易しています。
例えば、コードレビューの際にはカッコの位置や変数名など、些細な点での指摘が多く、これには正直疲れてしまっています。
私はコーディングにおいて「完全な正解」は存在しないと信じており、そのため目的の達成(仕様を満たすこと)において多少のバリエーションがあっても良いと考えています。
過去には車でドライブすることを趣味として楽しんでいましたが、最近はその機会も減ってしまいました。
技術的にはWeb系のバックエンドや中規模のインフラ構築が得意分野です。
インフラは本業の詳しい人には敵わないけど、ほどほどの規模なら構築/運用できます。
若い世代の技術者がどんどんと頭角を現し、狭い分野では差を感じることが増えてきました。(その分視野は狭いな、と感じますが)
個人開発してますとかバリバリ一人法人CEOみたいなつよつよエンジニアって出身がソフトウェアエンジニアかバックエンドエンジニアであることが多い。
じゃあそういう人がどうやってフロントエンドを学んだかって、「入門してみた」とかで2ヶ月位で身につけてる。
逆にフロント出身の人が「AWS入門してみた」とかで2ヶ月でマスターしてる例はあんまりない(たまにある)
なのでそういうのを見てるとフロントエンドは片手間で身につけるものという印象が与えられてしまってる
もちろんめちゃくちゃ凝ったデザインのものは別だけど、Wordpressのテンプレートと遜色ないようなものはなんか片手間で作られてるような印象。
最近は最前線から離れててあんまり追えてないけど、現役のときの2008年くらいから10年くらいの間で、仕事のやり方や設計の考え方が大きく変わったIT技術要素で、いまぱっと思い浮かぶのはこんな感じかな。
分野にもよるし、調査して試作した結果自分の業務には採用しなかった技術とかもある。流行ると思って使えるようになったけど流行らなかった技術を入れるとたぶんもっとある。
あと、新機種が出てOSが新しくなったり、ミドルウェアの新バージョン対応、テスト手法の進化もけっこうカロリー高いけどここには書いてない。
「自分はフロントエンド専門でReactしかやらない」みたいに分野を絞れば大分減るけど、その技術が何年持つかわからないから普通はリスクヘッジのために他の技術も齧らざるを得ないし、バックエンドとかの人と議論するのに結局他分野の知識もそれなりに必要。
NoSQL(memcached, Redis, Cassandra)
クラウドアーキテクチャ、XaaS(AWS, Google Cloud, MicrosoftAzure)
CI/CD(Travis CI, CircleCI, Jenkins)
トランスパイラ(Browserify, webpack, CoffeeScript, TypeScript)
型システム(Rust, TypeScript, Haskell)
オーケストレーション(Ansible, Kubernetes, Terraform)
機械学習(Python, MATLAB, 線形代数等数学知識)
SPA(React, AngularJS, Ember.js, Vue.js)
3Dゲームエンジン(Unreal Engine無償化、Unity5)の他分野への普及
GraphQL
機械学習ライブラリ(Tensorflow, PyTorch, Chainer)
Jupyter Notebook
NFT
完全に独立した技術スタックになりつつある、しかし出来る人間が非常に少なく胡散臭い優秀なフリをしたエンジニアが数多くいるように見える。
さらにとっつきやすさから新人も参入しやすくカオスな雰囲気を感じる、自分の周囲を見た感じでも技術スキルは低めの傾向が見える。
トンカチを持ってそれを振りかざすことを目的にしちゃってるような人間が多いように見えるし、そうでない人間はそもそも技術へのキャッチアップが低い傾向にある。
昔からそんなに変化がない、AWSやGCPの運用や設計もやることがある。
WEBアプリケーションのフレームワークが無いと仕事できない、とにかくDBが大事でプログラミング能力はフレームワークの使い方に寄っている。
DBが大事なのでプログラミングスクールだろうが独学だろうが、勘所を掴むのは困難で実務ありきで成長する必要がある。
大量のトラフィックを扱う人は分散のための設計なども心得ているものの、大抵は場当たり的な対処しかしていない。
IaaS登場以前は空気が乾燥した寒い部屋で黒い画面相手に定形作業をしていることが多かった。
昨今SREと呼ばれるようになり地位が向上しつつあるが、業務内容も広がってきておりIaaSの設計能力が大きく問われるようになってきた。
WEBフロントエンドほどではないが、仮想OS、IaaS、コンテナなどそこそこのテンポで技術が進歩している。
この他にも過去の名残だったりIaaSを触る都合、社内SE的な仕事もしたりする、相変わらず深夜対応もある、辛い…
年1回、必ず新機能が出てくるので定期的に技術をキャッチアップ出来る必要がある。
国内に限定すると技術スキルは高めの人が多い傾向が見えるが人間としては癖の強い人が多い傾向も見える。
(ちなみに少ない観測範囲だが海外勢は微妙な技術レベルの人間が多かった。)
給与レンジはピンのほうはそんなに高くないがキリのほうはそこまで低くない。
ここ20年ぐらいで台頭してきたITエンジニアとは別種の雰囲気を持つ印象、詳しいことは分からない。
技術力はあまり重視されない、コミュニケーション能力や簿記などの会計知識が重要視される。
給料は低め。
---
WEBフロント、バックエンド、SRE、アプリあたりは幾つか交差する領域がある。