兄弟们,因为编程可以锻炼逻辑思维,所以想学Java。这算是对编程感兴趣吗?

首发于微信公众号:镓话(jia-talking)

有一家饭店的大厨,烧得一手好菜,经过口碑相传,客人从五湖四海闻名而来。然而这对饭店的老板来说,并不单纯是一个好消息。因为客人不是奔着饭店,而是奔着大厨的手艺来的。老板必须想办法留住这位大厨,否则他一旦被别人挖走,饭店的生意就会一落千丈了。然而即便老板不惜血本保证了大厨的忠诚度,风险也依然存在:

大厨休息或请假的时候,菜品的口味就无法让顾客满意;
大厨只有一个,如果想在多个地方开分店,那口味也就不能保证了;
大厨再厉害,同时也只能炒一个菜,而顾客越来越多,输出总是供不应求;
大厨年纪大了总是要退休的,如果收徒的话,怎么继续保证徒弟的忠诚度呢?

有一天,老板突然悟到,决定菜品口味的是大厨烧菜的过程,而不是大厨本人。如果大厨愿意把自己每个菜的菜谱都写出来,那不就可以请别的厨师来操作了吗?虽然别人按照菜谱烧出来可能达不到原味的100分,但90分总是能达到的,而这样的差距是一般的食客无法分辨的。这样只要菜谱在,饭店菜品的质量就能得到保证,扩张店面、开分店什么的就都不成问题了。


于是老板和大厨谈了一个晚上,说服了他用菜谱技术入股。几年后,饭店生意越来越好,开了无数家分店,老板赚了很多钱,大厨也得到丰厚的分成,不用再天天靠手艺吃饭了。

在洗衣机出现之前,人们只能用手来洗衣服,需要经过浸泡、揉搓、漂洗、拧干的一系列流程。而全自动洗衣机的发明使洗衣服的工作人人都可以轻松完成,从而可以将原本用来洗衣服的时间解放出来去做其他事情。随着洗衣机的不断迭代升级,洗衣服的整个流程最终会被人们遗忘,只有设计洗衣机的工程师们了解流程,因为他们负责对其进行优化和改进。


所谓程序,就是为了实现一个需求而设计的逻辑流程。大厨的菜谱和洗衣机的工作流程都是程序,只不过前者由人来执行,后者由机器来执行。正是因为有程序作为媒介,我们才可以分离设计者、调用者和执行者的角色。虽然程序的执行效果未必能让其设计者满意,但它已经可以脱离设计者的时间和空间局限而存在,可以被其他人执行、验证和改进。


所谓编程,就是指编写程序。将烧菜的过程写成菜谱,本质上就是在编程。通过编程,我们更加透彻地理解并阐述了事物的本质,让曾经专属于某个人、某个团体、某个地方甚至某个时刻的东西,得以独立的存在和发展。从这个角度来讲,说编程是在创造生命也不为过。


编程可以说是一种标准化的写作。标准化保证了服务和产品的质量,也使大规模复制和扩张成为可能。KFC正是依赖其详尽到炸薯条的油温秒数的食品加工手册,才将分店开满世界各地的。陶华碧如果不能将她的豆瓣酱配方和制作过程清楚地描述出来,交由标准化生产线去制造的话,那么今天"老干妈"最多只是一个小乡村里的作坊级产品,不可能走上我们的餐桌。


我们每天的生活,都在和各种技术产品和服务打交道,比如导航、搜索引擎、聊天软件……你可曾想过,这些产品和服务背后的原理是什么?相信除了程序员群体之外,绝大多数人不会去想这些问题,因为:

这跟我没有关系啊!我又不去干这行……
应该只有专业人士才能搞懂吧,我可不行!
能用就行了,想那么多干啥,多累呀!

他们这么想并没有错,因为编程的本质就是:设计一个逻辑流程来实现指定的需求,使调用者无需了解实现细节即可达到目的。

由于程序和编程的广义概念太过笼统,为不导致概念混淆,下文中提到的"程序"和"编程",特指使用计算机编程语言编写,由机器来运行的程序。

假设你已经在某岗位工作了一段时间,根据经验总结出来每天下班前有下面三件事需要做:

A、在公司内网系统查询某业务当天的数据(约10分钟)
B、整理成日报表并存档(约15分钟)
C、把几个核心数据用电子邮件发送给领导(约5分钟)

你可以在认真梳理过之后,将这个流程写下来,贴在办公桌前,或者记在脑子里。这自然比那些不知道流程的人要强得多,你可以确保每个步骤都不被遗漏地执行到(然而这并不能完全保证)。虽然你已经花了时间认真思考过,但每天这样枯燥乏味的流程都需要自己执行一遍……等等,这活我不可以找个秘书来干吗?


当然可以,雇佣他人是一种用金钱换时间的解决方案。但是这同时又引入了许多新的问题:

你需要把要做的事解释给秘书听,并确保他能听懂(沟通成本)
秘书下班或休假时,这些事你还得自己做(有时间限制)
你要为秘书犯的错误承担责任(质量得不到保证)
每次秘书犯了错误,你都需要进行教育(培训成本)
秘书会直接接触业务数据和信息,难保有泄密的可能(安全隐患)
换一个秘书,以上的事情都得再来一遍……

这不是把事情搞复杂了吗?人的成本太高,提供的服务又不可靠。而如果你会编程的话,也许你可以:

编一个小程序来完成查数据、做报表、发邮件的流程,再配置一个定时任务每天自动执行;
谨慎一点的话,可以让程序先发到自己的邮箱,检查没有问题后再转发给领导;
必要的话,还可以让程序在运行出现意外时给你的邮箱或手机发报警通知;
如果你愿意,甚至可以给内网办公系统直接加上邮件报表这个功能……

假设你原本手工做完ABC流程需要30分钟,那么你的程序每执行一次,就为你节省了30分钟的时间。假如你写程序用了三个小时,那么一周就能收回成本,以后全部都是净赚的。如果程序运行的时间足够长,那么单次运行的均摊成本将趋近于零。可以看出,编程是一种用时间换时间的解决方案。


当然,你需要将要做的流程写成机器能读懂的程序;如果需求发生变化,你需要对应地修改程序;如果运行时出了BUG,你需要调试修复……但更重要的是:程序不拿工资,不可能辞职,不需要休息,不会闹情绪,不可能犯错,只要你的流程正确,依赖的资源不出问题,它就可以7*24小时一直运转下去。


每当我们写程序实现了一个需求,就好比造出了一把锤子。今后你遇到类似的问题,都可以拿这个锤子来解决。当然有时会遇到锤子不称手的情况,需要持续地升级和优化。但在大多数情况下,这个锤子都是可以直接拿来用的。也就是说:完全相同的问题,你只需要解决一次就好,不会浪费时间在重复的工作上。


通过编程,你可以将那些枯燥无味的重复性工作中的部分甚至全部,交由机器来接管,这样就可以将你的时间和注意力从具体的事务中解放出来,去做更有价值的事情。比如研究和优化工作流程,或者陪伴家人,又或者去读一本书……

喜欢网游的朋友可能都知道外挂这东西,这是指和游戏一起运行、为了提升游戏体验的小程序。外挂一般分为两类:一是在游戏系统框架内简化玩家操作的辅助性外挂,提供如自动拾取、自动打怪、改键之类的功能;二是利用游戏漏洞营造不平等的作弊性外挂,提供如开图、加速、无敌之类的功能。

随着游戏行业的迅猛发展,现今很多网游都已经配备了原本由辅助性外挂提供的功能,辅助性外挂正在逐渐消亡,只剩下作弊性外挂和衍生的一系列黑色产业链,你懂得。

当我们说某个人"开挂"时,其实是在说他的表现(数量、速度、精确度……)明显超出正常的范畴。当原始土著人碰到使用着各种科技产品的现代人时,大概就是一种"**,这哥们开挂了吧?"的感觉。


要知道,身体并不强壮的人类之所以能征服地球,就是因为我们会创造并使用工具来突破生理的局限,做到原本不可能做到的事情。在即将到来的全信息时代,编程将是创造工具,甚至使用工具的主要方法。我们天天都在使用的软件和APP,不管是文字处理,K歌软件还是搜索引擎,都已经和我们的生活融为一体,成为我们生命的延伸。通过使用这些软件,我们可以不断突破自己经验和能力上的局限,我们随时都在给自己"开挂"。


然而大多数人都是在被动地等待别人来满足自己的需求。他们会使用通过朋友推荐、广告宣传等各种渠道推送给自己的软件,然后感慨一下:"哇,居然还可以这样!"他们只会使用已有软件提供的标准功能,而一些个性化的特殊需求就只能因为软件不支持放弃掉了。这就和穿衣服一样,大多数人只会买标准尺寸穿,如果这里紧那里松,这里长那里短,也就只能忍了。


还有少部分人会主动考虑如何去满足自己的特殊需求。他们会想:"如果有XXX功能就好了……"他们会主动去寻找能满足自己需求的软件,研究软件的个性化配置,或者给软件的开发者提功能建议。同样,追求个性的人可能会找裁缝为自己量身订做或者修改衣服,使其尽可能地适合自己。


只有极少数的人有能力自己去实现那些别人不能满足的需求。他们能在原有软件的基础上开发插件,对软件进行二次开发,甚至写出一个全新的软件。同样,追求完美的人可能会亲自设计衣服,并把一件衣服不停地改来改去,直到自己彻底满意为止。


