文章背景:问题本身来自于知乎,但是我感觉这个问题很典型,有必要把问题在整理一下,重新分享出来。

当看到这个问题之前,我也碰到过很多有同样疑惑的同学,他们都有一个共同的疑问该学php还是nodejs,包括我自己也曾有过同样的经历。幸运的是,通过我内心的挣扎和对当前市场供需关系以及行业发展前景的综合衡量评估后,我还是在接触了java, php之后回到js这片天空上来了。一方面是客观因素,一方面是兴趣导致的,前端太好玩了,值得为此奉献一点激情或青春。
其实这也是一个开发者成长必须经历的一个洗礼,一个磨难,一个挑战,他是一个必然的过程。很多人不差智商,不输情商,四肢健全,就是学不好一门语言。我认为最主要还是败在了坚持,专注上面了。经受不住内心私欲或其它语言的诱惑,都一一败下阵来。缺少的就是:坚持专注。业界坚持专注代表: @司徒正美, @张鑫旭 。司徒大牛 600篇js文章,是岁月、历史和势力的见证。张同学42页博文也是伴随着我们的不断成长。
关于html5,他是个新东西吗?是新瓶装老酒而已,有实际处理问题的经验,可以平滑的过渡,学习成本很低,但并不表示没有。
 
然后说了解后台语言,到底要了解到什么程度呢?
其实说后台语言,其实他包括两类语言,一个叫操作数据库的语言,比如java,php,nodejs,ruby,python,c#等等。一个叫数据库操作语言,比如sql,包括insert,update,select,delete四个动作。所有的页面的一切数据交互都基于这四个操作。从我个人的经历推荐两本书:php与mysql程序设计,第四版,细说php,第二版。这两本都是比较全面的介绍了php,包含了php基本概念与mysql的知识,但都比较浅显,入门而已。
到现在你会发现,其实从前端的角度出发,语言有三种:操作数据库的语言,数据库操作语言,操作dom的js。然后就有方向了,学了js,学任何一门操作数据库的语言(后台语言),数据库操作语言,然后就可以自由组合搭配。而且语言之间有很大的相似性,都可以无缝的跨界。区别的是语言开发的所依赖平台,比如c#依赖于.net,php经常与apache,mysql结合,java依赖于jdk等等的。开发工具也各有不同,比如vs,phpstorm、zendstudio, intellij idea, eclipse等等。但他们的api却很像似,粗暴点说,你抄我我抄你,你中有我,我中有你。
从前端的角度出发我推荐2门语言:php,nodejs。想照顾一些老的东西,维护一些老项目,就选php。展望新方向尤其io操作比较频繁的可以了解一下nodejs。这两个语言各有所长,只是nodejs从语法上来说跟js是无缝的。php的oop跟接近于java的纯oop风格。但这2个从操作sql的方面来说,有很大的相似性。按照这个结论下来,无论选nodejs,php都可以,可以从主观上判断,你更喜欢那个。或者做一个小的留言板,看看那个更符合你的思维习惯。
一般的瓶颈就是你得少,建议多写,用解决实际问题的经验来跨越语言造成的障碍。
建议从以下的顺序来锻炼后台语言:
1. 留言板,
2, blog
3. 企业站,
4. 商城
5. 新闻综合站。
基础的入门之后,就是框架了,从我个人浅显的了解当中,分享一下经验,大概市面上有这几个框架:
1. ci 经典的轻巧框架,在全球的使用量比较靠前,入门比较简单。
2. thinkphp,国内人用的比较多,是国人开发,现在势头真猛,比ci封装的更好,也更傻瓜。
3. yii,这个是目前全球排名第一的框架,但是入门曲线稍高。
4. zend frame这是有php组织开发的框架,文档比较规范,也比较重,适合构建大型项目。
5. laravel 这是一个呼声比较好的一个新型框架,借鉴了Symphony,各方面比较优秀,博众家之所长,但是相对中文资料比较少。
等这些了解了,估计已经入门了,学习应该找到具体的方向了。另外兄弟连的视频教程,质量一般,胜在量多,从基础到框架,应有仅有,最主要是免费。
 
