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

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

新規登録して質問してみよう
ただいま回答率
85.48%
アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

6回答

2374閲覧

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

Ryan

総合スコア34

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

1クリップ

投稿2017/09/03 12:27

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

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

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

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

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

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

guest

回答6

0

ベストアンサー

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

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

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

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

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

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

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

リーダブルコードを読む

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

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

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

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

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

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

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

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

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

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

投稿2017/09/03 15:11

編集2017/09/03 23:48
miyabi-sun

総合スコア21158

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

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

0

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

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

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

投稿2017/09/03 13:28

maisumakun

総合スコア145183

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

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

0

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

投稿2017/09/03 12:32

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

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

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

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

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

投稿2017/09/11 08:54

PineMatsu

総合スコア3579

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

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

0

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

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

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

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

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

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

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

投稿2017/09/03 17:39

Tak1016

総合スコア1408

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

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

0

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

投稿2017/09/03 13:13

fu7mu4

総合スコア1088

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問