質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

6回答

1649閲覧

C言語でプログラミングを学ぶにあたっての本の推薦のお願い

Dzoo__0829

総合スコア11

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

1クリップ

投稿2017/06/01 03:30

私は修士1年で機械系の研究室に所属している者です。
今回、ここに投降した目的は
・「動けばよい」ではなく「可読性やメモリ管理においてより良い」コードの書き方の考え方を学べる
・C言語でプログラミングの基礎的な考え方を学べる
ような書籍の推薦をいただきたい、というものです

簡単に背景を述べますと
学部4年に研究室に所属して、(ほぼ)初めてプログラミングに触れ自分でコードを書く機会がありました。
その際言語はCで、勉強法としてはCの書き方の入門書1冊とインターネットで調べながらで試行錯誤しながら、という感じです。
また、それは高々数十×数十の行列の計算や簡単な連立微分方程式を解くのみのものでした。
この過程で感じたのが
・ただ動くだけでなく、動いてるものをさらに効率よく動くようにコードを書く技術がほしい。
また、将来のことを考えたら他人が読む前提でコードを書けるようになったほうが良いのでは?
・同じ研究室の人はそれぞれが様々なプログラミング言語(Python,C++,matlab...)を用いており、
Cだけでなくほかの言語にも触れたほうが良いのでは?
という2点でした。

そこで1点目より、ただ「動くコード」から卒業するための本を紹介していただきたく思います。

また2点目については、先日情報工学を専攻している友人から
「いろいろな言語に手を出すより、まずそれらの基になってるCをしっかり勉強するのも良いかも」
と助言をもらいました。
この考え方自体にも意見をいただければ幸いですが、とりあえずはこの考えのもとに
C言語でプログラミングの基礎的な考え方を学べる本を紹介していただきたく思います。

ここまでの長文に目を通していただきありがとうございました。
私はきちんとプログラミングについての授業を受けたこともないので言葉の用法が間違っているかもしれません。
また、teratailのほかの質問を見る限りコードに関する具体的な質問も多いので、
このような質問は適当でないかもとも思います。

しかし、経験豊富な皆様から助言をいただければ誠にうれしく思います。
ぜひよろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答6

0

可読性というか「よい」コードを書くということではリーダブルコードでしょうかね。

セキュア(対脆弱性)であれば IPA のセキュア・プログラミング講座はまず押さえておくとして、あとは何でしょうかね……
(※この講座でも C/C++ は脆弱性を生みやすいとして重視されています。主にメモリ管理の問題が影響しています)

プログラミング全体といえば、ある意味ネタになりますが、The Art of Computer Programming が究極、ですかねえ。
(プログラマとして活動されている中で、実際これを読んだことがある人は決して多くないと思いますが……何せ学術書ですからねえ)
あとはプログラミング作法なんかもよいとは思います。

出版社で言うと、オライリージャパンかアスキードワンゴ(旧アスキー出版)、あとは技術評論社も良著が多い印象です。(ただしオライリーやアスキーは良い分だけお高いですけど……修士課程ということであれば、大学・大学院の図書館に蔵書として購入してもらうのも手ですね)

投稿2017/06/01 04:11

tacsheaven

総合スコア13703

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

まず個人的な意見として、Cはあんまりオススメしません。
CはCでポインターの概念など重要ですが、可読性やメモリ管理、実行速度などを考えるならC#やC++などがよろしいかと。

本を紹介してほしいとのことですが、プログラミングに限りませんが、本があれば身につくというものでもありません。やはり実経験から身に付けるのが一番の近道であると感じます。また、可読性やメモリ管理などは言語によらず一般的な理論として語られているので、C専用の本というものはないと思います。

質問者のプログラミング能力はよくわからないですが、あえてオススメするなら以下でしょうか。

C
苦しんで覚えるC言語

C#
独習C# 第3版

C++
独習C++ 第4版

投稿2017/06/01 03:40

_Victorique__

総合スコア1392

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

既に優れた書籍を紹介している回答者さんが複数いらっしゃるので、別の観点から回答します。
(ちなみに私の勧める本は、「プログラミング作法」の第1版です。内容は少し古いですが、多くの方が読み、それに対して批判を加えているので、自分の身につけるスタイルを「考える」のに有益です。)

まず、自分のコードを改良したい、ということですが、その出発点がそもそも間違っています。改良するな、という意味ではありません。改良したものを「書く」な、という意味です。既に大勢のプログラマがいる現代、あなたが必要としているプログラムは、ほぼ確実に、誰かが既に書いています。再発明は時間の無駄です。まず、「プログラムを書かない」、これを覚えてください。道具を探せば大体はなんとかなります。
次に、書かないといけない場合に何をすべきか、という問題ですが、書くための道具を探します。C言語は万能ではなく、むしろ欠陥の多い言語です。例えば、文字列を扱うフィルタならPerlが便利ですし、Web上ならJavascriptが有用です。その分野に合った言語を選びます。
最後に、どうしてもCで書かないといけないとき、どうするか。基本に忠実に、やりたいことを書く、細かい内容は、既にあるライブラリに丸投げ。これでいいんです。
私のオススメは、書かない美しさを身につけることです。

投稿2017/06/02 09:03

majiponi

総合スコア1720

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

1点目

読みやすさ云々の話は定番の
リーダブルコード

あとは名著の内容をまとめた
プリンシプル オブ プログラミング
を読んで、気になった話があれば原著にあるのもいいかもしれません

2点目

全然基礎的じゃないですが、
機械系ということなのでCを使うとしたら組み込みメインでしょうから、
モダンC言語プログラミング


今はCでいいと思いますが、

「プログラマが知るべき97のこと」によれば

プログラミング言語は複数習得すべき

プログラマのソフトウェアに対する考え方は、どの言語を使用しているかによって大きく左右されます。特に最初に覚えた言語の影響は大きくなります。何年プログラミングを経験しようとも、ずっと同じ言語だけを使い、1つの言語しか知らないプログラマは、その言語の枠の中でしかものを考えられなくなってしまいます。

実際そうだと思うので、動的メモリ確保面倒だなと思うぐらいの段階で、
できればCとは全然別の言語学ぶといいと思います。

投稿2017/06/01 04:32

ozwk

総合スコア13528

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

can110

2017/06/02 09:09

制御/ロボット系は組込用途が多いかも(よく知らない)ですが 熱/流体/材料力学系では数値解析、シミュレーションのためにC/C++を使ってましたね。 むしろこっちのほうが多かった印象があります。
ozwk

2017/06/02 09:42

私も電磁気系だったのでシム用途で使ってたクチです。
guest

0

書籍では、ないですが?

参考にどうぞ。。

C/C++ セキュアコーディングセミナー資料

投稿2017/06/01 13:27

ai_2013_dev

総合スコア338

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

Head First C は C でのプログラミング学習にはとても良い選択肢だと思います。 C の入門書でもありますが、後半ではより実際的な場面を想定しているので、現実的なプログラムを書くためのコツを掴むことができると思います。

投稿2017/06/01 05:53

SaitoAtsushi

総合スコア5446

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問