質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

Q&A

解決済

4回答

1597閲覧

プログラミングは暗記力<調べる力or考える力ですか?

Nishioka

総合スコア13

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

0グッド

2クリップ

投稿2022/05/22 03:43

プログラミングをする際、必要になってくるスキルの中で、コードを暗記する力はあまり優先順位が高くないのでしょうか?
現場でプログラミングをしている人はあまり暗記をせずに、分からない事はその都度調べているのですか?
また、暗記力と思考力では後者のほうが重要な気がするのですが、実際はどちらが重要なのでしょうか?
流石に四則演算や条件分岐、関数の使い方などはみなさん覚えていると思いますが、暗記の優先度が低い場合、どこからが覚えなくていいラインなのか基準も曖昧で、例えば、フレームワークやライブラリのコードは暗記する必要があるのかないのかわかりません。
ドキュメント通りに1周だけ勉強したあとは、何周もその資料を繰り返し読んで、エディタに書き写すのではなく、わからないことを調べながら、自分の手で何か作ってみるほうが良いのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

回答4

0

ベストアンサー

(注:以降はあくまで私の経験に基づく主観をベースにした参考意見であり、これを押し付けるつもりは全くありませんし、人それぞれの向き不向き、やり方、色々な考え方があってしかるべきものと思います。
質問者さんも、この回答を100%真に受けるのではなく、参考にしていただいたうえで、melianさんがコメントに提示している検索結果等を見ながら、自分に合った学習スタイルを模索していただければと思います。)

プログラミングをする際、必要になってくるスキルの中で、コードを暗記する力はあまり優先順位が高くないのでしょうか?

→一般的に、競技プログラミングで上位に入りたい等の特殊な状況を除けば、プログラミングは暗記力よりも、調べる力や考える力の方が圧倒的に重要であると私は考えます。

現場でプログラミングをしている人はあまり暗記をせずに、分からない事はその都度調べているのですか?

→細かいAPIやコードなんかは都度調べています。コードレベルは息巻いて暗記する必要はなく、書いているうちに自然に覚えます。
(一方、プログラミングをちょっと離れて、基本的なアルゴリズムやコンピュータリテラシー、業界のしくみや業務要件に関わる基本知識は、IPAが行っている試験に合格するための試験勉強として暗記作業を行いました。これは単純な試験対策なので暗記が活きますし、これらを知っていれば、お客様や他職種メンバーとのコミュニケーションが円滑になるからです)

また、暗記力と思考力では後者のほうが重要な気がするのですが、実際はどちらが重要なのでしょうか?

→前述の通り思考力だと思います。

流石に四則演算や条件分岐、関数の使い方などはみなさん覚えていると思いますが、暗記の優先度が低い場合、どこからが覚えなくていいラインなのか基準も曖昧で、例えば、フレームワークやライブラリのコードは暗記する必要があるのかないのかわかりません。

→フレームワークやライブラリのコードも、もちろん暗記できるに越したことはありません
しかし、暗記に時間をかけるよりも、実際にドキュメントのサンプルをコピペして実行したり、自分が取り組んでいるコードに取り入れて試してみた方が時間的パフォーマンスは優れていると思います。

仮に時間をかけて丸暗記できたとしても、それをすぐに自分の意のままに操るコードとして落とし込めるわけではないです。
いろいろなパターンに適用するコードを書いているうちに、本質的な部分は覚えられます。むしろ、どこが本質的な部分かわからない状態で時間をかけてまで丸暗記するのは時間の無駄だと思います。
(もちろん、記憶の片隅に置いておくことで、あとから重要な部分が繰り返し上書きされて本質的な部分が身につくので、最初にドキュメントを1~2周勉強するのは決して無駄ではありません)

ドキュメント通りに1周だけ勉強したあとは、何周もその資料を繰り返し読んで、エディタに書き写すのではなく、わからないことを調べながら、自分の手で何か作ってみるほうが良いのでしょうか?

→上述と同じです。自分の手で何か作ってみた方がいいです。作りたいものがないなら、サンプルコードをちょっと変えてみるだけでもいいと思います。サンプルコードはあくまでサンプルなので、そのサンプルの用途にしか使えません。
実際に使いこなせるレベルになるには、自分の手で動かすのが一番近道です。


以下は補足です。

持論

質問のタイトルに沿って簡潔に回答するとすれば
「一般的に、プログラミングは、暗記力よりも、調べる力や考える力の方が圧倒的に重要である」
と私は考えます。
(それに加えて、英語力も)

「暗記」の定義

以降では「暗記」(暗記力)を「集中的に反復学習する等し、内容を一字一句間違えず再現できるようになること」と定義します。

プログラミングで、この定義に沿った「暗記」を行おうとすること(何周もその資料を繰り返し読んで、エディタに書き写すような行為)は、たいていの場合、コストパフォーマンスが悪くなる傾向にあるため、避けるべきです。
それよりも、実際に手を動かして、調べる力や考える力を鍛えるべきです。

調べる力や考える力の方が圧倒的に重要であると考える理由

プログラミングが解決すべき課題の性質

プログラミングが解決すべき課題は、単純明快な正解があるものではありません。

