03.03 有编程基础,辞职每天自学四小时编程,做git项目,刷leetcode。会比大厂在职的程序员成长慢吗?

ww13142010


刷 leetcode 我知道,你在 leetcode 上做算法题,刷算法,可能想通过这种方式来提高自己的算法能力,毕竟程序员面试的时候,算法是比较重要的一环。

但是做 git 项目是什么鬼?git 是什么?是代码管理工具, 是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。题主貌似没明白什么是 git 吧?这样的话,在家自己学习容易误入歧途啊!

你应该想说的是在 GitHub 上学习一些开源项目吧?GitHub 是一个开源项目的社区,是可以进行代码管理,里面有很多开源项目值得学习。


建议你在自学编程期间一定要搞清楚各种工具和技术之间的概念,概念都搞不清楚的话,容易学着学着就走错路了,就跟古代武侠上的人一样,闭关练功,容易走火入魔。


一个人的成长和学习,无非这两条道路,一个是自我主动学习,一个是在工作实践中提升自己。

但是一个人真正的提升,是坚持两条道走路,而不是只坚持其中一个。


自己在家学习,自学当然不错,但是自己学的时候,其实成长和提升的都比较慢,并不是自己在家学习的时候,很难控制自己的时间,无法控制懒惰,也无法合理管理时间,抛出去这些因素之外,更重要的是自己学习,是一个相对缓慢的过程,自己学习很容易误入歧途,在学习的过程中会经常走弯路,所以会缓慢,有时候,会跟实践脱节。一旦这样的,你学习的成本会大大提高,学习的效率会大大降低。


而在工作和项目实践中学习提升的话,是结合实践的,实践是检验真理的唯一标准,实践也是矫正你学习路线的一种方式。在项目实践中,会经常遇到一些现实性的问题,实践性的问题,而这些问题,可能会让你攻坚克难,你一旦把他们克服了,提升有可能是质的改变。这是自主学习不能相比的。


自学,往往都是一直在学,而不是在克服困难,学的时候,看别人讲,看书都觉得对,但是只有实践的时候,才知道你自己有没有掌握。而实践真正的项目,往往会遇到很多问题,解决问题才会让自己有质的飞跃。不仅让你学习了,而是也提高了自己的解决问题的能力。


尤其是编程这个行业,我感觉编程重要实践,所以在项目中历练比自己学提升的更快,更好。


非著名程序员


毋庸置疑的:会。

我自己在it行业已经混了十年,给你讲个真实的例子:我公司以前有个哈工大的研究生,在做行政工作的。觉得编程工资高,有前途,就自己自学java编程,据说自学了有2,3年。然后来公司的时候,技术总监面试摸了一下底:能干活,就是初级工程师的水平,在公司java开发水平属于垫底的。如果不是老板介绍来的,估计都没有面试机会。如果在公司上班的程序员,3年如果项目成长够快的话,都可以成为高级程序员了。

为什么会有这么大的区别?编程是一门实践科学,需要不断的去解决现实中的问题,才能不断获得成长。自学练手的项目做出来就好了,并没有什么实际的用户去使用,给你提各种奇葩的需求。实际项目给客户用之后会出现各种各样你想不到的问题,产品,客户,测试,项目经理,运维,甚至客服都会对你的项目产生各种影响。大厂的程序员的项目都是影响千万用户,甚至上亿用户体量,一点点细节没注意到,就是成千上万用户被影响。就像玩游戏一样,你一直在新手村砍些什么花花草草怪物升级,轻松经验少,别人已经在下大副本,过一次副本经验值够你刷新手村怪物好几个月。时间久了,差距自然就天壤之别了。

所以,要进步快就是准备个差不多,就赶紧去面家公司上班,去实际的项目中去锻炼成长,会比自己闭门造车效率高多了。


子安之路


本人是一个前端工程师。我的观点:自学比大厂在职成长更慢。


分析一下,github项目应该是指参与到开源项目的开发。这个我有一点发言权:我参与了harbor的一个较为独立功能的前端开发。

我学到了什么呢?PR的分支管理?前端代码的整体架构?还是说变量函数的命名规范?emmm....其实都有学到一点东西。学到最多的估计是熟悉了Angular的代码并进行开发,毕竟在此之前,我都是Vue阵营的。整体来说,开源项目和实际项目有一定的差距。而且开源项目的逻辑复杂度并不一定不会比实际项目高。就算harbor有多语言配置、各种组件高度抽象。

