Win32の勉強の意義とは?

このQ&Aのポイント
  • Win32APIを学ぶ意義とは何か?プログラミングの目標がない中、C言語の勉強を始めたが、Win32APIの勉強にはモチベーションが湧かない。
  • ウィンドウの表示だけではなく、OSの仕組みを理解するためにもWin32APIの学習は価値があるのか疑問。
  • プログラムでOSやメモリを意識する機会は稀なのか?Win32APIの勉強の意味を考える。
回答を見る
  • ベストアンサー

今からWin32を勉強する意義

これから私がプログラミングで何をしたいかという明確な目標はないのですが これからの勉強の下地になるだろうと思ってC言語の勉強をしてきました。 メモリの動的な確保まで学習が終わったので、コンソール以外のアプリケーションを作ろうと思ってWin32APIの勉強をしようと思ったのですが、たかがウィンドウを表示させるだけのプログラムがあまりにも変態すぎてやる気がなくなってしまいました。 果たしてこれからのプログラムのあり方を考えると、Win32APIを通してOSの仕組みを理解する価値はあるのでしょうか。 OSやメモリを意識してプログラムする機会というのは、最近だとけっこう稀なことだったりするのでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • zwi
  • ベストアンサー率56% (730/1282)
回答No.3

C言語やWin32APIを今勉強する意味は、OSやメモリをわざと意識してプログラムするってことにあります。要はコンピュータアーキテクチャの低レベルを意識する事ですね。 これはこれで、高度なプログラミングや質の良いプログラミングをするためには大変意義のあることです。 >OSやメモリを意識してプログラムする機会というのは、最近だとけっこう稀なことだったりするのでしょうか。 世の中は抽象化流れにありますから、OSやメモリを極力意識しない言語ももちろん有ります。 それが、Java言語だったり、VisualBasicだったり、VisualC#だったりします。 ポインタを扱うこと無くプログラムを組めるので、低レベルの問題に頭を悩まされることもなくアプリケーションを作成することができます。 ウィンドウアプリケーションも優秀なライブラリが低レベルのWin32APIを隠蔽してくれるので、数十行の記述(大半は自動生成)でウィンドウが表示できます。 これらの言語だけを学んだ人の多くが陥る問題は、低レベルのことを理解していないので汚いムダなプログラムを書いても気付けないことが多いです。

JoyWorld
質問者

お礼

やはり低レベル(面倒)なことの理解も必要な気がしてきました。 回答ありがとうございました

その他の回答 (5)

  • sygh
  • ベストアンサー率76% (42/55)
回答No.6

Windows APIは確かに統一感に欠けるし、規約は古いし、MFC/ATLといったラッパーライブラリさえも生産性の点ではVBやVC#に遙か遠く及ばないですが、たとえ.NETアプリであってもP/Invokeせざるを得ないときなど生のAPIの知識が必要になることもあります。顧客要求に応えるためにカツカツのパフォーマンス チューニングが必要になる場合はなおさらです。 あとゲームとか組込OS用アプリを作るときには普通C/C++の知識以外にOSやプラットフォーム固有のAPIに関する知識が必須です。Windows APIを勉強することで「生のAPIを叩いた経験がある」こと、またそれ以上に「生のAPIを叩くことがさほど苦ではなくなる」ことは大事かと。

noname#242220
noname#242220
回答No.5

個人的な考えとして、『ドットネットフレームワーク』のみを使用したプログラミングから脱却した方が最良と思います。 OSの仕組みも必要でしょうけど、それよりもOS、APIに縛られないプログラミングがこれからは必要と考えます。 小生は『Aptana Studio』を使用してます。 残念ですが、Windowsのフレームワークは不具合が多い気がします。

  • 0909union
  • ベストアンサー率39% (325/818)
回答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/arcsuite_engineering/ これは大手の自動車会社など物作りの会社に入っているWebアプリですが、これらの面白い所は、ハードとの連携です。 例えば、大型のプロッターや、複合機などと連携して、CADなどのデーターを一括管理することです。オフィス文書も扱い、 http://www.fujixerox.co.jp/product/software/apeos_pemaster/ など、複合機から始まるファイリングの発展型を構築しています。 このハードとの連携は、NECやIBM、富士通、日立などが得意とするところですが(ほとんどが、このメーカーが主です)、プリンター専門メーカーが、独自に開発して無名ですが、わりと広まったようです。 これらが、.Netで作られていると思いますか? 単一のフレームワークだけで作られていると思いますか? ソフトの世界も、「適材適所」  「ケースバイケース」 でその機能に適した、言語やフレームワークを選ぶことが、現在求められています。 その点から行くと、まだモバイル系の開発環境は、創世記で、何か一つ取得すれば、一流になれます。しかし、その裏で働く、システムは、前述の通りで、マルチ人間で無いと構築できません。

  • jjk65536
  • ベストアンサー率59% (66/111)
