私が示した方法が可能な限り最良であることを決して断言しません。 さらに、彼が一般的に正しいかどうかはまったくわかりません。 おそらく、私の最初の言語がCではなく、一部の関数型言語またはアセンブラーであった場合、私の意見は異なり、私の人生は完全に異なっていたでしょう。 したがって、以下のすべての資料を健全な懐疑心を持って取り上げてください。
個人的な思い出
子供の頃から生物学のキャリアを夢見ていましたが、13歳のときに学校でコンピューターを初めて知ったので、クールなハッカーになることにしました。 15歳のときにコンピュータに定期的にアクセスできたとき、最初に考えたのはプログラミングを勉強することでした。 私の選択はC ++にあり、「For Dummies」シリーズから本を買いましたが、すべてがひどく退屈で、理解できず、面白くありませんでした。 それでも、C ++に何か問題があることに気付きました。 そして、本の資料のプレゼンテーションのまさにコースは、機能への短い遠足から始まり、その後すぐにクラスに行き、すべては実例ではなく、グローバルな抽象化のレベルで説明されました。 著者たちは、OOPの素晴らしい世界について熱意を持って語りました。私たちは幸運にも生きており、さまざまな機能を備えた車やさまざまな行動を備えた動物について話しています。 一般的に、当時、C ++の研究とOOPの概念自体は放棄されていました。
数年後、大学で勉強しているときに、キオスクでブライアン・カーニガンとデニス・リッチーによる「C Programming Language」という小さな本を見ました。 それを買ってすぐに読み始めました。 そして見よ! すべてが明確で、簡単で、非常に興味深いものでした。 C言語は非常に小さく、シンプルでエレガントです(私はまだそう思います)。本自体は通常の人間の言語で書かれましたが、厳密ではありませんでした。 何度も読み直し、演習を行ったため、すぐにこの言語と標準の関数ライブラリを習得しました。
しかし、純粋なCではあまり書くことはできませんが、美しいグラフィックで本格的なプログラムを書きたかったのです。 Slackware Linuxでプログラミングしたのは、プログラミング環境としてのWindowsでは完全に失望したからです。 当時、私はQNXやNetBSDを含むさまざまなシステムで多くの実験を行いました。 しかし、無料のUnixシステムでは、健全なグラフィックライブラリの選択は小さく、 GTK +とQtでした。 さらに、2番目はC ++で書かれていたので、これとはやりたくありませんでした。1番目は動作方法がまったく明確ではありませんでした。 また、メモリが適切に機能する場合、インターフェイスエディタは、リソースファイルではなく、プログラムに挿入する必要がある巨大なコードを生成しました。
そのため、最近Intelプロセッサに移植されたMac OS Xに偶然出会わなければ、私はキャリアを始めませんでした。 友達にMac OS X 10.5 Leopardドライブを頼んだ後、HackBookにインストールして、Promised Landで初めて感じました。
初めて失敗したことを念頭に置いて、私は長い間オブジェクト指向プログラミングに懐疑的でした。 最初は、 Carbonライブラリを使用して純粋なCでプログラムを作成することさえ計画していました。 そして、判明したように-無駄に。 オブジェクト指向プログラミングとObjective-C言語のNeXTの公式管理を通じてObjective-Cを学びました。 当時、新しい言語の学習者はまだバカや学童とは見なされていなかったため、本は通常の言語で書かれており、著者はCの知識とプログラミングの一般的な理解を前提としています。 OOPは簡単で、面白く、非常に便利であり、オブジェクトは抽象エンティティではなく、関数と組み合わせた構造であることがわかりました。 私の意見では、これはまさにオブジェクト指向プログラミングの基礎を伝えるために必要なものです。
XcodeとMac OS Xの基本で、 Alexei Boreskovの素晴らしい教訓を見つけました。 その後、彼はすぐにMac Developer Libraryに飛び込み、 Cocoaやその他のライブラリの公式マニュアルの研究を始め、プログラムを書き始めました。
私の最初の主要なプロジェクトは、OpenGLのレッスンをWindowsからMac OS Xに移植することで、1年続きました。 私はそれを終えるとすぐに、通常の有給の仕事に就くのに十分な自信を感じました。
Objective-Cを学習すると、Smalltalkのことを聞かずにはいられません。これは、Objective-Cの資料で頻繁に言及されているためです。 しかし、Smalltalkはとらえどころのないジョーのように見えた-誰もがそれについて聞いたが、それを見た人や使った人はほとんどいなかった。 結局、ロシアの土地はどこから来たのだろうと思いました。
SmalltalkソリューションのリーダーであるCincomが広告目的での非営利的な使用のためのツールを提供していることを知った後、私はすぐにそれらを注文しました。 数週間も経たないうちに、宅配便業者がドアをノックして、数枚のCDと公式ガイドが入った会社の箱を渡してくれました。 配送料が支払わなくても、すべてが完全に無料でした。 ディスクの1つで、 VisualWorksが発見されました。これは、世界で最も強力で最速の商用Smalltalk開発環境の1つです。
その後、 Squeak (Smalltalk-80のオリジナルバージョンに基づく無料のSmalltalk実装)について学び、その開発者の多くに会いました。 トレーニングと研究には、他のバージョンよりもはるかに適しています。 ところで、Smalltalkプログラミングコミュニティはとてもフレンドリーです。
Objective-CはAppleエコシステムの外部にほとんど配布されていないため、ほとんどすべての深刻なプロジェクトはクロスプラットフォームであり、そのコアはC ++で記述されています。 主に便利な開発ツールがないためです。 ( LLVMのおかげで状況がすぐに改善することを期待しましょう。)だから私はC ++を学ぶ必要がありました。 幸いなことに、この時までに、私はすでに穀物をもみ殻から分離することを学んでいた。
しかし、私はハッカーになりませんでした。
言語学習の順序
Cは第一言語です
これは小さい言語( C89では32個のキーワード、 C99では 37個の単語、 C11 では 44個の単語)であり、最初の学習にはあまり時間がかかりません。 同時に、Cは非常に強力な産業用言語です。 これは主に、システムプログラミング、オペレーティングシステムのハードウェアに依存しないコンポーネントの作成、コンパイラおよび言語変換プログラム、ライブラリ、マイクロコントローラプログラミングで使用されます。 TIOBEプログラミングコミュニティインデックスによると、 Cは依然として使用のリーダーであり、Javaのリードを丁寧に失うこともあります。
/* Hello world in C */ #include <stdio.h> #include <stdlib.h> int main(void) { printf("Hello World!\n"); return EXIT_SUCCESS; }
Objective-C –
. , Objective-C. - : . – Apple.
/* Hello world in Objective C */ #import <Foundation/Foundation.h> int main (int argc, const char *argv[]) { NSAutoreleasePool *pool = [NSAutoreleasePool new]; NSLog (@"Hello, World!\n"); [pool drain]; return 0; }
Smalltalk –
Objective-C . , Objective-C. - . , , , , . , , . , (Kapital – JPMorgan), (CIM Texas Instruments), (IRIS-2 Orient Overseas Container Lines), (Desjardins General Insurance Group) .
"Hello world in Smalltalk" Transcript show: 'Hello World!'; cr.
, , . .
C++
( 100), , . , , . C++ , , - - . , Objective-C Smalltalk , C++ . . , «» C++ , , , , Objective-C Java . : . C++ I/O Kit – Mac OS X.
// Hello world in C++ #include <iostream> int main() { std::cout << "Hello World!\n"; return 0; }
Assembler
, , , . (, Demo ). , , , .
# Hello World in GNU Assembler on Mac OS X 10.8 using System V AMD64 ABI calling convention .data _hello: .asciz "Hello world!\n" .text .globl _main _main: subq $8, %rsp movb $0, %al leaq _hello(%rip), %rdi call _printf movq $0, %rdi call _exit
JavaScript
, . – web . . web , JavaScript – . : , -, . JavaScript , C- , . JavaScript , .
// Hello world in JavaScript document.write("Hello World!");
Ada
, . . , Ada . (, , , ), . , C++.
-- Hello world in Ada with Ada.Text_IO; use Ada.Text_IO; procedure Hello is begin Put_Line ("Hello, world!"); end Hello;
Scheme
, . Lisp. . , ( ) . .
;; Hello world in Scheme (begin (display "Hello, World!") (newline))
, .
, , Shell, Perl, JavaScript Scheme. . , , , .
, , , . , , . , , C C++ , , . , , , .
, . .
, , ( ) C, , .
- . . , . . , . , , , , - . , , , «» , .
, C – CoreFoundation Mac OS X.
?
. :
-, . « » « 21 ». , , App Store ( , ). -, ANSI/ISO . , -, , .
, , . , , . , , – . .
– , – , , , , «. », , , , (Introduction to Algorithms by Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest and Clifford Stein). . , .
– . , , , . .
. . , , , , . , . – , .
, – , Fortran ( ) Fortran. , , , , . .
, , . stackexchange.com .
– . , . ( ), screensaver, . , : ( ) .
. . , , , . , , . . , , , , . , . .