アキヒロの日誌

新社会人一年目の記録

c言語学習7日目

今日も進捗報告をさせていただきます。

 

c言語の学習を始めて今日でちょうど一週間になりました。

ここで改めて、学習の目的をはっきりさせておこうと思います。

目標:
c言語の基本的な文法を理解し、自分である程度のプログラムが書けるようにする(研究のための道具の使い方を学ぶ)。
高速に処理されるプログラムが書けるようになりたい。
c言語の知識を流体シミュレーションに生かしたい。
目標までの道筋:
・「cプログラミング入門以前」→コンピュータの基本的な知識を養う
・「cの絵本」→c言語の基本的な文法を理解する
・「苦しんで覚えるc言語」→cの絵本で足りないなと思ったところを補填する、基礎文法の全体把握
・「新・明解c言語入門編」→苦Cで分からなかったところの解釈、cプログラミングの練習問題を解く
・研究を少し始めてみる
→研究で必要なc言語文法の把握、必要な熱流体関係の専門知識の把握をする(理解しようとすると自分だけでは限界がありそう)
・フロースクエアで流体シミュレーションの雰囲気を掴む
現状:
・「cプログラミング入門以前」→一周した→理解が足りていないところもありそう
・「cの絵本」→c言語の基本的な文法を理解する→説明不足な部分もあり深い理解は得られていない
「苦しんで覚えるc言語」→ポインタ学習中
 
 
このような感じで、目標、目標までの道筋、現状を書いてみました。改めて可視化しておくことで、PDCAサイクルが回しやすくなると思います。あとは実行するだけです!!
 
 
 
 
 
 
 
 
 
 
今日は本格的にポインタの学習に入りました。
研究で扱うかは分かりませんが、c言語では重要な概念らしいのでとりあえずやってみたという感じです。
 
進捗の詳細:
「苦しんで覚えるc言語
15章
・ポインタという単語
 →ポインタとはアドレスを扱う3つの機能の総称→ポインタ型、ポインタ値、ポインタ変数
・ポインタ変数を実際に使ってみる
 ・&によるアドレスの代入 
 ・*によるモードの切り替え
→ポインタ変数の使い方は、ショートカットとして使用する
・引数による情報の受け渡し
 ・ポインタ型の引数
 →ポインタ型の引数を使用する場合、2つ以上の情報を返すことが出来る
 →戻り値を使う場合、常に1つの情報しか返すことが出来ない
 ・配列型の引数(→正直理解が難しかった)
 →配列型の引数は、
  ①素数が完全に無視される
  ②関数内で配列の値を変えると呼び出し側まで変化する
 →関数には配列ではなく配列の一番目の要素のアドレスを渡しており、配列型の仮引数をもつ関数宣言はポインタ変数の宣言になっている。
・配列とポインタの関係
 →正直本質がつかめない→もう数回読んでみる必要があるかも
 
 
 
 