回答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_Skeleton.xml 最後に、「OSやメモリを意識して」とありますが、OSも意識しないプログラミング環境はかなり希少です。 普及してるのはJavaくらいだと思います。 その他環境では少なくともOSを意識(そのOSのAPIをコール)してプログラムするものだと思います。 # いろいろなOSでGUIを動かしたい場合の選択肢として、他にも # ・.netでコーディングしてMonoで動かす # ・Win32APIやMFCでコーディングしてWineで動かす # とかもありますよ。趣味ならそれも面白いと思います。

JoyWorld
質問者

お礼

WindowsAPIで#difineされたものが多すぎてよくわからないんですよねー(´・ω・`) 回答ありがとうございました。

回答No.1

量販店に出回っている色んなソフトウェアって、.NET Frameworkとかを入れなくてもインストールできて、 動作させることが出来ますよね? (例外はあるかもしれませんが、大雑把に) そういうソフトウェアを作りたいとなると、意義はあると思いますね。 個人でフリーウェアを作る場合は、メモリが云々、画面レイアウトが云々と、 凝ったものでなければあまり意味がないと思います。

JoyWorld
質問者

お礼

回答ありがとうございました。

関連するQ&A

  • VC++でwin32APIを作っているのですが・・・

    こんにちは。私はwin32APIを勉強しているc言語初心者です。 私はMicrosoft Visual C++ 2008を使ってc言語のwin32APIをプログラミングしているのですが、独学でやっているので物凄く邪道なwin32APIプログラミングをしているような気がするのです。 ・c言語のプログラムを書いて、C++のwin32APIプロジェクトとしてビルドする。 ・ヘッダーファイルにwin32API関数がなかったので、自分のwindowOSからwin32API関数を探し出してVC++2008のなかのincludeフォルダ内にコピー&ペーストして使えるようにした。 これって邪道ですか?一応何の問題もなくwin32APIプログラムが作れるのですが、もっと正規なやり方があるでしょうか。回答よろしくお願いします。

  • C++ API 全般 APIの概要は

    独学にてプログラミングを勉強しているのですが、いきづまってしまったので質問お願いします。 ※Visual Studio 2008 Express Editionsを使用しています。 まだプログラミングに関しての勉強を始めて1ヶ月程度で、最初はVB.NETから始めて、最近C++に乗り換えました。 趣味の範囲でのゲームを作ろうと思っていて、C++とDirectXでの開発を予定しています。(しかし、最終的にはゲームに限らずプログラミングの技術と知識を習得することを目標にしています。)(DirectXに関してはまだ手をつけていません。) まったく1からのスタートで、現在win32コンソールアプリケーションにてコードの勉強をしているところです。 勉強に使っている参考文献は ・VisualC++.NET逆引き大全500の極意 ・ゲームプログラマになる前に覚えて起きたい技術(これを買うには早すぎたようです…。第一章も半分くらいしか理解できません…。) サイトは ・主に「0からのゲームプログラミング」というサイトです。 http://www.plustarnet.com/aspil/Programming/ 本題の質問ですが、APIというものがいまいち理解できません。 (1)上記のような目的で使用するAPIは、標準 Windows APIというものでいいのでしょうか? (2)win32コンソールアプリケーションでは実行できるのに、win32プロジェクトでは実行できないのはなぜでしょうか? #include<windows.h> int WINAPI WinMain( HINSTANCE hInstance , HINSTANCE hPrevInstance , PSTR lpCmdLine , int nCmdShow ) { MessageBox(NULL , TEXT("Hello Wold!") , TEXT("メッセージボックス") , MB_OK); return 0; } (3)http://www.plustarnet.com/aspil/Programming/CConsole.htm このURLのコンソールAPIというのは、一般的に使われているものでしょうか?それともこのサイトのオリジナルのものでしょうか?win32コンソールアプリケーションでAPIを使うには、このURLのCConsoleクラスとうものをインクルードしないといけないのでしょうか?#include<windows.h>と宣言することによって気軽に使いたいものを使うことはできないのでしょうか? (4)#include<windows.h> とした場合、作るものが「win32コンソールアプリケーション」だったり「win32プロジェクト」だったり「windowsフォームアプリケーション」だったりで、使用方法などがまったく別になってしまうのでしょうか? (5)そもそも、上記の目的の場合APIを勉強する必要はあるでしょうか? (6)勉強をしたほうが後々に役立つ場合、どのAPIを勉強するのがいいのでしょうか?(APIといっても様々なものがあるんだなと思い質問しました。もし勘違いでAPIというものは一つしかないとしたらすみません。) なぜAPIに関してかというと、単純に上記のサイトで言語編の一番上から順に見ていったからです。 初心者すぎて質問が的外れかもしれませんがよろしくお願いします。

  • .NET frameworkとWIN32API

    c#の勉強をしていたらWIN32APIを[ ]演算子で囲って直接呼び出すコードが多数 あるのですが、 .NET Frameworkだけで高度な(デバイスドライバなどの深い部分)プログラムを書くことはできないのでしょうか。 それとも動作が速いとかそういう理由でwin32apiを呼び出したのでしょうか。 .NET frameworkはwin32apiの上に位置するというのはわかるのですが・・・

  • プログラミングの勉強法

    私は少しプログラミングに興味がありますが、いざ、学習してみようと思うとなかなか覚えれません。というよりも、勉強方法が分かりません。 プログラム関係の勉強はどのようにすればいいですか?(できれば、Cとかゲームプログラムなど)

  • 勉強とやる気

    高2男子です。勉強はしなければいけないのは分かっていますし、毎日、決められた学習時間は確保できています。が、やる気が起きないというか、持続できません。具体的には、80分も勉強に集中できず、精々一時間が限度です。また、それだけすると、やる気をまた起こすことができません。一日で最低四時間は学習したいのですが、運動は毎日最大で二時間します。疲労回復方法もついでに教えていただけると有り難いです。

  • 推奨書籍を教えてください

    こんにちは。 Visual C++.NET2003を用いてプログラミングを行っています。しかし、コンパイラとして使用しているだけでダイアログボックスやボタンなどのビジュアル的なプログラミングはしておらず、C言語によるコンソールアプリケーションを作っています。 今後も、マルチスレッドなどのプログラムを、コンソール上でプログラミングしていきたい思っています。しかし、本のサンプルプログラムを見ても、だいたいはウィンドウベース(ボタンやマウスクリック、ダイアログボックス)でのマルチスレッド処理等が記載されており、コンソール上でのAPIの使用の仕方がありません・・・(今現在、ソケットプログラミングを進めています) ウィンドウベースではなく、コンソール上でのAPIの使用の仕方などが記載されている本はありますでしょうか? まずは、ウィンドウズプログラミングを知ることからはじめる必要があるということでしょうか・・・・ よろしくお願いします。

  • Visual Studio関連でAPIを使った学習方法は効率的でしょうか。

    C++の勉強をしようと思い、Visual C++ 2005 Express Edition を使って勉強しています。 本屋さんに行くと古めの本には、windowsプログラムはAPI関数も使って勉強した方がバグなどの対応にも融通が効くと書かれていますが、2008年の現時点でvisual studio関連の製品も発展していると思いますが、API関数を使ったプログラムの勉強方法は効率的でしょうか。 API関数を使ったプログラミングの本(Visual C++(1) 山本信雄著)を購入しをプログラミングを始めたばかりですが、windowsの仕組みも少しは理解出来たと思います。 またMFCなどを使ったプログラミングを行った方が良いのでしょうか。 宜しくお願いします。

  • 配列の操作やメモリの確保のミスについて

    プログラミング初心者です。 Visal Studio 2010を使用してC++の勉強をしています。 配列の操作やメモリの確保でエラーを起こした場合、OSや他のプログラムにもエラーを引き起こすことがあるのでしょうか? (記述・実行しているプログラムは教材に記されているただのコンソールアプリです。複雑であったり大規模なものではありません。) たとえば、mallocで配列のメモリを確保したが、その配列の要素数以上に値を書き込んだり参照したり、freeをし忘れたりした場合です。 その時、想定していないメモリ領域に値が書き込まれることで、他のプログラムが壊れたりするんじゃないかと心配です。 というのも、配列の操作やmallocを失敗したときに、パソコンの動作が不安定になるのです。(画面がちらついたり、表示がおかしくなる。) explorer.exeを再起動するだけで収まるように見えるのですが、何が起きているのか不思議です。 以上になります。長文お読みいただきありがとうございました。 よろしくお願いいたします。

  • Win32APIのゲームやアニメーションについての書籍

     Win32APIでゲーム(もぐらたたき)を作りたいのですが、Win32APIでゲームを扱っている書籍が少ないような気がします。(テトリスは多いですが)  もう一つ、DirectXでは画像やアニメーションの本はたくさんありますが、Win32APIではアニメーションの作り方について、多数しかも手取り足取り載っているのが見当たらないです。特にビットマップエディタの使い方がよく分からなくて困っています。Visual Studio 2005のVisual C++を使っています。  ちなみに今まで「Windowsゲームプログラミング 赤坂玲音著」で勉強して、ちょこちょこサイトでアニメーションを勉強しましたが、自分でアニメーションを作ろうと思うとあまりに情報不足な状態です。  Win32APIのゲームやアニメーションについての書籍やサイトがあれば教えていただけたら嬉しいです。

  • 勉強法2

    何回か書き込みしたことがある tomojyuuです。 C++の初心者向けの本を理解した所で簡単なコンソール プログラムを作っている所ですが、 私、Cは知らないので標準の関数を使っていないのです。 本にも1~2個載っているだけで、関数の使い方は 関数のリファレンスの本に書いてあるので、使い方が なんとなくわかるので、APIの使い方を勉強しよう と思っているのですが、みなさん方は独学でどのよう な方法でC++を勉強しているのか聞きたく書き込み ました。