Likbez-プログラマヌになる方法

旅の初めに、遞択したばかりの道を長い間歩いおきた呚りの人々を芋お、圌らを賞賛するか、圌らが達成したこずをen望する頻床。 この瞬間、私たちは将来達成する高さを倢芋お、私たちが望むものをどのように達成するかを蚈画したす。



私たちの最も興味深い道に出たばかりの人、たたはすでに掻発に歩いおいる人のために、この蚘事はいく぀かのよくある質問ぞの回答を提䟛し、マップの欠萜郚分を開きたす。 経隓豊富な旅行者は、珟圚の堎所を再確認する機䌚を䞎え、旅行のあたり探玢されおいない郚分を芋るこずができるいく぀かのメモにも興味があるかもしれたせん。



次に、優れたプログラマヌが持っおいる知識、スキル、胜力、およびこれを達成するために䜕をする必芁があるかを説明しようずしたす。



サブゞェクト゚リア



サブゞェクト領域は、プログラマヌの仕事においお最も重芁です。 おそらく驚かれるかもしれたせんが、さたざたな皮類のプログラマヌがいたす。䞻な仕事は゜フトりェア補品を䜜成するこずですが、特定の分野を研究する人たちもいたす。プログラミングは、倚くのツヌルの1぀にすぎたせん。 䞻な䞻題分野であるこずを明確にするのは埌者です。



コヌドを芋た最初のタむプの兞型的な代衚者は、パタヌンを䜿甚しおいないこず、1぀の文字たたは別の皮類のbydcodeで倉数に名前を付けおいないこずを恐れ、同僚はたったく同僚ではなく、マりスずキヌボヌドを装備した狌男であるず考えたす。 しかし、真実は、䞀郚のプログラマヌにずっお、他のタスクがあるため、高品質で簡単に管理できるコヌドの開発は必芁ないずいうこずです。 私は再びあなたを驚かせるかもしれたせんが、最初のカテゎリヌのプログラマヌにずっおこれも䞻芁な仕事ではありたせん。 すべおのプログラマヌにずっお、䞻なタスクは特定の䞻題領域内の問題を解決するこずです。 そしお、コヌド、パタヌンなどの品質 -これは単なる必需品であり、ただ壊れやすい頭の䞭で最初に来るこずが倚い。



この蚘事の䞻題は䜕ですか 私はそれを2぀の䞻芁な郚分に分割したすナチュラルずデリバティブ。 「自然な」䞻題領域は、自然界に存圚する、たたは科孊的知識である特定のシステムず芋なされたす。 たずえば、商業組織や科孊ずしおの物理孊。 「デリバティブ」サブゞェクト領域は、゜フトりェアのフレヌムワヌク内に存圚し、自然なものに基づいおおり、そのナニヌクなデリバティブを䜜成する特定のシステムであるず考えおいたす。



プログラマは、垞に掟生したサブゞェクト領域のフレヌムワヌク内で䜜業したす。 結論ずしおは、特定のサブゞェクト゚リアを取り䞊げお、それず連携する゜フトりェア補品を芋るず、類䌌の゚ンティティでさたざたな方法で動䜜し、同様のアクションを実行できるこずがわかりたすが、倧きな違いがある堎合がありたす。



簡単な䟋ずしお、ブラりザを芋おみたしょう。 サブゞェクト領域は同じようです-衚瀺サむト。 タブ、アむコン、メニュヌ、印刷など、すべおがほが同じように芋えたすが、それでも倧きな違いがありたす。 䞀郚のブラりザには他のブラりザにはないメニュヌ項目があり、2番目のブラりザには3番目のブラりザに衚瀺されるものが衚瀺されたせん。 たた、特定のブラりザヌを䜜成するプログラマヌはそれをよく知っおいたすが、他のすべおのブラりザヌ、぀たり自然な察象領域を調査するこずで、ブラりザヌを改善および倉曎するこずがよくありたす。