たとえば高校生物で「植物は光合成によって何を生成するか?」という問題に対しては「グルコースと酸素」という単純な答えが用意されています。

しかし、プログラミングによって解決すべき課題は、定式的な問題ではなく、いくつかの問題の複合体となっています。これらは単純な暗記で対応できるものではありません。

プログラミングが解決すべき課題は広い領域に亘り複雑です。
したがって、下記のような能力が重要となると考えます。

  • 思考力

・複雑なものを、単純なものに分解していく能力
・試行結果から仮説を立て、実装を修正していく能力

  • 検索力

・実際の目の前にある具体的な問題にずばりあてはまる解決は、そのまま検索しても回答がみつからないことが多い。具体的な問題を一般的な問題に置き換えたり、小さい単位に分割して適切な検索キーワードを設定する能力や、複数の検索結果を読んで適用できそうかどうか見極める能力も必要。
・使用しているライブラリがオープンソースであれば、それを読み解いていく能力。

  • 英語力

→ドキュメントが英語しかない場合も多く、解説サイト等でも英語圏の方が圧倒的に充実している。検索力を最大限有効利用するには、英語力があると有利。英語が読めなくても、DEEPLなどの翻訳サイトで翻訳して理解する根気は最低限必須。

プログラミングによる解決方法

多くの場合において、プログラミングによる解決方法は、ただ一通りだけしかないとは限りません。
ある要件をプログラミングで実現しようとする場合、いくつもの実装方法を考えることができます。
同じプログラミング言語でも、
・どのようなアルゴリズムを適用するか
・どのようなフレームワークやライブラリを使用するか
等で実装は千差万別になりえます。


以上を前提とすると、
・ソースコードを覚えるまでの暗記は不要
→もちろん覚えられればすごいが、ドキュメントのスニペットコードを時間をかけて「暗記」しても応用が利く場面が少ない(課題の複雑性)
→検索したり、使えそうな関数を自分でメモしておいてそれを利用する等で足りる。
→たいていの教材やドキュメントは、暗記を前提に作られていない。
→実際にコードを書いているうちに、短いイディオムは自然に覚える。
⇔アルゴリズム等「応用が広い汎用的なコード」は暗記する意味はあると思う。

・複数のフレームワークやライブラリのコード、イディオムを丸暗記する必要はない
→自分で手を動かしてコードを書いて実行することで自然に身に付く。
(自分の作りたいものに、フレームワークやライブラリのサンプルコードを適用する等。サンプルコードの丸暗記ではなく、動作を考えて実装することで身につく)

例外

もちろん暗記力が全く不要というわけではなく、下記にあてはまる場合は、暗記にも優位性があると思います。
・暗記を前提に最大の効果を生むよう緻密に設計された教材・カリキュラムを利用する。(またはそのような学習カリキュラムを自分で組む)
⇔世の中の多くのドキュメントはリファレンスであり、暗記を前提に作られていません。

・インプット/アウトプット/復習を行う場面で、計画性と集中力を維持できる。
⇔丸暗記作業はほとんどの人にとって単純作業で苦痛です。

・アルゴリズム等の応用分野が広く汎用的なコードを暗記すること
→様々な場面で活用できるため。暗記によるコスパがよい

暗記を優先する相対的なメリットは、うまくやれば、よりスピーディに大きな効果をもたらすことが可能であることです。
しかし、そのためには特別な環境(教材・カリキュラム)とより高い自律性が求められると思います。

投稿2022/05/22 05:58

編集2022/05/22 06:42
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

プログラミングをする際、必要になってくるスキルの中で、コードを暗記する力はあまり優先順位が高くないのでしょうか?

「コードを暗記する」というのが何をさしているのかわかりませんが、自分で物を考える力に比べれば誤差の範囲でしょうか。

流石に四則演算や条件分岐、関数の使い方などはみなさん覚えていると思いますが、暗記の優先度が低い場合、どこからが覚えなくていいラインなのか基準も曖昧で、例えば、フレームワークやライブラリのコードは暗記する必要があるのかないのかわかりません。

記憶する必要があるのは、言語の基本文法です。このサイトでも演算子や基本構文の意味を質問している人がいますが、そういうのは都度調べる物では無い。
記憶する必要が無くて、都度リファレンスを見ればいいのは、ライブラリの関数・メソッドの使い方です。ただし、どんなクラスがあるか(こういうことをしたい時にどのクラスを使うか)は記憶していないと、調べるのが大変です。

フレームワークも、フレーム自体の考え方を理解している必要があります。これは記憶というのかどうか。理解して体の一部になっている必要があるというか。その上で細かい使い方は記憶する必要が無くて都度リファレンスを見れば良いです。

記憶しなくていいと書きましたが、もちろん記憶していた方が早くて楽です。

ググるのは、リファレンスの説明・例だけでちょっとわかりにくい場合に使用例を探す時くらいでしょうか。そこからコピペするというより、それを見てリファレンスの意味を理解して自分で書く。
あるいは、「どんなクラスがあるか(こういうことをしたい時にどのクラスを使うか)は記憶していないと」で、記憶していないことを初めてする場合にググるのでしょうか。

