TCP/IPを介してLEDディスプレイをリモート制御するいくつかの作業を行うために連絡を受けましたが、私の経験と準備は主に高水準プログラミング言語に関するものです。私はその仕事について私に連絡した人にそれを言った、そして彼は私にこう言った:
「自分をプログラマーと呼ぶなら、これらすべてを知っておくべきだ」
プログラマーは本当に低水準プログラミングの詳細を知っているべきですか?または、私はそれを理論的な知識としてブラックボックスの概念として扱うことはできますが、必ずしもそれを行ったり、低レベルの言語ソリューションを実装したりすることはできません。
あなたの連絡先は彼らが何について話しているのか知りません。多くの言語、方法論、技術などがあり、一人では必要な詳細のすべてを非常によく知ることができない可能性があります。プログラマーとして知っておくべきことは、どのプログラミング言語を使用する場合でも、仕事を成し遂げるために必要なことを学び、解決策に到達するために適用できる問題解決アプローチをどのように持つかです。
あなたが知らないことを認めることは大丈夫ですが、あなたが直面しているものに関係なく、あなたが望ましい結果を達成するために十分に学ぶことができることを証明することもできます。優れたプログラマーは、さまざまなプログラミング言語でソリューションを実装できる優れた問題解決者です。
私はあなたの接触がする態度を持っている誰かのために働いていません。
「自分をプログラマーと呼ぶなら、これらすべてを知っておくべきだ」
私はこの声明に強く反対します。これは、シェフに何かを料理してもらい、運転手にあらゆる種類の自動車を運転してもらい、医者にすべての病気を知ってもらうことと同じです。これはばかげた仮定です。
プログラマーになるためには、自動化された方法でいくつかのタスクを実行するために、ある言語で書き込みソフトウェアを提供する方法を知っている必要があります。言語とタスクは、シェフがどのように料理を知っているか、運転手が操作方法を知っているか、または医師が診断方法を知っているように、プログラマーごとに異なります。
人生でコード行を書いたことがない人のように話されます。これは、見積りの半分の時間でそれを行うことができるはずだと思う人と同じ人です。ばかと議論しないでください。
自分の限界を知ることで、はるかに多くの知識と個性を示しました。この人は彼が何も知らないことについて話します。
私はすべての大工が家具の華麗な部分を彫る方法を知っているべきだと思います。パイロットが1つの飛行機を飛行できる場合、彼女はそれらすべてを飛行できます。
「プログラマーと呼ばれるにはXを知る必要がある」と言われると、私は本当にそれを軽んじます。本当に?まあ何人かの人々は一日中COBOLに取り組み、それを愛しています。彼らはそれと彼らの問題領域でとても上手になっているかもしれません。
真剣に、人々が直面している問題をクールで興味深い方法で解決することへの敬意を払ってください。優れた問題解決はさまざまな背景から生まれることを理解してください。彼らが全員が同じように考えることができるように、誰もが知っているはずのスキルの「チェックリスト」を習得したかどうかではありません。それが私たちが望むものの正反対です。みんなの「チェックリスト」は違うし、違うはずです。異なるほど良い。プログラミングは最近の問題解決です。うまくやっている人を尊重し、誰もが異なる強みを持ってテーブルに来ることを理解してください。これが、チームが互いに効果的に機能するための唯一の方法です。 "C"か何かを知っていることが本当にこの1人の男を素晴らしいものにしてくれるからといって、あなたがそれを知らないから自動的に失敗するわけではありません。
学校のほとんどのCSプログラムでは、低レベルのプログラミングに関する知識が得られます。たとえば、私は8088プロセッサを使用するアセンブラクラスを使用していました(それで、少し日付が遅れました)。しかし、最近の多くの職業訓練校はその知識を迂回していると思います-それが真実でない場合はコメントでパイプしてください。
結論として、チップレベルで何が起こるかを知ることは常に良いことです-加えて、高水準言語は最終的に実行時に最終的にそこに到達します。
ただし、現在低レベルのプログラミングが無知であることを知らないため、プログラマーではないことを誰かに教えてもらうことはできません。現在のプロジェクトでこれらのスキルが必要な場合は、必要なスキルを習得して適用するための十分な知識または動機が必要です。
クライアントが既にあなたにそのように話しているなら、私は真剣にそのプロジェクトを取らないことを考慮しなければなりません-あなたはそれがどこに行くことができるか決してわかりません。
これを読むことをお勧めします:
http://www.joelonsoftware.com/articles/LeakyAbstractions.html
説明したように、抽象化を使用する場合、下位レベルのものが常に実行していることに影響を与えます。これは、パフォーマンスの問題、障害の原因、セキュリティ上の理由などです。
断固として、今これらのことについてすべきです。特にasmまたはCPUアーキテクチャの専門家ではありません。しかし、詳細を知る必要があるときに自分自身を文書化するのに十分な知識は、実際に持っている必要があります。
彼の議論は No True Scotsman の論理的誤りの良い例です。
ただし、低レベルプログラミングと高レベルプログラミングの違いは言語ではなく、アプリケーションナレッジドメインです。値をtrueに割り当てると、LEDをオンにするか、ウィジェットでマウスクリックイベントを有効にすることができます。言語は気にしません。
たとえば、arduinoでLEDマトリックスを操作するための this library を見てください。これはロケット科学ではありません。プログラマーが「低レベルのオハイオ州!」を付けなければ、ほんの少しの労力でそれを理解することができます。精神ブロック。
各プログラミング言語には、それぞれ長所と短所があります。少し学ぶだけで、プロジェクトが与えられたときに何をどのように使用し、どのように効果的に使用するかについての素晴らしい認識が得られます。
プログラマーとして、特定のPLに特化して、問題を解決するための唯一のツールとして使用することができます。また、PLの多くを知っていても、これらの極端なものの間では何も専門にしないことができます。
「フレーズ」はイライラしていると言った人かもしれませんが、彼と話をしたのはあなただけではありませんでした。
問題を理解し、問題を効果的に解決するために必要なスキルセットを知ることは、プログラマの優れた特徴の1つです。悲しいかな、あなたは必要なスキルセットを持っていないので、おそらくあなたの連絡先を必要なスキルセットを持つ別のプログラマーに紹介するかもしれません。
乾杯、
暖かい
理論的な知識を持つことは良いことです。 学習必要に応じて低水準言語を使用できることが非常に重要です。
しかし、「自分をプログラマーと呼ぶなら、これらすべてのことを知っておくべきだ」と言うと、誰もがすべてについてのすべてを知ることができますか?彼らがやる前に?