はてなキーワード: 関数とは
微細化のロードマップはあるけども、昔のように微細化すりゃ安くなって性能も上がるってサイクルはなくなって、
電力を無視しようにも、コンセントの上限超えにぶつかっている。
GPUは性能上がっとるやろ、と言われるかもしれないが、そもそもメモリ側がバス幅も帯域も足りてない。
ゲームで超解像・フレームレートを上げるようなのは出来ているが、入力が低解像度で帯域が狭くてもよく、そのままディスプレイ側に出力するので通信帯域必要ないから出来ている。
レイトレも増えたと言っても、プロダクションCGでやるようなレイトレには程遠いし、一昔の映画のエフェクトすら難しい。
a = 1; // 変数aに1を代入する
みたいなのも書いて良い。コードが何してるか書いて良いし、関数の引数の説明とか戻り値の説明とかとにかくまずはいっぱい書く。日本語で良い。
コードを書いてる途中で自分が何を考えてたかなんかも書くと良い。(本当に関係ないことは除く。昼飯のこととか。)
すごい人たちが「コメントを書くくらいならコードをきれいにしろ」とか「コメントでコードの汚さを補うな」とか「コメントのメンテナンスが・・」とか言ってくるかもしれない。
それはそのとおりだけど、今は考えなくて良い。
まずはコメントを書くことを定着させて、大量にコメント書くことで必要なコメントと不要なコメントの判断基準を自分の中で作ると良い。
分類方法にもよるけど、プログラミングのパラダイム(考え方)は
の2種類がある。
それぞれに根拠となる計算モデルがあり、細分化すると4種類に分類できる。
パラダイム | 分類 | 基礎となる計算モデル | 言語 |
命令型 | 手続き型 | チューリングマシン | C、Java、Python、JavaScript |
宣言型 | 問合せ型 | 関係モデル | SQL |
宣言型 | 関数型 | ラムダ計算 | Lisp、Haskell |
宣言型 | 論理型 | 一階述語論理 | Prolog |
それぞれのグループで代表的な言語を1個ずつ順番に学んでいけば、全ての種類を一通り制覇できる。
例えば、
といった具合で。
各グループのどれか1個を知っておけば、同一グループの言語であれば仕様が似ているので、2個目以降を新たに学ぶときに、学びやすいはずだ。
自分が作りたいソフトウェアに合わせて、適したプログラミング言語を選べば良い。
など。
実用的なプログラミングを学ぶ場合は言語そのものだけでなく、周辺知識として、
アルゴリズム、ミドルウェア(フレームワークなど)、設計、テストなど、他の知識も必要になってくるので、
まずはPythonで一通り突貫して学ぶのが良いかもしれない。今なら教材が充実しているので。
いろいろ盛り上がってるけど、今学ぶなら何がいいのか建設的な話をしようじゃないか
20年以上前に聞いたことがあるのはC+だのプラプラだの、ビジュアルベーシックだの、フォートランだの、Javaだのだった
今なら何を学べば一番潰しが聞くのか。これを話してほしいと思う
特に国語なんかは、文章を読むという行為は親でもできることだから、「お前には国語力が無い」みたいなクソ発言をされたりしたので、嫌だった。(逆に、お前に古典や評論が読めるのか!と言いたかった)
社会、理科、英語も、新聞で政治面を読んだり、テレビで生物特集見たり、カタカナ語で単語だけ半端に知ってたりで、何かしら自分も知識があることを主張してくる(俺もその学問を知ってる風な発言。お前とは勉強時間や知ってる量が全然違うんだよ!知ったかすんな!!と言いたかった)ので、嫌になる可能性があった。
ただ、数学は違った。たしかに算数のころは、四則演算やら割合やらで、ああしろこうしろと干渉があったが、数学になってからはもう何も言ってこなかった。
連立方程式も2次関数も、親にはもう何もわからなかったのだ。そういう意味で、数学は親から干渉されない幸せな空間だった。
親の、半端で何も本質がわかっていない発言に、下手なダジャレを聞くようなイライラを感じなくて済んで本当に幸せだった。
だから、私が数学を勉強するという行為は、数学自体が好きだからということ以上に、そういう親からの独立手段のひとつだったんだろうと今は思う。
そして自然な流れとして、数学科に進学し、実家の近くにそのような学科は無かったことから、物理的にも独立して生活することができるようになった。
本当に幸せを手に入れることができたのだ。
まあ、結果として、数学の研究者になることはできなかったのだが、そういう点で今現在でも、数学という学問の存在に心から感謝している。
数学は、親という干渉物から逃れる精神的な支えであった。数学という抽象的な学問が、抽象的に私の人生を救ってくれたのだった。
つい最近エントロピーの増田記事を見たが、ワイもちょっとだけメモすんで。
ユニタリ量子力学を想定した宇宙論があるとして、系・観測者・環境という3者がそこに存在すると考えられるわな。
だから熱力学の第2法則は「系のエントロピーは観察者と相互作用しない限り減少できず、環境と相互作用しない限り増加できない」と言い換えられんねん。
観察者と系の相互作用については、量子ベイズ定理から得られるわけや。
宇宙論的インフレーションで生じる長距離エンタングルメントがあるが、宇宙エントロピーは観測された情報ビット数に比例するのではなく、指数関数的に減少して、特定の観察者が脳が保存できる情報量よりもさらに多くのエントロピーを減少させられるってわけや。
もうこのやりとりの時点でダメやん?
ダメじゃねえよ。要件を正確に記述できないならコードなんて書けるわけない。
空気読んでいい感じに読み取ってよというのを求めてるなら、仕様書すら書けないダメプログラマーってことだろ。
コンピューターの中では数字で日付は管理されててそれはJavaでは日付のオブジェクトとして表されるんだけど、「今週=現在の週の水曜日」を表すオブジェクトが欲しい
やったぞ
java.time パッケージの LocalDate クラスや TemporalAdjusters クラスを使用して、「今週の水曜日」の日付オブジェクトを取得できます。
以下のコードは、現在の日付に基づいて今週の水曜日の LocalDate オブジェクトを返す Java の関数です。
import java.time.temporal.TemporalAdjusters;
public static void main(String[] args) {
System.out.println(getThisWeeksWednesday());
}
public static LocalDate getThisWeeksWednesday() {
LocalDate today = LocalDate.now();
return today.with(TemporalAdjusters.nextOrSame(DayOfWeek.WEDNESDAY));
}
}
この関数は現在の日付を取得し、それを TemporalAdjusters.nextOrSame(DayOfWeek.WEDNESDAY) メソッドに渡して、今週の水曜日の日付を取得します。今日が水曜日である場合、それが返されます。それ以外の場合は、次の水曜日の日付が返されます。
今日が週内のどの日であったとしても(木曜日や金曜日であったとしても)その週の水曜日を表すオブジェクトを返す関数を示してください。
それには、今週の最初の日を求め、そこから水曜日までの日数を加算するアプローチを使用します。以下のコードでは、週の最初の日を月曜日と仮定しています:
import java.time.temporal.TemporalAdjusters;
public static void main(String[] args) {
System.out.println(getThisWeeksWednesday());
}
public static LocalDate getThisWeeksWednesday() {
LocalDate today = LocalDate.now();
LocalDate monday = today.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY));
return monday.plusDays(2);
}
}
このコードは、まず今日の日付を取得し、それから TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY) メソッドを使用して今週の月曜日の日付を取得します。そして、月曜日から2日後の日付(水曜日)を取得するために plusDays(2) メソッドを使用します。
普通の人のエクセル能力はそんなもん。正確に言うと「この処理って関数でできそうじゃね? て思いついて調べるやる気と検索能力がある奴」が激レア。
ちなみに他人の書いたマクロをメンテナンスできるレベルの奴にはそんなことさせるとコスパが悪くなるため、基本的にマクロでやってもいいのは、本当にそいつしかやらない、手作業だとクソめんどくさい単純作業的な処理に限る。
事務屋にやらせるなら可能な限り関数で完結させるべき。関数なら他人の作ったやつでもメンテナンスできる奴がまあまあいるから。