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

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

2023-12-18

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代替される一方で、

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

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

2023-10-05

anond:20231005233046

このプログラムは、Pythonのようなインタプリタ型のプログラミング言語使用しています提供されたコード関数変数の組み合わせで、カウンター機能を実現しています。以下にその説明を詳しく説明します。

最初の行では、変数 counter に値を代入しています。これは、後で呼び出すためのカウンターオブジェクト作成するためのものです。

let キーワード使用して、内部のカウンター定義していますカウンターcnt という名前変数初期化され、値は0に設定されています。このカウンターは、外部から直接アクセスできないように、ローカルスコープ内に存在します。

次に、無名関数lambda関数)が定義されています。この関数は、2つの操作サポートしています:

:reset というキーを持つ場合カウンターの値を0にリセットします。

:incr というキーを持つ場合カウンターの値を1増やします。

この無名関数が counter 変数に代入されて、カウンターオブジェクト作成されます

その後、counter オブジェクトの .incr メソッドが呼び出されます。初回の呼び出しでは、カウンターが0から1に増加します。2回目の呼び出しでは、カウンターが1から2に増加します。このように、.incr メソッドを呼び出すたびに、カウンターの値が1ずつ増加します。

.reset メソッドが呼び出されると、カウンターの値は0にリセットされます

最後に、再度 .incr メソッドを呼び出すと、カウンターは0から1に増加します。.reset メソッドを呼び出しているため、カウンターの値は前回の値からリセットされています

このプログラムは、カウンターの値を増加させたりリセットしたりするシンプルカウンター実装例です。Pythonなどのプログラミング言語では、関数クロージャ使用して、このような動作を実現することができます

2023-09-28

anond:20230928180424

良いとか悪いとか言ってなくてネタ回答として寒いんだよ。

プログラミング言語brainfuckとか言うやつと同種のタイプでしょ。

anond:20230928175906

プログラミング言語の話になると必ず一人はbrainfuckとかwhitespaceとか言うやついるけど、擦られすぎてクソ寒いからマジでやめたほうがいいよ。

好きなゲームハード3DOですwピピンアットマークですwとか言うタイプでしょ君。

マジで皆飽きてるよそのオモシロ回答。

経験からWebエンジニア転職目指そうと思うんだけど、プログラミング言語は何がいい?

RubyとかPythonとかGOとか色々あるけどどれが一番早く転職できる?

2023-09-27

anond:20230927105551

現在プログラミング言語界隈で英語に該当するのがPython

英語と同じで別に好きで使ってるわけじゃない

anond:20230927111127

7つの言語 7つの世界

著者Bruce A. Tate 著、まつもと ゆきひろ 監訳、田和 勝 訳

  ・・・ この本、面白そうなんだけど、取り上げられている言語が「Ruby、Io、PrologScalaErlangClojureHaskell」なので、ある程度プログラミング経験がある人が対象かな。たぶん複数言語を多少なりとも使ったことのある人向けかと。

ちなみにオックスフォード大学では1年生向けの最初プログラミング言語として Haskell が選ばれているとか。凄いよね。そして彼らが2番目に教わるのが Oberon だとか。言語定義が最もコンパクト言語からとか。(ケンブリッジ大学最初に教えるのは OCaml だそうです。)

anond:20230919142207

中華包丁持って意気揚々フランス料理屋の厨房に来られてもちょっと困る

道具(プログラミング言語)を選定するということは対象分野(例えばWeb系なのか業務システム系なのか等)をある程度定めることになるのが現実だよ

anond:20230927105610

プログラミング言語の選定がプログラマのメインテーマだと思ってる

 ← それってあなた妄想ですよね。それの人はそんなことは言っていない。単にとっかかりの糸口を求めているだけ。

学者向けのプログラミング言語Rubyが挙がらなくなって本当によかった

あれはプログラマ用の日常言語である

プログラマが「ちょっと○○したいだけなのにイイイィィィ!」とキレるのを解消してくれるちょっとやばいお薬みたいな言語である

anond:20230919143417

増田プロわからんけど、プロだろうがなんでも同じって結論になるのはわかんねえなあ。

例えば使用率、文法の一致性だけでも差別化できると思うんだが、それすら無意味根拠あるの?

言語にすると、日本語って文法特殊じゃん?英語母国語じゃない外国人絶対日本がいいんだってならなきゃ、第2言語選択日本より英語になるのが普通じゃん?

そこには使用率と他の言語理解への応用性があるからだと思ってるけど、プログラミング言語にそんな発想はないのかが本題の根幹なんだよ

2023-09-21

プログラミングやったことないが

プログラミング言語って言語なんだよな。

辞書持ってるのと英語喋れるのは違うし、

五線譜を数えて「ド」「ミ」とか言えても、楽譜を見て演奏したり音楽を聞いて楽譜を書いたりはできない。

まりプログラミング言語習得したら

その言語で考えて論理を組み立てるってこと、

なのかな?

それか単に設計図ができてから辞書引き引き変換する感じ?

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