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

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

ただいまの
回答率

88.81%

プログラミングスキルの向上について

解決済

回答 6

投稿

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

Ryan

score 34

現在、Swiftでアプリケーションを作成しながらプログラミングを勉強しているのですが、独学ということもあってか、なかなか上達が実感できません。
CやJavaを大学の授業で軽く習った後、身近なアプリケーションが作りたいと思い、Swiftを勉強しiPhoneアプリを作成しています。
このサイトで質問したり、ブログを見ながらプログラムを書くことで、ある程度実現したい機能を実現することはできるのですが、バグが多く、初心者ながら下手くそなソースコードだと思います。
どのように学習すれば、いいプログラムが書ける様になるのでしょうか。
おすすめの書籍やサイト、体験など教えて頂けると幸いです。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 6

checkベストアンサー

+6

私がフレイクスルーを起こした順番に挙げます

  • 組み込み関数やメソッドは全てREPLで動かして確認する
  • リーダブルコードを読む
  • プログラミング言語は英語と数学で出来ていることを理解する
  • オブジェクト指向プログラミングを理解する
  • 関数型プログラミングを理解する

組み込み関数やメソッド、演算子はREPLで動かして確認する

ネットで見つけたサンプルコードをコピペしようとした時に思い出してください。
使い方の分からない関数がいくつも混入したコードの動作に対して責任とれる?

ドキュメントをいくら読んでも身につかない。
自分の手を動かして動作を確認して、問題解決にどんな風に役立つか、変な動きはしないかをあちこち突いて見ない限り真に覚えたことにはならない。
これが私がプログラミングの師匠に教わった内容です。

面倒ですがこれを習慣にしてからつまらないバグは激減しましたね。
私は既にある程度自信がついたエンジニアだと思いますが、「この関数に空の配列渡したらどうなるんだろう、よしよし、エラーにならずに空の配列が帰ってくるな」という風に既に見知った関数でも動作が保証出来ない時はすぐ確認するようにしています。

実際の作業で使おうと思ったものだけでいいです。
初見の関数や演算子はあれこれ触ってみてください。

リーダブルコードを読む

エンジニアが100人居れば80人は勧める良書です。
どんなコードが読みやすいかを体系的に学習することで、良いコードと悪いコードの違いを人に説明出来るようになります。
この本を読むだけでコードの品質が高レベルで安定するようになります。

後半に従ってどんどん高度な内容で辛くなってきますが、初回の学習はすんなり理解出来る範囲で構いません。
私は初回は半分程度で諦めましたので、質問者さんも半分読めるかどうかかもしれない、その前半の半分だけでも役に立ちます。
プログラミングを続ける限り生涯通して役に立つので、たまに手にとって眺めてみてください。

プログラミング言語は英語と数学で出来ていることを理解する

複数形は配列、文脈で意味が一意に決まるなら変数は簡略化出来る…等のように英語力が上がれば文章を書くようにプログラミング出来ます。
変数名や関数名・メソッド名の名付けのセンス良くなり、コードの品質が更に安定します。

オブジェクト指向プログラミングを理解する

時間かかります。
現実世界の概念をシンプルに落とし込めるようになり、
自他共に認める綺麗な実装が作れるようになります。

関数型プログラミングを抜いたここまでの4要素が現代のプログラマに求められるスキルです。
多くのプロジェクトはオブジェクト指向言語、オブジェクト指向プログラミングで動いているので…

関数型プログラミングを理解する

関数型プログラミング言語はマイナーなので不要と感じるエンジニアも多いかと思いますが、
私はブレイクスルーになる価値あると感じ、主にこれを勉強しています。

関数型プログラミングの考え方をしっかり理解しておくと、他のプログラミング言語を操っていても関数やメソッドの作り方のセンスが格段に良くなります。
副作用のない関数を次々と生成して自動テストにぶち込めるので生産性も上がります。

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

+1

私自身の言葉でなくて恐縮ですが、以下の質問がお気に入りです。
プログラミングにおける精神的ブレイクスルーポイント
色々と参考になる回答をいただきました。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

+1

コードのチェックツールを活用してみるのも1つの方法です。

Swift向けだと、SwiftLintTailorなどがあって、「よくない」書き方を指摘してくれます。スッキリ書ければ、読みやすい、理解しやすいコードを作る一助となります。

ただし、あくまでツールの1つということで、ルールを絶対視するのは、これまたよくありません。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

0

課題を解いたあと、そのソースコードのレビューがうけられる学習サイトです。ただし英語
http://exercism.io/

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

0

iOSの開発ということでオススメするのは
Clean Architecture
です。

言語仕様などは書いて覚えることはできますが、構造についてはセンスだったり、初めて着いたプロジェクトや先輩の影響を受けることが多いのかなと思います。

たとえば、
・最適なクラス構造はどうするのか
・メソッドの粒度はどうあるべきなのか。
・あるロジックを実装するときのベストプラクティスはなんなのか。

最終的に動けばいいんですけど、ただただ1つのファイルにダラダラとしたコードを書くとテストもしにくいし、読みにくいし、仕様が変わった時に全部書き直しになったり、再利用できなかったり色々な問題に直面しますよね。

どのロジックをどのファイルに実装すればいいのか、そのルールが決められていて、誰が書いてもある程度ルールに則った綺麗な実装ができるようになります。

敷居は高いかもしれませんが、ググれば記事もたくさん出てきますので、
まずはClean Architecture ios (クリーン アーキテクテャ)でググってみてください。

あとはコテコテですが
Gofのデザインパターン
は勉強しておいて損はないと思います。
特に、インスタンス生成と、振る舞いに関するパターンはオブジェクト指向の言語であればすべて有用です。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

0

バグが多く、初心者ながら下手くそなソースコードだと思います。

プロでもバグはどうしても湧いてしまいます。(笑)
バグをゼロにすることはある一定規模以上のプログラムになると基本的に難しくなります。それは入力条件が指数関数的に増大していくためで、すべての入力条件をチェックするのが困難になってくるからです。

でも、だからといって「バグがあります」と開き直るのではなく、潰す努力とバグを仕込みにくいような記述を心がけるようにする努力は続けていく必要があります。

ソースコードのリファクタリングで、コードの品質を上げていく努力を続けていけば気がついたときには実力がついている、ということを信じて頑張ってください。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

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

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

関連した質問

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