零基础小白入门IT开发指南
先自我介绍以下,本人是一枚刚毕业不到两年的某一线城市的程序员,本科阶段专业是计算机科学与技术。从大四开始出去实习到现在的编码经验也有快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的全套学习视频,想要的可以在评论区评论或者私信我,我把链接私信给你们。
另外再分享一套前端开发、后端开发和运维开发所需要的技术栈介绍,方便大家更明确未来的开发之路:
以上,如果觉得这篇文章对大家有帮助,请为我点赞,如果有问题,请大家积极为我指出,也欢迎有问题的同学私信我。
零基础小白入门IT开发指南的更多相关文章
- Python 的映射数据类型有哪些?零基础小白入门学习必看
1 映射类关系 Python 的 collections.abc 模块内拥有 Mapping 和 MutableMapping 这两个抽象基类,它们为 dict 和其他类似的类型提供了接口定义. mu ...
- IM开发者的零基础通信技术入门(二):通信交换技术的百年发展史(下)
1.系列文章引言 1.1 适合谁来阅读? 本系列文章尽量使用最浅显易懂的文字.图片来组织内容,力求通信技术零基础的人群也能看懂.但个人建议,至少稍微了解过网络通信方面的知识后再看,会更有收获.如果您大 ...
- 序言 - PHP零基础快速入门
我为什么要写<PHP零基础快速入门>? 原因: PHP 真心简单,适合零基础的人快速入门掌握,身边的人学习一两周上手开发的比比皆是: 市面上的文章或书籍对初学者并不友好,多半枯燥乏味,我相 ...
- 零基础快速入门web学习路线(含视频教程)
下面小编专门为广大web学习爱好者汇总了一条完整的自学线路:零基础快速入门web学习路线(含视频教程)(绝对纯干货)适合初学者的最新WEB前端学习路线汇总! 在当下来说web前端开发工程师可谓是高福利 ...
- C#消息队列(RabbitMQ)零基础从入门到实战演练
一.课程介绍 如果您从工作中之听过但未有接触过消息对队列(MQ),如果你接触过一点关于MQ的知识,如果没有这么的多如果的话......,那么阿笨将通过本次<C#消息队列零基础从入门到实战演练&g ...
- 零基础快速入门SpringBoot2.0 (一)
零基础快速入门SpringBoot2.0 (一) 一.SpringBoot2.x依赖环境和版本新特性说明 简介:讲解新版本依赖环境和springboot2新特性概述 1.依赖版本jdk8以上, Spr ...
- IM开发者的零基础通信技术入门(三):国人通信方式的百年变迁
[来源申明]本文原文来自:微信公众号“鲜枣课堂”,官方网站:xzclass.com,原题为:<中国通信的百年沉浮>,本文引用时已征得原作者同意.为了更好的内容呈现,即时通讯网在收录时内容有 ...
- [易学易懂系列|rustlang语言|零基础|快速入门|(28)|实战5:实现BTC价格转换工具]
[易学易懂系列|rustlang语言|零基础|快速入门|(28)|实战5:实现BTC价格转换工具] 项目实战 实战5:实现BTC价格转换工具 今天我们来开发一个简单的BTC实时价格转换工具. 我们首先 ...
- [易学易懂系列|rustlang语言|零基础|快速入门|(27)|实战4:从零实现BTC区块链]
[易学易懂系列|rustlang语言|零基础|快速入门|(27)|实战4:从零实现BTC区块链] 项目实战 实战4:从零实现BTC区块链 我们今天来开发我们的BTC区块链系统. 简单来说,从数据结构的 ...
随机推荐
- mysql引号与esc键下方键
navicat导出数据表发现建表语句如下: create table `product_category` ( `category_id` int not null auto_increment, ` ...
- node与mysql的相互使用————node+mysql
node与mysql的相互使用----node+mysql 为什么选node???因为我是个前端. 为什么选mysql???因为成熟,稳定,听说容易学. 一.mysql数据库: mysql下载和使用我 ...
- Flex 布局——语法属性详解
前言 Flexbox 是 flexible box 的简称(注:意思是“灵活的盒子容器”),是 CSS3 引入的新的布局模式.它决定了元素如何在页面上排列,使它们能在不同的屏幕尺寸和设备下可预测地展现 ...
- nextjs:如何将静态资源发布到 CDN
nextjs 是基于 react 的服务端同构指出框架,在使用的过程中也多多少少遇到过几个问题,其中最大的问题就是静态资源的发布了. 1. 如何基于文件内容进行 hash 命名 Next.js use ...
- eventfd(2) 结合 select(2) 源码分析
eventfd(2) 结合 select(2) 源码分析 本文代码选自内核 4.17 eventfd(2) - 创建一个文件描述符用于事件通知. 使用 源码分析 参考 #include <sys ...
- Oracle 编写存储过程并设置定时执行
Oracle 版本:11g PL/SQL 版本:11.0.3.1770 1.如果编写单个存储过程,则直接在procedure新建并编写:如果需要写多个同类功能的存储过程,为了方便管理,可以现在pack ...
- C#调用RabbitMQ实现消息队列
前言 我在刚接触使用中间件的时候,发现,中间件的使用并不是最难的,反而是中间件的下载,安装,配置才是最难的. 所以,这篇文章我们从头开始学习RabbitMq,真正的从头开始. 关于消息队列 其实消息队 ...
- Python爬取猫眼电影100榜并保存到excel表格
首先我们前期要导入的第三方类库有; 通过猫眼电影100榜的源码可以看到很有规律 如: 亦或者是: 根据规律我们可以得到非贪婪的正则表达式 """<div class ...
- 线程封闭之栈封闭和ThreadLocal
线程封闭 在多线程的环境中,我们经常使用锁来保证线程的安全,但是对于每个线程都要用的资源使用锁的话那么程序执行的效率就会受到影响,这个时候可以把这些资源变成线程封闭的形式. 1.栈封闭 所谓的栈封闭其 ...
- [BZOJ3029] 守卫者的挑战
Description 打开了黑魔法师Vani的大门,队员们在迷宫般的路上漫无目的地搜寻着关押applepi的监狱的所在地.突然,眼前一道亮光闪过.“我,Nizem,是黑魔法圣殿的守卫者.如果你能通过 ...