阅读时长约 12 分钟,共计 2900个字。
作为程序员,打造核心竞争力无疑是让自己变得鹤立鸡群的方式之一,可以顺便帮助我们突破内卷的困境。那么,这个核心竞争力该如何打造呢?
回顾我的职业生涯,我的个人建议是:科学地践行一万小时定律。
所谓“一万小时定律”,来源于格拉德威尔的著作《异类》。其中提到:“人们眼中的天才之所以卓越非凡,并非天资超人一等,而是付出了持续不断的努力。一万小时的锤炼是任何人从平凡变成超凡的必要条件。”换句话说,如果想成为某个领域的高手,需要经过一万小时的坚持不懈。
简单换算一下,如果按每天工作八小时,每周工作五天的话,大概需要五年的时间。
这一定律同样适用于做产品,某个产品需要经过一番锤炼才能成为“产品”,而非Demo。所以有的公司在做产品的时候会让员工加班,或者雇佣更多的员工来工作。如果用人力-时间来计算的话,一个员工花五年的时间才能打造出一款精品,那么十个员工就需要花费半年的时间。虽然在编程领域,时间和人力通常是不能互换的,但为了解释这个定律,我就暂且如上表述。
所以这些公司其实也就是为了做出好一点的产品,无意或有意之中,把锤炼产品的时间快速地堆到一万个小时。
但是请注意,这个一万小时并非一个定值,它要表述的意思其实是坚持的重要性。不要半途而废,轻言放弃。
回顾我十余年的工作经历,其实刚毕业时候以及毕业后前几年的时候,我压根不知道这个定律,更多是性格使然。
我这个人比较轴,如果是比较重视的东西,无论如何也要问出个结果。就像编写代码的时候,如果碰到一个难解的问题,不把它解决掉,我睡觉都会不舒服。
凭着这股“轴”劲,才让我的技术水平越来越精进,甚至后来跨界出版了技术图书,打造了属于自己的技能树。
但是这里肯定会有人反对:做软件开发,不加班的占少数。大多数人毕业的年龄大概在23岁,如果按照5年的时间计算,即使不加班,到28岁,也该是个编程高手了。而且如果按照一万小时定律来算,岂不是人均“编程大师”?所以这个定律不靠谱。
其实,我自己在28岁的时候,也没啥成就,依然是个奋战在一线的程序员。所以这一万小时对于我来说,其实也并不能完全这么算。那么,一万小时定律真的不靠谱吗?
其实并不是定律不靠谱,而是使用它的人,把它给用错了。
虽然“一万小时”定律已经成为人尽皆知的事情,但实际上,格拉德威尔在《异类》一书中还提到了智商、运气和家庭环境这另外三个要素。
智商不用多说,如果在120以下,就很难成为高手了,当然也有例外。但好消息是,大部分人的智商其实都高于120,而且都差不多。所以别轻易说自己笨,那样的话就把大家都给骂了。
运气的话呢,可遇而不可求,很多有成就的人都受到了上天的眷顾。所以不要迷信个人的能力有多强大,俗话说一个好汉三个帮,这“三个帮”里面,运气是必不可少的。但是呢,也别过度依赖运气。换句话说,成功的时候别吹嘘自己,失败的时候别怪罪运气。
最后就是家庭环境,不得不说,更好的家庭环境确实能让下一代的站在更高的起点上。这个“更好的家庭环境”其实不只是指财力,还有父母辈的认知、格局等等。有的家庭很贫穷,但是父母的世界观和做事方法都很正能量,这也是一种财富。有一些人,就是出生在这样的环境中,一样可以事业有成。
虽然智商、运气、家庭环境和坚持不懈的一万小时都是成为行业高手的前提,但即使加在一起仍然不构成充分条件。还是那句话,有的人把这一万小时给用错了,那无论怎样坚持,效果都会大打折扣。
所以,我罗列几个错误的使用方法。大体来说,只要规避这几个错误,才能让成为高手这件事有可能发生。
首先要说的,就是不要停留在舒适区。举个例子,光抄写英文26个字母,抄一辈子,也无法流畅用英语沟通,但这坚持绝对是超过一万小时了。所以,如果已经熟练掌握了某项技能,想要更加精通,就不要重复。
很多程序员掌握了某种开发技能,能开发出人们用的产品,就沾沾自喜,骄傲自满,然后不去深挖或者学习新的技能。在多年的工作中重复使用已有技能,那无论工作了多久,都是无法持续精进的,一万小时定律不会奏效。
另一种使一万小时定律失效的方法是失败后不懂得总结经验教训,总觉得失败是成功之母,结果一直在低水平地重复。努力了半天,看似很拼,其实仍然不够精进。
这一点其实现实已经教训过我们很多次了,我国很多优秀的老技术都失传了,导致后人又只能从0开始探索,这真的不利于传承。
这方面给我打击最大的就是做菜,中国菜其实很多外国人都很喜欢,但要走出国门,总是困难重重,外国人做出来的中国菜总感觉不对味。其实何止是外国人,我自己按照菜谱做出来的,我自己都不一定爱吃。在我眼里,那本菜谱根本就不是给初学者看的,因为那些“适量”、“少许”等等,初学者根本不懂掌握火候。等初学者能掌握火候的时候,或许也就不怎么需要看菜谱了。
所以现在去网上搜“中国菜 出海”这种关键字,出来的结果很多都是“预制菜出海”。说好听点是换种方式走向海外,不好听的呢,不是活人亲手做出来的东西,吃着也就没啥灵魂了,味道自然也差很多。
反观像肯德基、麦当劳却能顺利走向全世界,为啥呢?因为他们有标准化流程。即使是没做过饭的人,只要经过简单的培训,就能做出口味差不多一致的食物。这种标准化流程,内含完整、细致、可操作的方法论。只要按照这本“操作手册”来,稍加练习,就能做出个八九不离十了。我甚至可以想象,如果真的有其他文明来到地球,它们拿到这本“手册”,也能尝到地球的美味。
所以,失败不可怕,记得一定要总结经验教训。成功了也别太浪,记录成功的过程,然后好好做复盘,一定还能发现可以改善的地方。
说完了这两点,继续说第三点。
假设我们已经避开了前面这两点误区,现在已经在某个领域是个高手了,但依然要警惕。警惕啥呢?能力的诅咒。
有的人在自己的行业很厉害了,所以就不自觉地排斥周边领域。就好像Java里面的继承,从父类到子类,是抽象到具体的过程。在某个领域成为高手,只能算是在某个子类范围内混得还不错。如果不多关注相似的子类,整个人的思想会永远困在某个子类的范围中,看不到更抽象的维度。
我一开始从事的是Android客户端开发,做了有八年之久。后来接触到前端,意识到不能只把自己的能力局限在客户端,至少应该着眼于大前端。后来呢,又接触到Go语言,又把脚伸向了服务端的范围。
可喜的是,由于之前一直做Android用Java,熟练一门语言之后,再学习其它编程语言的时候其实是上手非常快的。当然这种“快”是停留在应用层面,对语言本身的设计理念感受还不算多,但这对于使用新语言开发产品而言基本上算是够用了。
总结一下,打造核心竞争力,我认为关键在于践行“一万小时定律”,其实就是最朴素的坚持。但要科学地坚持,别做低水平的重复,记得总结经验教训,同时别忘了看看周围的世界。
说到总结经验教训,我是印象笔记的忠实拥趸。从2013年开始注册使用,一开始用的是免费账户,后来付费购买了高级帐户。截止我写这篇文章的时刻,这里面保存了4.76GB的数据,是这十年来我的“备忘录”。