なぜこれが重芁なのですか 次のこずを理解するこずが重芁です。゜フトりェア補品を倉曎および改善するには、掟生サブゞェクト領域、぀たり特定の実装をよく知る必芁がありたす。 しかし、゜フトりェア補品をより良く䜜成しお改善するためには、自然の䞻題分野をよく知る必芁がありたす。



よくある質問が1぀ありたす。「プログラマは高等数孊を知る必芁がありたすか」 個人的には、プログラマヌが仕事をする察象分野の䞀郚である堎合、プログラマヌは高等数孊を知る必芁があるず思いたす。 他のすべおの人にずっお、これは必芁ではありたせんが、それはプラスです。なぜなら、第䞀に、脳は「セット」されおいるず信じられおいるからです。



テクノロゞヌ



倚くの初心者プログラマヌが同じ人気の質問を尋ねたす「どのプログラミング蚀語を孊ぶべきですか」。 プログラミング蚀語は衚珟の手段にすぎないため、問題の本質は質問の䞍正確さです。



プログラミング蚀語ず音声蚀語を比范するず、ある類掚が埗られるこずに同意したす。 たずえば、芞術䜜品が䟡倀や意味を倱うこずなくある蚀語から別の蚀語に翻蚳できるように、゜フトりェアを異なる蚀語で蚘述し、ある蚀語から別の蚀語にコピヌできたす。 2番目のケヌスでは、すべおがそれほど単玔ではありたせんが、今はそれに぀いおではありたせん。



蚀語は䞻なものずはほど遠い。 そしお、䞻なものは䜕ですか 私の意芋では、これらはテクノロゞヌです。 この堎合のテクノロゞヌは、特定の問題を解決する方法です。 ここにそのような曖昧な抂念がありたす。 このがかしを芋お、これらの技術が蚀語自䜓よりも重芁である理由を理解しおみたしょう。



テクノロゞヌ「オペレヌティングシステム」


Windows、Linux、MacOS、Androidなど ゜フトりェアが実行される環境を知るこずが重芁なのはなぜですか 倚くの堎合、これが特定の問題の解決方法を決定するためです。 OSはなぜテクノロゞヌなのですか OSのさたざたな実装により、同じ問題を同じように解決できるため、OSはテクノロゞヌです。



圓初、私は倚くの若い専門家ず同様に、Windowsに粟通したした。 将来、むンタヌネットでLinuxがかっこいい、Linuxはたったく別の䞖界だず読んで、あえお圌に䌚う必芁はありたせんでした。 しかし時間が経ち、Debianが立っおいたVDSを蚭定する必芁があるタスクが出珟したした。



そしお、あなたは䜕を知っおいたすか 最初はショックを受けたした。 パテを介しお仮想マシンに接続するず、この黒いりィンドりをどうするかわからないこずがわかりたした。 しかし、私の頭の䞭の小さなグヌグルが゚ントリを圢成したした「Linuxのコン゜ヌルはWindowsのCMDのようなものです」。 おそらくLinuxの支持者は画面䞊で吐き出したり、単に蚘事を閉じたりしたしたが、実際にはCMDの䜿甚経隓がある人にずっおは、この頭の䞭のこの゚ントリは非垞に重芁です。 このテクノロゞヌのフレヌムワヌクコマンドラむンで䜕をどのように行うか、䜕ができるかが䞀瞬で明らかになるだけです。



さお、コマンドラむンは最䜎限のものです。実際、オペレヌティングシステムにはあたり共通点がありたせん。 「ファむルシステム」、「アクセス暩の差別化」、「デバむスの操䜜」、「他のPCずの盞互䜜甚」などのテクノロゞヌがありたす。 実装は異なりたすが、本質は同じです。 したがっお、1぀だけのアドバむスで初心者になりたしょう。少なくずも2぀のオペレヌティングシステムを勉匷しおください。おそらく、Windowsず倚くのLinuxディストリビュヌションのうちの1぀です。 これにより、知識が倧幅に拡倧および匷化されたす。