再一个非常现实的问题,如何参与到开源项目?我的经历估计没啥可复制性:我司后端在工作项目中用到了harbor,然后根据业务需求提出了新的特性反馈给社区,然后我参与到了其中。emm...开源项目经验也是来自于实际工作,就很现实。据我个人了解,开源经验一般是解决issue、完成feature、或者是在某个生态圈自己产出项目。这里面对开发者的要求也是一步步往上升。


leetcode我不是很熟悉,不过在类似的学习平台上也做过些算法题。工作中作用蛮大的,建议去刷,过程中要着重看下别人的思路,涨见识!


最后说下,我为什么认为大厂的在职员工成长更快。

1.同事间互相补充,沟通更方便。项目有需要用到的新框架,新组件。可以直接在群里发个消息,基本上会有人知道,然后可以很快上手,解决问题。比如我之前调研了xterm,实现了浏览器的shell功能。同事在其他项目里或新需求有用到,就不需要再去从头开始了解。比如我想把ts引到项目中来,有个同事之前在另外的项目实践过了。那我就可以少踩很多坑。


而一个人的话,碰到坑,基本只能去论坛、社区里求助;新知识需要一个人找资料、再去消化。当然,这样的获益会大一些,只是时间成本会大更多。


2.项目督促学习。每个deadline,需要我们有完成需求,或者有文档产出。举个例子:我接手的项目需要我去调研openShift的UI项目。迭代出调研报告。那我就得去好好看,我还得思考怎么和实际项目结合起来。

自己学习的话,说实话,这里是非常大的坑。很容易没有重点;或者说学到了东西,没有实践的机会,知识学到了也很容易遗忘。


ps: 工作的成长快,其实也有个大前提:不能只做一些重复的业务工作。


Humiliter


我自己在一线互联网行业也从业3年了,也是从小白一路走过来的,这个问题还得的从自己的现有实力出发来分析。

如果是新手:

推荐去大厂工作。新手什么概念呢,就是知道一些编程语法和熟悉一些编程框架,比如Java常用的SSM(Spring+SpringMvc+mybatis)等,没有太多的实际开发经验。对于新手来说,编程知识可能给不是他们最缺的,而是实战经验。因为很多实战经验是光靠学习基础知识、刷题是体验的不到的。虽然刷leetcode对程序员锻炼思维和算法能力有很大的重要性,但是在实际开发中用到的还是相对较少。另外就是做git项目,github上顶级项目基本都是根据实际业务场景研发的,脱离了业务场景这个顶级项目就没有灵魂了,对于一个新手来说,连业务场景都不清楚怎么能参与github顶级项目呢。参与github上的普通项目其实对自己成长和经验来说提升真不如去大厂工作来的快。而且在大厂可以多请教一些公司的大佬,会得到不错的成长。

如果有3-5年工作经验:

推荐先刷leetcode等然后再去大厂实践。这里3-5年的工作经验并不是仅仅指具体的3-5年工作经验的同学,实际上指的是有工作经验接触过不少业务场景,但是对一些技术原理、算法等并不是很了解,又想进一步提升自己的人群。这部分人群如果在公司继续做项目有成长但是不大,大部分工作都是基本的CRUD。所以想提升自己就要从底层、原理入手。这时候刷leetcode可以提升算法能力。同时可以参与一些在工作中实际应用过的github开源项目,如zookeeper等,这样不仅可以提升自己对技术原理的掌握,还增加了自己参与顶级开源项目的经历(这个对找工作来说很重要)。从底层原理提升自己后就可以去大厂实践下,看看大厂是如何将这些底层技术用到实际业务中去的。

总结:不能盲目的去说哪种方式提升更快,而是从自身具体情况出发。新手建议去大厂工作提升自己。有开发经验但是想提升自己对底层知识认知的同学,可以先刷leetcode算法、了解相关技术原理、参与一些gittub开源项目提升自己,然后在去大厂实践。


Java读书笔记


慢!而且这本身就是一种错误的学习方式!
自己学习编程和企业实际开发完全是两回事,自己学习永远固定在自己的思维当中,你并不了解企业开发中的技术是什么。

