快三年的 PHPer 的困惑。

2016-08-20 11:09:11 +08:00
 CuminLo

初中学历, 13 年参加 PHP 培训 5 个月, 14 年工作至今。 将近 3 年一直 PHP 后端开发,不属于大牛,应该中等的水平,能独立解决工作中的问题。

目前一是觉得自己的 PHP 提升太慢,二是感觉自己啥都不懂。 我其实对技术感兴趣,详细说一下自己的经历,各位 V2er 看看我到底是怎么了。

写着写着就发现其实我可能想更多了解底层的一些技术,想知道原理,所以我才重新学习 C ,学习 C 可以写 PHP 扩展,也行能提高我对 PHP 的理解。我不知道我表达清楚没有,请求 V2er 的建议。

8164 次点击
所在节点    程序员
52 条回复
chuxiwen
2016-08-20 15:43:26 +08:00
”其实我就是不懂得太多了,发现自己想写东西写不出来了” 能发现这是根本问题是好的,但是越往后你越会发现,很多问题是没有现成答案的,都需要你自己下(很大的)功夫才能有结果。

所以我要问的是,你想要写什么 go 满足不了你?

主要是我不能理解是 “ go ” 不是你想要的,他只是个语言。

你可以用 python 做 neural network , r 做统计, Java 做大数据处理, typerscript 做 网页, ruby 做业务逻辑, node 做 realtime communication ,不要太背你所用的语言拘束
keikeizhang
2016-08-20 15:49:03 +08:00
个人感觉未来也会有和您一样的困惑,我高中就开始接触计算机编程,当时学习的是 C++,但是遗憾的是没有坚持下来,荒废学业,因为我对感兴趣的事情会投入极大的精力去完成,导致成绩从年组前几名到中下游的。
------------------------------------------------------------------------------------------------------------------------------
但是穷乡僻壤的地方根本没有这样的氛围,也不能经常上网(网吧),偶尔的计算机课还会被占用。
高三时候感觉这样下去也不是办法就又开始学习,万幸压着分数线考上自己喜欢的大学,和计算机网络专业。
------------------------------------------------------------------------------------------------------------------------------
毕业三年几乎没有写过太多代码,就是偶尔的一些微信开发会写一些简单的需求,从微信服务器 pull 一些数据然后存入数据库。
------------------------------------------------------------------------------------------------------------------------------
初级到不能再初级,以前上班的时候没事就自己拷贝各个网站的静态首页,小米,京东,淘宝,苹果,反正都是 HTML+CSS 就可以搞定的东西,自己还自得其乐,现在才知道自己技术有多渣。
------------------------------------------------------------------------------------------------------------------------------
正式成为程序员(我感觉我都不算一个合格的程序员,也就是一个入门级的),写两个项目以后感觉自己恨不得辞职去学习一下,真的就是这个感觉,但是显然是不可能的,攒钱结婚啊!!!!(我没有虐狗)
------------------------------------------------------------------------------------------------------------------------------
至于为什么会转行,第一程序员是我能从运营岗位转行的唯一选择,起码以前的工作还会开发一些小玩意和自己拷贝一些静态网页,以前没有想转行是因为压根就没有想过要干这个行业,有时候我就单纯的把写的这些小玩意和网页当成自己的一个兴趣,每写完一个可以和女朋友炫耀,哈哈!
------------------------------------------------------------------------------------------------------------------------------
mcfog
2016-08-20 16:49:23 +08:00
转载自己的回答


### 想清楚学习的目的,避免为学而学

比如高并发,秒杀,架构,这些经常都是现有业务接触不到的东西,学习起来一般两种目的:要么为了应对面试,要么为了日后业务发展,需要的时候能够顶上(知识储备)。不同的目的有不同的学习手段和目标程度。比如如果为了面试,那么做到有一定了解,清楚场景、常见解决方案即可,面试的时候也不用瞎编,就说没机会接触但了解过如何如何,就是很好的回答了。如果是为了业务发展,如果当前公司很快就会发展到那个程度,那就得要到实战的地步,可以找老板沟通,老板说不定正发愁呢。

