プログラミング初学習者とPython

# 初めに
Qiitaへの投稿が約半年で、Python等の学習を始めて1年たったので、

Pythonに感じたことをまとめてみようと思い立った次第です。

今までプログラミングなんてしたことねーぜ！や

パソコンなんてネットサーフィンとかofficeくらいしか触らねーぜ！って人が

プログラミングをやらなきゃなーってなった時の心構えです。

余談は主に一年でしたこと~~無駄話~~なので、『初学習者とPython』だけでだいじょーぶです。

# 初学習者とPython
###Pythonに感じたこと
1年ほど勉強して断言できることは、Pythonは言語の学習には向いていないということ。

言ってしまえばRuby on Rails界隈のRails便利問題と本質的には似ていると思います。

Pythonは基本的な理念からして冗長的なプログラムを書くくらいなら、

モジュールを組み合わせて短くて見やすい物を作ろうというのが推奨されています。

そのため、単純に利用する・使うという観点ではPythonは一番学習コストがいらないと思います。

言語ではお手軽さ最強と言えるでしょう。

そうした流れからモジュールの中身の動きについて解説された日本語の本が少ない。

それこそ私は、オライリーメディア(鈍器で辞書)くらいしか知りません。

本場が英語だから全部英語で調べるんやで、と言えばそうでしょうけど。

（　＾ω＾）・・・初学習にはハードルが高すぎるんだよなぁ。

追い撃ちを掛けるようにリスト内法表記によりソースコードの解析のハードルも高いです。

~~Fortranを見習ってほしい~~

### Pythonとの付き合い方
それでも、もしPythonで言語の学習がしたいなら、他の言語と併用することをお勧めします。

良い所取り、あるいは変則的な段階の踏み方と言えると思います。

私の場合ですと、パソコンの中身の動き(メモリーとかビットとか処理関連)→C言語

関数とかサブルーチン、副プログラム等の考え方→Fortran90 ~~これいる?~~

GUIアプリケーションの構築→C#

機械学習に用いる大本の統計学→R

概略なりを学んで理解度のチェックに各々をPython用にプログラムを書き換える、とかをやっています。

データベースを作るのにPHPとPeal、SQLの三つ学習するのに似てる・・・似てない?

人によってはどっちつかずになると思うかもしれませんが、そうでもありませんでした。(※私見です)

初学習と言うのは何でもそうですが、視野が狭くなりがちで、壁に一回はぶち当たります。

ぶち当たって解決できず挫折と言うのは誰しも経験があると思います。

挫折が起こる一番の原因って面白くなくなるからだと思うんですよ。

面白いうちは挫折じゃなくて乗り越えられる壁とみているわけで。

だから、嫌になったら息抜きをすればいいの精神でいいと思います。

その選択肢を増やすために色々やってみるという感じでしょうか。

それに何がいいって、案外Python以外の別の言語の方が性に合ってるかもしれませんし、

ちょっとしたひらめきで越えられないと思ったものが越えられるかもしれません。

更にPythonってモジュールが充実していることもあって、

別言語のプログラムであってもねじ込めたりするので、無駄にはならないというのも非常に利点です。

ただ一つだけ注意点があるとすれば軸はきちんと決めることだと思います。

何のためにそれをするのかを考えることが大事です。

これから初めての言語学習にPythonを考えているのなら、

論文のcommunicationを読み解く感じの気概があった方が良いでしょう。


<br>
<br>
# 余談

### 切っ掛け
私がプログラミングを学ぶようになったのは研究が研究だったの一言に尽きます。

いや、語弊を生むとあれなので一応言っておきますが、

それを学ばないとダメとかそんなことはないです。

シミュレーションと言ってもグラフィカルなソフトを使っているので・・・。

それでも、中身を理解せずに使うことに強烈な忌避感を覚えてしまったんですよ。

言ってしまえば精神衛生状の問題というやつです。

それと何しか時間があったというのも大きな要因だったとは思います。

初っ端からシミュレーターのソースコード解析は難しいだろうと思い、

先輩のすすめ等によりPythonを学習することで、プログラムの基礎を学ぼうとしました。

なお、先輩から学んだことは

```Hello_World.py
print("Hello World")
```
だけの模様


### CheckiO
いざプログラミング！と張り切ったものの右も左も分からない、一寸先は闇状態。

教本でも買おうとおもったのですが、資格等での手ひどい経験から慎重になり過ぎて、

結局買わないという選択をしました。

言い訳をさせてください。プログラミングの教本って丁度良いのがなくないですか？

文字だらけの情報ぎっちりか、見やすさに極振りして内容ペラペラみたいな・・・

まぁ何がやりたいのかもあやふやだったのも原因だとは思うのですが。

そうしてフラフラしているとインターネットの無料講座に行き着くわけですよ。

pi〇a の無料レッスンをしゃぶり尽し、やることが無くなってCh〇ckiOにたどりつきました。

『Python 初学習』とかで検索するとよく出るやつです。

**罠です(断定)**

初学習ならC〇eckiOなんぞをやるならペラペラでも何でもいいので教本買って写経してください。

難易度がおかしいですよ。

がっつりリスト処理を連打させるとか無理無理無理。

難易度的には本一冊終わらせてからが丁度いいと思います。