ドキュメント通りに1周だけ勉強したあとは、何周もその資料を繰り返し読んで、エディタに書き写すのではなく、わからないことを調べながら、自分の手で何か作ってみるほうが良いのでしょうか?

基本が理解出来たと思えるまでは何度でも勉強しましょう。基本が出来た後はコピペじゃなくて自分で考えて書いてみましょう。

投稿2022/05/22 21:08

otn

総合スコア84505

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

すでについている回答に同意しますが、私の考えを書いておきます。

問い: プログラミングにおいて暗記力と思考力だとどちらが重要か。

どちらもです。ただし暗記力と思考力の比重は3:7ぐらいでしょうか。イメージ的に。
ここでいう暗記は概要理解も含まれています。

勘違いしてほしくないのは、「検索してヒットしたものを切り貼りすればいい」ということではありません
プログラミング言語を丸暗記しようとすると主要なAPI(関数やクラス等)だけでも割とあります。C言語でも数えたことありませんが体感で30近くはある気がします。そこにWindows APIも含めると数千ぐらいあるのではないでしょうか。
仮にC#だとしてもCLI(コマンドラインからの一括処理系)ですら50とかあるんじゃないかなと。GUIも含めると相当あるし、C#でのGUIもWPF, WinForms、そしてBlazorとかもある。
Electronとかを使おうとするとその都度必要なやつをDLしたりしますし、C#とかでも外部ライブラリやNuGet(C#でのライブラリ系)とかを利用するとなると更に増えますし、自分で例えばC言語でいうprintf関数に相当するものが自分的には使いにくいとかのような理由で自作関数とかにまとめたりとかすると尚更増えますよね。

これをすべて暗記することできますか?
一部の相当な記憶の天才しかできないはずです。人間は忘れる生き物だから。

だから暗記は不要です。ただし丸暗記は。です。

必要な暗記とは、「for文はどういう構造か」や「for文とwhile文の使い分け」とかのような概念的なものや、「(その言語やフレームワーク、ライブラリで)可能なこと」です。

こういう使い分けができていないと何もできません。関数名とかは使っているうちに覚えていけます。英語をやるときもhaveとかは使っているうちに覚えて行っているはずです。

だから暗記も必須と言えば必須。(広義的には)

だけど比重的にはそこまで多くないと思います。ライブラリとかも使う目的(GUIを作りたいとか)がわかっていればそんなに労力を必要としませんし、大抵の言語は似たような概念をもっていますから、そこまで比重は大きくない。

後は思考力と検索力ですね。

外部ライブラリみたいなものは他人が作ったものなのでいくら考えてもクラス名とかはわかりませんよね。なので彼らが作成したドキュメントを用いて辞書のようにして調べます。
この検索力と、Google等の検索エンジンを用いて調べるとかの検索力が必須になります。

プログラマやSEはこの部分の比重が大きい気がします。(細かいことを言えば「デバッグ」や「テスト」、「仕様書等を作ること」もありますが)

かと言って調べて切り貼りするのはプログラミングとは言いません。
小説家が羅生門や吾輩は猫である等の既存の小説から切り貼りしただけの文章を「この小説は俺が考えて書いたものだ」と言っているようなものです。
プログラミングとは論理を記述することですから、それはいけませんよね。なので自分でかんがえることも必須になります。

投稿2022/05/22 09:51

BeatStar

総合スコア4958

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

分からない事はその都度調べているのですか?

「分からない事」が何なのかに依る.

  • そもそも覚えてなければ話にならないような基礎的な事柄なのであれば,やってれば覚える.
    そういうのはわざわざ「覚えよう」とかいう意識を持って「暗記」するようなものじゃない.
  • わかんなくても調べれば解決するような事柄なのであれば調べればいいじゃない.(「調べる」ことができない空間に拉致された場合を除いては.)

で,上記のような範囲の事柄であれば,至極どうでもいい範囲.
「記憶が定かでないなら調べれば?」っていうだけ.


重要なのは,「分からない事」が{簡単に調べれば解決するわけではない / そもそも「調べる」ことができない}性質の事柄である場合に頑張れるかどうか

仮に,言語文法だとかAPIの使い方だとかいうのを100%暗記している猛者(?)が存在していても,思考力ゼロなら何もできない.

実際の問題に対しては,ふつーは(?),方法論から検討せねばならない.
方法論を自身で考える力と比べれば,調べれば済むような物事を暗記しているかどうかなんてのは(あえて汚い言葉を使うと)ゴミみたいなもの.

投稿2022/05/23 01:25

fana

総合スコア11654

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fana

2022/05/23 01:34

> 覚えなくていいライン とかいうことを考える必要もない. 実際に存在するのは「(今現在,自身が)覚えているライン」であろう. そのラインをもっと先に動かした方が良いかどうかは「自身がそれが必要だと感じるかどうか」だ. 別に外部記憶(テキストファイルなり,紙のノートなり)を用いてはならないというルールも無いのだし.
fana

2022/05/23 01:35

(まぁ他者から「いや,さすがにそのくらいは知っとけよ…」とか言われた場合にはラインを動かした方が良いのかもしれないが)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問