如果说学好英语能为你的世界打开一扇门,让你拥有更多的选择的话;那么学好编程就能让你有机会以"上帝视角"来认识和改造这个世界,并拥有几乎无限的可能性。因为在现实中的一切最终都会被信息化,而你可以通过编程来对信息做任何形式的加工和处理,只要你想得到,就能做得到。


你想体验"开挂"的人生吗?那就赶紧开始学编程吧。

每个人都应该学习编程,因为它将教会你如何思考。——苹果创始人 乔布斯 [1]

思考,是人之所以为人的行为,而编程是一种对人的思考进行再思考的行为。我们不需要把每件事情想清楚,就可以在现实社会中生存。对某些从事机械性操作的职业来说,甚至完全不需要进行思考。然而在编程时,我们只有在想清楚之后,才能把程序写出来。在编写正确、高效、优雅的程序的同时,我们也在塑造自己的大脑,让它能思考得更清楚、运转得更高效。


编程要求我们客观地去思考事物的本质,将注意力放在事物本身,而不是事物与我们的关系上。当古代的妇女在河边洗脏衣服时,她可能在想:"河水好冷啊……这衣服颜色真漂亮……我家孩子为啥这么调皮……"而当我们在为洗衣机设计程序时,只会想:"哦,这有一堆脏衣服需要洗"。其实很多原本困扰你许久的问题,只要跳出"我"的范畴,进行"忘我"的思考,就变得特别简单和容易解决。


编程是将人的想法"实体化"的过程,这要求我们进行更深入、更细致、更全面地思考。为了实现一个需求,你必须对其原理和运转流程了解得十分透彻,否则就无法用编程语言精确地描述出来让机器去执行。在实体化的过程中,想法的结构缺陷和逻辑漏洞会自然凸显出来,你总会发现存在没有考虑到的可能性,以及需要进一步思考的细节。


编程要求我们能够对事物和流程进行拆分,并在不同的抽象层次上进行完整自洽的思考,这使我们有可能去解决那些规模无比庞大的问题。在实现一个稍具规模的需求时,我们不太可能同时考虑主体流程和操作细节,也不太可能同时从多个角度进行思考。经过合理拆分后的需求细粒度需求简单明了,实现难度大大降低的同时,还可以分配给多人来共同进行。在一个成熟的软件或互联网公司,上千名工程师一起开发同一款产品是很常见的,而你能想象这么多人一起去写一本书么?


编程是不断解决问题的过程,也是不断完善解决问题的方法论的过程。一个优秀的程序员总是解决问题的高手。在编程的各个阶段(需求定义、方案设计、编码实现、调试纠错……)中,都将面临无穷无尽的问题。这个问题要不要解决?什么时候解决?其根源是什么?需要考虑哪些方面?如何做取舍?有哪些方案可供选择?选择的原则是什么?……解决问题的方法论展开来讲可以写一本书了,且容我有时间另撰一文来表。

半个世纪以前,美国有70%的人口在农场工作;随着自动化耕种的大面积普及,现在只剩下不到1%。 ——凯文.凯利《必然》

从登录月球到生产纳米机器人,我们已经通过设计并使用各种机器完成了人类原本不可能亲手做到的各种事情。迄今为止,人类从事的简单重复性的工作(如洗衣、耕种、制造等)已经几乎完全被机器接管,人类的工作方向已经转向对机器的研发和维护。而那些需要复杂知识和精密操作的工作(比如驾驶汽车、外科手术等)也正在被机器逐步接管。


洗衣机解放了家庭主妇们的双手,全自动流水线则解雇了工厂里的大部分工人。只有在一些正享受人口红利的发展中国家(比如中国和印度),由于技术引入成本比人工成本高,目前体力劳动者还有一些生存的空间。但技术的成本会不可阻挡地快速持续下降,而人口红利的窗口期将快速消失,拐点很快就会到来。


资本是具有意志的,且不为人性所改变。当产出的质量不变,而技术的成本显著低于人工成本时,几乎所有的体力劳动者都会失业。机器不知疲倦,不会抱怨,干得比人又快又好又省钱,人类怎么可能和机器竞争?


与此同时,人工智能正在将逐渐接管人类的简单重复性思考活动(如寻路、翻译等),人类只需要下达命令、制定原则和做出选择即可。人工智能甚至已经进入了那些被人们认为是"人之所以为人"的领域:写作、编曲、绘画……


Google的AlphaGo战胜李世石是一个里程碑式的事件,它证明了人工智能已经可以在人类最擅长的思考领域超越人类。现在最优秀的棋手都在向AI学习下棋,职业棋手和AI进行日常训练成了常态。纯机比纯人强,人机比纯机强,这早已是棋界的共识。


