到底该怎么学编程


首先声明,这篇文章来自于我自己的经历,对于他人的适用性不确定。

我刚刚写完了我们队伍(Team 6385 - TrueMoe)的FRC2017机器人基础RobotCode(仅operator操作时的手柄控制系统)。用的是C#,一个我在今天之前只知道怎么拼写、长什么样的语言。

身边的朋友好许人认为我是“大神”,只是因为我“很会写程序”,也有想学编程的小伙伴来问我,怎么才能学编程。我当然没有这么厉害,我只是一个全能又全不精的一个高中生。当然我是更希望我能精一样东西的。(不过我总比现在青少年IT圈中涌现出的一批批处理小学生、改代码小学生、单机打站小学生、花样装(zuo)逼(si)小学生要好,自认为。)别人在问我怎么学编程的时候,我听到最多的一句话是“诶,我听说是不是要学C语言开始啊?”当然不是啊!显然很多人认为编程是一个“打怪升级”的过程,我先学什么,然后学什么,才能学什么。多插一句,C的确是一个非常经典的语言,如果能学精,那是非常棒的,但是我并不认为它适合一个新手。举个简单的例子,中国大部分地区的高中的信息技术教学中的编程教学,大多是Visual BASIC 6.0。

那么该怎么按照我的路子开始学编程呢?

第一,相信靠谱的资料。这里靠谱的资料是指官方文档一类的,当然也包括市场上一些书籍,但我个人建议不要使用书籍,能用官方文档就用官方文档。因为图书市场鱼龙混杂,举个例子,谭老的C语言书。一般如果不是专业的朋友推荐,还是尽量看官方文档吧。然后多看点官方例程或者书上的例程(最好敲一遍),我第一门学会的语言Pascal就是把书上所有例程在Free Pascal上敲了一遍就学会了,每敲一个程序都会对这个语言的语法有点感觉。(别找我推荐!除了我小学的OI入门(keng)时专门买过《Pascal基础》外,我基本不看编程类书。)

第二,要会使用搜索引擎。能用Google就用Google,都打算入程序大坑了,还舍不得一点点“求学费”买梯子?百度我曾经试过几次,很难找到让我满意的结果。当然搜索也是要有技巧的,要简明扼要而又不失真的构建搜索词,才能找到前人给你铺的路。(用搜索引擎查找官方文档也是个不错的主意哦!)

第三,要会问。问,主要是在通讯工具上找朋友问,或者是StackOverflow、SegmentFault等在线交流(you)平台问。问的时候要说清楚问题是怎么出现的,出现了什么问题,如果你说的模模糊糊,怎么让别人帮你?注意,这是最后一步,只有第一第二不行才走这一步。毕竟大部分人没这个空来帮你解决一些明明网上一大堆solution的问题。(想起我一个同学,连VB6里面的数组定义和使用方式都错了,问我为什么不能运行,我当时很烦躁,直接就一句“老师上课时候都不听。”,就不理了。)

编程本身就不需要有人来教,只要你好学,没什么搞不定的。况且还有附加值:可以提高你的英语水平,毕竟以上三点你不可避免的要接触大量英文,讲个事实,英语是我三门主科中唯一的优势了。

我到目前为止(除了Pascal)没有一个我目前会的编程语言亲自写的第一个程序是很简单的。PHP第一个程序是OIH的爬虫,用了正则和数据库连接。Node.js的第一个程序是一个小纸条盒(Web应用)。C#的第一个程序是今天写的FRC2017的控制程序。C++的第一个程序是CRC2016的控制程序。最后,装完b跑路。npm install b

本文已经同步在Immortal.Work上投稿:https://immortal.work/p/yMoGdcTit6Estw2J6


什么?已经2017了?


看着2016变成2017,我的内心毫无波动,甚至还有点想笑。时间过得真快啊,一下子就一年过去了。总是这样,发现自己浪费了好多时间,但已经来不及了。

感觉2016是特别忙的一年,但也不知道我忙些啥。刚才跑去翻了一下git仓库,这一年的代码经历吧,还有点意思。首先我原来所使用的PHP在今年被我用Node.js代替了。不过刚开始我只是拿Node.js提供API,也就是前后端“分离”,真的是分离,前后端都不在同一个端口上。后来我慢慢的也不再naive了,比如TrueMoe的成员管理系统就是整合在一起的。也用NW.js做桌面程序。代码仓库里还放着一个我本来想拿去参加科技创新比赛的作品,不过可惜后来因为手机App开发大坑(Cordova坑,后来想用Xamarin,发现也坑),被我搁一边没动了。(顿时感觉自己好不敬业)不过可能和学校有点关系吧,我们一周只能在家呆29小时,一个周末也没什么心情去写什么代码了,虽然在学校我有中午,但是中午也就这么一个小时,根本不够。天海ID和OIH前端虽然都打算写,但是真的没什么空了。其他的,今年往npm贡献了一个名为using-frc-api的包,虽然没啥技术含量。

今年还有一些好玩的事情。首先,博文是:自动登录浙江省高校招生考试信息管理系统。这让我见到了政府部门的外包项目是多么坑爹。其次,阿里一位名为Jay Shao的员工博客中的各种抄袭,包括我的教程,让我一脸懵逼。我揭露了出来,还给我博客带来了大量的DDoS攻击,那段时间我不得不上CloudFlare。本来我是想投诉的,后来想想,算了,就这样吧,也没啥用,这人就这样,怎么说都是无用功。