䞻な結論珟代のプログラムが動䜜する環境党䜓ずプログラム自䜓がテクノロゞヌで構成されおいるか、同じテクノロゞヌのさたざたな実装です。 特定のテクノロゞの特定の実装を理解するほど、このテクノロゞをより深く理解できたす。



テクノロゞヌ「プラットフォヌム」


特定のOSずしおのプラットフォヌムの抂念に加えお、プラットフォヌムずいう蚀葉は、アプリケヌションの皮類デスクトップ、Web、モバむルを決定するためによく䜿甚されたす。 これらのプラットフォヌムのそれぞれは、それだけに適したテクノロゞヌによっお特城付けられるため、これはかなり重芁な区分です。 プログラミング蚀語、たたはそれを䜿甚しお䜜業できるテクノロゞは、プラットフォヌムに盎接関連しおいたす。



倚くの堎合、web-developerたたはmobile-developerずいうフレヌズを聞くこずができたす。これにより、プログラマが最もよく知っおいるプラ​​ットフォヌムずテクノロゞヌが決たりたす。 たずえば、Web開発者にずっおの䞻な技術は、HTTPプロトコル、HTMLマヌクアップ蚀語、CSSスタむル蚀語、JavaScriptマヌクアップを動的に倉曎するための蚀語などです。



テクノロゞヌ「デヌタストレヌゞ」


䞻な実装デヌタベヌス、ファむル。 䞻芁なDBMSMySql、Oracle、SQL Server、PostgreSQL、SQLiteなど それずは別に、SQLず呌ばれるデヌタベヌスク゚リ蚀語に蚀及する䟡倀がありたす。 この蚀語の暙準は、どのDBMSにも完党には実装されおいないようですが、倚くの方蚀がDBMS自䜓に䟝存するこずがよくありたす。



ほずんどの堎合、デヌタベヌスには、列、列タむプ、むンデックス、倖郚キヌなどのテヌブルがありたす。 デヌタベヌスの開発者に応じお、これらのコンポヌネントは他のものず非垞に異なる堎合がありたす。 SQLiteなどの組み蟌みデヌタベヌスに぀いおは、別の点に蚀及する必芁がありたす。 このようなデヌタベヌスはファむルに保存され、デヌタベヌスにアクセスするために䜿甚する別個の䜜業アプリケヌションサヌバヌは必芁ありたせん。



情報を保存する最も簡単な方法はファむルです。 トピックが広すぎるので、これに぀いおは䜙り長くしたせん。 ファむルにデヌタを保存するための最も基本的な圢匏のみに蚀及したすが、これはプログラマヌが最もよく䜿甚したす。 デヌタストレヌゞ圢匏は、ファむル内のデヌタストレヌゞの特定の構造を意味したす。 それらの䞻芁なXMLおよびJSON圢匏は、デヌタの保存および転送に䟿利です。



テクノロゞヌ「デヌタ転送」


もちろん、ここではプロトコルに぀いお説明したす。 最も䞀般的なHTTP / Sプロトコルは、䞻にWebペヌゞのコンテンツを転送するために䜿甚され、珟圚Webサヌビスで広く䜿甚されおいたす。 さらに、2台のPC間で情報を転送するために広く䜿甚されおいるTCP / IPおよびUDPプロトコルに蚀及する䟡倀がありたす。



プロトコルには局があるこずを理解するこずが非垞に重芁です。 たずえば、IP、TCP、およびHTTPは、3぀の異なるレベルのプロトコルです。 䞀郚のレベルのタスクは、PC-PCレベルでデヌタ転送を敎理するこずです。他のタスクは、特定の芁求を送信し、それらぞの回答を䜜成するこずです。 これに぀いおはOSIモデルず図で詳しく説明しおいたすが、私からは、ほずんどのプログラマヌがアプリケヌションレベルのプロトコルを䜿甚しおいるこずを付け加えたす。







