「プログラミング言語」を含む日記 RSS

はてなキーワード: プログラミング言語とは

2024-02-17

anond:20240217003758

うーん、シェルスクリプトは確かに扱いやすいが、最初に覚える本格的なプログラミング言語として適格かというと???・・・ 型もないし。

anond:20240216234130

そうか、その考えはなかった。

自転車置き場の議論として最初に教えるプログラミング言語は何にすべき?

ってのがある。オレの大学ではPascalだった。Cよりはマシだろう。あるいはPythonとかもあり得るかもな。

だが、最初に触れるパソコンLinuxなら、POSIX shホーム言語にできるわけか。。。

そりゃ結構面白いな。

2024-02-03

[]2月2日

ご飯

朝:サンドイッチ。昼:サラダどら焼き。夜:ワインポテト生ハムチーズドリアピザ。間食:アイス

調子

むきゅーはややー。おしごとは大変。来週からは忙しくなりそう。

今まではC#というプログラミング言語お仕事してたんだけど、来週からPythonという別の言語も使ってお仕事をしないといけない。

勉強もしないといけないし大変だ。

がんばるぞー。

グランブルーファンタジー

コスモスHLわからん

勉強しないとだ。

2024-01-26

各位、久々の大型新人の予感がするので可愛がってください

https://twitter.com/shims_ag/status/1749925004236779961

午前7:40 · 2024年1月24日

「型」という概念存在しないプログラミング言語存在しません。

https://twitter.com/shims_ag/status/1750300836113342567

午前8:33 · 2024年1月25日

メモリ上のデータの種類を表す情報が「型」(type)です。

プログラミング言語側に組み込まれている「型」だけでなく、プログラマー独自に「型」を定義する方法も用意されています

struct、classinterface、type, enumなどを使って独自の「型」を定義します。

開発しているソフトウェア独自の「型」は、ドメインモデルの要素になります

多数の「型」を分類し、組織化するために名前空間を利用します。

近年「クラス」が「型」の定義であるという基本概念理解していないエンジニアが増えているので、エンジニア採用する際には注意しましょう。

https://twitter.com/shims_ag/status/1750346589431042157

午前11:35 · 2024年1月25日

ソフトウェアを起動すると、メモリ上には、たくさんのデータを読み込まれます。各データには、データの種類を表す「型」が割り当てられています

例えば、ゲームならばCartという大分類の「型」を用意し、その要素としてMarioCart, LuigiCartという「型」を用意します。

業務システムならば、Reportという大分類の「型」を用意し、その要素としてCostReport, SalesReportのような「型」を用意することになります

上記の「型」は、構造体やクラスを使って定義します。

これらの大分類の「型」と、要素の「型」は、is-a関係にある、といいます

現代ほとんどの言語にはis-a関係を明確にする方法が用意されています

上記のような「型」の知識プログラミングの基礎です。

https://twitter.com/shims_ag/status/1750014081648779450

午後1:34 · 2024年1月24日

CPU機械語しか理解できません。一方で人間機械語プログラミングすることは困難です。

人間が「1ドル」のつもりで、メモリに「1」と記憶させても、CPUは「ドル」だとは扱ってくれません。

CPUは、「円」のつもりで記憶させた「1」と、ドルの「1」を区別出来ないので、そのまま足し算などの演算を実行してしまます

そこで、人間にとってプログラムを読みやすくすることと、CPU意図しない演算をさせないために、データの種類を表す「型」という概念プログラミング言語に用意されるようになりました。

金融ECサイトなどのお金計算間違いが致命的なシステムでは、1ドル、1円を整数型などで扱うのではなく、予期せぬ演算が実行されないように「ドル型」、「円型」という「型」を定義します。

まとめると、可読性向上と、プログラムの誤動作防止のために「型」が不可欠な概念になりました。


https://twitter.com/shims_ag/status/1750507533536760000

午後10:14 · 2024年1月25日

プログラミング初心者は、

プログラミングを以下のようにシンプルに考えましょう。

(1) データメモリ記憶する命令プログラミングする。

変数配列構造体、クラスなどを使って、メモリ上にデータ記憶させる命令設計し、コーディングする。

(2) データ操作する命令プログラミングする。

上記(1)でメモリ記憶したデータに対して、計算、変換、表示、出力、保存などの命令設計し、コーディングする。

