写代码不严谨,就不适合当程序员吗?

#我适合不适合做程序员?

知乎有个热榜问题:有个准程序员提问觉得自己学编程有一段时间了,但是经常被人吐槽编程不够严谨,比如写个计算器没有考虑用户输入特殊字符或者没有考虑到用户输入使用了错误的数据类型导致了溢出异常,感觉自己很菜,觉得是不是不适合做程序员了。相信很多新手程序员都会在经历过一段时间的编程学习之后会问自己一个问题,我难道不适合学编程吗?

新手为什么会问这个问题

其实新手程序员问这种问题本质原因还是对自己的能力产生了怀疑,因为水平和知识面不足导致在实际编码过程中到处碰壁,比如一个复杂的逻辑没有想明白,或者一个BUG 始终找不到问题所在,从而失去了继续学习的信心。今天就和大家一起讨论下一个新手程序员经常会遇到的问题以及如何去对自己的职业生涯做一个规划。

如何评估自己适合不适合做程序员

首先,我们讨论下适合不适合做程序员这个问题

先从我身边的几个个案例来说吧!我一个朋友小磊,本科大学是化学专业,毕业后由于本专业工作不是很好找工作,听说搞 IT 的待遇好,薪水高,于是转行学习了 Java 编程,参加了培训班学习,在此之前,他没有任何计算机专业背景,连个 office 套件都不是很会用,windows 系统也使用的不是很熟练。就是这样一位计算机小白,就因为人云亦云的认为这行待遇好就进入到了这个行业,可是事实上他还是在学习编程不到一个月后就跟我聊天说他学不下去了,编程这玩意太难了,老师布置的作业他根本就没思路,连个简单的 Java 程序都不会编写,比如老师给他布置个作业要求他用 Java 实现一个纯console 模式下的学籍管理系统,对于编程之外的一些基本计算机概念他更是完全不懂,比如什么是堆栈、Linux 系统的使用(因为他们的学习环境都是在 Linux 操作系统下进行编码),于是他发出了和很多新手程序员一样的问题”我是谁, 我在哪里?我为什么会学编程,这玩意这么难,我是不是不适合干这个?”,我这位朋友发出了这样一连串的问题之后,觉得这一行的饭并不是那么好吃,经过一番尝试之后,他觉得自己不适合干这个,于是中途退出,后来听说是回家做了水产品生意(卖小龙虾之类的),干的也还不错。平均一年也有个几十万。

我另一个朋友和上面这位背景很相似,大专大学英语专业,男,毕业后觉得只会英语出去找工作没什么优势,他平时自己也是一个电脑爱好者, 虽然不专业,但是大学期间自己攒配件组装电脑,对于各种硬件知识有一定了解,但是不深入,平时爱倒腾各种软件和操作系统,对于Linux 系统的使用也有一定了解,会一些基本的命令使用,应该说是有一定计算机基础。但是他之前也并未接触过编程。毕业后他就参加了一段时间培训,可能他对这方面也有些天赋,老师上课教的基础知识他都能很快掌握并消化,并且业余时间他也不断去看书并实践,在不停的学习、消化、实践中,他的编程水平提升很快,虽然有时候他也会为一个逻辑没理顺而抓耳挠腮,但是他并没有被问题难道,而是不断去想解决问题的方案。遇到不会的就去查资料,由于其英文水平还不错,对于一些资料他都是先看英文文档,实在不会就去各种技术论坛去请教别人,就这样经过两年的摸爬滚打,他的技术水平已经提升的非常快,从一个初级工程师,薪水只有 3000 块提升到了高级工程师,薪水15000。

相信各位在看了上面这这两个案例之后,心里应该有了答案了,三百六十行,行行出状元,适合自己才是最重要的,如果你也在学习编程,希望成为一名程序员,也遇到了和知乎这位同学一样的困惑,对自己的职业发展产生了怀疑,开始问自己适合不适合干这行了,不妨问问自己几个问题:

  • 我喜欢这个行业吗?
  • 我有对即将从事的这行所需要的能力有进行过了解和评估吗?例如需要掌握哪些技能才能入行,我当前的能力是否达到了入行的能力,如果没有,我缺什么?该怎么去做才能提升能力。
  • 我愿意投入很多的时间和精力去钻研学习所需的技术吗?

如果以上问题的答案在你心里都是肯定的,那么你只要方法运用得当加上自身坚持不懈的努力,我相信肯定会在一段时间内有很大的提升和进步,而反之我则建议你尽快在年轻的时候多去尝试下其他行业,哪怕你已经投入了一段时间去学习,但是这至少可以及时止损。

如何成为一名合格的程序员

那么这里作为一名在这个行业摸爬滚打多年的老鸟,我给各位分享一些我自己的经验,希望可以帮助那些新手们少走弯路,快速成长,但是我这里要说明一点,这些建议的基础是你上面的几个问题都是肯定的前提之下,你这么做是会给你的技术提升带来一些帮助的。

首先,要理论加实践结合,缺一不可,尤其是对于一些基础差的朋友在入行不久肯定会遇到一些知识点难以攻克,尤其是一些转行的零基础朋友,只是会一些培训班教的编程基础知识或自己买的编程类书籍或网上找的视频教程一个人一遍一遍的看,但是就是不会写。这类朋友我建议你看完视频或书之后一定要多花时间去练习,光看不练假把式。仅仅是看视频和书籍你是看不会的,必须要练习,其实计算机的一些专业相比较其他行业的门槛是很低的,一台电脑你就可以去学了。理论知识的学习很重要,但是实践同样非常重要。

