【游戏·数学】辅导电脑编程 Java/C++,3D图形,iPhone/Android 应用开发。为中小学生开设国际信息学奥林匹克竞赛,加拿大CCC比赛培训课程

我似乎理解了编程的意义

编程的意义是什么,我又为什么要编程呢?这是一个不时会浮现在我脑海中的问题,它来得并不频繁,但每次却都伴随着对自己职业生涯或人生目标的质疑而产生,令我感到些许困惑和不安。而在这十几年的职业生涯中,我也似乎总能在每个阶段为自己找到一个继续热爱编程的理由,直到它已无法解答再一次疑惑的产生。就这样一次又一次的循环往复,我似乎渐渐理解了编程的意义……

编程是一项技能

回想大学毕业刚成为一名程序员时,自己对技术是如此狂热,我不断地购买各类技术书籍,几乎所有的业余时间也都被用来钻研技术,提高自己的编程能力。我也因此很快成了同一批入职新人中,编码效率和质量最突出的一个。而在那段时间里所做的技术积累,也成了我日后工作的坚实基础,编程作为一项技能已经深深地嵌入到了我的身体里。

即使到了今天,我仍非常怀念那段心无旁骛,一心钻研技术的日子。我为能在工作中写出的每一行优秀代码而兴奋,更为每一天能在技术上取得的点滴进步而喜悦,一切都是那么单纯,编程的意义对于那时的我来说就在于技术本身。

编程是去解决问题

“能力越大,责任也也大”,这句电影“蜘蛛侠”中的经典台词同样适用于程序员的职业生涯。随着技术能力的提升以及工作中获得的认可,我的职位也由原来的初级程序员变为了资深开发工程师,以及后来的架构师。相应的,除了编程之外,我工作中的很大一部分时间需要用来与用户进行沟通,并分析他们提出的需求。对于我来说这个角色转换的过程,是艰难甚至有些痛苦的。 我不得不用自己最薄弱的沟通技能去和用户打交道,更要命的是我所习惯使用的那些技术语言有时很难让他们理解。

我很快意识到自己已不再是那个只需被动接受任务安排,并将自己的编程工作完成好就万事大吉的初级程序员。除了技术之外,我更需要能够突破程序员思维,去发现用户需求背后所隐含的真正问题。我比以前变得更加务实,不再刻意追求技术的高深,而是尽可能从问题本身出发,选择最有效的技术手段去解决它。

此时,编程的意义也发生了改变,它已不再局限于技术本身,而成了解决问题的理想工具。

编程是在表达,也是在创作

就这样又过了几年,当“为什么要编程?”这个问题再次摆在我的面前时,自己也已过了而立之年。对于大多数中国程序员来说,这个年纪已经算是高龄,甚至还有很多人会认为30岁还在编程,一定是混得不够好吧。当然,对于这些质疑我也总是一笑了之。其实,在此之前我也有过很多转型的机会,比如去业务部门,或是转作管理等等,但最终我还是选择留在了技术岗位上,因为我觉得编程仍是我最喜欢的,或许也是我唯一擅长的吧。

而这个时期也成了我整个程序员生涯的黄金期,我写了公司的核心框架以及一些重要业务系统的核心算法。我很享受这段时光,因为我已几乎感受不到那些技术上的牵绊,我更像雕刻师使用手中的刻刀一般,自如地运用编程来实现那些我认为优秀的东西。

编程对于我来说已不再是一项技能或是工具,我是在通过编程进行着自我表达与创作,这种感受带给了我极大的自由度,而我也从中感受到了前所未有的喜悦与乐趣。

编程是为了留下痕迹

最终我还是走上了管理岗位,这里面有很多个人无法左右的因素(包括大环境、家庭、经济等等)。但我仍然更乐意被大家称为程序员或者“老”程序员。就像在简书的自我介绍中,我总是把全栈工程师放在那些“头衔”的第一位,我也还在利用业余时间做自己喜欢的开源或个人项目。当我再一次问自己“为什么要编程”时,获得了与以往不一样的感悟:或许我们编程是为了能够留下一些痕迹吧。

公司里最近都在为一个老系统的升级问题发愁,这个系统已经运行了将近20年时间了,为了升级系统,大家不得不深入到这个系统的框架中,去读底层代码。我们读到了一位已经退休的美国同事Bill所实现的数据库连接池代码。在那个时候JAVA刚开始流行,还没有像Spring这样的框架,或是如Hibernate或MyBatis这样标准的持久层实现,这个系统中所有的数据库连接池及核心持久层代码都是由我的这位美国同事写的,这些代码让整个系统稳定运行了将近20年,大家都不禁为他高超的技术水平发出由衷的赞叹。

我还认识一位从事证券交易软件研发的公司CTO,看年纪应该已经接近50了,但他仍然在亲自写着那些证券交易的核心代码。当我问他到了这个年龄和职位,为什么还要坚持写代码时,他告诉我,当他看到自己所写的代码每天在支撑着千亿级的证券交易时,他感到非常兴奋和自豪,并不断地希望能够通过自己的努力将它做得更好。

我的这个美国同事不会听到大家为他十几年前所代码发出的赞叹,股民们也不会知道这位CTO所写的代码正在支撑着他们的日常交易。那些优秀的代码是他们留下的痕迹,我们不能确定这些痕迹能够保留多久,或许几年,或许更短,但它们都曾经在我们的日常生活中产生了重要的价值,而新的未来也将构建在这些痕迹的基础之上,我想这可能才是编程的意义所在吧。

我似乎理解了编程的意义,但我明白未来的某一天,我一定还会问自己同样的问题——为什么要编程,希望到那个时候自己还能是那个热爱编程,有着一颗匠心的“技匠”吧……
谢谢分享
 
这25个实用的博客有助你提高编程技巧

在Forbes.com最近发表的一篇文章(25 Practical Blogs To Sharpen Your Coding Skills)中,作者Tomas Laurinavicius 推荐了25个他认为很适合程序员或学习编程的人在工作或学习中阅读的博客。

1. Scott Hanselman

在微软担任网络平台开发的Scott Hanselman开通了他个人的博客专栏。他本人是程序员,也是老师和讲师。他在博客里面的文章记录了他的编程心得、经验和实例分享。

2. My Programming Blog

这个博客空间里的文章主要是学习ASP.NET, ActionScript, Github, C, Java, Oracle 以及PHP的教材和建议。

3. Ray Wenderlich

如果你想提升自己在Swift, iOS, Android, MacOS, Unity这些编程语言和Apple Game Frameworks方面的技巧,Ray Wenderlich是一个不错的学习渠道。

4. NSHipster

NSHipster是一个面向Objective-C, Swift和Cocoa等编程爱好者的博客网站。网站每周更新,包含了很多有趣而详细的资讯。

5. CSS-Tricks

CSS-Tricks提供了150个截屏视频,涵盖的类别有HTML, Flexbox,WordPress主题,使用JavaScript开发的游戏等。

1479950247218539.jpg


6. Aphyr

Aphyr 是由Kyle Kingsbury撰写的博客空间,里面的文章主要分享了他对编程世界的一些很有意思的见解以及有关代码测试的文章。

7. Objc.io

Objc.io专门针对iOS和OS X开发。这个博客的页面设计友好美观,包括了代码纠错、安全问题、游戏、MVVM等20多个话题。