https://twitter.com/shims_ag/status/1750534515616059749

午前0:02 · 2024年1月26日

「型」という概念数学に由来しています

メモリ上のデータがどの「型」に属しているのか、という集合論の話でもあります

分かりやすく言えば、データの種類、分類の話です。

例えば、猫型のデータは、動物型という大分類に属する、という集合の話です。

オブジェクト指向プログラミングの「is-a関係」は、集合論に由来するメモリ上のデータ(オブジェクト)の分類の話です。

クラス」とは「型」の定義であり、メモリ上のデータの「分類」(class)です。

is-a関係」ではないのに継承すると、当然破綻します。

逆に、明らかにis-a関係」なのに、継承せずに委譲すると、スパゲッティコード化を誘発します。

2024-01-16

最初プログラミング言語問題

子ども最初に教えるプログラミング言語は何がいいのか。

C++ なんて教えても罠にハマって時間を潰すだけだし

それなら適当クラスメイト恋愛でもしてた方が、人生初動の貴重な時間有効に使える。

ならば、 Ruby か。

2024-01-15

技術イベント行ったらネットに顔晒されるのヤバない?

ちょっと疑問があるので、意識調査じゃないけど、意見を聞きたい。

技術系のイベントの会場内の写真カジュアルTwitterかに載せてる人いるけど、あれってヤバくないの? 問題に思う人いないの?

漫画アニメ同人系のイベントとかだと、運営がわりと厳しく「会場内撮影禁止」ってアナウンスなり指導なりしている印象あったから、技術系のイベント撮影された人が映り込んでる写真を鍵垢でもないTwitterで流しているの見て、大丈夫なのかと心配になった。

私が見て覚えてるものだと、自作キーボードイベントとか、プログラミング言語系の勉強会なんだけど…

事前に「会場内の写真SNSなどに公開します。顔が映り込むことがあります」みたいに、イベント詳細に書いてあったりするんかね?

イベントに不慣れな一般参加者が撮ってアップしちゃうとかなら、まだ分からんでもないけど、まれ主催側や登壇する側が「こんなに集まりました、盛り上がりました」みたいに無邪気に上げてたりするのも見るし。

もしかして、そういう技術系のイベントって、同人系のイベントとは違って写真撮ったり撮られたりするの、みんな何とも思わない?

その場にいることがバレたくない人とか、そもそも写真に写るのが嫌って人とか、いそうな気がするんだけど、どうなんだろ。

まじめな勉強会やらカンファレンスとかならいいけど、懇親会でハメ外してるところ見られると、会社とかパートナーに怒られる!とか無いのかな?

↑なんかは想像やす可愛い例だけど、特定イベントに来ていることが記録に残ると困るって人も少なからずいると思うんだよな。

2023-12-26

プログラミング言語で一度書いたことを、もう一度自然言語で言ったからといって、正しさが増すなどということはありません

英語マウンティング

2023-12-24

なぜエンジニアは「浅い」記事しか書かないのか?

浅薄記事ばかり書くな

タイトルや以下における「エンジニア」とはソフトウェアエンジニア的なものを指すとする。

この時期に各種アドベントカレンダーで見かけるような、あるいは平時でもはてブの「テクノロジー」タブに上がってくるような記事は魂に訴えかけるものが皆無な浅い記事ばかりだ。マネジメントがどうのだとか、○○プログラミング言語で△△してみましただとか、無味乾燥なこと甚だしい。それはなぜかというと、そうした記述はいわば児戯を一生懸命やっているだけであって、社会世界のことをなんら考慮しておらずなんの影響も与えることができないものからだ。

そうした浅い記事が生まれ理由について考察してみた。

理由1: 採用転職ゼロサムゲームの1つのギミックから

求職側において、個人ブログ等で発信することでポートフォリオ代わりになり、転職活動に有利になるというインセンティブがある。求人から見ると、自社ドメイン技術ブログ等で発信することで採用市場におけるプレゼンスを高めたいという動機がある。この双方向の動きにおいては、情報を多く出したもん勝ちであるため、浅い記事が量産されるというわけだ。