当人工智能在某个思考领域的能力接近或超过人类(这在很多领域已经做到了 )时,而其成本极其低廉(这是早晚的事)时,在资本意志的作用下,这个领域就会将不可逆地被人工智能迅速占领。我们今天已经习惯了使用计算器来取代大脑进行数字计算,在不远的将来,我们也会习惯将原本需要自己思考的许多问题交给由无数程序组成的人工智能来处理。在可以预见的未来,所有构建在经验和技能基础上的非创造性工作岗位都会消失,人类的工作方向会转变成对人工智能的研发和维护。


人工智能全面普及的时代正在以光一样的速度向我们飞奔,可能下一秒就将我们远远地甩在身后,连车尾灯都看不到。届时,几乎所有的工作都将和人工智能密不可分。只有那些理解人工智能,能够很好地和人工智能合作,并帮助改进人工智能的人,才能在那个时代更好地生存下去。

每个人都应该尽早开始学习编程,我的孩子起步太晚了,我觉得应该在教他们ABC和颜色的时候就开始。——美国第44任总统 奥巴马 [2]

在《未来我们该学什么语言?》一文中,我曾畅想过未来可能出现的脑接口技术,以及与之配套的人机共用结构化语言。届时我们的大脑将直接接入互联网和人工智能,可以瞬间将需要的知识和信息下载到大脑中……我们将成为神一样的存在。但前提是你必须具备编程基础,才能享用这一革命性技术带来的成果。


什么,那时候你还没学会编程?可以洗洗睡了。

可是我又不准备当程序员啊,有必要学编程吗?

你可能会开车,还是个老司机,很会享受驾驶的乐趣,但你未必愿意去当一名出租车司机吧?同理,学习编程不一定非要做程序员,但却能使你拥有全新的视角、深入的思维方式和效率优化的思维,这都将成为你重要的软实力。在不久的将来,编程将会变成像英语、驾驶一样人人必备的技能。到那时,你希望自己是一名老司机,还是搭车族呢?


"学这个有用吗?"其实是一个很可怕的想法。由于很多东西现在看起来并没有什么用,大多数人就放弃了学习,而只有少数人会抱着"学学看能有什么用"的念头去尝试。在之后的某一天,真正需要这项技能和知识时,那些选择放弃的人只能感慨"要是当时……就好了!",而选择学习的人则会惊喜地发现"哇,原来还能用在这里!"……所谓的"惊喜"和"运气"其实就是这样一回事:在不知不觉间,已经提前做好了准备。

那我能不能现在努力赚钱,然后雇一个专业的程序员呢?

不错,你是可以找一个程序员来实现你的想法,但我们之前请秘书时遇到的诸多问题又会接踵而来。更重要的是,如果你不会编程,你可能连个靠谱沾边的想法都提不出来。就好比没有见过汽车的人,只会想着让别人为他造一辆更快的马车。只有在理解了某个事物的原理之后,这个事物的概念才能在你的脑中清晰起来,才能真正融入你的认知结构中。


有了清晰的概念,你才能对其进行思考,判断它能够用来做什么,不能做什么。如果概念不清晰,你甚至都无法讲清楚自己的需求,更难和程序员进行沟通和合作。每一位程序员在面对"给我做一个淘宝"这样的需求时,都会崩溃的。

我的英语很烂,能学会编程吗?

英语不是学习编程的瓶颈,关键在于理解其概念和原理,以及改变思维方式。虽然几乎所有编程语言的关键字都是英语,但常用的关键字也就那么几个,热门语言的相关书籍也都有译版。如果你愿意的话,甚至可以用中文来给程序里的变量、函数和命名。正如只要你认得start / save / load / quit这几个单词,就能去玩英文游戏;只要会说sorry和how much,就能去国外旅游一样。

我已经工作好多年了,现在开始学还来得及吗?该从什么地方开始?

任何时候开始都不晚,当然越早越好。中国第一款杀毒软件KV300的作者王江民,就是38岁才开始学习编程的。至于应该怎么学,从哪里开始,这将是我今年的主要思考方向,敬请期待我的后续系列文章。也许你可以先试试这些网站:

 :通过玩游戏来启蒙,有中文版,适合初学者
 :交互式实战,效果最佳,但需有一定基础

曾经何时,想要建立一个网站服务,需要购买动辙数万元的专业服务器,支付昂贵的机房托管和带宽租赁费用,聘请专业的开发人才或团队来研发,再通过广告和运营活动去拉拢用户……门槛如此之高,使绝大多数人望而却步,只有企业才能负担得起。


而现如今,云服务器甚至比家里的宽带都便宜了,各种开源技术唾手可得,各种开放平台提供了免费的用户和渠道,一个APP通过社交网络可能瞬间火遍全国……有了树莓派这样超便宜的卡片电脑,再加上现在各种家电都在向智能化发展,想通过编程在实现自己的一些小创意,真是不要太简单。


我们正身处一个只要愿意思考,就能改变世界的时代。那么你是愿意去改变世界,还是等待被世界改变呢?

