現在、Swiftでアプリケーションを作成しながらプログラミングを勉強しているのですが、独学ということもあってか、なかなか上達が実感できません。
CやJavaを大学の授業で軽く習った後、身近なアプリケーションが作りたいと思い、Swiftを勉強しiPhoneアプリを作成しています。
このサイトで質問したり、ブログを見ながらプログラムを書くことで、ある程度実現したい機能を実現することはできるのですが、バグが多く、初心者ながら下手くそなソースコードだと思います。
どのように学習すれば、いいプログラムが書ける様になるのでしょうか。
おすすめの書籍やサイト、体験など教えて頂けると幸いです。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答6件
0
ベストアンサー
私がフレイクスルーを起こした順番に挙げます
- 組み込み関数やメソッドは全てREPLで動かして確認する
- リーダブルコードを読む
- プログラミング言語は英語と数学で出来ていることを理解する
- オブジェクト指向プログラミングを理解する
- 関数型プログラミングを理解する
組み込み関数やメソッド、演算子はREPLで動かして確認する
ネットで見つけたサンプルコードをコピペしようとした時に思い出してください。
使い方の分からない関数がいくつも混入したコードの動作に対して責任とれる?
ドキュメントをいくら読んでも身につかない。
自分の手を動かして動作を確認して、問題解決にどんな風に役立つか、変な動きはしないかをあちこち突いて見ない限り真に覚えたことにはならない。
これが私がプログラミングの師匠に教わった内容です。
面倒ですがこれを習慣にしてからつまらないバグは激減しましたね。
私は既にある程度自信がついたエンジニアだと思いますが、「この関数に空の配列渡したらどうなるんだろう、よしよし、エラーにならずに空の配列が帰ってくるな」という風に既に見知った関数でも動作が保証出来ない時はすぐ確認するようにしています。
実際の作業で使おうと思ったものだけでいいです。
初見の関数や演算子はあれこれ触ってみてください。
リーダブルコードを読む
エンジニアが100人居れば80人は勧める良書です。
どんなコードが読みやすいかを体系的に学習することで、良いコードと悪いコードの違いを人に説明出来るようになります。
この本を読むだけでコードの品質が高レベルで安定するようになります。
後半に従ってどんどん高度な内容で辛くなってきますが、初回の学習はすんなり理解出来る範囲で構いません。
私は初回は半分程度で諦めましたので、質問者さんも半分読めるかどうかかもしれない、その前半の半分だけでも役に立ちます。
プログラミングを続ける限り生涯通して役に立つので、たまに手にとって眺めてみてください。
プログラミング言語は英語と数学で出来ていることを理解する
複数形は配列、文脈で意味が一意に決まるなら変数は簡略化出来る…等のように英語力が上がれば文章を書くようにプログラミング出来ます。
変数名や関数名・メソッド名の名付けのセンス良くなり、コードの品質が更に安定します。
オブジェクト指向プログラミングを理解する
時間かかります。
現実世界の概念をシンプルに落とし込めるようになり、
自他共に認める綺麗な実装が作れるようになります。
関数型プログラミングを抜いたここまでの4要素が現代のプログラマに求められるスキルです。
多くのプロジェクトはオブジェクト指向言語、オブジェクト指向プログラミングで動いているので…
関数型プログラミングを理解する
関数型プログラミング言語はマイナーなので不要と感じるエンジニアも多いかと思いますが、
私はブレイクスルーになる価値あると感じ、主にこれを勉強しています。
関数型プログラミングの考え方をしっかり理解しておくと、他のプログラミング言語を操っていても関数やメソッドの作り方のセンスが格段に良くなります。
副作用のない関数を次々と生成して自動テストにぶち込めるので生産性も上がります。
投稿2017/09/03 15:11
編集2017/09/03 23:48総合スコア21158
0
投稿2017/09/03 13:28
総合スコア145183
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
私自身の言葉でなくて恐縮ですが、以下の質問がお気に入りです。
プログラミングにおける精神的ブレイクスルーポイント
色々と参考になる回答をいただきました。
投稿2017/09/03 12:32
退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
バグが多く、初心者ながら下手くそなソースコードだと思います。
プロでもバグはどうしても湧いてしまいます。(笑)
バグをゼロにすることはある一定規模以上のプログラムになると基本的に難しくなります。それは入力条件が指数関数的に増大していくためで、すべての入力条件をチェックするのが困難になってくるからです。
でも、だからといって「バグがあります」と開き直るのではなく、潰す努力とバグを仕込みにくいような記述を心がけるようにする努力は続けていく必要があります。
ソースコードのリファクタリングで、コードの品質を上げていく努力を続けていけば気がついたときには実力がついている、ということを信じて頑張ってください。
投稿2017/09/11 08:54
総合スコア3579
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
iOSの開発ということでオススメするのは
Clean Architecture
です。
言語仕様などは書いて覚えることはできますが、構造についてはセンスだったり、初めて着いたプロジェクトや先輩の影響を受けることが多いのかなと思います。
たとえば、
・最適なクラス構造はどうするのか
・メソッドの粒度はどうあるべきなのか。
・あるロジックを実装するときのベストプラクティスはなんなのか。
最終的に動けばいいんですけど、ただただ1つのファイルにダラダラとしたコードを書くとテストもしにくいし、読みにくいし、仕様が変わった時に全部書き直しになったり、再利用できなかったり色々な問題に直面しますよね。
どのロジックをどのファイルに実装すればいいのか、そのルールが決められていて、誰が書いてもある程度ルールに則った綺麗な実装ができるようになります。
敷居は高いかもしれませんが、ググれば記事もたくさん出てきますので、
まずはClean Architecture ios (クリーン アーキテクテャ)でググってみてください。
あとはコテコテですが
Gofのデザインパターン
は勉強しておいて損はないと思います。
特に、インスタンス生成と、振る舞いに関するパターンはオブジェクト指向の言語であればすべて有用です。
投稿2017/09/03 17:39
総合スコア1408
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
課題を解いたあと、そのソースコードのレビューがうけられる学習サイトです。ただし英語
http://exercism.io/
投稿2017/09/03 13:13
総合スコア1088
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。