求職者は人材会社陰謀に嵌められて義務的情報発信させられていることも多く、被害者だとも言える。しかし、求人側がこの動きに加担するのは非道徳的であるたか採用のために競合と人間認知許容量を巡るゼロサムゲームを繰り広げて貴重な人類知的エネルギーを浪費しているのは端的に反社売国奴である

理由2: ブルシットジョブから

IT業界は、火のない所に無理やり火をつけてからなるべく複雑な消火のソリューションをなるべく高値提供するというブルシットジョブの宝庫である。何社もの企業キラキラ業界ヅラして犇めいている分野においても、冷静に見るとその分野自体社会不要(それどころか有害であるということはよくある。自分が携わっている分野においては正常性バイアスでそう感じないかもしれないが、他分野を見たときには同じように感じる方は多いだろう。

そもそもがブルシットジョブなのだから、それについて何をどう語ったところで本質的伽藍堂なのである

理由3: 記号接地していないか

AI身体性を持たないため、記号記号としてしか処理できず、現実実体が持つ意味と結びつけられないという記号接地問題課題となっていた。特にサーバーレス環境において、エンジニアAIと同様な状況に陥っている。コードを書いてCDデプロイしてクラウドで動かすという開発のサイクルは現実物体との関わりがなく、自分の行いが現実においてどういう意味なすかという意識希薄になるからだ。そのような状況では空論を弄ぶことしかできなくなるのは当然の帰結だ。

記号接地問題解決する側にいるはずのエンジニア自身が同じ問題に囚われるとは、なんたる痛快事であろうか。

理由4: 馬鹿から

エンジニアというのは誰でもできる職業なのに高給取りだというイメージが付いており、思考停止しているくせに一発逆転を狙う馬鹿を呼び寄せている。

また、仕事それ自体によって、あるいは仕事で金を稼ぐことによって自己実現をしようと企むナイーブ価値観蔓延している。もともと馬鹿ならそのままぬくぬく馬鹿のまま育つし、大学一般教養を学び大学院でコンピュータサイエンスを学んだような本来は"頭の良い"人までそうした朱の馬鹿共に交わってより赤き馬鹿に成り下がってしま環境なのだ

まり、端的に馬鹿からそもそも浅い思考・浅い言論しかできないのだ。

2023-12-22

anond:20231222065623

純度100%お気持ちラッダイトじゃん。反AIってこんなんばっか。

時間が早いことが罪ならCopilotどころかプログラミング言語とか使わずに手で論理回路配線しろよ。

学習されない権利」「参考にされない権利」「解析されない権利」なんぞ著作権どころか歴史上どんな知財にも存在せんわ。

何でそんな異常すぎる特権が当然あるべきだと思い込めるんだ?

2023-12-19

anond:20231219191613

GoogleGoを作るよりももっとずっと前から採用している言語は主にC++, python, そしてjavaだが、javaパートが一番問題だ。

Android関連の開発で有用であるという点でjavaは使われるが、ロイヤリティを支払うことになっている。

このことについて昔から訴訟問題が起きてきたようで、javaがクソである言われる一つの要因となっている。

オラクルといった大企業管理するプログラミング言語はそういった理由で信用されていない。

2023-12-18

anond:20231218170959

いうてブラウザ自作するにはCSS仕様完璧に把握してこそdomとか解釈して表示する機能を実現できるわけで、それはプログラミング言語によるものなのだから、やっぱプログラミング言語マークアップ言語以上の難しさだろ

CSSってプログラミング言語以上に厄介な「癖」がありませんか?

たとえばulフレックスコンテナとして、その子要素liの子要素imgに対してmax-width:100%をかけていたとします。

デフォルトだと、imgを内包したliがulの中で横並びになり、さらにliの横幅は自動的に親要素の横幅をliの個数で割った分だけ縮小されますが、ここでflex-wrapにwrapをかけると、imgで表示する画像サイズがある程度大きいと、wrapとしないときよりもliごと大きく表示されます

しかしliの横幅はそもそも指定していなくて、しかもその子要素のimgに対してmax-width:100%をかけているということは、そのcss指定意味論理的日本語で表すならば、imgはliの大きさを基準にその100パーセント分の大きさで表示しろという意味指定になると思います

しかしその基準であるliの大きさを定めていないのだから、imgの大きさも定まりようがないというのが論理的解釈だと思います

それでも実際はwrapをかけるかかけないかでそれぞれ一意的にある大きさでimgが表示されるわけです。

ようするにcssはそこに記述されているプロパティの兼ね合いで最終的にある要素がどういう風に表示されるのか、その挙動を理詰めで予測するのが困難な部分があって、それはプログラミング言語よりもある種厄介な癖として立ちはだかっているように思います

上記の例の場合も理詰めで挙動予測するには、プロパティ性質に関する論理的情報が不足しているように感じます。「imgはliの大きさを基準にその100パーセント分の大きさで表示しろ」という情報から、実際どのような大きさでliやimgが表示されるのかはっきり言って予測しようがないと思います

多くの参考書にもどう挙動するのか一意的な推測を可能とするだけの情報は書かれていません。

しかしたらcss公式仕様を端から端まで参照することで過不足なく挙動を把握するための情報が手に入るのかもしれませんが、仕様のどこか今の自分仕事にとって必要情報なのか見極めるのにはなかなか困難なところがあるという意味で、情報に対するアクセスの困難性があると思います

私はjava学習しました。極めたというところには全く到達していませんが、それでもああいった言語は書いた通りに動くものであるということを実感しています。つまり自分が今書いた、書こうとしているコードがどのような動きをするのかを予測するための、各記法関数に関する文法情報として過不足なく学習者に提供されているように思います

cssにも事実上として「文法」なるものはあることは前述の例からも疑いの余地がない(先に書いた解釈以上に要素の表示を決定づけるための文法がないなら、要素の大きさは決定不能ということになる)のに、その情報いまいち曖昧提供されているきらいがあるように感じます

https://coliss.com/articles/build-websites/operation/css/about-css-layout-algorithms.html

↑このような「レイアウトアルゴリズム」と語るサイトも見つけはしましたが、私の言っている文法、すなわち、要素の表示のされ方を決定づけるための処理のフローと、概念的に同質なのかはいまいち不明です。

他の端的な例としては隣接する要素同士がネガティブマージンなので重なった場合、z-index指定してない場合はどういう法則でどちらの要素が上にくるのかとかも、本来は明確なアルゴリズム文法に則って決定されているはずなのに、多くの初学者あるいは中級以上の方でさえも当て推量とセンス試行錯誤で、なんとか自分意図通りの表示になるように調整を繰り返すことを余儀なくされているかもしれません(意外と単純で要素の名前について辞書ベースでどちらが上にくるか決定されてる?)。理詰めで考えさえて設計しさえすれば一発で自分で思い通りの挙動(表示)をさせる、ということが困難な言語CSSの癖として立ちはだかっているように思います。それはある種プログラミング言語が持つそれよりも厄介な癖だと思いますプログラミング言語の方がある意味で「素直」に挙動してくれると私は思います

同じように感じた人は教えてください。またそういう感覚卒業してCSS挙動論理的に手に取るようににわかるぞという方は今後の学習に関するアドバイスをしていただけると助かります

2023-12-17

[] 2023-12-17

年の暮れに差し掛かり、仕事の成果を振り返る時が来た。

私の仕事スタイルは、知識よりもIQに頼るという言葉がぴったりだろう。

Elasticsearchという検索システムを使いこなすにはどうすればいいのか、そんな問いに直面したとき、私は本を一冊読み込むような堅実なやり方ではなく、ドキュメントを目に焼き付け、実行しながら身につけるという方法をとる。

私はIQ馬力に例え、RQエネルギー効率に例えることがある。

RQとは合理的知性のことで、知らない人もいるだろうから説明しよう。

「1/2で100円、1/2で-10円」の賭けと、「100%で50円」の賭けどちらを選ぶか、という問題に対して正しい答えが出せる能力RQである

私は学生時代ミクロ経済学を学んだことがあり、成績も優秀だったので、「合理的経済人」がどのような行動をとるのかは理解している。

しかし私は統合失調症であり、RQのものは低いのだ。自制心がなく、ゲームなどにはまると抜け出せなくなる。

からエネルギー効率よりも馬力で突き進もうとする。何かツールフレームワークを学ぶときは、本を丁寧に読むのではなく、チュートリアルドキュメントを一日で吸収しようとするのだ。

実は私は引きこもり気味ながらも、スポーツは得意だった。特に体操はそうだった。

から学ぶ方法も、マッスルメモリに頼るという筋肉質な方法になってしまうのだ。

私が設定するパスワードは長いのだが、これらはマッスルメモリで覚えている。

同じようにプログラミングも、「とにかく実行を試す。試行錯誤トライアンドエラー。やってれば覚える」という感じだ。

パターン認識は、このような筋肉質な側面を持つのではないかと思うことがある。人工ニューラルネットワークも、同じようなものではないか

馬力でなんとかしてきたことはわかった。ではなぜ地道な努力を避けてきたのか。それは、汎用性の低いものを学ぶのに時間をかけたくないからだ。

プログラミング言語ならまだ汎用性があるが、具体的なツールについては、その場で理解できるし、時間をかける必要がないと思うのだ。

私が数学が好きなのは、まさに汎用性という観点からだ。エドワード・フレンケル教授は汎用数学を「ペンキ塗りのようなつまらないもの」と言ったが、まさにそのペンキ塗りが仕事をするうえで重要なのだ

そう考えると、私はコスパばかり気にしているという点でRQが高いのかもしれない。

でも、やっぱりコスパなんてつまらないと思う。何か深遠なる分野の奥深くに潜り込みたいのだ。

anond:20231216154938

コードの重複があるわけでもない状況で、コード関数ごとに分離するメリットデメリットを知りたいという話ですよね。

コードの重複がある場合関数などに切り分けていないと、同じコードを何度も書くことになり、不具合があった時にコピーされたすべての個所に変更が必要となるというデメリットがあるので理由がわかりやすいですが、重複が無いとその点が不明確ですね。

画面に収まらないサイズコード複数関数に分割するのが一般的だとは思います

理由元増田も書かれている通り、長いと理解の限度を超えるからです。

コード意味があるまとまりで短ければ短いほど理解がしやすいと思います

グローバル変数を使わないようにすると、入力・出力が関数を読むだけで明確にわかるので、さら理解がしやすいです。

また、関数に分けておけば、関数仕様通りに動くかの確認するユニットテスト簡単に書けます

ユニットテストでは関数さらにほかの関数を呼び出している場合、呼び出される関数の代わりにテストダブルを用意することもあります

分割して、複数関数を呼び出すようにすることのデメリットは、

下手糞が切り分けるとなんでそういう切り分けになったかからないところで切り分けられてかえって可読性が損なわれるとか、

関数機能拡張してより多く・あるいは少なくの情報必要な時に関数インタフェースの変更が必要になることとか、

関数を置いているファイル内の場所を変えたときバージョン管理システムが追っかけてくれないことがあるとか

くらいでしょうか。

いずれにせよ、分割するメリットの方がデメリットを上回ることが大半なので、大抵は機能ごとに分割して小さい関数を作り、それをメインからは呼ぶようにすると思います

以下、お悩みポイントに答えます

一番はメイン/サブ関数間で右往左往するので今やってる工程が何なのかがよくわからん

まず、関数名前をやっている工程を表すものにすることですね。

データの取り込み」 とか 「データ突合せ」とかを明示すると、それを呼んでいるということはそういうことをしてくれると思うので。

また、関数が何をしてくれるのかも関数コメントとしてつけておくとよいと思います

例えば、

filename引数指定されたファイルからデータを取り込み、JSONフォーマットで返す

引数: filename

返値: JSONフォーマットされた取り込まれデータ。例: [{'employee name': '山田 太郎', 'employee id': 1}]

例外: filenameを開けない場合はFileOpenError、JSONコンバートできなかった場合はConvertError

みたいなコメントをつけておくと何をする関数なのかわかるので、その機能を調べたいとき以外は読まないでいいかなと。

あと、コード連続で読みたい場合ソースを解析してタグジャンプをつけてくれるツールやらIDEやらを使うことが普通だと思います

あとは関数ごとに変数をいちいち定義し直すのがだるいみたいなのもありますね。

これはどういう意味でしょうか?同じものを表すのに関数ごとに別の変数名を付けているとか?

もしそうだとしたら、使っているプログラミング言語の制約やプログラミング規約によるものなのでしょうか?

ある関数ローカル変数が他の関数ローカル変数に影響を与えることは無いはずなので、ローカル変数は大抵適当名前が付けられるイメージです。

今時のプログラミング言語なら変数スコープ関数の中にとどまるような書き方ができると思うのですが。

関数インタフェース定義し、そこにいちいち引数を書くのが面倒というなら...まあ、それは必要税って感じがします。

そこに引数を書いておくことでこの関数が何に影響されるのかわかるので。

参考までに。

2023-12-05

よく知らないんだけどプログラミング言語? ってやつかな

プログラマなら同意してくれると思うけど、Rust や Go で書ける時代アセンブリ機械語を書く人間はいない、相当な趣味人とか特殊例外だけだ。

上京すると方言を喋らなくなって東京言葉しか使わなくなる、みたいな感じかしら

2023-11-24

anond:20231124192825

コマンドはCで書かれていても、汎用的な処理を連結してるわけじゃん。

別にpythonに限らないけど、プログラミング言語で同様の処理を書くならロジックに工夫の余地があるから速くできるかもよ。

処理の実行頻度とか考えて、割に合わないと考えたらコマンドの組み合わせで処理すればいいけど。

2023-11-12

ゲーム感想 CHR$(143)

CHR$(143)

全ステージクリアSteam実績全解除)