但如果你的公司离哪个场景很远,你又不打算跳槽,那就别浪费宝贵的时间,学点别的吧

### 实践,实践,实践!

无论你习惯看书,还是习惯视频,还是像我一样习惯面向 google 面向 stackoverflow 学习,学习唯一不变的终点永远是实践。无论你的学习目的是什么,开始之前永远都先给自己准备好实践的机会。公司需要就和老板沟通,公司不需要就自己业余开小项目,不方便的话,那就学到“了解问题点,了解常见解决方案”的程度停止

你已经具备很好的知识面,那么结合公司当下/未来的需求找到突破口应该不是难事,争取结合公司发展所需来学习是效率以及收益最高的,相信我,老板永远最喜欢那种公司需要什么技术就能跳起来说“以前我看过这个东西,有三种方案,我觉得 B 方案目前最适合我们公司的情况,我能带头把这个做出来”的员工

### 场景是王道

上面两点中我一直反复在聊场景,其实和英文很类似,英文的核心能力并不是几万的单词量,也不是多么高深的语法,而是“语感”,或者说,从场景联系到合适的表达方式,以及反过来从别人的表达中领会场景的能力。

书和视频,包括网上搜索,绝大多数都只能解决“ how ”的问题,但我始终认为"how"几乎是最不重要的事情,至少对于互联网技术来说,除了极端场景, 99%的情况下,“ how ”都不是问题,不就是找最合适的那个类库看下文档,调用调试一下么。问题的关键永远是“ when ”和“ what ”,偶尔是“ why ”

+ how: 是怎么达成某件事情(比如怎么支撑大并发吧),这其实真的不太重要
+ when: 什么时候需要引入支撑并发的方案? 一台常见的单核 8G 服务器能支撑多少用户并发?怎么监视并发量从而确认是否需要扩容?常见的并发优化能有多少并发量的提升?这决定了**业务成长到什么地步要考虑引入相应方案**,过早优化是万恶之首
+ what: 并发问题的核心是解决什么问题? 比如一个方向是横向扩容/自动扩容,另一个方向是高并发下的数据一致性(事务和分布式事务),当然也还有单机并发优化。如果你理解了就会发现,单机优化确实重要而且是基础,但绝大多数时候远远不如前两个管用。如果你懵懵懂懂就奔着“高并发”这么个词,学了一堆单机优化的东西,可能最后派不上用
+ why: 为什么公司需要这个技术?业务和技术的结合点在哪里? 是你的公司的商业模式决定了需要靠支撑大量并发来盈利么?是公司的业务数据宝贵不容有失所以需要强大的异地容灾?还是因为公司业务无法接受当机时间过长,所以需要灾备,需要柔性高可用?当然,也不能排除“高层喜欢这个技术”这个稍稍令人丧气的理由。

合起来看, how 之外的那些问题,简单地说就是场景问题,想通这个真的非常重要,只有想通这个,你的学习才是有目的,有条理,有计划,有最终成果的**有效学习**
shiny
2016-08-20 17:49:15 +08:00
三年经验的时候不应该离开语言层次了吗?
a7a2
2016-08-20 20:25:35 +08:00
求好友, go 进程中 。。。
额你的 go 如何 gui 的
CuminLo
2016-08-20 21:35:55 +08:00
cgcs
2016-08-20 21:50:47 +08:00
www.Coursera.org, EdX

这些地方的在线课程质量远超培训机构,而且免费~~~

certification 才收钱
huntzhan
2016-08-21 00:19:31 +08:00
个人认为最重要的是解决问题的能力, problem solving skill, 而不是说你对某个语言有多熟悉. 举个例子:

* 如果工作中要你写一个简单的语法解析器, 你是否有足够的算法能力可以快速解决这个问题?
* 如果你的业务的访问量在可预见的未来会翻数倍, 你是否有能力解决 scalability 的问题?
* 工作中 PM 提出了不合理的需求, 你是否有能力说服他并达成共识?
* ...
linfox
2016-08-21 03:14:57 +08:00
冒昧问下,楼主在哪个城市?
bombless
2016-08-21 03:58:33 +08:00
我也比较喜欢研究底层,哈哈。

