プログラミングとプログラマーについて考える

最近のイベントに触発

数学の知識の必要性

そして

プログラマーの危機



中学生向けのプログラマーと、大学に進学する予定のあるプログラマーについて一言。



「おわかりのように、Linuxのようなシステムを作成するには、優れたコーダーになるだけでは不十分です。 また、陰湿なろくでなしでなければなりません。」

ライナス・トーバルズ



あなたはこの声明の千の解釈を与えることができますが、多くの人は「プログラマー」の概念が「エンコーダー」の概念より幾分広いことに同意します。 ほとんどの場合、プログラマは主観的であり、多くの場合、個人的な経験と好みに基づいて特定のトピックについて話し合います。 そして、経験と好みは皆によって異なります。 誰もが毛布を自分の側に引っ張るので、これは一般的な問題の議論を妨げます。

以下に書かれているのは、私の視点です。



(記事の最後のコメントの分析)



プログラマは誰ですか?



プログラマーは、さまざまな種類のコンピューティング機器(PC、携帯電話、マイクロコントローラーなど)のソフトウェアを開発する人々です。



伝統的に技術と呼ばれる多くの専門分野とさまざまな分野があります。 卒業すると、学生は自動的にプレフィックスエンジニア、数学者、システムなどのプログラマーになります。プログラマー自身は多くの場合、Web、C ++ 、. NET、Java、データベース、Linuxなどのプレフィックスを使用して自分自身を呼び出します。

実際には、エンジニア、数学者、およびシステムプログラマー(教育別)が同じテーブルに座って、たとえばJava言語の1つの問題を解決することがよくあります。



別のグラデーションがあります-これは専門です。 ここでは、選択は比較的任意であり、タスクは異なります。 たとえば、1C、Web、データベース、DSP、ACS、アプリケーションプログラム、3Dアプリケーション、人工知能。

各分野の知識、スキル、技術は特定のものです。



プログラマはどうしますか。



彼らは大学で作られています。 彼らは(残念なことに)専門分野を考慮せずにすべて一緒に講義に出席し、それらの試験に合格することを強制されます。

(将来の雇用主とは異なり)自分自身を幸運だと考えてください:90年代前半の困難な人口統計状況のため、場所の競争は年々少なくなっています。 教師はより人道的になり、現代のプログラミング言語で実験室で作業するとき、モニターのコードが伸びるボックスの配置を知る必要がなくなりました。



ただし、3行の加算の操作がまだ翻訳されておらず、学生が配列の境界を越えてポインターをMicrosoftコンパイラエラーにダンプしている専門分野。



プログラマーの仕組み。



プログラマーの道は複雑で厄介です。 もちろん、それはすべて専門に依存しています。 (私を修正することができます)現在解決されているタスクの90%はデータベースとWebプログラミングです。 この分野だけでなく、新しいプログラミング言語、新しいフレームワーク、テクノロジーが毎年登場します。 凍傷したオタクでさえ、すべてに従う時間はありません。 そしてもちろん、来年、研究所でNET Framework 4.0を(そして私が望むように)教えられることを期待すべきではありません。 しかし、誰かがすでにそれを使用しており、ソフトウェアがより速く作成され、必要な知識の領域がフレームワークの知識に絞り込まれていることを喜んでいます。 Webプログラマーは、Ruby on Railsの登場を喜ぶ。



プログラマーになる方法。



ほとんどの場合、まずソフトウェア開発に関連する専門分野の専門大学に行く必要があります。 (学生として)最も厳しいプログラマーは、彼らにとって高校はまったく必要ないと考えています。 もちろん、すべては専門性と深刻度に依存します。 しかし、いくつかの場所では、彼らはまだ卒業証書に注意を払っています(私はアドバイスします)。 現在、競争の利益はわずかです。



停止...



毎年卒業生数が増え、典型的なタスクが簡単になり、プログラマになりたいというのは奇妙に思えませんか?



仕事の数は常に増加しているという事実にもかかわらず、この分野と専門分野の成長は一様ではありません。

残念なことに、この職​​業(個人にとっては幸運なことに)、起業家の高校生は、どういうわけかJoomlaを理解しているため、工場で働く父親よりもフリーランスで稼ぐことができます。



おそらく、顧客が技術的に有能になる時期はそう遠くないでしょう。 そして、賃金はより「公平」になります。

テクノロジーの開発と膨大な既製ソリューションにより、別の既製モジュールを接続して新しい機能を追加すると、開発者が典型的な問題を解決するための要件が​​軽減されます。



毎年、プログラマーの職業は、事務員(別名オフィスプランクトン)の職業にますます似ています。 もちろん特定の制限があります:

1)すべてのサブジェクトエリアにあるわけではありません。

2)優秀なプログラマーが仕事を見つけます。

新しいフレームワークのリリースにより、99%のタスクを正常に完了するためのプログラマーの知識範囲は、それがない場合よりもはるかに狭くなります。 その結果、40人の専門家が、以前の20人ではなく、特定の範囲の問題を解決することができます。 さらに、大学は別の卒業生を市場に投入しました。 そして今では40ではなく、60があります。



ここでさらに2つの質問が発生します。

1)どの分野を面白く、収益性を高めるために選択すべきか。労働市場の競争の問題はそれほど深刻ではないのか?

2)「良いプログラマー」とはどういう意味ですか?



サブジェクトエリアの選択方法。



専門分野は数多くあるため、好みの分野の概要を説明できます。 5年のデータベース開発の後、3Dモデリングの分野で自分自身を実現することは、この分野の専門家がすでにいるとすれば、やや難しいことは明らかです。 常にチャンスがありますが。

類推すると、私は彼の生涯にわたって検眼医であった外科医と一緒にいたくないでしょう。 ホリバーの愛好家のために-そのような医師がいます-セラピスト(一般開業医)。

一方、(勉強する場所を選択している人に特に注意を払いたい)、少なくとも3年前(より良い-より良い)のソフトウェア市場開発の見通しに関する知識が役立ちます。



さらに、ロシアおよび世界の一般的な政治的および経済的状況を監視し、これに基づいて結論を出すことが(少なくとも一般的には)望ましいです。 ネットワークには、統計情報、専門家の意見、ニュースを含むリソースがあります。 これを行うことができるのは勝者です。



市場には多くの専門があります。 ウェブやデータベースなどの分野では、競争は依然として少なくありません。 ほとんどの場合、開発者向けの既製のツールがますますリリースされるため、これらの分野の平均給与は時間とともに低下し始めます。 たとえ仕事の数が増え続けても。 いずれにせよ、私は今ここで簡単に勉強してお金をたたき落とす誘惑に対して警告したいです。 高い価格は、タスクの非常に1%を解決することができ、他の人にはアクセスできないGurusのみになります。



暗号保護、情報のコーディングと送信、デジタル信号処理、自動制御システムなどのプログラミングに関連する特定の領域に注意を喚起したいと思います。 これらの分野への関心は日々高まっており、その範囲はモデムから宇宙船に至るまで十分です。 ここでも教祖である必要があり、タンバリンと一緒に踊ることもあります。



悲しいことは、多くの賢明な人が簡単にお金を稼ぐために努力していることであり、その結果、ロシアではこれらの分野でほとんどの開発者がマストドンであり、長い勤続後に退職しました。



給料が家電販売業者のレベルであるという条件で、パン屋さんの名刺を作ることに生涯満足している人は常にいるでしょう。 最後に、誰かもそれを行う必要があります。



しかし、2年目に言うと、自走式銃の分野の専門家になりたいと自分で決めた場合、データベース設計者よりも面白くて高給の仕事がやや簡単になるでしょう。 ここでの唯一の問題は、故郷からの移住かもしれません。



「良いプログラマー」とはどういう意味ですか?



これが聖戦のテーマです。 問題は、職人を訓練する(特定の技術と言語を教える)か、職人を訓練する(基本的な知識を与える)必要があるかどうかです。 私はアドバイスをしたいと思います:それぞれにこの質問を個別に決定します。



これについての私の考えのいくつかを以下に示します。



最大の効率で主題分野を選択するという問題を解決するには、経済学と歴史の基本的な知識が必要です。 他の人を理解し、自分の考えを明確に述べるには、ロシア語の言語と文学の知識が必要です(1人のプログラマーが複雑なシステムを開発することはできません)。 数学(さまざまな分野)と物理学の基本的な知識があります。 もちろん、人生の誰もが微分方程式を解いたり、ドップラー効果に基づいて動作するデバイスを実装したりする必要はありません。



あなたの視野と思考のレベルを開発することが必要です。 一般に数学的論理の知識がなければ、プログラマーは悲惨に見えます。

90年代にアメリカを去った当社の元従業員によると、非常に専門性の高い専門家が非常に多く、その分野に精通した賢い人がたくさんいます。 しかし、複雑なシステム内でさまざまなブロックの相互作用を整理することは非常に困難です(実際には不可能です)。



現代の高等技術教育では、さまざまな分野の基礎知識である基本原則が提供されます。 さまざまな分野での開発の方向性を示します。 アイテムに興味がない場合、だれもそれを必要としないという意味ではありません。 ストリームにはかなり多数の人がいます。



単純な人間の怠lazと誇大妄想は、聖戦の火に燃料を追加します。 何らかの理由で、多くの人は誰もがそれらを借りていると信じています。 彼らはすべてを教え、見せ、教育しなければなりません。 なぜ基本的な知識を受け取ったときに、言語と技術の独立した研究の問題が乱暴に認識されるのですか? たとえば、PascalとOOPの基本を知り、C ++言語を自分で学ぶことができます。 そして、多くの人がそれをします。



多くは人の個々の資質に依存しますが、真のプロになるには、あなた自身で多くのことをする必要があります。



人が言語と技術(多くの場合1部)を教えたい場合、大学への直接の道があります。 (学習プロセスは個別に議論する必要があります)



マスターが職人の 自主的かつ意識的に 選択し 、マスターの知識を損なうことなく 、職人のスキルを独力で 習得すれば、マスターと職人の問題を解決できます



ちなみに、a)一般的な発達のために、b)選択した専門分野にまったく属さない上級コースの科目の平均学位について勉強することをお勧めします。



まとめ



2番目の(早い-良い)コースの終わりまでに、将来の専門分野の対象分野を決定することをお勧めします。 今日流行の地域に行く必要はありません。 労働市場と世界の状況(特にロシア)を分析する必要があります。 プログラマーには、興味深く有望な分野が数多くあります。 彼らは複雑で、面白く、需要があり、かなり支払われています。 そして、できるだけ早く、可能な限り自分で専門的に作業を開始する必要があります。



PSコメントを残す前に、Joel Spolskyによる記事- コンピュータサイエンスの学生向けのヒントも読むことをお勧めします。



更新

コメントから導き出せる結論



1)olympiadnik(等しくない)プログラマー。

以下をご覧ください。 ( bobermaniac



2)小学生(等しくない)プログラマー。

学校では、学習プロセスのみ。 (例外があります)



3)プログラミングは先天性疾患です。

18歳でBASICを知らない場合、病気になる可能性はわずかです。



4)優秀な人(学生を含む)が研究所に集まります。 おそらくあなたは彼らから何か学ぶべきことがあります。 ( kmike



5)プロフェッショナルになるには、自分自身とさまざまなプロジェクトの両方で多くの作業を行う必要があります。



6)「2週間以内に任意の言語を学習します」という症状は年齢とともに消えます(プロフェッショナリズム)。 まったくありません。

自分で見てください。 以下をご覧ください。



7)数学(など)の基本的な知識が不要な活動分野に注意を払います。 おそらく高い競争があります。

例、 habrahabr.ru / blogs / arbeit / 59989 /#comment_1633645



8)発展中の(まだ流行していない)活動領域に注意を払います。

aryehは彼が言っていることを知っています。



9)Habréでは、調停システムを開発する必要があります。 そうしないと、すべてのトピックがゴミ箱に変わる可能性があります。

少なくとも、トピックトピックを離れるディスカッションスレッドを非表示にする機能。






All Articles