首先你得会一门编程语言,比如C、Java、Python、PHP等等,但是语言本身还是差得很远。你要学这门语言的类库,学了类库,还要学框架。spring、struts、hibernate、mybatis各有所长。做前端的同学就不用多说了,html/javascript/css,再加上一大堆前端框架Angular,React,Vue,你也要学一样。只有学会了框架,才能开始做项目,找到工作,开启增删改查的光荣之旅。但这还远远不够。上面提到的知识只能算是一个介绍。数据结构和算法一定要学,不然你写的代码永远比不上隔壁张大发。同样的需求,他的代码顺眼,你的代码乱七八糟,会被领导批评。所以《算法》、《大话数据结构》、?、《算法导论》……都来吧,数组、栈、队列、二叉树、图、排序、搜索保证不会把你淹没。和大家聊天的时候一定要能说出几种常见的设计模式,尤其是单例模式的写法,不然出门都不好意思打招呼。做个分配任务的初级coder肯定不行,所以一定要学面向对象的分析设计,不然以后领导委以重任,让你做分析设计,你怎么分模块和服务,如何设计接口?基于什么原则和指导方针?软件开发流程和最佳实践很快就会成为coder的必备,敏捷开发、DevOps、单元测试、持续继承、TDD、结对编程……,必须跟进。作为程序员的自我修养,计算机基础知识也是必不可少的。计算机的组成原理,冯·诺依曼结构一定要懂,要不然整天写程序都不知道计算机是怎么工作的,会被人笑话;如果你想更深入,你需要了解一点数字电路和组装。因为总有一份汇编在某个阴暗的角落等着你。您必须学习数据库、基本SQL和表设计。范式、锁和隔离级别是一个很头疼的问题。再深一点还涉及到调优。架构层面,分库分表,备份,读写分离,你得懂。仅有关系数据库是不够的。NoSQL在互联网时代很流行,在工作中很有可能会用到。不起作用。缓存跑不掉,memcached,redis已经是工作必备了。现在不联网的程序几乎绝迹了,所以计算机网络一定要学,至少要了解http、https、socket、tcp是怎么工作的,还有RSA、Hash、https衍生出来的证书也要知道是怎么回事.安全其实是一个很大的话题,比如XSS、CSRF、SQL注入……应该成为Web编程中必须要考虑的东西。操作系统也要学,让你懂进程/线程,它们之间的通信和同步,还有同步/异步,阻塞/非阻塞,select/epoll等等听起来很时髦的东西。对于虚拟内存和文件系统,你要了解一个大概的概念。另外,linux的基本命令肯定能打出一些,如果能用vi就更好了。深入了解Java虚拟机,如果不了解虚拟机是如何工作的,对于系统中的一些问题,你真的搞不定。还有Tomcat,Ngnix....一时研究不透。你可能还会听到有人说:离散数学很重要,它是计算机科学的基础!那就去看看吧,除了布尔运算,其他的等价关系,偏序,***演算,谓词演算,Group,grid……完全把人搞糊涂了。这些基础知识还没搞定,什么云计算、大数据、微服务、容器又开始叫嚣了,你不想了解一下吗?你不怕落后吗?码农好难过,在各种新技术的带动下不断前行,但另一方面,如果你对软件编程感兴趣,你又会好开心。新玩具不断出现,你不能玩它们。所以如果你想在这个充满挑战的行业中保持竞争力,那就继续学习吧。【本文为专栏作家“刘欣”原创稿件,转载请通过作者微信公众号coderising获得授权】点此查看该作者更多好文
