初心者向けのプログラミング。 凊理の私の知り合い

こんにちは



デゞタルの自家補電子デバむスは、倚くの堎合、コンピュヌタヌず察話したす。 デヌタを送信するか、デヌタから制埡されたす。 これに照らしお、プログラミングには垞に関心がありたす。

この分野での私の過去の経隓は、ZX Spectrum BASICむンタヌプリタヌ、青少幎の趣味の䞀郚ずしおのQbasic、および孊生ずしおのC-86に関連しおいたす。 VRML蚀語ぞの関心の䞀郚ずしおECMAScriptを孊ぶ詊みがありたした。 問題は、今䜕を遞ぶべきかでした。



猫をお願いしたす。



急成長しおいる蚀語の蚘事を読むず、悲しい思いが喚起されたした。 これらすべおのGo、Delphi、Pearl、PHP、Java。 ニシキヘビに぀いお、最近たで私は䞀般的にこれが蛇の皮であるず確信しおいたした。 䞀般的に、豊富さず倚様性。 私にずっお、初心者ずしお、誰が誰で、どんな仕事をしおいるのかを理解するのは難しいです。 たずえば、JavaはJavaScriptずどう違うのですか



私の実りのない考えが続くだろう。 しかし、私は圌らの蚘事シリヌズ「Binaria Peninsula」に関するIsocodeリ゜ヌスの投皿を読みたした。 凊理蚀語に぀いお。 興味がある Arduinoぞの関心の䞀郚ずしお、圌はチュヌトリアルで䜕床か圌に蚀及したした。 疑問がありたした。 結局のずころ、Javaマシンが必芁です。 オラクルは、Minecraftのお気に入りのゲヌムの1぀をむンストヌルするずきにこの創造に出䌚いたした。 そしお圌には問題がありたした。 Athlone 1.3では、ホヌムコンピュヌタヌが叀い。 RAMの半分のギグもう1぀半分。 たた、このゲヌムの極端なバヌゞョンは起動できたせん。 極端なバヌゞョンのJavaでは、このハヌドりェアでは動䜜しなくなりたす。



蚈画の疑いJavaはさたざたな理由で機胜したせん。 鉄から制裁たで。 そしお、䜕をすべきか たたは、なぜ私のブラりザヌのFirefoxが危険の怜出に぀いお悲鳎を䞊げ、透過的に「ブロ、䞀般に、私はあなたに譊告した...」



アゟコダの蚘事を読み始めたした。 本圓に奜きだった。 プレれンテヌションのシンプルさず魔法。 若いプログラマヌず島の関係。 ゚ピロヌグ。 圌は圌の息子に読み始め、圌はたた火を぀かたえた。 プレれンテヌションスタむルは、成長する島ず比范するずいう陰謀によっお、初心者にずっお新しい抂念を知芚するこずの難しさを十分に補っおいるず思いたす。 圌の興味を刺激し、誇りを持っお遊ぶ。 そしお、読み取りが画面䞊でコヌドず結果に組み蟌たれるず、䞀般的にそれを吞収したす。 しかし、たた、゚ピロヌグの1぀は、息子ず䞀緒に勉匷するこずの賢明さに぀いお、私が䞀生懞呜に考えさせた。 したがっお、私はこれたでのずころ、この分野の共同研究を䞭断しおいたす。 しかし、圌は自分自身を止めたせんでした。



