SecHack365 2023年度 川合ゼミの説明
(1) こんな人を募集します!
- 「SecHack365 2023年度 開発駆動コース 川合ゼミ」では、こんな人を募集します。
- [1]プログラミング言語を作りたい人(これが川合ゼミでのおすすめテーマ#1になります)。
- [2]ライブラリを作りたい人(これが川合ゼミでのおすすめテーマ#2になります)。
- [3]そのほか川合が興味を持ちそうな開発をやりたい人(これが川合ゼミでの持ち込みテーマになります)。
- いずれにせよ、私がトレーナとしてもっとも大切にしているのは、みんなが開発を楽しめることです。「SecHack365のせいで開発が嫌いになってしまった」というのを避けたいです。「前から好きだったけど、もっと好きになった。すごく楽しい」これを目指しています。
- だから無理強いすることはないですし、効率よく早く正解を学ばせることよりも楽しみにながら試行錯誤して実感を伴って学んでもらうことを重視します。そもそも何が正解か、そんなに簡単に決められるものじゃないですよね。
- どうしてもうまくいかなくてギブアップしたら私に質問してもらって、私は最低限のヒントを与えてあとは自力で突破してもらう、これが私の理想とする方法です。多くの人は、本当にあとちょっとのところまで来ているものなのです。
- [3]を選ぶ場合、私が今までどんなことをしてきたのかを知っておく必要があるでしょう。
- 1996年~ V98というエミュレータを開発
- 2000年~ OSASKというPC向けの超軽量型の自作OSを開発
- 2002年~ naskというx86用のアセンブラを開発
- 2003年~ tek5というLZMAをベースにした可逆圧縮形式を開発
- 2005年~ 書籍「30日でできる!OS自作入門」を執筆
- 2010年~ blikeというC言語用のグラフィックライブラリを開発
- 2013年~ OSECPU-VMという仮想マシンを開発(このバイトコードでプログラムを書くと驚異的に小さくなる)
- 2019年~ kcl03というC言語用の基本ライブラリを開発
- 2019年~ kcll00というC言語用のプログラミング言語開発支援ライブラリを開発
- 2019年~ ES-BASICというスクリプト言語を開発 (詳しくはこちら→esbasic02a)
- 2020年~ aclライブラリを開発
- 2021年~ 「10日くらいでできる!プログラミング言語自作入門」を書く(詳しくはこちら→a21_txt01)
- 2023年~ easy-CというC言語の改良版を発表 (詳しくはこちら→a23_ec001)
- まとめるとこんな感じです。
- エミュレータ自作、PC向けのOS自作、言語自作、圧縮、理想のCPU命令を考える、ライブラリや自作言語を作って自身の開発力を底上げ
- [1]でも[2]でも[3]でも、「自分の開発物を自分で常用しようと思っている人」が私は大好きです。
- これに関する私の考え方はp20200311aに書いてあります。
- 一方で「これを作ることで〇〇を実証するのだ」みたいなのも私はOKなので、自分で常用しなければ絶対だめだというわけではないです(私もそういう目的で開発することが時々あります)。
- 何を作るにしても、ただ「なんとなく」作るのではなく、何か目的があって、その手段として言語やライブラリを作るという説明になっているといいと私は思います。
- 2022年度の川合ゼミでは、ソフトウェアを設計してから作るのが大好きだという人がいて、その人が設計を記述するための言語を作り、その言語で設計を検証したり可視化したりしていました。この開発者は優秀修了生になりました。
- また同じく2022年度の川合ゼミには、メモリ管理で参照カウントと所有権の考え方を組み合わせることで、GCのある言語に近い使用感で、しかしGCのようなstop-the-worldが発生しないような、そんなメモリ管理が標準的に使える言語の開発もありました。これはメモリ管理の問題を解決するための言語だと言えます。この開発者も優秀修了生になりました。
- ・・・とはいうものの、「まだ特に目的がないけどどうしてもこういう言語を作ってみたい」ということであれば、それはそれでOKですので、遠慮しないで応募してください。
- 応募段階でセキュリティを意識したテーマになっている必要はありません。それは開発がある程度進んでから考えても十分に間に合うと思います。でももちろん、最初からセキュリティを意識したテーマになっているのなら、それはそれで歓迎します。
(2) 補足
- [Q-1]ChatGPTやそのほかの類似の技術を利用して、応募用紙を書いたりプログラムを書いたりしていいですか?
- [A-1]他のコースや他のゼミではダメかもしれませんが、川合ゼミではOKです。ただしChatGPTに文章を書かせて「私は〇〇ができます」と書いたら、本当に〇〇ができなければいけません。つまり書いた内容には責任を持ってください。「ChatGPTが勝手に書いただけだから僕は知りません」というのはダメです。プログラムについても、「ChatGPTに書かせたのでバグがあります、でも直せません」ではダメです。自分が書いたのと同じくらいに責任をとってください。それさえ約束できれば問題ありません。
- [Q-2]プログラミング言語を作ってみたいのだけど、作ったことがないのでできるかどうかわかりません。
- [A-2]a21_txt01(およびその続き)を読んでみてください。これを読んで「なるほどこれだったら自分でもできるかも」と思えたら、もうOKです。
- 応募までにすべてを読み終わる必要はありません。今どのあたりをやっているか(どこまで理解できているか)をぜひ書いてもらえたら、選考上さらに有利になると思いますので、「ばっちり〇〇までは理解できています!」ってアピールしてください。
- [Q-3]ライブラリを作るのは言語を作ることと比べたらだいぶ難易度が低そうですが、それでもこのゼミでやるんですか?
- [A-3]はいそうです。多くの言語はライブラリを使うことで、できることがうんと広がります。「新しいことをできるようにしたいと思ったら言語を作らなければいけない」なんてことはないはずです。ライブラリを作るだけでもできることはたくさんあるはずです。そうであるならば、言語を作らずに済むのならそのほうが賢いと私は思うのです。・・・簡単にできることをわざわざ難しくする必要は全くありません!
- [Q-4]もう自分の作りたいものを作り始めているのですが、その続きを作る(改良をする)みたいなのでもいいでしょうか。
- [A-4]それは技術力と熱意の証明だと思うので、大歓迎です!
- むしろこれから作ろうと思っている人も、SecHack365での合格通知など待たずにどんどん作ってほしいです。応募前から作ってほしいくらいです。どこまでできたか教えてください。
- [Q-5]川合ゼミでは、わからないことは何でもたくさん教えてもらえると思っていいでしょうか?
- [A-5]プログラムの開発の仕方は、何から何まで川合が教えてくれる!という「おんぶにだっこ」な対応は期待しないでください。トレーナーからの指導がなくても、6割くらいは自分で調べて作れるスキルがあるのが前提です。
- ・・・とはいえそれだけだと言語の作り方がわからなくて、言語自作にチャレンジできない人が増えそうだったのでa21_txt01は用意しました。これを読めばできそうな人が言語開発のテーマを選べます。
- 「6割どころか、全部自力でできると思います!」の人も大歓迎です。私はさらにきっかけを与えて完成度を120%や200%にすることを目指します。
- [Q-6] グループでの応募はできないのはわかってますが、開発が進行していくにつれて他の合格者と一緒にやりたいって思うことがあるかもしれないですよね。その場合、その人とグループを組んで開発をすることはできますか?またその場合にその人のテーマに合わせたりすることもあり得ると思うのですが、それもOKですか。
- [A-6] そういう状況になれば、OKできると思います。
- [Q-7]実力を示すためにコンテストでの受賞歴があったほうがいいですか?
- [A-7]川合は、コンテストでの受賞などをプラスには見ません(もちろんマイナスにもしませんが)。だから優勝したとか高得点を取ったなどのアピールは重要ではありません(もちろんそれでもアピールしたければしてもいいですが)。
- そうじゃなくて、そこでどんなものをどうやって作ったのかをアピールしてください。・・・結局、コンテストなどの受賞歴は、私からすれば他人の評価でしかないのです。私は私の基準で評価したいので、他人にどう評価されたことがあるかは関係がないのです。
- [Q-8] 代表作なんかないです・・・
- [A-8] ここでいう代表作っていうのは、世間に公開したものがあったらそれを書いてね、という意味では「ない」のでご安心ください。自分がこの言語で作ったものの中で、一番よくできたのは〇〇です、ちなみにかくかくしかじかの内容です、って書いてくれたら十分です!・・・誤解しやすい書き方でごめんなさい。
- [Q-9] 応募時に作りたいと思っていたものと、選考合格後に作りたいものが微妙に変わってしまったのですが大丈夫でしょうか?
- [A-9] どうして作りたいものが変わったのか、その話は面白そうなのでぜひ熱く語ってもらいたいですが、その上で、たいていはOKできると思います。・・・一応書いておきますが、合格するためにもともと興味もないような開発テーマを書いてみても、それはほぼ一発で見抜かれて落とされますのでそんなセコイことは考えないでくださいね。
- とまあそういうことですので、作りたいものが変わったらどうしよう、今後約1年間もこのテーマに縛られるとしたら慎重に書かないといけないかな、と身構える必要はありません。
- [Q-10]こちらのゼミでは、年齢情報を選考に利用しますか?
- [A-10]はい、します。基本的に若い人には加点します。中学生と大学院生を同じ基準で比較するとかは(私には)ありえないです。ですから「自分はまだスキルが足りないかもしれないから・・・」って応募を先送りしてもいいことはないと思います(先送りすればするほど、年齢が増す分だけ不利になる)。とにかく今の自分は何が作りたくてどのくらいのことができるのか、書いてみてください!
- なお事務局に確認したところ、選考時には事務局に回答した年齢情報が提供されないようなので、問2~問5のどこかに自分の年齢を書いてください(高校〇年生です、とかでも可)。書いてくれれば若い人への加点をします。
- [Q-11]実はやってみたいテーマが複数あるのですが、どれを書いたらいいかよくわかりません。こういう時はどうしたらいいですか?
- [A-11]そういうときはたぶん自分だけで考えていてもしょうがないので、ひとまず全部書いてしまいましょう。もし複数書いてあれば、その中で一番好ましいものをこちらで選んで、それで評価します。これで選考を通過した場合、最初の打ち合わせの時にはどれを選んだかお伝えできると思います。でもそれを強制するというわけではなく、もう一度希望も聞きますので、一緒に考えましょう!・・・ちなみに、心にもないことを(受かりたいからと)適当に書いてしまうと、それは見抜かれます。ですから小細工はしないで、素直に書くことをおすすめします。
(3) 掛け持ちについて
- 私としては、他のことと掛け持ちしない人が好ましいと思っています。他のイベントにも積極的に参加しています、したいです、っていう人はきっと時間が足りなくなって、成果が中途半端になりやすいと思うのです。まあそれも人生なので仕方ない面はありますが、できればSecHack365に集中できそうな時期を選んで応募してくれたらうれしいです(まあ多少のことなら並行してやってもいいのですが・・・)。
- また大学などの研究テーマ(今やっているやつ)をそのまま持ってこられたりするのは少し困ります。なぜなら、どこからどこまでがSecHack365の成果なのかわかりにくくなるからです。趣味で前からコツコツやっていた、とかはOKです。それなら成果の区切りがあいまいになっても、大きな問題にはならないからです。同じ理由で、今年の未踏でやっているテーマをそのまま持ってきた、というのも困ります。未踏に限らず、他のイベントとの掛け持ちはすべて該当します。
- もしこれらの掛け持ち問題がありそうな人は、応募時に自己申告して、かくかくしかじかの理由でうまく切り分けられるので心配しないでくださいって教えてください。
- まあでも、掛け持ちするくらいなら、そっちをメインで最後まで頑張るほうがいい結果になりそうな気はしますよ!「二兎を追う者は一兎をも得ず」っていうじゃないですかー。
(4) ちなみに
- ちなみに、学習駆動コースも川合ゼミに似たテーマを扱っていますので、そちらも確認しておくと、後になって「ああ、それだったら学習駆動コースにしておけばよかった!」と後悔しないで済むと思います。
(5) 共通問題への回答について
- 2020年度から、NICTからの共通問題もでるようです。それらへの回答は簡潔に書いてもらっても大丈夫です(だって二回も同じような説明をするのは大変でしょうから)。その分、コース別の回答は詳しく丁寧に書いてください。
こめんと欄