はてなキーワード: c#とは
話題になっている、世界一流エンジニアの思考法という本を読んだ。
その中に「理解に時間をかける」というのがあったのだが、それがどうしても受け入れられない。
これがどのような考え方かというのは、ここに書いてあるので良かったら読んでみてほしい。
https://note.com/simplearchitect/n/n388201603a28
凄く引っかかるのが、
「今までは、実際にコードに触れないとわからないよね?と思っていたけど、そうではなくて、ドキュメントを読んでいて理解できない箇所がでてきたら、時間をかけて理解して進むようにした。」
というところ。
例えばだけどif文についてのドキュメントを1回読んで、
なんとなくこう動くんだろうなということが分かったとしたら、あとは動かしてみたほうが早くない?とか思ってしまう。
それとも、なぜC#のif文は{}で括っているのか、[]ではだめなのか?C#の成り立ちから調べよう!ということを頭の良い人たちはしているのだろうか?
ドキュメントがわからないときどこまで深追いをしていくのが「理解」なのかがわからない。
そして私みたいに頭が悪いと、一度深淵に潜り込んでしまうと二度と浮かび上がってこれないかもしれないという恐怖がある。
Visual Studioでコードを書いているが、そういえばVisual Studioのことを「理解」していないな。と思ったら最後、
Hello Worldを出したいだけなのに永遠にVisual Studioの領域から出ることが出来なくなってしまうのではないかと思ってしまう。
この本を読んで参考になった!理解に時間をかけることを恐れずにしよう!と言ってる人たちはどこまで時間をかけることを想定しているのか?
何なら死ぬまで理解に時間をかけてやろうというぐらい覚悟ガンギマリの人たちなのだろうか。
ほかの部分については言っていることがとてもわかるだけに、
わし「メールでよく使われるmbox形式のファイルを読みたいんや。dotnetならどうするといい?」
Bing先生「MimeKitとかMboxReaderという.NETライブラリがええで」
わし(ほーん、MimeKitええな。。。MboxReaderってどんなんやろ)
わし(あれれ、MboxReaderとかいう.NETライブラリは無いぞ・・)
わし「MboxReaderの詳しいところ教えてや」
どや」
わし「ほーん・・・?」
わし「MboxReaderとかいうライブラリって実在するん?」
Bing先生「するで。これや https://github.com/nodemailer/mbox-reader 」
今までだと嘘はすぐに破綻してたはずなのに、今度の嘘はなかなか破綻しないぞ・・・
今、「MboxSharp」とかいう架空の.NETライブラリの説明を受けてる・・・
しかしさすがのBing先生、MimeKit の中の Rfc2047 クラスの使い方をちゃんと教えてくれた。
まあ Stack Overflow にも書かれてある事をまとめただけではあるが。。
やっぱ先生はすげえんよ。
twitter.com/tokushinchannel/status/1724076248979361873
twitter.com/bwkZhVxTlWNLSxd/status/1724382534396686705
ほんとに弁護士なんですか。
twitter.com/tokushinchannel/status/1724383063881535714
twitter.com/i/birdwatch/t/1724382534396686705
朝鮮半島を「向こう」という主張であれば誤りです。
日本では縄文時代後晩期(約3000-4000年前)には中国伝来の水田稲作が行われていた可能性が高いことが判明しており、朝鮮では2500年前の水田跡が松菊里遺跡などで見つかっていますが、水稲ではなく陸稲の可能性が高いです。
hdl.handle.net/2298/2462
hdl.handle.net/2298/22921
また、DNA解析では「水田稲作」の源流は「長江下流の江南地方」とされ、伝達経路は中国から日本への直接ルートとされています。これは朝鮮半島に存在しない中国固有の水稲が日本で出土しているという佐藤洋一郎氏による研究結果によります。
twitter.com/oohara_hachidai/status/1724515890241454373
①日本における陸稲、水稲の痕跡は、どちらも韓国最古の痕跡よりも古い
twitter.com/sharenewsjapan1/status/1724650156413624644
togetter.com/li/2258985
お前のいう通り書いたったわ(C#だが)。
//宇宙 namespace Universe { //あらゆる神の根底に存在する唯一神とその司る運(スーパークラス) public class GodLuck { public string Name { get; } //神の名前 public string Power { get; } //神の力 public string Plan { get; } //神の計画 public string Factor { get; } //運の要因 public GodLuck(string name, string power, string plan, string factor) { Name = name; //神の名前 Power = power; //神の力 Plan = plan; //神の計画 Factor = factor; //運の要因 } //神が何かを創造するメソッド public void Create(string thing) { Console.WriteLine($"{Name} created {thing}."); } //神が何かに対して支配や介入をするメソッド public void Control(string thing, string action) { Console.WriteLine($"{Name} {action} {thing}."); } //運が何かに対して影響を与えるメソッド public void Affect(string thing, string outcome) { Console.WriteLine($"{Name} affected {thing} and the outcome was {outcome}."); } } //恵比須様 public class EbisuSama : GodLuck { public EbisuSama() : base("恵比須様", "商売繁盛や五穀豊穣の力", "人々に幸せを与える計画", "商売繁盛や五穀豊穣の要因") { } //作物を守る public void Save(string crops) { Control(crops, "守る"); } //人間を成功させる public void MakeSuccessful(string person) { Affect(person, "成功"); } } }
(大いなる力を別のクラスに移譲したくなったが、神と大いなる力は同一のオブジェクトという要件があるからやめた)
//宇宙 namespace Universe { //神の振る舞いを定義したインターフェイス public interface IGodLuck { public string Name { get; } public string Power { get; } public string Plan { get; } public string Factor { get; } //神が何かを創造するメソッド public void Create(string thing); //神が何かに対して支配や介入をするメソッド public void Control(string thing, string action); //運が何かに対して影響を与えるメソッド public void Affect(string thing, string outcome); } //恵比須様 public class EbisuSama : IGodLuck { public string Name { get; } //神の名前 public string Power { get; } //神の力 public string Plan { get; } //神の計画 public string Factor { get; } //運の要因 public EbisuSama() { Name = "恵比須様"; //神の名前 Power = "商売繁盛や五穀豊穣の力"; //神の力 Plan = "人々に幸せを与える計画"; //神の計画 Factor = "商売繁盛や五穀豊穣の要因"; //運の要因 } //神が何かを創造するメソッド public void Create(string thing) { Console.WriteLine($"{Name} created {thing}."); } //神が何かに対して支配や介入をするメソッド public void Control(string thing, string action) { Console.WriteLine($"{Name} {action} {thing}."); } //運が何かに対して影響を与えるメソッド public void Affect(string thing, string outcome) { Console.WriteLine($"{Name} affected {thing} and the outcome was {outcome}."); } //物を守る public void Save(string thing) { Control(thing, "守る"); } //人間を成功させる public void MakeSuccessful(string person) { Affect(person, "成功"); } } }
まずC#でどのようなソフトウェアが作られているかを調べてみて、その中に興味を持てる分野があればそれを作るために何が必要か調べてみるといい
教科書読むだけでワクワクして勉強進められるなら、何読んだって良い
実際に動いているソフトウェアのソースコード読みたいならgithubを探索してみるといい
構文とかライブラリの使い方はやりたいことによって変わるし、デザパタや〇〇原則みたいなのは個人製作ではどうでもいい