IT兄弟会全栈工程师01班第一课课堂笔记

一.什么是全栈工程师?

简单概括就是全能型的人才;比如说你一个人能够把服务器搭建起来、能够把数据库建好、能够写Web程序连接数据库,不管是用JAVA还是PHP或者别的语言。如java使用JDBC、PHP使用PDO、Node.js使用Node.js的MySQL扩展等。不管用什么方式把服务器搭好、服务器数据库连接好、写Web程序、包括我们的网页客户端+ios客户端和Android客户端,一个人能够把一个APP做起来做上线,那么你就可以认为自己是一个全栈工程师了。

栈是什么?

堆栈的栈。堆栈:比如说你把一摞书摞在桌子上,那么在内存中表现的数据结构我们称它为一个栈,再把一本新的书放上去就会越摞越高,越后面放的书越在上面,越早放的书越在下面,这就叫栈。如果要拿出从上面拿起,越后放的书反而越先拿;所以栈这种数据结构的特点就是先进后出,后进先出。

混合APP开发模式

  与用户交互的前端技术分为两类:一类是客户端程序,另一类是网页端程序;如果写网页端程序就要学习HTML、CSS和JS;如果要写客户端程序就要学习ios和Android;把这两者结合起来就是混合APP开发模式。

全栈工程师的特点是通往架构师之路,我们知道做技术的最高端,站在金字塔顶端的人是架构师。如果要做架构师全栈工程师就是起点,因为全栈工程师所有的技术环节都知道。


二.编程语言的发展历史

  编程语言的特点:可以控制我们的指令、进行内存的分配、可以执行我们的程序逻辑。(HTML和CSS没有这个能力所以不算编程语言,能够承载逻辑的才是编程语言)

机器语言

  最原始、最底层的编程语言就是机器语言,机器语言是直接跟硬件电路相关的,比如说CPU有很多帧口数,我们通过电路指令给它每个帧口数通电是高电位还是低电位(是1还是0),它会给我们返回运算结果。CPU就是通过这种硬件电路来工作的,这种硬件电路就是近机器语言(0101二进制这种类型)。这种就属于硬件编程,也属于机器语言编程。

汇编语言

比机器语言高级点就是汇编语言,汇编语言是直接通过我们的英文单词给我们的机器下指令,汇编语言会经过编译器解析之后直接生成机器码。

高级语言

比汇编语言更高级的语言我们统称为高级语言,高级语言是从C语言开始起步的,C、C++、Java包括现在的JS、Ruby、Python、go等。
  高级语言又有分类,一般编程语言在10年至20年之间都会有一次大的变革。比如说从1946年第一台计算机的硬件编码到50年代末期的汇编语言才流行起来,到60年代末期C语言就诞生了,我们都知道C语言和UNIX操作系统同时诞生的,C语言和汇编语言比起来就属于高级语言了,因为代码有复用性了,写好的代码可以在很多台机器上面都可以编译。而汇编是不可以的,汇编针对每一台机器CPU指令都不同,都要重新写。但是C语言就可以一处编写,到处编译。在不同的机器上编译就会翻译成不同的机器码以供使用。C语言称之为结构化的编程语言,就是因为C语言有了函数,函数可以调用函数,函数之间可以传递参数有返回值,这样的话代码看起来更清晰能够有模块化了。其中最重要的一点就是可以抽象,可以把一个大型的项目切得很小对项目进行划分。然后随着项目越来越大,C语言的抽象程度还是不够,因此比C语言更加抽象的面向对象语言C++出现了。所以面向对象是比C语言更高级的抽象。面向对象的核心就是抽象。
  面向对象的语言从80年代末期到90年代初期很火,尤其在1993年Java语言诞生后面向对象非常非常火,一直持续到2005年左右。现在我们知道面向对象语言也慢慢被淘汰了。面向对象也表现了很多弊端,比如说在Java编程语言里面很多东西都要求标准化、规范化要写接口。

Java打败C++

同样是面向对象语言我们知道很长一段时间Java打败了当时最强的语言C++,因为C语言和C++有个很大的弊端就是它有指针,指针需要人为去管理还要管理内存的分配和释放,这样很容易出BUG,指针操作不当会产生很严重的后果,还可能产生内存泄漏。而Java有了JVM实现了真正意义上的跨平台(一处编译,到处运行),还通过内存回收机制,通过一定基数来帮我们管理内存,这样程序员不用手动去管理内存程序员的工作量和犯错的几率就减少了。Java就是精简版的C++,而且不用人为去管理内存和指针了,这就是Java打败C++的原因。
  随着时代的发展,面向对象的语言后来被曝出了很多毛病,比如说Java很长一段时间差点被淘汰了,如果不是Android使用Java的话,Java可能之前就已经走向末路了。原因是Java这样的面向对象的语言在做大型软件工程的时候Java可以帮助我们高度抽象,抽象理论上说是由好处的,但是由于Java为我们提供了很多的规范,而编程的时候我们都去遵守这些规范,而且有大量的配置文件我们要去配置,所以大家觉得很不方便。因为Java希望我们所有程序员写的代码都是一致的,希望我们都按照一个标准规范来走,这种思想是好的但是这样导致了一个结果,就是在大的项目架构设计的时候我们要预先设计好所有的接口,然后让所有的程序员去实现这些接口,程序员去实现这些接口自然程序就能对接,多人合作就能很顺利,这是好事情同时又造成一个弊端,很多Java的反对者认为Java是反人类的。因为软件都还没做出来,你怎么可能知道我需要哪些接口、需要定义哪些抽象类、抽象层方法呢?这不是反人类的吗?(因为一个全新的、之前没有人做过的开发项目,不可能实现在项目开始之前就能定义好这个项目有哪些数据结构、表要留哪些字段、要留哪些接口、定义好哪些基类和抽象类等然后再给其他程序员去用,除非同样的系统之前做过很多遍,才有可能实现)

