yumulog

北海道の大学教員/情報科学研究者の日記

卒論で書いたコードをgithubに上げてみた

前フリ

卒論の時(もう7年前かー)に書いた、レイリーテイラー不安定による電離圏プラズマバブル発生シミュレーションのプログラムをgithubに上げてみた。Fortran90す。

一部抜粋

! -- イオンの数密度 [1/m^3] の計算 --
  z1=(dble(z)*dz-zpeak+zbot)/HO(z)
! n1(z)=npeak*cos(chi)*exp(1.0-z1-exp(-z1)/cos(chi))

    do i=2,datanumn
      if (datan(1,i) > height) then
n1(z)=1.0e6*(datan(2,i-1) &
& +(height-datan(1,i-1)) &
& *(datan(2,i)-datan(2,i-1)) &
& /(datan(1,i)-datan(1,i-1)))

        goto 32
      endif
enddo

32 continue

! -- 中性大気の数密度 [1/m^3] の計算 --
  if (z==1) then
nneu(z)=Temp0/Tempn(z)*nneu0 &
& *exp(-0.5*mN*g/k*height*(1.0/Tempn(z)+1.0/Temp0))
  else
nneu(z)=Tempn(z-1)/Tempn(z)*nneu(z-1) &
& *exp(-0.5*mN*g/k*dz*(1.0/Tempn(z)+1.0/Tempn(z-1)))
  endif

! -- イオンと中性大気の平均分子量 [g/mol] の計算 --
  A=(16.*n1(z)+28.*nneu(z))/(n1(z)+1.0e10+nneu(z))

! -- イオンと中性大気の衝突周波数 [1/s] の計算 --
  nu(z)=2.6*(n1(z)+1.0e10+nneu(z)*10.0)/1.0e15/A**0.5

! -- 回転周波数と衝突周波数の比の計算 --
  ki(z)=e*B/mO/nu(z)

いや、goto 使うなよ!!ベタ書きせずにsubroutine使えよ!変数の命名も一貫性ないし、マジクソコードだわー。

本題

という風に「自分が過去に書いたコードをdisる」って、よく見かける。 自虐だから忌憚なくdisるんだけど、それを見た他の人(特にプログラミング初心者)は、「あー、こういう風に書いちゃいけないんだー」と思う。 それだけならいいんだけど、あまりにも「あれやっちゃダメ、これやっちゃダメ」を目にすると、自分がやったことをblogに書いたり書いたコードをgithubに上げたりするのをためらうようになる。

プログラミングって道具なので、どう使うのも自由、好きに書いたらいいじゃない。*1 過剰に萎縮してアウトプットの機会を損ねるのってもったいないよね。って話。

*1:仕事で使うとかチームで開発する場合には制約がないと破綻するのはその通り