乔希·考夫曼谈学习编程

宁皓网不交会员费虽然看不了视频,但是左边的介绍文本还是可以看得。
光是这个文本,就已经比很多文档要强了。

出自《关键20小时:快速学会任何技能》第五章

本来打算将该章录制成电台,但是几次尝试都被无情打断。夜间爸爸的业务电话和微信视频突然发声,妈妈下班回家。白天姥爷时不时“报个账”,狗叫、大队广播、豆腐叫卖 …… 总能将我好不容易酝酿的静谧打破。每次成功地打破我的感情之后,他们就又躲起来了,直到下次你再准备录音。

农村,绝对不是可以安静学习的地方。
成道莫还乡,还乡道不成。溪边老婆子,唤我旧时名。

既然天时不与,地利不奉,那就不录音了。只是简单摘录一些笔记吧:


  • 笔记内容:
    1. 学习心得:复杂的东西拆解之后就会变得简单。(decompose,divide&conquer)
    2. 自己的网站一下子拥有成千上万的粉丝的确是一件美妙的事情,但这样的美妙需要条件,即每个访客都能顺利访问该网站。然而,我的网站一旦接受到大量的访问请求,系统一定会在“无上的荣光”中彻底崩溃,草草留给访客一条无奈且神秘的错误信息。这让我非常头疼。
    3. 访客蜂拥而至,不出意外地我的网络服务器(计算机对访客每一次访问要求均会发送一个网页)一定会以崩溃收场。这种情况下,访客再也无法找到我的网页,相反,服务器会返回一条“数据库连接错误”或“错误503”的页面提示。
    4. 营销工作固然做的漂亮,然而我的系统却无力应对激增的访问请求。
    5. 最初,我通过增强处理能力和扩大内存来改善服务器。那样做有用,但只起到一定的作用。(超出仍然崩溃)
    6. WordPress易于安装和使用,运行无负担。
      在他的默认配置里面,每一个网页请求都会引起级联服务器的活动,它会产生数以百计的隐形请求,最终把网页发送给访客。
      注: WP的底层是PHP,访客访问的是PHP脚本文件,该脚本文件接收到HTTP请求后,就会开始运作,即通过解释器执行脚本命令,比如调取数据库里的数据“填空”,生成最终的HTML页面,再经由网页服务器以HTTP响应的方式发回浏览器。
    7. 这样的话,每一个单独的网页请求就会变得麻烦。也就是说,每一个请求都对内存和处理能力有很高的要求。(1000个访客同时请求浏览同一个页面,那么服务器就会试图同时启动1000个相同的流程。)
    8. 每个请求都涉及大量资源。服务器在完成所有请求之前就将耗尽内存。
      注: 资源(Resource)是对网站文件、处理能力等的抽象。
    9. 突然间,我意识到我在保持网站在线方面所花的时间比我在为读者搜索资料和写作方面所花的时间还要多。这简直毫无意义。
    10. 我不仅浪费了生产力,而且还未真正学会如何编程。我只是在学习一大堆针对特定情况的技巧和方法,而且这些技巧和方法只能用于WP的运行。这一点也不酷。
    11. Jekyll的网页功能。当运行一条指令,Jekyll就会使用你计算机上的文档(包含你的网站信息和设计模板)创建一个完整的网站。如果你需要对页面设计或页面内容做出修改,那么只需要再次开启Jekyll,整个网站就会进行自动更新。
      注: 静态建站。同类工具如 Hexo。网站运行速度极快,超级稳定。
    12. Jekyll是使用Ruby编写的。
    13. 创建网页的HTML和CSS语言叫做“标记”语言。HTML和CSS语言根本不智能,他只是简单地以特定方式告诉计算机把文本文档展示给用户(例如,“使该文本变成粗体”或者“这部分标题的大小是24号的字体”)。
    14. 服务器设置也是如此。我只是把实现写好的程序安装好,然后变更一些设定而已。在不需要任何编程知识的情况下,我只是使用它们而已,真正书写它们的是程序员。服务器设置和管理的确是一项有用的技能,但那毕竟不是编程。