作者简介:86年射手座,陕西西安人,一名具有独立思考能力和代码洁癖,且兴趣爱好广泛的程序猿。骨灰级游戏玩家,曾在魔方、扫雷、俄罗斯方块等领域取得国内第一,多次打破全国记录,并作为嘉宾参与《佳片有约》、《天天向上》等节目录制;扫雷网(saolei.net)创始人。

}

  听闻英国开始让五岁的孩子学代码了?为什么要做这么残忍的事情?听说国内也开始蠢蠢欲动了,所以我们为什么要让这么小的孩子学代码?

  乔布斯曾说过“人人都应该学习一门计算机语言,因为它将教会你如何思考”。在美国的Hour of Code Week( 全民学编程周)中,总统奥巴马为了号召美国人民编程,还亲自写了一段java代码,并表示向美国学校资助40亿美元用于计算机科学教育。英国也将2014年设立为"Year of Code",规定所有5-16岁的学生都必须学习计算机编程。

  由此可以看出,让孩子学习计算思维在美国法定教学大纲之计算机部分中占有重要的地位。

  孩子在学习计算机启蒙中能收获到什么?

  在早年对乔布斯的访谈中,似乎让大家更清楚的认识到计算机启蒙最大的好处是可以对人的思维方式进行训练,他是一个对思维完整性和逻辑性进行训练的过程,而在这个过程中我们可以培养一种新的看待问题和处理问题的方式。

  由此看出,无论以后是否从事计算机行业,都应该具备这种基本素养。

  然而我们并不是为了编程而学编程,不是为了敲代码在屏幕上画线。更重要的是学习编程中的思维和逻辑,也就是真正的计算机原理:信息是怎么存储在计算机里面的,算法是怎么让计算机工作的,让计算机运行的程序究竟包含些什么思想,在网络中计算机是如何用密码来保证自身信息安全的,在人与计算机交互时应该考虑到那些界面设计原理,这些最基本的计算机原理才是一切编程的基础,是孩子在现阶段最应该学习的东西。由此来开发孩子的计算机思维,这不仅为下一步学习编程打下了良好的基础,这种思维还将伴随孩子一生,有益于他高效率的解决生活中的各种问题。

   计算机思维应该怎样培养?

  注重从小学阶段的基础

  现在很多家长所处的年龄段,在他们小时候也并没有普及计算机教育,所以现代家长会选择一些教授计算机知识或者编程的机构。但是如果家长盲目的直接选择少儿编程课程或机器人培训班,往往会事倍功半。

  在新的英国国家教学大纲里,5-7岁的学生需要通过计算机课程掌握:

  • 理解什么是算法,以及算法如何以程序的形式在电子设备上运行

  • 创建和调试(debug)简单程序

  • 用逻辑推理预测简单程序的执行结果

可见学习编程之前,应该让孩子首先学习的是计算机原理性课程。像建造房子一样,地基是房子的基础核心部分,一个房子的牢固性的关键所在就要看地基,在这里,计算机原理好比“房子的地基”,原理知识打牢,“房子”才能更牢固。

 2016年的1月30号,美国总统奥巴马对公众发布了“全民计算机科学行动计划(Computer Science for All)”项目,鼓励美国中小学生尽早地学习计算机科学的知识,为未来的大学学习和职业成功做准备。

  在奥巴马的这个项目里,“计算机科学”其实就等同于“计算机编程”,由于很多学生家长并不了解计算机编程, 老师写了这篇科普文,希望能够解答广大学生家长心中的困惑。

  那么中小学生学习计算机编程到底有什么好处呢?

  1、出国留学,计算机编程能力是打动面试官的最佳捷径

  据教育部数据显示,近几年我国出国留学人数逐年攀升,2015年度出国留学人员总数达52.37万人。申请人数的剧增,导致国外院校的录取门槛逐渐提高。

  以美国为例,美国知名的私立高中和大学本科每年的招生名额几乎变化不大,对于国际生和各个国家的配额都有限制,有的学校每年录取的中国学生数量严格稳定在五个或者三个这样的个位数。

  对于中国学生而言,大家的标准化考试成绩(SSAT/SAT、TOEFL)都是很优秀的,课外活动背景也差不多,让招生官在成千上万个类似的申请人当中录取3-5个学生,申请竞争的白热化程度可想而知。

  此时,学生的特色就成了胜出的关键,在众多的特色当中,提供编程能力证明正成为打动面试官的最佳捷径。如:南京外国语学校的谢春阳因编程特长被耶鲁大学、哥伦比亚大学同时录取,武汉外校英中国际班学生沈凡具有编程特长被库珀联盟学院录取。

  2、计算机编程是美国高中课程的组成部分,学习编程可以减轻留学后的学业负担

  以美国TOP140寄宿高中为例,大部分寄宿高中的数学系都会开设不同操作系统下的编程课程,如iOS、Windows、Android以及游戏编程,还有不同的编程语言,如Java、C语言、Python等。

