月度归档:2021年09月

nginx的多条件and配置

set $match_host '0';
set $match_url '0';
if ($host ~ "192.168.1.105") {
    set $match_host '1';
}
if ($request_uri ~* "test") {
    set $match_url '${match_host}1';
}
if ($match_url = '11'){
   return 404;
}

什么是全能程序员?全能程序员怎么来的?

最近看到阮一峰的《全能程序员 vs 特长程序员》提到观点,结合自身经历,发表一点不同的看法。

  • “软件行业"全能程序员"的出路,明显不如"特长程序员"”

  • "全能程序员"在这个行业是不受待见的,被视为"万金油"。

什么是全能程序员?全能程序员怎么来的?

一个程序员,如果长期在某一领域工作,可能会发现原有的知识不够用,这时候需要学习新的知识,恰好你乐意去学习,你也能挤出活创造时间和机会,然后你就去学习并掌握了,你运用和掌握的学习的知识,在使用的过程中你逐步发现他们的原理,了解新知识与旧知识的联系和异同,久而久之,你掌握了解的新知识越来越多,能解决的问题越来越多,虽然随着时间的迁移许多新知识也变成了旧知识,但是在别人眼里,你成了他们眼中各方面问题都能解决的“全能程序员”。所以:

  • 全能程序员的定义应该是:在某一领域,能够解决大多数别人不能解决问题。而不是能解决别能解决的问题的大多数。

  • 全能程序员是怎么来的:全能程序员是遇到问题后不断追根究底,在别人已经停止研究情况下,仍然不断学习和探索,直到到最终解决问题或者找到问题的最优解,在这个过程中不断积累成长起来的。

全能程序员的优势

  • 成为全能程序员是很多职位的最佳途径,如:CTO, devops, 架构师

  • 更好的解决问题的办法:如果将程序员比做木工,在全能手里,永远不止有锤子,全能程序员不可能只会干钉钉子的活,他们抛光会用狍子,打眼会用锉子,电锯和电转也是最先掌握的

  • 最快找到问题的解决办法:他们清楚整件事情的来龙去脉和原理,找问题不用开IDE,在心里就能完成DEBUG和需求分析,开IDE只是为了验证和最终解决问题

  • 最高效的解决问题方式:他们从架构上,组织上找到最有效率的协作方法,他们明白每多一道沟通就是浪费

  • 最节省资源:好比电脑CPU没在空耗,老板付一份工资找了一个需要几个人干的活

全能程序员的缺陷

  • 个人的精力是有限的,你不能一个解决所有问题,你仍然需要一个靠谱的团队,电脑可以不休息人需要休息

  • 思维切换需要时间,电脑可以多任务人往往不可以

  • 你个人的能力会被其他人平均,老板可能愿意付你2倍工资,往往没法付你10倍工资,即使你是10倍程序员

  • 你需要付出的比别人多,除非你乐意,否则没法坚持

全能程序员/全能非程序员的现实例子

全能非程序员的例子:

  • 毛泽东不仅会打仗,诗的气势普通人恐怕也很难达到;
  • 本杰明富兰克林不仅能当好总统还会发明创造;
  • 达芬奇不仅能画好蛋;
  • 马斯克创Paypal、造车、造火箭和造星链。。。

全能程序员的例子:

  • 几乎所有编程语言发明者都精通其他一门到多门语言
  • 合格的devops或者架构师都精通一门语言+数据库+非关系存储+linux+分布式

事情的本质

  • Python、C++是全能的,PHP、Go、R、Lisp是特长的,他们都是成功的
  • 罗技、格力专注成功,联想、华为、小米、通用不那么专注也很成功
  • 马云不会编程能带领阿里成为技术性领先的公司,马化腾、王兴、张小龙搞技术的也不会因此管理和产品能力就差一点

总结:全能和特长本不矛盾,各阶段选取合理的发展方向。作为技术人在一个学习好英语,掌握几门编程语言、几种数据库、学习下devops,学习管理、产品和运营,先成为一个领域专家,然后架构师,CTO,再自己创立公司,仍然不失为一条明确的路径。