プレイ時間 88時間全ステージクリアしたばかりの現在時間

あああーーーー、めっちゃしかったーーーー!

全クリして達成感に満ちあふれているが、この気持ちが収まる前に感想を書くぜー!

しかし、タイトル名の読み方がよくわからん。「キャラクターズ・ワン・フォースリー」でいいのか? ちなみに、ゲームタイトル画面では『Project CHR$(143)』表記となっている。

タイトル名の『CHR$(143)』だが、Amstradというイギリスメーカーから1984年販売されたCPC464というホームコンピューターパソコン?)のキャラクターコード143に四角形が割り振られていることが元ネタのようだ。レトロコンピューター元ネタにしてるだけあって、ゲーム画面全体もレトロ雰囲気に仕上がっているのも好きだ。

ゲームジャンルとしてはパズルゲームでいいはずだ。ちなみに、Steamでのジャンルは「インディー, シミュレーション」となっている。

Steamのストアページの類似品として、『Baba Is You』(説明不要の有名パズルゲーム)に、『Factorio』・『shapez』といった工場建設シミュレーションに、カイロソフトレトロ調シミュレーションゲームに、変態パズルゲームメーカー(誉め言葉)で知られるZachtronics社の『SHENZHEN I/O』などが並んでいる。

『CHR$(143)』の紹介文をSteamストアより引用する。

