大多数人,都低估了编程学习的难度,而高估了自己的学习能力和毅力。
当前系列: 野生程序猿入坑指南 修改讲义

首先,你不是学语言

飞哥,你那里教什么?Java,python,C++……

这些都是编程“语言”,你可以理解成和计算机交流的一系列的语法“规则”集合,不同的语言有不同的语法规则演示

以语法为导向,必然带来这么个问题:

  1. 记不住:把学习当做一种“背诵/记忆”,所以学了后面的忘了前面的
  2. 抓不住重点:纠缠/窃喜于一些生僻的、晦涩的、根本不常用的语法,茴香豆的茴字有几种写法?尤其是一些比较垃圾的语言(点名JavaScript
  3. 迷茫:学完了所有语法,也不知道能干嘛,做个网站,游戏,还是APP?都不会,甚至方向错误(PS:你为什么要学Java?懵逼.jpg)
  4. 视野狭窄:喜欢玩鄙视链,打口水战。“PHP是世界上最好的语言……”

一定要牢记:语言只是工具。

用开车做个类比:

  • 能够知道油门刹车和离合,会按喇叭会打方向盘,这就是学语法。
  • 是不是学了语法就能上路?肯定不是,你还得学交通规则(计算机基础/底层原理)、会超车会转急弯会倒车入库(常用基本技能)、会处理各种意外情况(调试修bug)……
  • 不同的车型,可能会有不同的操作方式:有卡车有轿车甚至还有摩托车,有自动挡有手动挡,挂挡的方式各有不同……,这就是不同的语法。你应该根据你学车之后想干嘛来选学习项目:比如当公交车司机(做游戏)那你就学开客车(C++/C#)。
  • 但一个好司机(专业程序员),他的“好”不仅仅体现在油门刹车踩得有多好,不应该是只能开一种车(会一种语法),只会跑平路不会跑山路(不同的项目)……


学习内容

回答这些问题:

  • 所谓的“IT”(挨踢)行业究竟是什么行业?和“互联网”行业有什么关系?
  • 我“学计算机”的和“学编程”的究竟有什么区别?
  • 计算机科学(Computer Science)和软件工程(Software Engineer)?
  • 人工智能(AI)、大数据、物联网(工业2.0)……这些又是什么鬼?
  • ……

都需要一个最起码的基础。所以说稍安勿躁!


分类

硬件 vs 软

  • 硬件:看得见摸得着的都属于硬件。比如一台电脑,就包括:显示器(屏幕),键盘鼠标,还有里面藏着的CPU、内存、磁盘、网卡等等。还有网络设备:网线、交换机、路由器……
  • 软件:看不见摸不着的,以信息、代码、程序等形式存在,运行在计算机硬件上的东西。比如:电脑上都要安装的操作系统,QQ或者微信,浏览器打开的网站……

科学 vs 工程


特征
工作结果
入行路径
科学
在未知领域进行突破,获得新知识、新技术、新发明
找到规律、提出见解、发表论文……
几乎就只有考大学考研考博……
工程
利用技术、资源解决的问题
芯片、电脑、软件/程序/应用
可以自学、培训

为什么要理解这些?确定你的方向呀!

比如一个常见的迷茫:每天都是写业务逻辑的增删改查,工作一点都没有技术含量,怎么才能够更上一层楼。

迷茫的根源在哪里?没有良好的启蒙。

应用开发

综上,我们(培训班)能够教的,就在软件工程领域之中。

一般我们把直接面向“终端用户”的软件称之为应用。这里面的终端用户

  • 可以面向普通用户,比如游戏、微信、一起帮……;
  • 也可以面向专业人员,比如Office、PhotoShop、CAD、数据库(哦豁?利用应用做应用)……

但不应该是开发人员。

开发人员一般来说也不会直接调用操作系统,而是使用的是框架/类库/中间件……

越接近硬件的就越底层。粗浅的理解:越是底层越难 (段子:相亲被鄙视,这么大年龄了还在做底层……)

但是,这里也有一个常见的误解:越底层工资越高。其实不一定!至少我知道的,底层到硬件了,工资真的可怜。

盲点:难≠工资高 (经济学范畴,不展开)

有无数据库支撑

还可以按其种类划分为:

  • IT信息化应用:这个稍稍有点抽象。简单的理解,它其实就是把现实生活中的数据搬到计算机里面处理。比如淘宝,其实就是一个大商店,只不过这个商店里面不放具体的商品,而是展示商品的信息,比如名称、图片、价格、销售情况等等。整个淘宝,本质上是信息的传递,数据的:
    • 录入(比如发布商品/好评);
    • 修改(改价格/图片等);
    • 删除(货物下架删差评);
    • 查找(各种各样的商品)
    的过程。背后通常都需要“数据库”(由此衍生了“大数据”的概念)的支撑。现在大部分应用都属于这一类。
  • 系统应用:其核心业务不是数据的增删改查,背后也不需要大型数据库支持。典型的就是
    • 工具类软件,比如绘图的Photoshop和CAD,
    • 以及各种游戏。

Web开发

计算机上运行的软件,又可以按是否需要联网分为:

  • 单机程序:在当前电脑上独立运行,比如:WPS、PhotoShop、单机小游戏(扫雷)
  • 联网程序:需要通过网络连接到服务器才能正常运行,比如:QQ、哔哩哔哩、知乎、一起帮,这类软件又被分为两种架构:

    • C/S(Client/Server):客户端/服务器,表现为用户需要下载一个软件安装在自己电脑上,然后通过这个软件联网(和服务器相连),比如:QQ
    • B/S(Browser/Server):浏览器/服务器,表现为用户直接打开浏览器(比如:IE/Chrome/360浏览器),输入网址,和服务器相连,比如:一起帮

广义上,所有需要联网的程序开发都可以称之为Web开发,但一般我们会认为B/S架构的、基于浏览器的项目才是Web开发(实际上B/S也占绝对份额)。

我们要学习的,就是:Web信息化应用

其他详见:企业应用Web开发基础


学习路径

在Web开发领域,还可以再进行划分:

前端后端

怎么划分?看代码运行(注意:是“运行”,不是部署)的位置:

  • 运行在服务器(server)端的,就是后端
  • 运行在浏览器(browser)上的,就是前端

所使用的语言通常是(但也是理解误区):

  • 前端:HTML + CSS + JavaScript
  • 后端:Java/C#/PHP/python + SQL(数据库)

前端

用于构建项目的界面(UI),但和美工又不同:

  • 美工:用图片
  • 前端:用代码

演示:用一行代码说明前端包含的三部分内容:

<button style="color:blue" onclick="alert('源栈欢迎你')">一起帮</button>
  • HTML:构建内容,按钮、链接、图片……
  • CSS:美化装饰:颜色、大小、位置……
    PS:HTML和CSS都不算编程语言,而是“标记(mark)”、“描述”语言
  • JavaScript:响应用户的操作,比如点击,
    • 控制HTML和CSS
    • 通过Ajax技术(不是语言)连接服务器获取数据

注意:代码都是在浏览器中运行。

手机APP

只有“原生(native)”APP,才会用Java/Object-C/C#等开发客户端(client)。

但原生APP要为不同的手机操作系统(比如Android和iOS),写不同的前端代码

所以很多时候,都是“套壳(Html5)”APP,即用HTML + CSS + JavaScript这一套技术做一个移动端的网站,再用一些软件编译打包,转成不同手机系统的APP。

最后,微信小程序,套壳APP的壳是微信而已,技术本质上大同小异。

后端

用于(连接数据库)处理业务逻辑。比如:

  • 数据库:检查某用户的密码
  • 运算:
    • 比较用户的输入和数据库中的存储:如果正确……;否则……
    • 给用户增加10个积分
    • 给用户名加密
  • 发送Email/短信
  • 存储用户上传的图片到磁盘
  • ……

和前端最大的不同、最核心的内容就是:数据库操作

为什么不建议只学前端?

因为招聘时有前端&后端的岗位,所以很多培训机构也因此开设前端/后端的课程。好处显而易见:

  • 学时更短(一般4个月)
  • 学费更低
但是,在条件允许的情况下,最好不要只学前端:(就算时间/经济不允许,也建议学后端(+薄前端),后文详述

是不是前端比后端更容易?

老黄历啦!在很早很早以前,前端程序员可以由美工兼任,因为HTML和CSS都很简单甚至可以自动化(的由图片转化而成),JavaScript就用于做点“特效”……

现在的前端,无论是CSS还是JavaScript,都需要框架

  • CSS:bootstrap、elementUI、layUI……
  • JavaScript:vue、react、angular……

另外,一个professional的前端,还应该学习微信小程序开发吧?

关键的关键,前端框架(包括JavaScript语言):

前端的难,和后端的难,是不一样的。

参考:现在整个 Web 前端是「屎山」吗

学得越少越容易?

“我不听,我不听,前端至少不用学SQL嘛!”

说得对。但是,@想一想@:你学编程的目标是什么?

是找到并胜任工作,是不是?

所以你必须:真正的理解/阐述一些概念:比如解释和编译、强类型弱类型、单线程多线程……

理解这个概念,仅仅是前端学习的知识储备不够。

#体会#:现在给你解释不清楚,等你长大了你就知道了。

有无相生,难易相成,长短相形,高下相盈 —— 《道德经》

仍然还是能力,还是时间!

复习:我们学习的目的是什么?千万不要忘了:提高能力。

说一千道一万,你学4个月,就只有4个月时间的锻炼,就只有4个月的能力。这肯定是远远不够的!

@想一想@:为什么招聘启事上都写着要求2年工作经验?

前后端岗位可以分开,但能力不能分开。

——某前端大佬。

意思就是说:做前端的人也要懂后端,做后端的人也得懂前端。不然,整个项目组必然一地鸡毛……

为什么?现代前后端之间实际上无法隔离,而是通过Ajax密切关联的。前端要实现一个完整的Ajax功能,必然需要后端的配合。

这时候,你完全不懂后端,……,咋整?就像:

  • 学车不让你上路
  • 射击不给你子弹

让你想象、给你模拟,你能不能学踏实?你怎么去深刻理解?你怎么能装成“老鸟”的样子?

建议全栈

如果时间/经济条件允许的话,前端+后端+数据库,全部都学,拉通了学!

1+1≠2

其实并不会额外耗费你更多的时间:

  • 前端:4个月
  • 后端:4个月
  • 全栈:6个月,不是4+4=8个月

好处是显而易见的:

  • 更全面的知识:帮助你扩大视野
  • 更深刻的理解:理解:对照学习的作用,所谓“它山之石可以攻玉”
    PS:现在的前端,其实就是在做后端的“搬运工
  • 更强大的信心:一个一个的功能,能够独立的做出来啦!

想通透了你自己都会觉得很奇怪:你已经浪费了这么多的大好年华,为什么偏偏这2个月就就就是不能拿出来多学点东西呢?

多学2个月,(在源栈)多花不到4000的学费,第一份工作哪怕一个月只多1000块钱,4个月也就回本了……

学全栈的同学,工作了以后,气场都不一样!

你行不行嘛?不行我给你写了算了……

这就是底气。

你想象的“专精”

首先,绝大多数情况,“专精”是厚积薄发的一种结果。而很多你所认为的、无用的“厚积”,其实是必不可少的。

@想一想@:大学选的专业必然用不到一些我们初中高中学科,但国家为什么不从初中甚至从小学就开始定你的专业?

我们不知道我们所学的、看起来“没用的”知识,会在哪一天帮助我们取得无法想象的突破。功不唐捐啊,同学。

更何况,我百分百保证,你多花2个月学的东西,一定会有助你的职业生涯!

其次,你能不能“专精”?

  • 学习阶段,4个月你能精到哪里去?
  • 工作了,和你的方向不对口的工作你就不碰?不说不可能,太难了太难了。程序员的技术,到后面都是跟着项目走……

我工作了再转后端

刻薄点说,有点naive。真有这个心气,培训的时候前后端一起就学了。

实际情况是(复习:学不动了……)

  • 前端干活多,干的是脏活。因为最容易变的就是UI,客户最容易看到界面之后,这里改改那里改改;而团队成员配置一般都不合理,前后端1比1配置
  • 处于鄙视链底端(当然这是不对的),被怼得不要不要的,尤其是前端的活,后端也能干的时候。
【案例】干了两年的前端:真不明白用户权限在后台是怎么存储的……


课程详细说明

按知识点

说明:阿拉伯数字代表标准学时,单位为周

编程基础

我们把一些无论是前端还是后端,都应该掌握的知识抽离出来:

  • 认识计算机:以一个专业程序员的角度重新理解:软硬件基础知识、操作系统、I/O、操作系统等
  • 编程语言:JavaScript、Java和C#,相同/极其相似的语法
    • 面向过程:变量赋值、运算、分支循环、函数……
    • 面向对象:封装、继承、多态……
    • 面向函数:lambda……
  • 数据结构和算法:提升逼格、加深理解
  • Web开发基础:认识理解互联网、HTTP协议、前后端演进、划分……
  • 软件工程:理解真实项目、团队合作开发,方法、工具,等等

这一部分内容,有理论,也有实操;有简单的,也有复杂的。

希望同学们能在入栈之前就开始学习。

不要求100%掌握(后面会反复涉及),但可以作为学习能力和毅力的检验标准。

薄前端

为期6周的前端,能完全满足项目功能需求,但不足以应付纯前端岗位需求。

确实要单学前端、并以此求职的同学,至少还需要学习:

  • ES6进阶语法:1周
  • vue.js框架及其相关类库(axios、npm、webpack……)等:3周
  • 其他CSS和JavaScript框架(暂无)
  • 微信小程序(暂无)

后端

开始分叉,根据使用的编程语言可分为:

  • JavaWeb:使用Java。选择理由:激流勇进
    • 就业目标:国内互联网企业
    • 追求一种更具挑战性(高薪高压力)的学习/生活:
      • 门槛更高:hello,world!成功一半,难在环境搭建、配置等
      • 要学的更多:各种开源框架
      • 竞争更激烈:更多职位但更多求职(竞争)者,培训班包装简历3年起步,大流量高并发多线程虚拟机……门清,唬住50K!
  • ASP.NET:使用C#(或VB.NET)。选择理由:岁月静好
    • 极致的开发体验:优雅的语言特性,宇宙第一的IDE,开箱即用的框架模板,“天天都在吃糖”……
    • 更宽松的环境:使用明显主流的技术 & 学的人少岗位其实不少 
但我希望/鼓励大家能够同时学习ASP.NETJavaWeb——不要自己局限自己。

除了编程语言,其他JavaC#相同/极其相似的:

  • 语法:访问限制、接口、抽象类、反射、多线程……
  • 类库:集合、I/O、Email……
  • 框架:ORM(数据库)、MVC(Web)……

也被我提取出来。

数据库

分为:关系型数据库(SQL) 和 非关系型数据库(NoSql)。

SQL是关系型数据库的的通用语法,可以适用于Sql Servermysql(以及Oracle)等主流数据库软件。大致包括:

  • 建库建表
  • 增删改查:实操重点难点,尤其是复杂查询
  • 索引事务:理解层面难点
  • 存储过程
  • 视图函数……

功能模块

详见:项目实战:17bang功能索引

为什么以“用户权限(注册/登录/用户资料/忘记密码……)”、“内容发布(发布/修改/评论/赞踩……)”和“消息通知”三个模块为主:

  • 业务逻辑简单,几乎所有同学都非常熟悉
  • 囊括了Web开发所需的基本技能:
    • 前端的页面呈现(文章单页/列表)和form表单(注册/登录)输入
    • 数据(比如用户名和密码)从前端到后端再到数据库的传递过程(以及相反方向)
    • 使用cookie/session作为登录凭证、权限检查、页面跳转……
    • Ajax请求响应:评论、点赞/踩、消息通知
  • 涵盖了几乎所有的
    • 安全需求:密码加密、防注入、防欺骗……
    • 性能需求:缓存、异步加载……

布置的作业,大多都是“面向项目”(以项目为导向)的;但是,仍然【强烈建议】同学们至少保留2周的实战时间

完成一个又一个的功能,是你信心的源泉!

高质量代码

所有的代码其实都有两个要求:

  1. 用户提出的、业务逻辑层面的、显式的要求,俗称“能跑”
  2. 不用用户提出,或者用户没想到,但我作为“专业人士”应该主动考虑的,简单的说,“把代码写好”

所谓的好:

  • 性能:真的跑得快,或者至少让用户以为跑得快。
  • 安全:HTTP(S)协议是一个非常安全的协议,名言“后端永远不要相信前端”:加密防泄漏防篡改、防注入、防暴力破解、防欺骗、反爬虫……
  • 可维护性:耐操,怎么用怎么改都不会崩(大部分时候最重要如何看待「大部分程序员只会写三年代码」的说法?

注意:以上三者不可兼得。


时髦的前沿科学

比如:AI、大数据、云计算、物联网……

如果是培训:离得越远越好

高考选专业:都一样,哪个分数低选哪个。

简单的说明:

  • AI现状:没有落地,软,吃学历
  • 新瓶装旧酒:大数据(数据仓库/挖掘)、云计算(网管运维)、物联网(物流快递)

PS:一句闲话,选专业问做这个专业的人,不要凭“想象”。

学校差的话,还是推荐:英语,^_^


其他答疑

招聘信息里面还要求……

飞哥,我看了一下,这些东西好像都比较基础啊,我搜了招聘信息里面还要求有.net core,redis,mongodb,elasticsearch啥的

表扬:挺机灵的小伙子

这折射的是一种非常常见的心理:用什么,教什么,学什么……

理想很丰满,但现实很骨感:搭建一个项目的技术不能说多如牛毛,但绝对不是屈指可数(.NET还好点,前端/Java那就……)

只能讲“基础”

我们是委培,即:受招聘单位的委托,定向的培训。

所以,必然出现招聘要求和学习内容不匹配的情况。

那怎么办?只能教“基础”的东西,有了这些基础,其他一些“非基础”的东西,到了单位自己学……

这也是为什么不断强调:

  • 不仅仅是学知识,还要练能力,尤其是自学能力
  • 简历先投:你管他的招聘启事啥要求,能不能百分百的符合呢!

不可忽视的基础

开始做培训的时候:试图“高大上”,几节课拉完分支循环,把时间省出来讲点“高级货”不香么?多线程/异步、高并发大流量、系统架构和设计模式、数据结构和算法……

结果一是大量的同学跟不上,二是我也认识到:

我们培训还是要面向就业。入行是最重要的,在入行的n年内,大量的都是基础工作:

  • 充分的理解需求(再次强调):一是鉴别模糊需求,二是熟悉领域(比如物流、医疗、工业生产……)知识(DDD)
  • 熟悉项目架构:如果项目够复杂的话
  • 分支循环修bug:后端,调试一星期,代码就三行。越稳定的工作,越是如此。
  • HTML+CSS写页面:前端。新人考验期,^_^

但就是这些基础工作,奠定你的基础(认知/价值观),即:如何看待软件工程,它的难点在哪里,

从而进一步的理解(悟)“高级”的部分:面向对象、架构、性能安全可维护性如何权衡取舍……

学习笔记
源栈学历
今天学习不努力,明天努力找工作

作业

觉得很 ,不要忘记分享哟!

任何问题,都可以直接加 QQ群:273534701

在当前系列 野生程序猿入坑指南 中继续学习:

多快好省!前端后端,线上线下,名师精讲

  • 先学习,后付费;
  • 不满意,不要钱。
  • 编程培训班,我就选源栈

更多了解 加:

QQ群:273534701

答疑解惑,远程debug……

B站 源栈-小九 的直播间

写代码要保持微笑 (๑•̀ㅂ•́)و✧

公众号:源栈一起帮

二维码