就職活動でソフト会社へ面接に行きました。
金融関係のプログラムをつくっている会社です。
そのとき社長さんから聞いた話です。
「学校を出たばかりの人にプログラムを書かせると100万口座の処理に3日もかかってしまうが、プロが書いたものは10分で処理できる。」
ポインタをしっかり勉強しておいて欲しいとの話でした。
結局、その会社は断りましたが自信をなくしてしまいました。
残りの1年はCをどのように勉強していけば良いでしょうか。
アドバイスをお願いします。
いまの私のレベルは基本情報処理技術者試験をC言語で合格しています。
勉強した本は下記の通りです。
(1) やさしいC ソフトバンク
(2) 明解C言語入門 ソフトバンク
(3) らくらく突破C言語 技術評論社
(4) 合格サポートC言語 一橋出版
(5) ポインタの極意 ソフトバンク
(6) C言語によるアルゴリズムとデータ構造 ソフトバンク
ただし、(1)~(4)はサンプルコードを入力し演習問題も自力で解いてますが
(5)、(6)は一通り読んだだけです。
No.5ベストアンサー
- 回答日時:
とても勉強家で関心します。
「残りの1年何を勉強していけば良いか」に重点を置かせて頂きます。
勉強方法については賛否両論なので、あくまで当方がある程度(ランクをつけるなら中級とさせてもらいます)C言語を扱えるようになった方法をお答えしたいと思います。
(1)
基本情報処理技術者試験を合格なさっているので、これを有効活用してみては如何でしょうか。
午前の部の「アーキテクチャ」と「アルゴリズム」、午後の部の「アセンブラ(仮想コンピュータCOMET)」です。
これはコンピューターを動かす上で(つまりプログラム)コアになります。
「アーキテクチャ」で仕組み(仕様)を見て、目的の「アルゴリズム」を選択し、「アセンブラ」でプログラミングする、といった手法です。
いまどき「アセンブラ」なんてという意見が大半を占めると思いますが、これが理解できてしまうと、現状あるありとあらゆる「プログラミング言語」が不思議と理解できてしまいます。
C言語のポインタが難所と呼ばれる起点は、ここを教えてもらえないからだと当方は思います。
(2)
「マルチタスク(マルチスレッド)」の概念を頭に叩き込んでおくとよいでしょう。
システム開発において必要不可欠な知識であることは断言できます。
当方の回答で、少しでも貴方の問題が解決できたら幸いです。
ありがとうございました。
回答を読んでいるうちに言語だけにとらわれていないか反省しました。
言語は時が経てば変りますし、プロを目指すならシステムがどのように動作しているか理解してなければなりません。
これからは、言語の使い方だけではなく言語がシステム内でどのように動作しているかも考えながら勉強していきます。
言語は言語、ハードはハード、と言うようにそれぞれ別物のようにとらえてしまわないように気を付けたいです。
No.9
- 回答日時:
やる気に水を差すかもしれないけど参考に。
The top 10 dead (or dying) computer skills
http://www.computerworld.com/action/article.do?c …
これの6番目が ' C programming' です。
As the Web takes over, C languages are also becoming less relevant, according to Padveen. "C++ and C Sharp are still alive and kicking, but try to find a basic C-only programmer today, and you'll likely find a guy that's unemployed and/or training for a new skill," he says.
もちろん日本と状況が同じということはないでしょうけど、
使われる場面は減少傾向にあって、「高く売れる技術」
ではないことを頭に入れておきましょう。
まあ今売れ線のものも5年後はどうだかわかったもんじゃないですけどね。
ありがとうございました。
JAVA、VB.NET、Parlも勉強してきましたが、内定した会社がCを使っているのでこだわっています。
他にも何社か話を聞いてきました。
必ず出てくるのがJAVA、次がVB.NET、次がC#かC++かCです。
私の住んでいる田舎でもCは需要が減少しているようです。
やはり、ここは一旦Cをとめて時間がある学生のうちにアセンブラを一冊読みます。
もちろんNo9さんが紹介してくれた本も必ず読みます。
No.8
- 回答日時:
ポインタは基礎です。
基本情報処理持っているならわかっていると思いますけどね。
ようはアルゴリズムです。
例えばHTML
<TR>・・・</TR>
などのタグがありますよね。
それを元に罫線を書いたり色をつけたり、画像を貼り付けたり。
あるいはJavascriptが組み込まれているときはその通り動作させます。
HTMLでなく独自の似た言語があったとします。
"<BIG>"というタグで囲んだ部分は文字を大きくする
"<SMALL>"というタグで囲んだ部分は文字を小さくする
というルールだけであればそれを表示するプログラムは書けますよね??
"<BIG>あ<SMALL>い<BIG>"
"あ"が大きく"い"は小さい。でも"い"の終了タグは省略。
人間ならすぐわかりますがコンピュータは難しいです。
省略OKとかエラーがあった場合などに対応させ、しかもルールが
多くなるととても複雑な処理が必要です。
こういう場合ポインタうんぬんよりアルゴリズムです。
昔、開発しましたが処理に1週間かかるプログラム(VB)を
VCで作り直して30秒台まで短縮しました。
元のプログラムが悪いという表現もできますが動くには動きます。
ベンチマークじゃないのでCPU性能とかメモリとかは関係ありません。
ただし一般的にはC言語プロフェッショナルよりDB技術者のほうが
好まれますよ。
ありがとうございました。
これは勉強してきたなかで思ったことです。
ポインターはエイリアスに慣れてしまえば自然と読めるようになるもんだと思いました。
それより、時間計算量を意識したアルゴリズムですね。
No.6
- 回答日時:
C言語を最も活用できる分野は、今のところ組み込み系だと思います。
その意味では、アセンブリ言語やハードウェアのことも勉強した方がよいでしょう。仮に組み込み系に関わらないとしても、必ずC言語の上達には役立つはずです。
組み込み系だと、ものにもよりますが、ほとんどの処理をスクラッチで実装しなければならないことも多く、基本的なアルゴリズムやテクニックを駆使する機会も多いと思います。多くの場合は、そのような難度の高い部分は、ごく一部の優秀なプログラマが実装して、その他大勢のメンバーはそれを使うだけになるわけですが、どうせなら、ごく一部の優秀なプログラマの中に入る方がいいですよね。
No.4
- 回答日時:
ポインタ云々はともかく、100万口座を…というのは
別にCに限った話ではないと思うので、
「C言語の上級を目指したい」というのと今ひとつ
かみ合っていないような気がします。
Javaなんかでは顕著ですが、アプリケーションを作るのに
from scracthでたとえば検索とかソートのような肝の部分を毎回実装するようなことは
ほとんどないんじゃないでしょうか。
実装技術を知っておくことは大切ですが、あまりそれにとらわれることも
ないでしょう。
その辺を踏まえて読んで欲しいなと思う本を挙げておきます。
珠玉のプログラミング―本質を見抜いたアルゴリズムとデータ構造: 本: ジョン
ベントリー,Jon Bentley,小林 健一郎
http://www.amazon.co.jp/gp/product/4894712369
プログラミング作法: 本: ブライアン カーニハン,ロブ パイク,Brian
Kernighan,Rob Pike,福崎 俊博
http://www.amazon.co.jp/gp/product/4756136494
My Job Went To India オフショア時代のソフトウェア開発者サバイバルガイド:
本: Chad Fowler,でびあんぐる
http://www.amazon.co.jp/gp/product/4274066592
Joel on Software: 本: Joel Spolsky,青木 靖
http://www.amazon.co.jp/gp/product/4274066304
Cにこだわる話なら
エキスパートCプログラミング―知られざるCの深層: 本: ピーター ヴァン・デ
・リンデン,Peter van der Linden,梅原 系
http://www.amazon.co.jp/gp/product/4756116396
これとか。
No.3
- 回答日時:
★アドバイス
・まずはポインタ、アルゴリズム、データ構造の基本をしっかりと固めておきましょう。
その後、ポインタ+リスト構造でアドレス帳などのデータベースらしきものを作ってみる。
検索、ソート、ファイル処理、パスワード処理などを盛り込んで1つのソフトを作成してみる。
・あとコマンドラインの引数を処理して簡単な電卓を作ってみる。
構文解析の方法や、文字列、ポインタ、スタックなどの基本がないと作れないため、
今までの学習の成果が本当に身についているかが分かります。もし、作成できれば
リダイレクション入力、出力、パイプ処理をサポートして機能拡張をすればその後に
ちょっとした計算インタプリタとして使えて便利になります。
変数や公式もサポートすれば、フリーソフトにしても恥ずかしくはないと思います。
・とにかく何かツール(ソフト)を作ってみて下さい。
これからの学習で必要なのは実践編です。
C 言語の文法をどう活用するかのセンスも必要です。
コンソール・アプリケーションのソフトを多数作ってみて下さい。
(1)アドレス帳
(2)計算インタプリタ
(3)ファイルの16進ダンプ一覧表示
(4)ファイルの分割&合併
(5)ファイルの検索&一覧表示
(6)ファイルのワイプ削除
こんな感じのテーマを決めて1つずつ作成してみて下さい。
もし出来れば、C 言語の文法以外にアルゴリズムに磨きをかけれます。
・以上。今後の参考に!
ありがとうございました。
「ポインタの極意」と「アルゴリズムとデータ構造」をしっかり復習しなおします。
(1)のアドレス帳は構造体をリストにして、すぐにでもつくれそうです。
今、卒業制作に向けて何をつくるか考えています。
どうせ時間をかけてつくるならCに磨きをかけるためにCで実用的なソフトをつくることにしました。
まだ、漠然とはしてますが(2)~(6)の電卓やファイルの機能を含めたものをつくってみます。
No.2
- 回答日時:
>100万口座の処理に3日もかかってしまうが
基本情報を取っているということですので
「ハッシュ」や「B-Tree」についてはご存じでしょう?
100万口座を先頭から順番に検索していけば、目的の口座を検索するのに
平均50万回比較する必要がありますが
ハッシュやB-Tree等のアルゴリズムを使えば
20回程度の比較で目的の口座番号をヒットさせることができます。
クイックソート、シェルソート、マージソート等
基本情報の中で色々なアルゴリズムについて学習したと思います。
それらをCで自分で書いてみてはどうですか?
勉強になるし、ポインタの重要性もわかると思います。
(文字列のデータが100万個あってそれをソートするとき、
文字列データそのものを置き換えたりはしなくても
ポインタを並び替えるだけで良いのです。)
>自信をなくしてしまいました。
資格をとったりと努力もしているようですし、
これからもCをを勉強していこうとする姿勢も
非常に前向きだと思います。
逆に自信をもってください。
ありがとうございました。
あのときは個人面接でしたが、木をしっかり勉強した学生か見ていたことがわかりました。
すぐ頭に浮かばなくて、まだまだ勉強不足を感じます。
「ポインタの極意」と「アルゴリズムとデータ構造」からしっかり復習しなおします。
励ましの言葉ありがとうございました。
No.1
- 回答日時:
ポインタ制御は、ある程度は経験が必要でしょうね。
あとは、常にプログラムを作ることでしょうか。(時間が経つと作り方を忘れてしまいますので。)
なので、自分が欲しいツールのようなものをひたすら作ってみた方が良いでしょう。
例えば、あなたがボーリングが趣味だとすれば、スコアを入力すれば自動計算してくれて、今までの平均スコアやストライクの数等も出してくれるようなソフトを作るとか。
(ボーリングのスコア計算って意外と面倒なので、ロジックの勉強には良いかも。)
遊びを入れながら学べば上達は早いです。
今まで(15年)この世界に居た経験上ですが、新人から直ぐに戦力になる人はまずいませんよ。(まれに中学辺りからプログラムを作っていたようなレベルも居ますけど。)
まだまだ、本物の技術屋は全然少ないです。なので、落ち込むことはありません。
ありがとうございました。
偶然、今日の授業は卒業制作に向けていろいろな案を考える日です。
考えながら回答を読ませていただきました。
ほとんどの学生はVBやJAVAをつかってゲームをつくろうとしているようですが、私はCで実用的なツールをつくってみたい思います。
励ましの言葉ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- IT・エンジニアリング ITエンジニアの勉強時間や勉強方法について 初めまして閲覧いただきありがとうございます。 当方25歳 4 2022/06/09 18:51
- 大学受験 数学が苦手で社会が得意な場合は一橋よりも東大の方が受かりやすい、ということはあり得ますか? 3 2022/04/16 16:46
- 大学受験 3浪しようと思うので、アドバイスお願いします。 自分としては結構メンタルきつくて後期でいいから、東京 3 2023/02/13 21:47
- その他(プログラミング・Web制作) プログラムの勉強のおすすめは 7 2022/12/09 20:09
- 哲学 日本語は論理表現にふさわしくないか の問題です 4 2022/06/25 03:56
- 大学受験 大学生に保護者なんかいるの? 4 2023/08/23 16:52
- 仕事術・業務効率化 (初体験)中日英通訳の悩み 2 2023/08/09 09:07
- 心理学 お喋りで『自称・コミュ力が高い人』が『寡黙で真面目で思慮深い人』を「コミュ障」とか謗る事について。 1 2022/07/25 04:34
- その他(職業・資格) 【資格】あらゆる資格(国家資格・民間資格)の強さの格付けランキングを作ってみました! 4 2023/02/11 16:56
- 大学受験 高3。通信制高校生。英検四九レベル偏差値は30も無いでしょう。社会不適合者です。 中学は2年から頭に 1 2022/05/12 22:06
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
麻雀ソフトのソースコード
-
将棋AIを作りたい
-
二分探索木
-
Windows Media Playerを開くと...
-
Google ColaboでGUI作成
-
システムコールと標準ライブラ...
-
Ps+のフリープレイでDestiny2の...
-
iCloudフォトライブラリ内の画...
-
Qtを勉強するのに何か良い書籍...
-
本格的なGUIを作るのにおすすめ...
-
ヤフー知恵袋みたいなサイトを...
-
演習9-3で真ん中の読み込みを中...
-
C言語について。
-
C++とVC++の違いについて
-
cでなぜguiアプリが作成出来る...
-
なぜHTMLのソースコードが無料...
-
DxlibかDirectXSDKか
-
unix-c と linux-c の違いは?
-
解像度と誤差について
-
C言語で自動販売機のプログラ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
麻雀ソフトのソースコード
-
将棋AIを作りたい
-
練習問題があるサイト
-
C言語のシューティングゲームを...
-
二分探索木
-
C言語の上級者を目指したい。
-
exclelのvba逆引き辞典について
-
東芝新製品に採用されている
-
課題研究で3Dゲーム製作
-
C言語を学ぶには・・・
-
Ps+のフリープレイでDestiny2の...
-
Windows Media Playerを開くと...
-
本格的なGUIを作るのにおすすめ...
-
python urlopen error について...
-
Google ColaboでGUI作成
-
String^の^自体が何を意味して...
-
scipy っていうのをいれようと...
-
VB.NET とドットNET(.NET...
-
システムコールと標準ライブラ...
-
ライブラリ作成時のグローバル...
おすすめ情報