「咱可是贤狼啊。起码还是知道这世界上有很多东西是咱所不了解的。」 咱以知识共享 署名-相同方式共享 4.0协议授权这里的文字内容。

编程生涯 ABC(A) - 一切的开端

沒想到 Matters 社區還有教大家學代碼的功能XDDDDDD
-- @映昕【自學編碼Day5】使用 Javascript 設計 Reaction Timer 遊戲! 上的评论

为何要开始制作程序?

电脑程序设计(英语:Computer programming),或称程序设计(programming),是给出解决特定问题程序的过程,软件开发过程中的重要步骤。程序设计往往以某种程序设计语言为工具,给出这种语言下的程序。程序设计过程应包括分析、设计、编码、测试、调试等不同阶段。

因为人各有不同,于是开始尝试制作程序的动机各不相同:

  • 科班出身,程序设计是自己的学业。
  • 偷懒,不想手工做一些重复繁琐的动作。
  • 在看惯了一处的风景后想尝试一些新花样,例如各种游戏的 Modding。
  • 不甘限制,一心寻求突破。
  • 心血来潮,例如觉得对着黑黑的屏幕敲键盘的样子很 Cool 什么的。
  • 或者为了打发时间。
  • …… (汝的想法又是什么呢?)

于是,一个程序设计者(或者更常见的说法,程序员)的诞生之路就这么开始了。

是否要开始?

What I'm trying to say here is that you don't want to go into this business unless you are ready to commit to lifelong learning. Sometimes it seems like programming is a well-paying, reliable job -- but the only way you can make sure of this is if you are always making yourself more valuable.
我想说的是:除非你准备活到老学到老,不然的话,不要进入这个行业!编程看起来似乎是一个高收入而又稳定的工作。但要做到这一点,唯一的途径是:始终让自己更有价值。
-- 《Bruce Eckel:编程生涯

当然上面那话是说给想以程序设计/软件开发作为自己的一份职业的人听的,如果汝只是因兴趣而起的话,那注意保持住这份兴趣就好。(然后兴趣成为了自己的职业,完美)

我应该以哪一种编程语言开始?

随着时间向前推进,问这个问题的家伙们肯定会越来越多,因为编程语言的数量也开始增加了啊……仅仅是在 TIOBE Index 上被列出来的语言就有上百种。(当然这里并不是说照着流行的语言去学的意思)

为什么有那么多的编程语言呢,它们有的是专精于某一种领域(例如专精于编写动态网页的 PHP, 曾经专精于网页浏览器的 JavaScript (自从 Node.js 这样的工具诞生以后, JavaScript 就不止局限在浏览器的框框里了),和专精数据查询和处理的 SQL 等等),有的是为了解决前辈们的一些根本问题(例如为 C 增加新特性而诞生的 C++,为了提高安全性诞生的 Rust 等等)。

那么到底该从哪一种编程语言开始呢?

  • 如果汝有很明确的目标,那么就从完成目标需要的语言开始(例如要开发 iOS 应用的话,大概肯定要用到 Swift。 而要是 Android 的话,可能会用到 Java 或者 Kotlin)
  • 如果是乘兴而起的新手,为了不让自己的兴趣过早的被细节消磨殆尽,可以尝试从一些现代(比较新)的语言开始,例如 Python 和 JavaScript 。
  • 啥,汝说汝是科班出身?那请自己领悟这个问题(诶?)
你怕吃苦,受不了 C++,所以去学轻松上手的 Python 玩了。于是你理解了面向对象、函数指针、lambda 函数。哦还明白了异常到底是个啥。
Python 太慢了。怎么办呢,C++ 太难了,还是学 C 吧。于是你懂得了一个二进制可执行文件和静态、动态共享库是怎么来的,是什么样的结构,代码又是怎么执行的。懂得何时申请资源何时释放。知道 CPU 和内存是干什么的,还有什么缓存啊、分支预测啊、内存顺序啊乱七八糟的麻烦事。
可是你的 C 代码还是经常段错误,头疼啊。听说 Rust 不会段错误?那就学它好了~于是你知道了静态分派和动态分派,学会了泛型编程,知道了如何设计易学易用、跨平台的接口。
此时,你又遇见了 C++。「咦,我好像经常遇见你的影子呢。」
-- C++ 有多难? - 依云的回答
  • 以及, 一门不能影响你编程观点的语言不值得去学。 (啊这话不是咱首先说的)

