补充下背景,题主大学毕业一年。在一家小网络公司谋得一份稳定,但是技术含量不高的差事。因工作需要接触学习PHP(之前大学勉强接触了点C语言)。刚开始学习时感觉很有成就感,学习提高迅速。但是当学完面向对象,然后又发现学习PHP还要学js, jQuery, Ajax. smarty,think PHP. HTML. css. MySQL.等等等等……,最近感觉进步超级慢,信心受挫。
回复内容:
谢邀 !
实名反对高票回答!
并不是否定Elvic Liang的回答内容的正确性。我也知道编程就是算法+数据结构。可道理就好像我追求崇高的共产主义信仰一定能够获得平安喜乐,但眼前仍然要吃饱每一顿饭一样。
题主提到的这些技术栈和框架库和我大学时学的简直一毛一样。我也是一路从PHP/JavaScript/jQuery/Mysql/smarty/ThinkPHP等等学过来的。
TL;DR: 学习一个框架/工具/库的最短路径
首先英语要好
去看官网的文档
去看别人运用这个框架/工具/库开发的程序代码
自己尝试运用它写一些小demo
在实际工作中运用它
写一些自己学习它的心得体会,甚至是教别人使用的教程
参与这个框架/工具/库的讨论,开源项目贡献等
P.S. TL;DR的意思是如果你觉得这篇回答太长的话读到这里就可以不看了,而且下面的这些内容主要作用是安抚题主情绪,告诉他这个世界上也有和他有过类似经历的人。
我原本是一文艺青年,之前只有课上学的一点点C++的知识。大二一次偶然的机会,在人人网上看到学校Web实验室的师兄发布举办seminar的状态。同寝室有一个高中就开始参加NOI的同学拉上我就一起去了。
seminar上讲了Ubuntu,讲了HTML/CSS/JS,怎么登陆学院网站的后台修改内容,还有一些开源精神之类的扯淡。临结束的时候师兄还给我们展示了一个他用JS写的塔防小游戏。能自己写游戏一直是我儿时以来的梦想,于是乎就被勾引上这条不归路。
参加完讨论会的第二周,师兄把我们叫到了实验室,指着地上的一台电脑主机说:
这是我刚买来的服务器。
服务器是空的,没有预装的操作系统。在这之前我仅能够熟练安装各个版本的Windows操作系统,帮女同学修修电脑而已。
在只会拼写ubontu的情况下,我和我同学开始了凌辱服务器之旅。最后在一个不好意思说出名字的搜索引擎的帮助下找到了手把手的图文教程。装好之后看到光标一闪一闪的命令行感动得简直要哭出来。
后来很自然的就装上了LAMP,直接用tasksel设置一下mysql的密码就搞定了。其实到了这一步我都不能说会编程,充其量只是会用命令行的软件而已。
然后就开始跟着w3school的教程学php,五年前还没有这么多的MOOC,也没有这么多的培训班。很快我就能用echo在网页里面打出Hello,world!了。
我竟然能在浏览器里看到自己写的网页!这让我更加坚定不移地在这条不归路上走下去。后来学校又开了数据库的课,学了一点点SQL,试图研究过怎么JOIN,怎么多表查询,怎么做视图。后来写小应用的时候才发现,90%的时间都可以SELECT *出来然后挑需要的用就好。
紧接着又开了一门叫做Web程序设计的课,我本以为这简直是为我量身定做的。结果老师讲课用C#开发网站,在VS里面拖组件,数据查询用LINQ,搞得我整个人都不好了。虽然我没有任何黑C#的意思,可是整个学期我确实什么都没学。
期末考试是一个大作业,交一个自己设计开发的网站。结果我和我们组的同学在考试前一天上午才拿Wordpress和爬虫程序搭了一个新闻网站,然后考试拿到了满分。这也让我深深地体会了为什么PHP是全世界最好的语言。
这次经历也让我深深爱上了Wordpress,慢慢地也开始给Wordpress写写主题或插件什么的。可是做出来的东西总是不接地气,不符合学院领导和学校部门的审美,可他们却是实际上整天找我做事的人。
然后就开始研究国内的一些建站系统,用过DedeCMS/Discuz等等。可是逐渐的接触到的一些需求已经不能通过现成的建站系统实现了。
后来实验室接到了一个开发档案管理系统的项目,最早选型选到了一个用Zend Framework开发的CMS,这个CMS也是歪果仁开发的,也有很多不接地气的地方。ZF这个框架很臃肿,用起来很痛苦,和后来无比优雅的Laravel简直不能比。不过通过使用ZF我了解到了原来世界上还有框架这种东西,原来很多基础的函数功能是不需要自己写的,原来还有一种叫做MVC的设计模式。
由于ZF用起来太过痛苦,我就开始寻找别的合适的框架,很快就找到了ThinkPHP,真的是没想到国内还有这么优秀的框架。用起来非常简单,看完文档就能直接上手,而且最重要的是我终于看到有中文文档的框架了!
TP我用了非常久,做作业用,开发个人项目用,后来去实习的公司也在用TP,虽然我的开发岗是前端,可实际上当时除了数据库不用我管以外,后台的业务逻辑、前端的交互、UI的设计、甚至产品要添加什么新的功能基本都是我一个人搞定。创业小公司都是这样,即使不是全栈也得把你逼成全栈(现在全栈这个词就好像骂人一样)。
实习的那段时间刚刚好angular1发布了,数据双向绑定、前端路由、交互可以做到视图内容实时更新。才了解到原来还有一种MVVM结构的框架。在我关注ng的时候周围的同学都是不了解的,因为当时基本没有什么中文的教程,更别提中文的文档,唯一的学习资料就只有官网写的反人类的文档,还好Github上有一些用ng写的开源程序可以参考。
然后我就试着用angular1写了不需要刷新的单页面博客程序,后来也在工作中解决具体的业务需求。
我也写过很多博客,以前不会编程还是个文艺青年的时候在空间里写写诗写写歌,后来就写一些简单的教程,或者是安利某些比较好用的电脑软件和移动应用。一般我自己学会使用某个东西之后,也会写一篇教程来教别人怎么使用。毕竟学习的最高层次就是教授嘛。
图片来自于网络
然而到现在我也不敢说自己会编程。充其量只是会用一些用代码操作的软件而已。不过我想这也是真正学会编程的必经之路吧。
以上。
@Elvic Liang
我想说你这个答案很扯,作为一个全栈,一门语言拿来可以写的话不用三天,不用一天,拿着api,看看语法,就完全可以直接写了,但是一门语言的精髓三天、一个月、一年,都是完全无法全部掌握的,你说的框架、语言、数据库,每一样学一辈子都学不完。
而且我就不信你从来没走过题主类似的路,从出生开始就三天一个语言,而不是站在你现在能力的基础上说这些话。
我觉得你只是在显摆(zhuang bi)而已。
框架不是没用的,语言不是没用的,数据库不是没用的,它们都是一个时代的人思想的积累和技术沉淀。 反而对于一个初学者,算法、数据结构、体系结构才是不那么必要的,特别是一开始就没有掌握这些知识的人,看这些更是容易误解其内部原理,更是和实际项目联系不起来,造成一种似懂非懂的尴尬境地。
-------下面是对题主的建议-------
1、对于题主,你是边工作边学习,如果工作允许,你要做的就是不断的往你的工作中运用你想了解的新技术,如果时间或者项目不允许,你就给公司做一套,自己用需要学的技术再做一套,这里面想说的就是,
学习要和真实需求密不可分,才能够学的更快,理解的更深。 2、老牌程序员是不分前后端的,由于技术太冗杂,所以才分了前后端,你现在基本上是php后端这么个状态,而你要学的不过是前端技术罢了,细分的技术比你说的要多很多,但是他们都是共通的,都叫前端技术,你把他们分出来一个一个说就是说明你现在把他想的很复杂,没有入门,这种情况会在你的第一个全栈项目中迎刃而解。
3、
找一个力所能及的开源项目并参与开发 ,以你现在的姿势水平很难找到一个可以开发的项目,实在开发不了其实还是可以去看的,你的代码规范和国际接轨,并且参与合作式开发能让你懂很多一个程序员该懂的事情。
最后的最后当你开始能够(不管什么需求都能够通过各种别扭的方法做出来的时候),语言将不是你的瓶颈,那些思想算法和架构才会显现出来,这时这些才会是你要去想的事情。
玩了一年的unity,提高的也很慢,而且觉得之前写的东西都是渣渣
虽然有10几年的c++经验,图形引擎经验和n个小游戏经验,大概熟悉七八种语言,但是真的做一个中型独立游戏,才发现坑有多大
很多人一提到技术就喜欢夸夸其谈,恨不得把技术说成是黄石公传他的秘术
其实技术是什么?不过是在前人的肩膀上去攀登一个你想去的高峰的梯子,永远不要为了技术而技术,而要问自己想去哪里,想做什么,再去学习相应的知识,边做边学永远是最有意义的
我的兴趣是做游戏,我们就拿游戏举例,中国开发游戏的大牛,一抓都快一大把了,为啥做出来的游戏大多数还是《范伟打天下》?为啥没有几个游戏让你眼前一亮?甚至连fc上的冒险岛1都不如?(讲超级玛丽那属于欺负人了)
难道是他们基础知识储备不足?
因为所谓“技术”只是他们装逼的本钱
而不是他们创造一个真的有趣的东西的工具
一切技术最后都会过时,一切大牛最后都会死去,所以不用问自己进步的快不快,因为快慢没有什么意义
没有什么荣华富贵在前面等你,你焦躁什么呢?
技术的本质是:解决问题的一种方法
没有足够的时间,试错机会和自己的思考,你不过是背下来了一些前人的经验罢了,遇到了新的问题,你连找答案的方法都不知道
做自己喜欢的东西,并且把他做好,时间足够长的时候,总是有所成的
以你现在的情况为例,不要问自己学了多少种知识,现在就搭建一个你心目中的网站,途中你自然会知道自己缺什么了
题主的问题是
感觉技术提高很慢,怎么安抚浮躁的情绪? 所以这个问题本质上不是一个
技术问题 ,而是一个
心理问题 。
从十一假期回来之后,我开始健身,每天跑完步都去量体重,但是效果很不明显。我问朋友跑步是不是确实能减肥,他说可以,你
连续跑两周再去称 。
学习也同样是个
渐进 而
不易察觉 的过程,以
天 或者
周 为单位很难看到改变。不妨去看一下自己
一两个月前 的代码,相信能够看到自己的进步。
虽然都说前端繁杂,但其实前端的水并不是很深,可能用不到两年就能把基本的知识和理论都掌握。这就是一个
闻道有先后 的问题,无论先学哪个,后学哪个,知识总量一定等于时间乘以单位时间效率。
而关于“
新名词焦虑 ”的问题,在另外的回答中也说到过。当你掌握的
知识 越多,能够看到的
未知 就越多,这个问题是每个人都
必然 会面对的。当我们从“
不知道自己不知道 ”过渡到“
知道自己不知道” 的状态时,就会有这样的焦虑,伴随着迷茫持续学习,通过“
不知道自己知道 ”这个阶段,最终才能到达“
知道自己知道 ”,从而不再为此焦虑。
对于新技术的态度,以
需求 而不是
技术点 来看待它们。从工作中找到不便之处,或者想做一个新的好玩的东西,以此来驱动自己。比如我最近要做一个手机上的单页应用,就想用vue2.0来玩一下,新技术不是负担,而是在已有知识体系上的锦上添花。
不以掌握了多少知识,而以能够用
现有知识在有限时间内 做出什么样的项目作为对自己的认知标准,会更容易看清发展的道路。
谢邀,题主没有添加更多问题背景信息,在这里我只能笼统地回答:请给自己定一个具体的的,近期内可达到的,会给自己带来满足感的...小目标。
知道为什么打游戏那么爽,过了一关还想过第二关,玩的过程中那么专注吗?
By the way,我最近开了一个专栏“Node快闪”
https:// zhuanlan.zhihu.com/node flash ,专门推出一些容易上手的实战练习,每个不超过15分钟,还提供全部源代码,浮躁的时候可以试一个。
停,你干嘛要学那么多
且不说SQL应该是大学课程,这你拉下了自己的锅
CSS,HTML这种东西,难道不是用的时候对着手册开发,用个3个月自然就会了吗
你专门去学他作甚?学了用不上,还不是三个月就忘光?
JQuery不就是一个工具,本来就是为了方便使用的,为什么会需要专门学
至于ajax只是一个API,这东西一下午就应该看完了吧?
至于smarty,think PHP这又是什么鬼,你现阶段用的着这些东西吗?为什么一定要一口吃个大胖子?
最后送你一句话,实践出真知,任何技术,本质上最终目的是应用。你之所以觉得进步慢,说白了就是你在学一大堆你用不着的东西,无法和实践结合,当然进步慢。呆在PHP项目里,就专心学好PHP,这才是技术精研之道,当你发现问题产生需求时,然后找到一个对你要解决问题很有帮助的新技术时,自然就不会觉得累,而且很快就能学好了
说起来,刚好翻到上面有个答主……说……
“这是在这时,我大概就遇上了自己的第一次瓶颈,我处在HTML结构混乱,命名不规范,CSS还需要不断猜测某个地方到底是使用padding还是margin的这样一个阶段。
我开始认为我需要继续练习,继续仿页面。但是结果还是继续着混乱拼凑的代码。”
深感学习方法还是很重要
为什么要去猜测,仿照,而不是好好去理解下padding和margin的定义呢?
这很难懂吗?
这很难懂吗?
看题主列的这些无非:语言、框架、数据库。
作为一个写了14年程序的老头子可以很负责任的告诉你:别整这些没用的。
任何一个卓越的程序员,掌握任何一门语言、任何一个框架、任何一种数据库系统的时间都不应该超过三天。
因为计算机科学里面,万变不离其宗,最核心的只有:算法、数据结构、体系结构。
深入理解了相关的核心原理、思想以及常见系统以后,你看什么新玩意都应该能够瞬间抓住本质,吸收理解并且运用自如。
如果你想成为行业里面的个中好手或者顶尖专家,可以多关注:硬件架构、操作系统原理、编译原理、分布式系统。
这些能让你真正深刻理解计算机科学的核心。而其他任何东西、知识,都是从这些里面派生出来的。而且这些,说实话,魅力无穷,比其它东西有趣多了。
除此以外,一个最卓越的程序员、或者工程师吧,并不是因为技术最好,而是因为有领导能力,以及对所在行业的深刻见地。
比如如果你在移动互联网领域,那么卓越的程序员是这样的:
- 能够充当半个产品经理,站在产品的层面思考问题、设计程序。能够与产品、质量部门出色的完成沟通。
- 优秀的领导能力。能够凝结团队力量,获得团队的肯定与支持,确定技术方向。领导能力并不是说你一定是经理或者老板,而是在团队中,大家认可你的技术实力以及为人,自然而然的愿意听你的。
- 对移动互联网行业特点、趋势有深刻的理解。知道竞争对手的优势劣势,清楚自家产品的价值和业务流。
行业经验这个事情,太重要了。计算机说到底只是工具,离不开具体的行业应用。所以熟悉具体行业又精通计算机的人,才是最或缺的复合型人才。
----------------------------
以上这些很可能题主早都已经了解了,那就当我废话了吧。
再来聊聊感觉进步很慢这件事。
在我的职业生涯里面,也无数次感觉进步很慢,碰到了上升的瓶颈。怎么回事呢?
其实,学习任何东西都跟练长跑一样,跑到某个公里数的时候,你会精疲力尽感到再也跑不下去了。这恰恰是你的身体极限快要被突破的时候。此时,坚持下去,再慢再难也坚持下去。
很快你会发现步子开始轻盈了,前进的速度也变快了。那么恭喜你突破了现在的瓶颈,朝下一个极限出发吧。
-------------------------------
补充下回答:
看到评论里面有些朋友还在纠结框架几天掌握的问题,请不要太较真了。每个人对框架的应用程度不同,以我个人的应用程度和体验来看,三天足够了。
而且我说的三天,不同人学习效率、空闲时间、上手速度、基础和经验、应用需求都不一样,真的没办法比较。
有的人可以全神贯注、废寝忘食,排除一切干扰,三天学会一个新东西也不是什么奇怪的事情。有的人挤不出时间,自己本来忙的就不可开交,注意力没办法集中,学习效率可想而知。
所以请明白我的重点,是不要花过多时间精力在追逐新语言、新框架上。这些都是表面的东西,况且现在的新框架层出不穷,三天两头就换一拨新潮流、新的技术栈,几乎已经沦为了某些群体个人喜好、个人崇拜的玩具,我认为对于想踏踏实实掌握计算机科学精髓的人来说,并不值得花过多时间追逐。
作为卓越的程序员,首先看清楚方向,弄明白技巧、技能、思想之间的差别以及孰轻孰重,然后就是多一点点坚持,并不需要多少特别的技术上的指导,我认为已经足够了。
某高票答案太不靠谱了。
算法,数据结构,没人说不重要。但是你非要鼓吹基础万能论,那肯定是误人子弟的。基础就是基础,没有是不行的,只会基础也是不行的。你的雇主并不是为你的基础付钱的,你雇主需要的是你的上层应用能力,而不是这些不着边际的所谓基础能力。
给题主一点建议。技术学习一定要在使用中学习。
技术不要干学,很容易陷入半懂不懂的状况,而且没有正向反馈,让你很难有信心深入。最好明确一下,我想做个什么东西(能够使用你想学的技术的一个小应用,比如大家经常用来练手的 to do list)。考虑一下这个东西可能用得上哪些内容,粗略学一下然后直接上手做,遇到不会就再查。
不要担心你做得怎么样,边学边做肯定很糟糕,但是等你做完,大概就学会是怎么回事了,以后就可以继续深入研究下去。
楼主提到了最开始学习PHP时,提升很快,而现在却感觉不然的窘境。
这种情况我或多或少也遇到过,但仔细想想却很奇怪,为什么经验的提升反而带来了烦躁呢?
原来我有这么多还不会、什么技术学习路线比较“有前途”、学那些基本功是否有必要。。。种种类似的问题。
刚刚进入一个行业总是会有沉淀期的,怎么能把宝贵的时间浪费在烦躁上呢?
既然有不会的东西,那就一条条的列出来有什么不会的,一条条的努力攻破。
这个 repo 在前段时间很出名。jwasham/google-interview-university
这位仁兄给自己定下了未来做一名Googler的目标,他既没有烦躁自己曾经的不给力,也没有抱怨google面试的高门槛,而是列出了所有他需要准备的知识点(顺便还列出了非面试必须的CS通用知识点),并在努力预备着数个月后的面试。
如果,我们觉得CSS不会,那,是选择器不会,还是预编译器(LESS, SASS)不会,还是transition/animation 不懂? 不懂没关系,我们一条条的练。
如果,我们觉得Ajax不会,那,是跨域不懂,还是不知道该用哪种手段调Ajax,还是不清楚怎么样实现结合Ajax实现lazy-loading?不懂没关系,我们一个个的具体解决。
如果,我们觉得某一个框架/库不会,那,是具体API怎么调用不会,还是不明白这个框架/库的实现原理不懂。。。。。。。
我们很擅于高估自己一天能做些什么,却总是远远低估了长期坚持后所能看到的风景。
你学习需要制定一个明确合理的目标。
不要每种技术都面面俱到,不要去看太厚的书,那浪费时间。
只要能满足你的需要就行了。
生活不是把自己装进电脑里,而是实现自己的想法。