丸山「プログラミング塾」は、プログラマーを支援する「直接 個別指導型 通信教育塾(プログラミング スクール)」です。

プログラミングの基礎、プログラムの作り方、考え方、Windowsアプリケーション作成の総合力を個別指導でアシストします。Skype主体だからこそできる講座です。

これからはじめる 初心者の方の「教えて」にわかりやすくお答えします。

「教助くん」プログラミング 教えて!助けて!

プログラミングに関する、様々な問題や悩み

アドバイザーの「教助くん」が解決します。

費用は、後払い。価格は、あなたが決める「自由価格」です。

これまでの授業−本日の授業−これからの授業

  • 「○○○○」って何?
  • 独学の問題点を理解して、プログラミングを習得
  • コーディングを上達する方法
  • プログラミングの偏見、誤解
  • プログラムを作るためには何が必要なの?
  • 尋ね上手になる方法、他 随時更新

「Windowsアプリケーション習得講座 .NET C# / VB」 詳細

−入塾のご案内−「直接 個別指導型 通信教育塾(プログラミング スクール)」
Windowsアプリケーション習得講座 .NET C# / VB

「プログラミングが理解できる。プログラムが作れるようになる。さらに、設計ができるようになる・・・?」

プログラミング学習でお悩みの皆さんへ。ソフトハウスの社長さんへ。そんな都合のいい話を、お知らせします。今の時代「プログラムが書けます」って言ってもダメ!まともに動いて使えるプログラムを作れないと「できる」とは言えないのです。言ってもいいですよ。でも、恥をかくのはあなたですから、その覚悟はしておいた方がいいです。 それよりも、自分が作った「プログラム」を見せて、作れるという「可能性」をアピールする!実績だから「説得力」があります。(OSや言語に拘る必要はありません。)

どうですか?

プレゼンに使える製品(作品)プログラムを作るのです。
あなたの技術の集大成とする、評価用のプログラムを作るのです。
直接見せられなければ、インターネットから見せるのです。

どうすれば、動く、使える、プログラムが作れるのか?

その方法をお伝えしたいと思います。

いや、「そんなうまい話はないよ」「今のままで十分」「面倒だ、できなくてもいい」「どうせ、私には理解できない」「言語がマスターできれば十分」

そう思いの方は、
どうぞ、このページを読むのをやめてください。

そうではない方。

「プログラミングがわかって、動くプログラムが作れて、さらに設計もできればどんなにいいだろう。」

そうお考えの方、

どうぞ、この続きお読みください。〜クリック 表示 or 閉じる

あなたがその「ある方法」の
ノウハウを知り、
そして、実行するための
情報をお伝えしたいと思います。

よろしいでしょうか?

それでは、
「ある方法」についてお伝えします。

 

プログラミングにおける
「感性」と「概念」(=考え方、背景)と
のことです。

でも、ただの「感性」や「概念」ではないのです。

プログラミングの学習にも、大きな影響が出てくるものです。

感性も概念も言語もすべて、プログラムを作るための道具、素材です。

それらの道具や素材を使って、何を作るかはあなたの自由です。

素材が腐っていたり、道具が悪かったりすれば、どんな料理も台無しです。

 

質問:

初心者にも「感性」や「概念」は必要ですか?

回答:

自分自身の感性(感覚)で、プログラミング学習を「独学」で
はじめた場合を想定してみましょう。

プログラミングを「A書籍」ではじめたとします。

1つの書籍で「100%これで理解できた。プログラムが作れる」
ということはありえません。

情報が足りないからと、B,C・・・と様々な書籍を購入かもしれません。

書籍もネットも言語関連の情報はあるのですが、
プログラムの作り方や考え方については見つけられないかもしれません。
見つけても、意味が分からない、実行・行動できないかもしれません。

見よう見まねで、「こう書けばログラムができる。できた」という
結果だけを積み重ねていくことでしょう。

「何故?」って疑問がわき上がっても、
難しそうだから、面倒だからと、避けるかもしれません。

