私達は私達の学校でゲスト講師を雇い、彼が卒業すること、そして彼が期待するスキルレベルに達していないことに関して彼が接しました。Java、C ++、C#などの大規模なコンパイル言語、Python、Rubyなどの1つのスクリプト言語、1つのウェブフレームワークに関する知識。卒業生にとって絶対に不可欠だとあなたが思う他のスキルは何ですか?
私達は私達の学校でゲスト講師を雇い、彼が卒業すること、そして彼が期待するスキルレベルに達していないことに関して彼が接しました。Java、C ++、C#などの大規模なコンパイル言語、Python、Rubyなどの1つのスクリプト言語、1つのウェブフレームワークに関する知識。卒業生にとって絶対に不可欠だとあなたが思う他のスキルは何ですか?
回答:
新卒者は、単に学びたいという欲求以上のものが必要であり、学習へのこだわり、学習方法の理解、そしてソフトウェアの現実のしっかりとした根拠が必要です。私は一般的にあなたがどんな言語を知っているかは気にしませんが、すべてのジュニアは次のことをしなければなりません:
歴史を理解する。コンピュータサイエンスはよく研究された分野であり、多くの問題が解決されています。この事実を知ることは、あなたの前にあるものから学ぶ扉を開きます。知識を採掘するための豊かな歴史があることを知っていても、多くの卒業生が苦労しています。これには、big-O表記法、アルゴリズムの歴史、預言者の原則(Knuth、K&R、Hofstdaterなど)、および一般的に受け入れられている慣行やパターンなどが含まれます。
それが解決できることを知っています。開発者が問題に困惑しているときはいつも驚きます。学ぶことを学ぶことの一部は、問題が常に簡単に解けるという単純な原則です。これがわかると、正解を見つけるための思考の枠組みになります。
分解を理解する。問題を解決できるだけでなく、その方法は、分割して征服するのと同じくらい簡単です。問題をより単純なコンポーネントにまで減らすと、あなたの答えが常に現れます。
測定する方法を知っています。新しい開発者は、問題を分解できることに加えて、これらの問題に関する事実を収集する方法を知る必要があります。どのぐらいの間?なんて大きい?どのくらい速いのか?幾つ?単純な事実は、理解と客観的思考へのステップです。事実なしで仮定を行うことは、問題の領域で迷子になる簡単な方法です。
客観的です。すべての問題を簡単に分解、測定、理解できます。理解できない問題は、単に追加の分解、測定、理解が必要なだけです。怒ったり欲求不満になったりしても、理論について議論したり非難したりすることには意味がありません。問題を解決するプロセスに関連する不合理な行動や信念は毒であり、解決策を見つけるのが非常に困難になります。
パターンと原則を優先します。物事、言語、プログラミングモデル、コンピュータアーキテクチャ、さらにはエンジニアリング手法を実行するための数十の正しい方法に出会います。正しい方法は1つではありませんが、繰り返し適用できる強固な基本概念があります。これらのパターンは、学習と思考のすべてのステップをガイドするので、これらのパターンを確認してください。
雇用者として、私はプログラマとして以下の人のみを雇用します。
私の経験では、プログラミングの仕事に応募するコンピューターサイエンスの卒業生の5%未満が、基本的なレベルでこれらのスキルを実際に持っています。これらは商業的に役立つために必要な最低限のスキルであり、重要なことに、誰もがこれらのスキルを習得できるわけではありません。
その他の便利な機能は次のとおりです。
これらは、既存の開発チームとの統合を容易にしますが、通常は仕事で教えることができるテーマです。
この職業の学習プロセスは決して終わりません。自分自身を絶えず学び、上達させなければなりません。さもなければ、彼はゲームから「素早く」飛び出します。
他の答えも良いですが、大学で見落とされている#1のスキルは、実際のソフトウェアエンジニアリングのように思え ます。
OOPとJavaのような言語を教えるための基本的なクラスは素晴らしいですが、3年目と4年目には、生徒(少なくとも私の地元の大学)が、優れたアーキテクチャを特定して作成する方法を学ぶ代わりにコンパイラとオペレーティングシステムを書いているのはなぜですか。要件を分析し、そこから技術仕様のリストを作成します。おそらく最も重要なこととして、動作する良いコードと動作する悪いコードの違いは何ですか。
それは、私たちの大学がソフトウェアエンジニアではなくコーダーを解雇することをほぼ望んでいるようなものです。エンジニアリングのスキルや才能を発揮しなかった人は絶対に採用しません。