はてなキーワード:C/C++とは
Cline利用開始。
「ValueObjectとしてカプセル化されていないロジックがったら見つけて、ValueObjectとしてリファクタリングして」とお願いしたらあっという間に仕上げやがった。しかも妥当な構造。
Clineなんやこれやばい。—ミノ駆動 (@MinoDriven)March 5, 2025
人が作るからValueObjectなんて概念が必要ってところまで行ってないのか
AIにやっちゃいけないってルール付けして作らせればこんな無駄な作業コストが発生するものなんか不要
そもそもC/C++とかだとinline化されるようにする部分だから出力されるオブジェクトコードは素で使ってるのとさほど変わんないんですよね
ほんと人のための制約
18歳のころ、大学はいってゲーム業界目指してたんだけどさ、PS1が高校の時だったかに出てC言語で開発されてるとかいう話も雑誌なんかで読んで
業界がC/C++の採用に動いてると書かれてて、だから大学でC言語頑張ってたんだけど
そしたら当時の2chに
お前らは大変だなこんな時代にゲーム業界目指すなんて、俺らのころは雑誌に載ってるBASICをマネしてたらヒーローだったよ楽な時代だった
って書かれてたんだよ、まぁその時は何とも思わなかったけど
そんで就職のときになってけっきょくWEBにしたんだけど、今同じ気持ちだな
俺らのころは糞セキュリティガバガバなPHPとHTMLとCSSで飯食えたけど
いまはReactとかでやらないといけないのかとかな
ポートフォリオもなんか半年頑張んないとこんなの無理だろみたいなレベルのものばかり
すげーわさいきんの若者は
こういう大げさに言い出すやつだいたいWeb系
C/C++やRustでUIフレームワークあたりをAIだけで作れるようになったら変わると思うけど
結局のところわかってる人が出力されたものを見てチェックする工程が現状存在するしハッカソンに行くようなやつらが全く無知なわけないだろって感じだわ
生成AIのハッカソンを開催しましたが、もうプログラミングで食べていくのは無理だと思います。とんでもない速さでとんでもないクオリティのものがどんどん出てきています。今後はAI前提のAIプログラマなど多くの人が職を失って新しいAIに置き換えられていくのを肌で恐ろしく感じました。— YuichiroMinato (@MinatoYuichiro)February 15, 2024
C/C++で仕事のコードを書くといったような直接的な有益さよりも、アルゴリズムだのアーキテクチャだのと言ったコンピュータの基礎をC/C++のプログラミングを通してしっかり身に付けられるという利点の方が大きいと思うぞ。
各分野ではそれぞれ数年に一度くらいかも知れんけど、一人の人間が同時に関わっている分野がいくつもあるわけで、それらの掛け算で結局はもっと頻繁に新しいことに対応していく必要があるでしょ。
たとえばGitHub自体の変化はそれほどでもなくても、まさかGitHubだけを使って仕事をしている人がいるわけじゃないだろうし、それは言語にせよ何にせよ同じなわけで。
言語がPHP →Perl →Ruby →Python と変わるのと、SVN →GitHub の変化と、AWSとかのクラウド環境の変化と、Dockerなどの仮想環境の変化と、OSやエディタの変化と、そういうのが並行して起こっているわけで。たとえばC/C++ をずっとやっている人だって規格や処理系自体の変化についていかなくちゃいけないし。
横だが、そういうのって「はてな」の見出しを見てるだけで目に飛び込んで来ないか? JavaScript関係だけでもこの20年間にどれだけ変化があったことか。他にもweb系で使われている言語の盛衰やフレームワークの入れ替わりとかだけでも凄いじゃん。今やPerl それ何?状態だろうし、GoにSwiftにRustにCotlinにScalaにWebAssemblyにと次から次へと新しいものが出て来てるしバージョンアップでの変化もあるし。C/C++だけでもちゃんとついて行くには勉強し続けないといけないし。開発手法もアジャイルだスクラムだなんだと喧しいし、デバッグの手法関連もそうだし。今やデバッグドリブンで自動化でとかが当たり前っぽいし。
けどいくつかツッコミ入れときたいところがいくつかあるのでツッコんでおく。
増田がストレスフリーにプログラムを書けるようになることを祈る。
C/C++でもclang-formatterとか使ってたら自然と改行やタブが適切に入ったコードになると思うけど、どう?
BNFに改行やタブが入っていること自体がイヤならどうしようもないかも。
3.5以降のPythonだと型ヒントが書けるよ。Cとは書き方違うし任意だから野良コードでは割と書かれてないことも少なくないけど、広く使われてるライブラリは結構型が整備されてて、ランタイムで型チェックを走らせることができるのでちょっとだけ書き味が良くなるかも。
学歴がよくなくて、就職が困難だったので中小SIer で働いていた。 (プライム案件を取ってこれる分マシらしい)
レキサルティ、レクサプロ、デパスのお世話になって続けてたけど、結局は薬でどうにかできず、辞めてしまった。
参考程度だけど、未経験の人が 300万 をもらうために、どのようなスキルが必要かを、まとめておく。
ちなみにどれくらいプログラムが書けなかったかというと、競技プログラミングで努力してもAtCoder の黄色になれず青色のままってくらい。
AtCoder でいう、初心者から抜け出せないという、要するにセンスがないということなのだけど、そういう人も居そうなので、参考までに。
未経験のプログラマに対して、これだけ要求されるのだから、未経験の人は覚悟するようにという指針を提供したいので書いた。
基本的に、損害を与えた場合には、それを作業者が補填するという誓約書を結ぶ。
要するに、捨て駒として扱って、失敗したら賠償しろ、という事になる。
このことを認識して、失敗しないように振舞ないと、連帯保証人含めて迷惑をかける事になる。
要するに、低賃金で未経験プログラマを案件にノーリスクで送りこんで、稼ぐための手段です。
基本的に PL (夢想家) →PM (御用聞き) →プログラマ という環境なので、プログラマが自分でディレクションして意思決定する必要がある。
例えば、下請けの場合は、PM の御用聞きの結果のWBS に合わせないと、顧客からDM で瑕疵担保責任がどうとか言われる。
社内開発の場合は、PL の方から直接、長時間の叱責を受けなくてはならない。
そういう不幸を防ぐためにも、自分でディレクションして、PM の決めた実態を反映していないWBS に合わせて作業するスキルが要求される。
基本的に手戻りは個人の過失になってしまうため、手戻りしないように考え抜いて意思決定をする、というのが重要になる。
これこそ、ガクチカと呼ばれる、頑張れますというスキルなので、学生時代に頑張っておけばよかったなぁ。
こう見せたい、こう表現したい、という事を伝えるには、必然的にデザインの知識が必要になる。
創造的思考とデザインは切っても切り離せない概念で、デザインとは創造なのだから、当たり前である。
ソフトウェアアーキテクチャも、ソフトウェア設計も、コーディングもデザインと言えるかもしれない。
顧客と 1:1 で話す事がDM でもボイチャでも突発的に発生するので、いつ、いかなる時でも論理武装していなければならない。
まぁ、顧客であったり PL であったりはキレるのが仕事なので、それに対して理路整然と説明する必要がある。
なんとなく、では納得しないし、すぐ損害賠償請求とかそういう話にいくので、答えられないと持ち帰りますとお茶を濁して、エマージェンシーになる。
後述する設計能力においても、課題を把握するための言語技術(言語化能力)は重要なファクターだと思う。
C/C++ のシステムプログラムはフレームワークが基本的に無いので、自分で概念を整理して、どのような変更、拡張があるかを考えて設計する必要がある。
この能力が弱いと、手戻りが発生しやすくなり、瑕疵担保責任を問われることになる。
読んだ本の中だと、ボブおじさんの本が、やっぱりしっくりくるなという個人的な感想がある。
UDP で送ってくるデータを受けて24/365 で停止しないWebAPI への繋ぎ込みという簡単な作業があって、振られた。
リークしてはいけないという事でmalloc は禁止で、グローバル変数を利用するという変なルールがあった。
Rust で書けばいいんじゃないかなと思ったけど、Rust 書くのもシンドイし、C/C++ で、しんどくて読みづらいコードを書いた。
あとで保守する人が大変そうだけど、そういうルールを決めたのは PL だしね。
なんか、特殊なPCI Express のカードからベンダーが用意しているSDK でデータ引っこ抜いてWebAPI へつなぎ込む部分をやった。
一応、SDK の使い方をパラ見して 1 日で作ったので、別に負担じゃなかったけど、素人にやらせるんなとは思った。
当たり前だが、DB 作って RestAPI を生やすのは現代のプログラマにとって自然にできなければならない。
なので、新規開発のサブモジュールのバックエンドを任せられた。
だが、ORM の癖を把握したり、発行されるクエリを確認したりするのは、疲れる。SQL を直書きするのはシンドイ。
結局SQL を直書きすることにしたけど、あまりいい決断ではなかったと思っている。
それ以外はフレームワーク に乗ってしまっていいので、書き捨てる分には楽だった。
最近だと、TypeScript でPrisma 使うのが、型安全でよさそうだなと思っている。
デプロイをEC2 直でやったりECS にしたりとしていたので、ベアメタルの知識が必要になった。
要するに systemd のいじり方とか、死活監視の仕方とか。
個人的には、クラウド嫌いなので、ベアメタルの方が安心できる。
Bind で権威DNS を管理して、postfix で絶対止めてはいけないメールサーバを管理するとかもあったけど、出来て当然ではある事だし。
未経験プログラマでも、月単価100 万以上で顧客に請求してるんだから、会社はそりゃ儲けるだろうと思った。
会社が一人前の経験N年のプログラマといったら、その通りに振舞う必要がある。顧客に責任はないのだから。
当たり前だが、Webディレクション、Webデザイン、Webプログラミング,Webマークアップ は、全て作業者であるプログラマの仕事になる。
個人的には、これが分かれている理由が良く分からないけど、分けたい人がいるんだろう。
デザインで、CSSフレームワークを使うと、その色が出るという事で、全部CSS は手書きしていた。
tailwind が出た現在では使っていればよかったなと思う。
結局、全く分からない中、手探りでデザインし、コードを書いて、顧客に 1 日 5 ~10 回リリースするという行為をした。
顧客は大手企業だったので、自社のエンジニアならもっと出来る、と叱責されまくったけど、だったら自社でやればいいじゃんと思った。
一応、今でもサービスは生きていて、ユニークユーザ数は上がっているらしい。
そして、焼き付け刃だったので、 WAI-ARIA を知らず、アクセシビリティへの配慮が足りない事が問題になってしまった。
これはなんとか保守対応にねじ込めたのでトラブルにならなかったけど、瑕疵担保責任と綱渡りだなと思った。
当たり前だが、リリースサイクルを短くしないと顧客はキレてしまうので、CI/CD を整えないといけない。
今はGithub Actions とかあるけど、昔は無くて Bitrise が高いからみたいな理由でAzure Pipelines でCI/CDフローを構築した。
もう Multi Stage Pipeline になってるだろうけど、Release Pipeline がGUIからしか設定できないのが辛みだった。
これを知らずに、コンソールでポチポチしていたので、IaC 出来てない事がバレた時に色々怒られてしまった。
本来はテストも自動テストを整えて、質保証をしてバグを減らさなければならない。
だが、テストを書くという手間を払えなかったので、人力テストしかできなかった。
一応、リグレッションテストを人力でやりまくったので、バグ発見曲線が結合テストでの IF 不一致しかない、という結果にはなったけど
自動化できれば費用が必要じゃなかったから、怠慢だと、責められてしまった。
未経験でも誓約書を盾に、振られた事全部を出来なくてはならない慣習があるので、プログラマはそんなに良い職業じゃないよ。
甘い考えで、プログラマになろうと思っているのなら、考え直した方がいいです。
ワイが業界は行った時はC/C++でドライバとかWindowsアプリ作ってて十年前くらいからAndroid/iOSやるようになって5年前からはAzureやAWSもやるようなったけど休日の勉強が必要になったことはないやで