先自我介绍以下,本人是一枚刚毕业不到两年的某一线城市的程序员,本科阶段专业是计算机科学与技术。从大四开始出去实习到现在的编码经验也有快2年半了,两年半的时间包括实习在内任职过有4家公司,包括一家互联网公司,两家基金公司,一家区块链公司,多多少少对程序员这个行业有了一些自己的认识,至少不像一开始连什么是框架都不知道。因为本人在大学期间一直忙着拯救世界,所以基本上没有怎么学过专业方面的内容。自己还记得当初要找工作实习都没人要的那种苦楚,我相信也有很多和我当时一样的人吧(大牛除外……)。于是自己想把自己入门这个行业学到的东西和一些技能点写下来,一方面给自己做个总结,另一方面也希望能够给一些朋友提供一些入门指引,尤其希望能够对那些准备入门程序员行业又没有头绪的人。(PS: 以下将是满满的干货)
先弄清楚从事这个行业可以做哪些岗位:
从事IT行业就都是编写代码的程序员吗?其实不是这样的。IT行业有很多职位可以选择,包括但不限于研发、测试、运维、产品经理、设计、算法、DBA……平时所说的程序员基本上都是指的研发岗位,这个岗位对技术的要求也是最高,而且加入同样毕业找工作实力相差不大的情况下研发的工资往往是最高的。不过,这些不同的岗位内部又有很多区分,下面我会挑一些介绍每个岗位的工作内容和内部一些基本的划分。
研发岗
研发岗的工作说白了就是写负责编写调试代码的,天天熬夜写代码指的就是这些人。这个岗位大体可以分为前端开发和后端开发,当然也有全栈(fullstack)开发、运维开发、Devops…
一个产品一般来说是分为前端部分和后端两部分,比如一个网页,前端部分就是和用户交互的部分,后端则是整个网页的后台逻辑和数据的组织方式,后端往往更加体现业务逻辑。(有些公司的一些项目往往把前端做的富丽堂皇后端却烂的一匹,这样比较容易骗到投资人的钱)
前端开发:前端开发又可以分好多种类,比如按照产品类型分可以分为web前端开发、app前端开发、桌面端前端开发;按照技术的不同又可以分为React开发,Vue开发……
后端开发:后端按照语言可以分为java开发、c++开发、python开发、node.js开发、Go开发……每种开发类型要求的开发语言不相同,一般做后端开发最好了解至少两门语言会比较好。其中国内大部分大公司用java的比较多,但Python和Go在最近几年开始流行起来。论述各个语言的差异不是本篇讨论的范围。当然,后端开发也可以分为ios开发,安卓开发等。
测试岗:
我就不用课本上的专业的话来论述这些岗位的作用了,做测试主要就是利用一些测试工具和框架对研发人员开发的软件进行测试,比如白盒黑盒测试之类的,说白了就是个研发找bug,也有一些公司会提供测试开发这个岗位。对测试人员的代码水平要求不高,以前带我的领导直接和我说你就把测试当成编程傻瓜就可以。测试基本上就是测出程序员的Bug,然后提交给程序员要他们改。这里有一片测试人员用的技术栈文章,贴出来分享给大家:
运维
运维人员和公司技术人员的划分在小公司不是很明显,在大公司可能就会分的很清晰了。运维一般做的工作就是当软件测试没毛病后负责把产品部署到生产环境上去给用户实际用。这里面就包括了自动化部署、服务器性能、网络吞吐、服务器压力监控、数据库性能、数据管理等一系列的工作,小公司有时候网线啊,网络啊,服务器啥的都是运维负责,甚至再小的一些公司这些工作会直接摊到研发的身上。不过做为研发人员,运维技术栈中很多还是对于研发来说也是要必须会的,比如Docker、nginx、git、tomcat、k8s……运维不多说,同样也分享一篇运维的技术栈,提供给对这个方向有兴趣的同学:
运维-技术栈 - 清风木 - 博客园www.cnblogs.com
需要一提的是,有些人认为开发测试运维在IT行业三足鼎立,这是最主要的三个职业了。三个职业又相互交叉,形成了包括测试开发、运维开发、运维测试、全栈开发等不同的岗位,每个岗位要求的技能树不相同。但是,随着技术的发展和公司业务的需要,对IT从业人员的技能要求也越来越多,fb甚至要求全部开发都是全栈开发。只能说程序员还是学无止境的。
产品经理、算法、实施……严格来说已经和IT相隔比较远,但也是计算机从业人员可以去做的工作,这里简单介绍以下:
产品经理:主要负责产品的设计和业务需求的对接,完全不需要代码基础都可以做,比较适合女生。一般都是给程序员提需求,给程序员安排活干,安排不好容易得罪程序员,哈哈,漂亮小姐姐除外~感觉产品经理还是比较牛逼的,想象张小龙,微信的设计者,哈哈。
算法:算法工程师,对这个职业我了解不多,但是对学历的要求比较高,很多公司都是要求博士学位去设计改进一些人工智能算法之类的,比如计算机图像识别,产品推荐算法啥的,工资很高。
实施:实施这个行业,我认识一些学编程学不进的一些同学去做这个职业,说白了就是产品售后,进公司以后教给你一些基本的软件使用方法和一些安装方法,技术要求很低很低。
DBA:DBA这个主要是管理数据库,对数据库原理和一些数据库软件比如Oracle,Mysql,Sqlserver要求比较多,基本不需要变成知识,不过了解一门比如python的脚本语言会比较好。
2. 对前后端开发人员所需要的技术栈有个大概的认识
首先,明确你的方向,你是想做一个后端开发还是前端开发or全栈开发。我现在分别介绍以下从事这几种开发作为一个小白所需的技术栈和学习路线。
首先介绍作为一个研发人员都建议掌握的一些基本内容
版本控制工具:git --用于协同管理代码和代码的历史记录
终端使用
基本的数据结构和算法
github使用
SSH
HTTP/HTTPS协议及其接口
设计模式
编码和常用加密解密原理
linux的使用
Json,XML等数据结构化工具
web前端开发
从事前端开发需要了解的技术如下:
网页基础知识:HTML语言,css,javascript,dom
js库:jquery
包管理工具:npm , yarn
css预编译:Less,SASS
css框架:Bootstrap
构建工具:webpack
前端框架:React,Angular,Vue
……
后端开发
从事后端开发所需要的技术如下:
选择一门语言:C C++ Java Python Node.js Go ……
熟悉一种数据库使用:Oracle,Mysql,Postgresql ……
选择对应语言的一个框架:比如Django(python),Node.js(Express.js),Java(SSM)
缓存工具:Redis
接口风格:Restful
通信协议:HTTP/WebSocket
消息队列:RabbitMQ
web server:Nginx,Apache、
容器:Docker
操作系统:进程/线程,多进程/多线程,同步/异步,并发/并行,进程间通信,锁,内存管理,I/O 相关知识……
其余的包括但不限于网络,编译原理,数据库,微服务架构,分布式存储等各种知识……
由于自己的经验有限,以上也就只是列出了一些涉及到前后端开发所需要的基本的知识,其中黑色粗体的内容是入门开发行业所必须的内容,而全栈开发的要求就是至少以上的这些内容都是需要有所了解和掌握的。当从事开发过程中,大家会有更多的内容需要去学习和掌握。
3. 我是一个小白,我该怎么从完全不会到找到一份开发的工作呢?
我想,很多想入门这个行业的新人都面临一个这样的问题,甚至是一些本科院校的专业学生,毕竟学校教的东西和工作的内容是不一样的。下面我就分别从非本专业学生和本专业学生两个角度来介绍一下入门的步骤:
我不是该专业:
如果你是一个非科班出身的从来没有接触过计算机方面知识的人,对于你们来说,转向计算机这个行业会稍微有点难度。不过要相信,只要功夫深,铁杵也能磨成针,什么工作只要不笨并且有一根好学的心,然后在一个行业里泡的时间够久,就总会有收获的。在学习之前,确保你的有一定的英语基础。
对于非科班人来说,由于可能没有科班学生那个时间和机会了解很多基础的知识,建议先从语言开始入手,选择一门语言然后跟着教学视频试着做出一个项目,能够让刚开始就产生成就感,有利于日后向外扩展学习。语言的话建议从简单点易于上手的语言比如python入手,最近几年python靠着人工智能的发展也风生水起,Python同时也由于它快速开发简单上手的特点深受一些公司的欢迎。并且市面上已经有了成体系的python教学资料,方便初学者学习和掌握。
这里,建议大家跟着一些学院的教学视频开始学起,教学视频不一定要去机构花几万块钱学习,大家完全可以去某宝上面搜相关视频,几块钱就搞定后,后面就下载下来慢慢看,推荐的学习路径是这样的(以Python为例):
Python在电脑的安装和对这门语言的基本认识,了解环境变量是怎么一回事
Python语言的基本认识和语法介绍吗,pip包管理工具使用
在IDE pycharm或者visual studio 上使用python写helloworld程序
Html、Css、js一些基本语法的学习,学会写一些简单的静态页面
数据库Mysql学习使用,了解数据库相关概念,知道数据库的增删改查
Django框架的使用,尝试跟着教学视频做出一个购物或者博客之类的网站,在这个过程中对框架有个大概的认识
在项目的开发过程中使用git做代码管理,学会使用github
学习项目在linux的部署,熟悉使用uwsgi工具,进程管理supervisord或者systemctl,nginx服务器部署
当完成了以上学习后,对于找到一份实习工作不是什么问题,当然,这些也只能算是一些简单的花拳绣腿罢了,如果想让面试官对你的技术和能力信服口服,尝试由一个点引出一个面,向周围更深的内容学习:
系统的学习操作系统,了解进程/线程,多进程/多线程,同步/异步,并发/并行,进程间通信,锁,内存管理,I/O 相关知识
系统的学习数据结构,了解队列(Queue),栈(Stack),数组(Array),数列(List),树(tree)等相关概念
系统的学习计算机网络:了解网络OSI七层参考模型,了解HTTP、TCP、UDP、ftp等相关概念
学习C语言这门高级语言中偏底层地语言可以帮助你了解其他语言的原理,并且了解向java面向对象和其他面向过程序言的区别
理解一些常用语言的内存分配原理
学会Docker的使用,学会使用一门web框架,比如React
学习数据库的性能优化原理和方法
……
技术的掌握往往是多多益善,只要你掌握的越多,就越能让面试官对你的技能有所肯定
我是本专业学生
如果你是计算机专业的学生,而且你发现在学校老师教的都是纯理论的东西,如果你还对这个行业不太了解,那么请认真看我想要说的话:
对于还在上学的学生来说,一定一定要记住,不要急着上来就搞个大新闻,觉得学校教的理论课没意思就不学了,或者认为那些东西难学就不学了,如果以后决定要走开发这条路,那么这些基础知识是必不可少的。学校中的专业课中《数据结构》《计算机操作系统》《计算机网络》《计算机体系结构》这几门课对你以后的发展很重要,这也是计算机专业考研要考的知识。一定要老老实实把这几门课学好,尤其是前三门。另外比较重要的一点是,在大学阶段,能早点出去实习就早点出去实习,因为往后你去百度等大厂实习,是一定要有项目的开发经验的。在平时学习专业课的闲下时间可以花时间去看看我对非专业人学习路线的介绍,可以学会试着去做出一个项目找份实习,这样学习与实践相结合,能够大大让你对这个行业有更深的认识。以后毕业了找工作,也更加会有主动权。这里再描述一些专业学生要学的路线:
学习C语言等高级语言中偏底层一点的语言(一般院校都是以C开始入门)
学习Java等高级语言和面向对象相关内容
学习《操作系统》、《网络》、《数据结构》、《组成原理》、《汇编原理》、《数据库》等相关知识
在以上的三个过程中,尽早地按照上面对非科班人员的路线同步学习,然后找份实习,在实习过程中可以认识一些大佬教你们一些开发领域相关知识,这对你以后是否从事开发工作和人生规划有很大帮助,也至少会拉不去实习不学习项目只是按照老师的规划学习的同学好几条街。
以上就是我对对这个行业还不太了解同时也想从事这个行业人的建议,以下我再免费分享一套Python的全套学习视频,想要的可以在评论区评论或者私信我,我把链接私信给你们。
另外再分享一套前端开发、后端开发和运维开发所需要的技术栈介绍,方便大家更明确未来的开发之路:
以上,如果觉得这篇文章对大家有帮助,请为我点赞,如果有问题,请大家积极为我指出,也欢迎有问题的同学私信我。