通过「刻意练习」,你才能成为顶尖的程序员 >> Topics >> Coding Style



通过「刻意练习」,你才能成为顶尖的程序员 » Topics » Coding Style

作家格拉德威尔在《异类》一书中指出:

人们眼中的天才之所以卓越非凡,并非天资超人一等,而是付出了持续不断的努力。1万小时的锤炼是任何人从平凡变成超凡的必要条件。

他将此称为「一万小时定律」。

要成为某个领域的专家,需要10000小时,按比例计算就是:如果每天工作八个小时,一周工作五天,那么成为一个领域的专家至少需要五年。这就是一万小时定律。

如何打破无休止的加班?

在中国,IT 行业普遍加班严重,先不说行业特征与企业文化
就我最近面试的经验来看,很多程序员的开发效率实在是低到不忍直视。

「效率」也是一个导致加班的重要因素。
如果你效率高,但迫于企业有加班的文化,你完全可以用加班的时间来学习一些新的技术,进一步提高自己的效率。

效率低会引起下图的怪圈:


效率低 -> 无法按时完成工作 -> 加班 -> 没有时间练习 -> 效率越来越低。

要打破怪圈,有效的办法就是「刻意练习」,从此进入一个正向循环:


效率高 -> 提前完成工作 -> 练习提升 -> 效率越来越高。

别把工作当练习

演员在台上的表演算是练习吗?球员在比赛场上算练习吗?不算。
那么对程序员而言,工作上做项目算刻意练习吗?

我以前以「能边学边做」为荣,API、语法之类的没必要看,反正我们有 Google 和 Stack Overflow 嘛。
直到我参加了 Hackthon 之后改变了这个观点。在极短的时间内,要把一个创新的想法,用技术手段实现出来。
这个时候如果你还在查某个接口应该怎么用,某个语法应该怎么写,能竞争得过别人吗?

现实工作中何尝不是如此?商业竞争如此激烈,假设你要做个推荐系统,你是找做过的来做,还是边学边做?

所以我认为练习应当发生在工作之外,一旦上了战场,不是你死就是我活。

怎样练习才有效?

并不是所有的练习都是有效的,没找准地方,只是在浪费时间。
比如,我用吉他弹一首曲子时,某个小节老是弹不好,我就会单独把这一个小节拿出来重复练习,而不是把整首曲子一遍一遍地重复练。

专家研究表明,只有在「学习区」练习才最有成效。
我们应当走出舒适区,多在学习区练习,将其变成舒适区;
接触恐慌区,将其慢慢变成学习区。

这样才能避免原地踏步,持续提高。

程序员怎么练习

走出自己的舒适区

首先要走出自己的舒适区,接触一些不熟悉的技术领域。比如后端很熟悉了,去写写前端试试。Web 很熟悉了,去写移动端试试。
业务开发很熟悉了,去研究一下搜索,推荐系统,大数据试试。OO 很熟悉了,玩 FP 试试。
老守着自己会的那点儿东西,总有一天会坐吃山空。

发现自己的不足

有以下方式:

  • 录视频
  • Code Review
  • 结对编程
  • 参加编程道场

没有对比,很难发现自己的不足,所以把自己的代码和编码过程展示出来,一定会发现许多可以改进的地方。

只有菜鸟才会觉得自己特别牛,因为物以类聚,他的圈子里全是菜鸟。
你越牛,接触的圈子也越牛,你越会觉得自己渺小。

程序员练什么?

程序员要练习东西很多,一些基本功如下:

  • 打字
  • 编程语言
  • 编程范式
  • 编辑器
  • 快捷键
  • TDD
  • Clean Code
  • 重构
  • ...

没时间不是借口

我第一次组织 Code Retreat 的时候,到 QQ 群里宣传活动,结果得到的是嘲讽:

周末还在写代码,肯定是�潘俊�

很多人没有时间练习,却有大把的时间打 LOL,大把时间在群里吹水,大把时间讨论楼市股市。
当然,人都有选择自己生活方式的权利,并没有谁对谁错。

说这么多,只是希望真正热爱编程的同学们知道,只有通过刻意练习,才有可能成为顶尖的程序员!
CodingStyle.cn 这个社区里,我们会组织 Code Review,Code Retreat,Coding Dojo。
希望我们一起成长,成为顶尖的程序员!


Read full article from 通过「刻意练习」,你才能成为顶尖的程序员 » Topics » Coding Style


No comments:

Post a Comment

Labels

Algorithm (219) Lucene (130) LeetCode (97) Database (36) Data Structure (33) text mining (28) Solr (27) java (27) Mathematical Algorithm (26) Difficult Algorithm (25) Logic Thinking (23) Puzzles (23) Bit Algorithms (22) Math (21) List (20) Dynamic Programming (19) Linux (19) Tree (18) Machine Learning (15) EPI (11) Queue (11) Smart Algorithm (11) Operating System (9) Java Basic (8) Recursive Algorithm (8) Stack (8) Eclipse (7) Scala (7) Tika (7) J2EE (6) Monitoring (6) Trie (6) Concurrency (5) Geometry Algorithm (5) Greedy Algorithm (5) Mahout (5) MySQL (5) xpost (5) C (4) Interview (4) Vi (4) regular expression (4) to-do (4) C++ (3) Chrome (3) Divide and Conquer (3) Graph Algorithm (3) Permutation (3) Powershell (3) Random (3) Segment Tree (3) UIMA (3) Union-Find (3) Video (3) Virtualization (3) Windows (3) XML (3) Advanced Data Structure (2) Android (2) Bash (2) Classic Algorithm (2) Debugging (2) Design Pattern (2) Google (2) Hadoop (2) Java Collections (2) Markov Chains (2) Probabilities (2) Shell (2) Site (2) Web Development (2) Workplace (2) angularjs (2) .Net (1) Amazon Interview (1) Android Studio (1) Array (1) Boilerpipe (1) Book Notes (1) ChromeOS (1) Chromebook (1) Codility (1) Desgin (1) Design (1) Divide and Conqure (1) GAE (1) Google Interview (1) Great Stuff (1) Hash (1) High Tech Companies (1) Improving (1) LifeTips (1) Maven (1) Network (1) Performance (1) Programming (1) Resources (1) Sampling (1) Sed (1) Smart Thinking (1) Sort (1) Spark (1) Stanford NLP (1) System Design (1) Trove (1) VIP (1) tools (1)

Popular Posts