怎么做一个好的做一名程序员好吗

嗯这里我不太想重复其他答案說的内容,那些老梗任何一个上过软件工程这门专业前两个课时的学生,都可以告诉你一个故事那就是一个孕妇怀胎十月生产,找十個代孕一个月就能生出来,诸如此类用归谬法来证明这个逻辑推论的错误

重复说这些没有太多意义,我相信连提问者本身可能都知道囿这么一肥四

但是我想把我们工作中实际遇到的问题以及如何解决这些问题的方案说一下应该说在某些场景下,这个问题并非无解而苴解决方案可能要超出你的预想,比你预想得还要好

先说遇到的困难我们有一个程序,10天做好那么假设每天的工作,我们将其切割成┅个任务那么10天做好,这里就有10个任务

如果我们想交给10个不同的人去做那么有两个困难会阻碍我们这么做

1)任务之间有依赖,有些任務需要先完成其他任务才能开工,那么这样这样如果我们把这两个任务交给不同的做一名程序员好吗分配到后一个任务的做一名程序員好吗就会在前一个做一名程序员好吗干活时候闲置,从而导致生产效率1+1<=1的情况发生

2)任务之间的关联需要有沟通成本a和b两个做一名程序员好吗,他们分别完成不同的任务但是软件并非独立的模块,模块和模块之间需要有沟通那么要让软件沟通,两个做一名程序员好嗎自身必须先沟通那沟通是有成本的,而且沟通成本随着人数上升而上升而且是呈阶级成本上升,10人最糟糕的沟通成本是10的阶乘那吔就是10*9*8*....*2*1 = 3628800,那也是就是说最糟糕的情况下,成本会飙升这么多

做一名程序员好吗嘛有问题解决问题

先说两个书本上的解决方案

第一个就昰管理方法的问题,甘特图之类的就是用来对付这种情况的

第二个就是高内聚低耦合,以降低沟通成本

这两个当然能解决问题但是在峩看来,这两个其实都是降低单位人工成本的方式就是原来一个模块我要985211的人来做,通过这种方式切割之后会crud搬砖就行了,培训班就能替代了这种方式下,可以降低单位人工成本也就是原来要给一万一个月的,通过培训班毕业替代的话给五千就可以了,从而降低囚工成本这种方式不能说不成功,其实j2ee微软等提供的所谓企业解决方案,以及以前大量出现的外包都是这种方式的最好说明和实践

那我们曾经面对的情况是,即便如此我们还是觉得贵啊,小公司承受不起这么高的用人成本,因为用人成本不仅仅是工资还有办公樓的租金等,还有软硬件成本总的说来就是员工的salary/remuneration/工资,硬件的depreciation折旧硬件可以将成本折旧平摊到每一财政年度上去,最后还有软件的license fee授权费这三个是支出大头,所以光节省salary对于大公司来说,有意义但是对小公司来说,意义相当有限

怎么做第一步,先解决软件的license fee嘚问题全部用开源的,我们用不起任何一个授权的正版软件不开源我们就不用,等下再来详细展开

第二步上云,用云计算替代服务器硬件成本说白了就是租,不要买而且云上所有的服务,我们基本上都不用只用iaas,不用paassaas之类的狗屁,因为那都是收费的没钱,iaas昰所有云都有的玩意而且很便宜,青云甚至可以按秒收费而且大部分时候只买1c1g甚至1c 0.5g的烂实例,坏了就reboot没几个钱,实例包年包月流量按量付费,没量的话一个月就是只要26-60块钱,这还是涨价后的价格以前更便宜,这个价格亲民到了极点随便一个阿猫阿狗都能负担嘚起吧?一个月你多付出一顿饭的价格就能租个云实例,爽不爽

但是这里注意,不要买那些学生云实例因为那些学生政策有一个大夶地坏,那就是它的带宽只给你1m不够用,我们流量按量付费的话一般都是拉大到最大,100m200m,反正按量付费没量不给钱,这样如果突嘫出现流量陡增的话我们也不需要因此付费,或者做什么额外的操作但是如果是1m的话,这个很容易出现瓶颈给自己埋个坑,没有必偠学生实例只适合学习测试使用,不适合生产

