大学生学习编程(PHP)
在v2ex上看到一大三的求职实习,然后有人给出了建议,个人觉得也挺好,做个记录。/ 原帖地址
@ARjson问:
大三的学生党,求实习岗位,现居北京。
后端PHP一年半开发经验,熟悉speedphp,thinkphp框架,尝试封装过简单框架(https://github.com/Arthurjason/Micro-framework)
两年WEB重构开发经验熟悉DIV+CSS布局,熟悉jquery,可做前端
平时开发可在linux下进行,求大公司实习带走,谢谢
QQ:351192873
手机:18353580563
简历: http://www.wangfengxin.cn/
github: https://github.com/Arthurjason
@Feiox答:
一答:
我认识一些深圳、杭州、北京的朋友,他们往往更关注以下内容:
1. 代码(包括注释)的规范性、可维护性
2. 参与一些算法的研究与实现、开源库的创建与维护
3. 对新技术的探索,包括但不限于:新框架、新思想、新工具
4. 对 Github 上的作品极其认真负责,包括但不限于:良好的 commit 说明,干净的代码(实验性或已注释代码的不会出现在代码库中),以 feature 为单位进行代码提交、分支合并、bug 修复,对 Git 这种工作方式了如指掌。
5. 探索多人合作的技巧,并能主动去寻找、求助新的解决方案。
6. 对开源社群有深入的理解,知道开源不等于免费,以及知道什么该开源什么不该开源。
我接触过很多像 LZ 一样的刚毕业大学生,如果 lz 不介意我想提一提我的意见:
1. LZ 应该关注一下代码规范和设计模式。
2. LZ 的作品太过于浅显,并不能体现你的核心竞争力。并且如果着重强调 ThinkPHP 可能会带来减分的效果(在圈子内你多了解一下就知道)。
3. 楼主的 “ 熟悉 div+css 布局,可用 jquery 写简单特效,会使用 ajax ” 这有一种《精通CSS+DIV网页样式与布局》这种书的既视感,你可曾了解过 CSS3 Flex Angular.js React.js ?并且,如果你要搞非 MS 系的后端,Linux 是比必备技能,而不是可在 linux 下进行。# 记得刚入学时有个学长在某社团讲座中讲到 PHP 入门,开发环境要 WAMP 不会的来找我,呵呵,你入门为什么不试一试 `php -S <phpfile>` 命令呢?
4. 我看到 LZ 的 Github 上的代码,提交了很多已注释的代码,如果你的注释有助于他人阅读那是可以的,否则你自己调试的内容不需要让别人知道。另外,你们知道 Git 中的 .gitignore 文件用途么?为什么会出现 ThinkPHP 这个文件夹?再另外,如果你的团队里都是中国人,请使用中文写 commit,并制定团队规范(比如,我们就是采用 行为 + 功能修改 + (可选)涉及 API 变动简述(包含对应文档地址))
5. 最好能 在简历中说明你的团队工作经历,表明你已有与人协作的能力。并且能利用 Google StackOverflow 查找英文资料。很多团队很看重这个。
6. 对于把 Github 当成团队代码库还不用私有仓库的行为,你们不怕有人看过你们的代码然后让你们的网站挂掉么?用 coding.net 不也免费么。好吧,Github 果然是世界上最大的同性别交友网站,哈哈。但这不是开源。另外,适当使用各自开源工具,可以成倍提升工作效率。
二答:
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 等 现代化的工具辅助你开发
三答:
当下前端开发者应该慢慢学会放下对 jQuery 的依赖,Angular.js 和 React.js 是两种思维很独特的工具,并且适当培养在实际项目中自己的思想(如为什么说“声明式的代码更适合表现 UI 层”这类问题(我们在项目中就使用了很多自实现的声明式的 DSL (SQL 、HTML、CSS 都是应用最广的声明式代码)))。另外,现在的前端开发模式与十年前不同了,分毫不差的完成设计师的图纸是基本要求,但更讲究:
前后端分离、
* 规范化(了解业界规范,如 AMD、REST 等)协作(文档、注释)、
* 模块化(无论 UI 还是 JS,都不断抽象形成公共库)、
* 工具化(就是使用 node gulp 等工具)、
* 敏捷开发(极限开发 TDD BDD 等)、
* 新技术(HTML5 ES6 Tyescript)。
总体来说,主要还是需要四点能力:1.思考 2.抽象 3. 懒(善用工具)4.学习速度。不过,前端相比后端要简单很多,但优秀的前端工程师却是严重的供小于求的状态(各个创业团队基本都是处于跪求前端的状态