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

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

ただいまの
回答率

87.78%

プログラミング独学について(特にandroid)

解決済

回答 7

投稿

  • 評価
  • クリップ 1
  • VIEW 1,152

score 31

私はプログラミング初心者で、しょっちゅうコピペばかりしています。なので、一度実装したことがある機能も覚えられていません。
しかし、このままコピペばかりしていてはいつまでも初心者から抜け出せないと思います。ほとんど何も見ずにコードを書けるようになるにはどう
すればよいのでしょうか?また、実際、出来る方はどのように勉強されたのか経験談なども嬉しいです。
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 7

+3

同じくAndroidについてです。

私は個人的によく使う機能(HTTP、SQLiteなど)ならネット等を見なくても実装できますが、個人的にあまり使わない機能(Wi-Fi、Bluetoothなど)は覚えてないのでネットで調べています。
ネットという便利なツールがあるので、普段利用しない機能を無理して覚えるくらいなら、普段利用する機能を深く知り、覚える方がいいと開き直っています。

覚えているといっても、IDEの補完とJavadoc頼りのときも間々あります。
とある機能を実装したいときに、その機能を実装するために必要なクラスさえ分かっていれば、補完候補とJavadoc頼りに探したりします。

Androidに限った話ではありませんが、膨大な数のAPIを全て覚えるのは無謀です。
「ほとんど何も見ずにコードを書くには?」という質問の答えとしてはアレですが、開き直るのも一つの手では?


余談ですが(いや、これが本題ですね)、私がコードを覚えるときは、コピペ後にコード1行1行をネットで「この行はどんな処理をしているのか」を調べています。そうすれば、頭の片隅くらいには残ります。
Google公式のAndroidディベロッパーサイトも割としっかりしてますし、調べればある程度のことは分かります。
日本語指定しても肝心のクラスやメソッドのリファレンスが英語のままなのはご愛嬌…

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/07/30 09:30

    developerサイトは英語でも読んだ方がいいのですね。ありがとうございます。

    キャンセル

+3

私は、よく自分の実装を参考にコーディングします。
覚えなきゃいけないことが多すぎるため、忘れるものも多いです。(笑)

ただ、何度も同じ処理を組むことによって、コードが洗練されていく部分も多いです。
コピべでなく、写経(見ながらタイプすること)をおすすめします。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

checkベストアンサー

+2

こんばんわ

しかし、このままコピペばかりしていてはいつまでも初心者から抜け出せないと思います。ほとんど何も見ずにコードを書けるようになるにはどうすればよいのでしょうか?また、実際、出来る方はどのように勉強されたのか経験談なども嬉しいです。

昔、昔、あるところにCobolプログラマーがいらっしゃいました。なんて時代だといたらしいです。ほとんど何も見ずにコードを書く人たちが。機能が少なく、徹底したレビューと予算と時間があったからこそできたものかと思います。(今ほどコンピュータが一般的でもなかったでしょうしね)

今はというとWebページだって、サイト内検索だったり、多様なブラウザの対応が求められたり、多機能を求められるのでおそらく今それが出来る人は本当の天才と呼ばれるような人たちだけだと思います。

現在求められる大事な事はそういうことではなく、コードの意味を理解して作りこむとか、調べながらでも良いからエラーの原因を突き止めたり、ちゃんと整理しながらコードを書いたり、といった能力じゃないでしょうか?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/07/30 22:58

    コードの暗記をする前に、switchやfor文で整理しようと思います

    キャンセル

+2

ほとんど何も見ずにコードを書けるようになるにはどうすればよいのでしょうか?
ほとんど何も見ずにというのはよほどのスペシャリストか、記憶力が並はずれているとかでないと難しいように思います。私なんかは3ヶ月もすれば自分が考えてコーティングした所でも忘れてしまいます。

ロジックとして考えるべき所はコピペをするべきではないと思いますが、単純な機能の実装であれば、コピペでも別にいいと思います。ただ内容については理解しておく必要はありますが。。

こういう実装をした事があると機能ベースで覚えておけば、コピペであっても過去の資産として使えますので、自身の能力の中で効率的な方法を模索しながらやっていくのがベストではないでしょうか?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/07/30 08:50

    ご回答ありがとうございます。コピペはしても、内容は理解するように努めます。

    キャンセル

+1

自分も初学者(にちょっと毛の生えたような)です。