7月中旬在厦门举办了GTC 17,个人感觉自己做的挺失败,也没有什么举办大型活动的经验。活动的时候也出了好些意外。回到金华后参加了一个FRC团队TrueMoe,走上了烧钱的机器人比赛的不归之路。

去年天海信息科技的开发也一直停滞,也是没有什么多余的精力来做,也许该怪我懒。

今年我3月就要参加FRC深圳赛区,然后就是第二次学业水平考试,要考语文、生物和政治,上半年还想试试技术的选考,看起来任务很重。下半年就是高三学生了,想去sjtu或者xmu,然而我现在觉得自己的最低目标hdu都危险。不过一切都会好起来的。

2017,加油。


如何优雅地用快捷键锁定macOS


我一直用黑果子,而且机子老,进入睡眠的速度慢,但是又有这么一个要快速锁定屏幕的需求。之前通过网上的教程,一直使用Keychain来锁屏(见下图),但通过点击的方法未免有些慢。今天总算折腾出怎么用快捷键锁屏了。

Screen Shot 2016-12-07 at 4.58.07 PM.png

先啰嗦一句,我的系统是英文的,下面诸如系统偏好设置的中文都是我随口翻译的,别太较真。

进入系统偏好设置-隐私与安全-通用里面,修改某选项为在睡眠和进入省电模式后立即要求密码。

Screen Shot 2016-12-07 at 5.01.26 PM.png

然后按下control+shift+eject(右上角的弹出键或者电源键)就可以检验成果啦!


以手机被没收后的想法来发发牢骚


本文也同时发布在 Immortal Works 上:https://immortal.work/p/yMxvXuj3cRa7o2Lj6

上周五晚21点50分左右,我打开手机设置完闹钟,刚准备放下,发现旁边站着班主任,我只能把手机上交。因为一些原因,周日我选择了逃学,并没有回校,而是呆在了家里。班主任也许会在班里说是因为我“玩”手机,因此回家一周(这是之前家长会的决议),但是呆在家里是我自己选择的。我是想好好缓一缓,脑子里想法太多,没办法。

一直不认为学校应该全面禁止手机,应该从堵到疏,从禁到限。我相信给信任比完全不信任要好,当然是有那么一部分人控制不住自己,但这个比例很小。把手机带到学校看成如洪水猛兽一般,我觉得这实在是很可笑。其实大部分的学生的需求其实根本不是学校“防止”的那种上课玩、半夜睡觉玩,但是现在的情况就像我妈今天刚和我说的,“这就是是一个定时炸弹”。曾经听到学校某领导说:“我们不可能像职高一样允许学生在学校里使用手机。”,虽然的确是方便管理,但是不见得带手机的人有减少。作为一个学生,我十分清楚这到底是什么情况,每个班肯定至少有12个以上同学带手机,而且查了一部,还有第二部。永远抓不完,永远不会减少。

我们班主任很讨厌我用中午的一个小时去写写程序做做小研究。仿佛我失去了那么一个小时在教室里的时间,我就失去了一本一样。今天我感叹“人太能动也不好啊”,因为班主任说我不是省油的灯。当然不省油啊,我只是想在学校里有个释放自己灵感的时间,在这些传统老师的眼里,我就是在浪费时间,我就是在不务正业。曾经和我关系不错的信息老师也觉得“该好好整整我了”。我曾经举过例子,让我脑子里的想法从周一憋到周六回家,还是周一直接释放出来,这两者哪个更影响我的学习?显然是前者啊。我感觉学校需要让学生当中这些有想法的人有自己表现自己的机会。可惜我校不光是个传统高中,还是个以“专注”为主旋律的学校,想做与学习无关的事情?好啊,你就想想吧!

顺便讲点不搭界的事情,我校“为了体现和美艾中”,不允许食堂打包带出东西吃。连小店买牛奶喝都必须得在小店里解决。这真是一个利校利民的好决策!


ZenWatch 2 国行改中国版 Android Wear 到国际版


0x00 原因及注意事项

看了看国际版和中国版的区别,加上实际体验,我决定试试强改系统为国际版。啊,这个ZenWatch 2(WI501Q)才拿到手27小时……

顺便写一下我自己在使用中发现的坑爹处:

  1. ZenWatch 2有Wi-Fi硬件,中国版不提供Wi-Fi设置
  2. ZenWatch 2有扬声器硬件,中国版只能震动
  3. Android Wear有丰富的手势操作,但是中国版……

数不胜数,当然,国际版需要付出一定的代价,比如你需要在手机上安装Google各种框架,还有Play商店的Android Wear app,你的手机还需要自备梯子,要不然根本不能正常玩耍。

还有如果你需要通过连接Wi-Fi实现手机蓝牙范围之外的同步的话,你还需要一个自带梯子的无线网络,要不然不能同步。

最后一点,以下操作有风险,并会失去保修,请谨慎操作。

以下操作均在我自己的ZenWatch 2 WI501Q下保证操作成功,并且我不对阅读本文后操作导致的变砖等事故负责。

0x01 镜像说明

这个镜像是我在自己的国行Watch上历尽千辛万苦装上了Android Wear国际版后dump出来的。2016年11月26日全部更新至最新版本。

版本号们
Android Wear 1.5.0.3318117
Google Play services 10.0.84 (530-137749526)
Android OS 6.0.1
Android security patch level Sep 1st, 2016

// 点开我,里面还有许多内容!