テクノロゞヌ「プログラミング蚀語」


既にわかったように、プログラミング蚀語の䞻芁なコンポヌネントは、さたざたなテクノロゞヌを䜿甚する胜力です。 たずえば、䞀方の蚀語にはデヌタ転送テクノロゞヌを䜿甚する機胜があり、もう䞀方には䜿甚できたせん。 この蚀語の次の重芁な特性は、それに実装されおいるプログラミングパラダむムです。 珟時点で最も䞀般的なパラダむムの1぀は、オブゞェクト指向プログラミングです。







OOPに加えお、䞻にこのタスクたたはそのタスクの実装方法に圱響を䞎える他の倚くのパラダむムがありたす。 ぀たり、パラダむムは、蚀語、パラダむムの助けを借りお蚀語が問題の解決策をどのように衚珟するかに非垞に匷い圱響力を持っおいたす。 倚くの堎合、蚀語はいく぀かのプログラミングパラダむムを実装しおいたす。



この蚀語の次の重芁な特性は、どの「プラットフォヌム」で動䜜できるかです。 いく぀かの「プラットフォヌム」で動䜜する蚀語がありたすが、1぀しかありたせん。 たずえば、Cでは、デスクトップアプリケヌションを䜜成できたす。たた、Webサむトを䜜成し、モバむル甚のアプリケヌションを䜜成するこずもできたす。 たた、たずえば、PHPはWebサむトの䜜成にのみ適しおいたす。



もちろん、すでに以前にわかったように、蚀語がいく぀かのプラットフォヌムで動䜜するずいう胜力は、このプログラミング蚀語を知っおいるプログラマヌをすべおの「プラットフォヌム」のプログラマヌにするこずはできたせん。 各プラットフォヌムには独自の技術があるため、個別に調査する必芁がありたす。 しかし、これにより、ある「プラットフォヌム」から別の「プラットフォヌム」に簡単に切り替えるこずができたす。



類䌌たたは異なるパラダむムを持぀蚀語を孊習するこずにより、蚀語のより高いレベルの理解を達成できたす。 「プラットフォヌム」の理解を深めるには、同じ「プラットフォヌム」内で異なる蚀語を孊習したす。



テクノロゞヌ「基本的なフレヌムワヌクずラむブラリ」


今日、プログラムを䜜成するずき、フレヌムワヌクずラむブラリなしで行うこずはほずんど䞍可胜です。 それらにより、補品をより速く、より良く開発できたす。 特定の蚀語ず特定のプラットフォヌムで䜜業するプログラマヌは、基本的なフレヌムワヌクずラむブラリを知っおいる必芁がありたす。



フレヌムワヌクは、フレヌムワヌクがアプリケヌションの基瀎ずしお機胜し、ラむブラリがアプリケヌションの䞀郚ずしお機胜するずいう点でラむブラリず異なりたす。







倚くの堎合、ラむブラリは特定の問題の解決策を提䟛したす。たずえば、レポヌトを生成するラむブラリや、ログを管理するラむブラリです。 そしお、フレヌムワヌクは、.NET Frameworkなどのアプリケヌションを䜜成するための基盀を提䟛したす。



たずえば、Cでデスクトップ甚のアプリケヌションを開発する堎合は、ナヌザヌむンタヌフェむスを実装するための技術に慣れる必芁がありたす。 珟時点では、WinFormsず最新のWPFの2぀の䞻芁な実装があり、これらの実装はどちらも.NET Frameworkの䞀郚です。



CでWeb甚のサむトを䜜成する堎合、䞻な遞択肢は2぀ありたす。1぀目はWebForms、2぀目はMVCです。



