プログラマーになることは、日々、毎年、スキルを積み重ねていくプロセスであり、プログラミングは(精神的、霊的、経済的に)楽しく、やりがいのあるものです。このガイドは、プログラマーになるための魔法のような簡単な方法を約束するものではなく、ステップの順序も神聖なものではありませんが、現代のプログラミング分野の一つでプログラマーになるための一般的な概要を得ることができます。
Webプログラミング
-
Webプログラミングの内容を知る。 Webアプリケーションは、インターネットアーキテクチャの上で動作するように設計されたソフトウェアコンポーネントです。つまり、アプリケーションはFirefoxやInternet Explorerなどのウェブブラウザソフトウェアを通してアクセスされます。インターネット・アーキテクチャの上に構築されるということは、必ずしもインターネットへのアクティブな接続を必要とするわけではありません。つまり、ウェブアプリケーションは、以下のような標準的なウェブテクノロジーの上に構築されているということです:
-
多くの多様なウェブサイトを見て、それらが通常どのように見えるかを学ぶ。(右クリックし、ソースの表示をクリックするか、F12キーを押します。) 訪問したウェブサイトの量ではなく、ウェブサイトのタイプ/コンテンツに多様性を探します。一般的に、以下のタイプのウェブサイトをそれぞれ少なくとも1つは訪問する必要があります:
- 企業プレゼンスサイト(営利企業、非営利企業/団体、政府機関)
- ウェブ索引エンジン(検索エンジン、メタ検索サイト、専門検索エンジン、ディレクトリ)
- データ・マイニング・サイト
- 個人サイト
- 情報ページ(Wiki、データシート、技術仕様書、マニュアル一覧ディレクトリ、ブログ・ジャーナル、ニュース・通信社サイト、イエローページなど)
- ソーシャルサイト(ソーシャルポータル、ブックマークサイト、メモサイト)
- コラボレーションサイト(ウィキやブログなど、上記の他のカテゴリーも含まれます)
-
少なくとも1つのテクニック/方法と、その方法を実行するためのソフトウェアを学ぶ。例:ブレーンストーミング・ダイアグラムやMS Visioなど。
-
ウェブサイトの構造化に慣れる。 これは、概念的なウェブダイアグラム、サイトマップ、ナビゲーション構造を作成することです。
-
グラフィック・デザインの講習を受ける。少なくとも1つのグラフィック編集・操作ソフトを習得すること(オプションですが、強くお勧めします)。
-
インターネットインフラの基礎を学ぶ。これには、以下の基本的な知識を得ることが含まれます:
- 基本的なウェブサービス・プロトコル(HTTP、FTP、SMTP、POP3またはIMAP4)
- ソフトウェア(できれば、主に使用するプラットフォーム用のもの)
- ウェブ閲覧ソフトウェア
- 電子メールサーバーとクライアントソフトウェア
-
HTMLとCSS言語を学びましょう。HTMLを編集するための "What You See Is What You Get (WYSIWYG) "ソフトウェアパッケージも入手しておくとよいでしょう。
-
XSLやXPathなど、XMLとXML関連技術を学ぶ(オプションだが推奨)。
-
.NETに慣れ親しみ、.NETの操作に慣れるまで、簡単な静的ウェブサイトを作成する。
-
クライアントサイドのスクリプト言語を学ぶ。ほとんどのユーザーはJavaScriptを学びます。を学ぶ人もいますが、これはほとんどのブラウザと互換性がありません。
-
学んだクライアント側スクリプト言語に慣れましょう。その言語だけを使って、自分の可能性に挑戦してください。少なくともクライアント側のスクリプト言語に慣れてから次のステップに進みましょう。
-
少なくとも1つのサーバーサイド・プログラミング言語を学びましょう。サーバーソフトを1つに絞るのであれば、そのソフトでサポートされているプログラミング言語を1つ学びましょう。そうでない場合は、各サーバー・ソフトウェアで少なくとも1つのプログラミング言語を学ぶ。
-
サーバー・サイドのプログラミング言語を学び終えたら、自分のためにパイロット・プロジェクトを立ち上げましょう。
-
そして、自分のページ内でオンライン実験を始める。
デスクトップ・アプリケーション・プログラミング
-
デスクトップ・アプリケーション・プログラミングで何をしようとしているのかを知りましょう。 ほとんどのデスクトップ・プログラマーは、ビジネス・ソリューションのコードを書くので、ビジネスやその組織構造、財務構造についてのアイデアを得ることは、大きな意味を持ちます。
-
さまざまなコンピュータ・ハードウェア・アーキテクチャについて学びます。デジタル回路設計の入門レベルのコースと、コンピュータアーキテクチャーの別のコースは有用です。しかし、出発点としては高度だと考える人もいるので、2つか3つのチュートリアル記事(や)を読めば十分かもしれません。最初のプログラミング言語を学んだ後で、このステップに戻ることもできる。
-
入門レベル(子供向け)の.NETを学ぶ。子供」と呼ばれるより年上だからといって、そのような言語を学ぶことを恥ずかしがらないでください。このようなプログラミング言語の例としては、Scratchを挙げることができる。これらのプログラミング言語は、初めてのプログラミング言語を学ぶ際の苦痛を非常に緩和してくれる。ただし、このステップは任意である。前のステップの前に行うこともできる。
-
手続き型プログラミング言語の入門コースを受講する。後にどの言語を選択するにしても、ある程度のレベルで手続き型プログラミングが必要になります。また、手続き型プログラミングは、一般的なプログラミングの考え方を知るための出発点として、ほとんどのプログラマーが最も使いやすいと報告しています。
-
UMLやORMなど、少なくとも1つの高度なモデリング技術を学ぶ。
-
小さなコンソールやコンソールのようなアプリケーションを書き始める。 プログラミング言語の本によく載っている小さな練習問題を利用することができます。そのために、あなたが書いているプログラミング言語でプログラムを書くためのツールを選びましょう。
-
選択したプログラミング言語のより高度なコースを受講する。以下の概念をよく理解し、比較的容易に適用できることを確認してから先に進みましょう:
- プログラムのユーザーに対する情報の入力と出力。
- 手続き型言語におけるプログラムの論理的な流れと実行の流れ。
- 変数の宣言、代入、比較
- if.then.elseやselect/switch.caseなどの分岐プログラミング構文。
- while...do、do...while/until、for...nextなどのループ構文。
- プロシージャや関数の作成と呼び出しのためのプログラミング言語構文。
- データ型とその操作
- ユーザー定義データ型(レコード/構造体/ユニット)とその使用法。
- 関数のオーバーロードをサポートしている言語であれば、それを理解する。
- 選択した言語のメモリアクセス方法(ポインタ、ピーキングなど)
- 演算子のオーバーロードをサポートしている言語であれば、それを理解する。
- デリゲート/関数ポインターをサポートしている言語であれば、それを理解する。
-
学んだ高度なテクニックを応用する。
-
少なくとももう1つ、別のプログラミング・パラダイムの入門コースを受講する。各パラダイムで1つずつプログラミング言語を学ぶことが推奨されており、ほとんどの上級プログラマーがそうしています。しかし、通常はどちらか一方から始めて、しばらくは知識を応用して実践し、プログラミングの実戦経験を積んでからもう一方を学びます。 以下の言語分野のいずれかを試してみてください:
- 論理プログラミング・パラダイム
- 関数型プログラミング・パラダイム。
- オブジェクト指向パラダイム。
-
これまでに学んだ2つのプログラミング言語を比較してみてください。それぞれの長所と短所を評価する。通常、これは次のようにして行います:
- 1つ目のプログラミング言語で初期に作った簡単なサンプルを、2つ目のプログラミング言語を使って書き直す。
- 新しいプロジェクトを作成し、両方の言語を使って実装してみる。プロジェクトや言語の選択によっては、どちらかの言語でプロジェクトを実装できないこともある!
- チートシートやサマリー・テーブルを作成し、2つの言語の類似した構成要素や、それぞれの言語独自の機能を比較する。
- 2つの言語のうち1つの言語特有の機能を、もう1つの言語を使って模倣する方法を見つけてみる。
-
学んだ言語の1つを使って、ビジュアルプログラミングの概念を学ぶ。ほとんどすべてのプログラミング言語には、ビジュアルプログラミングをサポートするバージョン/ライブラリと、コンソールまたはコンソールに似たプログラミングをサポートするバージョン/ライブラリがあります。これは以下の方法で実現できる:
- イベント駆動型プログラミングを学ぶ。ほとんどのビジュアル・プログラミングは、イベントとイベント処理にある程度依存しています(選択したプログラミング言語を使用)。
- できるだけ多くのデスクトップ・ソフトウェアを試して、そのソフトウェアが何をするのかを理解する。ほとんどのソフトウェア開発会社は、ベータテスト版を提供しており、それを使ってソフトウェアをテストすることができます。ユーザー・インターフェースの進歩に関する最新情報を入手する。
- グラフィカル・ユーザー・インターフェースに関する記事やチュートリアルを読んでみましょう。
-
自分の設計した小さなソフトウェア・プロジェクトに、自分の知識を応用してみる。日常生活で直面する問題に、プログラミングの専門知識を応用してみましょう。例えば、ファイル名を一括で変更するプログラム、テキスト・ファイルを視覚的に比較するプログラム、ディレクトリ内のファイル名をメモリ/テキスト・ファイルにコピーするプログラムなどを書いてみましょう。最初はシンプルに。
-
仮想の卒業プロジェクトを作る。これまでに学んだビジュアル・プログラミングのテクニックを応用して、これを最後まで完成させなさい。
-
上級コースを受講したり、細部に注意を払ったり、オンラインリソースからフレームワークのヒントやコツを学んだりして、以前に学んだビジュアルフレームワーク/ライブラリ/パッケージの理解を広げましょう。
-
あなたのプログラミング言語用のビジュアル要素の他のパッケージ/ライブラリを検索し、それらを学ぶ。
-
グラフィック(グラフィックデザインではない)のコースを取る。魅力的なユーザーインターフェイス要素を書きたいプログラマーにとって、とても役に立つでしょう。
-
ゲーム・プログラマーになることを検討する(オプション)。プログラミングは、そのほとんどの部分で、デスクトップ・プログラミングと考えられています。ゲームプログラマーになるつもりなら、これらのステップを終えた後、ゲームプログラミングについてさらに学ぶ必要があります。ゲームプログラマーにはグラフィックコースが必須であり、前のステップで選択した2つ目の言語は論理/関数型プログラミング言語(できればPrologかLisp)であるべきです。
分散アプリケーション・プログラミング
-
分散アプリケーションプログラミングに取り組む。分散アプリケーション・プログラミングは、多くの人が最も習得が難しいものの1つとみなしており、コンピュータや通信技術に関する多様な知識を必要とする。
-
テレフォニーシステムとそのハードウェアのスピード入門を受講する。このステップは任意である。しかし、ネットワーク・トポロジーを理解するのに非常に役立つ。
-
ハブ、スイッチ、ルーターなどのネットワーク・ハードウェア・アーキテクチャやデバイスに慣れる。
-
ネットワーキング・プロトコルとエッセンスのコースを受講する。分散アプリケーションのプログラミングを始める前に、OSI(Open Systems Interconnection)モデル、イーサネット、IP、TCP、UDP、HTTPについてよく理解しておく必要がある。
-
XML言語を学び、それに慣れましょう。
-
シェルスクリプト言語を学ぶことから始める。Windowsベースのプログラミングであれば、Windows Scripting Hostで動作するスクリプトであれば何でもよい。Linuxベースのプログラミングであれば、BashスクリプトとPerlで十分である。どちらのプラットフォームでも、以下の理由からJavaScriptを強く推奨する:
- どのオペレーティング・システムでも、ほとんどすべてのスクリプティング・ホストでサポートされている(Windows Scripting HostはデフォルトでJavaScriptをサポートし、ほとんどのLinuxディストリビューションにはJavaScriptスクリプティング・コンソールをサポートするパッケージがある)。
- 多くの開発者にとって学習しやすいと考えられている。
- JavaScriptはALGOLから派生した構文を持っており、2つ目のプログラミング言語を選択する必要がある場合、より多くの他のプログラミング言語に慣れることができます(、、、J#はすべてALGOLから派生した構文を持っています)。
- JavaScriptを学ぶことで、ウェブページのクライアントサイドスクリプティングに慣れることができます!
-
最初のうちは、スクリプト言語を使った手続き型プログラミングだけを行いましょう。その後、スクリプト言語とその言語がサポートする内容に応じて、より高度なプログラミングテクニックやパラダイムを使うことができます。すべてのスクリプト言語は、ある程度のレベルで手続き型プログラミングの側面を持っています。
-
学んだスクリプト言語を使って、マシン間の通信を行うスクリプトを書く。そのために必要なことを学ぼう。簡単な通信で十分だ。
-
デスクトップ・スクリプト/プログラミング言語に移行する。できれば.NETのようなマルチパラダイム言語がいい。その第二の言語への簡単な入門をする。Javaは、多くのプログラマーが選ぶ言語だと考えている。しかし、この分野ではC#が急速に勢いを増している。JavaとC#が好まれる理由は以下の通りです:
- オブジェクト指向プログラミング言語であり、コンポーネント(特定のタスクを実行し、他のプログラムで使用できる、コンパイル済みのコード単位)をサポートしているため、大規模チームのプログラマーが実装の詳細から解放される。
- OOや手続き型プログラミングだけでなく、イベント駆動型プログラミングもある程度のレベルでサポートしている。
- 言語が構築されるフレームワークは、もともと(Javaの場合)分散型である。
- オープンソース・コードとフレームワーク組み込みパッケージの両方として、Javaを扱う多くの既製パッケージが利用可能である。
-
プログラマーは、言語のコア機能、特にネットワーキングをサポートする機能に重点を置く。出力、ウィンドウのデザインとテクニック、ユーザーインターフェイスの要素などにはあまり注意を払わないこと。
-
分散アプリケーションの設計とアーキテクチャに関するコースを受講する。これは、書籍、オンラインチュートリアル、またはアカデミックコースを使用して行うことができます。ただし、分散アプリケーションのアーキテクチャとその概念を理解することは必要である。
-
選択したプログラミング言語を使って、サービスコンポーネントやサービスの構築について学ぶ。
-
以下の技術を1つ以上学ぶ。少なくとも、これらすべてについて入門することをお勧めします。ほとんどの分散アプリケーションプログラマーは、1つか2つのプログラミング言語に止まらず、各オペレーティングシステムで少なくとも1つのプログラミング言語を学びます。というのも、アプリケーションを「分散」させたいのであれば、少なくとも各主要オペレーティングシステム用のバージョンを提供する必要があるからです。
- 共通オブジェクト・リクエスト・ブローカー・アーキテクチャ(CORBA)
- シンプル・オブジェクト・アクセス・プロトコル(SOAP)
- 非同期JavaScriptおよびXML(AJAX)
- 分散コンポーネント・オブジェクト・モデル(DCOM)
- .NETリモーティング
- XMLウェブサービス
ライブラリ/プラットフォーム/フレームワーク/コア・プログラミング
-
コア・プログラミングとは何かを知る。 コア・プログラマーとは、アプリケーションのプログラミングから、他のプログラマーが使用するコード単位のプログラミングへと移行した上級プログラマーに過ぎない。
-
再利用可能なコンポーネント/パッケージの構築をサポートするプログラミング言語を、まだ学んでいない場合は学ぶ。
-
UMLとORMの上級コースを受講する。ほとんどのライブラリ開発者は、これらのどちらか、または両方を使用しています。
-
.NETのコースを受講する。
-
少なくとも、モジュール型、コンポーネント型、オブジェクト指向、イベント駆動型のプログラミング技法と概念を学びましょう。より多くのプログラミングパラダイムと言語をカバーすればするほど、ライブラリ/パッケージプログラマーとしてより成功することができます。
-
これらのオペレーティング・システムでサポートされているさまざまなプログラミング・フレームワークについて詳しく学びましょう。
-
プラットフォームに依存しないフレームワーク、プログラミング言語、テクノロジーに学習の重点を置きましょう。
-
シンプルですでに確立されたライブラリ、特にオープンソースのものを真似るようにする。これは、ライブラリ/パッケージ・プログラマーになる初期段階において有用である。単位変換や中間的な科学計算パッケージのような簡単なパッケージから始めましょう。もしあなたが大学生であれば、その方程式や科学的コアをライブラリとして実装してみることで、プログラミング以外のコースを活用しましょう。
-
プログラミングの分野でオープンソースのパッケージを検索し、試してみる。まず、そのパッケージのバイナリや実行ファイルをダウンロードする。実際に使ってみて、長所と短所を見つける。それが終わったら、ソースをダウンロードし、どのように作られたかを調べる。それらのライブラリやその一部を再現してみてください。最初はコードを見てから、後にはコードを見る前に、それをやってみよう。後の段階では、それらのライブラリを改良してみる。
-
プログラマーにコンポーネントを配布し、デプロイするために使用されるさまざまなアプローチを学ぶ。
- 通常、ライブラリ/パッケージのプログラマーは、提示されたすべての問題を再帰的および/または反復的に考える傾向がある。それぞれの問題を、より小さな問題の集まり(より単純なタスクの連続)として、あるいは問題のスコープをより小さなスコープに縮小し、それらのスコープを互いに積み重ねるプロセスを繰り返すものとして考えるようにしてください。
- ライブラリ/パッケージ・プログラマーは一般化する傾向がある。つまり、単純な特定の問題が提示されたとき、彼らは通常、より一般的な問題を考え、その一般的な問題を解決しようとする。
システム・プログラミング
-
システム・プログラミングの内容を理解する。 システム・プログラマーは、具体的な実装ではなく、プログラミングの科学を扱います。特定のプラットフォームに縛られないこと。
-
デスクトップ・アプリケーション・プログラマーの最初の3つのステップに従う。
-
線形代数の入門コースを受講する。
-
.NETのコースを取る。
-
論理学や離散数学のコースを取る。
-
さまざまなベアオペレーティングシステムを学ぶ。これは以下の方法で行うことができる:
- オペレーティング・システムがどのようにインストールされるかを知る。
- 1台のPCにさまざまなOSをインストールする方法を学ぶ(任意だが、推奨)。
- 複数のオペレーティングシステムをインストールする。システムには支援パッケージをインストールせず、オペレーティングシステムが提供する素の機能を使う。
-
コンピュータハードウェアアーキテクチャの講義を受ける(あるいは本を読む)。
-
さまざまなコンピュータ・ハードウェア・プラットフォームについて理解を深める。
-
選択したハードウェア・プラットフォーム/オペレーティング・システムの入門的な知識を身につけましょう。後に、他のプラットフォーム/システムのアセンブリを学ぶことになります。
-
ANSI CおよびC++言語を、手続き型プログラミングの概念とともに学ぶ。
-
オンラインリソース、書籍、コースを検索し、特定のプラットフォームのCフレーバーを理解する。
-
CとC++で高度なコードを作成する練習をする。
-
より高度なアセンブリを学ぶ。
-
オペレーティング・システム設計のコースを受講する。
-
特定のプラットフォームのドキュメントを探して読む。 Unixベースのオペレーティング・システムを選ぶと、より簡単です。後で扱うシステムをよく理解する。
-
習得した知識を実践しましょう。まず、小さなシステムユーティリティを作りましょう。通常、これは便利です:
- あなたのシステムにすでにある小さなツールを再現してみる。
- 他のオペレーティングシステムで利用可能なユーティリティをあなたのシステムに移植してみる。
-
最も役に立つ順序で言語を学ぶ。 最初のプログラミング言語が重要なのはここだけだ。C++でもC#でもJavaでもDでもなく、まずANSI Cを学ぶ。
- 最初の言語をCとCだけに限定するのは、システム・プログラミングでは、プログラマーが以下の概念に精通している必要があるからだ:
- ソースコードのリアル・コンパイルとフル・コンパイル。
- 低レベル・オブジェクト出力ファイル。
- バイナリのリンク。
- 低レベルの機械語/アセンブリ・プログラミング。C言語は、アセンブリを偽装したもの/アセンブリを習得しやすくしたものと言われることもある。また、好きなときにコード中にアセンブリ言語コードを挿入することができ、(アセンブリのように)手続き型である。
- 最初の言語をCとCだけに限定するのは、システム・プログラミングでは、プログラマーが以下の概念に精通している必要があるからだ:
プログラミング科学
-
プログラミング・サイエンティストの仕事を知る。 プログラミング・サイエンティストとは、アプリケーションの開発に携わる代わりに、暗号化、プログラミング言語、データマイニング・アルゴリズムなどのコンピューティング技術の開発に携わる、非常に高度なプログラマーのことである。このレベルは、学問的な勉強と献身なしにはめったに到達できません。
-
コンピュータ・サイエンスの4年制学位に相当する科学的知識を蓄積する。これには以下の方法がある:
- 実際に学士号を取得する(これが普通である)。
- 近代的な大学からそのような学位取得のためのコースの概要を入手し、独学または別のコースとしてコースを受講する。これは理論的には可能だが、推奨されるのは最初の道である。
-
専門分野を決める。具体的であればあるほどよい。これはあなたの好みによる。ただし、以下にコンピュータ・プログラミング・サイエンスの主なトピックを挙げておく:
- アルゴリズム設計(検索、ソート、暗号化、復号化、通信におけるエラー検出などが例として挙げられます)
- プログラミング言語/コンパイラ設計/最適化
- 人工知能分野(パターン認識、音声認識、自然言語処理、ニューラルネットワーク)
- ロボット工学
- 科学プログラミング
- スーパーコンピューティング
- コンピュータ支援設計/モデリング(CAD/CAM)
- バーチャルリアリティ
- コンピュータ・グラフィックス(コンピュータ・グラフィックスは通常、グラフィカル・デザインやグラフィカル・ユーザー・インターフェイス・デザインと誤って混同されている。コンピュータ・グラフィックスは、コンピュータ・システムにおいてグラフィックをどのように表現し、操作するかを研究する分野である)。
-
より高い学位の取得を検討しましょう。 修士号や博士号を取得するのもよいでしょう。
-
希望するプログラミング分野に関連する技術やプログラミング言語を学ぶ。
コメント
最新を表示する
NG表示方式
NGID一覧