1479950228652622.jpg


8. David Walsh Blog

DWB的博主David Walsh是一名网络开发者,他与其他编程专家一起创办了这个博客空间。在这里,你可以找到各种类别的教材,demos及专稿。

1479950212539730.jpg


9. CodePen Blog

CodePen为喜爱编程的你提供了一个理想的平台,你可以在这里与别人分享你最新开发的项目,获得别人的反馈。

1479950196326160.jpg


10. Code Simplicity

如果你想学习编程大牛如何撰写软件开发的文章,不妨认真阅读Max Kanat-Alexander写的博客。

11. Designs & Code

Designs & Code是Wordpress设计师和开发者的最佳学习渠道之一。

1479950180193307.jpg


12. Line25

在Line 25是一个关于Web开发的博客网站,里面发布的文章包括了Web开发和Web内容设计。

13. Antonio’s Blog

Antonio是一位专家级的开发者。他在博客中分享关于Java开发的书籍、讨论,培训及文章。

14. Java, SQL and JOOQ

Java, SQL and JOOQ里面会分享很多学习这几种语言的技巧,在这里还可以找到最好的编程练习。

15. Five A Day

Five A Day是一个非常实用的资讯库。这个网站每天会发布五篇有关web 设计和开发的最新新闻,技术文章和教材。

1479950163567212.jpg


16. CodeBetter

CodeBetter里面的文章会加上很有趣的插画,它们全部与写码、编程和网络开发等主题有关,令你阅读文章时会有一种轻松愉快的心情。

1479950143562276.jpg


17. PHP Clicks

PHP Clicks 提供高级的交互式教材。涵盖的编程语言有HTML, CSS, jQuery, Angular JS, HTML5, CSS3, JavaScript, PHP, MySQL, WordPress等等。

18. Tapiki blog

Tapiki帮助你学习更多有关Java的编程知识以及如何解决代码错误。

19. The Crazy Programmer

Crazy Programmer指导你学习最简单的基础知识。 编程的语言包括C, C++, Android, PHP, SQL及其它多种语言。

20. A List Apart

A List Apart是一个优秀的博客型目录网站,你可以在这里找到你所需要的话题,它们可以提高你的编程技巧。

21. Codrops

Codrops是一个优秀的博客网站,提供综合性的编程教材,适合Web开发者用来学习、吸收灵感或满足开发者们的更多需求。

22. SitePoint

SitePoint里面的深度文章和教材让人印象深刻。你还可以通过收听他们的播客来学习很多知识。

23.Hot Scripts

Hot Scripts帮助你如何着手学习编程,它还会指导你完成整个学习过程,帮助你找到你要学习的和在工作中要使用的编程语言。

24. Web Development Blog

这里提供了与网站开发有关的博客。你可以浏览各种Magento, Zen Cart,电子商务以及其它模板。这里面的文章会教你如何写代码和脚本,还有很多实用的资讯。

25.Livecoding.tv Blog

Livecoding.tv Blog是livecoding.tv网站的一部分。在这里可以找到许多视频,有助你成为一名更出色的开发者。

1479950120584910.jpg



这25个博客虽然全部是国外的,但对我们国内的程序员同样会有帮助。因为经常阅读国外的编程网站,可以提高大家的英语能力,这对提高编程的专业能力是很有利的。