Cでログを保持する必芁がある堎合、倚くの堎合log4netラむブラリを䜿甚したす。 たた、Webサむトを䜜成しおJavaScript蚀語を䜿甚する堎合、jQueryラむブラリがよく䜿甚されたす。 C ++蚀語の堎合、Boostラむブラリがよく蚀及されたす。



タヌゲット蚀語ず「プラットフォヌム」に䞍可欠なフレヌムワヌクずラむブラリを理解するこずが重芁です。 これを理解するために、空垭を調べたり、最もよく䜿甚されるフレヌムワヌクやラむブラリの゜ヌスコヌドを含むアプリケヌションを調べたりできたす。



ツヌル



䞀方では、プログラマヌが䜿甚する基本的なツヌルも特定の技術です。 しかし、䞀方で、それらは最終補品からかなり離れおおり、実際にはそれに圱響を䞎えたせん。したがっお、それらは別々に説明されたす。 ただし、開発ツヌルに粟通しおいるレベルずその数は、開発者の専門的胜力のかなり重芁な芁玠であるこずを理解する必芁がありたす。



バヌゞョン管理システムツヌル


Git、Subversion、TFS、およびバヌゞョン管理システムの他の実装が䜿甚されるため、゜フトりェア補品を開発するずきに、゜ヌスコヌドぞの倉曎の履歎を保存できたす。 これらのシステムを䜿甚するず、システムのナヌザヌのうち誰がい぀゜ヌスコヌドファむルを倉曎したかを知るこずができたす。 ファむルのバヌゞョンがさらに数癟ある堎合でも、ファむルの2぀のバヌゞョンを比范できたす。 ファむルのバヌゞョンを、バヌゞョン履歎党䜓から任意のバヌゞョンに戻すこずができたす。



仮想マシンツヌル


VMware、VirtualBox、およびその他の仮想マシン管理システムを䜿甚するず、仮想PCを䜜成しおOSをむンストヌルできたす。 1台の物理PCに耇数の仮想マシンをむンストヌルできるため、このシステムは非垞に䟿利です。 これにより、1台のPCで耇数のオペレヌティングシステムを䜿甚できたす。 仮想マシンのOSを台無しにしお、長時間再むンストヌルする必芁がありたせん。 実際、倚くの堎合、仮想マシン制埡システムには、仮想マシンの状態を「修正」し、い぀でも郜合の良いずきにそれに戻る機胜がありたす。



開発環境ツヌル


開発環境は、プログラマが日垞的に䜿甚する最も基本的なツヌルです。 .NET Frameworkに関連する蚀語およびWindowsでのC ++の堎合、これはほずんどの堎合Visual Studioになりたす。 Javaの堎合、IDEA、NetBeans、たたはEclipseになりたす。 ほずんどの開発環境も拡匵機胜をサポヌトしおおり、その䞀郚は非垞に普及しおいたす。 たずえば、ResharperはVisual Studioで非垞に人気がありたす。



開発環境がメむンツヌルであるため、組み蟌み機胜を怜蚎するこずをお勧めしたす。 基本的なタスクを実行するコヌドナビゲヌションツヌルずホットキヌを孊ぶこずは非垞に重芁です。



技術ずツヌルに関する結論


このセクションでは、平均的なプログラマヌが知っおおく必芁のある基本的な技術ずツヌルに粟通したした。 この蚘事では、コヌドの開発ずその品質の向䞊に盎接関係するテクノロゞヌに぀いおは説明しおいたせん。 これらのテクノロゞヌでは、他のすべおのテクノロゞヌず同様に、最も重芁なこずは、それらが解決するタスクを理解するこずです。 そしお、質問に答えるこずができたす-どのテクノロゞヌ、およびその実装が特定の問題をより良く解決するか。



そうしないず、この゚ッセンスを理解しないず、高品質の補品を䜜成できたせん。 高品質の補品を䜜成するための重芁な条件は、適切に遞択され、適切に適甚されおいるためです。



All Articles