多人爱争论第一门程序语言该学什么。每个人的出发点不同,有人认为,第一门语言应当是有趣、无进入门坎;有人则认为,第一门语言影响往后程序开发的思考方式,要严谨而富有思考性;有人以实用为出发点,认为视(将来)工作与环境而定会比较好。
似乎哪个出发点都对,只是现今程序开发领域中,开发者势必要学习多个语言,对第一门语言的争议很多,却很少人谈论第二门程序语言该学什么。
回想一下,你的第一门语言是在什么情况下开始的,你有机会选择吗?
很多人对第一门语言的选择就是无从选择,多半是学校指定课程或工作上需要,或者是为了跳槽,选择了时下被认为工作机会多的语言。
如果是学校指定课程会用到的语言,多半又会牵涉到该教授奠定程序基础的语言,或者是毕了业后可以实用的语言。如果学校选了可以奠定程序开发基础的语言,有时又会被扣上产学落差的大帽子,然后就有人急着将当下实用的语言带入校园,只不过业界实用的语言不只一个,真要以实作为前提,就会造成有学校一个学期学一个语言,毕业前学了三、四种语言,却样样不通的窘境。
但是进入工作后往往要求你对自己负责的工种语言必须做深入的研究,例如程序员客栈www.proginn.com里面目前优质开发者三位当中一位web后端开发:明显之前学校学习的是java,后来工作做web开发所以对PHP非常精通(上图)
图灵奖得主Edsger W. Dijkstra曾在2001年写了一封信给德州大学预算委员会(你可以搜寻〈Dijkstraon Haskell and Java〉,找到这封信的PDF连接),力劝对方别将大学程序开发入门课程中使用的函数式程序开发语言Haskell,改成命令式语言Java,其所持实际性的理由之一是,对于新生课程来说,多数学生对命令式程序开发已有一定熟悉度,让他们面对函数式语言,能让他们马上发现,程序开发还有许多没想过的东西。
Dijkstra认为Java是大杂烩,是透过大量广告与侵略性销售行为,才得以达到商场接受度;他说:「不仅是小提琴塑造了小提琴家,我们训练自己使用的工具也塑造了我们,而在程序语言这方面有着深远的影响,它们塑造了我们的思考习惯」。
除了奠定基础或者是实用外的考察外,有些人比较有选择性,可以基于兴趣或成就感,选择第一门语言,程序开发基础或实用性不见得是主要考察,他们认为兴趣与成就感才能促成学习的动力。
在现今弥漫人人都该学程序开发、从小就该学程序开发的年代,有人试着挑选一些语法细节少、运行门槛低、结果回馈显著的语言,就是为了减少语言新鲜人的挫折,让他们能在学习过程中时时获得成就感,因而培养出程序开发的兴趣甚至能力。
能重新认识程序开发的语言
基于不同的出发点,你可能已经历经了第一门或甚至多门的语言选择(或无从选择),如果有机会重新来过,假设你现在有机会选择第二门语言,或者是你正面临或建议他第二门语言该学什么,你会怎么选择?
说是选择,也不全然是自主下的选择,毕竟第一门语言的影响力,有时像是母语般,还是会影响我们对第二门语言的选择,我的建议是,第一门语言既然必然影响第二门语言的选择,就长远考察来说,第二门不如选择与第一门相对性大,而且能够重新认识程序开发的语言。
不少研究指出,人类使用的语言会影响我们对世界的认知,使用不同语言的人会有不同的思考方式。在程序开发领域中,Dijkstra也谈到很重要的一点,程序语言塑造了我们的思考习惯。在运用第一门语言时,你是从它的角度来观看程序世界,如果第二门语言采取的角度与第一门类似,你看到的世界并不会有多大不同,找到一门可以相对角度观看程序世界的语言,才能看到程序世界的另一面。
如果你的第一门语言是静态定型语言,那么第二门试着学习动态定型,了解动态定型的弹性,第一门若选择了动态定型,那就反过来选择静态定型,了解静态定型中如何更严谨地思考型态。
如果第一门语言以面向对象为主要典范,那么第二门就学习以函式为中心的语言。如果第一门语言是命令式,那么就第二门就来了解函数式风格的语言。如果是处处以语法作出限制的语言作为第一门,那就以随时依赖惯例的语言作为第二门。如果你是基于工作选择了第一门语言,那么就基于兴趣来选择第二门语言。倘若你进入门槛低的语言是第一门,那么考虑找个进入门坎高的语言来做为第二门……
以相对于第一门的角度来选择第二门语言,往往有如骤然面临巨大陌生环境,这迫使你重新体会第一门语言刚开始时的步履蹒跚,你得从相对角度重新认识程序开发的世界,这样才有机会重新塑造思考习惯,也才能体验到Dijkstra在信中谈到的,程序开发还有许多你没有想过的东西,因为重新认识程序开发,你才有机会开始在程序开发上重复练习。
程序世界中的重复练习
在练习小提琴时,经常要反复地练习某个曲子,直到每个动作连贯而流畅,练习书法时,必须重复地练习临摩书法家的名帖,不少技艺都需要透过重复性的练习来熟悉基本动作,为将来更高超技巧奠定基础,同样地,每个卓越运动家的成就,都必然历经过十万个小时以上的练习,那么,在程序开发的世界中,有这种形式的重复练习吗?维基百科上有个〈Kata(programming)〉条目谈到,code kata可以让程序开发者透过练习与重复来磨练技能。
第一个将日本武术中Kata概念带入程序开发领域的人,可能是《ThePragmatic Programmer》共同作者之一DaveThomas,他建立了CodeKata(codekata.com),目前提供了21个简短的Kata练习,有些练习必须进行程序开发,然而撰写代码上可以有多种不同方式,有些重点不在程序开发,而在思考方式,正确答案也不只一个,你可以重复进行这些练习,这里练习的目标不在最后的解答,而是在练习的过程。Bob大叔在《The Clean Coder》中谈到Kata时也讲到:「练习者不是在解决真正的问题,因为你已经知道解决方案。相反地,你是在练习解决这个问题时,需要的动作和决策」。
当你在历经第一门语言的洗礼之后,对于某些问题,也许已经知道该语言如何解决,因此第二门语言在选择时,若能挑选差异性大的语言,就可以借此换个角度来思考,重新训练你解决问题时的动作和决策。此时,除了从语法上来重新思考之外,也要从语言社群的文化与惯例来思考,如此一来,就算是基础的数据结构与算法,也可以进行重复练习而从中获得不同的思考方式,我先前专栏〈数据结构与算法的七个思考术〉,谈到的就是这类的概念。
一年经验续用九年vs.十万个小时的练习
有人反对CodeKata的概念,认为程序开发领域中重复解决相同的问题集合,并不会带来任何进步,持有的对照示例像是:有人就算开了一辈子的车,也不会成为车神,也有人从戏谑角度说到「我只有一年经验,但又重复用了九年,这听来很糟,但是十万个小时的重复练习听来就很威」,这样的比喻并不正确,重点并不在于重复。
如同小提琴每一次的练习,虽然看似重复,然而每次都得尝试在重复中找到动作中需要改进的地方,或者更有效率的按弦方式等,才算是练习,如果每次都只是不假思索、单纯地重复,没有任何困难度与挑战性在里头,那就只是一年经验续用九年的重复,如果每次重复都加入了自我挑战与困难度,那才会是十万个小时的练习。
相关推荐
《2009年程序员杂志第十二期》是IT领域的一期重要出版物,它包含了当年程序员们关注的热点话题、技术趋势以及专业教程。这期杂志可能涵盖了多个与软件开发、编程语言、项目管理、新兴技术和行业动态相关的文章。由于...
《程序员》杂志是IT行业中备受关注的专业读物,2009年第二期的内容涵盖了当时IT领域的前沿技术和行业动态。这本PDF格式的电子版杂志为读者提供了丰富的知识资源,帮助程序员们了解并掌握当时的最新技术趋势和发展。 ...
### 2016互联网职场薪资关键知识点解析 #### 一、报告背景及数据来源 本次报告基于拉勾网提供的10万家以上的互联网公司数据,以及400万以上的互联网从业人员中的近200万名程序员薪资数据进行分析。报告旨在通过对...
1. 程序员职业规划:文档中提到的职业规划2.2,可能指的是程序员在职业生涯中的第二阶段或进阶阶段的职业规划方法,即在获得了一定的编程经验之后,如何有策略地发展自己的职业生涯。这涉及到对技术栈的深化、横向...
【编程语言 开发】 在IT行业中,编程语言和开发技能是至关重要的。无论是初入职场的年轻人,还是寻求进一步发展的专业人士,都需要不断学习和提升。在名师大咖的知识分享中,我们可以看到许多关于编程语言和开发...
- **第2章:上手实践——使用帮助文档、交互模式及 IDLE** - **帮助文档**:学习如何查找 Python 官方文档以及第三方库的帮助文档。 - **交互模式**:介绍 Python 的交互式环境,使开发者能够快速测试代码片段。 ...
在金融危机期间,许多IT从业者选择二次培训,以更新自己的知识结构,应对职场挑战。 综上所述,计算机学院的学生在实习和就业前,不仅需要扎实的专业基础知识,还要掌握实际操作技能,如编程语言、网络技术等。同时...
2. **个性化推荐**:根据用户的兴趣和浏览历史,插件会智能地推送相关的高质量内容,确保信息的针对性和有效性。 3. **离线阅读**:对于那些忙碌的职场人士,掘金插件支持离线缓存功能,即使在无网络环境下也能继续...
毕业生可从事的就业岗位多样,如.NET程序员、软件技术服务工程师、软件销售人员、ERP实施工程师、软件培训工程师、网络数据库管理和维护、网站推广优化工程师等。同时,学生还将有机会获得互联网应用(高级)、...
#### 第2章 相关理论综述 ##### 2.1 开发工具及技术 - **MySQL数据库简介**:MySQL是一种广泛使用的开源关系型数据库管理系统(RDBMS),以其高性能、高稳定性和易用性著称。在本项目中,MySQL将作为后端数据库存储...
【北大青鸟IT教育培训机构】是中国知名的IT职业教育品牌,被誉为“中国IT教育第一品牌”。该机构致力于培养具备专业技能和实战经验的IT人才。在北大青鸟的学习历程中,学员们将经历不同的学期阶段,包括S1、S2和Y2,...