リッチやりがいのある物理ベースパズル/ロジック/建設/プログラミングゲーム!弾道学、流体力学熱力学化学反応、核反応をマスターし、オートメーションレンガを使い、構造物機械乗り物を作り、電力を生産し、パズルを解き、霧を突き破り、CHR$を倒そう!

https://store.steampowered.com/app/1695620/CHR143/

パズルゲームレトロ調ゲームが好きな私としては『CHR$(143)』のトレイラー動画上記の紹介文に心惹かれてプレイした次第だ。これがやっぱり面白かった。上記に挙げた他の類似品に匹敵する、あるいは凌駕するほどに面白かった。

ゲーム内容としては、箱庭系というよりもステージ攻略型のパズルであるゲーム内では各ステージレベル表記されているので、この感想文でもレベル表記する。

パズル難易度としてはかなり高い。それでも、チュートリアルなどの導入はしっかりしてるし理不尽さもないので、私にとっては時間をかけて考えれば自力クリアできる難易度だった。とはいえ、悩みに悩んで、日をまたいでようやくクリアしたレベルもある。

ちなみに最終レベルクリアSteamグローバル実績は1.6%である。これで難易度の高さが伝わるだろうか。

レベルの主な流れとしては、ブロックを作ったり掘ったり操作したりして目的を達成(レベルクリア)していくことにある。ブロックの一つ一つが物理演算する様は『Noita』らしさを感じた。レベルクリアについてだが、解法がガチガチに決まっているわけではない。時間制限があって急いで操作しなければいけないレベルもあり、レベルによってはアクション性が高かったり、シューティングゲーム要素があったりするのも楽しかった。

