はてなキーワード: C言語とは
なイメージ
n=1の話をするが組み込みにもちゃんと若い人いるよ。新卒一括採用だからWebみたいに派手じゃないけど。
あと組み込みにも色々あるよ
① CPUにC言語で書く。状態制御とかDI/DOする。割り込みつかってある期間内で処理を終わらせるようにする
② CPUにアセンブラで処理書く。古い製品のCPUはそれでしか書けないとかある。
③ FPGAにVerilog/VHDLで処理書く。①で間に合わない速度が必要なとき。あとA/D変換とか
④ PLCにラダー言語で処理書く。リレーwwwなんだが、何十年も出してる装置とかPLCが中心になっていて今更変えられないので今も需要がある。発注元も昔のやつ参考にするのでPLCで制御することみたいな要求事項がそのまま残ってる。
⑤ 組み込みLinuxに対してC++で処理書く。リアルタイムじゃない。CPU1はこれで、CPU2が①とかある。1と2のデータの受け渡しにFPGA使ったりする
⑥ タッチディスプレイのUIとか。タッチディスプレイの機械売ってるメーカが出してるクソ使いにくいソフトで作る。これで作ると牛丼屋の券売機見たいのができる。
私は3年立たずに逃げたのでもっと他にもあると思う
プログラマの派遣業界の闇というほどでもないけど、実情を少しだけ書いておく。
プログラマの派遣会社は、とにかく人を集めて派遣できればもうかるので、常に未経験者歓迎で募集を掛けている。
そして、入社後に2週間程度の社内研修をして、C言語やJAVAでの四則演算、条件分岐、ループ、出力、その他の本当に最低限の知識を教えて
社内テストをクリアした人から、即戦力として派遣先に送られていく。
要は、未経験歓迎で募集して、ちょっとでも使えそうなら直ぐ派遣し、マジで使え無さそうなら研修期間にクビを切る。
社内研修で教わる言語は派遣先で必要とされる言語なので、ニーズに合わせて言語が変わって行く。
こういう世界なので、彼女の仕事の内容を具体的に決めているのは、事実上、派遣先の会社になる。
同期がpython やら java の仕事をさせてもらってるのは、派遣先の会社がその作業を割り当てるからであり、
彼女が Excel 仕事をさせられているのも、派遣先の会社がその作業を必要としているからなのである。
派遣会社の社長も上司も、会社の利益の最大化のために行動するだけで、彼女のキャリアについて考えることはない。
ただで退職されるくらいなら、コーディングの仕事を振ってくれそうな会社に派遣させた方が儲かるくらいにしか思ってない。
女かどうかなんて誰も気にしていない。
C言語だけでいいとしてもそうはなんねーだろアホか
11. 演習
https://www.python.jp/train/exercise/index.html
以下、気になったところ。
プロシージャ (procedure)とは、プログラミングにおいて複数の処理を一つにまとめたものをいう。
一連の処理を意味を持った一まとまりにすることで、再利用性が高まり、プログラム中に繰り返して現れる処理を1ヶ所で記述でき、プログラムの保守、管理を容易にする。
呼び出し関係は通常階層構造をなし、その最上位にある、プログラム全体のエントリーポイントを含むルーチンをメインルーチン、呼び出されるものをサブルーチンと言う。
乱数を生成する
Pythonでは、乱数を生成するときには random モジュールを インポート します。
インポートしたモジュールの関数は、モジュール名.関数名() の形式で呼び出します。
randrange() は、
random.randrange(開始値, 終了値)
cf. リファクタリング (プログラミング) - Wikipedia
リファクタリング (refactoring) とは、コンピュータプログラミングにおいて、プログラムの外部から見た動作を変えずにソースコードの内部構造を整理することである。
また、いくつかのリファクタリング手法の総称としても使われる。
ただし、十分に確立された技術とはいえず、また「リファクタリング」という言葉に厳密な定義があるわけではない。
主なリファクタリング
Pythonの慣例で、定数値の変数名は小文字のboard_size ではなく、BOARD_SIZE のようにすべて大文字にします。
プログラム中にいきなり出てくる意味のわからない数字は、一般に マジックナンバー といいます。
基本的には、マジックナンバーは、値を直接書くのではなく、その値の意味がわかるように、常に 変数に代入してから利用するようにします。
マジックナンバーを変数に代入せず、あっちこっちで使ってしまうと、あとでその値の意味がわからなくなってしまったり、値を変更するときに修正漏れが発生したりします。
cf. マジックナンバー (プログラム) - Wikipedia
プログラムにおけるマジックナンバー(英: magic number、魔法の数字)とは、何らかの識別子もしくは定数として用いられる、プログラムのソースコード中に書かれた具体的な数値である。
そのプログラムを書いた時点では製作者は数値の意図を把握しているが、他のプログラマーまたは製作者本人がマジックナンバーの意図を忘れたときに閲覧すると「この数字の意味はわからないが、とにかくプログラムは正しく動く。まるで魔法の数字だ」という皮肉を含む。
次のような理由で、マジックナンバーはプログラム中に含まれないことが好ましいとされる。
マジックナンバーを避けるため、マジックナンバーが書いてある箇所を定数や列挙型に置き換えるといった処置がとられる。
ハードコーディング(英語: hard coding)とは、本来プログラム中に記述すべきでないリソース(エラーメッセージなど)を、直接ソースコード中に埋め込むことである。
これらは本来、外部ソースから取得するか、実行時に生成するべきものであり、これをソフトコーディング(英語: soft coding)という。
今なら、高機能なIDEを使えば、力技でハードコーディングを書き換えることも可能?
元のソースコードでは、スイカとプレイヤーの位置を、x座標とy座標それぞれ別々の変数として保持しています。
しかし、スイカやプレイヤーの座標は本来一つの情報ですので、x座標とy座標で2つの変数に分ける意味はありません。
こういった場合、
(x座標, y座標)
主となる関数(ここでは suika_wari() ) と、
主となる関数が利用する補助的な関数 (ここではgenerate_position()、calc_distance()、 move_position())
を組み合わせて全体を構成する手法は、プログラムの開発でもっとも基礎的で重要なテクニックです。
エントリーポイントとは、プログラムを実行するうえで、プログラムやサブルーチンの実行を開始する場所のこと。
プログラム全体のエントリーポイントとなる場所を含むルーチンがメインルーチンである。
例えば、C言語の標準では、mainという名前の関数(の先頭)がエントリーポイントであり、各関数のエントリーポイントは、それぞれの関数の先頭である。
以上で、Pythonの入門が終わった。
この教材のボリュームなら、数日で学習できる。土日とかに集中してやればサッと通過できるはず?
Pythonの動作は、コード片をColabにコピペして実行すれば確認できるので楽だった。(あまり手を動かさなくても学べる)
https://www.python.jp/train/index.html
3. 文字列と入出力
https://www.python.jp/train/string/index.html
以下、気になったところ。
特になし。
特になし。
いや、Pythonだけじゃなくて、他のプログラミング言語でも、文字からなるデータは「文字列」って呼ぶだろ?
文章や人名など、文字からなるデータをソースコードに書く場合には、数値と違って、文字の前後を "(ダブルクォテーション) か '(シングルクォテーション) で囲んで記述します。
文字列の "ABC" と "DEF" を足すと、"ABCDEF" になります。
これはPythonに限った話ではなく、プログラミング言語全般に共通の話。
数値型同士のデータは四則演算ができるけど、違う型のデータでは四則演算ができない。
データ型を他のデータ型に変換することを「型変換」とか「キャスト」(cast)などと言ったりする。
数字だけからなる文字列は、次のように int() を使って整数に変換できます。
text = "123"
int(text)
123
数値の文字列化
int() を使って文字列を整数に変換するのとは逆に、str() を使って数値を文字列に変換できます。
num = 123 # 整数値
str(num)
'123'
処理するデータの型違いによるエラーは、基本的なうっかりミスの1つなので、常に型は意識してデータを扱いたい。
特にPythonのような動的型付け言語は、型を意識しなくてもプログラムが書けてしまうが、その分バグになりやすいので注意が必要だ。
いちいち型を気にするのは面倒くさいので、「型推論」というズボラな人向けの機能もある。
型推論(かたすいろん、英: type inference)とはプログラミング言語の機能の1つで、静的な型付けを持つ言語において、変数や関数シグネチャの型を明示的に宣言しなくても、変数宣言における初期化のための初期値や、関数呼び出しにおける実引数などといった、周辺情報および文脈などから自動的に(暗黙的に)各々の型を決定する機構のこと。
言語によってはtype deductionと呼ばれることもある。
推論に失敗するとその時点でエラーを報告できるため、少なくとも誤った型を用いることによるバグは回避できる。
また、アルゴリズムの記述に集中できるのでプログラムの抽象度が上がるというメリットもある。
ただし型推論と関数の多重定義(オーバーロード)は相性が悪く、オーバーロードをサポートする言語では型推論による恩恵が十分に受けられない(型推論ではシグネチャを一意に決めることができない)ケースがある。
Pythonには型推論の機能がないので、プログラマーが工夫して型によるバグをなくすしかない。
「Python 型推論」で検索すると、いろいろなTipsが紹介されている。
【Python】VSCodeが型推論結果を自動で表示してくれるようになった【TypeHinting】
https://zenn.dev/yosemat/articles/36638f17e9ded8
最初のうちは、型によるエラーはあまり気にしなくても良いと思う。
エラーが出たらその都度つぶしていけばいいし、あとでテスト方法を学んだら、型を検査する方法も分かってくるはずだ。
特になし。
特になし。
嘘の説明があるなー。
初心者向けに便宜的な説明をしておこう、という趣旨は仕方がないかもしれないけど、後で訂正するというか、詳しく説明するという注意書きは必要だろう。
何が嘘かって、用語の定義の問題なんだけど、「メソッド」という言葉は一般的に、オブジェクト指向プログラミングの用語で、クラスに定義されている関数のことをメソッドと呼んでいる。
しかし、教える順番として、クラスとかオブジェクトは後の方に出てくるなら、今の段階ではメソッドをどう説明すればいいのだろうか?
Pythonの文字列は、実はStringクラスのオブジェクトであり、Stringクラスには文字列を操作するための様々なメソッド(処理)が用意されている、ということをクラスの説明なしにするのは、ややこしいかもしれない。
なので、オブジェクトのことをここではざっくりと「データ」という言い方でごまかしている。
私のようなPython素人の場合、もっと良い説明方法が思い浮かばない。
とりあえず、ここではメソッドをデータに紐づけられている関数ということにしておこう。
メソッドは 関数 の一種です。これまで見てきたように、特定のデータに結びつき、
↓
https://www.python.jp/train/list/index.html
Pythonでは、これまで紹介してきたような、整数や実数、文字列などのデータのことを、オブジェクト(Object) という用語で呼びます。
Objectは英語で「物」とか「対象」とかいう意味の言葉ですが、Pythonでは、Pythonが操作するいろいろな種類のデータやプログラムなどのことを、まとめて オブジェクト と呼びます。
ここまで読んで、はじめてデータの種明かしがされて、Pythonのデータはオブジェクトであり、オブジェクトに用意されているメソッドが使えると。
せめて「詳しくは第8章のオブジェクトの説明を読んでね」ぐらいは書いておいた方が良いと思う。
なんでオブジェクトというデータ構造、仕組みを用意するのか?という根拠の説明がスッポリと抜け落ちている。
一般的にオブジェクト指向プログラミング(OOP)の説明方法、教え方は様々だが、単純にはC言語の構造体が出発点であり、「データに処理をくっつけたもの」という説明でいいだろう。
ちなみに、その反対に「処理にデータをくっつけたもの」をクロージャ―という。
オブジェクトもクロージャ―もPythonだけの仕組み、話ではないので、他にもっと分かりやすい説明方法があれば、そこから引用した方が良いだろう。
問題は説明の順番で、前提となる知識がない段階では、どのようにごまかした説明で切り抜け、後で詳しい種明かしをするか?という教え方の設計(インストラクショナル・デザイン)が問われている。
あまりうまくごまかせていないところを見ると、もしかしたらPythonを教えている教師たちは、あまり頭が良くないのかもしれない?
[自社開発メガベンチャーをわずか半年で鬱退職した雑魚エンジニアの話|JoanOfArc](https://note.com/joan_of_arc/n/ned510ca913c7)
1. 今はなき鉄鋼メーカー、研究所で新規シミュレーションコード立ち上げ
メンターが米国自動車メーカーへ転職して途方にくれた。電磁気学の教科書を読み漁って掲載されているサンプルコードを理解して、コード手打ちして3ヶ月で動く様にした。社内で誰も見たことが無い結果に驚かれた。
2. 鉄鋼メーカーの人員削減が若手にも迫ってきたので、電子部品メーカーへ転職。コードは書かず開発現場で製品試作品の制作をモクモクと行う。
3. 色々あってプログラマー派遣会社へ転職。ドコモ向けのアプリのテストデータを作成するだけの仕事をアサインされた。楽勝の仕事だったが、拘束時間が長く半年で10kg太る。
4. 派遣で今はなきシャープ常駐でデジカメファームウェアの開発現場に放り込まれる。C言語の未知のコードとLSIの仕様書に戸惑ったが、親切な若手社員に助けてもらって独り立ち出来た。2年程やったが、雇い止めに合った。
VC++製の画像処理アプリもメンテした。VBの画像処理アプリも自作した。
5. 現NTT、当時住友銀行子会社で常駐で電磁界シミュレーションアプリの新機能開発を担当。分散処理による計算時間短縮を狙う部分を担当。分散処理はMPI(現OpenMPI)を使用。まずはパソコン2台で分散処理を行うもNIC(LAN Card)がボトルネックで計算は出来るが1台で計算するよりパフォーマンスが出なかった。職場にジョインしたあとは、しばらくは訳がわからず、戸惑った。通勤時間が長く体が消耗した。
派遣プログラマーは嫌で正社員で働きたかったので、プログラマーにこだわらず職場を探した。知財の職に採用されたので、常駐先と派遣会社に退職を願いでると引き止められて困った。退職を強行して転職できた。離職票の入手に苦労した。暑い夏だった。
6. 中小製造メーカーの知財の職場では要領よく仕事をこなしていると時間があまる。余った時間で社内WEBサイトを作ったりした。使ったのはASP(ASP.NETの前身、VB.NETでコーディング)。フレームワークに従ってコードを埋めるとそれなりに動いた。DBMSはAccessを使った。要するにmdbファイルにデータを保存した。更新処理は管理者のみ、データの閲覧が主な機能であるWEBサイトだった。
7. 知財の仕事は楽勝なのだが、やはり開発の仕事に未練が出てきた。iOSアプリの開発もやってみたくなった。10年以上知財の仕事を行ったが思い切って無職へ転向した。親父も無くなり、遺産の整理もサラリーマンを行いながら難しかったのだ。(つづく)
プログラミング言語が、最初は0101からはじまって、マシン語になって、C言語とか出てきて、高級言語になって、スクリプトになって、という流れと同じで、
AIも最初にまともに動くものができたら、その支援を受けて多様なものができてくるんじゃないか。既にパソコンで動く大規模言語モデル、とされるものは、GPTを使っていると公言しているものがあるようだし。(規約違反だけどな)
花嫁が輪姦されてるのっていいよね。いいか?うんとても素敵です
Bing:
C言語のもとになる構造化言語は、1970年代から制御構造を導入したプログラミング言語を指しての「構造化言語」というワードが浮上し、当時のgoto文中心だったFORTRANやCOBOLやBASICを意識してそれと線引きするための用語として存在していました1。C言語は、1972年にAT&Tベル研究所のデニス・リッチー氏が主体となって開発した汎用プログラミング言語であり、C言語はBCPL言語を参考にして開発されました23。C言語は、その後、多くのプログラミング言語に影響を与えたことで知られています。
ごちゃごちゃ余計なことを言ってるが、要は答え:BCPL
後に深堀りすると本当はBであることがわかる。(英語で検索して日本語で要約して……)
しかもこのあとにB言語にはGOTOが存在しないとか嘘までつく始末……。ヤバすぎるだろ……
perplexity:C言語の元になった言語はB言語です[1][2][3]。
B言語は、C言語の開発者であるケン・トンプソンが開発した言語で、C言語はB言語の改良版としてリリースされました[1][2]。
https://www.perplexity.ai/search/ead144d3-a2f4-443c-b8b6-036b80218e40
まずBing余計な口答えするわ、ハルシネーションがきつすぎて嘘ばかりつくわ、間違い指摘したらチャット閉じるわでまともな検索には使えない。厳密モード使うくらいならperplexity使ったほうがマシだし、実際にperplexityを使ったほうがマシです。
ちなみに perplexity はB言語にGOTOがあることもちゃんと答えられました。
どっちが本当のことを言ってるのかわからんので、仕様PDF(https://web.archive.org/web/20150317033259/https://www.bell-labs.com/usr/dmr/www/kbman.pdf)見たわ。ってか、そういうメンドイことをやってくれるのを期待して検索チャットAI使ってるんですけど???
この作業が必要になるなら口語で検索したりハルシネーションで余計な時間を食わなくて済むだけ、Google使ってるほうがマシですけど?
そしてBing厳密モードはわからないって答えた。わからないって答えるだけましたけども、そもperplexityはちゃんとB言語にGOTOが存在すること答えられてるので、やっぱりBingよりはperplexityのほうがまともであるという結論になる。
何よりもperplexityは余計なことを言わないで聞かれたことだけを答えるし、ハルシネーション少ないからな。
結論:検索(要約するなら) https://www.perplexity.ai 使え。Bingはうんこ