KANSHOUKUNのブログ的なヤツ

プログラミングで思考錯誤したことを書くつもりです。

プログラミングを挫折しないで独学で身に着けえる方法を考えてみた。

挫折の原因は目標設定が高いせいだと思う。  

以前、プログラミングを独学で身に着けようとした。

 

目標は箇条書きにすると以下の感じ。  

・参考書とか無しに家計簿アプリとか作りたい。

・学習する時間は仕事が終わった2~3時間で学習で済ませたい。

・完成にかかる時間は1週間とかで完成させたい。

・完成までにブログとか書いて、進捗管理できたら尚いい。

・できたら、人に見せて自慢したい。

・作りながら成果もあって、学習もしたい。  

こんな感じだったかと思う。  

 

対策は目標設定を分割するだ。そのまんま。  

 

・簡単なアプリを完成させる    

  ・GUIで動く簡単なアプリを作る。

    ・家計簿みたいなことができるヤツ

 

・作ったアプリでどんな事を覚えたか何でも良いからまとめてみる

  ・プログラミング言語はPHP

   ・インフラ環境はDocker

    ・データベース接続は難しいので

     csvに保存したとか

 

・完成させたアプリの仕様書を書く 

  ・どんなアプリか、できる事、できない事、これから直したい事をまとめておく。

   ・どんなアプリ 

     ・家計簿アプリ

      ・ターミナルやコマンドプロンプトから

   ・できること

     ・買った物、使ったお金などを入力、削除、変更などができる。

   ・できないこと

     ・ローカルにアプリが保存されているパソコンしか使えない。

   ・これから直したい事

     ・他の人も使えるようにアプリが保存されていない

      パソコンでも使えるようにしたい。

 

・応用が利くようにしたい。

  ・一つのアプリを時間をかけて作るより同じ順番で色々なアプリを作る。

 

・制限時間を考えない。

  ・遊びだと開き直って、空いている時間は全部、勉強につかう。

 

・人に見せない。

  ・相当レベルの高い物を要求してくるので、作っても驚かれもしないし、

   まして他人が作った物に興味は無い。おいそれと人に見せたりして

   馬鹿にされたりしてモチベーションを下げない。

 

・できただけで満足する

  ・完成させるだけで、凄い!学習はオマケ程度に考える( ´∀` )

 

以上でーす

GitHubのリポジトリを整理に半日潰した振り返り

独学でPHPを勉強中のkenshoucoderです。

csvファイルに使ったお金を記録するアプリを作ってPHPの勉強をしています。

作ったものは以下のGitHUBのリモートリポジトリに公開しています。

github.com

インフラ環境は独学エンジニアさんが公開しているリポジトリを

お借りしてます。

dokugaku-engineer.com

github.com

 

今回の問題は勉強の成果物をブログに公開できないという事でした。

原因はリポジトリが汚いという事です( ´∀` )

課題はディレクトリの整理です。

・リモートリポジトリある不要なファイルやディレクトリの削除

・リモートリポジトリに見られたくないデータを

pushされないようにすることです。

 

不要なファイルやディレクトリの削除は簡単でした。

 

Git Hubに見られたくないデータをpushされないようにする

Git Hubの公式ドキュメントが見つからない&ドキュメント内容を試して

半日使ってしまう(´;ω;`)

 

docs.github.com

 

なれたら簡単な方法なので、別のアプリを作る時は

手間取らなくて良くなった。

最近プログラミングしていて楽しいと感じた理由について振り返ってみた

アウトプットの練習も兼ねて書いて見ようと思う。

プログラミングが上手くなって、

役に立つツールとかアプリとか作りたいなと思い

プログラミングの参考書を買ったり、ウェブサービスに入会した。

だけど、書いてあることを真似して作ることはできても

ゼロから作るできなくて、悩んでいる時間がかなり長かった。

だから、プログラミングしていても全然、楽しくなかったし

本当に勉強する意味あるのかなぁ、とか思ったりもした。

しかし、家計簿とかアラームとか身近な物を

プログラミングで作ったりして楽しいと思うことが増えた。

その理由にって振り返ってみようと思う。

ざっと箇条が気にすると以下のような事が

プログラムを作って楽しいと感じる理由なのかなと思う。

・身近な物をプログラムで作る

これは2つ理由があって、

1つ、身近な物って仕様が分かりやすい

2つ、できたら自分でも使うし、後でカスタマイズする楽しみがある。

良く聞く車輪の再発というアレがあるけど、無視して良いと思う。

 

・品質や例外処理等々を無視する

ワンライナー、スパゲッティコードで書く

業務やコンテストに参加するなら、品質は大切だけど

勉強や自分で使うコードに品質は求めない。

誰にも迷惑が掛からないし。ゆくゆく直せばよいのではないだろうか。

 

・変数名や関数名は適当にする

変数名や関数名は分かり易い名前を選んで下さいとどこでも

聞くんだけど、最初から変数や関数が幾つ必要なのか

分からないと分かり易くて重複しない名前を考えるのって

結構大変なんですよね。更に仕様書を作って、この関数名には

この処理を実装するとかやってると作る時間がどんどん無くなって

最後は名前だけ考えたり、仕様書だけ作ったりして終わったりする。

それより適当な変数名や関数名でバーッとサンプルコードを作って

このツールを作るにはこれだけの変数名と関数が必要で幾つ

名前を考えるのが必要かそこから考える方が早い(汗?

 

・公式のドキュメントを見て作る

参考書を見たり、ウェブサービスで勉強し終わったら

公式のドキュメントで簡単なスクリプトを作った方が良いと思う。

参考書とかウェブサービスに書いてあることと実際に

自分が作りたい物を作るのって結構、違ってたりするんですよね。

しかも、自分の作りた物と完璧に同じ作り方が載っている

参考書とか無いですし、似ているコードからコピペして作っても

それって勉強の意味ないじゃんっていう気がしてくるんですよね。

公式ドキュメントをみて、この関数にはこの引数が必要で

だからこの戻り値が返ってきて、結果はこうなるんだなという

勉強している感が得られると思っている。

 

まとめてみるとこんな感じでした。

JavaScriptの配列チュートリアルまとめ

楽しく、お金をかけずプログラミングの勉強をする

良い方法ないかなぁと思って最近、試しているのが

MDNのJavaScriptのチュートリアルです。

developer.mozilla.org

JavaScriptのプログラミングの書き方の最後に

アクティブラーニングという覚えた書き方を使って

簡単なプログラムを書いて見ようという課題ですね。

課題は配列を使って商品を印字しようという内容です。

 

簡単にいうと以下のようなプログラムを書きます。

1)商品:価格が並んだ配列を作る

2)商品と価格に分割する

3)価格をすべて足し算する

4)価格の合計を表示する

必要なことだけを読んでコードを書いて、練習します。

 

実際に書いたのはGitHubに公開してみました。

github.com

答えとは全然違うコードになりました(汗

しかし、必要なことは全てできました。

 

特に難しかったのはfor文を使って配列の処理です。

const products = ["item1:1000","item2:2000","item3:3000"];

という配列を商品名と価格に分けるときにspiltという関数を

使って分割する訳ですが、中々上手く行きません。

理想は配列の中に配列が入っている構造になって欲しいのですが、

[[item1,1000],[item2,2000],[item3,3000]];

2列の配列になってしまい、その後の処理である数字を

Number型に変換する処理が作れません。

["item1,item2,item3","1000,2000,3000"];

色々、試行錯誤して以下のようにして

商品と価格に分割して新しい配列を作ることができることが分かりました。

producuts[i] = products[i].spilt(:);

配列の構造としては以下のようになっているかと考えています。

配列["[0番目][1番目]","[1番目][1番目]","[2番目][1番目]"];

 

この配列なら、forで繰り返し処理が楽になると考えました。

for (i=0;i<producuts.length;i++){

//配列の長さまで、変数iに1を代入する。

}

iが1づつ増えていくわけですから。

配列["[0番目][1番目]","[1番目][1番目]","[2番目][1番目]"];

products[i],[1];

配列の中の配列の先頭の番号を”i”に置き換えれば

forでループしながら、iの数字が大きくなっていくので

まとめて処理を書くことができました。

価格の値は必ず各列の1番目の列にあるので以下のようにすれば

配列の中の価格を文字列型から数値型に置き換えることができました。

Number(products[i],[1]);

最後に配列を再代入して文字列型の商品名と数値型の価格が入った

配列の完成となります。

products = Number(products[i],[1]);

後は同じ手順で配列から値を取り出して、値を使うことができます。

 

練習して感じた事

プログラミングは参考書に書いてあること、なぞっても

上達しないなぁと感じました。

 

なぜなら、やりたい事をプログラムに落とし込むことが

プログラミングなので、参考書に書いてあることが

やりたこととは限らないという事と、どいうやって落とし込むか

を考える過程が参考書をなぞるだけだとなんじゃないかなぁと

考えたからです。

 

なのでMDNのJavaScriptの配列チュートリアルを使って練習してみました。

個人的な備忘録ですが、上手くなる方法をいくつか書き出してみます。

 

1)チュートリアルを使って練習する

2)難しかったところを何故、難しかったか書き出してみる。

3)完成したコードをGitHUBに公開する

4)完成したコードを使って、もっといい方法を考える。もしくは

新しいコードを作る時の参考にする

5)新しいチュートリアルに挑戦する、その時に1~4を繰り返す

 

以上、長文、駄文失礼しました~

Docker環境のRailsでひな形作れない件

下記のコマンドでコンテナに入って、ひな形を作成する

docker exec -it <コンテナ名> /bin/bash

マグレーションをファイルを作成するのも

webのコンテナでbin/rails db:migrateコマンド実行する