わけわからなさ過ぎてネットに転がっている解答を組み合わせて問題を解いていました。

コピペの連打の上に、出回ってる解答ってリスト内法表記とか高度なことし過ぎて理解できないんですよね。

```even.py
def checkio(array):
    """
        sums even-indexes elements and multiply at the last
    """
    if len(array)>1:
        a=sum(array[0::2])
        l=array[-1]
        return (a*l)
    
    elif len(array)==1:
        a=array[0]
        return (a**2)
    
    else:
        return (0)

#These "asserts" using only for self-checking and not necessary for auto-testing
if __name__ == '__main__':
    assert checkio([0, 1, 2, 3, 4, 5]) == 30, "(0+2+4)*5=30"
    assert checkio([1, 3, 5]) == 30, "(1+5)*5=30"
    assert checkio([6]) == 36, "(6)*6=36"
    assert checkio([]) == 0, "An empty array = 0"
    print("Coding complete? Click 'Check' to review your tests and earn cool rewards!")
```
assertってなんやねん、関数に慣れてなくて違和感しかないです。

解くため使った3,4時間の殆どが検索時間に消えるとか効率悪すぎて草も生えない。

後、HomeではなくElementaryの方が簡単とか初見で誰が気付くか！

そんなこんなでHomeとElementaryの問題を全部解いた頃には2,3か月経過してました。

ここの辺りで関数とかclassとかの概念を学ぼうとしてスピンアウトしました。

### CentOS
そんなこんなで (^o^)<うわぁーっ! していると、件の先輩からCentOS勉強しろよの辞令が。

本題はファイル操作を覚えるということでした。~~てめぇの仕事を押し付ける気やな?~~

でHDDを一台貰って、CentOS7を見よう見まねで入れたんですが、graphic関連で問題が出ました。

GPUでシミュレーションをしようとしてドライバーが入らないという事故。

その時はyumを使って強引にドライバーをインストールしたんですが、

今度はXサーバーがくたばるという事態に。

今でもどうすれば良いのか一切分かってない。

ネットを駆使して探していたんですが、似たような事例がほぼなしというネ。

で、ドライバーのインストールができなかった理由は分かりました、最近。

計算機を一台仕上げることになったのが切っ掛けでした。

管理者とログインユーザーを分けていること等が原因でPathが通っていなかったんですよね・・・

ibintlc.soとかlib~.soとかが出たら多分Pathやらなんやらなので、

```Cent.conf.d
#ldd `which svn`　     !で確認して
#cd /etc/ld.so.conf.d/
#touch ***.conf
***.confに
/***/***/~             !Pathを書く
#ldconfig
#ldd `which svn`
```
とかすれば何とかなると思います。

1か月かけてtcshシェルによるファイル名の一括変更等のファイル操作を覚えました。

~~この頃に先輩は雲隠れしました~~

### Fortranと競技用プログラミング

結局、Pythonでは言語の学習等が困難だと理解し始めたわけですよ。

この時はモジュールってなんやねん！とか、ブラックボックス化しすぎぃ！とか、

Pythonに不平不満がたらたらでした。その上、関数に違和感しかなくてついには使わず嫌いを発症。

そこで目を付けたのがFortranでした。

私が使っているプログラムの主要部がこの言語で書かれていることもあって、この言語の学習を始めました。

今思えば本題がシミュレーターのソースコード解析だったのをこの時に思い出しました(ぐるぐるおめめ)

蓋を開ければ異常に書きやすく、理解のしやすい言語でした。

~~ただし77は絶対許早苗、特にループてめぇだよ！~~

サブルーチン、関数副プログラム、関数等の概念の学習には非常に向いています。

この言語の学習中にchokudai氏のforとifできれば競プロできる、みたいなインタビューを見つけたわけですよ。

氏が言いたいのはソコじゃないことに ~~最近~~ 気づいたんですけど、

単細胞には、ifとforできる＝競プロできる＝強 そ う(小並感) となりました。

そうしてFortranでyukicoderを解き始めました。

結局、キャラクターの扱いがFortranでは難しくてPythonとの併用でしたが。

```18.py
S=list(input())
D=[]
for i in range(len(S)):
    a=ord(S[i])-i-1
    if a<65:
        while a<65:
            a += 26
        D.append(chr(a))
    else:
        D.append(chr(a))

print(''.join(D))
```
```18.f90
implicit none
character(1024) S
integer(8) A,i
read(*,*) S
do i=1,len_trim(S)
     A=ichar(S(i:i))-i
       do while(A<65)
          A=A+26
       end do
     S(i:i)=char(A)
end do
write(*,*) S
end
```
この辺りからPythonで書いてからFortranに直すとか、逆の操作をすることをし始めました。

これが契機となってPythonの学習方法が分かり始めました。

### 統計とアプリケーション
色々な意向により機械学習と、分子のモデリングソフトの作成、二つの課題が最近のメインとなりました。

そこでC#とRが勉強に追加されました。~~やったねたえちゃん言語が増えるよ~~

C#はGUI的なアプリケーションの作り方、フレームとウィジェットの関係とかの学習。

Rは統計の考え方の学習に利用してます、なおロトシックスの分類を題材にしている模様。~~一攫千金~~

で、全部最終的にはPythonに落とし込む・・・期限が7月とかほんとひで

以上！