zoukankan      html  css  js  c++  java
  • 这8 项升职加薪的技能,90%程序员都没掌握!!!

    我是码农出身,工作十年,从 初级程序猿(半年) - 项目主力(一年) - 初级技术管理(一年) - 中级技术管理(两年) - 部门管理(两年) - 高层管理(三年) - 职业经理人,一条路走过来,关于升职加薪技能,有一些自己的心得可以分享。

    01、吃透一门编程语言

    这个技能看起来似乎没有必要强调,毕竟程序员不懂一种编程语言也说不过去啊。我之所以再次强调是怕你“贪心”,以为技多不压身就拼了命的学很多种编程语言。

    有个大二的学生就曾经问我:“你好呀,老哥,有个问题想咨询一下您,我专业学的是 C#,但听说以后不太好就业,所以就自学了一段时间 Python,但感觉越来越混乱了,您有什么好的建议吗?”

    我只能说不混乱才怪。编程语言虽然有相似的语法,但毕竟是不同的编程语言啊,之间还是有很多差异的。对于初级程序员来说,切勿贪多,先把一门编程语言吃透再说,等你有了融会贯通的本领,再去学新的编程语言也不迟。

    我刚刚查了一下(见下图),C# 还是挺热门的编程语言,没到不太好就业的地步,别随便听信别人的话,要学会自己去判断。Python 是门不错的编程语言,增长势头很猛,但远没到那种独霸天下的地步。

    学校有不尽人意的地方,但不至于蠢到让学生学一门已经被市场淘汰的编程语言。在这一点上,我宁愿站在支持学校的立场上,否则就太糟糕了。

    我承认,学霸学什么都快,不仅学的快,还比平常人学得好,学得多,因为他有一套自己的学习方法,但大部分学生并不具备这种条件。如果你对自己没有这种认知的话,很可能会陷入泥潭。

    因此,我给出的建议是,深入并且专注于一种编程语言,当你对使用这种编程语言充满信心时,再去学其他的编程语言也不迟。

    02、代码可读性好、功能正常没有明显bug。

    作为程序猿,最基本要求是:代码可读性好、功能正常没有明显bug。

    但我见过太多这行里的毛头小伙,数字常量到处埋,函数命名用拼音,if else 十层八层嵌套,匈牙利命名法和Linux命名法混杂,代码像挤在一张皱了的纸上,零注释或写完代码补注释,异常处理缺失,还有基本功能一用就崩溃,还辩解说,在我那里是好的呀。遇到这一类人,通常我在心里先给打个D等(ABCD),日后恐难以翻身。

    还有稍微进阶一点的毛病,说这个功能包我身上没问题,又或者一周之内绝对给你搞定,领导你放心。最后拿出来的代码不是错漏百出,就是规定时间根本完不成,而且到deadline前你询问他的时候才告诉你搞不定。。。项目组里有这样的人,要么得配一个给他擦屁股的,要么得配一个项目助理时刻监督他,换一句话说,他的贡献值其实为负。

    程序猿要想进阶,其实什么设计模式、架构、高深算法、莫测技术都不重要,这些都只是术,或者说套路。最核心的应该是,把简单的任务完成好,之后再完成更难一点的任务,这样你就慢慢进阶了。为了自己的承诺和项目组整体的进度,有的时候,你需要在保证质量的基础上,拼命加班,不负所托。

    再补充一点,可靠并不是说绝不出错,是人都会犯错。但你不能重复犯错,相同的错误出现两次,会严重影响别人对你的信心。

    03、算法与数据结构

    BATZ 等国内的一线名企,在招聘工程师的过程中,对算法和数据结构都会重点考察。但算法易学难精,我的很多读者技术能力不错,但面试时总败在算法这一关,拿不到好 Offer。更别提高薪了。

    面试官为什么爱问数据结构与算法,答案很简单:

    • 算法能力能够准确辨别一个程序员的技术功底是否扎实;
    • 算法能力是发掘程序员的学习能力与成长潜力的关键手段;
    • 算法能力能够协助判断程序员在面对新问题时,分析并解决问题的能力;
    • 算法能力是设计一个高性能系统、性能优化的必备基础。

    然而很多程序员界的小菜鸟,可谓是,从大量的 CRUD 业务中,练就了一身复制粘贴即可用的本领。

    因为大家不是都说:程序 = 复制 + 百度 吗,再高级一点的就是复制 + 谷歌喽。(我不禁想,难道科学^上网就高级了?)

    反正都是拿来主义嘛,代码能跑起来就完事,实在不行,删库跑路也很轻松呀 _。

    但是呢,迫于网上不断流出的 “35岁程序员危机” 话题,我不得不开始认真思考,我这马上奔三的大龄青年,离 35 岁还差多远呢 。

    再加上,身边大佬朋友都在说算法的重要性,看来,我真的需要重新考虑“程序”的定义了。看下边严肃版的官方定义。。。

    程序 = 算法 + 数据结构

    长期来看,大脑思考能力是一个人最重要的核心竞争力,而算法是为数不多的能够有效训练大脑思考能力的途径之一。有了这项能力,很多别的程序员解决起来很困难的编程问题在你这里就会迎刃而解。

    04、基本的数据库知识

    虽然软件开发人员更应该专注于程序设计而非编写和优化 SQL(应该交给专业的数据库管理员负责),但在我们国内,只有顶尖的企业才会有数据库专家。扎心了。如果你想要在软件开发这条道路上走得更高更远,懂一些基本的数据库知识是必须的,比如说:

    • 如何将业务中的对象属性转化为数据库字段;
    • 如何从数据库中检索数据,并将数据集拼接在一起;
    • 如何往数据库中插入、修改、删除数据;
    • 索引的数据结构及原理;
    • SQL 语句的优化;
    • 等等。

    如果再懂一些数据库分库分表的中间价,那你可能就会成为团队的宝贝了,毕竟所有的应用程序都要与数据库交互,另外,数据库是系统最先出现性能瓶颈的地方——总有你大展身手的时候。

    05、7大主流技术专题与移动架构师项目实战

    要想升职加薪,如何由初级工程师进阶成高级架构师,对于Android架构师职责的介绍,网上已经铺天盖地,就不再赘述。今天我主要给大家分享一下成为一名Android架构师应该掌握的技术能力。

    深度对接阿里P7高级工程师级别的主流技术体系,并且综合了目前的各大互联网公司如华为、抖音、OPPO、阿里等主流技术(即使你不想选择阿里,其它的大厂照样适合)

    主流技术专题&项目实战

    06、源代码管理工具

    记得我刚参加工作那会,用的源代码管理工具叫做 CVS(Concurrent Versions System),估计有不少读者没听说过,非常非常难用。后来迁移到 SVN(Subversion)后,情况总算是有了很大的改善,它不仅支持 Eclipse,还有专属的客户端,除了管理源代码,还可以管理许许多多的文档。

    每天上班的时候先从服务器获取最新的代码,然后开始一天的工作,下班走之前切记要提交一次代码,否则就很容易耽搁团队其他成员的开发进度。

    现在呢,有了 Git,它是一套开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理。它与 SVN 最大的不同之处,在于每个开发者的电脑上都会有一个本地仓库(Local Repository),即便是没有网络也一样可以提交版本,查看版本,以及比较版本;等到网络连接上之后,再提交到服务器端。

    源代码管理工具最大的好处就在于它可以帮助我们保留不同文件更改的历史记录,并且允许多个开发人员对同一文件的代码进行合并。举个例子来讲,小王完成了一项任务,然后提交了代码;但他觉得有待改进,于是他重新修改了代码并提交到了版本库,谁知道,程序上线后出了 bug,这时候源代码管理工具可以帮助他快速回滚到之前正常的版本。否则的话,小王只能被祭天了。

    07、测试

    测试真的是太重要了!但并不是所有的开发者都这样认为,竟然有团队成员不经测试就把代码提交到代码库,并且是会报错的那种,我天呐,遇到这种队友我也是醉了。

    在我回来之前,是在一家日企工作,测试是一项非常重要的工作,占用的时间比代码编写的时间多多了。从单元测试到集成测试,所有的测试结果都要整理成册,所有的边界条件都要测试到,哪怕你觉得完全没有必要。但正是这种一丝不苟的态度,成就了日企软件高质量的美誉。

    一个优秀的开发人员绝不允许他的代码在交给别人之前不经测试,我想这是不容置疑的。

    08、调试

    说句实在话,在我做程序员的这 10 年里,调试代码的时间比编写代码的时间要多得多。因为解决 bug 的难度要比创造 bug 难得多,首先你要先复现问题的场景(真的是难啊),要复现问题就需要你拥有出神入化的调试技巧,否则只能锤爆鼠标,然后大喊“为什么,为什么,为什么我的代码无法正常运行呢?”

    入门级的调试很简单,你只需要在发生问题的代码处打个断点,然后再跑一跑,就能从堆栈信息和代码的上下文中发现问题。难度再上升点的话,就需要你创造代码执行的条件;再难的话,你甚至需要内网穿透,比如说微信公众号开发;再再难的话,就不是一句半句能说得清楚了。

    总之呢,调试就是为了让你弄清楚代码不能正常运行的真正原因,如果你的调试技巧不过关的话,甚至有可能会被表象蒙骗,从错误的角度去修改 bug,从而引发更多、更大的问题。

    09、最后

    引用段落我们都知道,一个优秀的程序员是需要不断学习的,从初级程序员到高级程序员,从初级架构师到资深架构师,或者走向管理,从技术经理到技术总监,每个阶段都需要掌握不同的能力。

    引用段落早早确定自己的职业方向,才能在工作和能力提升中甩开同龄人

    题外话,我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

    我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在IT学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多程序员朋友无法获得正确的资料得到学习提升,故此将并将重要的Android进阶资料包括自定义view、性能优化、MVC与MVP与MVVM三大框架的区别、NDK技术、阿里面试题精编汇总、常见源码分析等录播视频免费分享出来。

    阿里P7级Android架构视频+BAT面试专题PDF+学习笔记

    需要的朋友,可以点击关注+转发+简信“学习”前往免费领取!

    希望我能够用我的力量帮助更多迷茫、困惑的朋友们,帮助大家在IT道路上学习和发展~真正实现升职加薪!

  • 相关阅读:
    js看懂funid与funname各自的作用以及回显示是怎么找到对应位置的
    居然脑海中还记得03年的瑞星升级ID号
    [恢]hdu 2186
    [恢]hdu 2109
    [恢]hdu 2140
    [恢]hdu 2160
    [恢]hdu 2101
    [恢]hdu 2162
    [恢]hdu 2201
    [恢]hdu 2163
  • 原文地址:https://www.cnblogs.com/Android-Alvin/p/12552758.html
Copyright © 2011-2022 走看看