之前的兴趣是 x86 的设计啦, win nt 的设计。
后面感觉如果我把花在 nt 上的时间用来研究 jvm 也许还比较容易获取满足感(滑稽

各种语言也尝试学习,争取是在各种主流语言之间无压力切换(
语言方面算是告一段落了。

最近几个星期在以非常慢的速度试图理解各种基础的三维图形处理。

如果 po 主还对语言感兴趣,欢迎来去年我投入了不少时间的 rust 语言中。 rust 刚一岁多,方便各种新人参与语言功能设计和决策,方便加入各种底层设计,修正编译器 bug 和完善基础工具链。修编译器挺有趣的,不来试试么。
主要是 rust 主要的用户还是关注底层和性能的人,就是说,设计不依赖垃圾收集,并且能正确处理并行的系统,感觉挺适合 po 主的,既关注底层也用于支持 po 主不曾学习但可能感兴趣的并行计算。
williamx
2016-08-21 09:51:12 +08:00
既然你是求建议的,我就实话实说啊,如果真的只是初中的学历,不建议你去学 C 和 C++,以及所有真正底层的东西,比如内存、虚拟内存,地址, CPU ,缓存命中,等等。不是说学不会,而是这条路比较艰辛,很多人花了几年时间在这些知识上面,也只是学了个半吊子,得到些似是而非的感悟而已,而平时工作中或是今后的工作中真正能用到的,也是很少。如果你对这方面有个人的兴趣,可以去找些描述性的文章来看看,分析类的就不要去浪费时间了。

上面有个人说得挺好,三年左右的时间,应该脱离语言了。就是说,你应该更加关注于业务的需求和解决。光研究语言是成不了大牛的。举个例子, PHP 也好, golang 也好,只是个工具,就好比一个铲子。业务需求要挖个矿,铲个屎,砸个人,埋个尸,你能用铲子搞定就可以了。难道铲个屎还要去研究到底要用个木头柄的铲子还是竹子柄的铲子?

没有单纯的说,提升 PhP 的技术的,而是说这个需求我能不能搞定。还是拿铲子来做比喻,让你去挖个坑你却没有力气,那你就是能把铲子舞出个花来,有什么用呢?所以你不应该把学习的重心放在怎么提升语言上,而是怎么解决实际的业务需求。

如果一定想要学些什么“语言”相关的东西,我建议去学下数据结构。其他的东西,抱定“面向 Google 编程”就可以了。毕竟,在软件研发这个行业,一直是有两条路可选的,一条是软件研究,理论研究,一条是软件开发,工程开发。
box
2016-08-21 12:48:14 +08:00
为 LZ 点赞。

有机会的话去请教 @Laruence
http://www.laruence.com/
https://github.com/laruence
CuminLo
2016-08-21 13:11:13 +08:00
@linfox 深圳
q397064399
2016-08-21 14:45:45 +08:00
CSAPP 算法第四版 瞧一瞧,然后提升下工程架构能力
spoonwep
2016-08-21 17:16:39 +08:00
跟楼主有同样的困惑,看了楼下各位大神回复,受益良多
muziyue
2016-08-21 18:01:21 +08:00
@spoonwep 友情提醒,你博客半年多没更新了
mingyun
2016-08-21 18:35:06 +08:00
同疑惑,感谢楼上各位的回复
ss8899ss
2016-08-21 18:35:32 +08:00
LZ 到我公司来吧
flowerains
2016-08-22 00:27:39 +08:00
@williamx @mcfog 获益良多,我也有相同困惑,感谢各位给了思路
weaming
2016-08-22 01:05:14 +08:00
@williamx 能不能详细讲讲这两条路的区别,工程开发也需要理论啊,理论研究也要考虑到实际啊

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/300591

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX