はてなキーワード: バックエンドとは
知らんことは知らん言って調べられること。そしてそれに備えて絶えず学習する事
別にフロントからバックエンドまで一人で出来なくても良いしいろんな言語でコーディング出来なくて良い
むしろ色んな分野に興味持って最低限の知識を得るのを嫌わなければいい
もちろん業界にはテックリードな人が多く、そんな人に「エンジニアなのにそんなのも知らないの?」とか言われるかも知れないが気にすんな。その辺言うのは東大や京大卒の学生企業ベンチャーの社長兼エンジニアで上場ゴールで会社潰すような人くらいだ
なのでこれからエンジニア目指す人はとにかく学ぼう。出来ればソースは公式のを。翻訳がカスなの多いけど頑張って読もう。技術書展とか技術ブログはその後。AWSの最強のマニュアルは公式のドキュメントよ。
間違ってもオフショアの開発に丸投げして自分は作ってもらってるシステムがどんなものかも分からず改善も開発側から提案されるのみの日本の7割のエンジニアにはなるなよ
phpの場合、<?php 処理 という具合に書くが、この中身にはhtmlやjavascriptも包含することができてしまう
MVCフレームワークを使わないにしろ、基本的にビューとバックエンド処理は分割しておくべき。
さらにDB処理、ビジネスロジック、プログラム処理と言ったものがあるが、
DB処理はdbhandler専用のモジュールに分けておき、さらにそのモジュールを処理するテーブルごとに分けておいた方が良い(MVCではモデルと言う)
特にビジネスロジックとプログラム処理の区別だが、「商品名にアダルト商品と思わしき文字列があった場合は登録を拒否する」という例外は「ビジネスの例外」であるのに対し、「商品名の文字列がDBで用意されたvarcharの可変文字範囲を超えた」という例外は「技術の例外」であるということを明確に区別するようにコードを書く。
オンラインで活動するということは、自分に何が起こっているのか全く理解できていないことを意味する。
なぜこんな検索結果が出るのか?
俺はプラットフォームやウェブサイトによって常に操作されているという感覚があり、時には陰謀論に駆られることもある。連中は俺を購買へとそそのかす。
エンゲージメントのために最適化されたアルゴリズムは、SNSで人が見るものを形作り、強い感情的反応を引き起こすものを見せて、参加を促す。
しかし、そういうことがわかっていても、大手テクノロジー企業が生活にどのような影響を与えているかを具体的に知るのは困難である。
Googleはユーザーの検索クエリを改ざんして、より儲かるキーワードを含めるようにしている。
Googleはユーザーを結果ページの有利なショッピングリンクに誘導するために、バックエンドで「子供服」のクエリを「NIKOLAI ブランドの子供服」に密かに置き換えている。
Google検索チームとGoogle広告チームが協力して商業クエリを密かに増やし、それによってより多くの広告を発生させることで、収益増加したいらしい。
Googleのビジネスに対する広範な懸念、つまり製品の有用性や楽しさを低下させるような収益化の決定をGoogle が行っているということが、同社に対する政府の訴訟の中心となっている。
ビッグテック製品に関する証拠は逸話や曖昧なものになる傾向があり、事実よりも雰囲気に基づいたものになってしまう。
Googleは広告や独自のウィジェットをフィードに挿入しながら、人々が目にするものを常に微調整してランク付けし、それによってエクスペリエンスを変えている。
こういう仕事は割とあるんだがなかなかのヤバさだったので紹介したい
ちなみにサービスの内容は非常に良くてユーザーも万単位で付いているらしい
バックエンドは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を使っていたので大丈夫そうだったが、本当に大丈夫かどうかは自信がもてない
システム内容はゴミのような状態だがサービス的には良いので、幹部やプロダクトオーナーからは追加要望が山盛り来ている
開発チームが「稼働が足りない」という理由で断ったので「じゃぁ支援して」ということで自分のところに来たのだが
「申し訳ないが、そもそもそういうレベルに無いし、全て作り直しが必要」
と伝えてもどうやら伝わっていない様子
ちなみに元々の開発チームは過去にもこんな感じでサービス作ってたらしいが売れないので問題になってなかった様子
ぱっと見は動いているように見えるのが厄介なところ
正直逃げたいところではある
最初の数年はWindowsプログラミング、そのうちWebプログラミングにうつり、必要があればミドルウェア等の修正もしていました。
その中で特に印象深いのは、当時存在していなかったDBの接続ライブラリを制作した経験です。
これは私にとって未知の挑戦であり、それを克服することで得られた達成感や、新しい技術の習得が自分の世界を広げてくれる感覚は何物にも代えがたいものでした。
また、自分の会社を立ち上げ、一人でプロジェクトを進めるのもとても楽しかったです。こちらもやったことないことをやるということで、とても良い経験をしたと感じています。
それとは別に、テックリードとして2年、プレイングマネージャーとして半年の経験もありますが、正直マネージメントの世界は自分には合わないと感じました。
そもそも人にお願いすることが苦手であり、自分でやってしまおう、ってなってしまうのです。
基本的に一人で作業するのが好きで、最近の「みんなで開発していきましょう!」みたいなのには辟易しています。
例えば、コードレビューの際にはカッコの位置や変数名など、些細な点での指摘が多く、これには正直疲れてしまっています。
私はコーディングにおいて「完全な正解」は存在しないと信じており、そのため目的の達成(仕様を満たすこと)において多少のバリエーションがあっても良いと考えています。
過去には車でドライブすることを趣味として楽しんでいましたが、最近はその機会も減ってしまいました。
技術的にはWeb系のバックエンドや中規模のインフラ構築が得意分野です。
インフラは本業の詳しい人には敵わないけど、ほどほどの規模なら構築/運用できます。
若い世代の技術者がどんどんと頭角を現し、狭い分野では差を感じることが増えてきました。(その分視野は狭いな、と感じますが)