最近几年我在面试Java程序员的过程中发现一个严重的问题就是,刚毕业的学生和培训班出来的程序员严重与企业开发所要求的的人才脱节。这些人技术可能真的不错,Git开源项目也学习了很多,leetcod的题也刷了很多,但是唯一缺乏的就是对某一实际业务场景的思维理解能力,无法将学习到的技术融会贯通,在被问到某一个实际的业务场景中,面试者并不知道该使用什么技术去解决问题。就像我们学习了很多英语单词,但是当与老外对话的时候,我们常常忘记改使用什么单词与他沟通。

所以,长期自学编程并不是一件明智的策略,我的建议:

不管学习什么语言,只要掌握基础内容,就应该找一个公司去实习,从初级程序员做起。当你参与公司的项目中,你会发现你的技术会快速成长。在企业项目开发中,你才会学习到企业真正需要的技术,通过接触不同的项目,你才会有实际开发的经验,才能锻炼你的思维能力,才能锻炼你的团队协作能力。而自学编程这种封闭式学习模式,是最不可取的。


阿迈达聊技术


如何能够更快的成长,掌握更多的知识?

这里就涉及到学习方式的讨论了。

本人也是IT这行,因此说下我的个人看法总结:

成长的速度依次递增。

1.看书籍、博客等(通过阅读相关的专业书籍)。

2.看视频(买一些老师的课程来学习)。

3.写总结,写文章,记录到个人公众号中。

4.写项目。


可能大家在看书和看视频有分歧,因为看视频可能花的时间要比看书的时间话的长。我个人认为一个好的老师讲解相关知识可以让自己少走许多弯路,很多老师很好的思想观念可能你没想到,但是老师备课的时候肯定都有了解过,会在讲解的时候介绍到。

大家可视自身情况定。


写项目是最快的成长方式


题主也说了做git项目,但是自己做始终有限,比如并没有应用到实际的场景当中,没有让用户真正的使用。而企业的项目就不同了,都是经历过最真实的用户场景考验。实际中出现的问题要比自己做的项目出现的问题多的多。当你在解决问题的同时就是你成长的过程。


因此自学肯定没有在大厂参与过实际场景解决的程序员成长的快!


Coder编程


每天自学四个小时,刷网上的项目,也只能说可能会比那些混日子的在职程序员成长快一些;至于和大厂的在职程序员比(正常工作),我认为是赶不上的。


编程的实质是解决实际问题

  • 敲代码不是闭门造车,很多时候还是要结合业务场景来做开发;

  • 如果一个程序员开发一个需求,我认为需求分析和设计的时间应该占50-60%甚至更多,实际敲代码可能只有一小部分;

  • 网上的大部分项目,很少有复杂的业务场景的,这个对程序员分析问题、解决问题是没有任何帮助的;

  • 相当水平的两个程序员,放到不同的项目组中,一个项目高峰期一万个用户,一个项目高峰期一千万个用户,他们的成长速度肯定是不一样的;很多时候程序员都是被业务逼着成长的!

编码只是程序员的能力之一

虽然编码是程序员最重要的能力,可以算作程序员的核心竞争力,但是程序员的成长,单单提高编程水平是不够的:


  • 沟通能力:一个项目不可能完全由一个人负责,在开发过程中需要和需求人员(产品经理)、测试、运维、其他项目的开发人员做沟通;彼此说的话,对方是否可以充分理解,这都是非常重要的;

  • 架构设计的能力:程序员成长到一定程度的时候,肯定会参与架构设计方面的工作;通常这些架构设计,都是结合业务场景做的;(有一次提到了业务场景)

  • 管理能力:咱也不能当一辈子一线程序员不是,从带几个新人,到带一个项目,再到管理一条产品线,都需要管理经验的积累。

个人建议,不要辞职,在下班之后自学编程,同时骑驴找马,去找一份程序员的工作,并且不要挑公司的大小,尽量不要在乎工资得高低。

如果有公司原因招聘你,果断跳槽,然后工作中成长,同时保持下班后自学,再过几年,说不定题主可以找到一份大厂的工作。

我将持续分享Java开发、架构设计、程序员职业发展等方面的见解,希望能得到你的关注。


会点代码的大叔


首先需要明确一点,业务驱动的作用是自学给予不了的。业务会带给你对技术细节研究的深层次驱动力。

你通过文档学习技术,按照demo部署,然后跑通几个例子。这些太简单了。

比如你用k8s,但是你只会本地搭建,跑几个例子,用istio,跑几个例子。这个是没什么技术提升的。你需要深入到源码的世界里面,结合公司的业务,设计出适合的架构出来。这个的提升是指数级别的。