確かに「ほとんど何も見ずにコードを書けるように」なれれば良いですが、その域に達するのは結構大変ですし、必ずしもそうなる必要もないと最近では考えています。

もちろん意味も分からずにコピペを繰り返していたのでは成長しませんが、ベテランだって eclipseのようなIDE(統合開発環境)を使っていて、その多くが「コードスニペット」という一種の強力な入力補助機能を持っています。
これにはタイプミスによるバグの混入を防ぐとともに入力速度を速くすることで思考を妨げないようにという目的があるのですが、こうした便利機能を活用したからといってスキルが低いことにはなりません。むしろ、ツールを使いこなせるのはスキルが高い証拠でもあります。

そこで、自分が心がけているのは、
①良いコードをよく読む(意味を理解する)よう努力すること
②良いコードから「よく使うパターン」を拝借して覚えること
です。

お手本となる「良いコード」から「定石」とも言えるパターン(構文)を拝借して、(最初は完全なコピペかもしれませんがそのうちに馴染んできて)段々と使いこなせるようになってくれば、それで十分だと思います。

むしろ、どのコードが「良いコード」なのかを見分けられるようになることの方がより重要な能力だと思っています。

そのためにも、まずは諸先輩方の実装例から色々と拝借して、一見似通ったコードが、それぞれの条件でどのように異なってくるのか(自分が直面している現実の問題に適用すると結果にどんな違いがみられるのか)経験を積んで行くことが、スキルアップにとって何よりも近道なのではないかと思います。

この辺は、人によって考え方の一番異なるところかも知れませんが、「習うより慣れろ」ってことだと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+1

すでに回答がいくつか出ているので、すこし違う角度から回答します。

じつは、コピペすることと、何も見ずに書くことの、二択ではありません。
その中間に、いろいろ大事なことが埋もれていると思います。

たとえば、いろいろ調べながら書くが、まんまコピペではない、
そのつど関数やオブジェクトなどに適切にモジュール化する、
というやり方を私はしていますし、一般的に推奨できる方法でしょう。


1. 何も見ずには書けないが、同じことをなるべく2回以上書かない
2. 何も見ないで書けるが、同じことを何度も繰り返し書く

上を比較すると、現代のプログラミングでは、
2よりも1のほうが重要だと思っています。

言いかえると、似た実装を何回も出現させない、
高凝集かつ低結合でプログラムの複雑度を低く保つことが
問題の本質だと考えています。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/07/30 16:10

    私も似たような意見ですね。
    そして1をやり続ければ限りなく見ずにできるようになります。

    どういうことかというと自分で特定の機能のモジュールやサブルーチンを
    作成し、機能に応じて変数の初期値や一部関数を変えるような運用にすれば
    ほとんどの機能を自分の作ったクラスで対応できるので使い方も一律です。

    毎度毎度ワンオフで作ると都度ソースの書き方なども変わってしまうので
    個人的にはこのやり方を推奨したいですね。

    キャンセル

  • 2015/07/30 16:34

    コメントありがとうございます。

    >ソースの書き方なども変わってしまう
    これはそうですね。

    今はコーディング規約を守っているかとか、テストしやすいかとか、
    コードの静的解析とか、いろいろな観点から評価されます。

    だから、見ないでスラスラ書いたけど雑なコードよりも、
    保守性や可読性を考慮したコードのほうが重要だと思います。

    キャンセル

  • 2015/08/05 22:03

    ありがとうございます。写したものを書き直すことも重要なのですね。

    キャンセル

0

個人的には写経のようなものは必要ないと思います。
というかゼロから書ける必要もないと思いますし。

大事なのはコピペで動かしたあとにどういう順序でプログラムが動いたのか、
何のためにその機能が必要なのかを理解しておくことです。
そうすると、別のプログラムを書くときにそういえばあの時のプログラムが使えるな、
と気づくことができるようになります。

前書いたプログラムAとBを組み合わせて新しいプログラムCを作る、
こんなコピペの連鎖だけでおおよそのプログラムは作れるようになりますし、
これができればもはや初心者と呼べないレベルでしょう。

また、覚えることを意識していなくても、
重要度の高いものは何度もコピペ(目にして)していれば自然と書けるようになります。
そうやって上級者の方々もフルスクラッチで書けるようになったのではないでしょうか。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 87.78%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る