コードを手書きするという考えがばかげていると思われる場合は、それが避けられないことを知って驚くかもしれません。 確信が持てない場合は、最後に行った面接のことを思い出してください。面接室にはコンピューターがなく、面接官、白紙、青いボールペンだけがあったことを思い出してください。
学生にとっては、解答用紙の利用可能なスペースに戦略的に詰め込んだコード行によって成績が左右されるため、それはさらに大きな問題です。
それだけでなく、経験豊富なプログラマーは、オフィスのコピー機から取り出した A4 用紙の束を指して、彼らが取り組んでいた特に複雑なアルゴリズムを走り書きすることができます。
ですから、あなたが受験生であろうと、就職の面接を受ける可能性がある人であろうと、プログラミングの行き詰まりを解決したいと考えている人であろうと、この記事が紙にペンを置いてコーディングするときに役立つことを願っています.
ここではコード作成のアナログな側面に焦点を当てますが、これらの手順は任意の形式または言語のコーディングに適用できます。 したがって、これは、私にとって特別に機能するだけでなく、あなたの仕事にも非常に役立つ一般的なコーディングガイドラインのようなものだと考えてください.
なぜそれを書き留めるのですか?
始める前に、本番環境に対応したコードをノートに書き留めることを誰も期待していないことを理解することが不可欠です。 それをコードエディターにドロップして、エラーなしでコンパイルできるわけではありません。 完璧なコードを作成することが目標であれば、面接室や試験会場でコンピューターの前に座るでしょう。
手書きコードの目的は、事前にロジックを処理することです。 デザインは一刻も早く「ブラウザに入りたい」という欲求がありますが、手書きでデザインをスケッチすることには常識があります。 忠実度の低いメディアは、迅速な実験と費用のかからない間違いを助長します。
同じことがコードにも当てはまります。主に構文とセマンティクスを解決する場合です。 とはいえ、正しい構文とセマンティクスを取得することは 常に プラスポイントですが、手書きの練習全体の唯一の焦点ではありません.
手書きコードに関しては、どこから始めればよいか見てみましょう。
あなたの質問を知る
大学の最終学年は、健康上の理由でインターンシップに参加できず、キャンパスの面接にも出席できませんでした。 その結果、私の最初の就職の面接は文字通りのハイステークスでした。
今振り返ると、面接はとても簡単でした。 しかし、一度も参加したことがなかったので、理不尽なほど不安でした。 インタビュアーがプログラミングについて最初に尋ねたのは、アスタリスクで作られた逆三角形を出力できるかどうかでした。 私が言ったように、それは簡単でした。 for
ループは処理できませんよね? しかし、私が言ったように、私の不安も屋根を通り抜けていました.
私は深呼吸をし、彼らが私のために用意してくれた白紙に手のひらを押し付け、テーブルの上でできるだけゆっくりと私の方向にスライドさせ(もちろん時間を稼ぎました)、ペンをクリックし、それから私は何かをしました右。
最初にアスタリスクでできた逆三角形を描きました。 それが私が地に足をつけて彼らの質問に答え始めた方法です.
私は、そうでなければ優秀な開発者が、自分が何を解決しようとしているのかを完全に把握していないという理由だけで、何か問題を起こすのを見てきました。
私たちが扱う問題は、物理学者や数学者が解く問題とは異なります。 パラメータのセットを取得し、不足しているパラメータを見つけます。 私たちの質問は私たちの結果でもあります。 私たちは結果が何であるかをすでに知らされています - 私たちはそれらに到達する方法を理解しなければなりません. そのため、結果が表示されるため、質問をよく知っておくことが不可欠です。
出力したいものを書き留めたり、図に描いたりすることは、コーディングを開始する最良の方法の XNUMX つです。 ペースの速い業界では、「hello world」デモを実行してすぐにプログラミングに取り掛かる必要があることを理解しています。 これは、なじみのない構文に慣れ、新しいことに挑戦することへの不安を振り払うのに最適です。
しかし、誰かがあなたに質問をして、取り組むべき結果を教えてくれたら、それを最初に書き留めたほうがいいのではないでしょうか? その質問/結果は、出発点であるだけでなく、参照点でもあります。 コーディングのどの段階でも、それを見て、それに向けて作業していることと、正しい方向に進んでいることを確認できます。
ですから、解答用紙であろうと、これから書き込もうとしている A4 の白紙であろうと、まず、出力しようとしていることを書き留めることから始めてください。 回答に含めたくない場合は、余白またはコーナーに配置できます。 参照し続けることができる場所にあることを確認してください。
コードの概要を説明する
このステップは諸刃の剣のようなものです。 プログラムへのロードマップを取得したり、時間を無駄にしたりする可能性があります。 私の仕事は、それが前者であることを確認することです。
ですから、何よりもまず、私は次のように言いたいです。 問題や質問の範囲が小さい場合、コードのアウトラインは不要です。 繰り返しますが、このプラクティスは、すべてのプロジェクトや状況に規範的でも普遍的でもありません。 私があなたのインタビュアーだと想像してください。CSS を使用して Web ページの要素をできるだけ多くの方法で中央揃えにする方法を書いてほしいと頼まれました。 このためのアウトラインはまったく必要ありません。 各メソッドのコード スニペットは比較的小さいものです。
しかしここで、タッチスクリーン インターフェイスを介してユーザーの署名を取得し、その署名をサーバーに保存する Web アプリケーションを作成するようにあなたに割り当てたとします。 それほど簡単ではありませんよね? 把握しなければならないことが XNUMX つ以上あります。 おそらく、ちょっとした概要が役に立ちます。
- 署名を取得するための UI — HTML キャンバス? WebGL?
- ユーザーが署名しているときに、Web ページの残りの部分でポインター イベントを無効にする
- キャプチャした画像を PNG ファイルに変換して保存する — JS
- 次に、それを blob に変換し (おそらく)、訪問者のログ データ テーブルに保存します。
コーディングする必要があると思われる大まかな一連のアクションを書きました。 私が何を望んでいたかに応じて、それは短くなったり長くなったりした可能性があります.
クライアント プロジェクトのコードをアウトライン化することを強くお勧めします。 ユーザーの要件と一緒に、または印刷したワイヤーフレームの裏にアウトラインを書きます。
箇条書きの簡単なスナップショットにより、マップ、To Do リスト、およびプロジェクトの最後に到達したときに確認するチェックリストが提供されます。これは、忠実度の低いリストでのプロジェクト全体の要約のほとんどです。 また、次の同様のプロジェクトを開始するためのテンプレートにもなります。
しかし、前にも言ったように、このステップはもろ刃の剣のようなものです。 時間の制約がある場合は、受験者と面接対象者のためにこれを短くしておく必要があります。
どこから始めればよいかわからない場合は、アプリケーションでコーディングする必要がある重要な機能を XNUMX つだけ書き留めてください。時間があれば、XNUMX つにしてください。
しかし、それはそれについてです。 これに費やす時間はできる限り短くし、細かいことは気にしないでください。 アウトラインは余分なポイントを獲得するつもりはありません。 すべてをカバーしていることを確認するためだけに存在します。 それはあなたの最初の直感的な反応を捉え、プロジェクトの全期間を通してあなたを正直に保ちます。
ロングハンドとショートハンド
コーディングを開始する時間。 それで、あなたは何を書きますか? 「BDRS」または「border-radius
"; "div -> p
」または「<div><p></div></p>
"; "pl()
」または「println()
"; "q()
」または「querySelector()
"?
他の誰かがあなたのコードを評価している場合、選択の余地はありません。 略語、疑似コード、Emmet ショートカット、およびその他の形式の速記は省略してください。 そうでなければ、これを読んでいる人があなたの略語の意味を知っていると仮定する理由はありません.
それは本当にあなた次第です。
手書きで書くことに慣れていない場合 (そして私たちの多くがそうです)、手書きの表記法は面倒なので、やりすぎないほうがよいでしょう。 同時に、文章を倹約しすぎるということはありません。 ある日それを振り返って、書き留めた内容を理解したい場合は、そうではありません。
メモ作成アプリで開いているファイルと、後で参照できるように保存したいコード スニペットを書き留めたメモ帳を机の上に置いています。 それらは整理されておらず、単なる断片の長い流れです。 だから昔のノートをめくるときは、はっきりと書いていないと何を書いたのかわからなくなってしまう。
私はいつも構文を忘れます。 たとえば、私は JavaScript 関数が導入されて以来 (短いため)、アロー表記を使用してきました。 function
キーワードを使用すると、括弧や関数名を置き忘れて、構文エラーを誘発することさえあります。
しばらく使用していない構文を忘れることは珍しくありません。 そのため、後で参照できるようにメモが必要であることがわかっている場合は、メモを明確に書くことをお勧めします。
コードのノンシーケンシャル フロー
面接を受ける人や受験者には当てはまらない最後のステップとは異なり、このステップは特にあなたを対象としています。
ほとんどのプログラミング言語は解釈、コンパイル、および実行されるため、ソース内の事前に記述されたコードが後で呼び出されたときに実行されることがあります。 たとえば、関数呼び出しを使用して JavaScript でそれを行います。関数は最初に定義してから後で実行できます。 受験者と面接対象者はこれを使用して、最初に回答の重要なポイントに取り組み始めることができます。
最初から言っているように、手書きコードの目的は、プログラムするもののロジックを処理またはテストすることです。 最初にそれを解決することに集中するのが最善です。
古典的な教科書の例を見てみましょう — n 番目を見つけるプログラムです。 フィボナッチ数. 簡単な概要を書くとしたら、次のようになります。
- 入力を取得します。
- フィボナッチ数を計算します。
- 出力を要約します。
- 出力を印刷します。
そのアウトラインのすべてのステップは不可欠です。 ただし、1、3、および 4 はより必須です。 それらは必要ですが、すぐに集中できるほど重要ではありません。
入力をフェッチするよりも、フィボナッチ数を計算するコードを書き始める方がよいでしょう。 それを関数にラップしてから、コードを順番に記述し、必要に応じてその関数を呼び出す行を書き留めます。
問題の核心に焦点を当てたコードを書くことに時間を費やしてください。
本当の専門家は先にスキップできます。 クライアント プロジェクトがあり、いくつかの三角形ジオメトリを処理する必要があるとしましょう。XNUMX つの辺と反対の角度があり、XNUMX 番目の辺の長さを見つけなければなりません。 そして、私は自分のページを開くのではなく、紙に落書きすることにしました。 IDE.
最初に、もちろん、三角形を描きます (おわかりのように、これは私が非常に経験したことです)。 いくつかのサンプルの長さと角度を書き留めます。 次に、式を書き (確かに、オンライン検索の賛辞です)、すぐに関数のコードにジャンプします。
義務的な手順を書き留めても意味がありませんが、それらは本番環境のコードで必要になります。 でも、それを試験の解答用紙に書かなければならないとしたら話は別です。 他の手順をスキップすることはできません。 ただし、数式のコードから始めることはできます。
疑似コード
クリスはすでに 擬似コードに関する便利な記事 しっかりと読むことを強くお勧めします。
手書きコード全体があなたのお茶のようには思えないが、それがあなたを助けることができるかどうかまだ興味があるかもしれないと感じているすべての専門家にとって、 擬似コード あなたが求めているバランスかもしれません。
前の手順の XNUMX つで述べたように、コードの概要を説明するのと似ています。 ただし、より簡潔で、簡略化されたコーディングのように感じられます。 「スケルトン コード」と呼ばれることもあります。
CSS グリッド レイアウトの簡単な擬似コードを次に示します。
Grid
5 60px rows
6 100px columns
書くことはほとんどありません! したがって、紙に鉛筆で書くことはこの種のことには優れていますが、使用しているプログラムに疑似コードを書き留めることは、同じくらい効果的で、速く、安価です。
スペースとコメント
コードは 90% のキーワードと 10% のタブで構成されていると思います。 スペースがないと、単語の読みやすさが低下します。 手書きコードにもインデントが必要です。 ただし、用紙の幅が制限されるため、すべてのレベルで使用しないでください。 スペースは慎重に使用してください。
また、使用するコードを書いている場合は、これまでに述べたことすべてに従い、出力とアウトラインをページに書き留めている場合は、コメントを含める必要さえないかもしれません。 コメントは、次の一連のコードが何をするかをすぐに教えてくれます。 コードの概要をすでに書いて読んでいる場合、コメントは冗長なメモです。
ただし、あなたの判断がXNUMXつを下ろすと言う場合は、それを実行してください。 コードの右側に追加します (たとえば、VS Code のように既に記述されている行の間に挿入することはできないため)。 スラッシュ、括弧、または矢印を使用して、コメントであることを示します。
特定の構文に自信がない受験者のために、コメントを記入してください。 このようにして、少なくとも、論文の採点者に、その不適切な形式のコードを使用した意図を知らせることができます。 また、コメントを示すには正しい区切り記号のみを使用してください。たとえば、JavaScript のスラッシュなどです。
アナログ対デジタル
前述したように、ここで提供することはすべて、一般的なコーディングのアドバイスです。 物理的な紙でこれを試したくない場合は、メモ作成アプリケーションも機能します。
ただし、デジタル ルートを試す場合は、単純なメモ取りアプリ以外を使用することをお勧めします。 より視覚的なデジタル ツール (フロー図、マインド マップ、ワイヤーフレームなど) を使用して作業します。これらは、結果、アウトライン、およびコード自体を視覚化するのに役立ちます。
私はあまりデジタル市民ではないので (Web で作業し、最近電子書籍を読むようになったことを除いて)、物理的なノートブックを使い続けています。
手書きコード用の私のお気に入りのツール
鉛筆と紙ならなんでもOK! しかし、そこには多くのオプションがあり、これらは私が使用するいくつかの選択ツールです:
コーディングに「書く」方法はありません
少なくとも、鉛筆と紙を使ってコードを手書きする私の小さな方法が、あなたがすでにコードを計画して書いている方法を評価するようになることを願っています. 私は他の開発者が自分の仕事にどのように取り組んでいるかを知るのが好きです。
繰り返しますが、ここには科学的または正確な芸術はありません。 しかし、手書きのコード計画を試してみたい場合は、これまでに説明したすべてを順番に並べたリストをご覧ください。
- コードの出力を (必要に応じてサンプル データと共に) 書き留めることから始めます。
- コードのアウトラインを書きます。 小規模なプロジェクトやそれほど複雑でないプロジェクトでは、XNUMX つのステップにとどめてください。
- 手書き表記を使用します。 開発者が自分で書いている場合は、その記述が読みやすく、後で参照するときに意味をなす限り、簡略表記を使用できます。
- 時間の制約がある場合は、問題の核心に取り組むコードを最初に書くことを検討してください。 後で、そのコードへの呼び出しをシーケンシャル コードの適切な場所に書き留めます。
- 自信がある場合は、主なアイデアに対処する疑似コードを書いてみてください。
- 適切なインデントとスペースを使用し、用紙の幅に注意してください。
それでおしまい! 手動でコードを作成する準備ができたら、この記事が簡単に開始できることを願っています。 試験や面接のために座っている場合は、これが問題を正しく理解することに集中するのに役立つことを願っています.