今までずっと人事だったのに、会社の方針で明日からソフト部門に回される事になった。しかも分かりにくいと評判のC言語・・・もう転職しようかしら? でも、もう40歳過ぎだしなぁ。。
C言語が出来ないなんて理由で会社を辞めるなんてもったいないですよ。C言語は難易度高いですが、ちゃんと段取り良く勉強すれば、言語や文系・理系を問わず、人並みに仕事が出来るレベルにはなれると思います。
こんにちは、つちもぐらです。10年ほどC++でプログラムを実装しています。
この記事では、私がC言語を全く知らない状態から仕事で困らないレベルになるまでに学習した、C言語とC++の学習書を紹介します。
プログラミングは35歳以上で学習するのは無理みたいな事を言う人もいますが、私自身の経験や職場の人を見てきた感じでは「そんな事はない」と断言出来ます。
プログラミングの良いところは、会社でなくても家でコツコツ学べるところです。
一人でコツコツ勉強が辛い人は、C言語を学べるプログラミングスクールに通ってみても良いかもしれません。
頑張って勉強して、会社でドヤってやりましょう (`^´)
C言語とC++って何が違うの?
C++はC言語の後方互換です。C言語で使える記述はC++でも基本的に全部使えます。またC++はオブジェクト指向言語なので、C言語よりもコードを綺麗にまとめる事が出来ます。
なので特別な理由がなければ、C++で実装するのが一般的です。
ただ組み込みエンジニアは今でもC言語で開発しているところが多いです。
C++を採用しない理由としては、
- そもそも開発している組み込みソフト環境向けのC++コンパイラが無い。
- C++だと抽象度が上がり過ぎてメモリの管理が大変。
というところでしょう。
一般的な学習順序としてはC言語 ⇒ C++になるかと思います。
ただファイルの入出力や動的なメモリの管理といった、C言語では勉強するのも実装するのも大変な個所については、C++では別のアプローチが用意されています。このような箇所はC++だけ学べば良いでしょう。
[C言語/C++] 最初の入門書
最初の入門書は本屋やアマゾンの試し読みなどで、自分が最後まで勉強出来そうな本を選べばよいかと思いますが、私のおススメも紹介しておきます。
こちらは技術をやさしく説明する事で定評のある、高橋 麻奈さんの著書となります。ただこの2冊は内容が結構重複しているので、高橋さんのファンでなければ、C++のみを購入すれば良いでしょう。(私はファンなので2冊もっていますw)
重複していないのは、ファイルの読み込みやメモリの管理など、C++でより優しい代替手段がある個所となります。
あと少し話がそれますが、この著者は数々の入門書を書いてきた経験から、エンジニア必須スキルであるテクニカルライティングの本も出されています。技術文書を書くのに自信がない方は、こちらもご参照ください。
[C言語/C++] 入門書の次に読むべき本
最初の入門書に挙げた書籍を読み、実際にコーディングして動かしてみれば「C言語って意外と楽勝じゃん」という気分にはなれるのですが、現場でコードを読み書きするにはまだ荷が思いでしょう。
では続いて入門書の次に読むべき学習書をご紹介します。他のプログラミング言語の経験がある方は、ここで紹介する本から学習しても大丈夫です。
残念ですがこの独習C,C++は内容が被っていないので、C++を学びたい人は両方購入する事をおススメします。
独習C++はそれなりに高度なTopicにも触れているので、この2冊を読み込んで職場で実践経験を積めば、職場で普通にコーディング出来る人にはなれるかと思います。
ただ職場や学校がC++17(*)といった新しい版数のC++コンパイラが使えるのであれば、C++の学習は次の「独習 C++ 新版」1冊でも良いでしょう。
本書ではif文などC言語の文法も説明されています。
*) C++はISO(国際標準機構)で標準化されています。上記の17は2017年に標準化された事を示しています。
amazonの評価を見ると誤植が多いという事で★1~2個の低い評価を付けている人が散見されますが、現在は誤記修正版の “2刷” が届くので、誤記だらけの心配はしなくてOKです。”2刷”で出版社から公表されている誤記は2つです。詳細は下記から”正誤表”を確認してください。
同じ独習C++ですが、上記の「独習C++ 第4版」はC++03の環境を前提に「独習 C++ 新版」はC++17の環境を前提に記載されています。また著者も異なるので、雰囲気も異なります。
C++は “C++03” -> “C++11” で大幅に機能が増強されました。ここを境にモダンなC++とレガシーなC++と区別される位です。
普通に考えれば最新のC++を使えばいいじゃんとなるのですが、C++03のコンパイラでなければNGな職場もあると思うので、使用するC++のコンパイラがどの版数のC++をコンパイル出来るのかは学習前に確認しておきましょう。折角学んだことが職場で使えないのは悲しいので。。
あとC++を使う人は、STL(Standard Template Library)も勉強しておく事をおススメします。こちらはC++03対応です。
STLはC++がコンパイルできる環境であれば、他のライブラリと同様にそのまま使用出来ます。
STLを使えば、いままで自分がゴリゴリとプリミティブな記述で200~300行書いて実現していた機能をわずか2~3行で実現出来るようになるので、コードが圧倒的に管理しやすくなります。
加えてSTLに置き換えた個所はバグの心配もありません。
これはプログラム言語を問いませんが、自分が何かしらの機能が欲しいと思った時、いきなりコーディングを始めるのではなく、まずは自分が欲しい機能が既に何かしらのライブラリで用意されていないか探してみてください。
既存の標準ライブラリを使用した方が、バグがなく短時間でコーディングが終了し、且つ後で見直しやすいコードを実装する事が出来るでしょう。
既に標準であるような機能を個人で工数をかけてゴリゴリ実装する人は「車輪の再発明をするな」と上司から怒られるか、同僚からバカにされる可能性が高いのでご注意ください。
自宅でお勉強でやる分には全然OKですが、仕事ではやらない方が無難でしょう。
[C言語/C++] 職場でドヤりたい人が読んだ方が良い本
個人的には独習シリーズとSTLまで学習すれば、ネイティブなC, C++を用いた職場の開発で困る事はほどんどないかと思います。(Visual C++など、.NETの開発はまた別の話)
なので後は現場で仕事をしながら学んで行けば良いかと思いますが、それでは飽き足らない、周りのエンジニアに技術マウントを取られるのはプライドが許さないといった、更なる高みを目指す人向けの本をご紹介します。
但しここで紹介する本は、値段も難易度も高いのでご注意ください。
難易度については、amazonの試し読みや大きめの本屋さん等で中身を確認してから購入した方が良いでしょう。
値段については、私は楽天のお買い物マラソンで実質2割引きとかにして購入する事で出費の痛みを和らげていますw
前置きが長くなりましたが、ここから職場でドヤりたい人向けの本を紹介していきます。
タイトルの通り、効率的なC++をコーディングする為の本です。初版は1991年ですが、今でも一通りC++を勉強した人が次のステップに進む為に読むべき本としての地位をキープし続けている名著です。
C++は良くも悪くもコーディングの自由度が高いので、好き勝手にコーディングをすると、他の人はもちろん、自分自身でさえ時間が経つと可読性の悪いコードとなってします。
そういった問題に対してこの本はコーディングのガイドラインを示したものです。この本を熟読する事で、コードレビューでも活躍出来るようになるでしょう。
こちらも”Effective C++”同様にコーディングのガイドラインを示した本ですが、タイトルの通りAIP(アプリケーションインターフェイス)により注目した内容となっています。
ソフト設計でもハード設計でもインターフェイスはとても大事です。
特にプロジェクトメンバの皆が共通で使うようなライブラリのインターフェイスに変更が入った場合は結構な騒ぎとなります。
この書籍を熟読する事で、長期運用に耐えうる堅牢なインターフェイスを持ったコードを実装する事が出来るようになるでしょう。
では最後に究極のC++本を紹介して、この章は終わりにしたいと思います。
こちらはC++の生みの親”ビャーネ・ストロヴストルップ“氏の和訳本です。C++11対応です。
本書は9,680円と高額ですが、ページ数も1,300ページ越えの相当なボリュームとなっています。加えて難易度も高いので、全部読んで理解するのは相当な時間がかかるでしょう。
ただ辞書的な使い方も出来るので、持っておくととりあえず安心出来る、お守り的な属性もこの本にはあるかなと思います。
[C言語/C++] 組み込みエンジニア向けだけど為になる本(番外)
“Effective C++” や “C++のためのAPIデザイン” は難しすぎる・・・という方にお勧めの本を紹介します。
タイトルはファーム設計者向けですが、
- ヘッダファイルやインプリソースはどのように管理すれば良いか。
- 品質が高いコードを書くにはどうすればよいか。(ISOに言及して説明)
- レビューはどのようにすれば良いか。
といった実践的な内容が書かれており、ソフトエンジニアも十分に読む価値がある本だと思います。
続けてこちらはC++版ですが、内容はC版と被っていません。
堅牢なクラス設計の手法など、コーディングのガイドライン的な色合いの強い内容ですが、初心者でも読みやすい内容となっています。
なので”Effective C++” はちょっと難しすぎる、でも実践的なC++の本を読んでおきたいという方におすすめです。
最後に
私がC++を仕事で使える、多少は周囲にドヤれるレベルになるまでに勉強した書籍を紹介させて頂きました。これからC言語、C++を学習しようという方の参考となれば幸いです。
C言語,C++はイマドキの高級言語と違って学習の敷居が高いプログラム言語ですが、使いこなせるようになると、その分喜びも大きい言語かと思います。
C言語,C++は今後も高い需要が見込まれる一方、学習の障壁は高い事から競合エンジニアの数は増えにくいので、機会があればマスターしておいて損はない言語です。
皆様のC言語,C++の学習が滞りなく進む事を祈念しております。