各位若覺得我年幼無知、缺乏閱歷、不知天高地厚,盡可直言 —— 這些評價,真沒毛病。
要是覺得有些ai味,沒錯,實在不太善于表達,寫完之后用豆包潤色了一下
這是我的項目
//www.xtjzw.net/StuLittleLi/p/19055095 希望不(bu)吝點個star 鼓勵(li)支持(chi)一下

自我介紹

我是上海一所高中的高二學生,就讀于 xx 大學附屬中學。
常聽人說高中生活 “卷”,但我很慶幸生在上海:這里的升學環境相對寬松,父母為我提供了優渥的生活條件,學校更從不會克扣雙休與法定假期。
更幸運的是(shi),我(wo)有(you)一臺屬(shu)于(yu)自(zi)己的辦公本(ben) —— 這是(shi)我(wo)敲(qiao)開(kai)編程世界大門的鑰匙;而還算(suan)不錯的學習(xi)成(cheng)績,又讓(rang)我(wo)能在(zai)完(wan)成(cheng)課業(ye)后(hou),有(you)余力鉆進代碼里琢磨。

自我"們"介紹

其實在我身邊,像我這樣的中學生編程愛好者并不少。
有人是為了沖擊信息學奧賽,有人是被 Scratch 啟蒙后,對其底層的 “HTML5+JavaScript” 產生了好奇;也有人是玩網頁小游戲時想 “作弊”,搜代碼時意外栽進了編程坑;還有人是因機器人社團入門,或是單純向往 “黑客” 的酷,又或是想靠技術 “裝個小逼”……動機雖千差萬別,但我們對編程的熱愛是純粹的:不管是用 QT 還是 Node,用.NET 還是 Java,哪怕暫時說不出這些工具能 “干出多大事”,至少能靠自己的手,敲出一個能跑的小玩意兒 —— 這種 “從 0 到 1” 的快樂,足夠讓人滿足。
[PS:插個小推薦 —— 同學(xue)做的課(ke)表工具(ju)真(zhen)的 “小而精”,不(bu)僅(jin)功能(neng)全,還支持課(ke)程拖動、修(xiu)改,感興趣(qu)的可(ke)以看看→//github.com/DuguSand/Class_frame]

我作為高中生,因而遇到的問題

1.知識儲備:非科班的 “先天不足”

作為一個純靠自學的 “野生程序員”,我的知識儲備短板太明顯了:曾經不知道 APK 文件本質就是壓縮包,至今沒徹底搞懂 Git 命令(全靠 GitHub Desktop “傻瓜式” 操作),看了無數教程也沒摸透 GitHub Action;
沒有專業老師帶,我的 “老師” 是博客園的技術帖、菜鳥教程的入門課、GitHub Discussion 的問答區,還有在 QQ 群、論壇里問 “蠢問題” 的勇氣 —— 比如 “為什么myelement.innerhtml獲取不到元素內容?”
但這(zhe)些 “不(bu)(bu)足” 也意外鍛煉了我(wo)的(de)學習能力:現(xian)在的(de)我(wo),不(bu)(bu)會(hui)(hui)對著一(yi)篇技術文(wen)檔、一(yi)本專業書暈頭轉(zhuan)向(xiang),更不(bu)(bu)會(hui)(hui)因為 “學不(bu)(bu)會(hui)(hui)” 就輕易放棄。遇到陌(mo)生(sheng)的(de)知(zhi)識、卡殼的(de) bug,我(wo)第一(yi)反應不(bu)(bu)是慌,而是打開搜索引擎,把問(wen)題拆解開,一(yi)點一(yi)點找(zhao)答案。

時間不足:擠出來的 “編程窗口”

我終究不是全職程序員,沒法把所有時間撲在代碼上。
即便在上海,我的高中也有晚自習,每天要待到晚上九點半(當然,比起河南、河北那些 “卷王” 省份,已經算輕松了)。
我(wo)確(que)實很喜歡編程,如果你質疑我(wo)的熱愛……我(wo)好像也(ye)沒法證明…… 總之我(wo)的確(que)抓緊一切(qie)有(you)空的時候(hou),投入學習,對我(wo)來說,能安安靜(jing)靜(jing)敲會兒代(dai)碼(ma),本身(shen)就(jiu)是一種放松。

3.動力不足:最磨人的 “自我懷疑”

比起知識和時間,我想對我們來說最糟糕,最頭疼的其實是 “動力不足”。
知識能補,時間能擠,但當我陷入 “我為什么要寫代碼” 的迷茫時,連敲鍵盤的手都會變重。
我們這種 “高中生開發者”,身份沒優勢,技術也沒成熟到能賺錢(唯一一次接近 “創收”,是差點靠寫腳本賺 50 塊,最后也沒成)—— 當然,作為脫產學生這點錢什么也做不了;
可如果自己寫的東西沒人用,GitHub 上的 Star 全是自己開小號刷的,難免會鉆牛角尖:“我花這么多時間寫代碼,放棄了打游戲、和朋友出去玩,到底收獲了什么?”“沒人在意我的作品,我這是在自娛自樂嗎?”
每次 emo 到想放棄時,我都會跟自己說(shuo):“自娛自樂(le),也沒(mei)什么不好。”想通了(le)(le)其(qi)實(shi)很簡單:比(bi)起打游戲,我就(jiu)是(shi)覺得寫代碼更有意(yi)思(si)。那(nei) emo 過去之后,繼續敲鍵盤就(jiu)好了(le)(le)。

談談我的自學經歷

我的編程啟蒙,說起來有點 “偶然”—— 始于網課時期。
那是很多同學(xue)第一次長(chang)時間接觸電腦,我(wo)某天不(bu)知從(cong)哪兒下了個 VBS 腳(jiao)本(后來(lai)才(cai)知道,VBS 所屬的 ASP 技術,早在(zai)十幾年前就(jiu)不(bu)流行了):

t()
function t()
dad=inputbox("叫爸爸")
if dad="爸爸" then
msgbox "好兒子"
wscript.quit
end if
msgbox "不乖!"
t()
end function

這個腳本的邏輯很簡單:不輸入 “爸爸”,就一直彈窗。
當時我特別好奇:為什么只能輸 “爸爸”?輸 “dad” 或者 “爹” 行不行?
于是我用記事本打開腳本,試著把t()改成d(),把 “不乖” 改成 “abcdef”—— 沒想到真的能跑通!后來又發現,只要改if dad="xxx" then里的 “xxx”,程序就會按我的想法執行。
那一刻的激動,我到現在都記得:就像突然擁有了一個 “新器官”,我的意識居然能 “指揮” 電腦做事。
從那以后,我開始追著各種問題問:“VBS 是什么?”“字符串是什么?”“為什么算判別式時,bb-4ac會報錯?”“函數和子程序有什么區別?”“遞歸、循環、if 語句到底怎么用?”
慢慢摸(mo)索(suo)著,我寫(xie)出了人生中第一(yi)個 “完整程(cheng)(cheng)序”—— 一(yi)個解(jie)一(yi)元(yuan)二次方程(cheng)(cheng)的腳(jiao)本:

a=inputbox("a")
b=inputbox("b")
c=inputbox("c")
delta=b*b-4*a*c
if delta<0 then
    msgbox "無解"
else 
    x1=(-b-sqrt(delta))/(2*a)
    x2=(-b+sqrt(delta))/(2*a)
    if delta=0 then
        msgbox "有一解"&x1
    else 
        msgbox "x1="&x1&" x2="&x2
    end if
end if

當時當然寫不出這么“優雅”的代碼,要比這粗糙很多。
剛學會東西的人總是有著莫名的不知天高地厚,冒冒失失去學cpp,對指針想不明白,結果到虛表徹底看不懂了。說起來,學習還是要循序漸進
繼續鉆研vbs。可沒過多久,我就陷入了迷茫:VBS 其實也有很多可學的內容,比如 WMI(Windows 管理規范),但一點也不酷(誰都想當"嘉豪"嘛)。顯然,vbs既不能做出炫酷的效果,也不能想短視頻里的假黑客那樣裝逼,頂多只能命令行 彈彈窗。我想接觸新東西。
然而vbs網上的教程大多是 2000 年到 2010 年的,里面全是 DHTML、Java ScriptLet com這類古早技術,jquery在里頭都是新東西。
于(yu)是(shi)我(wo)遇到(dao)了(le) VBS 的(de) “兄弟”——被(bei)微軟(ruan)忘記的(de)干兒子(zi)JScript。我(wo)偶然發(fa)現,JScript 有個.NET 版本叫(jiao)JScript.NET,至(zhi)今還在(zai).NET Framework 里靜默發(fa)布。這是(shi)我(wo)第一次接(jie)觸(chu).NET 框架。但JScript.NET的(de)資(zi)料太少(shao)了(le),幾乎找不到(dao)教程和示例。我(wo)在(zai)一個技術論壇(tan)上(shang)求到(dao)一個批處理腳本(后來我(wo)還在(zai)那個論壇(tan)上(shang)寫了(le)不少(shao)關(guan)于(yu)JScript.NET的(de)帖子(zi),算是(shi) “反向輸出” 了(le)):

jsc.exe /target:xxx /out:xxx xxx.js

靠著這個腳本,我第一次體驗到了 “編譯” 的神奇:黑窗口里跳出 “Hello World”,生成的 EXE 文件用記事本打不開 —— 這種 “神秘感”,又把我勾進了新的領域。
那段時間,我還學了 VB6.0 和 HTA(HTML Application),甚至花了一整個學期做了個 HTA 編輯器(千行代碼都在記事本里完成,縮進都是純手敲得 我可真厲害??),成品到真的能用,支持高亮,不太好的提示,感興趣的可以看看我的。
再(zai)后來(lai)學 PowerShell 時(shi),發現用Add-Type必須寫 C# 代碼(ma)。我(wo)索性(xing)把 C# 代碼(ma)摘出來(lai),單獨建了個(ge).cs 文件(jian),試著編譯、運行,再(zai)對照菜鳥(niao)教程(cheng)(cheng)一點點琢磨。也就是(shi)從(cong)這個(ge) “小項目(mu)” 開始,我(wo)才算有底氣說:“我(wo)是(shi)個(ge)業余程(cheng)(cheng)序員。”

我的第一個開源項目

真正讓我沉下心做 “完整項目”,是因為被 Desmos 的函數圖形吸引 —— 我覺得 “把數學公式變成圖形” 太神奇了,于是決定自己做一個函數繪圖工具,也就是我的第一個也是目前唯一一個開源項目。
我一直信奉的是在做中學,先定一個目標,開始去完成,在完成的過程中分析問題,找出我還不會什么,然后去學。大概有點深度優先的感覺吧。
這個項目的開發過程,說起來有點 “笨拙”:一邊寫代碼,一邊查資料,一邊改框架 —— 從 Winform 換成 Avalonia,表達式編譯從用 CodeDom(調用 csc.exe)改成 DynamicMethod 和 ExpressionTree,每一步都走得磕磕絆絆。
幾何畫板繪制函數要算法,于是去看 Jeff Tupper 的論文,雖然沒怎么看懂,但大概知道個大體思路,做出來一個區間運算庫。
于是我做出了一個能用的函數繪圖器 —— 雖然運行起來有點卡(哪怕在同學的4060+i7上),現在放在項目的 OldVersion 文件夾里。
之后,我又在這個基礎上做幾何畫板:當我寫出一大堆繼承于 Shape 類的對象時,用同一個函數調用不同的內容,突然懂了 “面向對象” 的美 —— 原來代碼也能這么 “規整”,這么有邏輯。我開始做界面ui,從依賴窗口設計器,風格古早的winform轉為mvvm xaml的avalonia。
順便提(ti)一(yi)句,其實我(wo)(wo)不止一(yi)次(ci)試(shi)圖接觸過(guo).net 和(he)mvvm。當我(wo)(wo)第一(yi)次(ci)搜索vbs是 就下(xia)載過(guo)visual studio創(chuang)建了(le)一(yi)個vb.net控制(zhi)臺應(ying)用。在(zai)winform學完后,也(ye)試(shi)圖學過(guo)wpf(其實對于xaml類ui框架(jia)興趣也(ye)來自于pcl2我(wo)(wo)的世(shi)界(jie)啟動器),奈何覺得(de)(de)xaml mvvm都是莫名其妙毫無(wu)卵用的東西(xi)遂放(fang)棄(qi)。 不得(de)(de)不說 眼界(jie)決定了(le)上限,如(ru)果一(yi)直停留在(zai)vbs,hta這種(zhong)古早的東西(xi)上,怕是永遠(yuan)也(ye)接觸不到博(bo)客園,github等等吧

我對未來的期望

說實話,我從沒想過靠編程謀生,只希望它能一直是我的愛好,而不是一份 “必須完成的工作”,或是 “需要死記硬背的知識點”。
我知道,能對一件事保持純粹的熱愛,有多難得。如果有一天,我覺得寫代碼是負擔,那才是真的對不起現在這個為了一行代碼興奮半天、為了一個 bug 熬夜調試的自己。
未來的日子,我只想(xiang)把這份熱愛保(bao)留下去:不(bu)管(guan)走哪(na)條路,不(bu)管(guan)學什么專業,都能(neng)在空閑時打(da)開(kai)編輯器,敲(qiao)一段(duan)自己喜歡(huan)的代碼 —— 這樣就夠了。

我想說說我對一些問題的看法

英語是學習編程的壁壘嗎

似乎很多人認為 學好編程的必要條件是學好英語 但至少我不這么認為
從學編程起我靠編程學會了三個詞 formerly曾經 slice切 hub聚集地 其中只有一個slice會作為語言的函數名。 函數名往往不會是太過于復雜的詞匯,至少我從沒見過脫離高考考綱的詞。如果說語言障礙會影響到對于函數名的理解,那著實有點抽象了。
編程語言的教程總是有中文版的,至少對于寫語法,不需要去谷歌搜國外資料。
不明白為什么總是說語言限制,為了看懂代碼背單詞
當(dang)然這只是我(wo)的(de)淺薄理(li)解 或許有什(shen)么特殊(shu)的(de)理(li)由吧

最(zui)后求個star 滿足一下下我滴虛榮心(xin) [手動狗頭]