如今是22:13,此時此刻的我記錄第一次寫的博客。目前在校讀本科,是一位最最最平凡不過的編程小白。php
從小學五年級開始,天真懵懂的我就開始勵志成爲一位程序員。直至如今,誤打誤撞,一學就是十幾年,從開始小學的Visual Basic、易語言,到初中的Pascal、Lua,最後到如今的.net,掉髮的路從沒有放棄,知識也越學越多,頭髮越掉越少。每到一個階段再回想本身的過去,老是這麼的天真好笑。同時我也說不出我對java有什麼怨恨,就感受我對java並不大敏感。在此文,想簡單的分享一下個人編程人生經歷:java
小學五年級到初一期間,易語言在當時還算是風靡半個球,多半輔助、外掛當時仍是從他那邊開發出來的。我用着我老爸的臺式電腦,開始作第一個易語言程序,拖拽組件、編寫代碼、編譯、完成!到如今的,都能感覺到當年我寫易語言那種愉悅、隨意的天真味道,這也就是我爲何當年取名爲 小易 並一直使用到如今的緣由,雖然我姓名中不含有 易 字。隨着對易語言的熟悉,我也嘗試着去開發一些小工具、小外掛、小玩意兒,可是工具類軟件偏多。就這樣直至上到初二,我得知咱們初中的學校有編程隊的存在,可是我不知道怎樣才能進入,我便找到個人電腦老師,徐老師。徐老師是學校編程團隊的帶隊老師,常常帶領學生在NOIP等比賽中取得很是好的成績。當年我把我曾經寫過的易語言的軟件給他瀏覽了一遍,他遍認爲「這孩子有前途。」,我便進入了學校的編程隊。程序員
當年咱們是學Pascal,學算法,懵懂的我並不知道,算法是一個什麼概念。隨着時間推移,老師教咱們回溯、遞歸、分治、貪心不少算法,但我當時對此毫無靈感,彷佛思惟跟不上,參加競賽時,老師也常常把咱們報名到高中組裏比賽,說初中組的比較簡單,不必。可是我每次競賽出來的成績,並不理想,跟其餘學徒相比,落後太大,我對此感到疑惑:難道我不是作程序員的料?信心幾乎被打落到谷底,猶如一條鹹魚,學了又學了,彷佛找不到編程的樂趣了。web
直至那天,徐老師把我介紹給了另外一位老師,鄧老師。鄧老師的出現似乎就是我編程道路上的一個轉折點,換句話是他真正啓蒙了我。他很是看好我,常常帶我去參加各類比賽,各類機器人大賽,創新大賽等,在這些大賽中,也得到了很是不錯的獎項。鄧老師在我印象裏,他就是軟硬件方面都懂大神,設計出本身的颶風機器人主板,他在學校設立了本身的機器人基地、機器人培訓班,專門培訓學生的動手能力和思惟能力,彷佛學校榮獲機器人培訓特點的名譽,也是因他而來的,同時,省級比賽的項目也有他的存在。直到如今,我也有跟鄧老師保持聯繫,很是感謝鄧老師與徐老師。算法
這要從2013年提及,還在的我,無心間發現一款名爲 觸動精靈① 的IOS越獄軟件。當年的騰訊手遊剛興起的時候,一款名爲 每天愛消除 的遊戲特別火,你們都在攀比分數。隨後我拿着我手中早已越獄的iPhone 4下載起了觸動精靈,第一次使用了別人寫的腳本,運行!屏幕就猶如附着靈魂般的在操做着遊戲,而且能在短期內消除不少方塊以致於得分很是的高。當年的我驚呆了,這一波讓手機靈魂附體的操做深深吸引了我,激起了對編程更大的興趣。直至如今,個人部分外快收入,都是來源於觸動精靈這個平臺,我很是感謝它。編程
經過一段時間努力,爲觸動精靈作出了一些貢獻(用易語言給觸動寫了一個名爲易觸動的IDE)後,成功混入了觸動精靈的內部羣。我才發現,大神仍是那些大神,我才發現,易語言並不能一直賴着他,總得學習新的東西。從那起,我就下定決心,開始學習新的編程語言。回想起我啓蒙老師說過的話:編程語言其實都是大同小異,只要你會了一種,其餘都很快上手。因而我不在觸動內部羣混了,出來作實實在在的觸動的腳本開發者,嘗試一下。框架
① 觸動精靈(Touch Sprite)就是一款用 Lua 語言爲基礎開發的一款模擬手機/平板電腦的模擬操做的腳本開發軟件。
編程語言
那是2015年的秋天,經過自學Lua和觸動精靈一些基礎函數和框架後,成功混入了觸動精靈的交易羣開始嘗試接單。當年的我賺錢模式就是:私人定製,有償維護。第一個客戶來了!要求開發一款AA司機端自動搶單子的腳本。因爲客戶三年都沒有練習,腳本也停更了,如下是源碼:ide
1 init("0",0) 2 luaExitIfCall(true) 3 Devtype=0 4 width, height = getScreenSize() 5 6 ------------------------------------------------- 7 8 ------------------------------------------------- 9 if width == 640 and height == 1136 then 10 Devtype=1--iPhone 5, 5S,5C, iPod touch 5 11 elseif width == 640 and height == 960 then 12 Devtype=2--iPhone 4,4S, iPod touch 4 13 elseif width == 320 and height == 480 then 14 Devtype=3--iPhone 非?高分屏 15 elseif width == 768 and height == 1024 then 16 Devtype=4--iPad 1,2, mini 1 17 elseif width == 1536 and height == 2048 then 18 Devtype=5--iPad 3,4,5 19 end 20 if (Devtype~=1) then 21 lua_exit(); 22 dialog("不支持此設備類型",0) 23 end 24 ------------------------------------------------ 25 function iscolor(pos,p) 26 r = math.floor(pos[3]/0x10000) 27 g = math.floor((pos[3]%0x10000)/0x100) 28 b = math.floor(pos[3]%0x100) 29 rr,gg,bb=getColorRGB(pos[1],pos[2]); 30 if (rr>=r-p)and(rr<=r+p)and(gg>=g-p)and(gg<=g+p)and(bb>=b-p)and(bb<=b+p) then 31 return true; 32 else 33 return false; 34 end 35 end 36 function but(pos) 37 touchDown(1,pos[1],pos[2]) 38 mSleep(5) 39 touchUp(1,pos[1],pos[2]) 40 end 41 function untild(pos,p) 42 while iscolor(pos,p)==false do 43 end 44 but(pos) 45 but(pos) 46 end 47 function typexie(x) 48 if iscolor(XY[Devtype][x][1],4) and iscolor(XY[Devtype][x][2],4) and iscolor(XY[Devtype][x][3],4) and iscolor(XY[Devtype][x][4],4) then 49 if x==6 then 50 if iscolor(XY[Devtype][61][1],4) and iscolor(XY[Devtype][61][2],4) and iscolor(XY[Devtype][61][3],4) and iscolor(XY[Devtype][61][4],4) then 51 return true 52 else 53 return false; 54 end 55 end 56 return true; 57 else 58 return false; 59 end 60 end 61 function Split(szFullString, szSeparator) 62 local nFindStartIndex = 1 63 local nSplitIndex = 1 64 local nSplitArray = {} 65 while true do 66 local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex) 67 if not nFindLastIndex then 68 nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString)) 69 break 70 end 71 nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1) 72 nFindStartIndex = nFindLastIndex + string.len(szSeparator) 73 nSplitIndex = nSplitIndex + 1 74 end 75 return nSplitArray 76 end 77 -------------------------------------------------- 78 UI = [[ 79 { 80 "style": "default", 81 "width": ]]..width..[[, 82 "height": ]]..height..[[, 83 "config": "AA_Driver.dat", 84 "timer": 60, 85 "cancelname": "取消", 86 "okname": "開始接單", 87 "views": [ 88 { 89 "type": "Label", 90 "text": "AA司機端自動搶單", 91 "size": 25, 92 "align": "center", 93 "color": "0,0,255" 94 }, 95 { 96 "type": "Label", 97 "text": "接單類型", 98 "size": 15, 99 "align": "left", 100 "color": "0,0,0" 101 }, 102 { 103 "type": "CheckBoxGroup", 104 "list": "豪華型,溫馨型,經濟型", 105 "select": "0@1@2" 106 }, 107 { 108 "type": "Label", 109 "text": "訂單類型", 110 "size": 15, 111 "align": "left", 112 "color": "0,0,0" 113 }, 114 { 115 "type": "CheckBoxGroup", 116 "list": "攜程北京接機,攜程北京送機,北京接機服務,北京送機服務,北京半日租,北京日租,分級訂單", 117 "select": "0@1@2@3" 118 }, 119 { 120 "type": "Label", 121 "text": "其餘設置", 122 "size": 15, 123 "align": "left", 124 "color": "0,0,0" 125 }, 126 { 127 "type": "CheckBoxGroup", 128 "list": "自動拒毫不符合訂單", 129 "select": "0" 130 }, 131 { 132 "type": "Label", 133 "text": "目前訂單類型只有以上五種選擇,沒選中的訂單或其餘類型訂單,均不接單", 134 "size": 15, 135 "align": "left", 136 "color": "255,0,0" 137 }, 138 { 139 "type": "Label", 140 "text": "注意:運行腳本過程當中,不可打開其餘應用!", 141 "size": 15, 142 "align": "center", 143 "color": "0,255,0" 144 } 145 ] 146 } 147 ]] 148 ret,choicetype,choicexie,choicequxiao= showUI(UI); 149 if ret==0 then 150 lua_exit() 151 end 152 -------------------------------------------------- 153 XY={} 154 XY[1]={} 155 XY[1]['type']={} 156 XY[1]['type'][2]={ 157 { 496, 196, 0x8bc21c}, 158 { 523, 202, 0x8fc324}, 159 { 532, 219, 0xc1de85}, 160 } 161 XY[1]['type'][1]={ 162 { 496, 196, 0xebf4d8}, 163 { 523, 202, 0xffffff}, 164 { 532, 219, 0xa2ce4a}, 165 } 166 XY[1]['type'][0]={ 167 { 496, 196, 0xa8d155}, 168 { 523, 202, 0x9bc93c}, 169 { 532, 219, 0xffffff}, 170 } 171 XY[1]['搶']={ 373, 1025, 0x7eba03 } 172 XY[1]['放棄訂單']={ 127, 1087, 0x192638 } 173 XY[1]['確認放棄']={ 454, 655, 0xffffff } 174 XY[1]['標識']={ 553, 195, 0xcbe49a } 175 XY[1]['特殊返回']={ 86, 77, 0x7eba03 } 176 XY[1]['返回']={ 44, 81, 0xfefefe } 177 XY[1]['新訂單']={ 241, 1054, 0x7eba03 } 178 179 180 181 182 XY[1][0]={ --攜程北京接機 183 { 129, 192, 0x9a9a9a}, 184 { 205, 194, 0xe2e2e2}, 185 { 296, 193, 0xd5d5d5}, 186 { 326, 184, 0xbebebe}, 187 } 188 XY[1][1]={ --攜程北京送機 189 { 129, 192, 0x9a9a9a}, 190 { 205, 194, 0xe2e2e2}, 191 { 296, 184, 0xc8c8c8}, 192 { 326, 184, 0xbebebe}, 193 } 194 XY[1][2]={ --北京接機服務 195 { 129, 194, 0xe2e2e2}, 196 { 177, 208, 0xd2d2d2}, 197 { 212, 199, 0xd8d8d8}, 198 { 235, 218, 0xbfbfbf}, 199 } 200 XY[1][3]={ --北京送機服務 201 { 129, 194, 0xe2e2e2}, 202 { 177, 208, 0xd2d2d2}, 203 { 218, 202, 0xdcdcdc}, 204 { 230, 214, 0xbdbdbd}, 205 } 206 XY[1][4]={ --北京半日租 207 { 129, 194, 0xe2e2e2}, 208 { 211, 193, 0xc5c5c5}, 209 { 232, 205, 0xeaeaea}, 210 { 281, 191, 0xd7d7d7}, 211 } 212 XY[1][5]={ --北京日租 213 { 129, 194, 0xe2e2e2}, 214 { 209, 189, 0x888888}, 215 { 253, 201, 0x999999}, 216 { 175, 199, 0xadadad}, 217 } 218 XY[1][6]={ --分級訂單 219 { 139, 185, 0x686868}, 220 { 185, 200, 0xa1a1a1}, 221 { 229, 187, 0xdadada}, 222 { 266, 188, 0xafafaf}, 223 } 224 XY[1][61]={ --分級訂單 225 { 139, 185, 0x686868}, 226 { 185, 200, 0xa1a1a1}, 227 { 229, 187, 0xdadada}, 228 { 266, 188, 0xafafaf}, 229 } 230 XY[1][61]={ --分級訂單驗證 231 { 132, 371, 0xe3e3e3}, 232 { 252, 369, 0xc3c3c3}, 233 { 356, 373, 0xbbbbbb}, 234 { 459, 390, 0xbebebe}, 235 } 236 ------------------------------------------------- 237 function checktype() 238 local p 239 xtype = Split(choicetype,"@") 240 for x=1,#xtype do 241 p=true 242 for i=1,3 do 243 if iscolor(XY[Devtype]['type'][tonumber(xtype[x])][i],3)==false then 244 p=false 245 break 246 end 247 end 248 if p then 249 return true; 250 end 251 end 252 return false; 253 end 254 function checkxie() 255 local p 256 xxie = Split(choicexie,"@") 257 for x=1,#xxie do 258 if typexie(tonumber(xxie[x])) then 259 return true; 260 end 261 end 262 return false; 263 end 264 265 while (true) do 266 if iscolor(XY[Devtype]['標識'],5) and iscolor(XY[Devtype]['新訂單'],5) then 267 ptype = checktype() 268 pxie = checkxie() 269 but(XY[Devtype]['標識']) 270 while iscolor(XY[Devtype]['搶'],3)==false do 271 but(XY[Devtype]['標識']) 272 end 273 if ptype and pxie then 274 but(XY[Devtype]['搶']) 275 while iscolor(XY[Devtype]['搶'],3) do 276 but(XY[Devtype]['搶']) 277 end 278 else 279 if choicequxiao == "0" then 280 but(XY[Devtype]['放棄訂單']) 281 mSleep(10) 282 but(XY[Devtype]['確認放棄']) 283 mSleep(500) 284 while iscolor(XY[Devtype]['搶'],3) do 285 but(XY[Devtype]['返回']) 286 end 287 end 288 end 289 end 290 if iscolor(XY[Devtype]['特殊返回'],5) then 291 but(XY[Devtype]['特殊返回']) 292 end 293 end
這個腳本,讓我有了第一筆收入,成就感也爆棚,也許我還小,當年的我開心的跟花兒同樣….函數
由於中考發揮通常,進了一個咱們市裏比較中上的高中,可是這所高中特點他主打的並非軟件編程方面的,而是作與飛行器有關,好比作飛機模型等。這並非我喜歡的類型,因此我並無加入到那邊的培訓中。在寒暑假時間,我便繼續利用觸動精靈去找我一些外快,在高中學習期間,幾乎都這麼過了,除了學習仍是學習。
高一期間,我又一次偶然的機會,瞭解到了C#,它的編程方式和編程語法深深吸引了我,很優雅。由於在此以前,我是使用過 java 開發Android應用一段時間(時間問題,不在這裏詳細描述了),相比與 Java,C#的確大大的提升了編程的效率。我第一次瞭解到了WinForms,由於當年還沒認識到互聯網的強大(很懵懂),因此沒有去搞 web 開發。在那期間,我跟桌面應用相依爲命,高中就這樣了。
直至到了大學,發現了大學裏有一個比較嚴重的問題,學校素拓分數管理的那方面很是的不人性化,人工填寫、人工打表、人工審覈、人工蓋章,這一些操做讓我以爲不是那麼的與現代接軌,如今都是主打無紙化、簡潔化、便捷化,我就產生了作一個素拓管理的一套系統,可是整套系統的客戶端是基於WinForms,歷經幾個月,最最最雛形的東西作出來給大學的老師看了一眼,立刻得知,這套系統用 WinForms 開發其實弊端不少,首先不能兼容每一個用戶的使用最爲致命,好比須要安裝 .net framework,好比不能跨操做系統使用等問題。慢慢的我去了解 Web開發。
如今….我其實就是一個編程小白,能夠這麼說:我對 .NET 彷佛還一無所知,沒有說技術有多厲害,畢竟我大學裏選的是非計算機專業,學計算機知識靠自學了。我只是懷着這一份熱愛編程在堅持,它能帶給我成就感甚至快樂。因此我想在這裏作一些交流,或者分享個人一些知識與技巧也好,經此而已。可是編程的路確定會走到盡頭,不會放棄。
其實還有挺多東西要寫的關於個人經歷,也許個人經歷對你沒有任何幫助,可是沒關係,我只是想在這裏,第一篇博客,記錄我曾經的回憶。