非科班如何学编程

题图

最近几年,程序员这个职业逐渐升温,学编程的人也越来越多,国外有个非盈利的开源社区,叫做FreeCodeCamp,目的是教人零基础学编程,现在已经汇聚了26万之多的人数。

我在深圳南山科技园上班,南山这边的写字楼也是越修越多,从科技园北区一路向南走,你会发现又多了好几个片区,在建的和新建的都有,例如深圳湾片区,软件基地片区等,我总在想,修这么多写字楼,有那么多科技公司吗?有那么多程序员吗?也许现在没有,等到修好就有了,这代表了这个行业的发展速度。

随着人工智能,虚拟现实等技术的爆发,计算机领域迎来了新一轮的技术革命,因为世界在发展,计算机处理的事情也会越来越复杂,计算机语言的发展趋势必定会越来越简单,不然开发的人力成本会越来越高,于是学习计算机的门槛会越来越低,结果是,我们的下一代人人都会使用计算机编程,编程变成了生存的基本技能,所以:未来的文盲不是不识字的人,而是不会编程的人。

微信公众号的slogan是:在小的个体,也有自己的品牌。于是一大批人开始写作,从而塑造自己的品牌,在公众号里写作,好的作家可以通过“赞赏”功能获得读者的鼓励,同时,他还可以把平时的作品汇集成一本书,从而将自己的一份时间出售多份。除了写书以外,任何创作实际上都可以达到这样的效果,其中开发一款受欢迎软件,并把它出售多次,是少有的可以让你产生巨额回报的方式。

作为一名程序员,我对这个职业的自豪感在近几年里不断提升,记得刚毕业那会,我经常会被金融行业的同学“鄙视”,因为待遇差距大,为了取得心里平衡,我只能用行业差距来安慰自己。而几年后,互联网行业已然冲到了行业榜的前列。曾经经常听到一句话:程序员吃的是青春饭,如果30岁前不转行或做管理,那么一定是死路一条,现在几乎没听过这样的言论了。相反听得最多的就是:嫁人就嫁IT男。

说了这么多,你一定对编程产生了好奇,也许你会问:非科班出生,如何才能学会编程?学编程难吗?这个问题的答案和你的目标有关,假如你想成为一名程序员,我会告诉你很难,例如在FreeCodeCamp上学完所有课程,需要2000个小时,学完后你就有能力找到一份相关工作,而坚持2000小时对于一个人来说并不容易——假设你每天花2小时,需要3年。

其实编程和成为一名程序员是两码事,就像用英语对话和成为一名英语翻译者是两回事一样,衡量程序员的标准往往更多,要求更严格,花的时间自然也更多,很多人在这条路上走得很辛苦,原因在于知识点多,无法看到全局,很容易就陷入其中而无法自拔,或者即便看到了全局,也要一项项的学完,即使学完了,还是不知道如何完整的完成一个作品。拿前端工程师举个例子,一个合格的前端工程师,要具备OS,HTML,CSS,Javascript,JQuery,Ajax,数据库,良好的编码风格,HTTP,Websocket,网络安全,git等众多技能,从一个初学者的角度来看,光看完这些专有名词就已经吓尿了,所以,花2000小时来成为一个程序员,是必要的。

程序员的门槛高,一般人不一定要以此为目标,就像我写作,也并不代表我要改行成为一个作家,而想学会编程,却是一件很容易的事情,我理解的编程是具备编程能力及拥有计算机思维,换句话说,就是利用计算机提升你的工作效率,减少重复劳动,从而把更多的时间用在创造上面。当然,如果你具备了编程能力,同时有意成为程序员,从这个起点上过度会简单得多。

我认为具备编程能力很简单,是因为我们几乎每天都在使用计算机,使用计算机和会编程之间其实只隔了一张纸,那张纸,就是图形界面,你觉得难,是因为我们被图形界面驯化了,在罗振宇和罗永浩的《长谈》节目中,他们谈到对驯化的理解

有一种人30多就开始当领导,带team,这种人就是被公司驯化的人,就是虽然看着我们在合作,但是自己的能力就逐渐没有了。时间一长,你会丧失基本的生存能力。好比你有了秘书久了,什么订酒店之类的事情自己反而不会处理。穷查理宝典的查理芒格,他一个多么富有的人,出门还做经济舱。李笑来就说自己最怕被金钱驯化,无论富有还是贫穷,我们都值得警惕这一点。职场的人到今天为止最怕的就是驯化。

图形界面让我们使用计算机的方式更为傻瓜化,人们会认为日常使用的计算机软件(例如Word)和编程是两码事,而在我看来,他们的本质是一致的,都是利用计算机帮你做事,抽象点来说,就是你给予它一定的输入,它会反馈给你相应的输出。具体一点,面对图形界面的驯化,我们应该怎么做呢?

除了日常使用的软件外,抛弃图形界面,思考下一步操作,用命令行该怎么完成。

这里命令行相对于图形界面来说,是一个人机字符交互界面,在不同的操作系统上,命令行程序也有区别,在macOS上,我们一般使用zsh,Linux上使用Bash,而Windows上则使用PowerShell或sygwin,在你的计算机上安装对应的命令行工具,就可以开始了。