(注:译文原文首先发布于http://wp.me/p6WSQY-1K1
 
中国中学编程能力世界排名第二

说到码农,大家可能首先想到的是美国的硅谷和北京的中关村。再拓展一下,可能会想到盛产码农的清交北邮华科等高校。可你知道吗,写代码如今也实现了“渠道下沉”,连中学生都来“抢饭碗”了。

据南方日报报道,《THE》日前发布了全球编程能力学校排名,来自中国广东的中山纪念中学力压世界知名学校,夺得第二名。

在发布该榜单之前,美国知名编程竞赛组织 HackerRank 曾举办全球性的编程比赛,共吸引来自全球 126 所学校的超过 5500 名学生参赛,HackerRank 根据比赛结果得出了这个榜单。

据悉,在该榜单中,排名前五位的分别是俄罗斯的圣光机大学、中国的中山纪念中学、越南的胡志明城市科技大学、美国的加州大学伯克利分校和加拿大的滑铁卢大学。其中,中山纪念中学是前五名中唯一的中学。

分析指出,对“实战”性极强的编程来说,编程能力与学校的学术水平并不一定成正比。据 Fastcompany 报道,在榜单中排名第一和第六位的俄罗斯大学没有入围美国世界与新闻报道的世界知名大学前 50 名,但这并不能抹灭其在编程领域的优势。

同样令人意外的是,来自中国的中山纪念中学也并非世界知名学校,甚至跟其他参赛学校相比,只是一个中学。但多年来在信息学教育领域的深耕使其脱颖而出。

据悉,中山纪念中学早就将信息学作为学校的重点学科来发展培养。经过十几年的探索,中山纪念中学已经形成了完整的国内外竞赛训练、人才培养体系。

在广东省的信息学竞赛中,该校已连续八次夺得全省第一,并有 32 人次入选广东省队参加全国决赛。在全国决赛中获得金牌 12 人次,入选国家集训队 15 人次,近 20 人被清华北大保送录取。据说,学校校园也很大很美,号称“中国最美中学”。

在本次竞赛中夺得第 13 名的翁文涛指出,他从 11 岁就开始学习编程,除了平均每天要花费四小时在编程练习上外,学校也会提供相应的辅导和帮助。另一位获奖学生表示,在学校里,同学们参与度最高的课外兴趣小组就是信息学奥林匹克竞赛。

可以看出,尽管中学力压知名大学的结果令人意外,但究其原因也算情理之中。毕竟写代码除了天赋之外,扎实的基本功也是必备。这点在中国工程师的身上表现得尤为显著。

如今中国“码农”早已以严谨的逻辑水平和扎实的基本功扬名国内外。得益于基础教育模式和考试制度,中国工程师在数学和逻辑方面的水平较高。但也有专家分析,在系统的整体理解和团队协作能力方面,中国工程师还存在不足。

此外,传统的中国工程师多关注微观层面的技术问题解决,在技术创新、文化和整体商业格局的建立方面缺乏思考,这导致在中国很少出现“以科技改变一个行业”的公司。

因此,不论是在学校阶段的教育,还是公司培养,除了加强基本功,还要不断提升创新能力。毕竟,硅谷的成功不只靠“码农”,更需要领先的科技领袖。
 
最后编辑:
2017编程趋势预测:这10种编程技术将成为趋势

1482046355737482.jpg


2016年即将进入尾声,在即将到来的2017年和未来的几年内,在编程界,会有哪些新技术出现,成为新的潮流,又有哪些技术的热潮会渐渐消退呢?最近,infoworld.com的一位编辑Peter Wayner在他撰写的文章21 hot programming trends -- and 21 going cold 中,提到了21种会流行的技术,以及相应地,21种可能会遇冷的技术。本文旨在与大家一起讨论这个话题。下面所列出的10种技术,摘自Peter的文章。大家也可以阅读他的全文,了解他对其它技术的预测。

1. 大热:JavaScript MV框架; 遇冷:JavaScript文件

很久以前,每个人都学会了写JavaScript代码,用来弹出一个消息窗口或检查表格中含有@符号的电子邮件地址。不过现在有了HTML Ajax应用程序,它们非常精细,因此很少人从零开始写代码了。使用一个有详细说明的框架和写一点胶水代码来执行你的商业逻辑是比较简单的方法。

现在有很多框架,如Kendo, Sencha,jQuery Mobile,AngularJS,Ember, Backbone, Meteor JS等等,所有这些框架都是为了处理Web应用程序以及页面事件和内容而准备的。另外,还有一些为智能手机和平板电脑提供的跨平台框架,其中包括nativescript,PhoneGap和Sencha Touch等,它们可以用来创建源自HTML5技术的app。

HTML5 Mobile App Development with PhoneGap - Livecoding.tv

1482046180231973.jpg


在livecoding.tv上,一位开发者使用Phonegap开发一款HTML5 App

2.大热: SVG + JavaScript on Canvas; 遇冷: Flash

Flash已经令人们疯狂了很多年,但编程大师们一直看重的是结果。反锯齿渲染看起来很棒,以及很多有才华的编程大师已经建立了一个Flash代码堆垛来处理复杂的过渡和动画。

现在JavaScript层具有很多相同的能力。浏览器的制造商和开发者都在为Flash的结束而欢呼。JavaScript可以与DOM层更好地整合在一起,DOM层来自一些新的格式,例如SVG(可缩放矢量图形)。SVG和HTML包含了一大堆标签,Web开发者使用起来往往更方便,现在还有了大的APIs,让你可以在画布对象上详细地绘画图形,通常还会提供视频卡来帮助你使用。把它们结合起来使用,你还有什么理由要用Flash呢?

3. 大热:游戏框架;遇冷:本土游戏开发

很久以前,游戏开发意味着要请大量开发人员,他们从零开始用C语言写所有代码。当然这得投入巨资,但它看起来很棒。现在,没有人能负担得起奢侈的自定义代码了。大多数游戏开发者放下了他们多年前的骄傲资本,现在他们使用库,如Unity, Corona,或LibGDX来建立系统。他们不会再写像库说明那么多的C代码了。这现象是否会令人惭愧呢?我们的游戏不再是用手工写代码完成,而是由相同的引擎来制作而成的。不过,大多数开发者都对此感到很欣慰,因为他们不需要被迫去处理细节,这样他们可以专注于游戏玩法,情节,人物和艺术。

Search

1482046205392959.jpg


Livecoding.tv 上的直播者使用 Unity 及其它库来开发各种游戏

4. 大热:单一网页的Web apps; 遇冷:网站

如何把所有信息放在一个由数个独立网页组成的网站中,网站设计人员要花几个小时来制作网站地图,以令网站导航变得简单。

新的Web应用程序是从前端到有大量内容的大数据库。当Web应用程序需要信息时,它就从数据库中提取信息并将信息注入到本地的模具中。现在没有必要使用Web附加设备所需要的所有东西来标记数据,以便创建一个网页了。数据层是完全独立于演示和格式层。移动计算的兴起是另一个因素:单页的,响应式设计的网页,它工作起来就像一个app——所有这些都更好,以避免混乱的App商店。

5. 大热:移动Web apps; 遇冷:本土移动apps

对于移动内容,你可能会有很多很好的想法。你可以写不同版本的app来应用于不同的系统:Android,iOS,Windows 8,甚至BlackBerry OS或是其它任何一个系统。每一个版本的app需要由一个独立的,懂得不同编程语言的团队来开发。然后,每一个平台上的app商店在把app交到用户手中之前,可能会各自提出种种合理不合情的要求。

或者你可以创建一个HTML app,把它放在一个网站上,在所有平台上运行。如果出现了什么变化,你不需要返回app商店去请求获得一个迅速的错误检查和修复。现在,HTML层越来越快,而且它在速度较快的芯片上运行,这种方法可以使移动Web app更好地与本土app竞争,甚至是与更复杂的交互式app竞争。

6.大热: Android; 遇冷: iOS

几年前,苹果专卖店门前排起的“人龙”还记得吧?时代在改变,虽然iPhone和iPad仍然拥有忠实粉丝,他们喜欢丰富、复杂的用户界面,但原始销售数据依然对Android有利。一些报道甚至说,超过80%的手机是Android的。

原因可能很简单,因为成本。当iOS的设备成本仍然很高的时候,Android正在以大量竞争汹涌而来,那就是用五分之一的价格来生产平板电脑。省钱永远是一种诱惑。不过,另一个因素可能是开源的效果。任何人都可以在市场上竞争。现在市场上有大的安卓平板电脑,也有小的;有安卓摄像头,甚至还有安卓冰箱。

7. 大热: Web界面; 遇冷:集成开发环境(IDEs)

很久以前,人们用的是命令行编译器,然后有人把编辑器和其它工具整合在一起,创造了IDE。现在又轮到IDE的热潮消退了,因为有了基于浏览器的工具出现。它们通常是一个工作系统,可以让你编辑代码。如果你不喜欢WordPress的功能,它配备了一个内置的编辑器,让你可以即时更改代码。微软的Azure允许你在它的入口写JavaScript胶水代码。虽然这些系统不能提供最好的调试环境,并且在编辑生产代码时可能会有一些危险,但这个创意是不错的。

你可以尝试Cloud9,Aptana,和Mozilla WebIDE,但要坚持探索。Web界面正在变得越来越强大。有可能会出现这样的情况,在微软的Azure网站上建立一个完整的大数据分析项目。

8.大热: Node.js; 遇冷: JavaEE, Ruby on Rails

服务器的世界一直在线程模型上长盛不衰,它让程序员在使用操作系统时可以有种种行为,如固执,低效或是放任。无论是由程序员编码而造成的愚蠢的循环或是浪费的计算,操作系统都可以在线程之间切换来平衡性能。

Node连同JavaScript一起回调编程模型,它的代码的确运行得很快,比任何人预期的还快。它曾经可能是一种无实用价值的语言,只是被用于警告消息框。但意外地,由于创建新线程的开销变得明显,Node.js腾飞了。当程序员表现得不好时,问题就会出现了,但责任在很大程度上是对他们有好处的。显然,限制资源往往可以令程序员更快地写代码。

Node.js还有利于浏览器和服务器之间的和谐。运行在浏览器和服务器上的相同代码可以让开发人员更方便地移动和复制功能。因此,Node.js层已经成为互联网上最热门的栈。

9. 大热: PHP 7.0; 遇冷:旧版PHP

在过去,PHP是一种简单的方法来淘汰一些动态网页。如果你需要一点点的变化,你可以在HTML标签之间嵌入简单的代码。Web开发者有了它就基本足够了,但它的缓慢足以令程序员中的中坚分子看不起它。

这是一则旧闻了,因为一些喜爱PHP的程序员在Wordpress和Facebook等地方都在争相利用即时编译器,这种曾创造出Java如此高性能解决方案的技术来执行比以前更快的PHP代码。现在的工具如HipHop,虚拟机和PHP7.0提供的速度可能是旧版本的2倍。这会给Node.js和java带来挑战。

10.大热: 与时并进的教育; 遇冷:四年传统教育

以计算机为介导的课程不再是新玩意了,每个人正在享受着观看视频讲座的好处。我们可以随意调整视频的播放进度,加快或放缓,还可以重复观看自己想看的部分。在线论坛同样比以前的讨论室有了改善,以前每一次讨论,只能由一个人来主宰。

但这不仅是教育的一种本质,网上课程技术的背后是它颠覆了教育产业技术的复杂性;它还可以让你灵活地支配自己的学习时间和地点。这正在改变我们的生活动态,因为我们不再需要投资四年的时间以及负担高额的学费去学习一系列课程了。当你需要获得新信息的时候,你的需要可以得到满足,而且不要让迅速腐烂的想法困扰你的头脑。

www.livecoding.tv

1482046268933079.jpg


直播编程成为一种流行的编程教育和编程社交方式

就编程来说,我们可以在网上找到很多学习网站、社区、博客,这些都是很好的学习资源。例如Livecoding.tv,这是一个将直播,教育,社交和工作结合在一起的综合平台。这个平台以直播编程的方式,将世界各地的程序员开发产品或项目的过程直观地呈现给观众用户。你可以学到很多在书本上不一定能学到的编程知识和技巧,因为每一个直播,都是一个真实的案例。除了直播,你还可以观看每一个直播者的视频。因此,你可以在这个网站上学习某种编程语言的基础知识,也可以学习某个产品,工具甚至是整个项目的开发,看看优秀的开发者是如何写代码,除错,创建框架等等。当直播与在线学习结合在一起时,这也是互联网的一个趋势。

以上分享的内容,可能不一定是你认同的,这没有关系。因为无论是哪一种潮流的兴起或衰退,都令编程成为一种有着无穷吸引力的行业:它总是在快速变化,又总是有着充满激情的争论。这也正是编程世界精彩的地方
 
国际奥林匹克信息学竞赛历届比赛地点和链接
 
最后编辑:
网上学习编程的七大趋势

随着互联网技术的不断提高,网上学习已经越来越普及了。无论是目前,还是将来,它都将会成为一种流行的学习模式。谈及编程,在Glasssdoor最近发布的一份调查报告(top 25 lucrative, in-demand jobs)中,介绍了25份高薪工作。而在这些工作中,超过一半的工作岗位要求具有编程技术。世界正在飞速发展,世界各地对IT技术人才的需求正在不断上升。尤其是在美国,除了硅谷,在其它各洲,同样需要大量擅长编程和开发的技术人才。面对这种趋势,如果你也有兴趣成为一名程序员或开发者,那你应该把学习编程放在你新一年的计划当中了。以下总结七个关于网上学习编程的趋势,希望可以为初学者提供参考。

9种市场需求最多的编程语言

要想成为一名出色的程序员或开发人员,精通多种编程语言肯定会令你更有竞争力,而且编程语言也会不断更新,变化和改良,因此你在整个职业生涯中,需要不断地学习新的知识和技术,从而令自己的能力得以提高。据Indeed.com发布的一份调查数据显示,在2016年,以下9种编程语言的市场需求是最多的。
  1. SQL
  2. Java
  3. JavaScript
  4. C#
  5. Python
  6. C++
  7. PHP
  8. iOS/Swift
  9. Ruby/ Rails
1483188954289315.jpg


使用大数据和云技术

大数据可以说是无处不在,在网上学习中也不例外。很多学习机构已经采用了大数据分析工具来分析和发现哪些信息可以为他们带来用户。而与大数据相关的培训或学习课程,也成为了很多人的选择。例如,Open SAP就可以为学习者免费提供大数据分析和应用课程。另外,云技术的功能性、便利性和安全性也越来越受企业的欢迎。在网上学习中,很多学习教育平台也采用了云技术来为学生提供技术支持。如果学习云技术的话,可以在CloudAcademy上学习,这是一个让你掌握“云”计算的学习网站。

自动化技术为网上学习带来便利

在2015年的时候,已经有不少教育专家预测在2016年,自动化技术将最终在内容创造和处理上成为极重要的一部分。事实确实如此。很多网上教育平台都在课程和学习材料的设计中采用了自动化技术,以便让学习者在常规的学习过程中可以节省时间和金钱。例如Pencil Code?,这个网站设计了一种学习编程的新方法。使用网站提供的编辑器,用户可以处理文本或block,还可以创建图片、音乐、游戏和故事等,甚至可以开发一种新的编程语言。

1483189011945913.jpg


游戏化情景被应用到网上教学中

游戏化的教育形式在2016年也成为了网上学习的趋势之一。当把游戏的动态运用到非游戏的情景中时,确实可以带来很出色的效果。最重要的是,一旦学习者在接收知识的过程中承担着重要的角色,他们往往更能主动地记住所学到的知识。这种教学形式可以激发学习者的积极性和创造力,让他们更好地与学习材料契合和互动,从而帮助他们实现学习目标。在网上学习领域,游戏化教学仍然有着很大的探索空间。如果你也喜欢这种教学形式,CheckiO?是一个很不错的选择。你可以通过游戏的方式学习Python或JavaScript, 在游戏过程中与别人交流心得,并通过别人的解决方法来提高自己的编码技巧。

1483189045963386.jpg


通过移动设备随时随地学习编程

由于移动设备的日益普及,网上学习已经不用再局限于PC电脑了。这一趋势会随着全球移动技术的不断提高而受到更多学习者的欢迎。例如在Swift Playgrounds?上,学习者可以在iPad上通过有趣的方法来学习Swift。学习软件可以免费下载。还有lrn,你可以使用iPhone访问这个网站,轻松学习Javascript,HTML, CSS, Python和Ruby。

自学成才的开发人员逐渐成为主力军

可能很多人会有疑问,要进入计算机软件开发行业,是否必须获得计算机科学专业的大专学位呢?答案是:这不是必须的。据Stack Overflow 在2015年2月在157个国家对26,000多人进行的一项调查显示,几乎一半的开发人员从未获得过这方面的学位。从这份调查可以看到,用人公司在招聘人才时,更看中的是实力,而不是学历。

Stack Overflow做的这份调查的结果是,有41.8%的受访者称自己是“自学”的,而有37.7%的受访者表示自己拥有计算机科学或相关领域的学士学位。另有18.4%名受访者拥有硕士学位。而在开发者的教育方面,有36.7%的受访者表示他们有接受在职培训,还有17.8%的受访者表示他们会参加网上课程。

流媒体直播成为新的网上学习模式

一旦选择了编程作为职业,很多开发者会愿意付出更多时间在学习编程和开发项目上。Stack Overflow的调查发现,有70%的受访者表示,他们每周会花两个小时或更多的时间去做一些开源软件的开发工作,这些项目有些是出于个人爱好,有些是因为工作需要。还有20%的受访者表示他们在工作以外,还会花费超过10个小时去做编程。平均每个开发者每周会花费超过7个小时去做一些兼职工作。

近年来兴起的流媒体直播,也成为了编程界人士喜欢的社交方式。他们会在平台上以直播的方式学习编程,开发项目和进行技术交流。在Forbes.com最近发表的一篇文章(25 Practical Blogs To Sharpen Your Coding Skills)中, 作者Tomas Laurinavicius 就推荐了25个他认为很适合程序员或学习者使用的博客网站,而当中就包括了Livecoding.tv这个直播平台。你可以在这里在线看别人写代码,还可以观看学习视频,覆盖的编程语言有260多种。Livecoding.tv正在往多元化的直播领域发展,除了直播编程外,还会直播游戏开发,直播平面设计等主题,相信会吸引到更多人参与到直播当中。
 
最后编辑:
自学编程的 6 个技巧总结

有一天,我的一个在学编程的朋友问我:“我想快速学习编程,你有什么好的推荐吗?我曾在上大学的时候自学过编程,这么多年过去了,我意识到我或许是在用最困难的方式去学习和了解编程。本来我完全可以用更快的速度学习。因此,在回顾了过去之后,我写下了这些年来我渐渐掌握到的关于如何学习编程的一些事情。

“快速”
对于“如何快速学习编程”这个问题,其实我真的不知道何谓“快速”。我觉得,通过遵循以下建议,你将很快地学习编程(至少你的成长/进步会快)。但你真的不应该眼中只有“快速”。只追求速度反而会拖你的后腿,让你自食其果。“快速”学习的唯一可持续方法或许是采用浸泡式教学法。找到一种方法让自己沉浸在编程中很长一段时间(几个月?)。为了让它奏效,你需要不断推动自己去学习新的东西,并迅速抽身离开。这是编码训练营的一个优点。当你出来时,尽管你还不是专家,但你会学得更快。这也可以通过专门的导师教导或与专门的初学者一起学习来实现。

1.读>写代码>读>写代码(日复一日)
关于如何高效学习编程我要给出的第一条建议是在阅读代码和编写代码之间循环往复。阅读代码(书籍,博客文章,开源代码)将帮助你查看解决方案,了解最佳做法,并大致了解语言或系统。但是在你这样做之后,你需要自己实际去写代码。可以是任何东西。可以是小的编码练习或业余项目,但确保你能将之付诸于实践,并用某种方式使用你学到的东西。如果你不这样做,那么你会发现自己面对编辑器会无所适从无从下手。

这方面的诀窍是让自己感到不舒服。这是相当痛苦的,但就应该这样。编码遵循80/20规则。花80%的时间在20%的代码或20%你所学的东西上。习惯于这种不舒服的感觉并克服它是关键。

这个迭代周期不应该以周为周期或以月为周期发生,而是应该以日为周期。知识等待使用的时间越久,知识这把斧头就越钝。等待学习新知识的时间越长,你就越难以将其融入到代码中。

我推荐阅读关于通用编程主题的网站是lobste.rs。上面有许多关于许多编程主题的文章。另一个好的网站是Hacker News,但网站时常偏离话题。

2.不要陷入僵局。请求帮忙
我最大的错误是在学习编程陷入僵局的时候用了太长时间。在被卡住时,我会花很多时间在一些愚蠢的东西或一些我根本上不明白的东西上。有时候我需要花费好几天时间才能完成这些工作,而原本我可以用这些时间做更多的事情和学习更多的东西,如果我能找到更好的解决方法的话。卡在一个东西上面超过一个小时基本上就是在浪费时间了。

我推荐三件事情以避免僵局。第一是试着总是阅读更多关于你使用的技术,并总体掌握正在发生什么。通常,当你陷入困境时,意味着你对需要澄清的事情做出了不正确的假设。第二是咨询互联网。这一点很显然,但依然值得一提。在网上查找并询问有过这个问题的人是一个非常重要的技能。Stackoverflow可以说是互联网上最好的网站。不要害怕在那里问自己的问题。通常,只要尽力正确地阐述你的问题就OK了。我真的希望以前我能多问些问题,但总是因为害怕会显得愚蠢而止步。我的第三个建议是向你认识的人请求帮助。通常,你或许已经理解了技术,而且有了问题,但是你可能需要更高层次的上下文才能真正解开谜团。不要胆怯,大着胆子上前去问吧。

例如,当学习Docker时,我花费了大量的时间从头开始重新构建图像。我从根本上不明白docker缓存,并用20分钟时间来等待单个更改到Dockerfile通过。我可能花了8个小时就用在等待构建上。如果我读过更多关于Docker或问一个知道的人,那么可能我早就搞明白了,还可以在更短的时间内学到更多。

3.为项目而工作
在我的经验中,没有什么可以与工作于自己的项目以学习编程更有用的了。除了一些例外,我所知道的所有真正优秀的程序员都有一个习惯就是工作于业余项目(这也可能发生在工作中!)。有了一个点子并试图实现这个点子是非常具有挑战性的。它需要很强的自律心。但是,通过尝试实际做一件事情,你可以学到如何分解问题并应用技术。你面对的各种问题,以及你如何解决它们才真正是所谓的编程。知道编程语言的每一个古怪细节的确是有帮助的,但它只会让你越来越落伍。此外,想要完成项目的驱动力是继续学习的动力。从业余项目获得的满足感远远超过你在抽象中学习东西的满足感。

我对于选择业余项目的建议是,选择你感兴趣同时你也有想法如何实现的东西。能够在开始之前表达实现总是有助于保持我的动力。在此旅途之中你一定会学到很多!

4.认识到深入钻研和搬运工之间的区别。相应地选择。
有两种类型的程序员:完美主义者和搬运工。有些人希望一切都是正确的,他们希望完美,他们希望遵循所有的最佳实践,并写出漂亮的优雅代码。他们想要理解每一行代码。有别于那些不管三七二十一,只要自己的代码能工作即可,即使对代码库有损害的人。平衡这两种技能是非常重要的。有时你应该深入钻研一个问题或项目,看看发生了什么。有时你应该让它工作即可,即使你不知道发生了什么。

每当你花费太多时间在某个东西上时,那就问问自己:我应该采取哪种方法?在大多数情况下,你会想取中间值。你想提供一个好的、坚实的解决方案,同时你可以自信地理解和修改,但没有耗费荒谬的时间。随着你作为开发人员的成长,你会更好地明白什么时候就此离开就可以,以及什么时候需要以某些方式完成。

就个人而言,我喜欢我的项目80%完美。如果你的项目是绝对100%完美,没有一行代码让你觉得尴尬,那么很有可能你已经花了太多的时间。

5.与其他程序员交谈
学习编程的一个很好的方法就是和其他的程序员交谈。不必谈论任何特定的内容。可以是你正在学习的东西,可以是你认为很酷的东西,可以是你正在工作的东西,皆可。你会发现很多程序员并不喜欢只是聊编程。这样做可能会让你学到很多关于库,服务,编程语言和模式方面的知识。但是,最重要的是,你将了解到其他人是如何看待编程的。你会发现,你认为理所当然或从来没有考虑的事情在人与人之间是非常不同的。

如果你没有什么可谈的,那就回到编辑器战争或tab vs space的话题。

6.尝试一切。如果搞不懂的话,那就等6个月。
最后,我要说的是,一直以来在我身上发生着这样的事,我尝试过很多东西,但我就是不理解。在用30分钟尝试新的东西后,我会停下来。我想这在起步时是很正常的。但是,我记得很多次,在6个月后(或3个月或9个月),我会回到同样的问题或技术上,弄清楚如何使用它。这是因为我又掌握了一些我以前不具备的知识,或者因为它只是另一种方式的框架。等待一段时间,然后回去,总是一种最有用的方法。

这方面的一个例子是学习如何使用终端。我记得很长一段时间我都害怕碰到终端,因为我不知道如何使用。我花了一段时间并按照步骤定期地使用它和理解它。当然,如果我认识可以向我解答的人,或者找到一个好的资源来学习,这样的事情就不会发生!

结论
这些事情可以帮助新手在他们漫长的旅程中学习编程。我知道我还有更多东西需要学习,并将继续学习如何永远地学习。最重要的事情说三遍,请继续,不要放弃,不要放弃,不要放弃。当然,说说容易,因为学习编程有时可能会令人非常沮丧!不要担心。这是正常的。每个人都经历过这样的心情。

http://www.codeceo.com/article/self-learning-programming-tips.html
英文原文:Tips for Self-Learning Programming
翻译作者:码农网 – 小峰
 
最后编辑:
15岁被哈佛录取,原因参加美国计算机奥林匹克竞赛

还记得去年火爆朋友圈的哈佛女孩:杭州15岁高一女生郭文景么?

  
69eb3ad6d198470f807ca2fcf3dcd3c0_th.jpg


  (左二是郭文景)

  我们先来看下郭文景的履历表,成绩十分亮眼:

  高一时获得了全国青少年信息学奥林匹克联赛(浙江省赛区)一等奖。

  2014年、2015年连续两年参加美国计算机奥林匹克竞赛获金奖,并代表美国参加国际信息学奥林匹克竞赛获得银奖。

  得到哈佛大学的提前录取。

  那么,这个至关重要的美国计算机奥林匹克竞赛究竟是个什么东东?

  美国计算机奥林匹克竞赛是美国一项面向中学生的信息学竞赛,主要测试学生的编程和问题解决能力,奖项分为铜奖、银奖、金奖和白金奖。获得银奖的学生将优先被美国知名大学录取。最终组委会将选出24名表现优异的学生,进行集训,让排名前四的学生代表美国参加国际信息学奥林匹克赛。

  中国学生如何能参加此竞赛?

  在正确的训练指导下,学生可以在六个月内掌握计算机编程的基本技巧,具备通过铜奖的能力;继续深入学习六个月,学生将具备通过银奖的能力。得到银奖后,学生将优先被美国知名大学录取!!

  如何获得该竞赛的正规培训?

  美国有若干大学专门针对USACO进行竞赛培训和选拔。

  佩斯大学USACO训练凭借多年优秀教学的经验,在美国本土享有较高评价。每个周六,数十名高中生从纽约州,新泽西州,康涅狄格州来到佩斯大学Pleasantville 校区参加USACO培训,佩斯大学的教授和博士生们已经开发出了一套快速提高高中生编程能力的教学方法,把对USACO竞赛最重要且最常用的技巧与算法,设计成了USACO 技能表,并让学生根据现有的先进的数据结构,在最短的时间内写最少的程序来解答USACO竞赛中的问题。

  中国学生如何参加竞赛培训?

  现在中国学生也可以通过参加暑期训练营的形式了解美国计算机奥林匹克竞赛,接受正规培训,在专业老师的指导下参加每年定期的大赛。佩斯大学USACO暑期训练营的目的是为了培养高中生的计算思维,提高他们在USACO竞赛中的编程以及解决问题的能力。

  参加这样的训练营,将为中国学生申请常青藤大学开辟一条新的出路!
 
我所积累的20条编程经验

原文作者乔纳森·丹尼可(Jonathan Danylko)是一位自由职业的web架构师和程序员,编程经验已超过20年,涉足领域有电子商务、生物技术、房地产、医疗、保险和公用事业。正如乔纳森在文中所言,本文适合刚毕业的大学生和刚入门的程序员。如果你已是高级开发人员,或许你能在本文中看到自己的身影。

从11岁时,我就一直在编程,并且一直都很喜欢技术和编程。这些年来,我积累了一些艰难又容易的经验。作为一名程序员,你或许还没这些经验,但我会把它们献给那些想从中学到更多的朋友。

我会持续更新这些经验,我可能还会有更多的感想,但就我这20年来看,我想下面这个列表中基本不需要增添额外的东西了。下面就是我至今最难忘的经验。

1. 估算解决问题所需要的时间。不要怕,承认吧!我曾见过一些程序员为了解决一个特殊问题而坐在显示器前面8小时。为自己定一个时间限制吧,1小时、30分钟或甚至15分钟。如果在这期间你不能解决问题,那就去寻求帮助,或到网上找答案,而不是尝试去做“超级堆码员”。

2. 编程语言是一种语言,只是一种语言。随着时光推移,只要你理解了一种语言的原理,你会发现各种语言之间的相似之处 。你所选择的语言,你应该觉得“舒服”,并且能够写出有效(而且简洁)的代码。最重要的,让语言去适应项目,反之亦然。

3. 不要过于注重程序的“设计模式”。 有时候,写一个简单的算法,要比引入某种模式更容易。在多数情况下,程序代码应是简单易懂,甚至清洁工也能看懂。

4. 经常备份代码。在我年轻时,我就有过因硬盘故障而丢了大量代码的经历,这经历很恐怖的。只要你一次没有备份,就应当像有着严格的期限,客户明天就需要。此时就该源码/版本控制软件大显身手了。

5. 承认自己并不是最顶尖的程序员---知不足。我常想,我对编程了解已足够多,但是总有其他人比你优秀。正所谓,“一山总比一山高”。所以,向他们看齐吧!

6、学习再学习。正如第5点所说,我经常会在手里拿一本计算机或编程相关的杂志或书(不信,可以问我的朋友)。诚然,总有很多你不知道的技术,你可以从中学习以保持不落后。如果你有一种灵巧的方式来获取你需要的新技术,那你每天都应该坚持学习。

4196_130401094850_1.png

7. 永恒的变化。你对待技术/编程知识,就应像你对待股票一样:多样化。不要在某一特定技术上自我感觉良好。如果那种技术或语言已经没有足够支持,那你还不如现在就开始更新你的简历,并启动培训新计划。我能保持前行的主要原则是什么呢?至少了解两到三种语言,所以,如果某种语言过时了,你在学习新技术的时候还可以依靠另一种语言。

8. 提携新人。协助并且培养初级/入门的开发人员学习优秀的编程方法和技巧。也许你还不知道,在帮助他们向更高一层前进时,你自己也在向更高一层提升,你会更加自信。

9. 简化算法。代码如恶魔,在你完成编码后,应回头并且优化它。从长远来看,这里或那里一些的改进,会让后来的支持人员更加轻松。

10. 编写文档。无论是Web服务的API,还是一个简单的类,你尽量编写相应文档。我曾经引以为豪的代码注释,因过度注释而有人指责。给三行代码加一行注释,只需要你几秒时间。如果那是一个比较难以理解的技术,千万别担心过多注释。如果你能很好做好自己的工作,大多数架构师、后备程序员、支持组都会感激你。

11. 测试、测试再测试。我是一名黑盒测试粉丝。当你完成编码后,你“被认可”的时候就开始了。如果你们公司有QA部门,如果你的代码中有错误,那你得到的评论,会比项目经理还多。如果你不彻底测试自己的代码,那恐怕你开发的就不只是代码,可能还会声名狼藉。

12. 庆祝每一次成功。我见过很多程序员在解决编程技术难题后,会和同伴握手、击掌或甚至手舞足蹈。每个人在生命中都会碰到“顿悟”。如果一个程序员高兴地跑来叫你去看他的非凡代码,也许你已经看过这样的代码100遍了,但你也应该为了这个家伙而庆祝第101次。

13. 经常检查代码。 在公司,你的代码要经常检查(包括自查和其他同事检查)。不要把别人的检查,看成是对代码风格的苛求。应该把它们看作是有建设性的批评。对个人来说,经常检查你的代码并且自问,“我怎样才能写得更好呢?” 这会加速你的成长,让你成为一个更优秀的程序员。

14. 回顾你的代码。在看到自己以前的代码时,通常会有两种方式:“难以至信,这代码是我写的”和“难以至信,这代码是我写的”。第一种往往是厌恶的语气,并在想如何改进它。你也许会惊叹,旧代码也能复活成为一种更好的程序,甚至是一个完整的产品。第二种通常带着惊奇和成就感。开发人员应该一到两个自己完成的项目成果,能让众人不禁而立并注目而观的项目。同样,基于你优越的编程能力,你可以把过去的程序或项目拿出来,把它们更新为更加优秀的产品或想法。

15. 幽默是不可缺的。在我20年的开发生涯中,我还没有碰到哪位程序员是没有幽默感的。实际上,干我们这行,幽默是一项必备品。

16. 谨防那些无所不知的程序员,不愿分享的程序员,还有经验不足的程序员。当你遇到这几种程序员时,你自己要谦虚。无所不知的程序员,更想当一个英雄而不是团队成员;保守的程序员则是在编写着他们独享的代码;而经验不足的程序员则会每十分钟就来问你一下,当代码完成后,代码已经是你的,而不是他们。

17. 任何项目都不会那么简单。朋友、家人和同事曾请求我仓促做一些事情,仓促做一个程序或者网站。对于这样的事,应该从双方做计划,才能做出令双方都会满意的东西。如果某人起初只是需要一个使用 Microsoft Access的、只有有3个页面的网站,但来就很可能变成一个有15个页面的网站,并使用SQL Server,有一个论坛,还有一个定制的CMS(内容管理系统)。

18. 任何时候不要想当然。假如你承接一个简单的项目,你可能会认为某个部分可以轻松完成。千万别这样想!除非你有一个类、组件、或者一段已经写好的代码,并且在现有的项目已经测试通过。不要认为这将是很容易的。

19. 没有已经完成的软件。曾经有一位程序员告诉我,没有软件是已经完成的,它只是“暂时完成了”。这是明智的忠告。如果客户还在使用你写的程序,并经受了时间的考验。如果有机会,你仍在更新它,这并不是什么坏事,这让你不断地前行。

20. 耐心是一种美德。当客户、朋友或家庭成员用电脑的时候,他们也许会受挫,进而想砸电脑,或气冲冲地离开。我一直在告诉他们,“是你掌控电脑,不是电脑掌控你。”对于用作编程的电脑,你要有一定的耐心。一旦程序员知道问题所在后,他们就会站在电脑的角度看问题,并且说“哦,这就是为什么它是这样做。”

在阅读本文的朋友,不知你是否也有看到了自己的身影呢?欢迎你在微博或评论中和大家一起分享感触。
 
每個人都應該學習編程- MIT 教授 Mitchel Resnick 為日本小學生講編程

Posted by Classroom Aid | 學習新趨勢
學習編程 (寫程式) 是歐美過去兩年興起的教育新趨勢,Skype 的發源地愛沙尼亞 (Estonia) 其政府已經決定將學習編程 (Coding) 納入正規教育,從小學一年級開始的課程中英國也剛剛宣布類似的消息,個人認為這是影響國力深遠的決定,想想大部份有所謂"資訊教育"的學校 – 大部份從高中以上才有 – 只是在教如何使用微軟的套裝軟體,十年後,前者培育出無數的創業家與解決實際問題的工程師(軟體的影響力無國界),後者培育出的平均人力只具備當祕書的技能,這是為何有學習編程的新運動,起源來自產業界。

為了讓孩子從小培養對編程的興趣與邏輯思考的強度,有非常多的工具與遊戲平台開發出來,適合不同年齡層,一直沒有時間用中文介紹這些工具 (有興趣讀英文可參考這篇這篇、或這篇),今日在教育人行道部落格上看到關於 MIT Scratch 的新聞,轉貼如下提供參考。Scratch 2.0 版剛剛釋出,是個全新的體驗與思惟,玩家可以看到別人的遊戲程式碼,直接修改它或混成,在網路瀏覽器中邊玩邊學。(文中這位 Mitchel 教授就是 Scratch 的創始人)

Mitch 在先前這個 TED 演講中説到,年輕一代雖習慣於使用數位裝置,但不代表他們會利用這些工具來創造與表達,就像一般定義所謂 “Literacy" 的基本能力有讀與寫,那麼所謂 “Digital Literacy" 的讀跟寫就是使用數位工具與寫程式去控制電腦,他用了大家常說的 “If you can learn to read, then you can read to learn" – 如果你學會閱讀,那麼你就可以經由閱讀進一步自我學習,學習寫程式也是一樣 – “If you can learn to code, then you can code to learn" – 如果你學會編程,那麼你就可以經由編程進一步自我學習。Scratch 提供有趣的情境讓孩子想學更多,去控制自己的遊戲或故事。

其實學電腦程式就是在學電腦運作的語言,跟學任何一種語言一樣 (Learn Coding Like Learning new Languages),但學過寫程式的人應該都有一種經驗,程式語言也會汰換,不同語言有不同適用目的,應該學那一種呢? Scratch 將程式語言視覺化,讓小孩學到程式邏輯思考的方法,但不直接接觸程式語言。就像大部份的人並不會立志要當專業作家,但仍然從小學習讀與寫,因為這些是基本素養,為何學習編程也是相同的道理。他的母親已經 83 歲了,還在學習 Scratch!
 
这是一位12岁的小朋友,他能独立的完成一个演讲,向全世界展示自己的想法和创造力

shipin.jpg


(如果上面不能演示,请点击下面链接)
https://www.ted.com/talks/thomas_suarez_a_12_year_old_app_developer

美国加州南湾中学的一名国小6年级学生汤马士 ‧ 苏亚雷兹(Thomas Suarez)

他从幼稚园开始就不断接触科技产品,当其他的学生都在疯狂迷恋迪士尼的时候,苏亚雷兹却早已设计出多种iOS作业系统的App,且成立公司。

从汤姆幼儿园开始,他迷上了电脑,他最成功的APP是他“反贾斯汀-比伯游戏”称为“BustinJieber”。

年仅12岁的苏亚雷兹表示,当初他开始写APP的灵感就是来自乔布斯,他还在学校成立了“App创作社团”,让许多对程式设计有热忱的同学能互相切磋,苏亚雷兹说:“许多同学在玩电动,他们也想自己设计,但大部份的人却不知道从何下手,也不是每个人的父母都会写App,在App社团里每个人都可以了解到如何来创建和设计一个App。”
 
最后编辑:
在北京参加加拿大CCC计算机竞赛 

  加拿大计算机竞赛(Canadian Computing Competition,简称CCC)是加拿大面向中学生每年举办一次的计算机程序设计比赛,比赛的目的是为广大中学生朋友们提供一个机会来测试自己分析、设计以及编程实现算法的能力。
  CCC始于1996年,到2010年已经举办了15届。第15届CCC于2010年2月24日下午在清华大学举行,比赛主要面向那些对解决问题和计算机有强烈兴趣的中学生。北京地区的比赛(即清华大学程序设计邀请赛)由清华大学计算机系承办,比赛分为以下两个阶段:
  第一阶段比赛于每年2月末在清华大学计算机系举行,比赛时间是3个小时,每个参赛学生需要独立解决5个问题。
  第二阶段比赛将于每年5月在加拿大滑铁卢大学举行,比赛时间是两个上午,北京地区第一阶段比赛的前两名将进入第二阶段比赛。
  每届CCC北京地区的比赛将邀请北京市50所中学的100名学生(高一或者高二年级学生)参加,每所中学可以推荐6名学生参加比赛,如果优秀学生较多也可适当放宽推荐人数(报名表可以复印),参赛中学将学生的参赛报名表在规定时间内邮寄到竞赛组委会,最终参赛人选由竞赛组委会确定。
  加拿大国内CCC第一阶段的比赛具有初级和高级两个级别,题目难度不同。北京地区的比赛将只设一个级别,由5个问题组成,难度从一到五依次递增,总分为75分。比赛题目通常涉及到以下几个方面的问题:数学、编程、算法的分析与设计,比赛需要创造性解决问题的能力以及优秀的编程能力。
  本次比赛第一阶段使用的编程语言是PASCAL、C/C++、JAVA、BASIC等,清华大学计算机科学与技术系的实验室提供相应的比赛编程环境,如需要其他编程语言需经竞赛组委会批准,第二阶段参赛者必须使用PASCAL或者C/C++编程语言。
  所有参赛学生都将获得由竞赛组委会颁发的参赛证书和纪念品。北京地区的比赛将产生10名优胜者,其中一等奖2名,二等奖3名,三等奖5名,优胜者将获得竞赛组委会颁发的获奖证书和奖品。
  获得一等奖和二等奖的学生可以直接参加清华大学下一年度保送生暨自主招生北京冬令营,其中获得一等奖的两名学生将参加在加拿大滑铁卢大学举行的第二阶段比赛,两名学生赴加拿大参加比赛的全部费用将由加拿大方面提供。
 
程序员提高编码技能的10个小窍门

原文:10 Tips to improve your coding skills
翻译:王江平

译者注:此文主要介绍一些提高编程技巧的小方法或者说是技能,嗯,我比较推崇第一条…..多练,熟能生巧。

1495785281840910.jpg


你想成为一名程序员,并且正在为之奋斗,那么你努力的方式,比如做事方法、思维习惯都将会影响你会成为怎样的一名程序员。

那么,你需要成为一个天才才能学好编程吗?我觉得没有必要。

你必须建立自己的做事方式。需要学习一些(或更多的)技巧, 不断的在Google上搜索查询,与书成为朋友。有一长串的TODO需要遵循。我将在这里分享一些技巧,帮你提高编程技能。

尽可能多地练习:

坚持练习几个小时听起来很难, 但一旦喜欢上这种方式, 相信我, 你会乐此不疲。你一定听说过熟能生巧。这对程序员来说是非常必要的。  

这里有个问题。练习什么?问得好。社会媒体是实践资源的一个重要来源。加入有新手程序员分享他们所面临的问题的群组和论坛,去帮助他们。几乎每本书都有很多经典的案例。不要跳过章节练习。留意实际运用中的问题并且尝试解决掉。

加入开发者社区:

如上所述,社交媒体可以给到你想要的一切。有大型专业社区。有些是非常流行的, 如 StackOverflow 和MSDN。这里有许多技术牛人可以给到你帮助,也有一些新手需要你的帮助。注册 (免费的), 然后扩大你的社交圈。

多吸取建议

允许他人阅读您的代码。如果有批评的观点, 请感谢他们。因为他们将帮助您找到代码中的漏洞,提高代码质量和逻辑。对有些人来说,很难接受批评。我就是其中之一, 但很快我意识到, 评论者正帮助我测试代码。

解决困惑和谜题:

当我还是新手的时候, 我常常解决一些编程难题,直到现在我仍然在周末寻找一些难题并享受解决之后的喜悦。它刺激大脑并保持头脑的运转。

当同样的问题再次出现时,在哪里可以找到解决这些困惑的方法? 下面是一些资源。

1.Sphere online judge

2.Uva online judge

3.Project Euler

4.Top coder

5.Python challenge

6.Code kata

参与代码挑战:

参与学校里面低级别的或者如Google Code Jam等国际级别的代码挑战,使您能够像专业人士一样思考。 它让你知道自己的水平,使你能够确定自己的速度。 如果您赢得了挑战,您将获得奖励,这是一种激励和鼓励,如果你输了,那就是刺激,给手机设置提醒,一个告诉你起床和奋斗的警报。

不要重新编写代码:

如果你正在练习,那么跳过这一点。但是如果你正在开发一个项目,那么它是为你而设计的。 您正在处理的项目可能是由多人共同完成的,整个代码或代码段都是开源的。 只要借用该代码,阅读并修改它,如果需要的话。不要重新发明已经发明的东西。 这可以真正提高您的工作效率。

不要试图记住代码:

这个帖子的第一点是尽可能的多练习

问:你为什么需要练习? 为什么不记住代码?

答:一些初学者记住了代码和语法,这看起来比练习更容易和快捷,不是吗 ?但事情并不总是像#000000和#ffffff一样确定。 实际上,不需要记住特定问题或代码语法的任何代码,因为我们有存储设备和搜索引擎以便于检索。问题日益复杂,今天的代码对于明天变得无效。 所以你需要建立肌肉记忆,发展自己的想法而不仅仅是死记硬背。

我不会试图记住之前写的代码的某一行,甚至是某一个变量,因为我真的不需要。当然,我会为我的代码添加注释,方便以后再次阅读时理解。

避免使用过时的API:

过时的API是指那些旧的或较新版本的API。新的东西有新的功能, 对旧版本的特性和兼容性等方面得以改善。API开发人员试图使用户更容易使用。因此,让你的技能与时俱进,如果不需要使用旧版本的API,请避免使用它。

会用调试工具:

对于所有程序员来说,调试是编码过程中最苦恼的一部分。如果某一个人写了很多行代码而没有BUG,那是比较少见的。调试是解决BUG的过程。根据bug难易程度和个人调试技能不同,调试单个bug可能需要1分钟或几天时间。但是, 您可以使用某些工具来提高调试效率。幸运的是,每个IDE都包含调试工具。您只需要学习如何使用这些工具, 并在每次调试过程中使用它。真的会对你有帮助!

擅用Google

在开发过程中,你将不得不面对一个艰难的处境。当你在代码中发现了很多BUG的时候,或者你正在努力想出一个方法去做一些事情。在这种情况下,很可能你不会是第一个做这些事的人。 数以千计的人可能也遇到同样的麻烦。他们是如何成功解决的呢? Google会给你很多答案。所有你需要的都可以进行搜索查询。

谷歌 (搜索引擎, 而不是谷歌公司) 只是聪明,不是智能。它适用于关键字。因此, 为了获得最佳答案,你需要知道如何以巧妙的方式向google提问。为此, 学习SEO(译者注:搜索引擎优化) 基础知识。这这将使您能够像Google一样思考,从而提高您的搜索技能。
 
后退
顶部