其实,像图片中搜索文字、PDF文档中搜索文字这类的功能,印象笔记早就有了。用好这个工具,真的能帮我们很多忙。
最后,祝愿大家都能用好一万小时定律,在自己的领域中成为大师。
我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大备份文件)。问题是如果启用sleep,它会中断应用程序。否则,计算机将持续运行数周,直到我下次访问为止。有什么方法可以防止执行期间休眠并让Windows在执行后休眠吗?欢迎任何疯狂的想法;-) 最佳答案 Here建议使用SetThreadExecutionStateWinAPI函数,使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入休眠状态或关闭显示。像这样的东西:require'Win32API'ES_AWAYMODE_REQUIRED=0x0
Rackup通过Rack的默认处理程序成功运行任何Rack应用程序。例如:classRackAppdefcall(environment)['200',{'Content-Type'=>'text/html'},["Helloworld"]]endendrunRackApp.new但是当最后一行更改为使用Rack的内置CGI处理程序时,rackup给出“NoMethodErrorat/undefinedmethod`call'fornil:NilClass”:Rack::Handler::CGI.runRackApp.newRack的其他内置处理程序也提出了同样的反对意见。例如Rack
我想用ruby编写一个小的命令行实用程序并将其作为gem分发。我知道安装后,Guard、Sass和Thor等某些gem可以从命令行自行运行。为了让gem像二进制文件一样可用,我需要在我的gemspec中指定什么。 最佳答案 Gem::Specification.newdo|s|...s.executable='name_of_executable'...endhttp://docs.rubygems.org/read/chapter/20 关于ruby-在Ruby中编写命令行实用程序
我构建了两个需要相互通信和发送文件的Rails应用程序。例如,一个Rails应用程序会发送请求以查看其他应用程序数据库中的表。然后另一个应用程序将呈现该表的json并将其发回。我还希望一个应用程序将存储在其公共(public)目录中的文本文件发送到另一个应用程序的公共(public)目录。我从来没有做过这样的事情,所以我什至不知道从哪里开始。任何帮助,将不胜感激。谢谢! 最佳答案 无论Rails是什么,几乎所有Web应用程序都有您的要求,大多数现代Web应用程序都需要相互通信。但是有一个小小的理解需要你坚持下去,网站不应直接访问彼此
我尝试运行2.x应用程序。我使用rvm并为此应用程序设置其他版本的ruby:$rvmuseree-1.8.7-head我尝试运行服务器,然后出现很多错误:$script/serverNOTE:Gem.source_indexisdeprecated,useSpecification.Itwillberemovedonorafter2011-11-01.Gem.source_indexcalledfrom/Users/serg/rails_projects_terminal/work_proj/spohelp/config/../vendor/rails/railties/lib/r
刚入门rails,开始慢慢理解。有人可以解释或给我一些关于在application_controller中编码的好处或时间和原因的想法吗?有哪些用例。您如何为Rails应用程序使用应用程序Controller?我不想在那里放太多代码,因为据我了解,每个请求都会调用此Controller。这是真的? 最佳答案 ApplicationController实际上是您应用程序中的每个其他Controller都将从中继承的类(尽管这不是强制性的)。我同意不要用太多代码弄乱它并保持干净整洁的态度,尽管在某些情况下ApplicationContr
我是一个Rails初学者,但我想从我的RailsView(html.haml文件)中查看Ruby变量的内容。我试图在ruby中打印出变量(认为它会在终端中出现),但没有得到任何结果。有什么建议吗?我知道Rails调试器,但更喜欢使用inspect来打印我的变量。 最佳答案 您可以在View中使用puts方法将信息输出到服务器控制台。您应该能够在View中的任何位置使用Haml执行以下操作:-puts@my_variable.inspect 关于ruby-on-rails-如何在我的R
如何检查Ruby文件是否是通过“require”或“load”导入的,而不是简单地从命令行执行的?例如:foo.rb的内容:puts"Hello"bar.rb的内容require'foo'输出:$./foo.rbHello$./bar.rbHello基本上,我想调用bar.rb以不执行puts调用。 最佳答案 将foo.rb改为:if__FILE__==$0puts"Hello"end检查__FILE__-当前ruby文件的名称-与$0-正在运行的脚本的名称。 关于ruby-检查是否
是否可以在应用程序中包含的gem代码中知道应用程序的Rails文件系统根目录?这是gem来源的示例:moduleMyGemdefself.included(base)putsRails.root#returnnilendendActionController::Base.send:include,MyGem谢谢,抱歉我的英语不好 最佳答案 我发现解决类似问题的解决方案是使用railtie初始化程序包含我的模块。所以,在你的/lib/mygem/railtie.rbmoduleMyGemclassRailtie使用此代码,您的模块将在
前言作为一名程序员,自己的本质工作就是做程序开发,那么程序开发的时候最直接的体现就是代码,检验一个程序员技术水平的一个核心环节就是开发时候的代码能力。众所周知,程序开发的水平提升是一个循序渐进的过程,每一位程序员都是从“菜鸟”变成“大神”的,所以程序员在程序开发过程中的代码能力也是根据平时开发中的业务实践来积累和提升的。提高代码能力核心要素程序员要想提高自身代码能力,尤其是新晋程序员的代码能力有很大的提升空间的时候,需要针对性的去提高自己的代码能力。提高代码能力其实有几个比较关键的点,只要把握住这些方面,就能很好的、快速的提高自己的一部分代码能力。1、多去阅读开源项目,如有机会可以亲自参与开源