大学回顾和C与PHP之路
我去年毕业,从事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)的语言呢?
大学回顾和C与PHP之路的更多相关文章
- JavaSE回顾及巩固的自学之路(一)——————前言
长长的呼出一口气,终于到了末端了,JavaSE,Java入门的基础,历经一个多月,终于细细的学了一遍,大部分的时间都是熬夜到半夜两点钟.本来是一个月的课程,足足让我给学了将近两个月,为什么呢?第一,还 ...
- JavaSE回顾及巩固的自学之路(三)——————所有语言的都存在的基本运算
在上一篇的博客中,我回顾到Java中的关键字,标识符等知识点,而今天这篇博文将回顾Java的,哦,不,不止Java,据本人了解,几乎在所有的语言中的基础阶段,都会存在这些运算,只是语法不一样而已. 今 ...
- JavaSE回顾及巩固的自学之路(二)——————进入JavaSE
好的.今天接着上一篇文章对JavaSE的历程初步介绍,开始对JavaSE的技术性知识进行探讨. 首先,选择编程,成为一名程序员,应该会了解一些计算机的相关基础知识,毕竟,以后就是和计算机打交道了嘛.s ...
- JavaSE回顾及巩固的自学之路(四)——————方法和数组,面向对象
今天是2018.03.31,emmmmmm.好像距离上一次写Javase回顾总结已经好久好久过去,差一点就以为要停更了,哈哈哈. 其实呢,最近是真的好忙(额,这段时间觉得自己一直在学习) ...
- 我的web前端自学之路-心得篇:我为什么要学习web前端?
时光如流水,转眼间,自己已经是大三的学长了,看着一个个学弟学妹,心中有种莫名的感觉,很怀念大学的前两年时光,但也很憧憬着自己的未来,自己将要去经历很多从未经历的事.我是我们学校信科院的一名学生,在编程 ...
- JVM菜鸟进阶高手之路十四:分析篇
转载请注明原创出处,谢谢! 题目回顾 JVM菜鸟进阶高手之路十三,问题现象就是相同的代码,jvm参数不一样,表现的现象不一样. private static final int _1MB = 1024 ...
- 未完成的IT路停在回车键---2014年末总结篇
时间都去哪儿了? 一晃而过,越来越能体会到这个词的真实感.特别是过了二十岁,这种感觉越来越深刻,越来越强烈,犹如小编做公交车的时候一直向后排排倒的香樟树,还记得有首歌叫时间都哪儿了,而 ...
- 第1次作业:no blog no fun
1.先回答老师的问题 第一部分:结缘计算机 读了进入2012 -- 回顾我走过的编程之路后,我试着回顾了我的编程生涯的开始.我最原始的记忆就是老爸教我用电脑玩连连看,那时候的显示器应该是C ...
- [2019BUAA软工助教]第0次个人作业
[2019BUAA软工助教]第0次个人作业 一.前言 我认为人生就是一次次地从<存在>到<光明>. 二.软件工程师的成长 博客索引 同学们在上这门课的时候基本都是大三,觉得在大 ...
随机推荐
- vsftpd 配置详解
1.默认配置: 1>允许匿名用户和本地用户登陆. anonymous_enable=YES local_enable=YES 2>匿名用户使用的登陆名为ftp或anonymous,口令为空 ...
- Virtual Box 杂记
1. Virtual Box后台运行 a. VBoxManage startvm yourvmname --type headlessb. VBoxHeadless --startvm yourvmn ...
- 资源list:Github上关于大数据的开源项目、论文等合集
Awesome Big Data A curated list of awesome big data frameworks, resources and other awesomeness. Ins ...
- mysql主从日志的定期清理
mysql主从的binlog定时删除是很重要的,一般是通过expire_logs_days = 10来设置binlog保留的天数(mysql5.0一下版本不支持),但有时这还不够,假如有几天的日志量非 ...
- Consul 服务发现和配置
Service discovery and configuration made easy. Distributed, highly available, and datacenter-aware. ...
- Spring MVC - 配置Spring MVC
写在前面的话: 现在开始一段新的学习历程:Spring MVC.还是按照原来的三步走学习模式(what.why.how)进行讲解. 1.Spring MVC是什么(what) Spring MVC属于 ...
- [转载]python脚本删除一定时间以外的文件
import os; import sys; import time; class DeleteLog: def __init__(self,filename,days): self.filename ...
- 网络基本概念备忘:MAC地址,端口,HTTP状态码
MAC地址 英文MAC Address 英文全称: Media Access Control Address 别称:硬件位址 用途:定义网络设备位置 表示:十六进制数,6 Byte 特点:产品出产后M ...
- Android界面隐藏软键盘的探索(兼findViewById返回null解决办法)
最近写的APP,老师说我的登陆界面虽然有ScrollView滑动,但用户体验不太好,因为软键盘会挡住输入框或登录button(小米Pad,横屏,当指定只能输入数字时没找到关闭系统自带键盘的下箭头). ...
- 谈谈Lucene和Solr索引存目录
在Lucene中,有几种索引存放模式呢?用过的人可能记得SimpleFSDirectory.MMapDirectory.NIOFSDirectory.RAMDirectory这四种.新版本的通过FSD ...