これから私がプログラミングで何をしたいかという明確な目標はないのですが
これからの勉強の下地になるだろうと思ってC言語の勉強をしてきました。
メモリの動的な確保まで学習が終わったので、コンソール以外のアプリケーションを作ろうと思ってWin32APIの勉強をしようと思ったのですが、たかがウィンドウを表示させるだけのプログラムがあまりにも変態すぎてやる気がなくなってしまいました。
果たしてこれからのプログラムのあり方を考えると、Win32APIを通してOSの仕組みを理解する価値はあるのでしょうか。
OSやメモリを意識してプログラムする機会というのは、最近だとけっこう稀なことだったりするのでしょうか。
No.3ベストアンサー
- 回答日時:
C言語やWin32APIを今勉強する意味は、OSやメモリをわざと意識してプログラムするってことにあります。
要はコンピュータアーキテクチャの低レベルを意識する事ですね。これはこれで、高度なプログラミングや質の良いプログラミングをするためには大変意義のあることです。
>OSやメモリを意識してプログラムする機会というのは、最近だとけっこう稀なことだったりするのでしょうか。
世の中は抽象化流れにありますから、OSやメモリを極力意識しない言語ももちろん有ります。
それが、Java言語だったり、VisualBasicだったり、VisualC#だったりします。
ポインタを扱うこと無くプログラムを組めるので、低レベルの問題に頭を悩まされることもなくアプリケーションを作成することができます。
ウィンドウアプリケーションも優秀なライブラリが低レベルのWin32APIを隠蔽してくれるので、数十行の記述(大半は自動生成)でウィンドウが表示できます。
これらの言語だけを学んだ人の多くが陥る問題は、低レベルのことを理解していないので汚いムダなプログラムを書いても気付けないことが多いです。
No.6
- 回答日時:
Windows APIは確かに統一感に欠けるし、規約は古いし、MFC/ATLといったラッパーライブラリさえも生産性の点ではVBやVC#に遙か遠く及ばないですが、たとえ.NETアプリであってもP/Invokeせざるを得ないときなど生のAPIの知識が必要になることもあります。
顧客要求に応えるためにカツカツのパフォーマンス チューニングが必要になる場合はなおさらです。あとゲームとか組込OS用アプリを作るときには普通C/C++の知識以外にOSやプラットフォーム固有のAPIに関する知識が必須です。Windows APIを勉強することで「生のAPIを叩いた経験がある」こと、またそれ以上に「生のAPIを叩くことがさほど苦ではなくなる」ことは大事かと。
No.5
- 回答日時:
個人的な考えとして、『ドットネットフレームワーク』のみを使用したプログラミングから脱却した方が最良と思います。
OSの仕組みも必要でしょうけど、それよりもOS、APIに縛られないプログラミングがこれからは必要と考えます。
小生は『Aptana Studio』を使用してます。
残念ですが、Windowsのフレームワークは不具合が多い気がします。
No.4
- 回答日時:
>これからの勉強の下地になるだろうと思ってC言語の勉強をしてきました
私は、そんなこと思って言語などの勉強はした事ありません。
ほとんどが必要から習得した物です。たぶん、手に職をつける方のほとんどが、そのように思ってする事はないと思います。
たとえば、「左官(さかん)」と言う仕事がありますが、下地になるからと言って、大学へ行って粘土細工や、彫刻を学ぶことはしませんよね。
プロの野球選手になるからと言って、大学へ行って、野球理論を学んだり、運動生理学(実践ではなく、学問として学ぶと言うこと)を学ぶ人はいないでしょう。もちろん、たまたま体育大学にいって学ぶ方はいますが、体育大学に野球の強い所あったけ?
実はどれも、必要であれば、小学生くらいから、野球理論を学んだり、運動生理学をコーチや監督などから伝授されているんですよ(今の時代は。20年前以上はありえませんが(根性!!))
必要であれば、常にそれらのことは身近にあり、これのために、これを学ぶと言う体験は、自然な流れとして、学ぶことになります。
>Win32APIの勉強をしようと思ったのですが、たかがウィンドウを表示させるだけのプログラム
そう思っているなら、プログラムのほんの入り口をかじっただけなのでしょう。と、言うより社会経験がないのでしょう。それでもなければ、眠っているのでしょう。
ソフトの開発を実社会で行うと、いろんな制約、要望ががあり、いろんな言語、API、フレームワークを使わないとスマートに作成できない、メンテナンス性が悪い、時間がかかる、要件を達成できないことが、多いです。
これは、あながた触ったことの無い業務用ソフトでは、100%そうなります。つまり、間口が広い、知識が幅広い事は、それだけで、強みになります。
10年以上前のプログラマーだと、コボルならコボル、CならCしかできず、また逆にそれに固執して、時代に乗り遅れた人を沢山見ています(特に2000年問題の時)。
DTP関係者やデザイナーがMACにこだわるのと同じですね。いつまでも、そんな高いわりに性能が・・・マシンにこだわることができないのが、日本の経済です。社長は、Windowsマシンに全部取り替えるといったら、ほとんどの社員が辞めてしまった。なんて、笑いの種になる業界の話もあります(もちろん今はDOS/VマシンでもマックOSが使えるので安くなりましが)。
せっかくC系を習うなら、C++、C#、JavaScriptなども一緒に習得しましょう。そうなると、WEBアプリを作成されるとためになりますよ。とくにマルチプラットホームをめざしましょう。
いかかです、こんな感じで、実際の業務に使えるアプリを作成すれば、何が必要がわかると思います。
例えば業務アプリの例ですが、面白い物を見つけました。
http://www.fujixerox.co.jp/product/software/arcs …
これは大手の自動車会社など物作りの会社に入っているWebアプリですが、これらの面白い所は、ハードとの連携です。
例えば、大型のプロッターや、複合機などと連携して、CADなどのデーターを一括管理することです。オフィス文書も扱い、
http://www.fujixerox.co.jp/product/software/apeo …
など、複合機から始まるファイリングの発展型を構築しています。
このハードとの連携は、NECやIBM、富士通、日立などが得意とするところですが(ほとんどが、このメーカーが主です)、プリンター専門メーカーが、独自に開発して無名ですが、わりと広まったようです。
これらが、.Netで作られていると思いますか? 単一のフレームワークだけで作られていると思いますか?
ソフトの世界も、「適材適所」 「ケースバイケース」 でその機能に適した、言語やフレームワークを選ぶことが、現在求められています。
その点から行くと、まだモバイル系の開発環境は、創世記で、何か一つ取得すれば、一流になれます。しかし、その裏で働く、システムは、前述の通りで、マルチ人間で無いと構築できません。
No.2
- 回答日時:
Windows向けのGUIアプリを書く場合の選択肢は一般的に以下の三つかと思います。
・Win32API(一般的にC)
・MFC(一般的にC++)
・.net Framework(一般的にVB,C#)
C言語の学習を進めるのであれば、「Win32APIを通してOSの仕組みを理解する価値」はあります。
なぜなら、C言語のみではWin32APIを選択するのが一般的だからです。
> OSやメモリを意識してプログラムする機会というのは、最近だとけっこう稀なことだったりするのでしょうか。
メモリを意識しないコーディングというのは、言い換えれば「ガーベッジコレクタの挙動を
意識したコーディング」になります。
どちらを意識するにしろ、メモリリークなどに慎重にならなくてはならないという点では
メモリを意識する必要があると思います。
C言語にこだわらず、広くGUIアプリを考えた場合には.net Frameworkを使えば短めのコードで実装可能ですが、
世間的に.netでGUI開発の仕事は少な目です(=仕事ではツブシが効きません)。
ちなみに、Win32APIで短いプログラムだと数十行程度かと思いますが、それは変態過ぎる量でしょうか?
短い例)
http://www.usamimi.info/~hellfather/win32api/API …
最後に、「OSやメモリを意識して」とありますが、OSも意識しないプログラミング環境はかなり希少です。
普及してるのはJavaくらいだと思います。
その他環境では少なくともOSを意識(そのOSのAPIをコール)してプログラムするものだと思います。
# いろいろなOSでGUIを動かしたい場合の選択肢として、他にも
# ・.netでコーディングしてMonoで動かす
# ・Win32APIやMFCでコーディングしてWineで動かす
# とかもありますよ。趣味ならそれも面白いと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 仕事術・業務効率化 効率的な勉強方法(分野問わず)を教えてください 1 2023/08/16 01:33
- その他(プログラミング・Web制作) プログラムの勉強のおすすめは 7 2022/12/09 20:09
- Ruby VBA 2 2023/01/14 14:14
- その他(プログラミング・Web制作) 次に、楽天のアジャイル就活に参加して、1日で内定を獲得できる。私は大企業に就職できる? 2 2022/04/17 13:38
- その他(プログラミング・Web制作) VBA 1 2023/01/19 16:19
- その他(プログラミング・Web制作) 大学一年でVBAのプログラミングを勉強しているものです。来週の情報の授業で以下の問題のプログラムを勉 4 2023/01/19 16:15
- IT・エンジニアリング teratailなどでプログラマー向いていないと言われてPTSD、でも諦めない。最低で何日要する? 2 2022/09/25 06:53
- IT・エンジニアリング ITエンジニアの勉強時間や勉強方法について 初めまして閲覧いただきありがとうございます。 当方25歳 4 2022/06/09 18:51
- その他(悩み相談・人生相談) 試験のための勉強や本番のための練習を"素の力で戦わない卑怯者のすることだ"と思ってしまうのをやめたい 2 2023/04/10 21:39
- 高校受験 中3 9月 模試の結果D判定 夏に受けた模試の結果が第1志望D判定でした。 あと21点でやっと合格圏 3 2022/09/09 23:19
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PGに慣れず適応障害と診断され...
-
自作でプレステ対応ゲームは作...
-
C言語、C+、C++、C#の違い
-
C言語とhtmlの違いを どな...
-
COBOLでのNOT = の AND条件
-
C++における継続行
-
リピート再生が出来ません
-
アセンブリ名とは??
-
C言語でBASE64のエンコードのプ...
-
小学生にプログラミング(Scratc...
-
身長187cmです。 新卒未経験か...
-
プログラムに書かれる"%"記号の...
-
C言語って古いですか?
-
abnormal program termination
-
encore と言う 譜面書きソフト...
-
HOLONついて教えてください。
-
COBOLで文字タイプを数字...
-
自営業でも実務経験に入る?
-
Pythonでの不均一なサイコロを...
-
もし仮に5つの言語(Python, J...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Linux Cプログラミングを学ぶた...
-
自作でプレステ対応ゲームは作...
-
工業高校生ですが、将来ゲーム...
-
プログラマーになったきっかけ...
-
プログラミングは独学で習得で...
-
情報工学科にはパソコン知識が...
-
Win32APIは覚えて損する?
-
「やさしいC」の次に読む本を探...
-
よい勉強法を教えてください!
-
プログラム脳の作り方
-
マックでCプログラミングを
-
ソフトウェア作成への勉強方法
-
C++Builder初心者の勉強法
-
397時間動画パソコン教室でスキ...
-
C#の基本文法が詳しく書かれて...
-
PGに慣れず適応障害と診断され...
-
プログラミングの学習方法
-
半年間で
-
ハッカーについて
-
Visual C++ .NET Standard Ver...
おすすめ情報