はてなキーワード: バックエンドとは
何をどう間違ったのか、超大手のITコンサルタント会社に入ってしまいました。
今までは事業会社でマネージャーをやってました。ITツールはそれなりに使っていて、Salesforceも使ってました。
しかし、これまで開発の経験はなく、自分でPythonとPHPを少し勉強したぐらい。基本情報技術者試験も受験したけど落ちました。
ITコンサルタント会社でマネージャーとして稼働していますが、はっきり言って何も分かりません。
ITコンサルタントのマネージャーというのはどういったスキルを持っている人なのでしょうか?
例えば 新規にプロジェクトを導入したいとなった場合見積もりを出さなければなりませんが全くアタリもつけられません。
システム開発の場合どのようなことを知っていれば 見積もりが作れるのでしょうか?
ITプロジェクトの場合どういったシステムを導入するか、という話になると思います。
特にSaaSであれば、どの製品を使うのか?という話になると思いますが、ITコンサルタントのマネージャーというのはどんな製品であろうと、あるていど見積のアタリをつけられるのですか?
各製品のことを知らなければ、開発の難易度もわからないし、どのくらいの期間が必要か、もわからないと思うのですが、どうやって乗り切っているのでしょうか?
それとも、ITコンサルタントのマネージャーというのは、ある程度ジャンルを限定した経験を、テスターなどから積み上げている人達のことなのでしょうか?
正直苦しくて仕方なく、ずっとモヤの中をさまよいながら仕事をしているような感覚です。
要件定義は当然わからない、開発は進捗がどうなってるか、くらいは確認できるのでなんとか出来る。でもその工数が妥当かどうかもさっぱりです。
一体なにを学べば、PoC、要件定義、開発見積、というのが出来るようになるのでしょうか?
こういう話しをすると、まずお前が何したいか?とかそんな話になるのですが、正直やりたいことが何か?というのも無いです。
ITコンサルタントのマネージャーとしてちゃんと稼働出来るようになりたいです。
例えば、GCPやAWSの資格取得を目指したらある程度わかるようになるのでしょうか?
インフラ系? フロントエンド? バックエンド? いまいち違いもわかりません。
なにかの言語を学べばわかるようになるのでしょうか?
一体、私は何を学べばITコンサルタントのマネージャーとして一人前になれるのでしょう?
テスト対象は大小さまざま。OSの保守だったり、アプリだったり。レガシーだったり、モダンだったり。個人だったりチームだったり。GUIだったりCUIだったり。
GでもCでもUIはまた別
結論としては書かないほうがいいと思った。
そういうこともある
全然小さいというか書くためと変更のコストがクソデカなら何か間違ってる
結局、テスト対象も変わってしまうし、プロジェクト設定も変わるし、Jenkinsも変わるし、人間の頭の中も変えないといけない。
まあそれはないだろう
それはデバッグの一環のような
一番よくあるやつ
そこのバランス考えないと
バックエンドのビジネスロジックを担当するがっちり仕様が決まっていて勝手に変更されてはいけないものなんかをやる
悪いね
テストコードを書くと、テストしやすいクラスの実装をするようになる。それは美徳とされているが、実際には直感的でない長くて複雑なプログラムになっている。
例えばテストコードを書くためにDependency Injectionとか言って外から内部を変更できるようにすると
メンバ関数でやるべき処理が実際にはクラスの外にある、となる。最初は面白く感じたり達成感があるかもしれないが、しばらくして見返すと酷い状態だ。
DIはSOLIDに入ってるくらいで基本だし今時のフレームワークなら普通に使うよね
上にも書いたけどパーツがでかいのでは?って「直感的でない長くて複雑なプログラムになっている」とのことなのでやっぱりでかいんだろう
テストコードを書いたほうが早い時もあったけど、トータルで考えれば、テストコードを完全にやめたほうがシンプルなコードで早く完成する。
要件が固まらない、毎週変わるようなのとか、システムが絡むテストでコストが凄く高いもの、UIのマイナーな変更なんかは書かない方がいいけど
テック会社のバックエンドのバックエンドくらいを書くのから、一般企業の内製に移って要件定義的なことからやることになったけど
こんなの外注に出せるほど定義するの無理だろ、世間の人はどうやってんだ、と思ってるわ
ユーザー自体が自分のビジネスプロセス知らねーんだもん、そりゃ無理よ
レガシーと同じようにってレガシーボロボロだから作り直してるんですよね?
データの持ち方もとりあえず入れといて損はないからって損ありまくりなんだよ!とりあえず入れといたらあっという間に手に負えなくなるぞ!
知らんことは知らん言って調べられること。そしてそれに備えて絶えず学習する事
別にフロントからバックエンドまで一人で出来なくても良いしいろんな言語でコーディング出来なくて良い
むしろ色んな分野に興味持って最低限の知識を得るのを嫌わなければいい
もちろん業界にはテックリードな人が多く、そんな人に「エンジニアなのにそんなのも知らないの?」とか言われるかも知れないが気にすんな。その辺言うのは東大や京大卒の学生企業ベンチャーの社長兼エンジニアで上場ゴールで会社潰すような人くらいだ
なのでこれからエンジニア目指す人はとにかく学ぼう。出来ればソースは公式のを。翻訳がカスなの多いけど頑張って読もう。技術書展とか技術ブログはその後。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を使っていたので大丈夫そうだったが、本当に大丈夫かどうかは自信がもてない
システム内容はゴミのような状態だがサービス的には良いので、幹部やプロダクトオーナーからは追加要望が山盛り来ている
開発チームが「稼働が足りない」という理由で断ったので「じゃぁ支援して」ということで自分のところに来たのだが
「申し訳ないが、そもそもそういうレベルに無いし、全て作り直しが必要」
と伝えてもどうやら伝わっていない様子
ちなみに元々の開発チームは過去にもこんな感じでサービス作ってたらしいが売れないので問題になってなかった様子
ぱっと見は動いているように見えるのが厄介なところ
正直逃げたいところではある