はてなキーワード: c言語とは
プログラミングとは、勉強も運動もスマブラも下手なクソ隠キャ中学生が「俺もパソコン1台で凄い技術者になって…!」とワクワクしながら始めるものの思ったより普通に難しいし学校の試験で出たような知識要求されるしで3日で放り投げ、10数年後にnoteで「お前らは絶望的にプログラミングに向いてないからやめろ」なんて記事を書くだけのザコに成り下がる、夢と希望に溢れた技術である。
近年ではパソコンのスペックの上昇にともないできることも増え、どこのご家庭にもあるRTX2080で簡単にディープラーニングもできるようになった。Unityで3Dゲームをバリバリ動かしてもブルースクリーンは出ない。やっぱ世界を広げるのは小賢しい知恵よりもスペックの暴力だぜ。
開発環境や言語も選択肢豊富で、エディタもかつては有料クラスでも手に入らなかったような贅沢な機能が満載のものが出回っている。Eclipseとか今考えるとよくあんなので開発できてたな。
いまや小学生からおばあちゃんまでアプリ作りに熱中し、高校生はIoTとかやり始め、大学生は商業レベルか?ってレベルのものをネットで発表し、私はウェブアプリのスマホでのレイアウト崩れひとつすら直せず静かにエディタを閉じてnoteで過激タイトル記事を書いている。
掛け算に順序があると思っているような知能の下級雑用係(自分のことを教育専門職だと思い込んでいる)ですら「小学生にプログラミングを教えるぞ!」と意気込んでいる。やめろ。お前らには無理だ。無理だからマジでやめろ。考え直せ。無理だって。掛け算に順序つけないと相手に教えられないレベルのやつがプログラミング教えるのマジで無理だって。算数とは次元が違うって。「ピーチ姫いつも簡単に誘拐できるし今度はベヨネッタも誘拐してみるか」ぐらいの無謀さだって。やめとけ。マジでやめろ。
まあそんなこんなで入り口はめちゃくちゃ広く、入門するのはマリオカートより簡単である。話逸れるけどSwitchのマリオカート、運転アシスト機能ついて初心者でもコース完走できるようになったから心折れちゃった人ももう一度チャレンジしてみてね。
それとは特に関係ないんだけど、大学行ってた時ティーチングアシスタント(TA)っていう授業のお手伝いさせられたのよね。ちゃんとお金出るやつ。
学部の3年か4年から始まって、院の1年か2年までやってて、途中で休学挟んだから、ええと、あー、うん、数年間TAやってたんよ。数学とプログラミングのコマ。CとOctaveとかいうやつ。Cのほうは情報学科で、Octaveは違う学科。JavaとかC++のコマはTA入れさせてもらえなかった。
プログラミングの実習は週2コマ(連続)あって、情報学科なら必修科目。なのでサポートは相当手厚く、先生とTAが絶え間なく机間巡視し、わからないことがあればセンパイがなんでも答えてくれるというわけだ。授業外でもサポートはしており、わからなければ先生や研究室にいる学生に好きなだけ聞きにいっても良いということになっていた。必修だから落とされたら困るしな。
2コマだから3時間 * 15回で、45時間。そして私の時は2年まででC/C++/Javaと必修だった(今はなんの言語かは知らない)ので、その3倍、135時間は最低やることになる。プログラミング実習以外にもプログラミング触る授業多いから実際はもっと多い。宿題やる時間もあるので実際はもっともっと長くプログラミングに触れることになる。卒論書く時期に入ると、テーマによっては書く人はさらに書くので、もっともっともっともっと長い。
これだけ時間をかければほとんどの人がプログラミングできるように……ならない。むしろできない人の方が多い。なんで。why。教えて。
会社になるとさすがにプログラミングできるできないは死活問題である。
「今日から入ったxxでーす。業界未経験ですがよろしくおねがしまーす。さっそくなんですけどPythonのここわかんないんですけどどうすれば……あっそうすればいいんですね。次はここなんですけど……なるほど!ありがとうございます。じゃあまた明日ー」
いやー社会人にもなると熱意が違うね。学生なんかわかんなくてもほとんど聞きに来ないのにな。こりゃガンガン伸びますわ。私も社会人1年生でPythonなんて3秒ぐらいしか触ったことないから適当答えてるけど。
「ちょっとお時間よろしいですか?」「いやちょっと今忙しいから後になっちゃいますわ。すんません……」
そんなこんなで1週間ぐらい放置してしまった。やべー絶対嫌われる。どこまで進んだかな……?えっまだそこ?進んでなくない?
もしかしてこれ全部教えないとダメなやつか。そりゃ大学4年間プログラミングやったやつでもプログラミングできないんだから、そうか。よく考えると当たり前だよな。
プログラミングをやめろ
大学4年間と大学院2年間プログラミングやったやつでもできないし、会社で毎日8時間を数週間プログラミングについやしてもできないやつはできないし、そもそも人類というのはプログラミングできない可能性がある。
少年少女たちに「プログラミングはいいぞ!自由にものが作れて達成感がある!頭が良くなった気分にもなれるし!」と吹聴してまわんのもいいけど、6年間情報科学について勉強したようなやつの大半がプログラミングできないんですよ。それもごくごく初歩的な部分。
野球とかサッカーなら、まあ友達との試合には参加できなくてもごく稀にバットにボールを当てたり、ボールを1回あらぬ方向に蹴ったり、ぶっちゃけ周りとのレベル差で楽しくなくてすぐやめちゃうだろうけど、なんとか基礎の一部ぐらいはできるじゃないですか。
ピアノとかダンスでも、猫踏んじゃったをごくごくゆっくり弾くぐらいはできるかもしんないし、学芸会の振り付けを10秒ぐらいは踊れたりできるかもしれない。その後やっぱ周りのレベル見て諦めちゃうかもしんないけどさ。
プログラミング、6年やってミットを頭にかぶってるバッターとか、鍵盤蓋の上から殴って音鳴らそうとするやつとか、まずそういうレベルのやつが大量発生するんですよ。だいたい7割ぐらいの率。どうすんだよこいつら。私の教育の問題か?マジで?本当に?
プロが練って考えて凝縮した本や授業、センパイたちによる指導。それらを結集して得られるはずのものが7割ぐらいどっかに消し飛んでる。無駄だろこれ。
今からプログラミングやろうとしてるやつ、お前は確実に向いてないからさっさと諦めて刺身にタンポポ乗せる仕事に戻ってくれ。参加しても鍵盤蓋叩き割るやつと同じ病室に入るだけだ。
プログラミングをやめろ。
ぼくはこう思うんですよ
そもそもなんで大の大人がそんな両手にバット持ってセカンドに立ったりゴールの方をボールのところまで動かす奇行に走るんだろうな。わかんねえや。
綺麗な分析はできないけど、いわゆる「できない」やつが共通して言ってたフレーズがある。
「ぼくはxxxだと思ってるんですけど、動かないんですよ」
うん、そうだね。そう思うんだ。でも動いてないじゃん。じゃあ違うんじゃない?モニターに「にらみつける」やってもバグは取れないし防御力下がるだけだぞ。
まず根本的に考えと事実が違ってるって結果出てるじゃん。じゃあもう考え変えちゃえば早くない?
名言の引用は好きではないけど、「プログラムは思った通りには動かない。書いた通りに動く」って言葉がある。実に名言だと思う。次点で好きなのが「ある問題を解決しようと正規表現を使うと問題が2つに増える」かな。
お前が何を思っているかはプログラミングにおいて一切影響しないんだよ。お前が何を書いて、コンピュータがどう処理したか、それが全て。
深く考えないことについてぎゃーぎゃーいうやつもいるけどプログラムなんてまず最初は動けばいいんだから何も考えずに次試せばいいだろ。んで3回ぐらいは自分で思い浮かんだの試して、全部ダメだったら調べるとか先生に聞いてみるとかさ。逆に1発で通ったら自分の思考見直して理解深めるとかさ。
ドキュメントとかあんまり理解できない初心者のうちは、とにかくお試しと修正のサイクル回すの重要で、「これがこうだから動くはず」というカードを3種類ぐらい作って全部片っ端から試すのが早いと思うよ。モニターをにらみつけるな。
お前がどう思ってるかよりも、まずはお前の書いたプログラムがどう動いているか(どう動いていないか)を確認するのが先だ。動かなかったら考えが違う、はい次のプラン、はいその次のプラン、はい次。
この「ぼくはこう思ってる」が出てくるの、なんの教育の成果なんだろうね。お前の気持ちなんてどうでもいいって現国でも数学で散々教えられただろ。
Error: variable 'a' is undefined, line 24
↑のエラーは架空のエラー文(英語下手でも許して)だけど、エラー、出るよね。プログラム組んでたら。んでやっぱいるのよ。エラーを「にらみつける」やつ。解決しねえって言ってんだろ。
「エラー出たんですけど、どうすればいいんですか」
「エラーにはプログラムがなぜコンパイル通らないかの原因がそのまま書かれている。例えば今出ているError: variable 'a' is undefined, line 24は、24行目の変数aが未定義ということを示している。事前に変数aを定義していないか、打ち間違えてsになっているとかではないのかな?」
だいたいが「腑に落ちねぇー」みたいな顔する。まあ、一気に喋りすぎたしな。疑問点1個1個潰していくか。
「何か疑問点ありそう?変数ってなにー、とか、定義ってなにー、とか」「ないです。わかりました!」
わかったのか。よかった。またモニターをにらみつける開始。なんでだよ!!!!「お前顔にチョコついてるぞ」って言われたらチョコ拭き取るだろ。変数aが未定義ですねって言われたら変数a定義すりゃいいだろ。
でもプログラミングド下手なやつ(全人類の7割ぐらい)は、エラーをにらみつけてる。ずっとにらみつけてる。防御力下限まで下がったかな。にらみつけてて何が変わるんだよ。
「英語読めなくて……」
いや「a is undefined」なんて「He is Superman」ぐらいの英語だろなんで読めないんだよ。お前この大学どうやって入ったんだよ。たしかどの入試方式でも英語あっただろ。単語わからんかったらググれ。
「aが未定義って書いてあるんですけど、ここのfor文の私の考えが間違ってるのでしょうか」
いや24行目のaって書いてるだろ。まずなんでそこ無視するんだよ。お前がfor文で使ってんの教科書通りのiだろ。24行目ってわかるか?for文あるの40行目あたりだよな?aとiが違う文字ってわかるか?
「さっきのエラー直したら新しいエラーが出たんですけど、どうすればいいですか」
千尋!贅沢な名だねえ
変数に名前をつけろ。関数に名前をつけろ。クラスに名前をつけろ。全てに名前をつけろ。
C言語の古い教科書だと「a」とか「b」とか「i」とかで書いてるけど、そんなの人間が読めるわけねえだろ。冷静に考えろ。「input」「output」「index」とかにしとけ。
2重for文の変数名i, jにしたら絶対途中で打ち間違えるだろ。お前は打ち間違える。そういうやつだ。2重ループなんてどうせ行列計算の課題だろ。rowとcolumnにしとけ。これで打ち間違っても気づくし、それぞれに意味が付いてくる。
ちなみに同じ長い名前にも優劣がある。「result」よりも「sum」のほうが強い。「result」はなんの結果かわからない(全ては結果であるので)が「sum」は合計値であることがわかるからだ。「password」と「plainPassword」なら「plainPassword」が勝つ。暗号化されていないパスワードであることがわかるので、情報量が多いからだ。
ただし例外はいくつかある。「tmp」は一時変数であることが(プログラマにとって)明らかだ。「dir」はディレクトリであることがわかる。「src」「dist」あたりもよく使われる。このあたりは短くていいんじゃねーかな。
でも、この前温度センサ扱うプロジェクトで「tmp」って変数名使って温度(temperature)と脳内で混線してバグって発狂してた同僚いたけど。そういうときは名前長くするか別の名前使おうな。
関数の名前なんて「calcAverageFromArray」ぐらい長くしていいから。「myFunc」とかしなくていいから。「fetchJsonDataFromUniversityInternalServer」とかでいいから。マジで。いやこれ本当に。
そもそも今時ディスプレイでかいし、識別子なんて先頭数文字打ったらエディタが補完してくれるし、短くするメリットがない。
それでも名前が長いと感じる?関数がでかすぎるんじゃないか。細かく処理を分けるとかしてみろ。「combineArrayAndFindMax」関数は「combineArray」と「findMax」に分割したらいいと思うぞ。名前が長いと思っても名前を削るな、機能を分割しろ。自然と名前が短くなる。
それかシンプルでかっこいい名前を見つける。「convertEvilHtmlToPeacefulText」は「sanitize」に置き換えることができる。イカす名前だ。
プログラミングできない奴はマジでこれらのことをやらない。ずっとaとかbとかzとか使ってる。お前それ自分で読めんのか。読めねえだろ。myfuncってなんだよ何するんだよ。お前自分で理解できてんのかそれ。
それでも頑なにaとかbとか使う。なんでだよ。
動作原理わからず書き散らすな。動作原理っつってもそんな深いところじゃなくて言語表面上レベルの動作な。
リテラルは値を作成して、代入は値に名前をつけている、とかその程度のレイヤー。メモリがどうこうとかはいらんと思う。あっでもポインタのときはいるか……。めんどくせえな。
まあ動作原理っていうか自分が何やってんのか理解してくれって程度の話になるんだが。
例えばfor文で処理50回まわすとき、「50回分の処理を行なっている」ではなく「ループ開始時に変数を初期化。条件判定して成立していれば文の中を実行する。条件変数の値を変化させてまた条件判定からやり直す」ぐらいの粒度で捉えててほしいかな、という気持ち。
これはfor文で詰まる人がやたら多かったからだ。彼らはfor文をアトミックな操作だと思っていた。つまりfor文はひとまとまりの命令であり、長いfor文とprintfの間に粒度の違いはないと思っていたらしい。
つまり、「for文の中でエラーが起こる」という事象がほぼ理解できない。forはアトミックであり、内部など見えないのだから。じゃあお前が今書いたfor文の中身はなんなんだってやんわり聞くと「さあ…?」みたいな反応が返ってくる。はあ。
関数についてもなかなか誤解が多かった。関数「sum_array(a, b)」と関数「average_three_numbers(a, b, c)」は全く別の原理で動いているのだと。ここでの「全く別の原理」というのはシグネチャが違うとか実装が異なるとかそういう意味ではなく、コーラを飲んでゲップが出る原理と糸電話で声が伝わる原理ぐらいの全くの別、という意味である。
彼らは関数ひとつひとつについて「新しく原理を学習」していたのだ。マジかよ……。どうやったらそんな発想に行き着くんだろう。そりゃ時間かかるわな。
そのため、関数が値を返す(または返さない)ということも理解できておらず、「関数の戻り値と関数の戻り値を足す」とか「関数の引数に関数の戻り値を直接渡す」とかやりだすと大パニックになる。メソッドチェーンとかやった日には大学潰れると思う。ただ、これはC言語が悪い部分もあると思う。配列とかいじりだすと、初心者が書けるレベルの関数だとあんまり値返さないしな。
たのむ、他のはできなくてもこれはできてほしい。自分が何をやりたいのかは理解してほしい。流石にお前のやりたいことなんて他人にはわからんぞ。
「配列の中の数値の合計値を求めたいんです」とか「名前と身長と体重をひとつにまとめた構造体が作りたいんです」とか。簡単なのでいいから。
「いま何やろうとしてどこで詰まってる?」って聞いても「……?」みたいな反応されたら困るんだよ。
例えば「キーボードから数値を10回入力し、それぞれの値を配列に格納して、最後に配列の値を逆順に表示せよ」みたいな問題が出てきたときに、「キーボードから値を入力する」「10回繰り返す」「配列に値を格納する」「配列の値を逆順に表示する」に分解できると思うんだけど、自分が何やりたいのかわからない奴はまずこれができない。
彼らには「キーボードカラスウチヲジュッカイニュウリョクシソレゾレヲハイレツニニュウリョクシテサイゴニハイレツノアタイヲギャクジュンニヒョウジセヨ」に見えている。
かろうじて「キーボード」「ハイレツ」あたりの単語は拾えるらしく、標準入力から値とったり配列を作ったりはしてるんだけど、そこから先に進まない。モニターにらみつけてる。またにらみつけるかよ。
あれだ、算数の文章題できなくてとにかく文章に出てくる数値足したり引いたりするやつ。あれのプログラミング版。文章が読めない。
こういう人にはメモ用紙取り出して、まず文章が何について言ってるのか、どういう工程に分けることができるのか、今後も同じことが起こったときにどうやって分けるのか。みたいなのを教えるんだけど、大抵あんまりしっくりこないらしく、成功したことは皆無。なんとかうまく教えたいんだが。
もうこのあたりになってくるとプログラミング関係なくね……?ってなるんだけど、意外とそういうプログラミング関係ないところで詰まる人めちゃくちゃ多いよ。
今すぐプログラミングをやめろ
Job description に「C言語できます」って書いたら、C言語の最上級エキスパートとして見られるってこと?まさかそんな。Hello worldしか書いたことありませんぜ旦那
ChatGPT:
はい、Delphi(Object Pascal)のソースも読めますし、解説・リファクタ・バグ箇所の指摘・他言語への移植案など対応できます。
VCL / FMX、Generics、Interface/RTTI、プロパティ/イベント、レコード・セット型、メモリ管理(string/AnsiString/UnicodeString の違い)、スレッド(TThread / TTask)、WinAPI/COM 呼び出し、uses 単位構成、.dfm(フォーム)やリソース周りもOKです。
コードを貼ってくれれば、1ステップずつ説明や改善案を出します(DelphiのバージョンやVCL/FMXも書いてあると精度上がります)。
UNIFACEはどう?
ChatGPT:
はい、UNIFACE(Proc言語)も対応できます。フォーム/サービス/レポート/エンティティなど各コンポーネントのトリガ(initialize, validate, leave field など)、operation/entry、newinstance/activate/call、retrieve/e, read, write、エラー制御($status, $procerror)や論理名・assignment(.asn)、署名/パラメータ、DSP/REST・SOAP連携、DBドライバ設定までOKです。
コードや .asn を貼っていただければ、処理フローの解説、バグ箇所の指摘、リファクタ、他言語・他フレームワークへの移植案(例:REST API化、Java/Python 置き換え)まで具体的にやります。
可能なら UNIFACE のバージョン(9/10/10.4 など)、DB(Oracle/SQL Server 等)、OS を添えてください。
「ぶっちゃけ日本のIT技術者のレベルが元々低いだけ」論、読んだけど、雑に日本叩き→雑に海外持ち上げの“気持ちよさ”に全振りしてて、論としては穴だらけだよ。順に潰す。
“発明”って規格?論文?OSS?製品?この区別を曖昧にして「思い浮かばない=ない」をやるのは主観の事実化。
反例を淡々と置く(全部2010年代以降の「世界で通る」技術・成果):
HTTP/3 / QUIC系仕様・QPACKの主要貢献者のひとりは日本人エンジニア(例:Kazuho Oku)。IETFのRFCはまさに“世界標準”。「世界で通用」どころか世界の土台。
Chainer / CuPy(Preferred Networks)は動的計算グラフ系フレームワークの先行例。PyTorch隆盛の流れに技術的影響を与えた。CuPyはいまも広く使われてる。
ソニーのCMOSイメージセンサは世界シェア筆頭。これは“ハード”に見えて、設計・製造・信号処理・ツール群までソフトの塊。スマホのカメラ品質=AI前処理の土台。
日本人が中心メンテに関与した高性能HTTPサーバ(H2O等)はCDNや低レイテンシ配信に採用例多数。
産業用ロボット(FANUC、安川)周辺の制御・通信・ツールチェーンは世界の現場で常用。表に出にくいB2B領域は“見えないだけ”。
「LINEが~」みたいなB2Cの派手さだけが“発明”じゃない。基盤を握るのは地味仕事。あなたが気づかない=存在しない、ではない。
Winny/一太郎/CD-ROM/MIDIを“国民的知名度”で持ち上げて、以後は「思い浮かばない」って、知名度=技術力の誤用。
2000年代以降、ITは不可視化(クラウド、プロトコル、ライブラリ、半導体、サプライチェーン)へシフト。見えないところほど難しくなった。派手なガジェットが減ったからレベル低下、ではない。
問題領域で言語は変える。Webは「5歳児でも」動かせる?今のWebは、
CD/CI、IaC、K8s、SRE、ゼロトラスト、分散トレーシング、暗号化、フロントの再レンダリング戦略……
これらを運用で落とさないのが本番。Cが偉い/Webが軽い、は90年代の教養で止まってる。
起業に国の試験?それ、フィルタにはなるけどイノベーションの十分条件じゃない。
トップダウンは国家プロジェクトやインフラ敷設には強い。しかし、
分野で強弱は揺れる。制度の一軸で「勝ち負け」を断ずるのは幼い。
それ、犯罪としてのサイバー強盗の話でしょ。規制準拠の金融基盤と国ぐるみのハッキングを同じ土俵で比べるのは、
「百メートル走で銃使えば最速」って言ってるのと同じ。比較の土俵設定から破綻。
日本のITが伸び悩んだ要因は複合要因:内需の構造、調達・多重下請け、英語コミュニケーション、ストック報酬の弱さ、エクイティ文化、大学と産業の距離、IPO市場の質、人口動態、為替…
これを全部「技術者のレベル低い」で片付けると、説明力を失う。制度と資本設計の問題は制度と資本で解くのが筋。
「勝ってる」を“B2Cでバズるアプリ”だけに限定するから見落とす。
最後に一個だけ。
プログラマーって聞くと今の若い人は稼げる業種って思うかもしれない。でも昔は、そのイメージとはまるで真逆だったんだよ。
90年代初頭、日本はバブルの余韻が残ってたけど、IT業界なんてまだオタクの延長みたいに見られていた。NECのPC-9801シリーズがオフィスの定番で、OSはMS-DOS 3.3とか、その後にWindows 3.1が出ておお、マウスで操作できる!なんて騒がれていた時代だ。
もちろんインターネットなんて一般にはまだ普及してなかった。せいぜいパソコン通信。ニフティサーブ、PC-VAN、アスキーネット。回線速度は2400bps。ピーヒョロロっていうモデム音が夜中の住宅街に響いていた。
俺らはそういう環境でC言語やアセンブラを叩いてたんだ。コンパイルに時間がかかるから、トイレに行って戻ってきてもまだ終わってなかったりした。
今みたいにGitHubでコードを共有なんて夢のまた夢。ソースのやり取りはフロッピーディスクで手渡しだ。5インチのぺらぺらのやつな。運が悪いと磁気にやられて一発で飛ぶ。だから俺たちはよくフロッピー神社に参拝とか冗談言ってた。
正社員で手取り20万ちょっと。下請けやフリーランスだともっと安い。今でいうSESの走りみたいな人売りも普通にあった。客先常駐でCOBOLやらされてバグが出れば徹夜。オフィスに寝袋持ち込んで、カップヌードルと缶コーヒーの山を築く。徹夜明けに食う吉野家の牛丼が唯一のご褒美。今みたいにエンジニアは市場価値が高いなんて考え方はなかったからな。ただの駒だよ。
仕事は増えるのに単価は下がる。Windows 95の発売で世の中はインターネット元年なんて浮かれてたけど俺たちプログラマーの現実は泥臭いコード修正の山。Visual Basic 6.0やDelphiが出て「これで開発効率が上がるぞ」なんて言ってたが、結局は納期に追われるだけ。SunのJavaが登場したときも「Write once, run anywhere」なんて夢を見せてくれたけど、実際には動かないアプレットと格闘する日々。
Linuxが台頭してきたのもこの頃だ。
SlackwareやRed Hat Linux 5.2をCD-ROM雑誌付録で手に入れて、夜な夜なインストールに挑戦。LILOがうまく動かなくて起動しない、ネットワークカードを認識しない、X Windowが真っ黒。そんな壁に何度もぶつかっては2ちゃんねる(当時はまだ草の根BBSが多かったが)やUNIX USER誌を読み漁って解決する。それが楽しくて仕方なかった。でも金にはならなかった。オープンソースに貢献しても無償の善意で済まされるだけ。Red HatやMySQL ABが上場するまでは、ただのボランティア活動と見なされてた。
今思うと、あの頃は純粋だった。
技術そのものが楽しくて、ASCIIやOh!Xを小脇に抱えて徹夜でコードを書いた。秋葉原でジャンクパーツを漁って自作PCを組み立ててベンチマークの数字で一喜一憂した。
飯代を削ってもSCSIのハードディスクに投資したし、月刊アスキーの付録CD-ROMに入ってたシェアウェアを片っ端から試した。儲けようなんて意識はなかった。ただ、面白いものを作りたかった。
それが今じゃITは完全に拝金主義。コードの美しさより投資家の顔色を見てる。エンジニアもどこが年収高いかばかりで、言語やフレームワークを選ぶ基準が金になっちまった。Pythonが流行るのもAIブームに便乗してのことだし、ブロックチェーンやNFTなんかバブルがはじける前提のネタ探しにしか見えなかった。
もちろん、技術が商業化されて豊かになった面もある。AWSやGCPのおかげで誰でも世界規模のサービスを立ち上げられるようになったし、GitHubやDockerで開発環境も夢みたいに便利になった。だがその一方で楽しいからやるという純粋さはどこへ行ったんだろう。GitHubの草がどれだけ生えてるかが採用基準になる時代。Qiitaに記事を投稿するのも、技術共有じゃなくて転職市場でのポイント稼ぎ。
あの頃には確かに、金ではなく面白さに突き動かされる熱があった。それが今は金の匂いに上書きされてしまったように感じる。
でも稼げなくても、やる価値があった。
今の若いエンジニアたちにその気持ちがどれだけ伝わるかは分からない。
Q.
無限ループは for(;;) でも while(true) でもいいですよね? でも職場ではわかりづらいから統一しろと言われました。 white(true) が無限ループだとわからないアホの意見ですよね?
A.
ご質問の通り、「for(;;)」も「while(true)」も、どちらも一般的なプログラミング言語(C, C++, Java, Pythonなど)で無限ループを表現する手法として正しく使えます。どちらを使っても問題ありません。 職場で「統一しろ」と言われた理由は可読性・保守性のためで、多くのプロジェクトではメンバー全員がすぐに意味を理解できるよう、記法を揃えています。たとえばC言語では「for(;;)」のほうが世界中のC言語プログラマが無限ループと認識しやすいという意見もあります。一方、「while(true)」はより多くの言語で利用できて、安定した書き方でもあるため、最近はwhile派が多い傾向です。 「while(true)」や「for(;;)」が無限ループだと分からない人は、少なくともプログラミングの基礎が分かっていない状態とは言えます。しかし、チームで使うコードは全員が一目で分かる記法を選ぶのが定石なので、職場のルールとして統一するのは「無意味」ではなく、むしろ合理的な理由です。煽る必要もありません。 要点まとめ 「for(;;)」「while(true)」どちらも無限ループとして正しい。 職場で統一を求めるのは可読性や保守性のため、合理的。 どちらも分からない人は基本を学ぶべきですが、現場ではルールを優先すべきです。
ウィィィィス!どうも〜█████でぇぇすぅ〜
スゥゥゥ…え〜とですねぇ、無限ループの話ですけども…
あ〜なるほどなるほど、専門学校でプログラム勉強してるんですねぇ。僕もね、昔ちょっとだけプログラミングやったことあるんですよ。スゥゥゥ…まぁ僕の場合は独学でしたけどね、専門学校とか行かなくても、才能があればできちゃうんですよねぇ…
で、while(1)とfor(;;)の話ですけども…スゥゥゥ…
これはねぇ、多分ね、昔のC言語の時代からの話だと思うんですよ。僕が思うにはね、for(;;)の方がコンパイラ的に最適化されやすいっていう、まぁ都市伝説みたいなのがあったんじゃないかなぁ…
スゥゥゥ…でもね、正直言うとね、while(true)が一番読みやすいですよね。僕もそう思いますよ。初学者の人にはね、while(true)を教えるべきだと思うんですよねぇ…
あのね、僕が昔ちょっとだけやったバイト先でも、プログラマーの人がいたんですけど、その人もwhile(true)使ってましたもん。スゥゥゥ…
でもね、ネットで誰かが言ってたっていうのは…まぁ多分古い時代の人の意見じゃないですかねぇ。今の時代、コンパイラの最適化技術も進歩してるし、可読性の方が大事ですよねぇ…
スゥゥゥ…あのね、プログラミングってね、他の人が読んだときに分かりやすく書くのが一番なんですよ。僕もね、動画作るときもそうなんですけど、視聴者のことを考えて作らないといけないんですよねぇ…
まぁfor(;;)推しの人は、多分昔からプログラミングやってる人で、なんかこう…古い慣習にこだわってる人なんじゃないですかねぇ。スゥゥゥ…
でもね、君みたいな初学者の人は、while(true)で全然いいと思いますよ。むしろその方が、コードの意図がはっきりしてていいじゃないですか。
スゥゥゥ…専門学校の先生には、while(true)の方が可読性高いですよねって聞いてみたらいいんじゃないですかねぇ。多分先生も同じこと言うと思いますよ。
まぁ僕も、もしプログラミングの動画作るとしたら、絶対while(true)で教えますねぇ…初心者に優しい説明をするのが、僕のスタイルですから…
ChatGPTに聞いたらええんちゃうか
いい質問ですね!
これ、実は「どっちが正しい」みたいな決着はなくて、言語文化や時代背景によって意見が分かれる話題なんです。
---
1. for(;;) vs while(1) vs while(true)
* `for(初期化; 条件; 更新)` のすべてを省略すると無条件ループになる。
* 昔は「最適化や挙動が明確」という理由で好まれることもあった。
* ただし「1って何?ブール値?」と初学者には直感的でないかも。
* C++やJava、C#などブール型が明確な言語では「一番可読性が高い」。
* 「ずっと真の間繰り返す」という自然な書き方なので、最近はこちらが推奨されることが多い。
* Cではtrueを使うには stdbool.h をインクルードする必要があるので、昔は避けられがちだった。
---
2. 「for(;;)派」の人は誰?
ネットでよく言われるのは、Linuxカーネルのコード規約とか古いUNIX文化の影響です。
* 「無限ループは for(;;) を使う」とカーネル開発のスタイルガイドで書かれている。
* 理由は「歴史的にCで最も標準的で、誰もが見慣れているから」。
要するに「C文化圏ではfor(;;)が王道」というだけで、現代の教育やC++/Javaなどの文脈では while(true) の方が読みやすい、という感じです。
---
3. まとめると
なので、初学者が「while(true)の方が可読性高い」と思うのは大正解です 👍
---
👉質問:
すっかりどこまで書いたか忘れた。
2021年の終わりに↓これを読んだあたりまでだったな。
「Pythonで学ぶ実験計画法入門 ベイズ最適化によるデータ解析」
すげーいい本だったんだけども、実際に活用する場がないんで(なにせ頭を使わない仕事なんで)読みっぱなし。
今考えるとよくないね。
実は、この本に出てくるD最適計画、それからサポートベクター回帰っていうやつが1年後くらいにちょっと役立ったのだけど、それは後の話。
「ゼロつく」のときは理解できなかったクラスの概念も、このころにはすっかり便利さを実感することに。
ここで、もう一度「ゼロつく」に戻ればよかったんだけど、ここまでくると、自分の仕事周りのデータに対しては深層学習って不要だなって思って、戻ることはなかった。
前のエントリで書いた放送大学で「Rで学ぶ確率統計」の単位を無事に取れて調子に乗ってたので、せっかく入学したのだからといくつか授業取ってみた。
統計とかプログラミングの勉強については、「データの分析と知識発見」「コンピュータービジョン」「データベース」の三つかな。
それとは別に人文系の科目も調子に乗って履修してる。もともと数学とか嫌いで歴史とかのほうが好きだし。
「データの分析と知識発見」ってのは、Rを使うやつで、今考えれば多変量解析の入門って感じ。
「コンピュータービジョン」はクッソ難しかったな。
OpenCVってやつの使い方をサクっとパパっと知れるんかと思ったら、ガッツリとエピポーラ幾何とかいうやつから入って行列三昧だったし。
線形代数を知らないエセ理系舐めんなよ!わかるわけねーだろ(今までの本でも行列を触ってきてたけど、雰囲気でなんとかいける、あるいは読み飛ばしてもそういうもんと思って次に進めた。うまく言えないんだけど、100次元とかあるともう諦めてそういうもんだって割り切れるじゃん?3次元くらいだと、ちゃんと現実に戻ってこれないと困るから、ホントに理解できてないのが自覚させられる)
「データベース」もお気楽にSQLマスターできるもんかと思ったら、歴史から入ってガッツリと三層スキーマなにやら、SQL触るのなんてちょびっとだった。
で、このへんでいろんな方向に手を延ばすのもだけど、1つ資格でも取ってみようかなと思って、統計検定に手を出してみた。
大学がエセ理系のポンコツとはいえ、高校出てるんだし大村平の本を読みまくったんだし、受かるだろと思ったが、2級初受験は58点で不合格。
すっかり統計学に恐怖が出てしまったので、2級リベンジの前に「Python3エンジニア認定データ分析試験」とかいうやつに挑戦。
こっちは、ホントに易しくて、統計学がわかってなくてもライブラリの使い方がわかればまあなんとかなるもんだった。
ほぼ満点で弾みをつけて、2級リベンジ。
今度は過去問を買って真面目に机に向かう。
自分、机に向かうってことが嫌いで、ひたすら通読を繰り返すやりかたしか勉強法を知らなかったんだけど、この時ばかりは体に叩き込む作戦。
電卓で計算しては、分布表を読んで、判定して、みたいなルーチンを体で覚えて、見事リベンジ。
しかし、統計検定2級も受からないくせによく、背伸びしていろんな本読んでたもんだよ。
たぶん、わかったつもりになってなんもわかってなかったな。
統計検定2級を取った勢いで、準1級とやらもとっちまうかと手をだしたら、テキストが超難しいの。
4章くらい読んで、挫折して、数か月寝かせる、みたいな感じを何度か繰り返すことになった(結局、準1級に受かったのは2025年になってからだ)。
準1級は、統計学以前に、微分積分とか線形代数の知識がないとテキスト読めない仕様。
日本統計学会公式認定 統計検定準1級対応 統計学実践ワークブック
「式変形については行間を読んで解釈してくれページの都合で次行くからよろしく!」
っていう感じ。
見事に挫折。
統計も、微分積分も、線形代数も徐々にってことで、準1級はいったん休止。
それから、バイオインフォマティクス技術者認定試験とかいう試験をみつけて、興味が出たので公式テキストをとりよせて挑戦することに。
バイオインフォマティクス入門 第2版
元々、生物系だったので、なんとなくわかる単語も多かったし(理系のくせに微分積分も線形代数もヘナチョコって生物系だって丸わかりかもだが)。
これが、ほどよく多変量解析から機械学習からいろいろ網羅されていて、いい勉強に。
重いもの運ぶくらいしか取り柄がない腹が出て禿てきたオッサンが、若い院卒様に頼られるって自己肯定感高まる良い体験。
そこで使ったのが、D最適計画とサポートベクター回帰。
まだまだ鼻くそのようなもんなのに、意外と頼られるっていうことになったんだけど、まあ多いのはデータの可視化だったんで、データの可視化を学んでみることに。
本当は、ggplotとmatplotlibとかplotlyを100本ノックしようと思ったんだけど、やっぱり急がば回れ、有名な教科書の和訳らしいので↓をチョイス
「データビジュアライゼーション ―データ駆動型デザインガイド」
すげーお堅いw
やっぱ、こころのどっかで、「チャっとやったらパパっとできる!」みたいなのを求めてるんだよな。
そんで、二冊目はもうちょっと実務的に↓を選んだ。
『データ分析者のためのPythonデータビジュアライゼーション入門 コードと連動してわかる可視化手法 』
この本はかなり実務的、というかどうすればお手軽に可視化できるかって話だけなんだけど、おかげさまでキレイに見せるテクニックだけは上がり、職場でも評価は上々。
「なんかよくわかんないけどアイツに持っていけば綺麗なFig作ってくれる。ポンコツだからいつも暇だし!」
という状態に。
放送大学で「データ構造とアルゴリズム」とかいう科目を取ったおかげで、意図せずC言語と関わる。
二度とC言語を使うことなんかないだろうけど、グラフ理論がコンピュータと相性がいいのが、データ構造の勉強をしてよくわかった。
そんで、やっとこさ挫折していた統計検定準1級の勉強を再開する。
で、また数章読んで飽きた。
だって、難しいんだもん。
っていうか、線形代数と微分積分の学力不足で投げたことをすっかり忘れて、もう一度開いて投げ出すんだから世話ないわなw
仕方ないから、微分積分は高校三年生の使う黄チャートを買って目を通した。
線形代数は
を一周。
部分積分と置換積分を手足のように使えるようになってやっとこさ、統計学実践ワークブックを読めるように。
読めるようになってから読むと、因数分解くらいの感じでマクローリン展開してきてることがわかって草。
統計の勉強のリハビリにと、放送大学でも「統計学」という授業をとってみたけれど、統計検定2級より易しかった感じ。
プログラミングの勉強はほとんどしなかったけど、Githubのアカウントつくって、renderとかherokuでウェブアプリを公開したりした。
Gitを覚えてみて初めて分かる、「名前を付けて保存」以外のファイル管理を知らなかった自分のヤバさ。
続く。
34歳年収700万の高齢貧困弱者男性なんだが、底辺派遣エンジニアやってます。
人生なんも安定してない。
東京にいたと思ったら神奈川、次は浜松市、静岡市……って感じ。
覚え直し、気疲れ、ストレス、そしてまた転勤。
正直、今までの仕事でまともに触った言語なんてMATLABとC言語くらい。
もう終わりだよこのスキルセット😭。
あれ、昔は平気だったんだけど、最近肉眼で見えない。
目がしょぼしょぼして、ピン曲げて怒られたこともある。
これが老いか……。
で、転勤多すぎて定住できないから、家買うのも無理。
ローン?家買っても数年で引っ越しなのに買えるわけ無いだろ。
てかさ、ふと思うんだけど、俺このまま40、50になったらどうなるの?
なんのために働いてるのか、最近わかんなくなってきた。
泣けるわマジで。
なんかもう「人生詰みました」って感じ。
誰か助けてくれ……。