レトロゲームは昨今のゲームと比べてジャンルという枠組みにとらわれていない印象があるが、この『CHR$(143)』も同様だ。

ブロックを組み合わせたギミックはとても面白いが、その中でも特に好きなのは蒸気タービンによる発電だ。

ただ過熱蒸気をタービンに送るだけでは発電できず、冷却用の水も同時に必要となっている。タービンで熱交換されて、過熱蒸気はただの蒸気となり、水は温水になる。発電を継続させるためには、蒸気を常に加熱する仕組みと、温水を冷却塔で常に冷却する仕組みを構築する必要がある。蒸気よりも過熱蒸気の方が密度が小さいので上の方に行き、水よりも温水の方が密度が小さいので上の方に行く。こうしたブロック毎の密度の違いを利用してタービン発電を実装していく必要があるのだ。

このように、流体力学熱力学を反映したシミュレーションになっているのが、『CHR$(143)』の面白いところだ。

非常に頭を悩ませながらも面白かったのがプログラミングだ。AND・OR・NOTなどのブロック論理回路を実現できるだけではなく、CPUブロック存在する。そしてCPUに対して、このゲーム専用(たぶん)のプログラミング言語命令プログラムできるのだ。この言語がとても低レベル(低水準・低レイヤ意味で、決して侮蔑表現ではない)なのが面白い。逆ポーランド記法で数式を記述したり、goto文で条件分岐したりといった具合だ。言語仕様は大量にあり、pdfファイルでまとめられているほどの徹底ぶりだ。しかも、ゲーム中でも詳細はpdfファイルを参照するようにと求められるのだ。パズルゲームで、まさかプログラミング言語仕様書を読まされるとは思わなかった!

