珍爱网程序猿一枚,在互联网公司工作1年,怎么样才能让自己进步?先介绍下我在珍爱网工作经历
珍爱的技术是以java和php为主,近些年随着业务的发展,个别业务也开始使用c++。总提来说公司内的牛人还算比较多,加上之前十多年的积累,作为新人的我进去后确实还是学到不少东西。但是发展十年之久,同时也积累了不少技术债,例如老系统的技术框架过时、代码混乱、甚至是某个业务细节都已经没有人清楚等等等。新人进去后,基本都会被坑几次~~反正我被坑过~~
公司的技术氛围还是不错的,基本上每个程序员都保持了对技术那种求知若渴的精神,也会表达自己不同的见解。之前有次在项目中,因为一个带有嵌套子查询的sql的优化写法几个程序员竟然辩论了很久,后来较真还查了很多资料,最后发现其实两种写法其实都差不多的~~不过在辩论的过程中,对mysql的底层的了解倒是加深了不少,呵呵哒,也算是意外收获吧!
珍爱现在面临一个比较紧迫的问题就是解决"人民群众日益增长的物质文化的需要同落后的社会生产力之间的矛盾"。一方面,公司的业务发展的是很快的,另一方面,公司现有的技术体系还不够完善,从底层的DB到整个技术架构,都还是有很长的路要走。而一路走下来,对于开发人员的技能方面的提升倒还是挺大的。参考这几年互联网的飞速发展对整个互联网行业的技术发展的促进作用,正如我们老大所说:"对我们技术人员来说,我们现在经历的事情,是以后我们再想经历也不会再有机会的事情"。
本人作为一个只懂java基础和SSH框架基本使用的应届生小白,刚进去的时候,连基本的mysql master/slave都没有亲自实践过,到现在从接地气点的shell编程到高大上的hadoop,Spark等都能基本hold住,所以个人感觉,这一年的经历,对于个人而言可以说是脱胎换骨的一年。当然,毕竟由于环境的局限性,看到的和感受到的也会有一定的局限性。这样的自我评价,纵使是没有夜郎自大的嫌疑,也会有坐井观天的可能性。所以想问问大家在互联网公司都是怎么发展的,成长速度怎么样,不妨一起来交流一下。
回复内容:
我不是程序员,但在互联网企业工作多年,以下是在网络上总结的几个建议:1. 小范围的选择一些有用技术,透彻的学习它们,拥抱它们。然后不断的扩展这个范围。
2. 理解各种数据结构的优点和缺点,包括它们在内存中和在硬盘上的各自表现。
3. 理解各种算法的优点和缺点。
4. 了解你的工作领域。关上电脑,去做你的用户们在做的事。
5. 有准备,有愿望,有能力在任何时候投入到多种技术层面中。你必须知道表象下的技术原理。在“各个技术层面的掌握程度”和“编程能力”上有着密切的联系。
6. 发挥你的想象力。永远都要问,“有更好的方法吗?”跳出常规思维约束。最好的解决方案也许还没有被发现。
7. 优秀程序员:我优化代码。更优秀程序员:我设计数据。最优秀程序员:他们的不同之处是什么?
8. 正确的构造你的数据。任何的缺陷都将造成你的代码里无尽的技术债务。
9. 正确的命名事物。使用“动词-形容词-名词”格式来命名程序和函数。变量名要足够长,尽量短,有意义。如果其他程序员不能够理解你的代码,说明你写的不够清楚。在大多数情况下,针对下一个程序员而编码要比针对环境而编码重要的多。
10. 把分析和编程分离开做。它们不是同类的事物,需要不同类型的劳力资源,需要在完全不同的时间和地点分开做。如果同时做它们,你一样都做不好。(我喜欢在一天的末尾做不涉及技术的分析,而在第二天早上进行编程。)
11. 永远不要图省事走近道。永远不要把相同的代码部署两次。永远不要把一个变量命名成另一个变量名的一部分。也许你不明白这些规则,也许你要辩解。但如果你是遵守着这样做的,这些规则就会约束你正确的构造你的程序。图省事的做法是让那些低等级的程序员永远停留在低等级的原因。
12. 学习如何测评程序性能。你会惊奇的发现从中能学到很多之外的知识。
13. 学会区别对待问题细节和问题后果。问题细节不会导致太大的差别,而问题后果能导致世界灭亡。只关注后果。
14. 密切关注你的用户/客户/管理人员。帮助他们认清楚他们的“what”,这比帮助他们明白他们的“how”要重要的多。
15. 写一个框架,不论你是否打算用它。你将从中学到从其它途径中学不到的东西。
16. 把你知道的东西教给他人——通过口口交流或通过写作。最终这将成为教育自己的机会。
17. 永远要对你的客户/用户说“Yes”,即使在你不确定的情况下。90%的情况下,你会最终找到方法实现它。10%的机会,你将会去向他们道歉。这是重要的个人成长中付出的一点小代价。
18. 寻找别人的做出神奇的事情但却一滩糊涂的代码。重构它。然后丢掉它,并发誓自己永远不要犯他们犯下的相同错误。(这样的程序你会发现很多。)
19. 数据永远 > 理论或观点。通过开发东西来学习数据。
20. 有可能的话,开创自己的业务(服务或产品)。你将从中学到很多你做雇员永远学不到的关于编程的知识。 歪个楼,珍爱网的程序都是单身吗?内部有木有什么相亲福利啊^_^ 下面的几点建议对程序员提高自身的技术和今后的职业发展都能提供很大的帮助,关键就看你的执行力了。
1、提高文档编写能力
误区:认为编好程序,完成任务,即是好的程序员,无须文档;
缺乏文档,对软件开发是致命的,一方面是软件无追溯能力,无法找到软件开发的起源,思想;另一方面,则是为后续软件查错,软件升级带来麻烦。作为早期的程序员,技术文档占用的工作时间应该为30%,而高级程序员、系统架构师等则需更多的时间。一般的软件文档要求,本篇不多说,可以回顾入职前手头上的软件文档要求和样式。
2、养成好的编码规范和编码习惯
作为一些国外知名软件公司,如微软、IBM、甲骨文等,都会对程序员开发的程序进行代码要求,代码的变量名要规范,关键代码段需要注释,注释格式统一,甚至嵌套中行缩进的长度和函数间的空行数字有明确的要求。
中国程序员,一般常会出现,全局变量滥用,注释语言表达不到位,变量名采用拼音等,虽不影响开发,但却影响了后续代码交接和分享工作。
3、提高对软件需求的理解
误区:入门的程序员一般不会对项目的需求进行刨根问底的分析和询问需求人员,拿到文档,即开始进行开发;在B/S架构中,更经常出现前台需求与后台衔接的问题;
因此,在做需求的时候,我们应该做到,了解需求的详细要求,力争到位;加强沟通,了解需求深层次内容,特别是功能点要达到什么要求,怎么使用系统才觉得舒服。对需求的把握不能从感性角度理解,必须多和工作伙伴进行碰撞,才算是真正把握需求——经验。真正的需求把握得恰到好处,所需的是2-3年的时间。
4、复用性和模块化思想
每个程序员在开发一个功能模块或函数的时候,应该多思考,不要局限在完成当前任务的简单思路上,思考一下,该设计的模块能否脱离这个系统存在,是否能够通过最简单的修改方式在其他系统或应用环境直接引用。
通过这两年中的实践与观察,发现我们团队一些同事在起步阶段,经常经历代码重写的事情,是很没有必要的,一方面自己思想需重新确立,另一方面是浪费了提升代码质量的时间去做重构的事情。
5、锻炼自己的测试能力
软件研发一直以来有个好传统,软件开发过程中问题发现的越早,解决的代价就越低。测试工作实际上也不麻烦,一是做正常调用的测试,看软件的基本功能能否实现,这也是许多公司常见的,也是唯一的测试,但强调,这是错误的!二是异常调用的测试,例如在B/S体系下常用的压力测试、破坏性测试、频发异常请求处理测试等,只有全方位的掌握好测试办法,才能提高软件开发的质量。
6、问题是最好的学习机会
工作就是不断发现问题、分析问题、最终解决问题的过程,晋升之门将永远为那些随时解决问题的人敞开着。可见,工作过程中有问题是正常,没有问题才是真正的问题。在发生问题时,能勇于面对问题、解决问题的人,才是公司真正的骨干。
现实中,很多人总是千方百计回避问题。当上司安排一项艰巨的任务时,也想尽办法推托。殊不知,对于个人而言,问题其实是最好的学习机会。往往那些愿意接受困难工作的人,能力会越来越强,那就是因为他们在克服困难的过程中取得了巨大的进步。
真的程序员,敢于直面惨淡的人生和淋漓的鲜血,一定能够在荒草满布的岁月荒原里踏出一条自己的路来。
其实别人说的话,听一听就算了,决定还得自己来做。面对别人的怀疑、否定、讥讽,我们只需要坚定地前行,做给他看。行动是最好的证明,多坚持一秒,未来就会不同。
现在就实打实的来看看程序员的价值之路在何方。一、应用技术
相当大一部分的程序员都在做应用层面的开发,所做的软件用来解决特定场景的问题,给用户的工作和生活带来方便。
开发一个应用,经常会用到高级语言和框架,比如 C# 和 .NET ,比如 C++ 和 Qt ,比如 J2EE ,比如 Ruby on Rails ,比如 Python 和 Django ,比如 Java 和 Android ,比如 Objective-C 和 Cocoa Touch,比如 Java, PHP……太多了,数不胜数。
应用层面的开发技术,很多人觉得门槛低,小年轻和富有经验的老资格差别不大,后浪会把前浪拍死在沙滩上,所以当新一茬韭菜长成时,老一茬就得玩完了。
其实不是的,即便从纯技术的角度来讲,你对一个语言和框架的理解与把握程度,也会严重的影响开发效率和产品质量。
什么样的人会被轻易替代?不求甚解,似懂非懂,干了多少年还看不透所用技术的本质,遇到问题仍然懵懂不解茫然无措,这样的程序员,注定很快被一大波正在赶来的小鲜肉挤下工作岗位。
假如你对一门语言的各种特性都体察入微了悟于心,假如你对一个框架的机理和各种应用场景都有独特的理解和丰富的实践经验,那你几乎是不可替代的,你已经成了这个语言和框架方面的专家,价值不可估量。
你的一句话就可能为一个项目节省几个月的时间,别人一筹莫展的问题到了你这里分分钟就搞定。
所以,不要理会“能 Run就行”、“完成任务就可以了”、“用不到学那么深干什么”之类的话,在你用完一项技术解决了一个实际问题满足了某个需求之后,继续钻进去吧,多学一点,深入一点,日积月累,你必然会与众不同。
上班时没时间,那就下班了继续投入。记住,你的学习和研究都是为了自己,不是为了老板,不是为了项目,你唯一的产品就是你自己,而这个产品值得一辈子打磨。
二、高难技术
有一些技术,门槛是相对较高的,比如汇编语言,比如操作系统内核,比如驱动……正因为门槛高,回报也高。
比如你熟悉Windows内核或Android内核,能够熟练撰写各种驱动,那找个月薪五六十K的工作不成问题,百八十K都不在话下。惟其稀缺,所以保值。
三、算法
大部分程序员其实不懂算法,都是用框架里的模块拼积木。如果你妙悟算法真谛,那你就超越了90%的程序员了,你的重要性和价值将不可估量。
比如你精通图像处理算法,比如你精通视频编解码算法,比如你精通搜索推荐相关的算法,比如你在模式识别领域有建树……试看谁能挡得住你前进的脚步!
四、业务
在一个行业内持续积累,对业务的理解到位,积累深厚,你的价值是巨大的。不信你去浏览招聘网站上的岗位需求,99%都要求相关行业背景。
所以,选择一个靠谱的、前景好的行业非常重要,只要这个行业能够不断发展、前进,你的积累就是有价值的,你自己就是不断增值的。
特定领域的业务有一定门槛,比如金融,比如电力,比如电商,比如彩票,比如考古,比如医疗……在这些行业里,你是个业务门儿清的程序员,即便技术不是特别优秀,那也是价值无限的。
五、产品意识与思维
究竟什么是产品意识呢?我认为产品意识一般包含商业意识、用户意识、创新意识和团队意识。
——《人人都是产品经理》
互联网时代,产品为王。有产品意识,懂产品思维的程序员,是最受欢迎的人群,也是最能做出好产品的程序员。
商业意识通俗地讲,就是要思考这个产品能不能卖出去,好不好卖。这个一定是要有的,程序员虽然很少直接接触市场。
但是一个产品成功与否,多数时候就是看市场表现,如果你能关注市场,从市场的角度来看待技术实现,接纳“技术为市场服务”的理念,那你更容易把产品做好。
用户意识是最容易理解的,它是说我们要从用户的角度来思考这个产品该如何设计,因为产品好不好用最终由用户说了算。
如果你在实现产品时也能站在用户的角度来思考,斤斤计较一个功能是否符合应用场景、是否与用户的行为特点吻合、是否贴合用户的使用习惯,那恭喜你,你超越了90%的程序员——大部分程序员是按产品经理和UI设计师的要求来实现产品。
创新是人类发展的源泉,是社会进步的动力,同样也是产品的核心竞争力。但这里所说的创新不一定是那种颠覆性的创新,也许是把众多不被重视的细节做到更好,也许只是把另外一种理念引入到这个产品中去,也许是像海底捞的员工一样给用户不一样的感受,这些都是创新。
创新意识是产品经理必须有的,否则,他永远不会有进步,产品永远也做不好。
创新意识也是优秀的程序员必须要有的,否则他就不能把一个产品实现得很好,不能把产品的核心竞争力演绎到极致。
当下已不再是孤胆英雄单兵作战的年代,我们要想做好一个产品,多数时候都需要一个团队。
团队意识是必不可少的,你是和一帮程序员在一起,你还和产品经理、UI设计师、业务分析师、项目经理等等在一起,如果你能融入团队,并且能影响、促进其他人为共同的目标做出有效的努力,那么,你这样的程序员,是无敌的,是国之瑰宝!
说了这么多,究竟你适合在哪个方向下功夫,还需要你自己来做决断。
你可能一看便知自己适合做什么,那无需赘言。也可能你有些茫然,不要担心,我们都还有大把的时间,你可以去试着去做,发现不合适了换个方向再来,直到踏上适合你的路。
珍爱网这种大公司各方面都是很正规的,只要坚持努力就一定会有出头之日的 同为互联网程序猿一枚,从业不到一年,未来发展自己也整理了下,楼主这个问题对我很有帮助,以后我也是要开始在互联网海洋遨游,慢慢认识大牛,同时一个好的平台和团队也是非常重要的 做编程要整天对着电脑,不过适应了就好,我认为这类工作,还是很有前途的。 我现在刚刚踏入这个行业,感觉要学的东西真多,未来会遇到很多困难,我想我不会在困难面前止步,让我们共勉,希望以后多多交流学习 我觉得除了公司安排得工作,自己私底下也要努力学习,编程主要是多编多练吧,编多了自然就熟悉了。 其实要进步就要时常的学习,特别是程序猿这个,学习是必须的,因为这块技术更新快,逼得你必须学习来掌握新的技术。