|美国某寄宿高中上课场景|

  由于中、美教育制度的巨大差异,初到美国留学的中国学生都需要一段时间才能适应,而学生如果能够在赴美留学之前先学习一部分课程,比如计算机编程课程就可以减轻留学后的学业负担,为学生快速适应美国的学习节约时间。

  3、对于很多职业来说,计算机编程成为必不可少的一个技能

  大家还记得引力波吗?在今年的2月12号,美国科学家宣布,他们去年9月首次探测到引力波。这一发现印证了物理学大师爱因斯坦100年前的预言。宣布这一发现的,是激光干涉引力波天文台(LIGO)的负责人美国卡尔顿文理学院(Carleton College)的Nelson Christensen教授。

|美国卡尔顿文理学院召开发现引力波的新闻发布会|

  这个机构诞生于上世纪90年代,进行引力波观测已经有近30年。那么观测到的引力波数据的量应该很大,科学家如何对这些数据进行分析呢?答案是前面提到的Python编程语言。

  据LIGO团队成员、来自中国的留学生罗家伦介绍,引力波的探测实属不易,仪器会探测到成千上万的数据,“如果是人工一个个去看,需要很多年。”罗家伦说,其所在的小组需要运行用Python语言编写的程序来分析在探测到的引力波候选信号中,判定哪些是真正的引力波。经统计分析,他与团队寻找到统计显著的数据,最终找到信度高达99.99995%的《物理学评论通讯》中所介绍的引力波。

  其实对于很多职业来说,编程成为一个必不可少的技能,例如生物学、金融学等等,他们需要编程技能,以让他们能够进行日常的研究和工作。

  4、学习计算机编程可以训练学生的逻辑思维能力、创造力

  我们都知道数学主要是开发人的逻辑思维能力,计算机编程可以说是数学的一个应用方向,那计算机编程怎么对人的逻辑思维进行训练呢?举个例子,大家都玩过俄罗斯方块这款小游戏,假如现在让你写一个俄罗斯方块游戏APP,你会怎么入手?

|俄罗斯方块游戏界面|

  从编程思维的角度来看,我们需要将问题进行分解,将一个大问题拆解为一个个小问题,然后逐个完成。对于上面的游戏,我们大致可以将其分解为三个小问题:

  a.游戏界面(速度和积分显示怎么处理?主游戏界面怎样显示?)

  b.俄罗斯方块(一共有多少种方块?每种方块用数学坐标应该怎样表示?)

  c.游戏逻辑(方块的下落,左右移动,上下翻转,掉落消除应该怎么处理?对应的数学坐标应该怎样计算)

  编写这个游戏的过程充分应用了分类讨论,函数思维,问题抽象等多种思维方法。写完这个游戏之后你会发现原来一个看起来很简单的游戏竟然隐藏着如此多的细节,背后有那么多的复杂的逻辑需要处理,每一个软件和游戏其实都是逻辑思维的艺术品。

  在这个过程中你会不断发现自己思维存在的缺陷和问题,并着手去进行完善。将这种编程逻辑应用到日常生活中,应用到读书写作中,你会有新的收获。

  比如现在要写一篇议论文,但感到无从下手,我们就可以按照编程的方式将问题分解——是想不到论点,还是没有支持的论据?论点不足应该怎么办,论据不足又该怎么办?你手头有哪些工具可以利用?你期待写成什么样子?明确问题之后再将它们逐个击破,问题也就得到了解决。

  通过上面的介绍,相信各位家长朋友对于计算机编程、对于让孩子学习计算机编程所获得的益处有了比较全面的了解。我们每天上淘宝、天猫、京东购物,用滴滴打车,用支付宝、微信付款、理财,用百度地图导航,用12306手机APP购火车票,用携程订购酒店,用酷米客查公交车……

  生活当中这些我们早已习以为常的智能手机、软件APP,以及作为纽带的互联网,无不依赖我们人类编写的程序驱动。另一方面,由于我们国家教育方面的原因,学生一般需要到大学一年级才开始学习计算机编程课程,但是在学生上大学之前的这十几年时间,他们与生俱来的天性——创造力却无法被激发出来(他们大多只会使用这些数字设备)而白白浪费了……

  当今世界,全球一体化早已成为社会趋势。地区与地区之间,国家与国家之间,经济与经济体之间的交流和接触日益频繁,障碍逐个被扫除,资源和信息的流动变得前所未有的畅通。随着全球化步伐的不断迈进,国门不断打开,我们国家的年轻人已经和世界各国的年轻人走到了同一个舞台上,需要和全球同龄人去竞争。

  在21世纪,计算机编程已成为除英语之外必须掌握的第二门外语,为了不白白浪费孩子创造力,为了让孩子能够在未来的全球化竞争中胜出,让孩子学习编程吧,越早越好……


}

