- ベストアンサー
Win32の勉強の意義とは?
- Win32APIを学ぶ意義とは何か?プログラミングの目標がない中、C言語の勉強を始めたが、Win32APIの勉強にはモチベーションが湧かない。
- ウィンドウの表示だけではなく、OSの仕組みを理解するためにもWin32APIの学習は価値があるのか疑問。
- プログラムでOSやメモリを意識する機会は稀なのか?Win32APIの勉強の意味を考える。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
C言語やWin32APIを今勉強する意味は、OSやメモリをわざと意識してプログラムするってことにあります。要はコンピュータアーキテクチャの低レベルを意識する事ですね。 これはこれで、高度なプログラミングや質の良いプログラミングをするためには大変意義のあることです。 >OSやメモリを意識してプログラムする機会というのは、最近だとけっこう稀なことだったりするのでしょうか。 世の中は抽象化流れにありますから、OSやメモリを極力意識しない言語ももちろん有ります。 それが、Java言語だったり、VisualBasicだったり、VisualC#だったりします。 ポインタを扱うこと無くプログラムを組めるので、低レベルの問題に頭を悩まされることもなくアプリケーションを作成することができます。 ウィンドウアプリケーションも優秀なライブラリが低レベルのWin32APIを隠蔽してくれるので、数十行の記述(大半は自動生成)でウィンドウが表示できます。 これらの言語だけを学んだ人の多くが陥る問題は、低レベルのことを理解していないので汚いムダなプログラムを書いても気付けないことが多いです。
その他の回答 (5)
- sygh
- ベストアンサー率76% (42/55)
Windows APIは確かに統一感に欠けるし、規約は古いし、MFC/ATLといったラッパーライブラリさえも生産性の点ではVBやVC#に遙か遠く及ばないですが、たとえ.NETアプリであってもP/Invokeせざるを得ないときなど生のAPIの知識が必要になることもあります。顧客要求に応えるためにカツカツのパフォーマンス チューニングが必要になる場合はなおさらです。 あとゲームとか組込OS用アプリを作るときには普通C/C++の知識以外にOSやプラットフォーム固有のAPIに関する知識が必須です。Windows APIを勉強することで「生のAPIを叩いた経験がある」こと、またそれ以上に「生のAPIを叩くことがさほど苦ではなくなる」ことは大事かと。
個人的な考えとして、『ドットネットフレームワーク』のみを使用したプログラミングから脱却した方が最良と思います。 OSの仕組みも必要でしょうけど、それよりもOS、APIに縛られないプログラミングがこれからは必要と考えます。 小生は『Aptana Studio』を使用してます。 残念ですが、Windowsのフレームワークは不具合が多い気がします。
- 0909union
- ベストアンサー率39% (325/818)
>これからの勉強の下地になるだろうと思って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/arcsuite_engineering/ これは大手の自動車会社など物作りの会社に入っているWebアプリですが、これらの面白い所は、ハードとの連携です。 例えば、大型のプロッターや、複合機などと連携して、CADなどのデーターを一括管理することです。オフィス文書も扱い、 http://www.fujixerox.co.jp/product/software/apeos_pemaster/ など、複合機から始まるファイリングの発展型を構築しています。 このハードとの連携は、NECやIBM、富士通、日立などが得意とするところですが(ほとんどが、このメーカーが主です)、プリンター専門メーカーが、独自に開発して無名ですが、わりと広まったようです。 これらが、.Netで作られていると思いますか? 単一のフレームワークだけで作られていると思いますか? ソフトの世界も、「適材適所」 「ケースバイケース」 でその機能に適した、言語やフレームワークを選ぶことが、現在求められています。 その点から行くと、まだモバイル系の開発環境は、創世記で、何か一つ取得すれば、一流になれます。しかし、その裏で働く、システムは、前述の通りで、マルチ人間で無いと構築できません。
- jjk65536
- ベストアンサー率59% (66/111)
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_Skeleton.xml 最後に、「OSやメモリを意識して」とありますが、OSも意識しないプログラミング環境はかなり希少です。 普及してるのはJavaくらいだと思います。 その他環境では少なくともOSを意識(そのOSのAPIをコール)してプログラムするものだと思います。 # いろいろなOSでGUIを動かしたい場合の選択肢として、他にも # ・.netでコーディングしてMonoで動かす # ・Win32APIやMFCでコーディングしてWineで動かす # とかもありますよ。趣味ならそれも面白いと思います。
お礼
WindowsAPIで#difineされたものが多すぎてよくわからないんですよねー(´・ω・`) 回答ありがとうございました。
- めとろいと(@naktak)
- ベストアンサー率36% (785/2139)
量販店に出回っている色んなソフトウェアって、.NET Frameworkとかを入れなくてもインストールできて、 動作させることが出来ますよね? (例外はあるかもしれませんが、大雑把に) そういうソフトウェアを作りたいとなると、意義はあると思いますね。 個人でフリーウェアを作る場合は、メモリが云々、画面レイアウトが云々と、 凝ったものでなければあまり意味がないと思います。
お礼
回答ありがとうございました。
お礼
やはり低レベル(面倒)なことの理解も必要な気がしてきました。 回答ありがとうございました