第三个人工成本,还是贵怎么办呢?

前面说到十个任务那么我们要做的是,去开源項目里面找资源找各种资源,开源是社会主义

你并不是每一个任务都需要自己动手去做的,像maven central上有上千万的开源依赖,随便你下载可以白嫖,为什么不用而且如果你能将任务划分得足够合理的话,你甚至可以少雇佣做一名程序员好吗为什么呢?比如十个任务囿三个任务是开源能够解决的,别人都做好了的那你只需要雇七个人天就行了,那三个你直接拿来用就好了

那这样做的后果就是我们箌了后期,几乎都在开源社区里面找各种项目

实际上开源的项目多数都是工具软件也就是大家都要用到的任务一,比如操作系统大家嘟要用,有开源的编程语言,有开源的编译器,有开源的数据库,有开源的gui,有开源的而且主要都是开源的,那这个时候我們就可以不雇佣这些任务的开发了

当然这个时候会有一些什么掐脖子的问题,那这个是体制需要去思考和投入的东西小公司不可能去承擔这些东西,穷则独善其身这样就能解决掉大部分依赖问题,我们就可以专注在业务实现上

第二个问题沟通成本,这个当然存在那怎么办呢?我们的解决方案就是让我们选择的工具尽可能接近,让大家on the same page对同一个东西的理解是同样的,这样就不会出现鸡同鸭讲的情況所以我们后来选择的工具,几乎都是eventloop+future/callback+await的形式然后我们惊讶地发现,云端和客户端居然都有类似的工具,那就不客气了因为大家嘚代码背后的逻辑都差不多,所以沟通起来就很顺畅就不会出现goroutine不是coroutine的冲突

然后做到这一步之后,我们陡然发现好像一个人其实也够叻,所以我后来就做了一个实验我们招了实习生,然后让实习生们全栈

效果出人意料滴好比我想得要好得多,不仅实习生们能够掌握铨栈而且还会推进全栈的搞法和思路,他们不会把自己局限于某一个领域比如后端,而是什么都做

所以做到这一步之后我陡然发现,其实这一个程序不用10人天,你踩在巨人的肩膀上1人天就足够了

那我们甚至可以给现有的员工加工资,哪怕是给现有员工工资翻番對比10人天,还是赚的

所以我们最后实现的是用1人1天,实现过去1人n天或者好一点n人1天的工作

然后说一下我们脚踩的巨人们,如果对这一套感兴趣的可以自行尝试,不过我不保证其他公司一定能搞定我只说我们是这样做的,而且做得很开心

其实还可以压缩最后三个可鉯被压缩成一个,但是没有必要了生活中什么都懂一天,也多彩一点

当然这背后凝结了无数的人类智慧这也是毫无疑问的,所以应该說生活在这个年代的年轻人是幸福的,非常幸福的能够有如此强大且易用的工具,能够快速实现目的当然事分两面看,对于那些混ㄖ子的那恐怕将来的世界不会太友好,因为一旦资本家意识到原来这事只要一个人就能做了,那请问剩下的九个人该怎么办呢

如果伱是老板,你会怎么办

但是你不敢明着来,因为这种事容易引发社会等舆论的关注一般舆论都是同情劳方的

那怎么办?资本家阴招多嘚是

比如让他们996受不了自然就滚了,不用担心没有人滚人这么多,总有人受不了

}

原标题: 如何成为一名优秀的IT做┅名程序员好吗这四点你有想过吗

作为一个做一名程序员好吗,我经常会问自己一个问题:

优秀的做一名程序员好吗都具备哪些特质

峩总结过很多特质,例如:

3、有好奇心、有探索精神

4、逻辑清晰能够用通俗的语言把技术问题讲清楚

5、有良好的英文阅读能力

经过一段時间的观察,我发现这上面的所有特质都可以由一种行为习惯衍生出来,也就是如果你有以下习惯那么你可能拥有且不限于以上所有嘚特质。

观察大多数做一名程序员好吗的行为朝相反的方向走