长途跋涉,我上下求索!

最近,在认识的地方闲逛,很多人对自学编程、转行当程序员感到困惑。 我25岁的时候成为了程序员。 恰到好处的时候(中国云计算刚刚开始,移动互联网受欢迎的阶段) ),同时走了很多弯路。 因此,根据自己的开发经验和思维认识) ),我现在有8年的Java开发经验),希望后来者能给我一些建议和参考。

本文主要面向编程初学者、大学生、中学级工程师(3年以下)。

为什么学习编程能有力地锻炼人的逻辑思维能力? 逻辑思维是理性思维和决策的必要条件,也是思考任何问题不可缺少的基本思维能力。

编程是一项集设计、发明、创造、表达于一体的快乐而富有挑战性的职业。 如果你愿意研究事物的原理,创造新的东西,那就没你的错了。 不管别人怎么看,我个人都喜欢编程!

软件开发的工资相对较高。 因为有门槛,所以需要耐心、花时间,理解文字、理解逻辑。 很多人可能受不了和文字的交流,受不了调试器的无聊。 (程序错误报告可能只是文字不写,也可能是错误的,看不见) (无法承受软件的复杂性) )现代软件通常基于大量的框架、库和中间件的聚合物

在知识经济时代,信息化智能化越来越强的时代,不懂得编程就像现代文明社会中不识字一样。

我只是对编程感兴趣,想掌握新的技能。 任何时候都不晚。 从60岁开始也没关系。

虽然在工作中使用,但不是软件开发的职业,编程只作为辅助技能使用。 例如科学家、数据分析师、工业编程等。 年轻的时候加入比较好。

互联网是适合弯道超车的行业,也是对年轻人友好的行业的程序员有年龄红利。 年龄越大享受越多红利; 加入越晚红利越少; 成为程序员是积累性差的职业。 即使你有丰富的经验,优秀的应届毕业生们也有扎实的专业基础,只要你善于学习和借用千兆网上的代码,善于学习新技术,就能很快成长为后起之秀的程序员职业,是成为因个人积累性差而换取行业强积累性的程序员需要善于学习,这是最重要的能力之一。要成为程序员,需要考虑各种错误和异常情况,考虑可扩展性和许多质量指标的缜密周到的思考。 否则,编写的程序可能会变得漏洞百出,也可能难以修改和扩展。 经验丰富是大型项目的实践经验,有特殊项目经验的机会非常难得; 中小型项目开发不能称为经验。 因为每个人都可以经历。

自学编程的方法雷神阻止不了你学习编程的决心和信念的话,就开始吧!

学习编程语言,几乎不需要什么。 3-5岁的孩子都能学会,你为什么害怕? 选择Java和Python等语言; 找一本好的编程书,用豆瓣搜索Java或Python,选择分数最高的或次高的就可以了; 找编程书的时候最好找两本,国内人写的,国外人写的,国内平易,国外深; 我倾向于学习外国人写的技术书,不知道能教什么有益的想法的时候,试着找国内的东西吧; 《C程序设计语言》 )即使你不打算学c,这本书也是讲编程语言的经典之作; 查找相关编程语言的视频,边制作边看; 编程很实用,不写代码就学不到。如果你正好有朋友成为程序员,请不要定期告诉我。 有个师傅领导编程很好。请学好英语。 否则,你能学到的编程知识永远是二手货,n手的! 在学习使用word、excel、ppt等办公室处理软件的这个阶段,重点是学习编程的基本思想,如果能独立写单词分析程序,就通关成功了!编程初步进阶

在掌握编程语言后,需要学习数据结构、算法、数据库、网络和操作系统

特别是像附加编程武器装备(子弹和子弹)那样,打好数据结构和算法的基础。 如果缺乏数据结构和算法基础,就像拿着刀剑上战场,还没走两步,就被一颗子弹轰上天了

操作系统是基础课。 要利用操作系统提供的能力,编写更实用的程序,必须了解操作系统;

数据库是存储和操作大量数据的技术是实际项目开发所必需的基本功

互联网是网络技术的基础,不能不知道。 至少要了解基本原理和协议

学习步骤:数据结构和算法=操作系统=数据库=网络

数据结构书籍: 《数据结构与算法分析》;

算法书籍: 《算法设计与分析基础》、《算法(第4版)》、《算法导论》 (可挑战);

编程书籍: 《编程珠玑》 (超经典,不可不读),《程序设计实践》教你如何正确思考和设计程序。

上网本: 《计算机网络》、《TCP/IP详解 卷1:协议》 (高级);

算法问题: sxdxrz具备一定的数据结构和算法基础,如果能编写程序,建议用“力网”打磨问题,进行更深入的算法实践。 直到2020年我才知道动力按钮的存在;

sxdxrz能够比较灵活使用数据结构和算法,能够理解操作系统的原理并调用系统函数,设计比较规范的数据库表,代表编程初步进阶通关成功!

