
私の学校では、コンピューターサイエンスは10年生と11年生のみでした。 QBasic言語を学びました。 彼らは30行以下のプログラムを書きました。 他のクラスメートの背景に対して、それはタスクをうまく行うことができるように思われ、他の人たちは「今プログラマーが必要です」と言った。 プログラマーとして勉強に行ったとき、それが何であるか分かりませんでした。
最初の3つのコースでは、私が何をすべきかを完全に理解していませんでした。 1年目と2年目には、言語Cを学ぶ学期がありました。他のすべての科目は、プログラミングに役立つ分野に精通することでした。 一部の被験者は個々の同志によって過小評価されていなかったが、無駄だった。
研究所で勉強した後、あなたは次のことの重要性を認識します
コーディングスタイル
最初の2つのコースでは、私のプログラムはgovnokodでしたが、恐れることはありません(古いコースを上位のコースで開いたとき、私自身はコードにショックを受けました)。 1行で複数の関数呼び出し、演算子、そしてこれらすべてをスペースなしで記述できます。 1年目から4年目まで、教師は基本的に私たちに言語を知ることだけを要求し、問題を解決するために研究されたアルゴリズムを使用しました。 彼らはプログラミングのスタイルについては何も言わなかったが、生徒は「同じように働く-触らない」と。 4年目の半ばからすべてが変わっています。 私たちが多かれ少なかれタスクに対処したとき、教師はコードの設計についてコメントし始めました。 コードの場所を変更するための矢印と推奨事項を含む、期限切れのレポートもあります。 最初の3つのコースのコードの「クリーンさ」はほとんどゼロでした。 しかし、他の人を見せることを恥じないように、コードを適切に記述しようとします。
ですから、経験豊富なプログラマーやクラスメートにコードを見せることを恐れないでください。批判を恐れないでください。ミスをより早く理解し、読みやすく、適切なコードを書くことを学ぶ方がよいからです。 オープンソースプロジェクトに参加するか、少なくともgithubなどでプログラムがどのように書かれているかを見てください。 さらに、現在、トレーニングの初期段階で既に「コードの清潔さ」を植え付けるのに役立つコードの記述スタイルに関する推奨事項を記載した本があります。
生活を楽にする-バージョン管理システムを使用する
5年目にバージョン管理システムに初めて精通しました。 そして、gitで実験室の仕事を開発することを私たちに強制した先生に非常に感謝しています。 SVNとgitの経験があり、分散システムのすべての利点と柔軟性を認識しているので、gitを好みます。 また、Gitで作業するためのグラフィカルアプリケーションもありますが、git bashで作業することはありません。
材料を勉強する必要がある
多くはいくつかのアイテムを数えません。 彼らはそれが退屈だと言っており、それが私にとって役に立つとは考えにくい。 実践が示すように、それはまだあります。 インタビューで私の友人のほとんどは、彼らが何が欠けているかを正確に尋ねられました。 ここにいくつかの事柄がありますが、その知識は私にとって複数回役に立ちました。
正規表現
正規表現、つまりコンパイラの理論をコンパイルするスキルを磨くことができる主題がありました。 最初は気取らない字句解析器を書き、後に解析用のプログラムを書き始めました。 正規表現に慣れると、ファイルの解析とデータの正確性の確認(同じIPアドレスの確認)の両方に正規表現が必要であることがわかります。 そして、はい、彼らはインタビューで正規表現に関連するタスクを与えるのが好きです。
コンピュータアーキテクチャ
プロセッサの動作、計算の実行方法、メモリの動作、割り込みの処理など。 マシン内の数値の表現、追加/逆コード内の数値を使用した操作の実行に関する知識は、コンピューターまたはFPGA、マイクロコントローラーなどを使用するプログラマーにとって非常に役立ちます。
OSの知識
スレッドの操作、同期メカニズムの使用、管理など。インタビューの1つで、ミューテックスとは何かを尋ねました。 誰かが、問題の本質を理解していないため、ミューテックスを操作するためのロック()およびロック解除()関数について話し始めるでしょう。 しかし実際、この同期メカニズムは受動的な期待であることを伝える必要があります。 あなたが働くつもりの方向に応じて、この知識の重要な必要性が決定されます。 しかし、一般的に、そのようなことを知って覚えることは害になりません。
OSとドライバの動作を研究するとき、彼らは初めてLinuxカーネルを構築しましたが、私にとっては以前は不思議でした。
ハードウェアプログラミング言語
一般的な開発に役立ちます。 しかし、作業中は特に有用ではありません。 そうではありませんが、講義でパックされた構造とアンパックされた構造について話し始めたとき、私はCにそのようなものがあるかどうか疑問に思いました。はい、ビットフィールドのようなものがあることを知りませんでした。
オートマトンの理論
そして、この理論は実際に役立ちます。 たとえば、ifにある種の長い式がある場合は、Carnotカードまたはブール関数を最小化する別の方法を使用して単純化できます。
情報セキュリティ
交換中に送信される情報の整合性を制御するには、CRCコードを計算する知識が必要でした。 私たちはそれが何であるか、そして多項式の正しい選択をどのように行うかについての全体的な講義さえもしました。
ネットワーク
さまざまなプロトコル、ネットワーク構成の作業および種類に精通していることが有用であることが証明されました。
これは、あなたの将来の仕事であなたに役立つかもしれないもののほんの一部です(より高い数学も例外ではありません)。 これは、私が積極的に使用している知識の小さなリストです。 はい、私たちは知人のために研究所で多くのことを言われましたが、この基盤のおかげで、問題を解決する必要があるときにどこを掘るかを知っています。 そして、最後の2つのコースでは専門分野に多くの科目があったため、実際の知識の重要な進歩と応用は、ここ数年のトレーニングで正確に行われました。
やる気の欠如は学習を妨げる可能性があります
若い社員から次のように聞かれます。「最短(n番目)のコースをすでに学んでおり、退屈な講義、クラス、教師は欲望を殺すだけです。」 この点で、もう少し幸運だったと思います。 何人かの教師がいましたが(彼らはまだ他の会社で働いています)、あなたが考える「私は同じになりたい」と考えています。 彼らの指示、人生の物語に触発されました。 そのような人々のおかげで、学生は目に火をつけています。
他人に感情を植え付けるためには、あなた自身が彼らに夢中にならなければなりません。 他人に涙を流すには、あなた自身が泣かなければなりません。 他の人を説得するには、あなた自身が信じなければなりません。
(ウィンストン・チャーチル)
研究所で教師が紙で講義することに興味がない場合は、実験室のクラスに興味深い課題を与えないでください。その後、プログラミングをやめないでください(実際にプログラミングをやめる友人が数人います)。 現在、多くの企業が無料のセミナーを実施し、夏に無料のトレーニング/インターンシップを提供しています。 私を信じて、経験豊富なプログラマーと話した後、あなたは違うと感じるでしょう。 さらに、インターンシップ後は、そこで仕事をする機会があります。
最後に言って
プログラマーが自己訓練から得る知識のほとんどにもかかわらず、研究所で得られた知識は役に立つ可能性があります。 将来、何が役に立つかわからない。 ですから、出席した講義、セミナー、研究室のタスクについてそれほど懐疑的である必要はありません。 あなたがプログラマになりたいなら、あなたは1人になりますが、あなたはこれのために汗をかかなければならず、困難に直面したときにあきらめないでください。