とはいえ言語仕様を全て理解する必要はないし、プログラミングゼロからコーディングする必要もない。プログラムサンプルとしてすでに作られた物をコピペで流用して必要な個所だけを書き加えたり修正したりすればいいし、仕様書も必要なところだけを読めばいいのだ。それはそれで、ある意味リアルプログラミングともいえるのだが……。

説明するのを忘れていたが、ゲーム全般日本語対応しているもの機械翻訳なので翻訳ガバガバだ。とはいえキー操作一つで英語表記に戻せるのでそんなに問題は無いし、翻訳ガバガバっぷりはそれはそれで味があっていいものだ。しかし、プログラミング言語仕様が描かれているpdfファイル英語オンリーなので、読み解くのに苦労した。とはいえ言語仕様を調べようとして英語説明しかなくて苦労するというのにも、これはまたリアルプログラミングだなぁと感じたものだ。

好きなレベルについても述べたいので、まずはレベルがどのように構成されているかから説明する。

チュートリアル的なレベルギミック説明からまりレベルを経る毎にギミックを応用させた解法が求められる。さらレベルを経るとこれまでの集大成的なレベルが登場して、それをクリアしたらまたチュートリアル的なレベルで新たなギミックが登場する。この繰り返しが『CHR$(143)』の大きな流れだ。

その中で私が好きなのは、やはり集大成的なレベルだ。集大成的なレベルは視界が狭まっており、一体何があるのだろうかと周囲を探索しながら進んでいくのが楽しかった。こうしたレベルクリアSteam実績解除の対象となっており、それにふさわしい達成感も与えてくれる。

そして最終レベルクリアしたのが、つい最近のことだ。この達成感を味わったことを書き残したくて、今この文章を書いているところだが、それももう終わりのようだ。

しかった。ありがとう、『CHR$(143)』!

2023-11-06

anond:20231106231835

素人が相当勉強しないと作れないウェブ電卓が、

AIに指示するだけで完成しまった!

もうプログラマ要らないよね。

って大騒ぎされてるのが世間一般認識だと思う。

だけど、現役の優秀なプログラマAIを試させると、

こんなことも知らないんじゃ使い物にならん。

ここ回答間違ってる。のオンパレードで、実用性がほとんどない印象なのよ。

なので、ウェブ電卓カスタマイズして、答えが3の倍数になるときだけ、文字が点滅する

みたいなカスタマイズして納品するレベルプログラマ仕事AI代替される一方で、

ネット上にサンプルコードすらないハードウェア制御ソフトを書いたり、

プログラミング言語特性限界まで使い倒してる人の仕事までは奪えない。

ログイン ユーザー登録
ようこそ ゲスト さん