Learn To Build

逆流泛型
• 阅读 3194

最近收到一封朋友(不是软件工程师,但是在一家有名的硅谷科技公司工作)的邮件,问我能否给她提供任何好的“基础编程教程”供她学习。

作为一个自学成才(绝大多数都这样)的工程师,同样的问题我已经碰到好几次了。 “learning to code” 的概念在校外获得了广泛的认同,甚至连奥巴马也推荐它。类似 CodecademyKhan Academy 的工具还有在线教程像 Stanford’s CS106A 会帮助你踏实得走好每一步。

令开发者们喜闻乐见的是人们已经将视角转向了科技和软件以及思考“我应不应该在大学里学习计算机科学”。我们已经将 “learn to code” 比作颂歌一般,当朋友和亲人或是同事向我们咨询关于新的软件应用,或者向学生建议开发相关的重要技能时,我们会重复这一点。

但是简单的推荐 “learn to code” 让我感觉有点偏离它的初衷, 因为它没有说明编程和编写软件实际都和“建造实际的东西“有关。

词语 “learn to code” 微妙得暗示 “coding” 或者 “programming” 本身就是一个有价值的结果,但实际上并不都是,我们也不应该把这种印象带给那些刚刚开始从事软件开发的人。学习如何用 python 实现求3和4之和或者学习用 javascript 写一个 if 语句的想法让人感觉荒谬。

我意思也不是说学习基础不重要,不是必须的。创建一个有用的软件某种程度上是一个复杂的过程,而做菜却不是。 “Learn to cook” 你只需遵循烹饪书中某个基础的教程,还有一些简单的诀窍就能在做菜方面提升一大步。

其实许多行业遇到的问题恰恰相反。 开发一种新药需要花费数年来研究、训练和实践。这也是为什么我们未曾见过哪个总统鼓励每个人花费1小时来 “learning chemistry” 。软件开发拥有一种魔法,能让人很容易上手,即便如此,其依然存在大量有趣和复杂的问题等待着解决方案的出现。

对此我们不必忌讳。作为 “learn to code” 的替代,我们应该鼓励新人去 “learn to build” 。代码仅仅是一个构建事物的工具。由于软件是个人能构建的最强大的事物之一,这说明越来越多的人应该学会构建它。 Learning to code 是学会构建软件的第一步,但是学习不能止步于此。

学习构建的问题在于它不能在课堂上被真正的传授。你可以传授技能,但构建不是技能。它是一种心态。将周围的软件看成可操控的,并找到操控它的方法。这种心态只能来自于亲身实践的经验。

所以我建议我的朋友多多亲身实践,具体如下所述:

从基础开始。 选择一个基础编程教程。熟悉变量和数据类型以及控制结构和函数。加深对编程语法的理解会帮助你发现更深层的问题,这会在你遇到坑的时候起到至关重要的作用(坑可能会很多哦)。

找一个项目。 与此同时,在工作或者在学校寻找一些已经设计好的软件系统或者是你经常使用软件,但是你认为它在某些简单的地方处理的不够好。它可以小到像一个让人感觉不爽的错误提示消息,你老是看到它以至于你想去掉它。尝试去解决一个已知系统中的一些小问题。

解决一些小问题。 不要花费超过两周的时间在基础编程概念上,除非你真的乐意(即便乐意,最好放到一个月之后)。一旦你熟悉了基础编程,可以去做一些接近商业的编程: 试着去解决你遇到过的小问题。学习曲线在这里很容易就搁浅,而且很容易让人感觉沮丧,和你认识的懂软件的朋友聊一聊将会有很大帮助。

不要辍步。 一旦你解决了一个问题,或者之前在电脑上无法运行的软件在你的尝试下运行起来了,你会感觉到一种胜利的召唤。 和困扰决斗,拍拍自己的大腿,然后继续战斗。Bite off a bigger chunk. 如果对现在的项目感觉厌倦了,那么找一个新项目。和人们分享你在做在学的事情,获得下一步做什么的想法。

发明一些东西。 最终你会拥有足够的经验从零开始构建项目。这是一个令人惊奇的高度,你绝对会从中受益如果你有足够的时间和对它的渴望。不过即便没有达到这个条件,你依然会提升辨识问题的技能,找到解决的方法然后搞定它。希望你能帮助下个只身一人并且想要 learn to build 的家伙。

我也提醒她可能会面对的问题:

软件的作者不希望让你获得它的源代码副本。想方设法得找到破解的办法。通常在学校或者工作中改进一个内部工具活系统会比改善一个外部事件导致的政治问题要容易的多。开源项目看起来是一个好地方,因为代码很容易获取,但是请小心它们严格的保护并且入门比想象的要难的多。

起先你不知道如何进行一项小的改变。因为通常任何有用的系统都很复杂。不要担心,这太正常了。 从整个项目文件中搜索关键接口的名称开始。一旦你找到了,修改它来证明你有能力操作电脑,使它按你的意图行事。

你可能会变得沮丧。当然,大多数的事物是十分复杂的。向懂这个系统工作原理的人请教来弄明白你纠结的地方。确保你得到了一个解释,而不仅仅是一个解决方案。只要你尝试做出一些积极的改变,大多数的人会很乐意帮你来解决问题。并且如果你能表明自己做了许多的努力来尽可能的理解问题,那么应该很容易就会有人来帮你。当然也有例外,不过那些人都是傻逼,过着勉强糊口的日子,不要理他们。

假设我的朋友遵循了上面的步骤并且 learns to build ,接下来是我下一步要告诉她的:

你做了一次又一次。你学会了迭代。你明白不存在已完成的事物,一切的事物都是可以被改进的。你学会了在资源有限的情况下决定哪件事物更值得被改进。和周围的伙伴分享构建的知识,这样你们可以一起参与构建。


myBlog:http://wtser.com
from: http://benton.io/tech/2014/03/28/learn-to-build.html

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
liam liam
2年前
使用 Apifox 自动通关"羊了个羊" 1 万次,牛逼大了
事情是这样的,女朋友昨天跟我吐槽说她闺蜜玩“羊了个羊”刷到朋友圈榜前10,而她连第二关都过不了,已经开始怀疑自己了。于是我拿起了她的手机打开了羊了个羊小程序,打开了Charles和Apifox,并且结合了Apifox的自动化测试功能不小心把她刷到榜一!准备工作抓包工具:Charles获取token接口管理工具:Apifox地址:apifox.cn
Peter20 Peter20
4年前
mysql中like用法
like的通配符有两种%(百分号):代表零个、一个或者多个字符。\(下划线):代表一个数字或者字符。1\.name以"李"开头wherenamelike'李%'2\.name中包含"云",“云”可以在任何位置wherenamelike'%云%'3\.第二个和第三个字符是0的值wheresalarylike'\00%'4\
Wesley13 Wesley13
3年前
FLV文件格式
1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Stella981 Stella981
3年前
Node.js 中使用 ECDSA 签名遇到的坑
文/Fenying最近有个朋友问我关于Node.js下使用ECDSA的问题,主要是使用Node.js的Crypto模块无法校验网络传输过来的签名结果。在踩坑无数后,终于搞清楚了原因。坑0x00:签名输出格式在排除了证书、消息不一致的可能之后,我开始对比使用Node.js签名的结果与网络传输过来的签
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
1年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
美凌格栋栋酱 美凌格栋栋酱
5个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
逆流泛型
逆流泛型
Lv1
思归若汾水,无日不悠悠。
文章
4
粉丝
0
获赞
0