这句话也可以借用一本书的标题(《少有人走的路》)来描述:少有做一洺程序员好吗走的路。是的这句话的逻辑也很明显,和“优秀的人总是少数一样”

如果你的行为和大多数做一名程序员好吗一样那么伱很可能不会成为一个优秀的做一名程序员好吗。

所以如果你想成为一个优秀的做一名程序员好吗,你首先需要拿出一个本子记录一丅大多数做一名程序员好吗的特质,然后分析下反向行事是否会让自己更有竞争力,下面我说几个我观察到的现象:

1、大多数做一名程序员好吗都喜欢谈论编程语言

编程语言是做一名程序员好吗谈论得最多的话题他们喜欢讨论哪个编程语言更有优势,关注编程语言的排荇正因为此,有一部分人会以不断学习新的编程语言为乐以此作为区别于普通做一名程序员好吗的凭证。相反另一部分人由于经验鈈足,区分不了具体哪个语言才是最适合自己的从而迟迟不肯行动,陷入无限的纠结中有时不同编程语言的阵营间还会产生口角,这種现象被视为对各自信仰的捍卫进而还会引起大多数人的围观。

大多数人都把注意力放在编程语言这一层面上最大的原因可能是因为編程语言是通往程序世界的大门,它也是最实用的工具学会了一门编程语言,就可以用一种新的方式和计算机进行交互了

但这和现实卋界不同,现实世界中学好一门外语,相当于打开了一个新的世界例如学好了英语,你便可以自由穿梭在以英语为母语的国家中了解他们的文化和历史,掌握第一手外文知识从而能够帮助你更好的决策,可以说多掌握一门外语能让你的认知获得线性增长相反,在計算机世界你多学一门语言,它不会给你带来1+1=2的效果因为本质上,我们的目的不是学更多编程语言而是利用计算机,帮助我们完成具体的任务要知道同样的一个任务,甚至可以用好几种不同的语言来实现

曾经看过一个问题,提问人可能是新人他问:我想学编程,但不知道先学Python还是Java回答的人就告诉他:你用来纠结的这些时间,说不定早就可以学会其中一门了

是的,优秀的做一名程序员好吗不會把大量的时间放在编程语言上因为他们会把注意力放在更重要的事情上。

2、大多数做一名程序员好吗都不重视基础

有句话在业界特别鋶行那就是

从小不努力,长大做IT

这句话的意思是IT行业的门槛非常低,任何人只要学完一门编程语言就可以入行了更深层次的意思是IT笁作都是重复性的劳动,并不需要太有创造力的人才

聊天时经常会聊到算法的话题,例如“算法在工作中到底重不重要”很多人给出嘚答案是不重要,理由是因为日常工作中基本用不到这又是一个典型的实用主义答案,同时它也极具迷惑性因为“日常工作中用不到”的确是事实,但这个事实并不能推导出算法不重要这个结论

算法很重要,就像数学是所有学科的基础所以数学很重要一样,算法是┅个系统的灵魂是不同软件之间拉开差距的筹码,最典型的例子就是谷歌搜索引擎它当年就是依靠著名的PageRank算法使其与市场上的其他搜索产品拉开差距的,该算法直接影响的是搜索体验大概率的把人们想要的结果排在前面。

提升算法能力不仅可以帮软件提升竞争力而苴还可以提升我们的逻辑思维能力,人和人之间的差异其实就在于思维能力的差异如果你每天都在敲if ... else这类的代码,你的思维能力不会有哆大的变化但在人工智能时代,你时不时琢磨一下监督学习非监督学习中的算法,我想你的未来一定会更美好吧

算法只是基础中的┅类,操作系统的原理、TCP/IP协议、MySQL中的Innodb引擎、Redis实现原理、Reactor网络模型等都属于基础你可能觉得这些都很难啃,但据统计基础知识只占一个囚所学全部知识的3-5%,牢牢掌握这些基础知识是你在日新月异的知识海洋中以不变应万变的法宝。

3、大多数做一名程序员好吗不重视效率嘚提升

如果你在一个互联网公司你可能会这样调侃你的做一名程序员好吗同学:

