0
0
前提
・この春エンジニアになったばかりのものです。
・現在C言語の勉強中です。
・主にソフトウエア開発に従事する予定です(現在研修中のため、具体的な業務内容はわかりません)
発生している問題・エラーメッセージ
どのような業務内容であろうとも、この知識は必ず必要であるというC言語関連の知識は何が挙げられるか、ご教授いただけないでしょうか。
調査したこと
・Cは他の言語よりハードウエア寄りの知識を要する、というふうに見受けられました。
個人的には、CがメモリやCPUとどう関わりあっているのか、などを勉強すると、結果的にプログラムを書く際にも簡潔なコード、メモリを気にしたコードの書き方ができるのかなと思いましたが、、、
(仮にそうだとして、ではどう言う勉強のルートがあるのだろうか、その一例でもお教えいただくと嬉しいんだが、、、)
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答11件
#1
総合スコア13170
投稿2023/05/07 06:37
編集2023/05/07 15:31まだ何をするかも分からないのに取捨選択をしようというのが間違いと思います。
Cは他の言語よりハードウエア寄りの知識を要する、というふうに見受けられました。
そもそも OS を書くための言語ですので、"コンピュータ"という存在の動作や各種CPUの動作と直結しています。
また、開発された当初からの伝統?的に、コンピュータに優しくプログラマには(今風には)優しくありません。
一見不要に見えるものでもアイデア・使い方次第で如何様にも活用出来たりする可能性が残されているのがCであり、可能性を限定することで扱い易くしている今風の言語とは真逆です。
そういう意味で、「あらゆる状況でも不要なもの」は無いと考えます。
どう言う勉強のルートがあるのだろうか
個人的には、アセンブラの勉強が一番Cに近いと思います。
今のCPUは機能が多すぎますので、昔の8ビットCPU(8080やZ80等)くらいが簡単です。
また、ラズパイ等ならハードとソフトが極近くて動作が見れるので良いかもしれません。
#2
総合スコア504
投稿2023/05/07 07:25
編集2023/05/07 10:51[香車]東上☆あらし☆海美「
貴方が、最低限、理解すべき事は、
『研修終了後、半分ぐらいの奴が、研修を理解できなくて退職する』
ということ。
」
2023(R05)-05-07 追加
あなたの回答に「スパムの可能性がある」と修正依頼が届きました
あなたの回答の「スパムの可能性がある」の修正依頼が解消しました
あなたの回答に「質問に対して適切な回答ではない」と修正依頼が届きました
[香車]東上☆あらし☆海美「
これ、『Q&A』じゃなくて、『意見交換』ですよ。
」
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
#4
総合スコア85778
投稿2023/05/07 12:57
C言語関連の知識は何が挙げられるか
最低限のC言語知識と言うことだけであれば、
・IT技術全体の中でのC言語の立ち位置の理解
・文法全てを記憶
・主要なライブラリ関数(まあ、Cの入門書に出てくる関数くらいは全部)の機能の把握(引数の型や順番、返り値は都度調べれば良いので覚えなくて良い。よく使う物は自然に覚える)
・関数リファレンスなどの読み方の習得
「文法のうち、これだけは最低限」というのは無いでしょう。全部知っていることが最低限。
普段使わない細かいところは記憶に自信が無ければ都度調べるでもいいです。演算子の優先順位とか。
どのような業務内容であろうとも、
上記以上は、業務内容次第ですね。
もちろん、新人ITエンジニアとて身につけておいた方が良いことはC言語だけでは無いのはおわかりかと思います。
個人的には、CがメモリやCPUとどう関わりあっているのか、などを勉強すると、
このあたりの知識がほとんど無いのであれば、入り口としては、基本情報技術者試験の参考書をおすすめします。目試験のシラバス文書のありか: https://www.ipa.go.jp/shiken/syllabus/gaiyou.html#syllabus
とりえあえずプログラマを目指すなら、シラバスのテクノロジー系の6-8割くらい身についていれば良いのでは?
上級・中級エンジニアを目指すなら、1年目の内にテクノロジー系以外も含めた全部の99%の理解を目指すのでしょうか。
試験自体は60点取れれば合格なので、受験自体に意味は無いです(会社が合格を勧める場合は受験するとして)。
あくまで、入り口なので、理解した段階で、土地勘が出来ていると思うのでさらに進みましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
#5
総合スコア1579
投稿2023/05/07 18:28
ChatGPT-4による解答
C言語はソフトウェア開発において基本的な知識を持っておくべき言語です。C言語の特性を理解することで、他のプログラミング言語にも応用できる知識や、効率的なプログラムの作成に役立ちます。以下に、C言語に関して最低限理解しておくべき知識を挙げます。
- 基本構文: 変数の宣言・初期化、演算子、制御構造(
if
、for
、while
、switch
)、関数の定義と呼び出し、コメントの書き方など。 - データ型:
int
、float
、double
、char
、_Bool
などの基本的なデータ型と、そのサイズや範囲を理解しておくことが重要です。 - 配列とポインタ: 配列の宣言、初期化、アクセス方法を理解するとともに、ポインタとアドレス演算子、間接参照演算子を使ったアクセス方法を学びましょう。
- 文字列操作: 文字列の初期化、入力、出力、比較、コピー、連結などの操作方法を理解することが重要です。
- 構造体と共用体: 構造体や共用体を使って、複数のデータ型をまとめる方法を学びましょう。
- メモリ管理: メモリの動的確保・解放(
malloc
、calloc
、realloc
、free
)や、メモリリークの防止方法を理解しておくことが重要です。 - ファイル操作: ファイルのオープン、クローズ、読み込み、書き込みなどの基本的な操作方法を学びましょう。
- 標準ライブラリ関数: C言語には標準ライブラリが用意されており、様々な便利な関数が提供されています。これらの関数の使い方を学ぶことで、開発の効率が向上します。
- エラー処理: エラーを検出し、適切に対処する方法を理解しておくことが重要です。エラー処理には、戻り値のチェックや、
errno
変数の利用などがあります。
C言語とハードウェアの関連性については、メモリ管理やポインタ操作を学ぶことで、より効率的なコードを書くことができるようになります。また、C言語を学ぶことで、ハードウェアのリソースを直接管理することができるため、組み込みシステムやオペレーティングシステムなどの開発にも応用できます。
C言語の学習ルートについては、以下のような順序で進めることをお勧めします。
- C言語の基本構文を学び、簡単なプログラムを作成してみましょう。
- データ型、配列、ポインタ、文字列操作などの基本的な概念を理解し、実践的な問題に取り組んでみましょう。
- 構造体、共用体、メモリ管理などの応用的な概念を学び、より複雑なプログラムを作成してみましょう。
- ファイル操作や標準ライブラリ関数を使ったプログラムを作成し、実践的なスキルを磨いていきましょう。
- エラー処理やデバッグ手法を学び、品質の高いソフトウェア開発ができるようになりましょう。
学習には、教科書やオンラインチュートリアル、プログラミング問題集などの資料を活用し、継続的に実践を重ねることが大切です。また、他の人が書いたコードを読んだり、自分のコードを他の人にレビューしてもらったりすることで、さらに理解が深まります。最後に、プロジェクトに関わることで、実際の業務でのC言語の使い方や、チームでの開発手法を学ぶことができます。
解答者補足
#4 の基本情報シラバスの内容に付随して,Computer Scienceのロードマップを貼っておきます.
https://roadmap.sh/computer-science
シラバスより荒い内容ですが参考までに.
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
#6
総合スコア13703
投稿2023/05/09 09:52
ソフトウェア開発において、言語は重要なものではありません。(コーディングしながら勉強してもいい)
重要なのはアルゴリズムを理解でき、またアルゴリズムを構築できることです。
うーんと……例えていえば、物語を組み立てる(アルゴリズム)ことができて初めて小説なり漫画なりは書けますよね。
小説を書くための道具に精通したり、漫画の技法を学ぶことは、物語の組み立てと比べて、どちらがより重要でしょう?
※むろん、原作付きの漫画を描くに特化した仕事もあったりします(コーダー)が、それでも原作を解釈(アルゴリズムを読み取る)できなければ仕事できません
まずはアルゴリズムを解説した本とか、もっと根源的にコンピュータがなぜ動くのか、とかを解説した本を(図書館で借りるとか、あるいは職場にもあるかも知れません)読んでみることをお勧めします。その上で自分がわかりやすいと思った本を購入されるといいでしょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
#7
総合スコア137
投稿2023/05/12 06:31
なぜ今更C言語なのでしょうか。
私が交流のある某大学の助教授の発言では、「自分はC言語に慣れ親しんでいるので講義でも学生にc#を教え、使わせていたが、遂に時代の流れで別の言語に乗り換えしなければならなくなった。」ということです。
C言語は、アセンブリ言語で記述していた長大な処理を構造化、易読化するには楽な言語ですが、オブジェクト指向に文法を寄せた結果、設計の古さが露呈していることが人気低下の原因になっているのだと思います。
mallocとか、メモリー確保や開放のための処理など、今の時代に言語で記述しなければならないものなのでしょうか。
ポインターの原理や利用方法が分からないとC言語は理解が進みませんが、他の言語ならばポインターについては無知でも実用性の高いプログラムを完成させることができます。
人気のある言語とは、覚えやすく、将来性があると見られているのです。
どうしてもC言語を覚えたいのでしたら、ほかの方も回答していますが、アセンブリ言語を基礎から学習すべきです。(多分、今後の時代の流れでは少数派となり、役に立たない技術にはなるでしょう。)
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
#8
総合スコア28662
投稿2023/05/12 07:08
自分はC言語に慣れ親しんでいるので講義でも学生にc#を教え、使わせていたが、
言語を間違えていませんか?
なぜ今更C言語なのでしょうか。
C 言語は古い言語なので、新しい言語に比べて教えることのできる教師の人口が多いということもあり、また自動車に例えればマニュアル車のように、細かいところまでプログラマーが気を配らなければならないこともあり、また文法が原始的でシンプルということもあり、学習目的で使われるのは特に珍しくありません。
この質問者は研修で C 言語を学んでいるので、それを勝手な理由で他の言語に変えることはできないでしょう。
他の言語の方が役立つというのは、その現場を知らないあなた個人の意見でしかなく、それを研修生に主張しろというのは無茶ぶりが過ぎます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
#9
総合スコア808
投稿2023/05/17 09:06
1.質問主さんが自動車業界or家電業界
70%くらいの確率でマイコンエンジニアだと思うので教科書に載ってる基本的なことは全部。あとメモリ制御関係は理解に時間かかるので重点的に学んだ方がいいと思います。
他の方が推すようにアセンブラやラズパイで遊びながら学ぶのも手っ取り早いかもしれません。
2.それ以外の業界
ぶっちゃけあんまり気にしなくていい。というのが率直な感想です。忘れたりわからなかったりしたときにその都度調べる癖を身に着けるくらい
「C言語の学習」自体がメインであるならば、他の方がおっしゃっているような段取りで学習すればいいと思いますが、単に未経験者に基礎知識を叩き込むためにC選んでるだけ(実際の業務で使う言語はCじゃない)って場合はとりあえず前から順番に学んでいってふわっと理解するくらいの心持でいいと思います。
「これは絶対に必要である」っていう知識に関しては、C言語かどうかには関係なく「フローチャートの読み方」「基本設計書や詳細設計書の読み方」「公式ドキュメントの読み方」「ビジネス上での無難なコミュニケーションの取り方」さえ分かってれば最悪なんとかなるので…
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
#10
総合スコア85
投稿2023/05/21 00:08
C は今更学び始めるには古臭い言語であり、可能であるならば初学者は回避すべきプログラミング言語です。 しかしどうしても、と仰るなら、最低限、次の事を押さえておけば、のちのち助かると思います。
◆何が C で、何が C で無いのかを知り、区別する。 たとえば冒頭によく書かれる「#include 何とか~」は、C の言語機能では無く、CPP(C プリプロセッサー)が読むための記述である。 CPP は C コンパイラーとは独立して使う事も出来る。
◆「C の言語機能で実現できること」、「標準ライブラリーで実現できること」、「非標準ライブラリーで実現できること」を知り、区別する。 C 単体で出来ることは、コマンドライン引数処理、スタックメモリー内操作、構造体・共用体、算術・論理演算、条件分岐・ループ、関数分割、ソース分割、くらいしかない(文字の入出力すら無い)。 標準ライブラリーを使えば各種ストリーム入出力、ファイル操作、ヒープメモリー操作、便利なメモリー操作(文字列操作など)、ポピュラーな数学関数、などが出来、非標準ライブラリーを使えばグラフィック処理、音声処理、ネットワーク処理、OS 依存機能、などが出来る。
◆関数の引数は全てコピー渡し(値渡し)である。 真の意味での参照渡しは C には無い。
◆ポインターを理解する。 特に、配列と文字列との関係が重要である。 ここでつまずく人は多いが、さほど難しい概念ではない。 難しい(ように見える)のは、ポインターと配列と文字列にまつわる C の文法が奇妙で混乱したものであるためで、いくつかの変な文法規則さえ押さえれば決して難しくはない。
◆C 処理系が提供するメモリーモデルである「記憶クラス」および「メモリー領域」を理解する。 基本的に、全ての規格合致 C プログラムは、C 処理系が提供するメモリーモデルの上で動作する。 cf. http://www9.plala.or.jp/sgwr-t/c/sec12.html
◆誤ったポインター処理は容易にメモリー領域の内容を破壊してしまう事を理解する。 かつて各種 OS のセキュリティー・アップデートは、その少なからずがこれに起因していたと言っても過言ではなく、この点は重要である。
◆識別名の定義、仮定義、スコープを理解する。
◆翻訳単位、結合、ソースプログラムを読んだコンパイラーがリンケージエディター(リンカー)のための再配置可能なオブジェクトプログラムを出力すること、などを理解する。
◆C 独特の流儀を知る。 たとえば「文字列の終端は数値 0 とする」、「文字や文字列などは実は存在せず、全ては数値である」、「ポインターに 0 や NULL マクロを代入すると『どこも指さない事を保証するポインター』になる」、「やたらと細かい演算子の優先順位(を解消するための明示的なカッコ付け)」、「ビットフィールドと共用体」、「入力変換仕様・出力変換仕様」、などなど。
また、もし余裕が有るならば、先人達が遺した C FAQ. もご覧ください。 http://www.kouno.jp/home/c_faq/
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
#11
総合スコア244
投稿2023/05/26 07:06
私はC言語自体はあまり触ったことない(普段はTypeScriptをメインで書いています)のですが、
ごりごりプログラミングの学習を始める前にこちらの本を読みました。
プログラミングをする前必要な基礎がわかりやすく書かれている上に、これからC言語を始められるとのことですので、かなり参考になるのではないでしょうか。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。