……(待续)

  • 笔记内容2:

    1. 我知道程序员“编写”程序是一件创造性活动,可以通过很多种方式来完成。
    2. 程序经常被称为“应用”,它们(作为名称)之间可以互换。
    3. 一旦计算机程序被“运行”或“执行”,不管接下来会发生什么,它们一定会按照编写的程序命令做事情。
      注: 程序是静态的概念,放在硬盘上。 程序被拉入内存,由处理器执行,或者说作为脚本解释器程序的“输入”。 程序执行,就变是“进程”,即“进 (运、执) 行中的程序”。
    4. “输入”就是程序所使用的信息或数据,而“输出”则是当程序运行的时候,你得到的东西。
    5. “变量”基本上就是一些变化的占位符。你可以创建任意数量的占位符,然后让那些占位符代表你所想要的。
    6. “程序”本身实质上是一套详细的指令和规则,他们精确地告诉计算机使用“输入”做什么。当程序运行完成,他就会给你“输出”。
      注: 程序的最终结果。即你想要计算机做的事情。
    7. 当出错时或者计算机无法弄清楚接下来该做什么时,程序就会“瘫痪”或者会显示一条错误信息。
    8. 错误恢复编程语句被称为 Exceptions 函数,即针对错误的条件句:如果程序将要以 X 方式瘫痪,那么做 Y 可避免瘫痪。有点像医院大楼里的备用发电机。
    9. 本质上,计算机通过特殊的方式翻转微型电子开关来工作。计算机不能把人类语言的命令转换成为电子开关的布尔翻转(真/假变量被称为布尔变量,用于只有两个选项的奇特语句)。
    10. 编程语言的作用:赋予人类程序员一种特定的方式来告诉计算机何时开始、做什么以及何时停止。他们还允许程序员定义输入、流程以及输出的样式,以及程序的执行完成之后将会获得怎样的输出。
      每种编程语言都有一种特定的编写命令的方式,这叫做语法。语言的语法包括计算机用来将程序命令转换为微型电子开关翻转的规则。
      基本上,每种语言都有一种定义变量、条件句和 Exceptions函数 的方式。细节虽有差异,但核心却是相同的。
    11. 网络应用程序:在网络服务器上运行的应用程序。
      服务器:一台可以公开访问、长期开机的电脑(计算机)。
    12. “我需要学习什么”的简单框架:变量、条件句、Exceptions函数、本地/生产环境、数据库(活字)和用户本地终端上的数据(Cookies)。
      注: HTML只会展示文档中的文本,而这个文档是不允许自我更新的“无状态”资源。
    13. 熟悉术语 —— "terminology" site:stackoverflow.com
    14. 经验丰富的网络开发人员认为初学者可以先从两种常见语言中选择一种学习,比如 Ruby 或者 Python。
      对于程序员而言,专注网络应用的 Ruby 更受欢迎一些;而 Python 则在科学、数学以及图形库领域更受科学家和数学家欢迎。
  • 框架:

    1. 除了编程语言的选择之外,网络应用程序员对框架的选择也有自己独到的见解:代码程序库可以帮你更容易地完成大部分应用需要做的事。
      2.程序库(一系列程序形成的软件,你写的一个.java文件叫程序,这些程序分包合作形成的一个完整的软件,这里叫程序库,即发布好的程序包,Java叫jar包)非常重要,因为计算机会完全按照你的程序要求去做。物理学家卡尔·萨根:“如果你想从头做苹果馅饼,你就必须首先创造宇宙。”
      注: 这段看完下一段再返回来理解。
    2. 程序的“宇宙”:①内置包和命令 ②别人写的包,lib/jar ③程序运行系统(jvm)
      大部分编程语言都包含大部分程序所需的常见程序库,但里面的专业工具非常少。这时就需要选择框架(一套专业工具包)。从头开始编码会花费很长时间,然而,如果有一套框架的话,输入和使用可以得到测试,在完成专业任务时拥有可靠程序库。这样,就能专注于应用的核心部分,完全不必重新创造“宇宙”。
    3. Rails 非常依赖“生成器”,他是用单一命令创建大量样板代码的内置程式。样板代码可以根据程序员的不同要求做相应修正。有了 Rails,程序员无须从头开始花大量时间创建一个应用。只要他们知道接下来怎么做,费不了多少工夫就可以创建出一个功能性应用来。
    4. 从 Sinatra 开始学起。小型项目,语法清晰。
  • 开工:

    1. 目标:编写一个可以服务于 Jekyll 网站的 Sinatra 应用。
    2. 安装 Git。Heroku 是一个网络应用服务器主机公司。Heroku Toolbelt 是一个程序,负责安装程序员需要的一些常见软件开发工具,以便在 Heroku 上开发应用。
    3. 安装 Ruby。
      rbenv 用于管理系统中安装的多个 Ruby 版本。它不能直接安装 Ruby,但它有个流行的插件叫 ruby-build 能够安装 Ruby,且能在任意目录中编译和安装不同版本的 Ruby。ruby-build 也可以不依赖 rbenv 而单独使用。
      这两个工具都支持 OS X、Linux 和其它类 UNIX 操作系统。
    4. 记住!没有人天生就会这些东西。大多数时候,你需要做的只是花几分钟时间阅读这些文件,然后按照它们所说的去做就行了。
    5. Ruby 的包(程序库)叫做 gem。
    6. 《笨方法学Ruby》以变量赋值、基本算术、字符串操作以及基本条件语句作为开始,这些与我之前提到的例子类似。对于基础知识的学习,他是一种非常具有结构性和逻辑性的方法。
      在尝试编写我的第一个“真正意义上”的程序之前,我原本的计划是先读完 Eloquent Ruby 和 The Well-Grounded Rubyist,然后完成《笨方法学 Ruby》里面的所有练习。虽然只有10课,然而,我注意到了一件重要的事情:我越来越焦躁不安,而且正在失去兴趣。
      我好像正在复制另外一个人创建的程序,并且正在解决另外一个人所定义的问题。问题来了:编程开始变得像一种学术活动,而不是一项有用的技能。
      我需要跳出研究模式,进入实施模式。
      在开始编程之前,我不需要读完所有的书籍、课本、教程和其他我已经收集的资料。我需要立即开始编写真正的程序,如果遇到任何问题,在参考我准备的资源。
      是时候行动了……
    7. 《自述文件驱动开发》(Readme Driven Development),有别于没几年就会轰动软件行业一次的项目管理技巧,该文章旨在说明创建一个应用的最好方式,即做其他任何事情之前,编写一个自述文件。
    8. 让 SQL 或任何其他数据库查询语言与像 Ruby 这样的语言很好的契合是非常不容易的。使用一种语言进行编程已经很困难了,更别提同时使用几种语言了。
      这就是 ORM 们产生原因:它们允许程序员使用一种语言编程,然后用 ORM 将它们转换为数据库的语言。这就简单多了。
    9. Bootstrap 是一个预先编写的免费使用的 HTML 和 CSS 程序库。使用 Bootstrap 可以节省大量的时间:你可以几分钟内把你想要的应用程序的基本原型放在一起,无需花费数天时间。