然后回归正题,只是建议你了解,点到为止,了解是为了把前端干的更好。那什么时候真正的深入学习?建议在学好js的前提之下,吃透js。
比如了解js的作用域,闭包,原型,继承,尤其是作用域与面向对象是js的特色也是与任何一门后台语言比较容易混淆的两个地方。
请向各个业界js大牛看起,不一定非要那么深的深度,但一定达到自己力所能及的高度。
比如有个自己的框架,如司徒正美avlon,比如有一个自己写的小框架,如玉伯的seajs等等。
 
另外我个人的经验:学什么语言不重要,重要的是趋势你学语言的动力,说白了真正的需求来自那些。我认为需求有两方面。一方面是内在主动型的。比如js学习到一定的程序,写了很多demo或想法需要用更个性化的方式来呈现,这时候需要建一个个人网站或博客来管理你的内容。这时候才选择语言,了解需求产生,开发,发布上线的流程,对你以后的前端工作也是有帮助的。另外一个是外在被动型的,比如同学,家乡的朋友,需要你帮忙做一个企业网站,小的电商网站来做为他们初期企业文化愿景宣传的一个互联网通道,这时候就是一个外在的需求。拿我个人经验来说,我的php经验完全是来自于一次接私单的经历。虽然那次私单以失败而告终,但我在一个月的业余时间里边彻底的了解了php的开发方式,语言特征,后来根据这个基础我成功的开发上线了另外一个朋友的个人网站:http://jing-ui.com,这个网站的开发心得一直想写,但机会不凑巧,只能说敬请期待。明确一个自己感兴趣的目标之后,在选择语言,以兴趣引导语言,学习才有动力。比如做网站,那可能就是php,nodejs,做个简单的blog,在实践中慢慢了解语言,在学习中慢慢成长。 nodejs或php都有各自的应用场景,要么选一个公司现在用的,要么选择一个适合自己思维的。
 
如果你学会了其中的一个,然后在去了解其它的,可以说,入门会很快,因为里边有很多相同的东西。
 
最后总结一下我个人的心得:每个人都有好奇之心,这对做技术的来说并不是什么坏事,正因为这颗好奇之心,不断的带领向前迈进。另外了解一下满足一下好奇心没什么不好。就如同我当时学习php一样,感觉学习之后有多牛B,真正的学习后做了一个网站出来之后发现,确实收获不少,对前端也有帮助。但是js的水平还是在原地,除了擅长使用jquery之外,并没有太多的擅长。所以我了解之后迅速回归到原生js的学习当中,就是发起的这个项目jikeytang/frontcode · GitHub
豪情前端作品列表: 然后这是我写了2个月的战果,放到生产中去,肯定有不少bug,但重要的是迈出了第一步。
到目前为止我感觉,还没有达到一个自己满意的力所能及的高度,努力中。但人的精力是有限的,能力是有限的,在有限的精力里边把一件事情做好就已经很不错了。 
 

前端开发qq群:348090425 ,禁止闲聊,非喜勿进~!

 
 

