アカウント名:
パスワード:
C言語が悪いんじゃなくて、それを扱う人間のレベルが低いのが悪いということ、質を担保するためのコストがかなり高くなること、でしょう。
かといって、そう簡単にレベルの底上げができたり質を担保するためのコストが下がるわけでもなく、危ないことがやりづらい・起きにくい環境を選びましょう、というのは同意できて、オススメとしてRustを挙げるのも同じではありますが。
個人的な危惧として、未だにコンピュータを理解するにはC言語を知らないとだめだ、という原理主義者が結構いることです。そんなことないんだけどなぁ…。
コンピュータを理解したいのなら一つくらいアセンブラを知ってほしいとは思う。
理解のためだけでいいので古いのでいい。86系より68000系の方がコンピュータを理解するのはいいと思う。(個人の感想です。)
その上でC言語を理解してほしい。そうすると他の言語の何が良くて何が悪いのかよくわかり、使用用途がはっきりする。
#まあ、タレコミ時のタイトルのC++は死んでいいと思う。(個人の感想です。)
コンピュータの「何」を理解するかって部分は一切触れずに「コンピュータを理解する」って言葉が、各々の思惑で使われているような気がするが、そこは大丈夫なのかな。
OS上で動作するシステムの開発をするにあたって、アセンブラの知識がそれほど重要だとは思えない。WEBシステムの開発やってる連中がアセンブラを勉強して、役立てることが出来るのか。彼らはアセンブラを知らなくても、ある視点ではコンピュタを理解している人と言って差し支えないと思いますよ。
86系より68000系の方がコンピュータを理解するのはいいと思う。(個人の感想です。)
コンピュー
先にLISPを知っててCを知ったとき、struct list { struct list *car; struct list **cdr;};なんだって理解した。
forthも解りやすかった。すぐコンパイラ?が書けた。Cがアセンブラにどう落ちるか理解すると、大体の言語は理解できると思うけどなぁ。
> 人間のレベルが低いのが悪いと つまり、滅びるべきは、人 間 !
> 未だにコンピュータを理解するにはC言語を知らないとだめだ、という原理主義者が結構いることです。
「コンピュータを理解するにはC言語を知っているだけじゃダメだ」ならその通りでしょうけどC言語知らないとコンピュータを理解するのが厳しいのはその通りでしょう。
Rustじゃなんでコンピュータの理解が厳しくなるのです?
というか、Cの何をしればコンピュータ理解になるのかが未だにしっくりこない。
ポインタ? GCが無いこと? ヒープとスタックのメモリモデル? 標準でライブライが弱いから自分で実装するので勉強になる? それくらいなら他の言語でもなぁ。
コンピュータの低レイヤであるドライバやOSがC言語だからコードを追うために必要と言われたら分かるけど。
> じゃなんでコンピュータの理解が厳しくなるのです?なんだろう。このもやもや感。
C言語は理解できてないけど他の方法でコンピューターを理解できたなら「私はこういう方法で理解したけど、その方がC言語よりこういう理由で効率が良い」と主張すればいいし、未だにコンピューターもC言語も理解できてないならあんたはお呼びでない。
親コメじゃないけど言わせてもらうわ。
他の言語は理解できないけどC言語で理解できたなら『私はこういう方法で理解したけど、その方が他の言語よりこういう理由で効率が良い』と主張すればいいし、未だにコンピューターも他の言語も理解できないロートルなら黙ってろよ。
C言語扱える人は大抵別な言語も扱えるかと・・・?PHPとかだとPHPとJavaScriptだけって人も結構居るけどスキルリストにC言語が入ってる人はCでもJavaでもLL言語でも割と幅広い範囲をカバーしている人が多いですね逆にネットワーク系のスペシャリストなのにCが得意な人なんかもいるような・・・。世間で言うところのWeb系は割と技術力が低い人が多くて手数とかはったりとか発想力で勝負とかもあるのでなんともかんとも。
コンピュータの原理を理解しろという言葉を貴方はおそらく理解出来ていないかと思います。まずはアセンブラで何をどうしたらどうなるのかを学んだ方がいいのではないでしょうか。
C, C++言語を知っていれば確かにJavaもカバーできないことはないけど、Javaでの「お作法」とかライブラリとかは想像もつかないから、結局最初から学び直しでしたね。
たかが{ }をどこにくっつけるかで宗教的違いがぁっ!SQLに至ってはインデントの仕方すら、まだ自分の中でさえ決まってないや。
> C言語扱える人は大抵別な言語も扱えるかと・・・?
COBOLとProlog以外はねwww
C言語の話をしてるのにアセンブラの話を出すバカ登場
しかも、言ってる事が全部テメェの思い込みと来たもんだ、スゲェや!
C言語が使えて他も行けるって奴は確かにいる。ただ、C言語を知ってるから他の言語でも関数型プログラミングができます程度のやつが*扱える*の範疇になるならと思ってるならレベルが知れる。
#Z80でもプログラム書いたことあるわボケぇ!(泣)
> C言語扱える人は大抵別な言語も扱えるかとそう思ってRustに挑戦しましたが、見事に打ち砕かれました(笑)
SQLは予約語を大文字にするか全部小文字かでの宗教対立がですね…
正直自動で整形してくれない限りは全部小文字で書きたいわ一発ですんなりかけたためしがないし
アセンブリは構造の理解には役立つけど何かを実現するためのコストが高すぎる。
低レイヤーのプログラムをしたい場合は大半をCでクリティカルな部分だけアセンブラみたいなやりかたしないと時間をドブに捨てていくようなもん。
CもできないCASLもできない人が コンピュータの原理を学習するならCを学ぶよりCASLの方が手軽で効果的って話だろ。。。
CASLの知識じゃ実際のコンパイラがどういうコード吐いて実行してるかを想像するのは無理だろ。
caslでプログラム書くのに比べたら、C言語の方が100倍以上生産性がある。pythonとかF#とかはC言語の10倍くらい生産性があるなあ。
"どの言語で理解した"ということは重要ではなくて、「C言語じゃないと駄目だ」という言説への反論ですよね何故そのような主張を勧めたのでしょうか?
コンピューターって要するに「仮想マシン」と理解していいんじゃね。JavaVMでもいい。現実にはAthlonの16本レジスタなんて、もう人間が直接使いこなすことはできないよ。
コンピューターを理解した時の言語と言えば、S-BASICとM-BASICかなぁ。1.コンピュータは計算機であり電卓代わりに使える。(これに関してはROMBASICの方が優秀)2.コンピューターSM何れかのBASICを最初にロードしないと何もできない。(なんせ、MZですから)3.コンピューターに想定外の事をやらせるのは結構大変。(SWのONOFF読み込み、豆電球を付けたり消したりとか)4.でも、想定外の事でもやってやれなくはない。(プリンタポートのペーパーエンド端子を入力に使ったり、データ端子にトランジスタ噛まして出力に使ったり)5.その気になればDATA文に直接マシン語書くようなことまでできる。
プログラミングができる人でコンピューターを理解したい・させたいならコンピューターの仕組みについて直接学ぶほうが早いだろう。その上で実際のプログラムの記述がコンピューターの動作の何になるのか考えていけばいい。どうせなら低級言語でやるほうが良い。CPUの仕様書なり解説書なりを読んだ後でコンパイラを作るのが良いんじゃないのかね。そこまでする必要があるのかそこまでしたいのかは人によるんだろうけど。道具の仕組みを知りたいなら道具を使うのではなく分解するほうが早い。
コンパイラ作るくらいならCPUから作ってしまったほうがいいと思いますけどね。
FPGAでも簡単なCPUなら作れるんだっけ…?
ステマ扱いになるかもしれませんが、自分はO'reillyの書籍「コンピュータシステムの理論と実装」 https://www.oreilly.co.jp/books/9784873117126/ [oreilly.co.jp]によって、コンピュータシステムの基本を理解できたと思っています。元は大学の講義用に作られたもので、NANDゲートからAND・ORゲートなどをHDLで記述していき、ALU、CPUを作り、アセンブラ、VM、コンパイラ、OSを書くことによってコンピュータシステムが出来上がり、その上で動くアプリケーション(テトリス)の完成へと導く書籍です。実装を交えながら理解していく手法のため
>未だにコンピュータを理解するにはC言語を知らないとだめだ、という原理主義者が結構いること
あと「C言語は万能で何でも出来る」という考えを実践するのもどうかと。確かにコンピュータ言語の中では比較的何でも出来る言語ではあるんだけどそれは決して「どんなプログラムを書くのにも向いている」ではない。
awkのワンライナーで済む処理をCで書いて半日潰してデバッグしてる人が隣にいたりすると「C氏ね」とか言いたくなる人がいるのもわからんでもない :-)
たいていの言語はチューリング完全だから向き不向きを考えなければ何でもできる
>原始的なメモリ管理機能しか備えておらず、それが脆弱性や不具合を生む原因となっているという
この点が実用面ではデメリットでも教育面ではメリットだというだけでしょう。別にZ80のマイコンボード用意できるならそれでもいいよ。
真の原理主義者なら、土からシリコン単結晶を作成するところから始めるんじゃないでしょうか?(TOKI○的なアレ)
DASH村的にはそれで合ってると思うのですが、原理主義者的には鉱石掘り出してNANDゲートを作り、全ての回路をそのNAND回路で構成するところから…
DASH村的には、土から何かを掘り出すんだったらまずは機械式計算機とかビー玉計算機辺りから始めてブートストラップしていく方がドラマチックなんじゃないでしょうか。
JAVAこそ消えてなくなれ
現実には人間が正しく使うのは不可能だから「正しく使えば」なんて前提は無意味。もっと言えば、正しく使えないくせに「俺様だけは正しく使える」とか思い上がって、あげくの果てに「正しく使えないバカが悪い」とか(まさにこの親コメのように)言い出すのだから有害でしかない。
単に代替の存在しないニッチがあるから使わざるを得ない、Rustのおかげでニッチの一部を埋められるようになったというだけのこと。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
身近な人の偉大さは半減する -- あるアレゲ人
言語のせいじゃない (スコア:5, 参考になる)
C言語が悪いんじゃなくて、それを扱う人間のレベルが低いのが悪いということ、質を担保するためのコストがかなり高くなること、でしょう。
かといって、そう簡単にレベルの底上げができたり質を担保するためのコストが下がるわけでもなく、危ないことがやりづらい・起きにくい環境を選びましょう、というのは同意できて、オススメとしてRustを挙げるのも同じではありますが。
個人的な危惧として、未だにコンピュータを理解するにはC言語を知らないとだめだ、という原理主義者が結構いることです。そんなことないんだけどなぁ…。
ほえほえ
Re:言語のせいじゃない (スコア:4, 参考になる)
コンピュータを理解したいのなら一つくらいアセンブラを知ってほしいとは思う。
理解のためだけでいいので古いのでいい。
86系より68000系の方がコンピュータを理解するのはいいと思う。(個人の感想です。)
その上でC言語を理解してほしい。そうすると他の言語の何が良くて何が悪いのかよくわかり、使用用途がはっきりする。
#まあ、タレコミ時のタイトルのC++は死んでいいと思う。(個人の感想です。)
Re: (スコア:0)
コンピュータを理解したいのなら一つくらいアセンブラを知ってほしいとは思う。
コンピュータの「何」を理解するかって部分は一切触れずに「コンピュータを理解する」って言葉が、各々の思惑で使われているような気がするが、そこは大丈夫なのかな。
OS上で動作するシステムの開発をするにあたって、アセンブラの知識がそれほど重要だとは思えない。WEBシステムの開発やってる連中がアセンブラを勉強して、役立てることが出来るのか。彼らはアセンブラを知らなくても、ある視点ではコンピュタを理解している人と言って差し支えないと思いますよ。
86系より68000系の方がコンピュータを理解するのはいいと思う。(個人の感想です。)
コンピュー
Re:言語のせいじゃない (スコア:3)
先にLISPを知っててCを知ったとき、
struct list {
struct list *car;
struct list **cdr;
};
なんだって理解した。
forthも解りやすかった。すぐコンパイラ?が書けた。
Cがアセンブラにどう落ちるか理解すると、大体の言語は理解できると思うけどなぁ。
C言語はなんでもやらなければならない(≠なんでもできる) (スコア:3)
細かいところの始末が個人レベルに委ねられすぎというか、
だからこそもう少し高級言語使えや、となるのも理解はできる。
自分は、C言語を使えますが、別に知らなくてもいいんじゃね、という気はしてます。
C言語を使いこなすうえでの七転八倒は、確かに血肉となってますが、
掛けなきゃいけなかったコストかというとスゲエ微妙。
当時はそれしか選択肢がなかっただけで。いやTurbo Pascalとかはありましたけどね。
Re:言語のせいじゃない (スコア:2, おもしろおかしい)
> 人間のレベルが低いのが悪いと
つまり、滅びるべきは、人 間 !
Re:言語のせいじゃない (スコア:1)
> 未だにコンピュータを理解するにはC言語を知らないとだめだ、という原理主義者が結構いることです。
「コンピュータを理解するにはC言語を知っているだけじゃダメだ」ならその通りでしょうけどC言語知らないとコンピュータを理解するのが厳しいのはその通りでしょう。
Re: (スコア:0)
Rustじゃなんでコンピュータの理解が厳しくなるのです?
というか、Cの何をしればコンピュータ理解になるのかが未だにしっくりこない。
ポインタ? GCが無いこと? ヒープとスタックのメモリモデル? 標準でライブライが弱いから自分で実装するので勉強になる? それくらいなら他の言語でもなぁ。
コンピュータの低レイヤであるドライバやOSがC言語だからコードを追うために必要と言われたら分かるけど。
Re: (スコア:0)
> じゃなんでコンピュータの理解が厳しくなるのです?
なんだろう。このもやもや感。
C言語は理解できてないけど他の方法でコンピューターを理解できたなら
「私はこういう方法で理解したけど、その方がC言語よりこういう理由で効率が良い」と主張すればいいし、
未だにコンピューターもC言語も理解できてないならあんたはお呼びでない。
Re: (スコア:0)
親コメじゃないけど言わせてもらうわ。
他の言語は理解できないけどC言語で理解できたなら
『私はこういう方法で理解したけど、その方が他の言語よりこういう理由で効率が良い』と主張すればいいし、
未だにコンピューターも他の言語も理解できないロートルなら黙ってろよ。
Re: (スコア:0)
C言語扱える人は大抵別な言語も扱えるかと・・・?
PHPとかだとPHPとJavaScriptだけって人も結構居るけど
スキルリストにC言語が入ってる人はCでもJavaでもLL言語でも割と幅広い範囲をカバーしている人が多いですね
逆にネットワーク系のスペシャリストなのにCが得意な人なんかもいるような・・・。
世間で言うところのWeb系は割と技術力が低い人が多くて手数とかはったりとか発想力で勝負とかもあるのでなんともかんとも。
コンピュータの原理を理解しろという言葉を貴方はおそらく理解出来ていないかと思います。
まずはアセンブラで何をどうしたらどうなるのかを学んだ方がいいのではないでしょうか。
Re:言語のせいじゃない (スコア:2)
C, C++言語を知っていれば確かにJavaもカバーできないことはないけど、Javaでの「お作法」とかライブラリとかは想像もつかないから、結局最初から学び直しでしたね。
たかが{ }をどこにくっつけるかで宗教的違いがぁっ!
SQLに至ってはインデントの仕方すら、まだ自分の中でさえ決まってないや。
Re:言語のせいじゃない (スコア:1)
> C言語扱える人は大抵別な言語も扱えるかと・・・?
COBOLとProlog以外はねwww
Re: (スコア:0)
C言語の話をしてるのにアセンブラの話を出すバカ登場
しかも、言ってる事が全部テメェの思い込みと来たもんだ、スゲェや!
C言語が使えて他も行けるって奴は確かにいる。
ただ、C言語を知ってるから他の言語でも関数型プログラミングができます程度のやつが*扱える*の範疇になるならと思ってるならレベルが知れる。
#Z80でもプログラム書いたことあるわボケぇ!(泣)
Re: (スコア:0)
> C言語扱える人は大抵別な言語も扱えるかと
そう思ってRustに挑戦しましたが、見事に打ち砕かれました(笑)
Re: (スコア:0)
SQLは予約語を大文字にするか全部小文字かでの宗教対立がですね…
Re: (スコア:0)
正直自動で整形してくれない限りは全部小文字で書きたいわ
一発ですんなりかけたためしがないし
Re: (スコア:0)
1週間もかからず、基礎的な土台は理解できる。
コンピュータを理解するなんてのは、言語一つできたぐらいでは到底無理だけど、他の言語ではなく C をやっておくように勧めるような部分だけなら、全て CASL の範囲でも十分におさまる。むしろ正確でなおかつ簡単に理解できる。
Re: (スコア:0)
アセンブリは構造の理解には役立つけど
何かを実現するためのコストが高すぎる。
低レイヤーのプログラムをしたい場合は
大半をCでクリティカルな部分だけアセンブラみたいなやりかたしないと
時間をドブに捨てていくようなもん。
Re: (スコア:0)
CもできないCASLもできない人が コンピュータの原理を学習するならCを学ぶよりCASLの方が手軽で効果的って話だろ。。。
Re: (スコア:0)
CASLの知識じゃ実際のコンパイラがどういうコード吐いて実行してるかを想像するのは無理だろ。
Re: (スコア:0)
caslでプログラム書くのに比べたら、C言語の方が100倍以上生産性がある。
pythonとかF#とかはC言語の10倍くらい生産性があるなあ。
Re: (スコア:0)
"どの言語で理解した"ということは重要ではなくて、「C言語じゃないと駄目だ」という言説への反論ですよね
何故そのような主張を勧めたのでしょうか?
Re: (スコア:0)
コンピューターって要するに「仮想マシン」と理解していいんじゃね。
JavaVMでもいい。
現実にはAthlonの16本レジスタなんて、もう人間が直接使いこなすことはできないよ。
Re: (スコア:0)
コンピューターを理解した時の言語と言えば、S-BASICとM-BASICかなぁ。
1.コンピュータは計算機であり電卓代わりに使える。(これに関してはROMBASICの方が優秀)
2.コンピューターSM何れかのBASICを最初にロードしないと何もできない。(なんせ、MZですから)
3.コンピューターに想定外の事をやらせるのは結構大変。(SWのONOFF読み込み、豆電球を付けたり消したりとか)
4.でも、想定外の事でもやってやれなくはない。(プリンタポートのペーパーエンド端子を入力に使ったり、データ端子にトランジスタ噛まして出力に使ったり)
5.その気になればDATA文に直接マシン語書くようなことまでできる。
Re:言語のせいじゃない (スコア:1)
プログラミングができる人でコンピューターを理解したい・させたいならコンピューターの仕組みについて直接学ぶほうが早いだろう。その上で実際のプログラムの記述がコンピューターの動作の何になるのか考えていけばいい。
どうせなら低級言語でやるほうが良い。CPUの仕様書なり解説書なりを読んだ後でコンパイラを作るのが良いんじゃないのかね。そこまでする必要があるのかそこまでしたいのかは人によるんだろうけど。
道具の仕組みを知りたいなら道具を使うのではなく分解するほうが早い。
Re: (スコア:0)
コンパイラ作るくらいならCPUから作ってしまったほうがいいと思いますけどね。
Re: (スコア:0)
FPGAでも簡単なCPUなら作れるんだっけ…?
Re: (スコア:0)
ステマ扱いになるかもしれませんが、自分はO'reillyの書籍「コンピュータシステムの理論と実装」 https://www.oreilly.co.jp/books/9784873117126/ [oreilly.co.jp]によって、コンピュータシステムの基本を理解できたと思っています。
元は大学の講義用に作られたもので、NANDゲートからAND・ORゲートなどをHDLで記述していき、ALU、CPUを作り、アセンブラ、VM、コンパイラ、OSを書くことによってコンピュータシステムが出来上がり、その上で動くアプリケーション(テトリス)の完成へと導く書籍です。
実装を交えながら理解していく手法のため
Re: (スコア:0)
>未だにコンピュータを理解するにはC言語を知らないとだめだ、という原理主義者が結構いること
あと「C言語は万能で何でも出来る」という考えを実践するのもどうかと。
確かにコンピュータ言語の中では比較的何でも出来る言語ではあるんだけど
それは決して「どんなプログラムを書くのにも向いている」ではない。
awkのワンライナーで済む処理をCで書いて半日潰してデバッグしてる人が
隣にいたりすると「C氏ね」とか言いたくなる人がいるのもわからんでもない :-)
Re:言語のせいじゃない (スコア:1)
たいていの言語はチューリング完全だから向き不向きを考えなければ何でもできる
Re: (スコア:0)
>原始的なメモリ管理機能しか備えておらず、それが脆弱性や不具合を生む原因となっているという
この点が実用面ではデメリットでも教育面ではメリットだというだけでしょう。
別にZ80のマイコンボード用意できるならそれでもいいよ。
Re: (スコア:0)
真の原理主義者なら、土からシリコン単結晶を作成するところから始めるんじゃないでしょうか?(TOKI○的なアレ)
Re:言語のせいじゃない (スコア:1)
DASH村的にはそれで合ってると思うのですが、
原理主義者的には鉱石掘り出してNANDゲートを作り、全ての回路をそのNAND回路で構成するところから…
Re:言語のせいじゃない (スコア:2)
DASH村的には、土から何かを掘り出すんだったらまずは機械式計算機とかビー玉計算機辺りから始めてブートストラップしていく方がドラマチックなんじゃないでしょうか。
Re:JAVAこそ消えてなくなれじゃない? (スコア:0)
JAVAこそ消えてなくなれ
Re: (スコア:0)
現実には人間が正しく使うのは不可能だから「正しく使えば」なんて前提は無意味。もっと言えば、正しく使えないくせに「俺様だけは正しく使える」とか思い上がって、あげくの果てに「正しく使えないバカが悪い」とか(まさにこの親コメのように)言い出すのだから有害でしかない。
単に代替の存在しないニッチがあるから使わざるを得ない、Rustのおかげでニッチの一部を埋められるようになったというだけのこと。