だから。 環境を蚭定したす。 Javaはすでに立っおいたした。 立ち䞊げたした。 Arduino IDEのすべおはおなじみです。 蚘事から1぀の䟋を入力したした。 ランダムな座暙で黄色の円の束を描きたす。 うヌん...構文は痛々しいほど銎染みがありたす...しかしこれはCです 立ち䞊げたした。 プログラムの速床に驚いた。 そしお、これは私の死んだサムスンNC-110にありたす。ギガバむトのRAMずグラフィックスサブシステムの悲惚な類䌌性がありたす。 日本のチェヌン゜ヌに぀いおの冗談からのロシアの蟲民の奜奇心が実隓に匕き蟌たれたした。 サむクルのポむント数の10倍に増加したした。 匷打、謙虚なハヌドワヌカヌは蚀った。 うヌん... 100倍に増加したした... Vvzhik、圌は繰り返したした。 1000倍になりたした。 ここで、私のネットブックはコヌドの実行速床が倧幅に䜎䞋したした。 それにもかかわらず、私は満足したした。 私は䟋をロヌドし始めたした。 もちろん、グラフィックスを䜿甚しおいる人は遅くなりたした。 EXEshnikのサンプルの1぀をコンパむルしようずしたした。 そしお、EXEにコンパむルされたスケッチが起動しないこずが刀明したした。 2぀のりィンドりがポップアップしたした。



1぀では、「C\ ProgramData \ Oracle \ Java \ javapatch \ javaw.exe䞍明な゚ラヌ。」



2番目は「Processing error」ずいう芋出しで、「ShellExecuteExの呌び出し゚ラヌ」ずいうテキストがありたす。



次は、初心者プログラマヌの叀兞的な行動でした。 ラむトが擊れ、車茪が蹎られた。 processing.orgを怜玢し、プログラマヌ向けのチャットを探したした。 しかし、プログラマヌではなく、若いオザボティキがいたした。 答えを芋぀けるために必死に、圌は氞遠のロシアの質問に぀いお振り返り始めたした。 そしお、それは起こりたす 正しく䜜成された質問には、回答の半分が含たれおいたす。 そしお、問題を解決したした。 たあ私はそこを芋おいた プログラムファむル内。 たた、Program FilesではなくProgramDataが必芁です。 フォルダヌは非衚瀺になりたした。 登った。 必芁なサブフォルダヌはそこにありたしたが、 javapathフォルダヌにはファむル自䜓は含たれたせんが、ファむルぞのショヌトカットが含たれたす。 プロパティを線集できたせんでした。特に、䜜業フォルダヌを指定できたせんでした。 Javaフォルダヌに登りたした。 C\ Program Files \ Java \ jre1.8.0_25 \ bin \そこで必芁なプログラムを芋぀けお、そこから新しいショヌトカットを䜜成したした。C\ ProgramData \ Oracle \ Java \ javapatch \これは圹に立ちたせんでした。 それから、私はそれず、ショヌトカットを持っおいる他の人をこのフォルダにコピヌしたした。 そしおうたくいきたした



息子ず最初の章を読んで、円を描く方法、目的の色で塗り぀ぶす方法、マりス、カヌ゜ル座暙、ボタンを䜿甚する方法を芋぀けたした。 私の息子は本圓にマりスで描くのが奜きでした。 圌は色付けプログラムやフォトショップにも手を出したした。 そしおここ。 私たちが曞いたプログラムを描く 圌は私の母に䌚うように芁求したした。 そしお、私は考えがありたした。 そしお、ペむントブラシのようにグラフィック゚ディタを曞いおみたせんか



最初のバヌゞョンは、30行のコヌドに収たりたす。 すでにブラシの色ず盎埄の遞択がありたした。 私の息子はそれがさらに奜きだった。 もちろん、ちょうど30行は偶然ではなく、トレンドの远求でした:)したがっお、コヌドは混乱したした。



珟時点では300近くありたすが、プログラムがだたされおいるからではありたせん。 しかし、私は牛スタむルの執筆から逃げようずしおいるからです。 その埌、この混乱で理解するこずさえ䞍可胜です。 䜕をしたすか ブラシの色ずサむズを遞択するためのパネルが䜜成されたす。 そしお、それらにボタンを呌び出したす。 カラヌサンプルの数は、マりスの巊ボタンず右ボタンごずに8個になりたした。 各サンプルには独自のブラシがありたす。 これたでのずころ、スポットの盎埄のみ。 ストロヌク間の距離であるXおよびYのスポットをスケヌリングする蚈画。 巊のボタンは倉曎する色を遞択し、右のボタンはラむオンに察しおアクティブです。 そうだね 描画時のボタン。 BMP圢匏での画像の保存が完了しおいたせん。 正盎な1600䞇色以䞊。 十分な数倀情報がありたせん。 たずえば、ブラシのサむズに぀いお、描画フィヌルド内のカヌ゜ルの座暙に぀いお。 これも蚈画䞭です。 蚈画には、色を決定するためのスポむト、コピヌするためのスタンプ、およびがかしも含たれおいたす-描画するずき、それは非垞に欠けおいたす。 さたざたな圢のブラシの汚れ、さたざたなペむントアルゎリズム。 䞻なものは、色の透明床があっおも、1぀のポむントに耇数のストロヌクがない均䞀なトヌンです。 線を描くのに十分なベクトルがありたせん。 そしお、元に戻す機胜は非垞に䞍足しおいたす。 䜜業のロゞックがより明確になりたした。 これで、描画フィヌルドからカラヌピッカヌに飛び出しおも色は消えたせん。 ブラシのサむズが䞋がらないように。 しかし、間違いがありたす。 ただ修正されおいたせん。 しかし、明瀺的には珟れたせん。 Cのように、この蚀語で機胜したす。 関数はルヌチンです。 ずおも快適です。 呌び出されたずきにパラメヌタヌを受け取る関数を䜜成したした。 圌女は芏定を満たし、結果を返したした。 たた、芏定は厳密には芏定されおいたせんが、呌び出されたずきにパラメヌタヌの倀に応じお遞択できたす。 たたは䜕も返さず、グロヌバル倉数の倀を倉曎したした。 たたは、画面䞊に䜕かを再描画したす。 グルは、グロヌバル倉数は悪だず蚀いたす。 しかし、今のずころ私は圌らなしではどこにもいたせん。 圓初、私のプログラムはモノリシックでした。 そしお最も難しいのは、カヌ゜ルが抌された状態をチェックするこずでした。 30行のコヌドであったずき、すべおが明確で理解しやすくなりたした。 しかし、「機胜」の数の増加に䌎い、たすたすコヌドの繰り返し郚分が出珟し始めたした。 そしお、関数を䜿甚するこずにしたした。 そしお、すべおが壊れたした。 现身のモノリシックプログラムは、数十個の個別の郚分、぀たり機胜に爆発したした。 私はプログラムを垞に機胜させ続けたかったのです。 間違いを犯す機䌚に恐れお、䜕、どこ、どこ、なぜ しかし、埐々にすべおが正垞に戻りたした。 そしおさらにそれ以䞊。 最適化 同じ関数が色ずブラシパラメヌタを倉曎するようになりたした。 そしお、確かに、もしあれば、他のパネルにも適甚されたす。 別の汎甚関数は、スクロヌルバヌのスラむダヌの䜍眮を再描画したす。 3番目には、倉曎甚に遞択された色、マりスボタンのアクティブな色の8色が衚瀺されたす。 テストプロセス䞭に、制限が特定され始めたした。 䜜成された画像の解像床は1むンチあたり72ピクセルです。 そしお、わずかな増加で、これはすぐに芋えたす。 しかし、線集者は、la photoshopではなく、la PaintBrashに䜍眮付けられたした。 本「Binaria」の3぀の章のみを読んだこずに泚意しおください。 そしお、そのような限られた知識で、結果はただ悪くないず思いたす。 蚘事の最埌にプログラムリストが添付されたす。 アルゎリズムはコメントから明らかです。 私は通垞倜に曞きたす。 私の最愛のメむンベヌタテスタヌが寝おいるずき。 あなたの興味に泚意をそらさないでください。 そしお、それらはたくさんありたす。 私はこれを蚀っおポむントを芋る



1すべお、文字通りすべお、コメントする必芁がありたす 関数が行うこずだけでなく、文字通りすべおの行 それ以倖の堎合は、次の倜、新しいゲヌトの雄矊のように、独自のコヌドを芋たす。 あなたは自分が望むものを理解したすが、それを実珟するためにどの堎所を倉える必芁があるかを理解しおいたせん。 コヌドは機胜しおいたす。 しかし、あなたはその方法がわかりたせん バックアップする必芁がありたす。 プログラムで䜕かをデバッグしたした。 プログラムは動䜜したす。 バックアップ-コピヌを䜜成する必芁がありたす。 すべおが本圓に悪くなった堎合、戻るこずができるように。 これは、倧きな倉曎を行う堎合に特に重芁です。 䜜業のロゞックを倉曎し、優れた機胜を远加したす。



2欲望では、䞀貫性が必芁です。 アむデアは矀れの䞭にありたす。 あなたはそれらを熟考し始めたす-あなたは今䜕をしおいるのか、なぜそうしおいるのかずいう考えを倱いたす。



3蚈画する必芁がある。 プログラムは、動䜜するカヌネルで開始しないでください。 そしお圌女が解決するタスクを。 むンタヌフェむスのスケッチの埌、アルゎリズムのブロック図の埌。 メむンプログラム䞀般的な甚語ずサブプログラム詳现の䞡方。 䜕を、どこで、どこで、なぜ芋぀け出すのは簡単です。 それ以倖の堎合、コヌドの最倧60の必然的な曞き換え 既に実装されおいる堎合、プログラムの新しい構造、発明された汎甚機胜に劇的に倉化したす。



44番目ですが、実際には䞻なものです。 曞かなければならない 詊し、ミスをし、理解し、修正する必芁がありたす。 トピックに関する100冊の本を読んだ埌、座っお「from and to」プログラムを曞くこずは決しおありたせん。 しかし、これはもちろん私の個人的な意芋です。 アマチュアの意芋。 そしお、この4番目は3番目ず矛盟したせん。 将来のプログラムの明確な蚈画があっおも、すぐに゚ラヌなしで䜜成するず倱敗したす。

他に䜕を蚀いたすか 非垞に耇雑な感情。 䞀方で、自信が高たり、他方では、プログラムが急速に成長しおいるずいう認識。 䞀方で-圌らの「子䟛」をさらに改善したいずいう願望。 䞀方-Photoshopのモンスタヌの胜力を超える可胜性は䜎いずいう認識。 したがっお、重芁なのは結果ではなく、プロセスだけです。 勉匷の頭の䞭で留めたす。 埌で息子に説明できるようにするため。 蚀語の孊習に圹立ちたす。 「Binaria」の次の章を読む必芁があるずいう認識。 珟圚曞かれおいるのは私の制限です。 しかし、この蚀語の限界にはほど遠い。



結論ずしお、私の図面はプログラムで䜜成されたす。 むしゃむしゃ。 珟圚、圌は息子のタブレットに氞続的なスクリヌンセヌバヌを持っおいたす。 ここでは、タブレット䞊のスクリヌンダンプずしお衚瀺されたす。もちろん、Photoshopによっおツヌルバヌがトリミングされたす。







プログラムの䜜業䞭に䜜成されたメむンベヌタテスタヌのいく぀かの図面。











たた、圌のプログラムのスクリヌンダンプ。 9぀のむヌスタヌ゚ッグを描きたす。 毎回新しい色合いで。 非垞にシンプルなプログラム。 12行未満。 しかし、圌は各チヌムの目的ずその倉数を自分で説明できたす







プログラムリスト
boolean ris = false; // .    boolean sel_col = false; // .      boolean sel_kist = false; // .      int num_color = 0; //  . 8 .   int color_active_left = 0; int color_active_right = 1; //      int num_panel; //        // 4   8 . RGB  8  int [] colr = new int [8]; int [] colg = new int [8]; int [] colb = new int [8]; int [] proz = new int [8]; // 4   8 .  ,   X  Y,    int [] r = new int [8]; int [] scale_x = new int [8]; int [] scale_y = new int [8]; int [] distanse = new int [8]; //  ,    ,         int zader = 1000000000; int nabor; void ris_main_menu () //   { fill ( 20, 20, 20); rect ( 0, 0, 65, 600); //    //     fill (20, 20, 20); stroke (200, 200, 200); rect (3, 5, 15, 15); noStroke (); fill (255, 0, 0); rect ( 5, 7, 3, 11); fill ( 0, 255, 0); rect ( 8, 7, 3, 11); fill ( 0, 0, 255); rect (11, 7, 3, 11); for (int a= 3; a < 14; a++) {//         int b = a * 17; stroke (b, b, b); line (15, 20 - a, 16, 20 - a); } //     fill (20, 20, 20); rect (22, 5, 15, 15); fill (200, 200, 200); ellipse (29, 12, 8, 8); fill (20, 20, 20); rect (41, 5, 15, 15); fill (200, 200, 200); rect (44, 8, 9, 9); //      fill (50, 50, 50); rect (47, 11, 3, 3); stroke (50, 50, 50); line (48, 9, 51, 9); } void disp_sel_col () //         2   4  { cls_sel_col (); //     noStroke (); fill (0, 0, 0); //  ,   for (int i = 65; i <= 119; i = i + 18) //    8     2   { rect (5, i, 21, 16); rect (35, i, 21, 16); } for (int i = 0; i < 8; i+=2) //    4      { if (num_color == i) //      -    {stroke (200, 200, 200); } else {noStroke ();} //  -    fill (colr [i], colg [i], colb [i], proz [i]); rect ( 5, 65 + i * 9, 21, 16); //         -     if (i == color_active_left) {noStroke (); fill (240, 0, 0); ellipse (30, 73 + i * 9, 5, 5);} } for (int i = 1; i < 8; i+=2) //    4      { if (num_color == i) {stroke (200, 200, 200); } else {noStroke ();} fill (colr [i], colg [i], colb [i], proz [i]); rect (35, 56 + i * 9, 21, 16); //         -     if (i == color_active_right) {noStroke (); fill (240, 0, 0); ellipse (60, 64 + i * 9, 5, 5);} } //     -        if (sel_col == true) {ris_polz (colr [num_color], colg [num_color], colb [num_color], proz [num_color]);} //     -        if (sel_kist == true) {ris_polz (r [num_color], scale_x [num_color], scale_y [num_color], distanse [num_color]);} } void ris_col_bar () //    { cls_pan_instr (); ris_polz (colr [num_color], colg [num_color], colb [num_color], proz [num_color]); for (int i=255; i>=0; i--) //    4      { stroke (i, 0, 0); line (5, 400-i, 10, 400-i); stroke (0, i, 0); line (20, 400-i, 25, 400-i); stroke (0, 0, i); line (35, 400-i, 40, 400-i); stroke (i, i, i); line (50, 400-i, 55, 400-i); } } void ris_sel_kist () //    { cls_pan_instr (); ris_polz (r [num_color], scale_x [num_color], scale_y [num_color], distanse [num_color]); for (int i=255; i>=0; i--) //    4     { stroke (200, 200, 200); line (5, 400-i, 10, 400-i); line (20, 400-i, 25, 400-i); line (35, 400-i, 40, 400-i); line (50, 400-i, 55, 400-i); } disp_sel_col (); } void cls_pan_instr () //    {noStroke (); fill (20, 20, 20); rect (0, 145, 65, 450);} void cls_polz () //    { noStroke (); fill (20, 20, 20); for (int i = 11; i < 57; i = i + 15) {rect (i, 140, 9, 265);} } void cls_sel_col () //    8  { noStroke (); fill (20, 20, 20); rect (2, 63, 63, 75); } void ris_polz (int r, int g, int b, int p) //   { cls_polz (); noStroke (); fill (200, 200, 200); triangle (12, 400 - r, 16, 396 - r, 16, 404 - r); triangle (27, 400 - g, 31, 396 - g, 31, 404 - g); triangle (42, 400 - b, 46, 396 - b, 46, 404 - b); triangle (57, 400 - p, 61, 396 - p, 61, 404 - p); } void sel_num_col (int x, int y) //     .  X  Y //  -    ,  -  . //   -  ,   -   { for (int i = 0; i < 7; i++) { if (x >= 5 && x <= 26 && y >= 65 + i * 9 && y <= 81 + i * 8) { if (mouseButton == LEFT) {num_color = i;} else { if (mouseButton == RIGHT) {color_active_left = i;} }} if (x >= 35 && x <= 56 && y >= 65 + i * 9 && y <= 81 + i * 8) { if (mouseButton == LEFT) {num_color = i + 1;} else { if (mouseButton == RIGHT) {color_active_right = i + 1;} }} } disp_sel_col (); } void select_value (int x, int y, int num_panel) //      { //    4 ,       //     -   ,    -  , //   X  Y,    if (sel_col == true | sel_kist == true) { int [] a = new int [4]; if (num_panel == 0) { a [0] = colr [num_color]; a [1] = colg [num_color]; a [2] = colb [num_color]; a [3] = proz [num_color]; } else { if (num_panel == 1) { a [0] = r [num_color]; a [1] = scale_x [num_color]; a [2] = scale_y [num_color]; a [3] = distanse [num_color]; } } //       ,       for (int i = 0; i < 4; i++) { if (x >= 5 + i * 15 && x <= 15 + i * 15 && y >= 145 && y <= 400) {a [i] = 400 - y;} } //         if (num_panel == 0) { colr [num_color] = a [0]; colg [num_color] = a [1]; colb [num_color] = a [2]; proz [num_color] = a [3]; } else { if (num_panel == 1) { r [num_color] = a[0]; scale_x [num_color] = a[1]; scale_y [num_color] = a[2]; distanse [num_color] = a[3]; } } ris_polz (a [0], a [1], a [2], a [3]); //   disp_sel_col (); //    } } void setup() {//   RGB  ,  for (int i = 0; i < 8; i++) { colr [i] = (i + 5) * 10; colg [i] = (i + 5) * 12; colb [i] = (i + 5) * 16; proz [i] = 255; } size(1000, 550); //   background (0,0,0); //   frameRate (20); ris_main_menu (); //    ( ) disp_sel_col (); //    } void draw() { if (mousePressed && ris == false) //       {//       if (mouseX >= 3 && mouseX <= 15 && mouseY >= 5 && mouseY <= 15) //   , .    ,     {ris_col_bar (); sel_col = true; sel_kist = false;} else { //       if (mouseX >= 22 && mouseX <= 37 && mouseY >= 5 && mouseY <= 15) //   , .    //    - .     {ris_sel_kist (); sel_kist = true; sel_col = false;} else { //       if (mouseX >= 5 && mouseX <= 56 && mouseY >= 65 && mouseY <= 135) {sel_num_col (mouseX, mouseY);} //     .     ,   //    ,     else { if (sel_col == true && mouseX >= 5 && mouseX <= 55 && mouseY >= 145 && mouseY <= 400) {num_panel = 0;} if (sel_kist == true && mouseX >= 5 && mouseX <= 55 && mouseY >= 145 && mouseY <= 400) {num_panel = 1;} select_value (mouseX, mouseY, num_panel); // else { //      // if (mouseX >= 70 && mouseX <= 120 && mouseY >= 25 && mouseY <= 75) // {save ("KARTINKA.bmp");} }}} //   "else" } //  "     " //           X    //  -   +    //  !!!     ,       / . //         if (mousePressed && mouseX >= 65 + r [nabor] / 2) { ris = true; // . .          //      if (mouseButton == LEFT) {nabor = color_active_left;} //    -    else { if (mouseButton == RIGHT) {nabor = color_active_right;} //    -    } //    ,           noStroke (); fill (colr [nabor], colg [nabor], colb [nabor], proz [nabor]); ellipse (mouseX, mouseY, r [nabor], r [nabor]); //   //      .      //    } else { //     -  .   "" if(!mousePressed){ ris = false;}} }
      
      









この蚀語で芋぀けた本をロシア語で蚀及したす。

「凊理を䌎うプログラムの孊習」-著者ケヌシヌリヌス/ケヌシヌリヌス、ベンフラむ/ベンフラむ-6.89 Mb

凊理2Ian Vantommeによるクリ゚むティブプログラミング-15.8 Mb



All Articles