你工作不饱和啊,bug解完了吗

下面的对话也是常有的:

B:苦逼加班解bug呢。

你也许看出来了大多数做一名程序员好吗常常受限于解bug的恶性循环中——以前版本的bug还没解完,新功能上线又出现一堆bug解bug是一件特别阻碍生产力的事情,它是一件副产品理论上员工应该把大部分精力都用在开发上,而大多数公司却在维护软件的稳定性上付出了巨大的成本

很多员工都抱怨自己工作那么辛苦,工资却不高但他们却没有想过这个结果是怎么造成的,他们可能没有考虑過自己投入的时间能给公司带来多大的收益如果把大部分时间都用来解bug,其实产出不仅是零还是负的,你说公司会给你涨工资吗

以峩观察的来看,真的是这样的现象开发过程中我们特别在乎一个产品的开发时间,希望尽可能的完成开发并发布产品例如希望一个月唍成,但却忽略了产品发布后可能需要十个月甚至更多的时间来维护它,这真的是一个本末倒置的怪圈

相反,如果每个人都有意识提升自己的工作效率提升自己的出品质量,把更多时间投入到有价值的事情上我想公司的业绩不会差,公司赚钱了你的工资也不会低。你可能会问如何才能提升工作效率其实也很简单,做每件事之后都要反思:

我该如何才能减少bug的数量呢?

做这件事有通用的解决方案吗

4、大多数做一名程序员好吗都不利用业余时间进行探索

探索和人的一个重要的特质相关,就是自主性(initiative)不仅是我,我相信大多數领导都喜欢和有自主性的下属一起共事不仅是因为他们稀缺,同时还因为这样的下属会主动去解决问题可以在组织中极大的减少沟通和管理成本。

刚开始工作时我就发现公司鲜有人会利用业余时间学习了,当时以为换一个技术更好的公司会有所改变技术学习氛围會好一些,谁知道这些都是自己的幻想纠其原因可能是因为人都喜欢过得安逸一点,或者以平时已经很忙了为借口在工作之外就不再學习了。平时不学习会造成什么后果呢最直接的就是解决问题的能力低下,这些人只能解决领导规定范围内的问题超出这个范围,一旦出现问题要么掩盖,要么规避反正不会及时的从根本上去解决,不是因为不想是因为压根就不会。

对于做一名程序员好吗来说學习包括看书和看代码,如果你每天抽一个小时时间看书估计你可以超过90%的人,同时你花时间去研究github上优秀的代码那么剩下的人群中嘚90%也会被你甩在身后。

读优秀的代码可以让自己获得飞速的成长就像游戏中的打怪升级,优秀的代码是大boss一次可以让你提升10个等级。這个过程不可逆因为每完成一次,你都非常清楚的知道自己再也不会写以前那种烂代码了这根本就是碾压过去的自己。当你“升级”後再回过头去看公司里大多数人的代码,就可以得出和我一样的结论——他根本就没读过好的代码

“看大多数做一名程序员好吗的行為,然后朝相反的方向走”其实是一个更为抽象的方法论,能帮你把不同的特质联系起来从而可以更方便的不断提醒自己不要走偏。類似的行为远不止这四个例如大多数做一名程序员好吗英文都不好,大多数做一名程序员好吗不擅长沟通大多数做一名程序员好吗不學他们认为的“无用之学”(例如哲学、经济学、管理学等),大多数做一名程序员好吗不写Blog大多数做一名程序员好吗没有自己的产品等等。

一般拥有自己的产品做一名程序员好吗生活都会很美好,这里的例子举不胜举例如微信之父张小龙就是以Foxmail一举成名的,说到这裏我好像也没做到:)所以,下一次你问我在干嘛我肯定不会说我在解bug:我在琢磨自己的产品呢

}

如果说理解学好web前端是先能找到┅份工作那么你应该这样做:

1.制定好一下系统的web前端学习规划,每天定量学完什么知识点就掌握,能自己应用而不是能看懂,写不絀来东西


}

我要回帖

更多关于 做一名程序员好吗 的文章

更多推荐

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

点击添加站长微信