PHP打败Java

我们知道很长一段时间Java被PHP打败了,到现在为止全球有80%的网站是用PHP写的。那么Java之前那么强还很安全,还给程序员省了很多力,为什么会被PHP打败呢?原因就是Java过度标准化,要求大量的预先设计(导致项目还没有开始、需求都还不确定但是要设计好所有的接口和规范、基类和抽象类、建好数据库、布置好模板等这种是很不实际的事情)。PHP不要求为预先设计非常灵活,可以面向对象编程也可以不面向对象编程,比如说前期开发的时候哪怕是过程化的写法,只是代码不好看,后期可以再把面向过程的代码变成面向对象,还可以把多个PHP文件整合成一个单入口, 代码完成后发现有几个类都有共同的方法,可以再写一个接口让这些类同时再实现这个接口,这就是一个不断开发重构、开发重构过程,重构的时候代码就越来越漂亮越来越完善,这样重构到最后Java是完全部面向对象,PHP也可以会是完全面向对象,Java是MVC,PHP也可以是MVC。只不过在开发的过程中PHP会很灵活。开发了之后确定了最后的需求再来一步一步的完善。这就是为什么PHP做项目很快很灵活的原因,也是现在很多创业型项目IOS和Android的APP服务器端都是用PHP做的。


三.函数式编程语言

我们说编程语言10~20年都会有一个大的变革,那么PHP其实也是一门面向对象的语言,JS是基于对象的语言。而现在最流行的编程语言就是函数式编程语言,从2006年以后Ruby是日本人开发的,在美国发扬光大以后,把所有的传统编程语言都打败了,因为在服务器开发领域的话函数式编程语言的优势非常大,函数式编程语言就是解决了面向对象编程语言的弊端(之前提到的预先设计、Java的反人类做法)。函数式编程语言有很多,比如现在谷歌最新的编程语言go语言,Java8、PHP7等都支持函数式编程语言的一部分特性(其中Java8已经支持函数式编程语言的80%了)。函数式编程语言是现在的主流,它不需要我们提前设计好接口、设计好基类。因为函数式编程如果两个类中都有一个共同的方法,它会自动生成这个方法的接口。

编程语言的动态类型、静态类型、强类型和弱类型的区分

强类型通常就是静态类型,但是动态类型不一定就是弱类型。强类型就是存储在内存中的数据类型是限定的,不同地方使用时需要进行强制数据类型转换,动态类型就是在声明一个变量时不需要使用特定的关键字进行数据类型限定,比如将一个数字类型和一个字符串类型的数据进行运算时,如果有需要进行数据类型转换后才能进行运算的就是强类型,如果不需要转换就能直接进行运算的就是弱类型,所以PHP就是弱类型编程语言,而JS在严格意义上来说是动态类型的强类型编程语言。

指令式编程语言与函数式语言的区别

之前所有的传统编程语言都是指令式编程语言,因为我们写的代码是怎么样执行完全按照我们程序员编写的指令来执行。但是函数式编程不是这样执行的,函数式编程代码的执行顺序不是按照程序的先后顺序执行的,它是理解了程序员的用意后进行执行,比如要让计算机画一棵树,它就会画一颗树,但是具体画树的方法是由它来画的,并不像之前按照程序员的的程序一步一步的去画,相对函数式编程环境承担的东西更多了,跟接近于人脑的思维方式在编程,所以学习函数式编程更简单了,不需要学程序逻辑都可以做函数式编程。所以在函数式编程领域像计算机一样去思考不是必须的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 162,710评论 4 376
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,839评论 2 308
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 112,295评论 0 255
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,776评论 0 223
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 53,198评论 3 297
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 41,074评论 1 226
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,200评论 2 322
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,986评论 0 214
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,733评论 1 250
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,877评论 2 254
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,348评论 1 265
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,675评论 3 265
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,393评论 3 246
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,209评论 0 9
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,996评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 36,212评论 2 287
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 36,003评论 2 280

推荐阅读更多精彩内容

  • Markdown语法学习 1 .标题 例如: 一号标题 二号标题 三号标题 使用 # 表示标题,一级标题使用一个 ...
    咚呱阅读 293评论 0 0
  • TITLE: 编程语言乱炖 码农最大的烦恼——编程语言太多。不是我不学习,这世界变化快! 有时候还是蛮怀念十几、二...
    码园老农阅读 5,186评论 2 35
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 170,598评论 25 707
  • 想拥有一双坚挺的翅膀远离巢穴的温暖划过天空的云彩飞向自由只是害怕柔弱的羽翼没有探出鸟巢的勇气风吹着它们瑟瑟发抖胆怯...
    指尖芳华阅读 302评论 6 7
  • 1、第一次拜访客户时,先和客户交朋友,收集客户个人信息,从公开话题慢慢谈到隐私话题,了解客户的兴趣爱好、家庭情况、...
    摩西44阅读 424评论 0 0