大学回顾和C与PHP之路

时间:2021-07-26 10:08:45

我去年毕业,从事PHP学习和开发一年多。

background:medical muti-media electric web;

先讲一下我的背景吧,我大学的学校是一个医科学校,然而专业是计算机动漫设计方向。我是理科生而且中学也没有学会画画之类的。当年大一想将来能成为动画家的人,就花了很大的心思去学习画画,然而并没有什么效果。一是没有那个艺术细胞天份,二是专业没什么气氛总共才十几个人只有一两个是以前学过画画而且坚持要走那一行的。

同时,大学也参加了一些社团和组织,比如做策划的、做海报的、做视频的、做电子的、做数学的。然后一直坚持到最后的是做电子,就是隔壁 生物医学工程学院 的电子创新基地,在里面学单片机,做电路板啊、写C语言啊,最后也做出了一些小作品比如智能小车、气象站什么的。但这些毕竟都是一些模块组合和很成熟的基本算法,纵使一直用的都是C语言,也很少用到指针、数据结构这些的。而在大三到大四那个暑假,就开始比较系统地学习起PHP网站建设,主要是以Head First那个系列的书开始的。那时候就想做两手准备,一方面是因为很多师兄们都说做硬件的工作不好找啊还是做软件好啊,另一方面是因为我专业所学的课程是多媒体方向的,跟电子基本上很难搭得上边,然后课程里面也没有比如数电模电这几门基础的课自己在硬件方面学得不扎实。

Find and lost and found

后来在上一年的秋招时候,也是跟实验室的“基友”们各种跑宣讲会啊跑笔试面试啊,不亦累乎。那时,建站方面我只有一丁点的经验,然后各大互联网公司就在笔试中被刷掉了。而在嵌入式电子方面,偏硬件的我的硬件电气知识不足,偏软件的又大多数要会C++。我这种会一点做板又只会C的就是明显东不成西不就,虽然可以自己独立做一些东西出来玩。但那些公司毕竟不是弄个只能玩的东西,他们都会要比较专一于某一方面的,招的人非软即硬,在专注性方面有较高标准。

然后经过两个多月的寻寻觅觅后,决定转行做网站设计,然后偶然一次机会一家小小公司招进去了,外包做一个蛋糕店的微信网店,本来已经有一套代码模板的了,然后做了两个月项目完成验收了就完工回家过年。过完年回来又寻觅了几个星期,然后才决定不找了,就留学校做毕业设计,就是拿暑假做的那个网站作品(参过赛的)重构。这次重构是采用了Thinkphp这个用得最广泛的框架,文档清晰大方、问题参考回答众多,这是我当时选择它的最主要因素,然后这个项目一直做到五月中毕业答辩。经过这一次重构,算是真正理解体会了什么是前后端,什么是MVC,什么是以对象的思维去解析网站中的逻辑规划。当然我知道,我能如此之快地理解到面向对象的层面是跟我此前C语言的积累大有关系的。

C Engineering

还记得当年大一寒假回来,师兄们就给了我们一本电子书(小册子)叫《从单片机初学者迈向单片机工程师》,其中所讲的状态机、C语言模块化、多任务轮询,不得不说真的是C语言工程化的真理,反复参考和实践了几个月,渐渐地觉得郭天祥的《新概念51单片机C语言教程》中的代码只是能运行,但是完全没有工程化的思想,更没法封装、重用;后来我接触的模块多了,就发现C语言没有类这个东西真的很局限,就比如说很多模块都是IIC通信协议的,如果可以用类的话,就应该IIC模块为基类或者接口,所有的IIC器件都可以继承里面的代码而不是每个都复制一份。对于C嵌入式开发来说,可以简单粗暴地认为一个模块就是一个类和实例,比如在一个闹钟的项目中,按键模块、显示模块、定时器(外部或内部)、蜂鸣器,每个模块都封装成自已的C文件和H文件。这个思想对于面向对象思想的正确形成非常重要。从面向过程到面向对象,其实是一个量变到质量的过程,C语言的工程化也是这样一个过程。也只有经历过这样一个过程的人,才能真切地体会面向对象的进步之处。

Persional Home Page OR PHP:Hypertext Preprocessor

与C语言相似,PHP语言长久以来也是一门相对面向过程的语言。大四那年,它简洁的语法,直观的命名,精简的代码,让我可以说见到它就像见到C语言的兄弟一样亲切。而后那些优秀的PHP框架让PHP编程的工程化得到了极有指导意义的规范。经过这半年多的工作,我现在已是一个带着两个小弟的人了,也已经基本上掌握了PHP应该掌握的内容,比如一些基本的前端知识HTML/CSS/jQuery、常见的逻辑分析、OOP的结构规划、数据库规划和优化、Linux日常使用。

而我现在有一个疑惑。PHP工程师这个职位的发展方向到底能到哪里?因为PHP是一门专注于网络应用后台的程序,所以它的应用范围和知识范围都很窄。1、网络程序的瓶颈通常在于数据库和缓存、对后台语言的运行效率要求不高,这样的话就很难有动力和约束力去写出高运行质量地代码,这个跟我之前用C语言对内存和效率高度重视的信念有很大出入;2、网络后台通常都是一个请求执行一次,基本上不会有多任务多线程这种场景,而随之的信号量、锁等等知识都不会接触到;3、PHP中的数据结构概念非常模糊,数组就可以完全随意当作栈、队列、链表、顺序表、哈希表、HashMap等等来用,完全没有细分也更没有考虑其中这几种结构在不同场景中的效率,对于查找排序等SQL数据又基本上已经封装好了PHP也无需多虑;4、现在招PHP的基本上都是当全栈在用,既要负责后台逻辑又要做页面前端有时还要用PS修图切图拼图什么的,这个当然在技术团队多个人时可以分工,但也有不少是单干的,这样就导致PHPer基本都可以做个人站长但是很难在PHP上有特别深入的挖掘和学习;5、对于设计模式,只能说,现在互联网这么浮躁,PHP做出来的基本上都是快销品,大多数项目连架构都不好,哪还管设计模式这种应对易变性上的技巧,能用上设计模式的也大概只有那批做框架的人了;6、现在三年以上经验的PHP工程师普遍要求是会前端、OOP框架的PHP、NoSQL的缓存、Linux Shell和Python,所以可以看得出来PHP工程师的发展并不在于深而是在于广。

所以我有考虑,一两年后是不是应该转学JAVA或者是另外一些领域(比如嵌入式、App)的语言呢?