わからないこと:
「ポインタの本当の使い方は、ショートカットとして使用することです。Windowsのデスクトップに並んでいる、あのショートカットと同じです。ショートカットは、どこか別の場所にあるファイルを指し示すファイルです。ショートカットを開けば、その指し示しているファイルが開かれます。にも関わらず、ショートカットは指し示すファイル自体ではないので、ショートカットはどこにでも自由に作ることが出来ますし、複数個作ったり削除したりしても、指し示すファイルには何の影響もありません。これこそが、まさにポインタの役割そのものです。ポインタ変数に、実際に存在する変数のアドレスを記憶しておけば、そのポインタ変数が使える場所であれば、元の変数が使えない場所であっても、ポインタ変数を通常変数モードに切り替えれば、元の変数と同じく使うことが出来ます。
まさに、ショートカットのような働きをさせることが出来るわけです。」(「苦しんで覚えるc言語」より引用
↓↓↓
Q:そのポインタ変数が使える場所元の変数が使えない場所はそれぞれどこなのか???
 
②動的なメモリ確保とは何か
 
③ポインタ演算のメリットは何か
 
 
 
感想:
正直なところ、今日は分からなかった事が多数あり、また、分かっていないこところが分かっていないという印象を受けた。
まだまだポインタについては学習の余地があるかなと思う。
今日の最大の学びは、関数を使用する時に、ポインタ型の引数を使用することで2つ以上の情報を返すことが出来ることである。又、戻り値を使う場合は常に1つの情報しか返すことが出来ないということである。
 
 
今後:
c言語学習で過去に分からなかったことを列挙してみる
→今後の細かい学習方針(手順など)を考えてみる
 
 

f:id:programingchance:20181217220233j:plain

痒いところに手が届く本だと思います。初心者に非常にオススメです!!
 
 
 
 
 
 
 

c言語学習6日目

 

今日もc言語の学習進捗を報告していきます。

現在は基本的に、

Cの絵本 第2版 C言語が好きになる新しい9つの扉

Cの絵本 第2版 C言語が好きになる新しい9つの扉

Cの絵本 第2版 C言語が好きになる新しい9つの扉

 

 

で勉強しています。

今日はcの絵本で説明不足だなと感じたところを

苦しんで覚えるc言語

苦しんで覚えるC言語

苦しんで覚えるC言語

 

で補填しながら学習を進めました。

それでは記録していきます。

 

 

下線部:メモ、大事だと思ったこと、気付き、など

太文字:分からなかったこと

構造体
→複数の型の変数をひとまとめにしたもの
構造体の作り方
・構造体とは何か
・構造体の宣言の仕方
 ・構造体テンプレートの宣言
 ・構造体変数の宣言
 →書き方が二種類ある
・構造体の初期化の仕方
・構造体メンバへのアクセスの仕方
・構造体とポインタ
・構造体と配列
 
わからないこと:
ポインタを利用するメリットや利用法
→なぜアドレスを値とする変数(ポインタ)を定義する必要があるのか??
目標:ポインタがなぜ必要なのか理解する
「15章 ポインタ変数の仕組み(苦しんで覚えるc言語)」
・メモリとは
・アドレスとは
・変数とメモリの関係
→「変数と配列がどのようにメモリに格納されるか」
→配列名は配列の最初の要素のアドレスを表している
→変数のアドレスが必ずしも連番にならないことを確認した
→配列の要素のアドレスは連番になっていることを確認した
 
・変数や配列(要素)のアドレスを表示する必要性
c言語の関数の仕組みに関係しているらしい
 ・関数について 11章(苦しんで覚えるc言語
  ・プロトタイプ宣言
  ・自作関数の呼び出し
  ・関数に数値を渡す方法→実行した
  ・関数から数値を返す→戻り値を返す関数のプログラム→実行した
 ・「値渡し」と「参照渡し」の違い→よくわからない→とりあえず「15章 ポインタ変数の仕組み」を読み続けてみる
 
15章(苦しんで覚えるc言語
・ポインタという単語
 →ポインタとはアドレスを扱う3つの機能の総称
 →ポインタ型、ポインタ値、ポインタ変数
 

 

f:id:programingchance:20181204171359j:plain

ついに最終章を迎えました!

f:id:programingchance:20181217220233j:plain

cの絵本の補填にはうってつけの本だと思います!

 

 

「神・時間術」の要約と感想!

土日を使って「神・時間術(樺沢紫苑著、大和書房)」を読みました。

以前に「東大読書(西岡壱誠著、東洋経済新報社)」を読み、そこで学んだことを実践しようと、今回初めて「神・時間術」の要約と感想を書いてみました

僕が東大読書で学んだことの一部がこちらの2つです。

①要約をすることで読書内容を長期に記憶する事と情報を取捨選択する事が出来る。

②自分なりの感想を書くことで著者と議論することが出来る(=自分の中に新たな柱を立てるイメージでしょうか)。

今回この2つを意識して書いてみました。

 

~要約~

本書は、「集中力」を中心に時間を考え、その集中力をリセットして時間を生み出し、「アメリカ式の仕事効率」を手に入れ、「自己投資」のために時間を使い、平等に与えられた24時間という時間をいかにハッピーに過ごすかについて書かれた本になっています。より詳しい内容を下に記述しました。

①「集中力」を中心に時間を考える
初めに、
・仕事や作業を「集中仕事」と「非集中仕事」に分類する。
次に、
・「集中仕事」は集中力の高い時間帯に行い、「非集中仕事」は集中力の低い時間帯に行うようにする。
つまり、
・変に集中力を高めようとしない。 
特に、
・朝に「集中仕事」をする。
なぜなら、
・朝の時間は夜の4倍の価値があるから。
 
②「集中力」をリセットして時間を生み出す
初めに、
・1日を「集中力×時間=集中時間」の二次元で考える
次に、
・昼からは適切なタイミングで「休息」を入れ、疲れる前に休む。
結果的に、
・同じ時間でも集中力を高く維持できれば、集中時間を伸ばすことができ仕事が捗る
それでも疲れてしまったときは、 
有酸素運動をしてリセットする。
また、仕事や作業が多いからといって
・睡眠時間を削ることは絶対に良くない。
なぜなら、
・翌日の集中力が下がり集中時間が短くなり、更に仕事が終わらなくなり、睡眠不足になるという負のスパイラルに陥るため。
 
アメリカ式の仕事効率を手に入れる
知っておきたい事実として、 
・日本人は勤勉と言われてきたが、世界的に見て労働生産性OECD加盟34カ国中22位と、精神国の中でもダントツの最下位である。
しかし、
・日本のGNP(国民総生産)は世界第三位である。
つまり、
・効率が悪い分、長時間労働でカバーしてきた事実がある。
だから、
・日本人の「労働生産性」はまだまだ上がる余地が残っている。
目的は、
・効率を上げて長時間労働から解放すること。
 
④「自己投資」のために時間を使う
初めに重要な認識として、
・自由時間は「仕事以外」に使うとよいということ。
なぜなら
・自由時間に仕事をする習慣がついてしまうと、休むことを忘れ必ずいつか病気になるから。
つまり、
・仕事の「時間」ではなく「質」を意識しよう。
↓↓
自由時間は「自己投資の時間」にしよう
自己投資について:
(1)メインスキル
・短期スキルと長期的スキルを分類しよう。(短期スキル:目の前の仕事で必要なスキル、長期スキル:将来役に立つと予測されるスキル)
・短期スキルに集中し、仕事を効率化させ、自由時間を生み出そう。
・生まれた自由時間を使って、長期スキルを磨こう。
・短期スキルと長期スキルで生まれた自由時間を使って、更にスキルを磨こう。
→この自己成長のスパイラルを作ることを目標にしよう
(2)娯楽
・自分が普段何気なくやっている娯楽を、「受動的娯楽(テレビなど)」と「能動的娯楽(読書やスポーツや楽器の演奏など)」に分類しよう。
・娯楽を受動的娯楽から能動的娯楽に変える
そうすると、
・(能動的娯楽は)集中力や脳のトレーニングになる。

 

 

~感想~

感想を箇条書きにします。

・本書の言うとおりに行動できれば、普段過ごしていた時間を二倍にも三倍にも出来ると思う。
・これを自分なりに考え出して、毎日実践し、結果を出している著者が素直に凄いと思う。
・(時間がある)学生である僕が、(時間が無い)社会人になる前に、知っておいて損はない事が散りばめられていて、とてもためになった。
・沢山の脳科学的に立証されている時間術が書いてあるが、全部実践しようとするとそれに疲れてしまいそうだから、出来そうな術から実践していき、その効果を体感し、余裕が出来てきたらどんどん学んだことを実践していくことをオススメしたい。
「うつ」などの精神疾患に悩まれている方にはオススメしない内容もある。
・自分が抑うつで休学してしまった理由が、よりはっきりした気がする。
・時間がこんなにも無駄になっているということを、具体的で比較的大げさな文章で書かれているところに少しばかりの疑心を抱いた。
・それぞれの時間管理術に対して科学的裏付けがあり、よくある「自分の経験上は~」という本よりも信頼性が高い本だと思った。実践法とその裏付けがはっきりしている本はかなり貴重だと思う。しかし、その科学的裏付けも更新していくので最新情報には目を光らせておきたいと思ったし、科学的裏付けの真偽も余裕があれば自分で調べたいと思った。
・自分は何でもかんでも科学的な裏付けが取れていないと、気が済まない性格だという事が分かった。

 

 

f:id:programingchance:20181215204526j:plain

初めての書評です!

 

 最後まで読んで頂き有難うございました。

また、更新します!

「神・時間術」を読み始めました!

樺沢紫苑氏の「神・時間術」を読み始めました!

読み始める前に、「東大読書(東洋経済新報社)」で学んだ、読解力を養うための仮説作りをしておきたいと思います。ここで言う仮説作りとは、読み始める前に読書全体としての読解のヒントを得る、言い換えると、大雑把な地図作りみたいなものです。

仮説作り:

①目標

理論的裏付けの取れた時間管理法を日々の生活に役立てたい。 

②目標達成までの道筋

「脳の機能を最大に生かす方法」、「朝・昼・夜の時間を最大に生かす方法」、「仕事時間の生かし方」、「自由時間の生かし方」を学べば目標達成。

③現状

・理論的裏付けの取れた、1日の利用の仕方を知らない

・効率的な時間の使い方が分からない

・朝のスタートの仕方が分からない

・昼食後の効率が下がってしまう

・夜疲れてしまってやる気が起こらない

・「集中」と「休息」の使い分けが正しく出来ているか自信がない

 

読み終わったら、「自分なりの気付き」、「これはためになったなという内容」、「これだけは覚えておきたいという内容」、「全体の感想」をまとめる予定です。

f:id:programingchance:20181215204526j:plain

神・時間術

f:id:programingchance:20181215205920j:plain

東大読書

c言語学習5日目

今日もc言語学習の進捗具合を記録していきます。

 

下線部:メモ、大事だと思ったこと、気付き、など

太文字:分からなかったこと

 

 

ファイルの入出力

・バイナリファイルの読み込みと書き込み
→実用性はあるのだろうか???どのような場面で使うのだろうか???
・キーボード入力
 キーボードからのデータの入力をしてそれをプログラムに反映させた
→「 warning C4700: 初期化されていないローカル変数 'a' が使用されます」というエラーの意味がわからない
→ローカル変数とグローバル変数の違いが分からない
 
集中時間:
45分×1、70分×1
 

f:id:programingchance:20181204171359j:plain

あと少しで終わります!もうひと踏ん張りがんばります!!

c言語学習4日目

今日も学習したことを記録しておきます。

 

 

下線部:メモ、大事だと思ったことなど

太文字:分からなかったこと

 

 

関数
・関数呼び出し方法2つ
 ①関数の定義→関数呼び出し
 ②プロトタイプ宣言(関数の仕様に当たる部分だけを抜き出したもの)→関数呼び出し→関数の定義
・引数の受け渡し
 ・実引数と仮引数
 ・値渡しと参照渡し
 →違いは実引数の「値」か「アドレス」かを仮引数に受け渡す事。
 →→参照渡しは呼び出し側の値を変更することが出来る←どういう意味???
 
ファイルの入出力
・ファイルの読み込み
・ファイルの書き込み
ファイルの読み込みと書き込みがサンプルコードのように書いても出来ない
fopen_s関数について理解したら解決出来た
→ファイルポインタのイメージが湧かない
→FILE構造体とはなんなのか??
 

f:id:programingchance:20181204171359j:plain

後半戦に突入!!

c言語学習3日目

昨日と今日で学んだことを記録していきます。

 
章の名前
・学習した内容(ざっくり)
 ・内容の詳細
メモ、気になったり、知らなかった内容
→疑問に思ったこと
 
 
 
配列とポインタ
・配列とは
同じ型の変数を一つにまとめたもの
・文字列配列
文字列は複数の文字の集まりで、これを格納するには配列使う
・文字列の操作
文字列配列を編集するには文字列関数を使うと便利
・多次元配列
多次元配列をどのような実用性があるのだろうか??
・アドレスの表示
何のためにアドレスを表示させるのか
・ポインタ変数の作り方
ポインタは、変数などが格納されている位置(アドレス)を値とする変数である
・NULLポインタ
 ポインタ使用上の注意点
ポインタを利用するときは必ずその値が指し示すアドレスにデータが存在している必要がある
 ポインタの初期化:NULL
プログラム中でどこも指し示していないことをはっきりさせることが出来る
・ポインタと配列
配列の名前そのものは、配列の最初の要素を指し示すポインタの役割をしている
 例)int a[4];→*a==a[0]
 他にも、ポインタを使った配列の参照を学んだ
・動的なメモリの確保とポインタの活用
 ・静的なメモリの注意点
 →変数や配列の宣言により、「自動的」にメモリ上にそれらの領域が確保される
 →画像を扱うプログラムなどは沢山のメモリを用意する必要がある場合があり、最悪、プログラムが止まってしまうこともある
 ・動的なメモリとは
 →「プログラムの処理として」、メモリを確保する
 ・動的なメモリの確保について実際の手順を学んだ
 →①メモリの確保②メモリの利用③メモリの解放
 ・メモリの内容を操作する幾つかの関数について
  memcpy関数 メモリの内容をコピーする
 
関数
関数の定義
 ・関数について
 →処理の材料となる値のことを引数(パラメータ)、結果の値のことを戻り値(返り値)という。
 ・戻り値や引数を持たない関数の記述
 →voidを利用する
・関数の呼び出し
 ・戻り値を持たない関数の利用の仕方
 ・戻り値を持つ関数の利用の仕方
・変数のスコープ
 グローバル変数とローカル変数の使い分け
 どのように実用性があるのか??
 
 
 

f:id:programingchance:20181204171359j:plain

中間地点まで来ました!