タグ

プログラミング学習とCに関するt-murachiのブックマーク (10)

  • なぜCを学ぶべきなのか - 立命館大学情報理工学部セキュリティ・ネットワークコース プログラミング言語サポートページ

    プログラミング言語としてのCは、初学者にとっては難しい言語であるのは確かです。中には、初心者が学ぶべき言語ではないと言い出す人もいます。ですが、私たちセキュリティ・ネットワークコースの教員は、我々のコースの学生は早期にCを学ぶべきであると考え、このカリキュラムを設定しています。以下に理由を列挙します。 Cはコンピュータの構造に深く根ざした言語なので、コンピュータそのものの学習を同時に進めることで、相互の理解が深まると考えています。例えば主記憶(メモリ)上にプログラムとデータの双方が置かれるフォン・ノイマンアーキテクチャや、メモリ上のデータ配置の問題、エンディアンの問題などを直接感じられるのはCならではだと思います。 CはOSや、コンパイラなどの言語処理系、組み込み機器などで広く使われており、その構造や動作と深く関わっているため、セキュリティとネットワークの理解のために欠かせないからです。

    なぜCを学ぶべきなのか - 立命館大学情報理工学部セキュリティ・ネットワークコース プログラミング言語サポートページ
    t-murachi
    t-murachi 2020/05/26
    情報理工学部ですか、そりゃCぐらいはやっとけとしか(´・ω・`) Python とかで入門してから…って声も多いけど、そういう入門は大学入る前に独学でやっとけよとか思うのは老害に寄り杉じゃろか(´・ω・`)
  • 低レイヤを知りたい人のための Cコンパイラ作成入門

    はじめに このオンラインブックは執筆中です。完成版ではありません。フィードバックフォーム このには一冊のに盛り込むにはやや欲張りな内容を詰め込みました。書では、C言語で書かれたソースコードをアセンブリ言語に変換するプログラム、つまりCコンパイラを作成します。コンパイラそのものもCを使って開発します。当面の目標はセルフホスト、すなわち自作コンパイラでそれ自身のソースコードをコンパイルできるようにすることです。 このでは、コンパイラの説明の難易度が急に上がりすぎないように、様々なトピックを書全体を通じて次第に掘り下げていくという形で説明することにしました。その理由は次のとおりです。 コンパイラは、構文解析、中間パス、コード生成といった複数のステージに概念的に分割することができます。よくある教科書的アプローチでは、それぞれのトピックについて章を立てて解説を行うことになりますが、そのよう

  • 例え話をしないC言語のポインタの説明 | 右や左の旦那様

    まえおき 巷では「プログラマーになりたい人に初学者にとって、ポインタという考え方がわけわかめ」という話がよくあります。 そこでいろいろな人が「ポインタは住所だ」とか「変数がハコで」とか手を変え品を変え分かりやすいように説明してくれています。 それでもなお「ポインタがわかりづらい」という人が後を絶ちません。 もういっそのこと、例え話をやめてド直球で攻めたらいいんじゃないでしょうか。 Hello, Worldより簡単に サンプルコード 以下のコードを考えます。 void main() { int a; int b; int c; a = 1; b = 2; c = a + b; } 「#include <stdio.h>」なんていう謎のオマジナイはこの際ナシです。あんなもの無くたってC言語は成り立ちます。 まぁ見ての通り、どこにも何も出力されませんが。 このプログラムは、「c = a + b」

    例え話をしないC言語のポインタの説明 | 右や左の旦那様
  • C言語のポインタはメモリを想像できれば理解できる | 100% Pure NEET

    最近、C言語のポインタは難しいって話をプライベートでして、そのときにした説明をまとめてみた。 コンピュータのメモリがどのようになっているか想像する これはHex Fiendというソフトを使ってあるファイルのHexダンプを見たものだけど、コンピュータのメモリも同じような構造になっているのでこれを使う。類似のソフトはHex Editorなどで検索すれば出てくるだろう。 コンピュータのメモリはこうしたずらずらと数値が記録されたマス目の連続のような構造をしている。Hex Editorなのでこれは16進数で表現されている。1バイトは16進数2桁で表現される。Hex Editorでは普通は1バイトごと、あるいは4バイトごとに区切って表示する。このエディタは一区画ごとに8桁の16進数があるので4バイトごと。 ポインタを使うのに重要なのはたぶん、こうしたメモリの内容を頭の中で思い浮かべることができることだ

    t-murachi
    t-murachi 2012/11/18
    「プログラミングをこれからやろうという人にC言語とかC++を勧めるのは反対」<でもプロになろうという人に C/C++ を経験させないままにするのはもっと反対。
  • C 言語にポインタがある理由は省メモリ化・高速化・開発作業の省力化です - 偏見プログラマの語り!

    前回の記事『プログラム初心者にC言語のポインタを不意ながら教える羽目になったなら、こう教えると良いよ』でポインタの教え方を書きました。ソレに対して「そもそもどうしてポインタっていう仕組みがあるの?」という質問をもらったので、つらつらと書こうと思います。稿は「ポインタがある理由の教え方」ではなく「ポインタがある理由」です。分かっている人には相当に退屈な文章ですのでそういう人は読まずにお帰りください。 で、えーと、結論だけ先に言うと省メモリ化のため、次に速度アップのため、そして生産性アップのためです。 1. メモリは有限である。 マシンに搭載されているメモリには限りがあります。メモリ空間は広大ですが、無限ではないのです。 好き放題にどんどんメモリを使ってデータを格納するわけにはいかないというわけです。しかしプログラムは計算のためにメモリ空間を占有します。仮に↓こんな感じに、わずかな有限メモ

    t-murachi
    t-murachi 2012/06/21
    これだと「なんで (参照じゃなくて) ポインタがあるの」という質問の答えにはなってないな。歴史的経緯や void * (C++ なら reinterpret_cast) に触れないと納得できない人も相当数いらっさるんじゃ…
  • 本の虫: 多くのプログラマは言語を表面的な理解だけで使っている

    一般のプログラマの多くは、プログラミング言語というものを、ごく浅い表面的な理解だけで使っている。これは、いわゆる「入門書」によるところが大きい。入門書は、言語をできるだけパターンで教えようとする。かくかくしかじかの場合には、とらとらうまうまのように書いておけばいい、などといった具合だ。 たとえば、配列の全要素や、aggregateの全メンバーをゼロで初期化したいとする。多くのC++プログラマは、以下のように書く事であろう。 int a[100] = {0} ; このコードは、正しく動く。配列aの要素は、すべてゼロで初期化される。しかし、C++という言語を考えた場合、{0}と書く必要はない。空の{}で十分なのである。 int a[100] = {} ; では何故、多くのC++プログラマは{0}と書くのか。それは、多くの参考書が、そのように書いているからに過ぎない。大多数のC++プログラマは、

    t-murachi
    t-murachi 2010/09/19
    入門書が言語の厳密な仕様にどこまで触れるべきかは著者の裁量に委ねられるところではある…んだが、にしたってそこに「どうしてそうなる」的な疑問が全く差し挟まらない子は、多分向いてないんだろうなぁ、とは思う
  • 2NT -無料ブログ 無料ホームページ 等-

  • 教養としてのC言語

    筆者は「日経ソフトウエア」というプログラミング雑誌で記事の執筆と編集をしている。先日,C言語にターゲットを絞った特集を企画・担当した。記事は無事校了し,今はこの特集を収録した2008年11月号が書店に並んでいる。 C言語の特集を企画した理由はただ一つ,C言語を学ぶことによって,プログラミングに関するより深い知見を得られると強く感じたからだ。筆者自身,C言語に不案内で苦手意識を感じていたので,その思いは余計に大きかった。同時に,だからこそ,筆者同様にC言語の経験が比較的少ない人,そしてこれからC言語を学ぼうという人に役に立つ特集に仕立てられるのではという気持ちもあった。 日経ソフトウエアとしては,C言語にターゲットを絞った特集をここ3年ほど掲載していなかった。その間にアプリケーション・ソフトウエアの大きな流れとしては,デスクトップ・アプリケーションからWebアプリケーションへの比重が高まり,

    教養としてのC言語
    t-murachi
    t-murachi 2008/09/30
    「C言語を学べば,プログラマがメモリー空間を利用する方法を実際に学べ,体で覚えることができる。」<C言語的なアプローチでね。本当はマシン語の方が望ましい。
  • C言語について質問です。 C言語を学びたいと思います。 ですが現状ではCやC 等の区別もあまりついてません。 目標はVB等のようにランタイムなどを使用せず単体で動作する .. - 人力検索は

    C言語について質問です。 C言語を学びたいと思います。 ですが現状ではCやC++等の区別もあまりついてません。 目標はVB等のようにランタイムなどを使用せず単体で動作する ネットワークツールなどを作る事を目標としております。 現在私が使えるのはHTMLPerlPHP、VBをそれぞれ少しずつ使える程度です。 このような私が目標を達するためにお勧めの書籍やサイト、また学習方法などあれば教えて下さい。

    t-murachi
    t-murachi 2007/12/03
    最近 Qt をいじり始めた。MFC を避ける手段の一つとして意外とアリかもとか思い始めてる。fork が使えない Win32 でソケットプログラミングとか、正直辛いよな~。。。
  • 茶々入れ: 国民宿舎はらぺこ 大浴場

    C/C++は永久に不滅です! (IT Pro) 突っ込みどころ満載なのでちょっと茶々入れしてみようと思う。 Part1 C/C++は永久に不滅です! その一つに,C言語は非常に自由度の高いコーディングができることが挙げられます。例えば,if-elseの処理を1行で記述できるC/C++の三項演算子は便利な機能ですが,よく見ないと処理内容がよくわかりません(リスト1)。 三項演算子って、C ではよく悪者にされるよね。おいらは値を代入するシーンや値を return で返すシーンではそれなりに有用だと思っているし、演算順序が左→右であることから複合的な条件分岐も割と整理して記述できるという利点もあったりするんだけれども。 でも、確かに示されているコード例は、酷いね。せめて、 (msg[i] >= 'a' && msg[i] <= 'z') ? msg[i] += 'A' - 'a' : msg[i

    t-murachi
    t-murachi 2007/03/15
    このシリーズ続いてたのね。あとでちょっと読み進めてみますか。 / (2009/9/26 追記) ああ、三項演算子は左→右じゃなくて右→左だってば!!>ヲレ (恥
  • 1