做为一个前端工程师,是往node方面转,还是往HTML5方面转的更多相关文章

  1. 前端工程师如何快速的开发一个微信JSSDK应用

    亲们,订阅号出来已经很久了,作为一个前端工程师或者全栈工程师,你是不是错过了什么?大概许多攻城狮同砚还没有反应过来订阅号怎么回事,就马上要被微信的应用号秀一脸了.在应用号还没有正式出来之前,我们赶紧一 ...

  2. Web前端工程师成长之路——知识汇总

    一.何为Web前端工程师?          前端工程师,也叫Web前端开发工程师.他是随着web发展,细分出来的行业.Web前端开发工程师,主要职责是利用(X)HTML/CSS/JavaScript ...

  3. Web前端工程师成长之路

    一.何为Web前端工程师?        前端工程师,也叫Web前端开发工程师.他是随着web发展,细分出来的行业.Web前端开发工程师,主要职责是利用(X)HTML/CSS/JavaScript/D ...

  4. 如何成为一名优秀的前端工程师 (share)

    发现一篇不错的博文,和大家分享一下,为有志成为一名优秀前端工程师的童鞋们提供一个参考. :)~ 本文来源:http://www.biaodianfu.com/what-makes-a-good-fro ...

  5. 如何成为一名优秀的web前端工程师(前端攻城师)?

    程序设计之道无远弗届,御晨风而返.———— 杰佛瑞 · 詹姆士 我所遇到的前端程序员分两种:第一种一直在问:如何学习前端?第二种总说:前端很简单,就那么一点东西. 我从没有听到有人问:如何做一名优秀. ...

  6. 如何成为一名优秀的web前端工程师(转给自己,共勉)

    来源:王子墨的博客 程序设计之道无远弗届,御晨风而返.———— 杰佛瑞 · 詹姆士 我所遇到的前端程序员分两种: 第一种一直在问:如何学习前端? 第二种总说:前端很简单,就那么一点东西. 我从没有听到 ...

  7. Nicholas C. Zakas(JS圣经:JavaScript高级程序设计作者)如何面试前端工程师

    Original Post:Interviewing the front-end engineerNicholas C. Zakas,2010年1月5日翻译完成:2010年1月7日,最后更新:2010 ...

  8. Nicholas C. Zakas如何面试前端工程师

    转载自:http://www.cnblogs.com/yizuierguo/archive/2010/02/04/1663767.html Original Post:Interviewing the ...

  9. 写给初学前端工程师的一封信 (转于Kejun)

    大家好: 应波波的邀请写一写我对这个话题的想法.从去年开始不少朋友让我帮忙介绍前端工程师,绝大部分忙都没帮上,原因是真找不到人.我当时是这么跟他们分析的:过去的客户端以browser为主,所以HTML ...

随机推荐

  1. VS2015调试时没有启动IIS Express Web服务器 或者停止调试时 IIS Express 跟着关闭

    解决方法: 打开 解决方案资源管理器 -> 点选 Web 项目选择 -> 属性 -> Web "服务器"  去掉勾选"将服务器设置应道所有用户" ...

  2. Linux 关于Transparent Hugepages的介绍

    透明大页介绍 Transparent Huge Pages的一些官方介绍资料: Transparent Huge Pages (THP) are enabled by default in RHEL ...

  3. 用普通计算机假设基于liunx系统的NAS部署FineReport决策系统

    何为NAS? 简单说就是连接在网络上,具备资料存储功能的装置因此也称为“网络存储器”.它是一种专用数据存储服务器.他以数据为中心,将存储设备与服务器彻底分离,集中管理数据,从而释放带宽.提高性能.降低 ...

  4. 项目自动化建构工具gradle 入门2——log4j输出helloWorld

    上一章节呢,有一个能跑的程序了.但是对做工程的人来说,用日志输出感觉比用System.out要有档次一点.比如使用log4j.直接上例子: 1进入D:\work\gradle\log目录  ,您电脑没 ...

  5. 如何给SVG填充和描边应用线性渐变

    给SVG元素应用填充和描边有三种方法(戳这里学习SVG填充和描边的相关内容).你可以使用纯色.图案或渐变.前面两种方法我们之前已经讲过了,现在我们来讨论第三种方法——渐变. SVG提供了两种渐变——线 ...

  6. [LeetCode] Assign Cookies 分点心

    Assume you are an awesome parent and want to give your children some cookies. But, you should give e ...

  7. [LeetCode] Delete Node in a BST 删除二叉搜索树中的节点

    Given a root node reference of a BST and a key, delete the node with the given key in the BST. Retur ...

  8. [LeetCode] Power of Three 判断3的次方数

    Given an integer, write a function to determine if it is a power of three. Follow up:Could you do it ...

  9. js整理

    Js脚本语音 网页里面使用的脚本语音 基础语法 注释语法  单行注释// 多行注释/**/ 嵌入js代码  尽量靠下写  用<script type="text/javascript& ...

  10. WebApp 九宫格抽奖简易demo

    代码如下: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <met ...