编程聚会
❶ hackathon简介
黑客马拉松,一个在电脑迷群体中广为流传的术语,实际上是编程爱好者的盛会。这种活动的核心内容是程序员们聚集一堂,通过团队合作的方式进行深度编程。编程马拉松的时间跨度通常在几天到一周之间,它不仅仅是一项编写一次性代码的任务,而是强调在短时间内,参与者以自由、创新的方式,共同追求他们的编程目标,整个过程充满了无拘无束的探索精神。
类似的活动还有“短跑”,这个词通常用于指代那些为期短暂但富有挑战性的编程聚会,通常只有几天的时间。另外,Linux用户群体中还流行着“代码节”这一概念。它是代码和节日的巧妙结合,源于早期的“安装节”,这是一种Linux用户群体的庆祝活动,参与者们通过此类活动共同学习和分享代码技术。
无论是黑客马拉松、短跑还是代码节,它们都体现了编程社区中合作、创新和共享精神的紧密结合,为程序员提供了一个展示技术和创意的平台。
❷ 自学编程=做无用功
作者 | PRESSone
来源 | 怀左同学
先给你讲个故事,看看你有没有类似的经历。有一天,你去参加同学聚会,和老友们举杯畅谈,他们告诉你,不学编程就要 out 了,从全球趋势来看,编程这把火已经烧了很多年。英国早从 2014 年 9 月起,就规定 5-16 岁的学生都必须学习编程,苹果 CEO 库克表示全世界各地都应该开设编程课程。回到家中,你辗转反侧,觉得自己跟不上时代潮流,扼腕叹息:“廉颇老矣,尚能饭否?”焦虑之余,你开始疯狂搜索编程,网络、知乎、搜狗,你方唱罢我登场。一顿操作之后,你的嘴里念念有词:“Wow,会编程的人好酷,牛逼,都是大神。”感叹之余,你觉得不能纸上谈兵,临渊羡鱼,不如退而织网。
于是乎,你开始了自学编程之路。
听人说,算法是编程的核心,学好算法可以一招鲜,吃遍天。别人说在嘴里,你听在心里,马上买了一本《算法导论》,打算死磕算法。你没日没夜的攻读,‘算法基础’那一小章,你鼓捣了大半个月,还是云里来雾里去的。然而,心高气傲的你是不会屈服于‘算法基础’这只拦路虎的,你开始逛各种论坛,CSDN、博客园、简书、知乎都在你的常逛 list 上。你充分利用一切碎片时间,上地铁刷一下,吃饭时刷一下,睡前刷一下,刷得不亦乐乎,刷不完的果断收藏。
等到收藏超过100篇未读的时候,你终于发现收藏=永不再读,这让你沮丧。
更让你沮丧的是,你买的那本《算法导论》已经在书架上躺了好久。为了弄懂‘算法基础’,你把《算法导论》打入了冷宫。比这更残酷的是,从你信誓旦旦说要学编程以来,你连一行代码都没敲过,一个程序都没跑起来。你越来越焦虑,终于有一天,你彻底崩溃了,自怨自艾道:“老子骨子里就是个文科生,赶什么时髦?学什么编程?学来学去老是做无用功有意思吗?安安静静地写文章不好吗?”写文章的人不一定学不了编程,作家王小波就是中国早期程序员,曾经自己编了一套DOS下的独立输入法。真正阻止你学编程的也不是深奥的算法,而是你错误的学习方法。自学编程不等于做无用功,盲目、焦虑地自学才是。读到这里,你肯定满脸疑惑:“我到底哪里做错了?”
首先,自学的初衷不是焦虑、盲目,而是解决问题。
李小龙当年刚回香港,在《欢乐今宵》上节目,节目组请来了一名拳师,想考验他能不能推到对方。拳师也摆好架子等他来推,结果李小龙一拳打在对方脸上。李小龙想表达的是:在真实的实战中,没有人会等你摆好架势,只冲着你规定的地方打过来。学习也是同样的道理。在真实生活中,环境和知识都一直在动态变化中,你不可能像学校里一样,系统的学好、学完一门知识,然后坐在教室等着不超纲的考试。
大部分时间,生活会先给你一个考试,然后你根据问题,自己找出关键词,开始学习。所以,学习的起点不是某人在酒桌上蜻蜓点水的一句话,也不是某人在朋友圈晒的一本书、推荐的一篇微信文章、更不是这个行业的一个经典教材引发你的焦虑,而应该是你真实遇到的一个问题。遇到问题,动手写,犯错、改正,再犯错、再改正,这是学编程最重要的过程。其次,自学尤其是自学编程往往不是线性的。
我们从小到大在学校学习,都有一本教科书,往往按着预习、听讲、练习、复习的路径学习,所有的教材也如出一辙:每个章节所涉及的知识点之间,全都是线性关联,第一章学好了,才有基础学第二章。而社会的知识结构不仅不是这样的,而且几乎全都不是这样的。
工作中、生活里充满了各式各样的“提前引用”,即想要理解当前的知识点,需要依赖你未来才能理解的某个或某些知识点。如果还是按照校园时代的线性思维来学习的话,很有可能就像故事中的主人公一样,最终学不下去。拿编程来说,动不动啃《算法导论》的人,要不是有很深厚的数学基础,肯定吃不消。
生活很少教我们按部就班,它给我们的测试往往是超纲的,这就要求我们不断更新和迭代。互联网的发展给我们带来的最大启发就是迭代,从门户到搜索,从搜索到移动互联,从简单的网页交互,到如今热闹的小视频社交,技术和生态一直在更新和迭代。
同样,自学也是一个不断更新和迭代的过程。编程是一门活到老、学到老的手艺,有些很抽象的概念,一开始看不懂没关系,先脑子里有个大概的印象,然后依葫芦画瓢写几段代码,自己动手实践,写完之后再总结、归纳、整理、组织相关的知识点,实战经验多了,再回头来看最初的难点,你自然能够豁然开朗。
比如说 python 中的 return,很多初学 python 的人,对 return 疑惑不已,字面上是返回,那它到底返回什么,又返回到哪里呢?有人可能会给你解释:“return 语句就是将结果返回到调用的地方,并把程序控制权一起返回。”对于初学者来说,这个解释也不好理解。
没事,先实践起来。
拿下面这四行代码来说,你可以想象你开了一家工厂,雇佣工人来干活,这个工人(worker)在你的指导下,用a、b、 c 三个材料,装配出了 x 和 y 两个成品。但是程序里的装配和工厂不同,用过的材料不会消失。这样,这个工人手里就有了a、b、c、x、y五样物品。他怎么知道你要的是哪个呢?
所以 return 的作用就是,在这种时候告诉工人你到底想要什么东西,是一个iPhone 手机壳还是整台 iPhone。毫无疑问,return x 和 return y 是完全不一样的结果。return x 是当你让这个工人帮你干活时(调用函数),他最后会把产成品x交到你手上,而当你输入return y 的时候,干活的工人会把产成品 y 给你。
举个例子,worker(1,2,3),return x 的结果为1+2=3,return y 的结果为(1+2)*3=9。这样实践一下,你对于return是不是有了更深的理解?def worker(a, b, c): x = a + b y = x * c return y看完我的分析,蓦然回首,你是不是觉得道路明朗了许多,你肯定很想问:怎样自学才高效呢?在自学过程中,有个方法特别管用,就是用输出倒逼输入,你逛论坛、刷文章、看视频教程都没问题,关键是要有输出,光有输入可是不行的。而最好的输出就是实践,把自己听到的、看到的、读到的,转化为你独立编写的一个个程序,岂不妙哉?
文章开头故事里的主人公就陷入了盲目输入,却无输出的泥潭。他的输入表面上看上去渠道很多元化,然而这些输入并没有带来有效的输出。还有一个很多人都不知道的点,你的输入很有可能是制约你进步的紧箍咒。
输入也是有讲究的,盲目输入会带来信息超载。全世界每天有 4000 本书出版,超过 4 亿个字;纽约时报一天的文字量等于牛顿同时代的人一生的阅读量;一个专业领域,每天大概有有近4000篇文章正在产生。就算你火力全开,疯狂地输入相关知识,也还是难免有漏网之鱼。
而且,在茫茫的信息汪洋中,信息质量参差不齐,保不准你输入的就是一些边角料,反而让你裹足不前。这儿分享桥水(全球着名对冲基金)创始人瑞.达利欧在《原则》一书中阐述的观点:“正确的决策很多时候需要依赖可信度加权。”学习同样也需要可信度加权,不是所有的资料都全盘接收,而是有选择的相信,用老祖宗的话来说,要取其精华,弃其糟粕。信息爆炸时代,最重要的不是增加信息,而是筛选和删除信息。除此之外,要勇于跳出舒适区,刻意练习。
刻意练习这个概念由美国心理学家安德烈.艾莉克森博士提出,即有目的的学习,指的是把要学习的内容分成有针对性的小块,对每个小块进行重复练习。在武术训练中,非常强调分解练习。
首先你要把整套动作过一遍,看教练是怎么做的。然后把它分解为多个动作,每个动作分解为多个步骤,一个一个地练习。在这种训练中,动作一定要慢,只有慢下来才能感知动作的内部结构,注意到自己的错误。画家要采风、棋手要打谱、律师要学习案例、政客要读历史、科学家要看论文、马拉松运动员每周至少要累计150公里的跑量。
大部分的学习都不是一蹴而就的,往往是练习-反馈-练习-反馈-练习-反馈-学成。刻意练习的关键是随时获得有效的反馈。拿自学编程来说,这是一个很容易获得反馈的领域,当你写的程序跑不起来时,意味着你要 debug,你得把你写的代码分成一小段一小段,逐句检查,直到找出 bug。当然,鼓吹刻苦的鸡汤想必大家都喝腻了。事实是,很多人即使整天坐在书桌前埋头苦学,时长达到甚至远超学霸,实际效果却远远达不到学霸的水平。问题的关键在于你的思维和学习方法,在于你的学习时间是否得到了高效利用,是否能通过高效学习把知识转化为你真正的实力。
只是如果你注意力涣散,身在书桌前,神游天地间;如果你好不容易学完了,转眼又忘得一干二净;如果你写了很多代码却不会举一反三,同一个知识点换了个问法又被难住了;如果你对于你所学习的领域缺乏好奇心和探索精神,只是当一天和尚,敲一天钟,没有刻意练习。那么,花费再多的时间,又有什么成效呢?
扪心自问一下,你上一次坐下来长时间专注于学习,是什么时候呢?
似乎这件事变得越来越难以做到,因为我们的生活已经有太多的干扰:必须要点的微博、朋友圈点赞、支付宝蚂蚁森林收能量……诱惑源源不断,切割了我们在学习上的很多可能性。我们接受了太多无效输入,自然也不会产生高效的输出。读到这,你可能又要问我了:“该怎么办才好呢?”比起一味地延长学习时间,更‘刻意’地学习更重要。
学习从来都不是一个阶段的事,更不是一件轻松的事,但是我们可以优化我们的学习路径,比如给自己创造一个干扰项少的学习环境。拿自学编程来说,你需要的就是一台电脑。在学习的时候,你最好离手机远一点,并关掉电脑版微信、QQ和一些乱七八糟的应用。不过,自学之路从来都不是轻松的,这也才显得它的专业性和独特性。愿你学成归来,已然成了一名大神!
❸ 热爱编程是一种怎样的体验
感觉世界上除了编程做其他的娱乐都毫无意义,朋友聚会时,我在刷书,陪女朋友看电视剧时,我在刷书,半夜睡不着,起来刷书或者编程。有时候半夜或者午睡时做梦,梦到自己写了一部分睡觉前未写完的代码,然后睡觉醒后,直接按着大脑中的记忆写出来。我的个人认为,所有的娱乐项目除了健身比如跑步、健身操之外,看电视,看电影,听广播,聚会,新闻,都是在浪费自己的生命。人从小就应该不停的学习,就算不是做编程这一行也应该不停的学习,人不应该在毫无意义的事情上浪费时间。