sxdxrz具备数据结构、算法基础和数据库设计的基础时,就可以开始尝试做 Web 项目了,正式踏入开发征程;

工程模板:这里有一个 Springboot 模板工程,含有一个真实项目商品交易快照项目的代码实例,你可以学习真实项目中软件是怎样子的,也可以tsdy做更多的尝试和探索。要运行这个项目,运行 Application.java 即可,然后在浏览器敲入 “http://localhost:8080/” ;项目地址: “springboot-template” ;

如何从 Github 拉取工程代码,见: “使用git和github托管个人项目”;

编程语言进阶,比如 “Effective java 中文版(第2版)” ;

源码阅读: 此时,你应当开始学习阅读源码。可以先阅读一些简单的类,比如 JDK 容器。为什么要阅读源码及基本技巧,可参阅 “解锁优秀源代码的基本方法与技巧” ;

程序调试:在开发项目时,程序调试必不可少,最简单的打断点、单步调试得学会。程序调试技能可参阅 “软件调试的基本技巧” ;

单测编写:学习编写单测,让代码更加可靠,《单元测试之道Java版:使用JUnit 》

程序风格:学习编写好的程序必不可少。面试找工作非常看重这一点。可参阅 《Java编程风格》 , 《编写可读代码的艺术》, 《代码整洁之道》 ;

sxdxrz能够运用数据结构、算法、数据库做出一个简单的 CRUD 管理系统时,能够编写比较规范的代码时,Web 项目阶段通关成功!

你已经能够做出一个基本的软件管理系统了,此时,你意气风发,将要向更广阔的软件开发征程出发!必备网站: “Github” (sxdxrz想找某个组件实现时), “StackOverflow” (提问题);学习 《深入理解计算机系统》 ;学习 Java 并发:《Java并发编程实战》 ;学习 Java 内存模型及JVM原理: 《深入理解Java虚拟机(第2版)》 ;学习软件设计原则和思想,理解大型软件如何构建: “【转载】一些软件设计原则”学习设计模式:《深入浅出设计模式(影印版)》 , 《设计模式》 ;学习架构初步:《架构整洁之道》 ;深入了解软件开发职业: “软件开发全景图”, “软件开发思考” ;ALLIN:是我在学习和开发生涯中所积累的各种东西,包括数据结构、算法、设计模式、单测、具体技术等。要运行这个项目,运行 你已经找到一份程序员工作,进入了真实战场;做好分配给你的事情,做好接手的系统,同时,阅读各类技术书籍,让自己技术能力更加丰实;广泛阅读各种编程相关书籍,这里有我读过的书,可以参考: “计算机专业及软件开发推荐书籍” ;阅读源码,对你所用到的技术,探究其实现原理;原理和设计思想是最最最精髓的东西。实用技术虽必不可少,却不可沉迷其中。切勿买椟还珠!阅读 JDK 源码,阅读小型框架源码;及早考一个教师资格证,给自己留条后路(我没有考虑到)。
深入理解业务、从产品角度思考,能够让你有更宽阔的视野和更快的成长速度(我当时没意识到);不要怼产品,不要怼测试,不要怼运维,不要怼来怼去怼到没朋友(血的教训);做事要严谨,对人要宽容;两者不可偏废(我只做到了前者,后者做的不够好);开始写技术博客;你会发现,三五年后,只有博客上记录的东西还能记得(有益经验);制订技术研习计划,比如工作中用到的技术的原理,或者新技术,每周或每月写一篇技术博客(有计划但我没能坚持);了解软件开发攻略:“软件开发的升级打怪攻略:从新手到高级工程师”深入学习软件设计与开发:这是我关于软件设计与开发的思考:“软件设计要素初探”sxdxrz要跳槽时,不要冲动;先多征求意见,明确意愿,找到下家后再辞职(我辞职时不知道这个套路)。 构建自己的技术体系结构,持续丰富这个体系结构(如今我才开始做这个事情,有些晚);这是我最近构建的一个技术体系结构: “互联网应用服务端的常用技术思想与机制纲要” ;努力寻找中大型项目和中大型系统实操的机遇,并提升自己的综合能力(我没有这个主动意识,才有此劝诫);敲重点: 踏实做事,但不要埋头写代码!不要埋头写代码!不要埋头写代码!(我埋头做事,才有此劝诫);试着去录制一些编程开发视频,拓展自己的技能树(我不知道还能这么玩)。 你已经是初中级工程师了,fnddg也从zddxg那里毕业了;身边的每一个人都可能是你的导师,欣赏和学习每个人的长处;拓展你的技能树,学会从一切可能的地方学习;多交往,拓展自己的活动区域(我偶然参加了TMC演讲,还是有益的)。
}

我要回帖

更多关于 程序员的思维逻辑 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信