@
ARjason 哈哈,随手一打你们这样手动点赞,我不继续补充都不好意思走了。结合我的互联网小团队从业经验、同学的大外包公司从业经验,来写些干货吧:
1. 一直不明白为什么现在很多企业要求 PHP 开发者有 HTML CSS JS 能力,现在不是前后端分离了么,这是要全行业招全栈工程师的节奏么。所以,我建议 LZ 应该深入研究一下 计算机网络 操作系统 设计模式 PHP代码优化 数据库等知识,这才是一个后端程序员正道。(对于有志于从事外包行业的同学,可以关本页了 ~ 多说都是泪,那段时间几乎每天要去安慰我那朋友,槽点太多)
2. 学生时代,大多数人写的最大的项目大概也就是课设、帮老师做外包。所以,对于真正大项目(10w行以上)缺乏(完全没有)了解。对于 MVC 软件架构 设计模式 软件工程 这些名词,完全没有概念。简略说一下我们团队的代码结构,更明确的完全前后分离的 MVC :
* 前端:Angular.js + Android + iOS => 公用一套 RESTful API
* 后端:(注:以下功能只是重要部分,不是项目根目录下的文件)
— View 视图:负责生成 API
—Controller 控制器:复制将各个接口组合起来,传递给 视图 进行数据渲染(格式化后输出 JSON)
—Handler 处理机:被控制器调用,复制对数据进行加工
—Logic 业务:被控制器调用,负责处理业务相关(例如调用其他内部、外部 API 等)
—Model 数据模型,其中有分以下两个子层:
—— Data 数据包装层:对数据库相关操作进行封装
—— ModelDefine 数据定义层:通过 ODM 或 ORM 进行定义
— Lib 工具库:封装各种常用的公共功能,使接口统一易用,如日期格式化、随机数产生、字符串校验
— Opt 平台其他软件封装库:封装其他中间件的功能,如 Redis RabbitMQ 等
— Dev 开发工具:包括代码强制分析、执行测试、性能分析等等
— Test 测试:包含 功能测试、单元测试、集成测试、性能测试等等
看,实际生产用途的项目是很复杂的。并且我们内部有一个 109 条的强制性规范(Python 的),从代码格式、命名定义、功能分割、基本语法优化等方面限制每个人。这样的好处是每个人的代码都是整洁的,每个模块都是去耦合的,可以分开单独测试。LZ 可晓得测试驱动开发?
我是3年前接触的 PHP,在写过一些项目后去年初成为了 PHP 一生黑 (哈哈 ~)但,PHP 很少会对代码进行编译器级的优化(对比 Java 、V8),多人开发大项目时也容易对项目结构失控。并且,由于入手很简单,你可能遇到无数代码写得令人发指的队友(你见过实习生 完全不会 PHP 边学边做边往生产SVN中提交代码 么?外包公司。。。)这还不包括……
但有人说,这是都是工作之后才可以懂得的,要求大四学生完全熟悉这个是不是过分了?不好意思,我大三就已经从各自 blog 里把这些知识补齐了。这就是我一直说的,我们这些科班出身的和培训班出来的有什么区别?因为我们知道,什么是科学,什么是工程。科学:基本知识的深入理解并可以运用于实际是工程师的基本能力;代码的易读、规范、健壮是必须的,而不是高手才能掌握的。某天,技术领导说我们要利用 TCP 的特点和新出的长连接规范去优化 API 的性能,这时我们不应该傻掉;某天,产品说要加搜索自动补全的功能,我们可以用树型数据结构来很简单实现。敲代码培训几个月谁都会,我女友是学金融的,她还会用 Python 处理计量经济学上的问题呢。
所以,我之所以是回答这么多,是因为我看到现在有太多人想通过掉代码获得月薪上万的收入,太多人想通过互联网创业来一夜暴富。敲代码这个行业很有意思,你可以很容易一个人干4个人的活,也很容易被别人问候你全家人 ~ 最近的帖子如证
http://www.v2ex.com/t/211378 (写易读的变量名是品德,写注释是美德,写文档是公德,写了易读的变量名有写了注释还写了详细的文档并让我维护你的代码 哦 您是大恩大德)
最后弱弱说一句,希望 LZ 不要不高兴也不要受打击,把自己沉下来,放下 LOL Dota2 每天学习 10 个小时左右,深入学习基础知识。如果想进大公司多学习算法 数据结构 网络 操作系统 方面的知识,如果想进创业团队,学习设计模式、数据库、软件架构,多写一些曲折婉转(大误,其实是高度抽象)的代码,如自己写框架(一定要脱离业务)写 ORM 并完善其文档(这点很重要,在小团队写好文档你队友会爱上你的),这样大四再去工作也不迟。
科班出身的工程师必备知识:(个人观点欢迎讨论、补充)
《深入理解计算机系统》《现代操作系统》《计算机网络——自顶向下方法》
PHP 高级语法,PHP 代码优化技巧,《代码整洁之道》
《深入浅出MySQL:数据库开发、优化与管理维护(第2版)》
软件工程 《敏捷开发的艺术》测试驱动开发 RESTful 《大型网站技术架构》
完全在 linux 下工作,习惯命令行,并会用各自工具,比如 git docker Vagrant ssh 等等的。
使用 PHPStorm Xdebug Composer PHPUnit PHP-CS-Fixer 等 现代化的工具辅助你开发
(又是半个小时 ~ 哈哈 ~ 欢迎提问)
~ ~ 其实,我也是山东的 ~ 哈哈