それ以来、私はコンピューターが非常にインテリジェントであると信じていました。または、少なくともコンピューターをインテリジェントに見せることができると信じていました。
41 に答える
70 年代後半または 80 年代前半にコンピューターに出会った私たちの多くにとって、最初に見たプログラムは次のようなものでした。
10 PRINT "Commodore sucks! "
20 GOTO 10
(「Commodore」は「Apple」、「Atari」または「TRS-80」に置き換えることができます)。
GOTOはすごい。
回答#2 :)
最初に私を本当に魅了した実際の言語構成は再帰でした。問題
数値の桁を合計するSumDigitsという名前の関数を記述します。例:SumDigits(1234)-> 10
最初、私は非常に長い反復ソリューションを作成しました。しかし、しばらくして私はこの答えを思いついた。
string SumDigits(int value) {
if ( value > 10 ) {
return SumDigits(value/10) + (value%10);
}
return value;
}
答えの簡潔さは私を驚かせました、そして私はすぐに再帰と簡潔なプログラミングの新しい愛を見つけました。
再帰の悪を学ぶのに数週間しかかかりませんでした:)
コンピューターを私に従わせること。素晴らしい。
また、私が間違っていてもコンピューターが従うのが大好きです (嫌いが大好きです)。
しかし、真剣に人々。
私が夢中になったのは:
- コードでリッチでダイナミックなことを実行できることがわかりました。
- マシンが一般的に一貫していること。
- そのプログラミングは、そこにあるすべての「依存する」という意味で、数学のようなものです.
- 単純なタスクをロジックとループで自動化できること。
QBasicで始まったので、それは何かに沿っていたと思います:
INPUT "What's your name?", a$
PRINT "Hi, "; a$; "!"
で画面に何かを表示できるとPRINT
いうだけで、プログラミングに夢中になりました。双方向性を使用INPUT
すると、ケーキのアイシングができました!
私が最初に書いたFortranコードにはifステートメントが含まれており、当時私が見た中で最も魅力的なものの1つでした。このようなもの
integer n
n = 1
20 if (n .le. 100) then
n = 2*n
write (*,*) n
goto 20
endif
ポインター。
Turbo Pascal でプログラミングを始めたとき、彼らがどのようにして大きなプログラムを作成するのか、まったく理解できませんでした。メモリには限りがあり、何をしようとしてもスタックの制限に達することがよくありました。
ついにポインターを紹介されたとき、私はついに夢中になりました。大きなものを作ったわけではありませんが... :)
私が QBASIC でプログラミングを学び始めたとき、if ステートメントとループを使用したフロー制御の全体的なアイデアは素晴らしかったです。最初の「Choose your own adventure」ゲームを作成したのは、if ステートメントについて知ってからわずか数日だったと思います。振り返ってみると、コードの行数に関しては恐ろしく非効率的で大規模だったに違いありませんが、if ステートメントだけを使用してストーリーを分岐できたという事実は素晴らしかったです。
?"こんにちは世界"
私の最初のBASIC本(私が信じる子供のためのBASIC)から:
10 INPUT A
20 INPUT B
30 LET C = A + B
40 PRINT C
それが本の表紙にあり、その可能性にワクワクしていました(宿題ができました!)...そのシンプルなコンセプトを理解するのに数週間かかりましたが、それを手に入れたら、プログラミングは私に開かれました。
最も間違いなくFORループ-6歳のとき、そのlil'LOGO Turtleを線の描画から正方形の描画、円の描画に移行させるだけで、ユーザーからプログラマーに変身しました。
コメントを見つけてから、プログラミング言語が本当に好きになりました。あなたはそれであらゆる種類のことをすることができます
// a commment!
int /* whoa, an inline comment! */ a;
;)
クリアケース、ループ。具体的には Gwbasic でのループ。楽しみのために、0 から 100 までのすべての数字を画面に出力したかったのです。だから私は始めました:
10 print 1
20 print 2
30 print 3
40 print 4
ある時点で、WTF かそれに類するものだと思いました。もっと良い方法があるはずです。そこで、変数とloopの魔法を紹介してくれた誰か (おそらく教師か仲間の生徒) に尋ねました。夢中になった瞬間だったに違いない。
10 SET i = 0
20 IF i > 100 THEN GOTO 60
30 PRINT i
40 SET I = I + 1
50 GOTO 20
60 REM END LOOP
100行ではなく6行です!!! それはとても良かったです。構文が正しくない場合は申し訳ありません。:-) 私はその瞬間が本当に好きです。
For Loops + Arrays は私のためにそれをしました。任意の大規模な一連のものをループして、それぞれに何かを実行できることに気付いたとき、すべてがまとまり始めました。
私にとって、それは特定の構文ではなく、ZX Spectrum ゲームを壊して変更できることを発見したことでした。ソース コードを発見したことが私を夢中にさせたのだと思います。
その後、実際にプログラミングを始めて、本からコードをコピーしていたとき、本の内容をカスタマイズして、プログラムを引き続き機能させることができました。
ラムダ式
私の人生のほぼすべてをプログラミングしてきましたが、今でも Lamdba 式のような新しいことに興奮しています。
MyList.Any(p => p.IsCurrent)
うーん.. 大好きです。
私が最初に学んでいたとき、私は確かに配列だと思います。それ以前は、単一変数の観点から考えていました。配列について学んだとき、qbasic でもっと多くのことができるようになりました :)。
これで、配列だけでなく、あらゆる種類のデータ構造が利用可能になりました:)
分子動力学シミュレーションで使用でき、一度に 1 つずつ計算を手動で行う必要がないため、for または while ループ
DBase IIでレコードをテキストファイルに印刷し、正確に正しい植字コードを必要な場所に貼り付けることができたとき、つまり、レコードの前、中、後ろ、周りに。首の後ろの寒さは今でも感じられます。私の小さなコンピューターで、植字システム全体がすごい!300ボーのモデムをウォームアップし、このファイルを8インチのディスクに直接送信して、Compugraphicで実行します。すべての文字が適切な場所にある、美しく光沢のある写真タイプの紙のヤード。私はこの幸せに値しない...
私のは基本的に後藤でした。プログラムを好きな場所にジャンプさせることができたのは素晴らしいことだと思いました。後になってようやく、大きな力には大きな責任が伴うことに気づきました。
私はプログラミングを始めて約 1 年なので、それは LINQ でした。クエリ文字列を DB に公開する本のコードを見て、「うわー、それはちょっとダメだな」と思いました。私はLINQに出会い、それ以来幸せな結婚生活を送っています.
C の関数ポインター。
最初に C を学びましたが、関数ポインターは学びませんでした。
その後、大学で一学期ほどアセンブラでプログラミングを始めました。私は関数ポインタについても知らずに使用していました。どういうわけか、それらは私にとってアセンブラーでは自然なことのように思えます。彼らはそれらを理解していなかったので、私はそれらを私の先生に数回説明しなければなりませんでした:)。
その後、私は C に戻り、啓示が私を襲いました。
今では、Java メソッド、ジェネリック、後期ポリモーフィズムなどの「魔法の」ことを笑い飛ばしています。
私にとってはポインターでした。
ポインターを完全に理解しているふりをするつもりはありませんが、プログラミングに本当に行き詰まったのはこれが初めてでした。Visual Basic 6 とサーバーサイド スクリプト言語をいじくり回した後、C に移行し、最低限の基本事項を取り上げ、ポインタに出会いました。
その講義の間、ポインターに対する人々の反応を思い出すことができます。自称プログラミングの神々は恐怖に怯え、ほとんど何も知らなかった人々が地方紙の求人広告を読み始めました。実際、私のクラスの一人の女の子が「えっ?」と言っていたのを覚えています。
多くのプログラマーは、ポインターにヒットしたときにウェイクアップ コールを受け取ります。プログラミングの世界は、コンピューティングの世界を紹介したばかりで、実際に会ったばかりの場合は、話すことはほとんどありません。
PRINT 3 + 4
コンピューターは7と言いました。そして、これはすべて私の両親のテレビで見られました。テレビで!!! 想像できますか?私はすぐに夢中になりました。機械に何をすべきかを伝えることができ、テレビで見ることができました。わお。
背景: 私の父の雇用主は、エンジニアがこの技術に触れるために小さなコンピューター (Robotron KC 85/1) を購入しました。週末に家に持ち帰って遊ぶことができます。それで私の父がそれを家に持ち帰り、彼がそれについて初めて知ったのは、それを接続する方法とそれをオンにする方法だけでした。彼の同僚の 1 人が、「PRINT」コマンドと数字の足し算のコツを彼に教えてくれました。彼は私に見せてくれて、私は夢中になりました。これは 1986 年のことで、私が 12 歳のときでした。私は今でも基本的に同じ理由で夢中になっています (マシンに何をすべきかを伝えるため)。
私が本当に魅了された最初のコンピューターの問題を覚えています。高校のプログラミングの授業で出た問題です。
コンソールから数値を読み取るプログラムを作成する
なぜそれが私を魅了したのですか?まあ、最初はそうではありませんでした。私はその行為を行う簡単で汚いプログラムを書きましたが、その後、教師はまったく予期しないことをしました。彼女はプログラムに「a」を入力し、恐ろしい死を遂げました。
悪意のある入力に対処するのに残りの 1 日を要しましたが、最終的には機能するようになりました。このプロセスは、プログラムの正しさという考え方に私を完全に夢中にさせました。
IF後藤。
冗談抜き。ポインタを持つような言語を手に入れるずっと前に、私は夢中になりました。
その時点までに、配列インデックスを使用してポインターのようなアルゴリズムを既に作成していました。
qBasic、私が 10 歳から 12 歳の頃、「医者が変な質問をする」ゲームのコピーを作り始めました。これは、多くの厄介な質問になりました。その時、私はコンピューターで仕事をしたいと思ったのです。
数年後、私は HTML と PHP をいじり始め、何人かの顧客を獲得し、会社を始めました。そのとき、私はこれで大金持ちになれることを知りました :)
私がプログラミングに夢中になったのは、次の x86 アセンブラーの行でした。
mov ax, 13h
int 10h
mov ax, 0a000h
mov es, ax
ビデオメモリをいじって絵を描くのがいかに簡単かを知ったとき、私が学んだ他のすべてのことは突然何かに役立ちました.
私の最初のプログラム(noob PHPを除く)は、任天堂GBAのRPGに向けて構築されたものだったと思います。ビットとバイトを操作して素晴らしいゲームにする方法が気に入りました。ニンテンドーDSがリリースされたとき、自作コンパイル用にリバースエンジニアリングされていなかっただけでなく、開発要件が大幅に増加したため、興味を失いました。
それは私を「引っ掛ける」ことはしませんでしたが、<< "Hello World!" << endl; かなり素晴らしかった。でも、誰もがコンソールを使う方法がわからなかったので、win32UIに直行しました(笑)。大人になるまですぐに興味を失いました。良い時代。
POKE 53280,5
C-64の画面の境界線を紫色に変更します。それをforループに入れて、色を0から15にループさせると、子供たちはプログラミングにワクワクします。ええと、少なくとも80年代後半/ 90年代前半、つまり。
これは言語構成ではありませんが、プログラムからDOSに戻った後でも、TextAttr(テキストの色、Pascal)を変更した場合の効果が残ることを発見したとき、私は魅了されました。
QBASICにはコマンドPLOTがあり、画面にスパイラルを描くプログラムを最初に書いたとき、達成感がありました。そして、それは私がコンピューターが素晴らしいことをすることができることを理解したときだったと思います、そして私は次の数十年の間それらに固執しました。
(懐かしさ。黒い画面のライムグリーンのスパイラルを今でも覚えています...)
BASIC での構造化プログラミングの始まり...
GOSUB 1000
DOS割り込み
INT 21h
TRS-80 グラフィックス
POKE 15360, 191
QBasic を始めたのは 7 ~ 8 歳 (1992 ~ 93 年) の頃です。友人 (同い年) が、彼ができる素晴らしいグラフィック プログラムを見せてくれました。私はよく「代わりに…を…にしてくれませんか?」などと尋ねましたが、彼はできました!
私が今でも覚えているプログラムの 1 つは、画面を満たす液体に似たもので、最初は大きくて太い円がいくつか含まれていました。左から右へ、また後ろへとスキャンし、壁にぶつかり、どこかに引っかかると爆発 (!) します。
絶対にwhile
!しかし、私のプログラミング経験はごく最近です。
プログラミング構造として機能します。問題がどれほど大きくても、一連の関数への適切な呼び出しに分解できました。1 つの関数で解決すべき問題が大きすぎる場合は、それを分解することもできます (当時はそれをリファクタリングとは呼びませんでした)。遅かれ早かれ、関数を完成させれば何でも解決できると思いました。
より一般的に言えば、チーム、部門、ビジネス、さらには業界全体がどのように機能するかを決定するプロセスを作成できることに気付いたとき、私は開発に夢中になりました。そして、私は彼らがより良く、より速く仕事をするのを助けることができた.
言葉に影響を与えた
BASIC初級者すべての目的記号的な命令コード_ _
if ステートメントは別として(Pascal から最初に学んだ [最初に学んだ言語])。C のポインターと配列の間の1 対 1 対応は、私がプログラミングに夢中になった理由です。効率的なメモリ トラバーサル、スタック、配列の特定の部分 (スライス) を関数に渡す、メモリ マップド IO (VGA アドレスなど) へのポインターを処理するなど、コンピューターの能力を非常に高いレベルで理解することができます。配列として。Pascal では、ポインタは非常に不透明であるため、プログラマはコンピュータのメモリとその能力を理解することが非常に困難です。
高校で++が魅力的であることがわかりました。
他の誰もが Basic や Pascal などを知っていましたが、i++ はコードでした。そして、私だけが知っていたコード!
そして、そのような小さな変更が非常に重要な影響を与える可能性があります。++i は、多くの重要な点で i++ とは異なります。そして ++ は、マシンコードに至るまで直接変換します。これを学んだことで、MACHINE の CORE に直接アクセスできるようになりました。力を想像してみてください!
これを知って、C 言語の他のすべての奇妙な操作とコーナーを学びたいと思いました。
私は基本的なことから始めましたが、本当に私を驚かせたのは、「仮想ペン」(タートルと呼ばれる) をプログラムして画面に何かを描画できるようにする言語である LOGO でした。私は非常に複雑な形を描き始めましたが、若い年齢を考えると、私は完全に関与していました.