zoukankan      html  css  js  c++  java
  • 一位编程小白的自述 —— 从小学到现在

    现在是22:13,此时此刻的我记录第一次写的博客。目前在校读本科,是一位最最最平凡不过的编程小白。

    从小学五年级开始,天真懵懂的我就开始励志成为一位程序员。直至现在,误打误撞,一学就是十几年,从开始小学的Visual Basic、易语言,到初中的Pascal、Lua,最后到现在的.net,掉发的路从没有放弃,知识也越学越多,头发越掉越少。每到一个阶段再回想自己的过去,总是这么的天真可笑。同时我也说不出我对java有什么怨恨,就感觉我对java并不大敏感。在此文,想简单的分享一下我的编程人生经历:

    初中期间两位编程道路上的启蒙老师

    小学五年级到初一期间,易语言在当时还算是风靡半个球,多半辅助、外挂当时还是从他那边开发出来的。我用着我老爸的台式电脑,开始做第一个易语言程序,拖拽组件、编写代码、编译、完成!到现在的,都能感受到当年我写易语言那种愉悦、随意的天真味道,这也就是我为什么当年取名为 小易 并一直使用到现在的原因,虽然我姓名中不含有 易 字。随着对易语言的熟悉,我也尝试着去开发一些小工具、小外挂、小玩意儿,但是工具类软件偏多。就这样直至上到初二,我得知我们初中的学校有编程队的存在,但是我不知道怎样才能进入,我便找到我的电脑老师,徐老师。徐老师是学校编程团队的带队老师,经常带领学生在NOIP等比赛中取得非常好的成绩。当年我把我曾经写过的易语言的软件给他浏览了一遍,他遍认为“这孩子有前途。”,我便进入了学校的编程队。

    当年我们是学Pascal,学算法,懵懂的我并不知道,算法是一个什么概念。随着时间推移,老师教我们回溯、递归、分治、贪心很多算法,但我当时对此毫无灵感,似乎思维跟不上,参加竞赛时,老师也经常把我们报名到高中组里比赛,说初中组的比较简单,没必要。但是我每次竞赛出来的成绩,并不理想,跟其他学徒相比,落后太大,我对此感到疑惑:难道我不是做程序员的料?信心几乎被打落到谷底,犹如一条咸鱼,学了又学了,似乎找不到编程的乐趣了。

    直至那天,徐老师把我介绍给了另一位老师,邓老师。邓老师的出现彷佛就是我编程道路上的一个转折点,换句话是他真正启蒙了我。他非常看好我,经常带我去参加各种比赛,各种机器人大赛,创新大赛等,在这些大赛中,也获得了非常不错的奖项。邓老师在我印象里,他就是软硬件方面都懂大神,设计出自己的飓风机器人主板,他在学校设立了自己的机器人基地、机器人培训班,专门培训学生的动手能力和思维能力,似乎学校荣获机器人培训特色的名誉,也是因他而来的,同时,省级比赛的项目也有他的存在。直到现在,我也有跟邓老师保持联系,非常感谢邓老师与徐老师。

    重燃我的编程兴趣

    这要从2013年说起,还在的我,无意间发现一款名为 触动精灵① 的IOS越狱软件。当年的腾讯手游刚兴起的时候,一款名为 天天爱消除 的游戏特别火,大家都在攀比分数。随后我拿着我手中早已越狱的iPhone 4下载起了触动精灵,第一次使用了别人写的脚本,运行!屏幕就犹如附着灵魂般的在操作着游戏,并且能在短时间内消除很多方块以至于得分非常的高。当年的我惊呆了,这一波让手机灵魂附体的操作深深吸引了我,激起了对编程更大的兴趣。直至现在,我的部分外快收入,都是来源于触动精灵这个平台,我非常感谢它。

    通过一段时间努力,为触动精灵做出了一些贡献(用易语言给触动写了一个名为易触动的IDE)后,成功混入了触动精灵的内部群。我才发现,大神还是那些大神,我才发现,易语言并不能一直赖着他,总得学习新的东西。从那起,我就下定决心,开始学习新的编程语言。回想起我启蒙老师说过的话:编程语言其实都是大同小异,只要你会了一种,其他都很快上手。于是我不在触动内部群混了,出来做实实在在的触动的脚本开发者,尝试一下。

    ① 触动精灵(Touch Sprite)就是一款用 Lua 语言为基础开发的一款模拟手机/平板电脑的模拟操作的脚本开发软件。

    赚到的第一笔最平凡不过的外快

    那是2015年的秋天,通过自学Lua和触动精灵一些基础函数和框架后,成功混入了触动精灵的交易群开始尝试接单。当年的我赚钱模式就是:私人定制,有偿维护。第一个客户来了!要求开发一款AA司机端自动抢单子的脚本。由于客户三年都没有练习,脚本也停更了,以下是源码:

      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
    查看代码

    这个脚本,让我有了第一笔收入,成就感也爆棚,也许我还小,当年的我开心的跟花儿一样….

    逐步尝试去了解新事物 —— .NET

    因为中考发挥一般,进了一个我们市里比较中上的高中,但是这所高中特色他主打的并不是软件编程方面的,而是做与飞行器有关,比如做飞机模型等。这并不是我喜欢的类型,所以我并没有加入到那边的培训中。在寒暑假时间,我便继续利用触动精灵去找我一些外快,在高中学习期间,几乎都这么过了,除了学习还是学习。

    高一期间,我又一次偶然的机会,了解到了C#,它的编程方式和编程语法深深吸引了我,很优雅。因为在此之前,我是使用过 java 开发Android应用一段时间(时间问题,不在这里详细描述了),相比与 Java,C#的确大大的提高了编程的效率。我第一次了解到了WinForms,因为当年还没认识到互联网的强大(很懵懂),所以没有去搞 web 开发。在那期间,我跟桌面应用相依为命,高中就这样了。

    直至到了大学,发现了大学里有一个比较严重的问题,学校素拓分数管理的那方面非常的不人性化,人工填写、人工打表、人工审核、人工盖章,这一些操作让我觉得不是那么的与现代接轨,现在都是主打无纸化、简洁化、便捷化,我就产生了做一个素拓管理的一套系统,但是整套系统的客户端是基于WinForms,历经几个月,最最最雏形的东西做出来给大学的老师看了一眼,马上得知,这套系统用 WinForms 开发其实弊端很多,首先不能兼容每个用户的使用最为致命,比如需要安装 .net framework,比如不能跨操作系统使用等问题。慢慢的我去了解 Web开发。

    现在

    现在….我其实就是一个编程小白,可以这么说:我对 .NET 似乎还一无所知,没有说技术有多厉害,毕竟我大学里选的是非计算机专业,学计算机知识靠自学了。我只是怀着这一份热爱编程在坚持,它能带给我成就感甚至快乐。所以我想在这里做一些交流,或者分享我的一些知识与技巧也好,经此而已。但是编程的路肯定会走到尽头,不会放弃。

    其实还有挺多东西要写的关于我的经历,也许我的经历对你没有任何帮助,但是不要紧,我只是想在这里,第一篇博客,记录我曾经的回忆。

  • 相关阅读:
    linux安装tmux分屏插件
    美化linux客户端zsh和oh-my-zsh
    使用Feign通过服务名调用服务,找不到服务
    Docker Compose 配置文件详解
    Dockerfile构建jar镜像
    Mysql数据库主从同步
    【Java】Java划水练习
    【2-SAT】Codeforces Round #403 (Div. 2, based on Technocup 2017 Finals) D. Innokenty and a Football League
    【贪心】【DFS】Codeforces Round #403 (Div. 2, based on Technocup 2017 Finals) C. Andryusha and Colored Balloons
    【三分】Codeforces Round #403 (Div. 2, based on Technocup 2017 Finals) B. The Meeting Place Cannot Be Changed
  • 原文地址:https://www.cnblogs.com/coder-xiaoyi/p/10125550.html
Copyright © 2011-2022 走看看