我学会要多久?

首先要看如何定义“学会”,是会写出 hello, world 、写出一个自己满意的作品、还是深谙到编译器或者解释器?
以及不会像某些书封面描述的那样快:
Malcolm Gladwell has popularized the idea, although he concentrates on 10,000 hours, not 10 years. Henri Cartier-Bresson (1908-2004) had another metric: "Your first 10,000 photographs are your worst." (He didn't anticipate that with digital cameras, some people can reach that mark in a week.) True expertise may take a lifetime: Samuel Johnson (1709-1784) said "Excellence in any department can be attained only by the labor of a lifetime; it is not to be purchased at a lesser price." And Chaucer (1340-1400) complained "the lyf so short, the craft so long to lerne." Hippocrates (c. 400BC) is known for the excerpt "ars longa, vita brevis", which is part of the longer quotation "Ars longa, vita brevis, occasio praeceps, experimentum periculosum, iudicium difficile", which in English renders as "Life is short, [the] craft long, opportunity fleeting, experiment treacherous, judgment difficult." Of course, no single number can be the final answer: it doesn't seem reasonable to assume that all skills (e.g., programming, chess playing, checkers playing, and music playing) could all require exactly the same amount of time to master, nor that all people will take exactly the same amount of time. As Prof. K. Anders Ericsson puts it, "In most domains it's remarkable how much time even the most talented individuals need in order to reach the highest levels of performance. The 10,000 hour number just gives you a sense that we're talking years of 10 to 20 hours a week which those who some people would argue are the most innately talented individuals still need to get to the highest level."
马尔科姆·格拉德威尔(Malcolm Gladwell)撰文描述了一项针对柏林音乐学院学生的研究,他们被分为尖子,中等和不足三类,并被问到他们练琴的情况:
所有三组中的人,开始学琴的年龄大概相差无几,五岁左右。在刚开始的几年,所有人练习量也差不多,一周两三个小时。自八岁开始,实质性变化就有了。那些精英学生开始比其他人练习更多:九岁的时候一周六个小时,十二岁的时候一周八个小时,十四岁的时候一周十六个小时,一直到二十岁的时候一周要超过三十小时。截止到二十岁,在他们的生涯里已经有总计一万小时练琴。仅仅表现可以的那部分学生加起来是八千小时,那些未来的音乐老师有四千小时。
所以,更确切地说,一万小时,而非十年,是个神奇之数。萨缪尔·约翰逊(Samuel Johnson,1709~1784)认为还需更长时间:“卓越乃一生之追求,而非其它”。乔叟(Chaucer,1340~1400)抱怨道:“the lyf so short, the craft so long to lerne.”(生之有限,学也无涯)。希波克拉底(Hippocrates,400BC)因这句话被世人所知:“ars longa, vita brevis”(译注:拉丁语,意为“艺无尽,生有涯”),更长的版本是:“Ars longa, vita brevis, occasio praeceps, experimentum periculosum, iudicium difficile”,翻译成英文就是:“Life is short, (the) craft long, opportunity fleeting, experiment treacherous, judgment difficult.”(生有涯,艺无尽,机遇瞬逝,践行误导,决断不易)。
-- 《Peter Norvig:十年学会编程

现在,停下来读点什么

才不是咱编不下去了呢…… 以及越来越假设汝是有意投身于这个领域的人了……

文章中两篇节选的译文来源,还有另一篇关于编程语言的文章值得推荐。

这是咱对这个领域有兴趣开始看到的第一本与具体技术无关的书啦,除了编码以外也教授了许多基本功。

人非圣贤,孰能无过?啊不对搞错片场了…… 很显然不向人发问是不可能的,那么如何合适的提出技术问题呢?


  • 😴
  • 以及 Matters 不考虑一下加点显示代码的样式?
programming4
24
24

看不過癮?

馬上加入全球最高質量華語創作社區,更多精彩文章與討論等著你。