あたまがばくはつしそうだ

今の状況は表題通りです。本を読むだけだとつまらなくて飽きる実践的な力がつかないと思うので、paizaやcodeIQでプログラミングの問題を解いています。

 

paiza

paiza.jp

 

codeIQ

codeiq.jp

 

ただ、解けるには解けるのですが、想定解答時間の10倍近く時間がかかっています。こんなにかかっていると、学んだことをこのブログで整理する時間も無くなるし、そもそも学べることの量が少なくなってしまいます。

 

ぐぐったり(「プログラミング 遅い人 共通点」等の検索ワードでいろいろ出てきました)、自分で考えたりした今の私の課題について書いてみます。

 

1.タイプが遅い

普通の日本語なら、そこまで遅くないと思います。ただ、JAVAなどのプログラミング言語だと、{ とか ] とかの普段使わない記号がありますよね。そういった記号が混ざると一気にタイプが遅くなってしまいます。

 

なので、このサイトで練習しています。

typing.lk

アルファベットのみだと、50語/分ぐらい。JAVAだと、30語/分ぐらいです。

せめて40語ぐらい打てるようになりたいなー

 

2.ロジックを組み立てるのが遅い

問題を読んで、どういう処理で進めるか、大枠を決めるまでに時間がかかってしまっています。

 

効果的な練習ではないのかもしれませんが、将棋で言うところの定跡的なことを知っていたらもっと早くできるのかなと思い、アルゴリズムを勉強しています。(日本語のページもあります。)

visualgo.net

マージソートが自分で書けずに四苦八苦していました。どうしてエラーになるのかずっと悩んでいたら、ただ単に再起処理の終了条件を「配列の要素数が1になったら」と書かなければいけないところを0と書いていただけでした。きちんと理解していればそんな処理書かないはずなのに...

3.フリーズしている時間が長い

これはぐぐって出てきたプログラミングが遅い人の特徴で、私にも完璧に当てはまっています。頭の中だけで考えていて思考が空転している時間がけっこうあります。

 

今は擬似プログラミングというのでしょうか、処理手順を書き出してからフローチャートで整理するようにしています。

Flowchart Maker & Online Diagram Software

このソフトを使うとGitHubにそのままフローチャートが保存できて便利です。

 

以上のことを今はとりあえずやってみようかなと思っています。効果的な練習法をご存知でしたら、教えていただけると非常に助かります。

 

一流の記憶法(1)

引き続き、今読んでいる本について。この章は大まかな記憶のメカニズムについてでした。しかし、これ読んだの2週間ぐらい前...

記憶のメカニズムと3段階モデル

第一章では記憶とは何か、と言うことについて書かれていました。

記憶は「覚える」ということ、だけではない

記憶=覚えると考えがちですが、それだけではないと言うことが書かれていました。ちょっと読み進めると納得できるのですが、もっと広く「記銘(覚える)」→「保持(覚えておく)」→「想起(覚える)」という流れ全体を「記憶」というそうです。

長い間覚えられる記憶への3つのステップ

記憶にも長くもつ記憶とそうでないのとあります。これは聞いたことのある人も多いと思うのですが、記憶は感覚記憶(今、五感として受け取っている情報)→短期記憶(短い間しか持たない記憶)→長期記憶(長く保たれる記憶)として保存されていくそうです。

各ステップごとの移行

それじゃ、長期記憶にするにはどうすればいいのか、と言う話になりますよね。感覚記憶を短期記憶にするには、まず「注意を向ける」必要があります。

 

彼女に「○○ちゃん(私です)は、私の言ったこと覚えてない!ちゃんと聞いてない!!」と責められて辛い思いをすることがあるのですが、彼女の言い分には科学的根拠があると言うことになりそうです笑。

 

短期記憶を長期記憶にする具体的な方法には触れられていませんでしたが、「短期記憶を繰り返し思い出す必要があるけど、ただ繰り返すだけじゃ駄目」ということらしいです。

 

想起-思い出すには手掛かりが要る

人は情報を思い出すときに、ただそれだけを思い出すのではなく手掛かりと一緒に思い出します。その手掛かりは言葉だけじゃなく、色々な種類があります。

例えば私はスミレを見たときに彼女のことを思い出します。彼女が好きな花はスミレだからです。このように、色々な情報がペアになって想起が起こります。「ドラゴン桜」のメモリーツリーでやってたあれですね。

これを聞いたときに「人間の脳ってHashMapみたいだな」って思いました。

忘却

忘却(記銘→保持→想起のステップが上手くいかなかった)について色々と書かれていたのですが、驚いたのは忘却には色々な理由があると言うことです。「時間がたつうちに記憶が無くなっちゃった」「そもそも感覚記憶に意識を向けていない」「手掛かりがこんがらがっていて、違う情報を思い出してしまった」「手掛かりが示されてない」などなど。

最後の二つはHashMapで言うと「キーと値のペアを間違えた」「キーを設定していない」って感じですかね。

記銘が失敗したのか、保持が失敗したのか、想起が失敗したのか。忘却には色々な理由があるからこそ、記憶は覚えるだけではなく、「記銘→保持→想起」のプロセスで捉える必要があるんですね。

 

 

エビングハウス忘却曲線」について、最後に少し触れられていました。一度長期記憶になってしまえば、忘れにくくなるって言うことらしいです。

勉強法の教科書(4)

なかなかブログが進まない...。やっと書く気になったので連投します。下書き機能を上手く使って、何を書くかのアウトラインだけでも隙間時間でやってしまわないと、なかなか進みませんね。

 

言い訳をしたところで。とっくの昔に読み終わった本のまとめ...

 

この章は効率についてでした。

 

本の選び方

知識を得る対象として本を使うときの注意点がありました。

必要となる知識がはっきりしている

試験や業務で使う知識など、記憶するべき知識がはっきりしている場合と、そうでない場合に分けて説明されていました。前者の場合、過去問などを分析すれば、必要な知識が分かります。試験ではなく業務の場合は、実際の作業を分析することになると思います。

 

必要な知識から逆算し、必要な内容が含まれている本を選べばよいと言うことになります。

はっきりしていない

 漠然と知識を広げたいと言う場合は、よく知っている人に聞く、と言うのが一番手っ取り早いです。新書、なかでも参考文献が多く載っている物から読むのもあり。専門家が分かりやすく説明してくれるだけでなく、参考文献があるならより知識を広げていく手がかりも紹介してもらえることになります。

 

この二つも他の章と同じく当たり前のようですが、意識していなかったので気をつけなければと思います。

記憶

記憶に関してはまた別に一冊本を買ってあるので流し読みです。今読んでいる感じだと、そっちのほうにあることしか書いてありませんでした。 

睡眠

睡眠には体温が深く関わっていて、寝る前には体温がある程度上がっていたほうが良いんだそうです。そういう理由で、就寝の三時間ぐらい前に食事、二時間ぐらい前に運動、一時間ぐらい前に入浴すると良いのではと薦められていました。

集中力

ちょっと面白いなと思ったのが、この章です。集中力を下げないためには、集中を邪魔する要因を遠ざけると言うのはよく言われていることです。それでも万が一、集中が切れてしまったら、そのときにやりたいことを紙に書き出したらどうかと言うことが書いてありました。書くことでその欲求を客観的に見ることが出来るかもしれません。実践してみようと思います。

いや、勉強はしてるんです。paiza/hackerrank

ずいぶん、前の投稿から間が開いてしまいました。

 

勉強自体はしていて、paizaやhackerrankというサイトで勉強しています。

paizaのスキルチェックは、複数のクラスを使ったコートが提出できるんですね。登録してから数ヶ月、1つのクラスに全部書かないとエラーになると思っていました。

 

「えーとインスタンスって何だっけ?フィールド書くのってここだっけ?newってどうやるんだっけ?」とグーグル先生に教えてもらいながらクラスを2つ使って書いています。せっかくなので、今日paizaでやらかしてしまったバグについて書こうと思います。

 

細かく書くと規約違反になるみたいなのでざっと書くと

----------------------------------

Main クラス

Scannerで入力の読み込み

処理

処理

......

 

もう1つ別のクラス

Scannerで入力の読み込み

処理

処理

......

----------------------------------

 

みたいなコードを書くと、nosuchelementとかいうエラーが出てしまいました。不思議なのが、IDEで一行ずつデータを入力したときにはエラーが出ないのに、一度にまとめて入力するとこのエラーが出ると言う点でした。

 

以下のことはあてずっぽうで言っているから正しいか分からないので、あんまり当てにしないでくださいね。

 

たぶん、一度にデータを入力したときには、Mainクラスの方のScannerにデータが読み込まれてしまっていて、もう1つのScannerにデータが来ていなかったんじゃないかと思います。それで入力データが足りなくなり、nosuchelementエラーが出たのだと思います。入力データの読み込みをMainクラスのみでするようにしたら、エラーは出なくなりました。

 

『「スレッドセーフ」に気をつけないと、プログラムが予期しない挙動をするときがある』って聞いたことがあるのですが、こういうことなのでしょうか。グーグルで出てきたスレッドセーフの説明を読んでも、分かったような分からないような...「そうだよ!そういうことだよ!」「何言ってんだぼけ違うわ!」分かる人がいたらコメントをいただけるとありがたいです。

 

それにしても、他のpaizaで勉強している初心者って分からなかったらどうしてるんだろう...規約では「他の人からアドバイスをもらってはいけない」ということになっています。問題の答えそのものじゃなくて、例えば特定のクラスのメソッドの使い方ぐらいだったらいいんでしょうけど、どこまで聞いて良いのかよく分かりません。

 

 

勉強法の教科書(3)

先週知ったんですが、はてなブログって単一のアカウントで複数のブログが作れるんですね。

 

もう一つ別にブログを作って、そちらは自分だけが読めるようにしました。細かく書くと身バレしそうな内容については、そっちのほうに書いて整理します。色々考えたことがあっちこっちにあると訳が分からなくなりそうなので、はてなブログのこのアカウントで整理していくことにします。

 

この間書いた計画について、非公開の方のブログで整理しました。結構時間がかかりました。本来、そっちが済んでから勉強を始めないと駄目でしたよね...

 

まぁ、気を取り直して、今読んでいる本のまとめの続きです。

 

勉強時間の増やし方

他の章もそうなんですが、単純なことなんだけどそれはきちんと考えていなかった、という点が多々あって勉強になります。

 

勉強方法を増やす方法は

 

1.勉強以外の行動の時間を減らす

2.今まで勉強してこなかった時間に勉強するの二通り。

 

その2は、二通りに分けられる。

 

2a.ながら勉強をする(テレビを見ながら、通勤しながら、料理しながら)

2b.細切れ時間に勉強する。

 

理解をするのはある程度まとまった時間がかかるから、2のやり方で増やした時間には向いていない。勉強セットには複数の教材を用意しておく。ある程度まとまった時間が要る教材と、隙間時間に出来る教材。

 

今の私は、勉強方法をちょっと見直してみよう、と言う段階です。なのでこれで言うと、本を読み進めていくのは隙間時間でも出来ます。  それを振り返って、自分なりに理解したり、今のように自分の言葉にしてアウトプットすると言うのはそれなりにまとまった時間があったほうがいいと思います。

 

この、まとまった時間が要る勉強、隙間時間で出来る勉強というのは意識してこなかったので、これからは注意しようと思います。

勉強法の教科書(2)

今読んでいる本のまとめの続きです。

 

この章は、計画の重要性と計画の立て方についてでした。前の章もそうでしたが、言われてみれば当たり前だけど、意識していなかったかなって言うことが書いてありました。

 

この章について突っ込んで書くと身ばれしそうなので、細かい内容は自分のノートに書くことにします。

 

  1. 目標を立てる
  2. 現状を知る
  3. (目標が大きければ)目標を細かくする
  4. 達成手段を考える
  5. 達成手段の実行順を考える
  6. スケジュールを立てる

といった順で計画(=目標達成のための手段とその実行順)を立てよう内容でした。考えてみると情けなるくらい、見切り発車で勉強を進めていたな~と思います。反省。