回答編集履歴

2

追記

2018/12/31 00:59

投稿

Zuishin
Zuishin

スコア28660

test CHANGED
@@ -41,3 +41,19 @@
41
41
 
42
42
 
43
43
  そうして自分の使う言語にどのような機能や制限があり、自分の使うライブラリにどのようなクラスや関数が実装されているかという知識を蓄え、実際に使い慣れることで短時間でのリファクタリングが可能になります。
44
+
45
+
46
+
47
+ # 追記2
48
+
49
+
50
+
51
+ 「私が考えたこと」を読みました。そこで止まったのは、len の使い方を知らないからです。len が**何の**長さを測るものか知っていればそこで len を使おうとは思わなかったでしょうし、すぐに別の方法を探したでしょう。
52
+
53
+
54
+
55
+ 文法は必要最低限の知識です。これは知っていて当たり前のことで、実際にはそれだけでは足りません。実際に問題を解こうと思えば、与えられた環境で何ができて何ができないかを知る必要があります。
56
+
57
+
58
+
59
+ つまり、頭の回転とか発想の仕方ではなく、あなたに足りないのはライブラリの知識です。繰り返しになりますが、億劫がらずにライブラリリファレンスに目を通してください。

1

追記

2018/12/31 00:59

投稿

Zuishin
Zuishin

スコア28660

test CHANGED
@@ -13,3 +13,31 @@
13
13
  さらに cow ですが、cow は既に書いてあるので一に一画加えて丁に変えます。
14
14
 
15
15
  これを最後まで続け、最終的に cow 丁、bear 下、wolf 丁が得られるので、丁、下を算用数字に直します。
16
+
17
+
18
+
19
+ # 追記
20
+
21
+
22
+
23
+ どういう意味の質問かよくわからなかったのですが、これは前の質問の続きですね。発想法を尋ねているのだと思います。
24
+
25
+
26
+
27
+ 結論から言うと、すべての問題に対して最も効率の良い方法を機械的に発想する方法はありませんが、熟練することによって効率を高めることができます。
28
+
29
+
30
+
31
+ まずどうしたらその問題が解けるかを考え、その方法の実装を言語やライブラリに合わせて考えます。熟練したプログラマーはその際に無意識レベルでリファクタリングするので、突然魔法のような方法が閃いたように見えますが、これは閃きではなく論理的思考の賜物です。
32
+
33
+
34
+
35
+ 慣れないうちは実際に動くコードを書き、それを言語やライブラリに実装されている機能を使って効率化できないかどうかを「リファレンスを見ながら」考えてみてください。
36
+
37
+
38
+
39
+ set を知っているかどうかで書けるコードは違ってきます。知ってはいても頭に浮かぶかどうかは使い慣れているかどうかによるでしょう。とにかくその場しのぎのコードを検索してコピペするのではなく、自分でリファレンスを読み、自分の頭で考えることが大事です。
40
+
41
+
42
+
43
+ そうして自分の使う言語にどのような機能や制限があり、自分の使うライブラリにどのようなクラスや関数が実装されているかという知識を蓄え、実際に使い慣れることで短時間でのリファクタリングが可能になります。