新手程序员一定不要看中当前那点微薄的薪水,一开始入行,只要工资能够应付你的生活开支就可以了,给你开 3000 的工资和 6000 的工资其实并没有太大的区别。以杭州为例,平均房价三万多,你就想想你拿这么点工资你能在这个城市买房立足吗?如果不能,你最应该做的事情是持续不断的学习,而不是在乎这一星半点的工资,然后找一个能够给你机会提升能力的平台,投入更多的精力去巩固你的基础,把基础打牢固了。

其次,要勤能补拙,不停的学习,正所谓熟能生巧,另外程序员这个岗位所需要的知识并不仅仅是你会写代码就可以了,也并不是”一招鲜吃遍天“,他的专业性是非常强的,并且软件迭代更新非常快,如果你仅仅是会一门编程语言的语法使用,你是永远也不会成为一名优秀的程序员的,我身边的很多开发同事经常会在好几种不同的编程语言之前来回切换使用,有的项目用 Python语言,有的项目使用 go语言,有的项目使用 Java,尤其是不要认为某某语言是世界上最好的语言,例如”PHP 是世界上最好的语言”,那就完蛋了。不同的编程语言其应用的业务场景是不一样的,各有各的优势和劣势。千万不要陷入语言的门户之争。而应该把宝贵的时间和精力用在提升自己的岗位专业能力的学习上去,比如操作系统原理、算法、网络协议、数据结构等等这些基础学科的学习,因为只是会编程是写不出来什么好程序的,好的程序是由好的算法+好的数据结构而成的。基础知识一定要打扎实了。数据结构和算法以及网络协议并非是工作中你会用到,在面试过程中作为一名程序员这些也是逃不掉的必问题目。

再次,仅仅是会上面这些,其实你还不能成为一名合格的程序员,因为在实际的项目里面,除了要会写业务逻辑,你还得和各种中间件打交道,比如数据库、web 服务器等等软件打交道,有时候可能系统出问题了,还需要你去排查定位问题,并提出优化改进的建议。这些软件可能又是一个知识体系了,你值得花精力去学习,但是不一定每一样都要学的非常精通,但是也并不是仅仅停留在会简单的使用这些软件,比如数据库,不要仅仅停留在会增删改查这种最基础的操作上。数据库的优化、数据库的原理值得你花精力去学习,这样在以后的系统设计中,你就知道如何去优化你的SQL 语句提升性能,对于一些查询慢的问题如何去定位是程序问题还是数据库的问题以及该如何优化。

推荐多阅读一些优秀的开源软件的源码,读别人的源码,看看优秀的程序员是怎么写代码的,他们为什么要这么实现。

最后,程序员要培养系统化学习的能力,要拒绝碎片化学习。互联网时代很多知识都是碎片化的,其实碎片化学习并不能有效提升你的能力,你应该做的是系统化的把某一个知识点和技术啃掉,这样你在设计一些系统的时候才能把要考虑的问题想全面些,另外对于一些新技术最好的学习方式是去看它的官方文档的相关说明,而不是去各种博客搜答案,这些二手知识首先并不一定适合你,其次这些二手知识太零乱了,如果官方文档确实找不到答案,你可以再去尝试下搜一搜或者去各种论坛去提问。

如何成为一名精进的优秀程序员

到此为止相信如果你照着上面的方法去不断学习和实践,并且真正的掌握了所需要知识点。你的水平可以算是中级程序员了,那么接下来你需要做的就是针对某一个方向花更多的精力和时间去钻研,使自己成为这个方向的专家,最好是你自己正在做的技术方向,把自己培养成为业内翘楚,要把自己的能力提升到在核心岗位没你不行,但是你走了之后哪怕不投简历也会有其他大公司高薪挖你的地步,总结一句话就是要让自己的能力不可被替代。只有当你的能力不可被替代。

怎么做到呢?这里给一些建议,例如:

  • 成为某一个领域的专家,并参到该领域一些些优秀开源项目中,贡献自己的代码。例如你是做容器开发的,那么 kubernetes 和 docker 项目值得你去参与进去。
  • 多参与一些该领域的技术论坛,分享自己的经验,让人多的人认识你,了解你正在做的事情,把自己的知名度打出去另外也可以提升自己的演讲能力。
  • 如果有机会,千万不要仅仅局限于写业务逻辑,如果有往管理方向发展的机会,一定不要错过,当你成为一名技术管理者之后,你看问题和思考一个系统架构设计等等方面的问题时眼界会开阔很多。
  • 成为一名终身学习者,这个世界每天都在发生着巨大的变化,你不学习,就会被淘汰,尤其是年轻的时候,一定要不断的学习,避免人到中年,成为一名高龄低能的程序员。
  • 记得要劳逸结合,多锻炼身体,编程这件事其实很辛苦,熬夜加班,996 都是常态。所以身体是革命的本钱,千万不要把自己的身体搞垮了。这一行经常会发生猝死案例,其本质都是因为久坐不运动导致的身体出现各种毛病。

好了,以上就是我给大家的一些建议,希望各位能够成为一名优秀的程序员。