40代からのプログラミング_(初心者奮闘記)

プログラミングに関する学習メモ

前置 後置 インクリメント演算子

# prefix increment operator (e.g → ++x)
// first increases the value by 1 and then uses it
// increase then use.
 
# postfix increment operator (e.g → x++)
// first uses the value and then increases it by 1,
// use then increase.
 
# 実際のコードで視覚的に理解するほうが早い
 
{
    int i, j, k;
    i = 3;
     j =2*(i++);    // i=4,j=6
     k =2*(++i);    // i=5,k=10
}

ビット演算子のメモ

 
# 10進数を2進数に変換 (16進数も)
//   1 = 0000000000000001(  1)
//   2 = 0000000000000010(  2)
//   4 = 0000000000000100(  4)
//   8 = 0000000000001000(  8)
//  10 = 0000000000001010(  A)
//  15 = 0000000000001111(  F)
//  16 = 0000000000010000( 10)
//  31 = 0000000000011111( 1F)
//  32 = 0000000000100000( 20)
//  64 = 0000000001000000( 40)
// 100 = 0000000001100100( 64)
// 128 = 0000000010000000( 80)
// 159 = 0000000010011111( 9F)
// 160 = 0000000010100000( A0)
// 255 = 0000000011111111( FF)
// 256 = 0000000100000000(100)
 
※1,2,4,8bitを覚えれば、あとはパターンで導けそう
 
# bit shift
// 下記に練習、sample
 
{
    int x=5;    // 0000000000000101
    printf("%d,%d,%d",x,x<<2,x>>2);
    // 0000000000010100 = 20 (x<<2)
    // 0000000000000001 =  1 (x>>2)
}
 

初心者の壁、「オブジェクト指向」

// Simulaが元祖
// Smalltalkの「メッセージング」が本来の意味
// Object-Cはsmalltalkを拡張した言語
// swiftはObject-Cをさらに拡張した言語
 
でもオブジェクト指向を学ぶのは
swiftよりもjavaな気がする。
それは、swiftで洗練(省略)された箇所を
pablicやpriveteのように常に明記する必要があるから。
 
# オブジェクト指向の重要な概念
// 生成 → 処理 → 消滅のサイクル

f:id:candela:20190113101043j:plain

OOP lifetime

 

言語ごとのメモ。
 
# C++
// けっきょくここから学ぶのベストの様子
// 情報も多い(ほぼ英語資料だが...)
 
// 全てオブジェクトで構成されている前提
// インスタンスの呼称は使わない
// prototypeの概念が大事
 
#Swift
// インスタンスと呼ぶことを強調
// オブジェクトと呼ばない。ニュアンスが違うらしい。

紙と鉛筆

私は現在、メモ帳や手帳を持っていない。
記録しておくことはデバイスクラウド上に、テキストや画像で保管。
資格試験を勉強する時でさえ、紙に文字を書くことはもう無い。
例えば...文字はEvernote、図はkeynote、数はexcel(or numbers)
といった具合で把握する。

そんなデジタルなスタイルだったが
抽象的概念は、簡単な図などを紙に書くほうが
手軽で分かりやすい。(私にとって、はっと気付いた衝撃の事実...)

======
@プログラミングで気づいた事
# 思考は、タイピングより紙に書くほうが早くて分かりやすい
# 抽象的なことを理解するには、抽象的でも形にしたほうがいい

@思考を阻害するアクション
# cordingのルール(bracketやsemicolonの位置を考える等)
# tabや改行でコードの整形(単なる作業に頭を使ってしまう...)

@ラフに書いて俯瞰するには
# 四角(箱)や矢印などの図形を描く
# 文字はif thenやfor toなど、英語で表記(あとで理解しやすい)
# フローチャートのような、格式張った書き方は不要
======

特に複数の変数に数字を入れ替えていく作業などが理解しやすい。
(Euclid's algorithmの理解に役立った)

累乗(べき乗)に関してのメモ

# 「^」 この記号
# circumflex
# 合わせて覚えておくのは、superscript
# 英語で意味を調べると下記
Raises a number to the power of another number.
(raiseとpowerがキーワード)

======

c, swift

// pow(x,y) => raise x to the power of y
// cはmath.h が必要、swiftはCocoaで大丈夫

java, go

// math.Pow(x, y)
// まさにオブジェクト指向な書き方

javaScript, python, perl, ruby

// x**y
// 直感的に、すぐ計算できるのが良い
// pythonSyntax3.7.2には「powers」とシンプルに表記
https://docs.python.org/3/tutorial/introduction.html#using-python-as-a-calculator

VBA

// x^y (circumflex character)
// エラーになる場合があるそうだ、ただの演算なのに...
// ExcelのPower関数を使うのが無難
application.worksheetfunction.power(number,power)

======

各言語ごとのコンセプトが
少し分かったような気がする
(VBAは、%がModなのも謎…)

初心者なのに複数の言語を学ぶ理由

# 単純に興味本位から。
# 違う角度から見ると分かりやすい気がする
# 誰もが違う言語を初級者へ薦めるので、それぞれ試したい

各言語を選んだ私なりの理由は下記。

# C ;
// 根本的な仕組みが理解できる
# javaScript ;
// インターネットの時代的に必要らしい
# swift;
// iOSアプリを作れる
# go(golang)
// googleが作ったから分かりやすそう
# VBA;
// excelで色々できる

ハッカーになろう」のEric S. Raymondによると
Python, Java, C/C++, Perl, LISPを学ぶのを推奨しており
私の脳がいつまでエンドルフィンを分泌し続けられるのか...
以下、一行コメント

# python;
// シンプルで初心者向きだが、applegoogleも採用していた
# java;
// コードが冗長に見えるが構造体の根本を理解しやすそう
# C++;
//cを理解する手段の一つとして学びたい
# perl;
// 作法を知っておく方がいいらしい(だからこれは最後かな)
# LISP;
// SICPを読み解くのに必要

最終的に、下記に絞っていくだろうと予測。
C, java, python, javaScript, swift, VBA

以上、まだモチベーションの高い初心者なりの所見。

FizzBuzzで腕試し

プログラミングを勉強し始めて約2ヶ月。
for, while, if, arrayを理解したところで
下記を参考にfizzbuzzに挑戦。
https://www.youtube.com/watch?v=QPZ0pIK_wsc

動画で役に立ったのは
# 式を分解しながら小さい単位で実行するところ。
# 1から100までをざっと表記する
# fizzbuzz(i%15==0)だけ表記する
ここまで紐解いてないと初心者には分からない...

以下、何種類かの言語で試してみた。
swiftはXcode、goはgolang.org、それ以外は下記で実行
https://www.tutorialspoint.com/codingground.htm

c;
// まずはc言語で理解

JavaScript;
// ifで&&を囲むのに2重になる...に辿り着くまでハマった
// console.logが使えず、document.writeを使用

swift;
// for文で(for i in〜)の記述に戸惑いを感じた
// (int = i; i < number; i++)のほうが分かりやすい。

VBA;
// 他の言語と違い、メモ書きをそのまま記述した印象
// bracketsもsemicolonも無いのに不安を感じる

go(golang);
// 公式サイト(golang.org)の説明が分かりやすくとっつきやすい
// for内のround bracketsが無いのがVBAっぽさ、メモ書き感がある

以上、実際にコードを書くのは時間かかるが楽しい。
読むだけで理解したつもり...が実は出来てない事も実感できた。