コンパイルエラーがとれず、行き詰まっているかもしれません。

何となく、プログラムが書けるようになると、
テーマを見つけて作ってみたくなります。

ネットで調べて、
参考になりそうなもの、使えそうなコードを流用するかもしれません。

うまくいかず、思考錯誤を繰り返しているかもしれません。

「早く作りたい」と焦るばかりで、基礎勉強を疎かにしているかもしれません。

 

これらは、あくまでも想像ですが、
当たらずとも遠からずじゃないかと思っているのですが・・・

可能性のある問題点を列挙すると

  • 場当たり的、思考錯誤的で、考え方の積み重ねがないのでは?
  • オブジェクト指向という概念と実装を理解していないのでは?
  • プログラミング言語仕様を熟知していないのでは?
  • クラスライブラリの学び方を知らないのでは?
  • パソコンの使い方や一般的アプリケーションに不慣れでは?
  • コンピュータの基礎数学、OSの基礎を無視しているのでは?
  • ロジックやアルゴリズムを勉強していないのでは?
  • コンパイルエラーの理由を考えていないのでは?
  • どんなアプローチをすればいいのか、考えていないのでは?
  • 人のプログラムの読み書きトレーニングをしていないのでは?
  • 自分の考えに凝り固まってしなければいいのですが・・・

一部ですが、こんな感じでしょうか?

一般論として、過去に達成したところまでは達成することができる。

初心者の方に限らず、すべての人に言えるのですが、
過去に体験したこと、実績があることは、
たとえ忘れていても、記憶がよみがえり達成するのです。

問題は、未経験の領域です。

先の例をみても、右往左往しているのが分かります。

初めてのことだから、多少は仕方がないのですが、
情報だけを探し求めても、問題の本質は解決できません。

もし、行き詰まっていたら、分かる人に相談しましょう。
多少お金を払ってでも、解決できれば先に進むことができます。
なにより、理解・解決できることで、気持ちが楽になります。
※欲張ってはダメですよ。ポイントを絞って尋ねましょう。

これで、プログラムを作るのがイヤになった人は、やめた方がいいです。向き/不向きですから、無理する必要はありません。

質問:

がんばっているのですが、プログラムが作れないのです。
どうすればいいですか?

回答:

ソースコードを見させて頂きました。予想以上にひどかったです。

詳しくは書けませんが、やってはいけないことのオンパレードでした。

つまり

「コードは書けるけど、プログラムが作れない」の典型だったのです。

「プログラムを早く作りたい」と焦っていて、
プログラム作りに熱中されているのはよく分かりました。

プログラム上の問題は2つ

  • 一つのクラスにすべてを記述している
  • プログラム作りに必要な感性と基本ができていない

「プログラミングの基礎から勉強しましょう」と、詳細をお伝えしたのですが
ご理解頂けませんでした。

感性の問題

  • プログラムのシナリオが曖昧
  • 問題を解決するための助言を無視し、自分の方法に固執している

 

作れない理由を分析してもあまり意味がありません。

結局「作る方法を知らない」ということです。

すべての「知識、技術」を学ぶ必要はありません。

今、必要な「基礎、知識、技術、思考、概念」を学び、
プログラマーとしての感性を身に付ける。

これだけです。

プログラミング言語だけを学んで「プログラムが作れるようになる」
そんなことはあり得ないし不可能です。

プログラミング言語やライブラリは、
プログラムを作るための「道具」「素材」です。

そもそも、

道具の使い方や素材について勉強しているだけなんです。
(必要なことをすべて習得しているかも疑問です)

料理方法については学んでいないのですから、
(うまい?)料理が作れないのは当然です。

ですが、

(本当の)料理の場合、「食べられる」か「食べられない」か?
食べられる可能性は0ではありません。初めてでも−幅−があります。

ところが、

プログラムの場合、「作れる」か「作れないか」かでいえば、
(内容にもよりますが)100%「作れない」と断言できます。
論理の世界(1 or 0)ですから、幅がないのです。