PS:

其他关于本书想要说的。

  • 封底原印:
    1. 学习一门新知识或新技能的最快时间是多久?
      答案:20小时!
    2. 快速学习技能四大步
      答案:分解步骤,充分学习,克服困难,集中练习。
      注: 对比,我的体系是 “收集资料” + “学、习、修、证”。
扉页自结:
  1. 目标不同,手段不同,效果(效率)不同。求仁得仁。
  2. 初学时不要盲目追求质量(勿过度准备),必要的训练量和训练速度(计时训练)才是制胜法宝。
  3. 没有改进的简单重复是没有意义的。
     刻意练习、微小改进、「即时」反馈、高水平重复一万小时。 ——雕爷
  4. 天时不可为,人和在自己,唯借地利(扫除环境干扰)。
  5. 看买来的好书,学日语,写论文,(20160524)做以上任何一件事儿即使理论上占用了做其他事儿的时间(时间/机会成本),但绝不会产出悔、罪恶感。
     “我们宁愿把大部分时间消磨在电视和电脑上,也不愿意为梦想付诸行动,因为看电视、玩电脑简直太容易做到了。久而久之,我们的梦想,仅仅是梦想。而,很多技能在学会之前是体会不到他的乐趣的。”

PS2:

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

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,649评论 18 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,050评论 25 707
  • 本文把程序员所需掌握的关键知识总结为三大类19个关键概念,然后给出了掌握每个关键概念所需的入门书籍,必读书籍,以及...
    dle_oxio阅读 11,097评论 6 244
  • TITLE: 编程语言乱炖 码农最大的烦恼——编程语言太多。不是我不学习,这世界变化快! 有时候还是蛮怀念十几、二...
    码园老农阅读 5,316评论 2 35
  • 首先,还是有困,这是亘古不变的。在看之前有听室友简介过,所以大致知道会发生什么。我觉得还是有bug的,一路都在想威...
    Super_亭小亭阅读 305评论 0 0