操作系统中的一切都被抽象为文件,文件是用一种树形结构来组织的,而我们日常的操作基本上也可以看做是对文件的操作,所以,抛开图形界面,你可能首先要弄清楚:

  1. 如何定位到一个目标文件
  2. 如何执行一个可执行文件,同时让另一个文件作为这个程序的输入,例如用MS Word打开一个word文件
  3. 如何更新一个可执行文件
  4. 如何从互联网上下载一个文件
  5. 安装一个程序,计算机里多了哪些文件
  6. 如何删除一个文件
  7. 如何搜索计算机里有没有一个文件
  8. 如何找出文件夹下含有“TODO”字样的文件
  9. ……

不用图形界面后,你可能会遇到很多这样的操作,千万不要想一次性学玩,最好的办法是,遇到一个学一个,记在本子上,下次用的时候,直接用,忘记了再查一下你的本子。

那么问题来了,你可能会问:这不是更麻烦了吗,我在图形界面操作一个文件可能需要1秒中,现在用命令行,至少要10分钟……不要小看这些命令操作,它们除了可以单独使用,还可以组合起来使用,即把前面一个命令的输出,作为下一个命令的输入,下面这个例子可以很好的进行说明:

某一个文件夹中有各种各样的文件,除了文件,还有子文件夹,现在你想把文件夹下所有.torrent种子文件打包到一个压缩包中

如果你用图形操作,你的步骤是:

  1. 挨个打开每个文件夹,把.torrent文件复制到另一个空文件夹中
  2. 将新文件夹压缩

而命令行只需要一行命令:

find . -name *.torrent | xargs tar czvf torrent.tar.gz

仅仅一个命令的组合,就可以产生惊人的变化,前提是你要知道基本的命令怎么写。那么你又可能会问了:我想学的是编程,这些命令和程序有什么关系?回答这个问题之前,我们要先认识一下什么是程序。刚才说了程序都有一个共同的特征:给它一些输入,它便会对这些输入进行处理,最后产生一些输出。下面是重点,基本上所有的程序语言都提供三种语句:

  1. 顺序
  2. 分支
  3. 循环

利用这三个语句可以完成一切流程,也就是说,所有的程序都是由这三种语句组成的,它们形成了程序的逻辑,可以把顺序、分支、循环理解为一种控制命令。了解了基本命令和控制命令后,把它们按照逻辑组织起来,就是你的程序了,你看简单吧。可能你还会问,我这学的是什么编程语言?在计算机中,这是最基本的编程,我们叫它Shell编程。

我再举一个例子来说明一下,我们每天写文章,可能要把下载的图片先处理一下再上传,比如一张图片很大,我们就要对它进行等比例缩小,这样在手机里显示时才不至于加载过慢,从而影响阅读体验,而每写一篇文章我们都要做这样的操作,显然需要花不少时间,所以你可以写个程序来帮你做这个事儿,这里先假设你的图片是在1小时内下载完的,这个程序的步骤如下:

  1. 切换到图片的下载目录,例如~/Downloads
  2. 创建一个临时目录,例如uploads_temp
  3. 找出1小时内下载的图片
  4. 将这些图片等比例压缩成宽度为400像素的图片
  5. 转换后的图片文件放在uploads_temp
  6. 将处理后的图片上传到七牛云存储(可选)
  7. 回之前的目录

最终程序如下,我用数字标记了以上每一步,对应的代码是怎样的

#!/bin/sh
cd ~/Downloads     # 1
mkdir uploads_temp     #2
find . -mmin -60 | grep -iE "png|jpg" | xargs -I@ convert @ -resize 400 uploads_temp/@     # 3 4 5
sed -i 's#"src_dir".*#"src_dir":"uploads_temp",#' qupload.json     # 6
qshell qupload ./qupload.json
cd -     # 7

现在看不懂没关系,只要你开始,在今后一定会掌握这些命令。这里只是通过这个程序来给你一个深刻的印象,今后你每次下载完图片后,只需要执行这个程序,就可以一键完成上述所有工作,试想一下,如果你不用程序来完成,你需要花多长时间来做这件事,而真正解放了你的劳动力的,仅仅只有7行代码而已。

到这一步,你就是一个拥有编程能力的人了,后续,如果你想继续深入,也只需要你具备一个特质即可,那就是不断探索——例如,如果有一天你写的小程序足够多时,你可能需要做一个界面,或页面来管理你的程序,那时,你就真正从命令行跨越到了图形界面。

关注作者:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,383评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,522评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,852评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,621评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,741评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,929评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,076评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,803评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,265评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,582评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,716评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,395评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,039评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,027评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,488评论 2 361
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,612评论 2 350

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,837评论 25 707
  • 本文把程序员所需掌握的关键知识总结为三大类19个关键概念,然后给出了掌握每个关键概念所需的入门书籍,必读书籍,以及...
    dle_oxio阅读 11,092评论 6 244
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,637评论 18 139
  • 模式切换 保存文件,退出vi编辑器ZZ 编辑模式 将光标移动到文档开头gg 将光标移动到文档末尾G 复制yy 剪切...
    FlyingPenguin阅读 227评论 0 1
  • 坐上807路公车,车就驶进了夜色。 一个陈旧的我,怎么去面对每天新的夜色,还有那白亮亮的月色? 天,黑了,我,走了...
    李一十八阅读 194评论 0 1