焦ってもどうしようもありません。作るために必要なことを、効率よく学び、トレーニングする。これ以外に方法はありません。そのための助言はできます。
そして、
人に助言を求める場合、尋ね方はもちろんのこと、素直、謙虚、受入、行動、結果報告が

詳細はこちらのページへ

プログラムが作れるようになるためには、
プログラムを作るために必要な「知識と技術と考え方と経験」の
積み重ねが必要です。

同時に「感性」を身に付ける必要があります。
「感性」を独学で身に付けることも可能ですが、
ある意味「発見」に近いものがあります。

様々な知識や技術、経験から、状況に応じて臨機応変に対応する
能力という意味も含まれています。
それを行う「基礎的な感性」を身に付ける必要があります。

感性と概念
これらは、漠然としている言葉です。

しかし、プログラミングの世界で、これらの持つ意味は重要です。

具体的にわかりやすくお伝えします。

ソフトウェアは「概念」そのもの

コンピュータやソフトウェアは
様々な概念の上に成り立っています。

それらの「概念」を知識や実体と結びつけることで、
「プログラム作りに必要な知識と技術と思考を身に付ける」
という「思考のトレーニング方法」なのです。

実は、多くの方が様々な「概念」で失敗しています。 

◎鶏が先か、卵が先か
 前述していますが、プログラミング言語を勉強すると
 自然に概念が理解できるようになる。理解できないのは、
 努力が足りないか、そもそもプログラマーとしての
「資質」がないから。と思っている人は少なくはありません。
(20年も30年も前の発想です。当時の環境は今よりもはるかに
 単純で、劣悪で、学ぶ時間がとれていた時代のことです。) 
 私は、逆だと思っています。(多少の実践経験があった上で)
 概念を学ぶことによって、効率的に、よりスピーディーに
 習得することができると考えています。

◎実は、私はオブジェクト指向の本質がなかなか理解できず、
 十数年間、ことある毎に勉強しなおしました。
 ここ2〜3年でやっと本質が見えてきて、テキストにまとめた
 ところです。
 誤解しないでくださいね。オブジェクト指向が分からない
 のではなくて、(長かったですが)概念と実装との関係
 釈然としないことにジレンマを感じていたのです。

 概念を「考え方だ」と割り切ってしまったら、実装には役立
 てることができません。
 概念と実装(実体)を結び付けることにより、プログラムの
 あるべき姿が見えてきます。
 発想が豊かになります。自信につながります。
 新たな発想の源になります。

◎昔、初心者の人が、
 Windowアプリケーションのメカニズムをどうやって
 学習しているのだろうと気になっていました。
 2年ぐらい経って話をすると、見様見真似でプログラム
 を書くだけのレベルしかなく、メカニズムはさっぱり
 でした。問題は、本人がメカニズムを理解しなければ
 ならないことに気付いていないこと。周囲も指摘したり
 指導したりしていないことです。

◎概念が理解できていないと
 プログラム全体が見えない、見ようとしない。
 プログラムを書いて、コンパイルでエラーがなければいい。
 実行時エラーは、その場その場で対処する。
「あるべき姿」という認識を持たない。
 人のコードを理解しないまま流用する。
 アルゴリズムやロジックにまで悪影響をおよぼす。
「当たり前」のことが分からないし、気付かない。
 できる人と会話がかみ合わない。
 基礎的、基本的なこともあやふや。
 結果だけを身に付けるため、理屈が説明できない。
 百害あって一利なしです。

◎そもそも、概念をどうして個人任せにするのか?
 理解する、しないをどうして個人に任せてしまうのでしょう。
 理解できなければ、まともなプログラムは作れません。
 仮に、作れても、自ら考え出すことはできません。 
 それは、重要だと思っていないか、説明できないから。

◎基礎を理解する=概念を理解する
「基礎から勉強しなおしたい」と考えているひとは結構います。
「概念が理解できない」というお話しもよく聞きます。
 基礎も概念も、根っこの所では同じなのです。
 片方が分かって、片方が分からないということには
 なりません。

 

概念を学ぶ上での問題点

(1)概念について断片的にしか教えてくれない
   概念と実体が結びつかない

(2)自分で理解するには相当の時間が必要
   得られる保証はない

(3)教えてももらっても、よく分からない

(4)そんなことは、めんどう。概念不要。

(1)、(2),(3)の3つを解決しました。(4)は無視。

それが、丸山式コンセプトレター(=メール)です。

この、「コンセプトレター」を熟読することで、
プログラミングの学習方法が変わります。

これまで、「概念」に翻弄され挫折した方、
これから、プログラミングをはじめようと思われている方、
概念を理解し、
プログラミングの本質を理解することができるのが、
コンセプトレターです。

詳細はこちらのページへ

サポートについて

後でご気分を害されるといやなので、先にお話ししておきます。

  • 行動しない人
  • その時の気分ではじめる人
  • ほとんど時間がとれない人
  • 自分で真剣に考えない人(人に頼る、甘える人)
  • 助言を素直に受け入れない人
  • 頑固な人、従来の方法に固執する人、否定する人
  • 疑問を疑問として投げかけない人
  • Q&Aの結果を連絡してくれない人
  • 状況を報告してくれない人

残念ながら、私の力ではサポートすることはできません。
実行することで発生する「疑問」の解決「状況」に対するアシストです。

できれば、
2〜3ヶ月の間休日を「プログラミング学習」に費やす気持ちを持って
プログラミングに挑んでください。(あるいは、それに相当する時間)

新しいことをはじめるには、爆発的なエネルギーが必要!

もし、普段からプログラミングしているなら
最高の学習環境です。
その時間をうまく利用して学習しましょう。

どこでも学習できることは、移動中や休憩時間に集中学習!

 

想像してみてください。「プログラムが分かる自分」「プログラムが作れる自分」「設計ができる自分」

 

「プログラミングに必要な感性を理解し身に付け、概念を理解して動くプログラムを作り、設計まで習得!
詳細はこちらのページへ

これからはじめようと思っている方はこちらへ

サンプルで学ぶ『カスタムコントロール化入門・基本・作り方』(VB / C# 対応)

カスタム コントロールを3ステップで攻略。
カスタムコントロール化に必要な3つの技術「UserControl」「オーナ描画」「Control Object継承」に完全対応したサンプルコードと解説書、資料。
.NET Frameworkクラスライブラリ(Control編)解体新書

 

プログラマーがプログラミング時に必要になるキーワード集&サイトリンク集

プログラマーがプログラミング時に必要になると思われるキーワードと参考になるサイトリンク集です。

 

はじめてのアルゴリズム入門−C言語/C++/C#/VB with .NET

コンピュータ言語の次に学習しておきたい「アルゴリズム」ですが、勉強している人は少ないようです。最近の言語には、様々な「アルゴリズム」がカプセル化されているため、無意識に利用しているというのが現状ではないでしょうか?

だから勉強する必要はない?とはならず、プログラムを構築し作り上げるためには欠かせない知識です。例えば、再帰を使えるかどうかでプログラムが変わってきます。

他にも、ObjectクラスにGetHashCode(ハッシュコード)というメソッドがあります。つまり、.NETの世界ではすべてのクラスが−無効にしない限り−ハッシュ値を持っていることになります。もし、アルゴリズムを勉強していなければ、折角持っている機能が宝の持ち腐れ(他のクラスで間接的に使っているかもしれませんが)になってしまします。

すべてを詳細に学習する必要はありません。最低限、言葉と意味を知っておけば、何かの折にヒントになったり、問題解決に役立ちます。

「C言語によるはじめてのアルゴリズム入門」では、数学的なアルゴリズムの他に、グラフィック描画についても下記の幾何学図形についても解説しています。

本サイトでは、本書にあるC言語コードをC#に移植する作業を行っている所です。まだ、途中ですが実行モジュールを公開していますので、試してみてください。