git项目是可以做的,国内很多大厂也在做,但是国内气氛没有国外好。你会遇到很多问题,时间成本是很高的。建议先成为大神,再去做github项目。这样github会给你一些想不到的东西。你会考量通用型,易用性,兼容性。而不是在公司只做一个适合当前业务的产品。

letcode是要刷的。基本功,但是你还要学习操作系统原理,编译原理,数据结构和算法,网络通信原理,等等基本原理。这样你的成长结构将是非常稳固的。以后所有来的新技术,对于有原理知识傍身的开发,都是很容易的。应用级是很简单的。理论深度上不来,你是不会走多远的。年龄变大的速度绝对超过了你这样操作的成长速度。


位加


1、Leetcode智能完成一些类似积木的基本程序,一般不会超过100行代码实现。而一个商业项目是成千上万行代码。比如搭积木,五层积木和千万层积木的基本原理是不同的。

2、编程是不仅仅是基于语言。打开电商平台,到处是《21天精通xxx》,这些只是基本的语法学习,而理解计算机程序的运行原理更重要,否则在学习的路上对很多概念只能是一知半解,走不了太远。计算机系统、 数据结构和算法、网络基础知识等等,对计算机系统的理解将会让程序员走的更远。

3、学以致用,融会贯通。Leetcode现有1000多题目,刷这些题目不如做一些简单的项目,比如网站博客系统,实际的人工智能识别项目等,更能激发学习的兴趣。


AI地球


先说答案,会比大厂在职程序员成长慢。至于为什么,且听我慢慢道来。

引子

我曾经是个武侠迷,也老是梦想成为一个武林高手,所以在大学的时候经常看传统武术相关的秘籍和武林故事。对的,这里的秘籍就是网上流传的各种什么铁砂掌、铁扫帚功,而武林故事都是什么某某人某某师爷发力打死几头牛的故事。

有一次,我看到这样一个故事。说的是民国时期,武林中各门各派都觉得要强国强种,于是决定举办武术大赛。有一对从深山老林中出来的师徒,在深山埋头苦练多练,武艺高深莫测,也来到此处参赛。比赛中师父让徒弟出战,徒弟觉得苦练多年,不说天下无敌,至少少有人匹敌。谁知上台,一个回合就被一个经常打野架的小混混打下擂台。师徒两人于是黯然离去。

原因分析

为什么苦练多年的武林高手却惨败于打野架的小混混?是因为实战!实战!实战!重要的事情说三遍。

编程同样如此。虽然leetcode刷题,做github项目也可以算是实践,但是它和在大厂做实际的项目还是有一定的区别的。下面,我们就来分析一下有哪些区别:

  • 大厂的项目多是直接需要盈利的产品,是实际场景下的产物。无论是leetcode刷题,还是自己做github项目,多是学习性质的或者说是玩票性质的。出发点可以简单认为是为了技术而技术,就是像上面故事中那对师徒一样,为了武术而练武术,缺少真实对战下的实践,即使练一辈子,也难在实际的工程环境下有非常好的表现。而在大厂则不一样。做每个项目、每个产品的时候,都会考虑到最终用户的体验,用户会不会认可,所以更能驱动技术上的成长。

  • 大厂做项目讲究的团队作战,除了码代码,还有沟通、组织能力等多方面的成长。天天刷leetcode能让你在算法上,编程熟练度上有一定的提升,但是仅仅在一个小的功能,或者是一个具体的算法本身。而在大厂,一个项目可能需要几十上百的人参与。在这个过程中涉及上同事之间的沟通协作,相互融合,这些方面的成长是无法用简单的刷题来解决的。

  • 三人行必有我师,大厂高手如云,培训更是丰富,更利于成长。一个人再能学习,再努力,其精力也是有限的。而在大厂中,高手如云,同时大厂一般都是比较鼓励分享的。在大厂中,只要你愿意学习,愿意听别人的分享,是能够很大程度上扩宽自己的知识面的,这一点也是刷题和github项目无法办到的。

总结

和大厂的实际环境项目,leetcode刷题和github项目不能更好的提供真实的工程场景,也无法锻炼到团队协作开发方面的能力,更无法更多的享有和其它同事交流的机会。因此,一般来说是会比大厂程序员成长慢的。


分享到:


相關文章: