プログラミングをはじめようの世界観です。
プログラミングの入門として言えるのは、「百聞は一見に如かず」です。
まず、やってみましょう。いくら入門書を読んでも、「あなたが書きたいプログラム」について書かれた入門書はありません。
自分の手でやることを、DIY(Do-it-yourself)と言いますが、プログラミングは完全にDIYの世界です。
何をするにも前に、やってみましょう。どんなに読んでも、どんなに見ても、どんなに学んでも、その先には何もありません。実際にテキストエディタを開いてプログラムコードを書き、それをコンパイルして実行することしか、プログラミングに必要な経験はありません。
分からないところがあったら、Googleで検索しましょう。初心者だけではなく、上級者も、プログラミングは、専門知識よりも、Googleで検索しながら自分の手で書くことで身に付きます。
コンパイラが欲しいなら、僕はLinuxを使うことをおすすめしますが、最近はPythonやRubyはWindowsでも動きます。その代わり、環境構築が面倒ですので、おすすめするのはLinuxです。最初からgccやpythonコマンドが使える環境が多いです。
Debianを使う場合、残念ながら初期状態ではgccやmakeが入っていません。インストールするには以下を実行します。(#の文字はrootユーザーでコマンドを入力することを表す。そのため#は入力しなくてよい)
# apt install gcc make
環境構築が終わったら、Hello Worldのような単純なC言語のプログラムを書いて(printf()でHello Worldを表示する以外、何もしないプログラムで構いません)、gccでビルドするだけの簡単なMakefileを書き、makeで自動的にバイナリファイルがビルドできて吐き出されることをまず確認しましょう。そして、./hogeを実行してプログラムがきちんと仕事をできるかどうかを確認します。
たとえば、以下のようなプログラムとMakefileになるでしょう。
hoge.c:
#include <stdio.h> int main(int argc, char *argv[]) { printf("Hello, World!\n"); return 0; }
Makefile:
hoge: hoge.o gcc -o hoge hoge.o hoge.o: hoge.c gcc -c hoge.c
実行すべきコマンド($の文字は一般ユーザーのターミナルの入力プロンプトを指すため入力しなくてよい):
$ make $ ./hoge
これが実行できたら、それ以上は、OSの環境は変えなくて構いません。
その後は、アイデアが思いついた時点で、そのアイデアの実現方法を考え、それを実際にプログラムに落とし込むことができるかを、書いて実行して試すのです。思いついたアイデアは、ひとつ残らずすべて試すつもりで臨みましょう。
MakeやGNUツールチェインやC言語も参照のこと。
プログラムとは、「コンピュータに対する命令の記述書」であると言えます。
たとえば、(3 + 1) × 4を計算するとします。これをプログラムにすると、
int x = 3 + 1; int y = x * 4; printf("%d\n", y);
のようにC言語で書くことができます。
ここでは、int型(整数値)の型を持つxとyという変数、+(足し算)と*(掛け算)という演算子、3と1と4という整数リテラル、そしてprintf()というC言語の関数を使っています。
まず、変数とは「値を入れる数」のことです。演算子とは「値と値を計算して別の値を返す命令」のことです。また、3や1や4は数値として「値」として処理されます。
これだけなら、数学にも出てくる内容であり、数式と何も変わりませんが、問題はprintf()関数です。この関数は、コンソール画面に変数の中身を表示しろ、という意味になります。
関数には、引数と呼ばれる「関数に渡す値」を指定して呼び出すことができます。printf()はフォーマットした文字列を表示することが可能なため、"%d\n"という引数を与えています。「"」と「"」で囲まれた値は文字列として処理されます。%dはprintf()で使用することのできる文字列フォーマットで、整数値の変数の値を取り出すことを表しています。そして、yの値が%dの中に展開されます。\nは改行コードです(後述します)。
これだけではつまらないので、これを10回表示させるようにしてみましょう。以下のようになります。
int i; int x = 3 + 1; int y = x * 4; for (i = 0; i < 10; i++) { printf("%d\n", y); }
for文は繰り返し構文で、iというインクリメント(順番に一つずつ増やしていく)するカウント用の変数を宣言し、for文で繰り返しprintf()関数を実行します。for文のパラメータは、左から
for (繰り返しの最初に行うこと; 繰り返しが行われる条件; 繰り返しがひとつ終わる度に実行すること) { 繰り返す処理内容; }
を意味しています。初期値としてi = 0;を代入し、iが10よりも小さい間中繰り返しを続け、繰り返しがひとつ終わる度にiを1ずつインクリメントする(i++)ことを表しています。i < 10は論理演算子で、「iが10よりも小さい」という条件式をfor文に指定できます。
プログラムとは、こうした「コンピュータにこういうことをしろ」という命令の、ひとつひとつの手順の記述に他なりません。その中で、数学で使われるような変数や、さまざまな文(条件分岐や繰り返し)や演算子が使えるほか、そして関数すなわちサブルーチン(ひとまとまりの処理)を作ったり、システムに存在するさまざまな関数、たとえばフォーマットを指定して出力するprintf()やコマンドラインからデータを入力して変数に格納するscanf()などを利用したりすることができます。
C言語では、文には、繰り返しを行うためのfor文のほか、条件に応じて分岐をするif ~ else文などがあります。また、変数の型には文字型を表すcharや浮動小数点数型を表すfloat/doubleなどがあります。変数のデータはメモリに格納されており、メモリアドレスによってアクセスすることのできるポインタという特殊な変数の型もあります。また、C++やJavaなどはさらに高度な「オブジェクト指向」というプログラム設計の考え方があります。
変数には、整数型の変数なら整数、文字型の変数なら文字を格納します。型の許す範囲であれば、どんな値でも格納すること、そして変更したり取り出したりすることができる便利なしろものです。変数は一時的に格納したり、演算子によって計算に使ったり、条件分岐や繰り返しの際の条件式に使ったり、関数を実行する際にその関数の中に渡してその変数についてのルーチンを実行したりできます。(通常は関数に値として与えますが、ポインタを使うことで関数の内部から変数の値を変更できます。)
また、上のコードには改行コードを表す特殊文字(エスケープシーケンス)である\nが使われています。上のコードでは、\がフォントの関係から¥と表示されていますが、この2つは同一文字です。\nを適切に入れることで、その場で次の行に改行してくれます。エスケープシーケンスは他にもあって、スペースを表す\s、タブを表す\t、null文字を表す\0があります。便利なのはタブで、文字の幅に合わせて自動的に伸縮してくれるスペースを表示できます。文字の幅が1つか2つ変わっても、同じ幅のスペース(通常は4か8)を保ってくれます。また、null文字は文字列の終端を表すのに使用します。
プログラミングとは、こうした「プログラムを開発する作業」のことです。思ったよりも簡単だと思われませんか?プログラミングはこのように、とても単純で簡単な作業です。
コマンドの基本は、C言語ではmain()関数からプログラムが始まります。ここから全ての関数が呼ばれます。
あるいは、GUIプログラムでは、イベント駆動によるプログラムを行うことが多いです。ボタンやメニューにあらかじめ「クリックされたらこの関数を実行せよ」という「イベント」を登録し、そのイベントからそれぞれの関数(コールバック関数)が呼ばれます。
Windows APIなどの低レベルなGUIではメッセージループと呼ばれる「OSから来たメッセージを処理する」という方式のプログラム方式になることもあります。
プログラミング初心者は、「main()関数」と「イベント駆動」を覚えておけば、何でも簡単にOSの機能を使ってプログラミングを行うことができます。
ある意味、GUIとCUIの違いは、CUIが「必ずmain()関数から同じように実行される(ただしコマンドラインオプションを引数に取る)」のに対して、GUIは「イベントごとにさまざまなコールバック関数を実行する」という違いになります。それだけで、基本的には、関数のコードブロックが実行される、ということに変わりはありません。
また、GUIのプログラムに言えるのが、「ウィンドウを表示しているのは、全部Windowsのウィンドウ表示機構がやっている」ということです。
要するに、独自のプログラムはウィンドウに対する操作や命令にすぎず、全体の「ウィンドウ表示システム」がウィンドウを管轄して表示しているのです。
X Window Systemでもそれは同じです。全てのウィンドウ操作は、ウィンドウシステムが支配し、管轄し、管理し、全ての操作・表示機構をOSのウィンドウシステムが担っています。これを取りかえることはできません。そのため、WindowsではWindowsの、XではXのやり方にそってプログラムを開発する必要があります。プログラムというよりは、「ウィンドウシステムへのコマンド命令」だと思うと良いでしょう。そのコマンドを解するのは、GUIではWindowsやXであり、CUIではシェルやlibcやカーネルのシステムコールなのです。
言ってしまえば、「こっちにはボタンとかフォームのコンポーネントがあるから、言ってくれたらこっちで組み立てるぜい」といった親方の仕事に近いと思います。もちろん自分でコントロールを作ることは可能で、多くのGUIプログラミングはこうしたコンポーネントの作成(継承とオーバーライドを使う)に多くが割かれます。
ある意味、設計としてはXの方がWindowsよりも優れているでしょう。それは、Xサーバーという「グラフィック全てを統括するサーバー」があるため、仕事が分かりやすいからです。全てのXプログラムは、Xサーバーに対してXプロトコルで通信する「通信相手」にすぎません。全てを表示しているのは、全てXサーバーなのです。
後日注記:決してGUIが劣っているわけではありません。WindowsではGUIがOSに統合されており、システムのAPIを呼び出すことでGUIアプリケーションの開発ができます。これはファイルシステムやソケットのシステムコールと変わりません。ですが、多機能・高機能すぎてプログラマ志望の入門者にとっては理解しづらい仕組みになっています。たとえば、Windowsではグラフィック操作を行うためにOSとデバイスの仲介役であるデバイスコンテキストを使います。こうした点が、Windowsプログラミングに挫折する大きな障壁となっています。
コンパイルエラーがでてコンパイルできない時は、エラーメッセージをよく読みましょう。
たとえば、カッコをつけ忘れた時などは、エラーメッセージにその場所となる行が表示されていることが多いです。
JavaScriptの場合は、ブラウザの検証機能(開発者向けのデバッグ機能)を使って、エラーの内容をチェックすることができます。
英語のメッセージであっても、必ずエラーメッセージの内容を読むようにしましょう。
僕が思うに、プログラミングのコツはジャンプです。
今の高水準言語に慣れきっているわたしたちは、暗黙のうちに、if文とfor文と関数を区別し、それぞれ別のものであるかのように覚えています。
ですが、アセンブラのようなマシン語に近い低水準言語では、これらはジャンプの形態にすぎません。
そして、そのように、「ジャンプには条件分岐・反復・サブルーチンがある」という事実こそ、プログラミングを学ぶ上で重要です。
たとえば、フローチャートを描く際を考えてください。一番上から流れて、分岐や繰り返しを経て、一番下に到達します。
そのために、条件分岐と反復とサブルーチンを使います。条件分岐・反復・サブルーチンは、「プログラムを記述する上で欠かせない頻出するパターン」なのです。
つまり、プログラミングとは、変数とジャンプを使いながら、どのように判断してどのように分岐が流れていけば、目的の仕事を達成できるのか、ということです。
そして、そのような仕事によって、さまざまな情報を処理することができます。数字だけではなく、文字、画像、音声などのマルチメディア処理ができます。文字について言えば、単なる一行あるいは複数行のプレーンテキストだけではなく、HTML/XMLやJSONを操作することができます。
プログラミングとは、そのような作業です。重要なのは変数とジャンプです。
また、変数にはさまざまな使い方があります。
一時的な計算や記憶のために使う変数だけではなく、永続化されたデータの取り出し・格納のために使ったり、ファイル処理あるいはネットワーク処理のバッファに使ったり、アルゴリズムで鍵となるようなスタックやキューをはじめとするデータ構造を表現するために使ったり、ハードウェアのデータをマッピングするために使ったりします。
また、for文やif文とともに使う場合は、論理式と比較して、繰り返しや分岐のための条件式が成立するか否か、ということにも使います。
決められた定数や文字列との比較や、定型文を表示するためのテンプレートや、文字列の部分ごとの検索や置換のためのパターンマッチングやマクロ置換などにも使います。
演算をする場合は、一時的な数の仮置き場を作っておいて、演算した結果を格納し、関数の戻り値として返したりします。
データ構造を作る時は、変数の種類をたくさん宣言して、その組み合わせとしてデータを表現することがあります。Enum型でデータの種類を列挙し、クラスのメンバ変数やメソッドの中でこのEnum型の変数を使ったりしますし、構造体はとてもたくさんの利用用途があり、使われ方も複雑です。
ほかにも、ユーザーがフォームなどに入力した値を格納したり、システムのウィンドウコントロールのプロパティとして値を与えることもあります。
ネットワークなどでは、通信する際のデータ転送や、プロトコルへのリクエストや応答を表現したり、データを解析するためにも、変数を使います。
先に言ったジャンプと同様、変数もとても重要なプログラミングにおけるキーパーソンです。いわば、「変数とジャンプで目的の仕事を達成する」、これこそ、プログラミングであると言えるでしょう。
そもそも、パソコンのことを「なんとなくアプリケーションが動くハードウェア」だと思っている人が多いと思います。
パソコンが本当は何なのか。僕は、手動でプリンを作るのか、それとも自動プリン製造機械でプリンを作るのか、といった話に近いと思います。
パソコンがなくても、パソコンのやる仕事を手動でやることはできます。ワードを開いて自分の手で文書を入力し、右クリックメニューなどを使ってコピペしたり、手作業で編集を繰り返していけば、プログラミングを行わなくても、手動でテキストを編集できます。
ですが、これでは、することが膨大かつ複雑になってくると、手動ではできなくなってしまいます。
Pythonなどのプログラム言語を使ってプログラミングを行うことで、こうした「タスクを自動化」することができます。
言ってしまえば、手動でプリンを作ることもできるでしょう。ですが、一度こうしたタスクを、入念かつ丁寧にコンピュータに分かるように書いてしまえば、どれだけ作業量が増えて複雑になってきても、コンピュータが自動で何度でもやってくれるのです。
言ってしまえば、変数や関数などはそうしたプログラミングを行う上での「手助け」にすぎません。パソコンの本質はこうした定型処理にあり、「バッチ処理」と呼ばれます。
パソコンが数学であるとよく言われますが、それは正しいところがあって、数学的計算の上に成り立っているパソコンでは、数学的な「お遊び」が簡単にできます。たとえば、24時間制(あるいは12時間制)でない時計を作ることもできますし、時間の単位を簡単に変えられる時計のようなものも作れます。ですが、パソコンは単なる数学ではなく、「数学的な自動処理ができる機械」であり、まさに「料理のレシピを自動でやってくれる機械」に近いところがあります。
後日注記:バッチ処理は単純ですが、簡単ではありません。入力を得てデータを変数に格納し、処理・加工し、データを出力するか、指定の関数を実行するバッチ処理は、基本的ですが難しいプログラムです。逆に、バッチ処理さえできてしまえば、UNIXでもWindowsでも、どんなプログラムにも対応できます。
プログラミングについて重要なこととして、「設計が大事である」ということが言えます。
言ってしまえば、コードを書いている時間など、全体の仕事のほんの数パーセントにすぎません。コードを書いてプログラムを実装するよりも、その前の「設計段階」、すなわち「プログラムをどのような仕組みで構築するか」が重要になります。
プログラムは、設計と実装の二本柱です。言ってしまえば、設計が終わってしまえばあとは書くだけです。書くこと自体よりも、設計すること、仕組みを考えることが大切なのです。
そのため、アルゴリズムとデータ構造とデザインパターンの知識があると、スキルは高くなります。設計のためにはプログラミング言語を学ぶことよりも、その上にある「どのようにコードを書いていくか」という「どんな種類の技術があるか」を知ることが大切です。エンジニアは最新技術や言語機能を知ることももちろん大切ですが、そうした「技術的な事例」は人から学ぶしかありません。本にも書いていないそうした知識をどんどん人から教わり、盗んでいきましょう。
後日注記:設計のはじめの一歩は、定型処理を関数にすることです。そのシステムを実現するためにどのようにルーチンやモジュールに分けるかということが基本になります。また、制御フロー(分岐・反復処理や並列処理やスレッドなど)やデータ構造(配列・リストやコンテナやスタック・キューなど)の知識や技術も必要になります。大規模なプログラムになると、全体の構造であるアーキテクチャをどのように再利用するかが重要になってきます。また、オブジェクト指向モデリングでは、データ構造の関連性を把握するクラス図や、アルゴリズムや処理の流れを時系列で把握するシーケンス図を描くことで、プログラムのそれぞれの役割と流れを把握できます。
後日注記:クラスの設計について参考になるのはやはり「Effective C++ 第3版」ではないでしょうか。あるいは、C++やJavaのクラス設計では「クラス継承をどのように使うか(親クラスとサブクラスの関係をどうするか)」ということが鍵になってきます。デザインパターンについても参照してください。
また、プリンの喩えだけではなく、プログラミングは料理に喩えられることが一番多いです。
プログラムを書くことは、料理の手順やレシピを書く作業と似ています。「まずこれをして、次にこれをして、最後にこれをしなさい」ということを、ただプログラミング言語で表現するだけにすぎません。
プログラムを書く時は、料理の完成図、すなわち動いているプログラムとその実行結果を想像しながら、その完成図を作り上げるために必要な手順を書いていきましょう。最終的にできたプログラムは、料理と同じで、食べること、すなわち実行して使うことができます。
後日注記:実際のところ、いきなりコードを見て分かるわけがなく、ドキュメントをどれだけ理解できるか、それをコードとともにどれだけ照らし合わせることができるかで、開発者になれるかどうかが決まってきます。
プログラムの基本として、「ひとつの変数と計算手順でたくさんの場合に対応できる」というのがあります。
プログラムは、ルーチンです。ひとつのルーチンで、変数や計算手順をたくさんの場合に対応できるように書いてしまえば、プログラムが動く時にどんな変数の値をその変数の中に入れても、同じ計算手順で計算できるのです。
これは、単純なコマンドプログラムだけでなく、GUIのウィンドウシステムなどでも同じで、どんなフォームの内容がウィンドウシステムに送られても、全ての場合に対応して自動的に計算できるのです。
変数には、値を入れる時の値の種類である「型」が決まっていて、間違った種類の値を変数に代入するとエラーになります。
このように、プログラムとは、変数やルーチンにどんな値を入れても「全ての場合に対応できる」、そのようなルーチンであると言うことが言えます。関数を作る時も、できるだけ汎用的に、どんな場合にも対応できるような関数を記述することが、良いプログラマであると言えるでしょう。
また、データはプログラムを書いている最中には未知であることもあります。どんなデータが入るかは、実行してみなければ分かりません。事前にどんなデータが入ってもいいように設計することで、プログラムが未知の使われ方で実行されても、それを想定して書くようにしなければ、バグが入ってしまうでしょう。未知の使われ方を想定することが、プログラミングの難しい点です。
また、プログラミングの基本として、同じ処理の実行の場合を考える、というのがあります。
たとえば、同じキーワードが3回出たら出力を表示するプログラムを考えるとします。これは、反復処理の中で、変数にキーワードの回数をカウントし、そのカウントが3以上になったら出力を表示するようにして作ります。
この時、同じ処理の中でも、「変数の中身が3以上になっていないか」を反復処理の中で常にチェックする必要があります。
プログラミングは、こうした「特殊な数学的知性」を必要とします。慣れるまではすぐに動くものを作ることは難しいかもしれませんが、フローチャートを書いたり、何度もプログラムを実行したりして、格闘する必要があります。
こういう時にgdbなどのデバッガを使うことで、ブレークポイントを設定したり、変数の値に今何が入っているかを反復処理などの中でプログラムを何度も停止させて確認することができます。
変数の値をカウントする以外にも、たとえばデータベースの要素を表示する際にも、ループしながら変数に毎回値を代入し、その値を適切にHTMLとして表示するようなプログラムはよく書きます。こういう時も、「どんなループ変数が来ても対応できる」ように、同じ処理の実行の場合を考えることで、PHPとSQLのプログラムを書くことになります。
また、プログラムを実装する上で鍵となるのが、「プログラムを実行する順番」です。
ただ単に命令を並べて書いた時にも、プログラムには実行する順番があります。この場合、上から下へとまっすぐにプログラムは実行されます。
if文やfor文、またはgotoやサブルーチンなどを使った時には、プログラムは単に上から下へと順番に実行されるのではなく、条件に応じて「分岐や反復」をします。
このように、プログラムが実行される順番は必ずしも上から下ではありません。さまざまな条件に応じて、プログラム全体の中を縦横無尽に移動するのです。
プログラムのコードを見て、プログラムが実行される順番が分かってしまえば、大規模なプログラムでも開発に参加できるようになります。
僕は、このホームぺージに、多くのプログラミング言語の概要的な知識を書きましたが、この内容を読んだ後で、追加で本を読むことはそんなに必要ではありません。
なぜなら、プログラミング学習者は、言語の本を読むよりも、実際のプログラムのコードを読むべきだからです。
僕が読んだのと同じ本を読めば、確かに素晴らしい技術の専門知識は身につくでしょう。ですが、それだけではプログラミングをすることはできません。
必要なのは本ではなく、実際のプログラムのコードを読み、そして書くことです。
オープンソースソフトウェアの利点は、ソースコードが公開されていることです。たとえばGitHubのようなソースコードリポジトリサイトを見れば、多くのプログラムのコードが公開されています。ライセンスに注意する必要はありますが、ソースコードを見て学ぶだけでも、スキルアップに大幅に繋がります。
そして、実際に書くことが重要です。僕はここまで文章を書いても、実際のソースコードがまるで書けていません。ですが、コンパイラやインタープリタなどの言語処理系ソフトウェアは、「書いたプログラムを動かすため」に存在します。正しく、論理的に記述したプログラムはその通り正しく動きます。
なので、実際のプログラムのソースコードを読み、そして自ら論理的に正しくプログラムロジックの実現方法を考えて、書いたり編集したりするような努力こそ、まず第一にすべきことです。なので、僕のこの文章を読んだ後は、実際にそうしたコードを読み書きしてください。そうすればおそらく、一流のハッカー並みのスキルを得ることができるでしょう。
TRON開発者の坂村健さんによる「痛快! コンピュータ学」によれば、プログラムにはどのプログラムであっても同じような特徴があります。
それは、「入力に対して処理をした上で出力する」ということです。
どのようなプログラムであっても、まずデータを入力し、その入力に対して処理を行い、その結果を出力する、という類型パターンがあります。
同時に、情報の処理については、「加工」と「検索・蓄積」と「通信」という3種類の情報処理があります。
詳しくは、上記坂村健さんによる書籍を読んでください。坂村健さんはきちんと正しく、そして面白く、「情報処理とは何か」ということを教えてくれます。
2023.02.16
プログラミングを学ぶなら、英語を勉強しましょう。
「なぜ、プログラミングに英語が関係あるの?」と、人々は思うかもしれません。
ですが、英語という言語の文法は、プログラミングと非常によく似通っています。
たとえば、疑問文を作るために、英語では「Are you ~?」とか「Is it ~?」といった文の中に、さまざまな単語の説明や文を入れ込みますが、これは僕はプログラミングでいう「変数への代入」や「条件式の比較」に非常に近いと思います。
僕が思うに、日本人がソフトウェアが苦手なのは、英語を母語としないからです。
英文法の中には、プログラミングを学ぶ上で必要な「考え方」や「センス」が非常にたくさんつまっていると僕は思います。
英語を学ぶ上で、おすすめの参考書は「Σベスト EARNEST 英文法・語法」です。この参考書には、これでもかというぐらい英文法のことが極めてきちんと正しく書かれています。C++の本を読むよりも難しいかもしれませんが、きちんと読むとひとつの章はすぐに読み終えられます。
僕もまだこの本の最初の一章しか読めていませんが、英会話教室に通っている経験があるために、書かれていることの意味がきちんと分かります。
プログラミングを学ぶすべての人に、英会話の勉強をおすすめします。
2023.05.29
結局、プログラミングの基本は「関数を書くこと」です。
設計とは関数をどのように用意するかの設計図を決めるということであり、実装とは関数をどのようにコードとして記述して動作させるかということです。
クラスとは、必要な関数を共通のデータでひとくくりにしてまとめることです。
たとえば、ペイントソフトなら、ウィンドウ画面を表示する関数、画面に描画する関数、画面に描画されている要素のデータを保持する関数、データを書き換える関数、ユーザーのイベントに応答する関数、データをファイルに読み書きする関数が必要であり、それらの関数定義とそれらに必要なデータ変数をそれら全体からアクセスできるようにペイントソフトクラスのメンバにします。
あるいは、これらの関数をすべて独立したクラスとし、データもデータ専用のクラスに分割して、それぞれがメッセージをやり取りする形でも、プログラムを作ることができます。
そのようにすることで、簡単なペイントソフトを作ることができます。
プログラミングとは関数を書くことです。関数を書くことができる人間は、プログラミングで普通できることをなんでも書くことができます。
2023.09.07
プログラミングのためにもっとも必要なスキルがあるとしたら、それは「数の計算」です。
小学校で算数の計算ができて、中学校で変数や文字式、関数や累乗・平方根、等式と不等式が分かる程度の「数の計算」のスキルがなければ、プログラミングを行うことはできません。
逆に言えば、小中学校程度の知識があれば、プログラミングは誰でもできます。
特に、子供はテレビゲームが大好きですが、テレビゲームで難しいゲームをたくさんクリアしたことのある中学生ぐらいの知性ある子供なら、プログラミングは簡単にできるでしょう。
だから、中学生のプログラマは、ツイッターなどでもたまにいます。中学生レベルの数の計算のスキルがあれば、プログラミングは誰でもできます。
2023.09.09
結局、僕のこのホームページを、「何も分からない無能が作ったハリボテ」であると断じるのは簡単です。
僕は正直言って、プログラミングのスキルはありません。どんなにプログラミングを学んでも、勉強するだけで、実際に開発することができていません。
ですが、「学び続ければ夢は叶う」と僕は信じています。
このホームページを、「でっち上げ」だと思うのも、「勉強し続ければ夢は叶う」と思うのも、僕の自由です。そして、夢はどんなに遠くても諦める必要はありません。
僕には、Linuxのハッカーになるという夢があります。Linuxカーネルを開発できるようになるために、夢を追いかける僕はまだ勉強を続けます。
諦めなければ奇跡は起こると、僕は信じています。
そのようなことが分かったのは、703号室という歌手の「青星」を聴いたからです。
僕は夢を諦めません。この学習の先にあるのは、僕が夢見たLinuxのスーパーハッカーです。
なので、あなたもまた、夢を諦めず、学び続ける気持ちを持ち続けてください。諦めずに学び続ければ、必ずいつか夢は叶うでしょう。その「プログラミングを学びたい」という夢を忘れないでください。諦めなければ奇跡は必ず起きます。
2023.09.11