我去年毕业,从事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之路的更多相关文章

  1. JavaSE回顾及巩固的自学之路(一)——————前言

    长长的呼出一口气,终于到了末端了,JavaSE,Java入门的基础,历经一个多月,终于细细的学了一遍,大部分的时间都是熬夜到半夜两点钟.本来是一个月的课程,足足让我给学了将近两个月,为什么呢?第一,还 ...

  2. JavaSE回顾及巩固的自学之路(三)——————所有语言的都存在的基本运算

    在上一篇的博客中,我回顾到Java中的关键字,标识符等知识点,而今天这篇博文将回顾Java的,哦,不,不止Java,据本人了解,几乎在所有的语言中的基础阶段,都会存在这些运算,只是语法不一样而已. 今 ...

  3. JavaSE回顾及巩固的自学之路(二)——————进入JavaSE

    好的.今天接着上一篇文章对JavaSE的历程初步介绍,开始对JavaSE的技术性知识进行探讨. 首先,选择编程,成为一名程序员,应该会了解一些计算机的相关基础知识,毕竟,以后就是和计算机打交道了嘛.s ...

  4. JavaSE回顾及巩固的自学之路(四)——————方法和数组,面向对象

    今天是2018.03.31,emmmmmm.好像距离上一次写Javase回顾总结已经好久好久过去,差一点就以为要停更了,哈哈哈.        其实呢,最近是真的好忙(额,这段时间觉得自己一直在学习) ...

  5. 我的web前端自学之路-心得篇:我为什么要学习web前端?

    时光如流水,转眼间,自己已经是大三的学长了,看着一个个学弟学妹,心中有种莫名的感觉,很怀念大学的前两年时光,但也很憧憬着自己的未来,自己将要去经历很多从未经历的事.我是我们学校信科院的一名学生,在编程 ...

  6. JVM菜鸟进阶高手之路十四:分析篇

    转载请注明原创出处,谢谢! 题目回顾 JVM菜鸟进阶高手之路十三,问题现象就是相同的代码,jvm参数不一样,表现的现象不一样. private static final int _1MB = 1024 ...

  7. 未完成的IT路停在回车键---2014年末总结篇

    时间都去哪儿了?         一晃而过,越来越能体会到这个词的真实感.特别是过了二十岁,这种感觉越来越深刻,越来越强烈,犹如小编做公交车的时候一直向后排排倒的香樟树,还记得有首歌叫时间都哪儿了,而 ...

  8. 第1次作业:no blog no fun

    1.先回答老师的问题 第一部分:结缘计算机       读了进入2012 -- 回顾我走过的编程之路后,我试着回顾了我的编程生涯的开始.我最原始的记忆就是老爸教我用电脑玩连连看,那时候的显示器应该是C ...

  9. [2019BUAA软工助教]第0次个人作业

    [2019BUAA软工助教]第0次个人作业 一.前言 我认为人生就是一次次地从<存在>到<光明>. 二.软件工程师的成长 博客索引 同学们在上这门课的时候基本都是大三,觉得在大 ...

随机推荐

  1. Linux:U盘安装Linux系统

    前天一个同学找我帮忙安装Linux系统,没有光盘,也不想在虚拟机里安装,在此情况下,我就采用U盘方式来安装Linux系统了.又想到还有其他人可能也不会 使用U盘安装系统,这里就作一个简单的介绍. 1. ...

  2. java 的常用设计模式--大话设计模式

    设计模式:一个程序员对设计模式的理解:“不懂”为什么要把很简单的东西搞得那么复杂.后来随着软件开发经验的增加才开始明白我所看到的“复杂”恰恰就是设计模式的精髓所在,我所理解的“简单”就是一把钥匙开一把 ...

  3. jquery简单入门(一)

    相关: 本文参考<锋利的jQuery第二版> 写在前面: jQuery作为javascript框架,是做网页交互工作者,一个值得学习的优秀的前端框架... 百度指数分析:(http://i ...

  4. 【hbase】——HBase 写优化之 BulkLoad 实现数据快速入库

    1.为何要 BulkLoad 导入?传统的 HTableOutputFormat 写 HBase 有什么问题? 我们先看下 HBase 的写流程: 通常 MapReduce 在写HBase时使用的是 ...

  5. 无穷滚动(Infinite scroll)的实现原理

    1 无穷滚动(无限加载)与分页的比较 现在越来越多的网站或者博客的列表页开始抛弃传统的分页技术,大致的原因在于,分页明显地增加了用户的操作行为以及页面加载等待的时间,而网页浏览者往往没什么耐心. 而无 ...

  6. HowTo: Linux Server Change OR Setup The Timezone

    Method 1 #tzselect # select timezone e.g. Asia/Shanghai#echo 'Asia/Shanghai' > /etc/timezone # se ...

  7. rhel7端口开放和查询

    开启端口 firewall-cmd --zone=public --add-port=80/tcp --permanent 命令含义: --zone #作用域 --add-port=80/tcp #添 ...

  8. IIS7 配合 vs2013内置 LocalDB使用

    错误提示: 在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误.未找到或无法访问服务器.请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接. (provide ...

  9. 大话设计模式C++版——工厂方法模式

    工厂方法模式是以简单工厂模式为基础的,如果未了解简单工厂模式的同学可先浏览<大话设计模式C++版——简单工厂模式>.在简单工厂模式中,提到过简单工厂模式的缺陷,即违背了开发—封闭原则,其主 ...

  10. Java Web开发之分页(ajax)

    1.需要用到的jar包.js文件 JSONArray().fromObject()需要的jar包: (1)commons-beanutils-1.8.3.jar (2)commons-collecti ...