成为程序员
准备把这些年总结的,关于程序员的一些零散的经验汇总成一本书,书名暂定为:《成为程序员》
在线阅读地址:
https://become-a-programmer.2baxb.me
github地址:
http://github.com/qdaxb/become-a-programmer
本作品采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可,转载请注明作者及原网址。
准备把这些年总结的,关于程序员的一些零散的经验汇总成一本书,书名暂定为:《成为程序员》
在线阅读地址:
https://become-a-programmer.2baxb.me
github地址:
http://github.com/qdaxb/become-a-programmer
比如某天接到一个电话:
”喂?是秦迪吗?你那边负责微博视频是吧?现在上传流程里不能自定义xxxx,你那边的接口能不能加一个XXX功能?“
或者某天收到一封邮件:
秦老板:
需要开通a.b.c.d机器权限,请确认。
或者突然有个人过来找我:
“我这边有三个方案,blablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablabla,你觉着哪个好?”
或者突然被拉到一个群里:
@axb 看一下吧。
或者遇到了紧急问题。
axb:@xxx 现在什么情况?
xxx:在看
….30分钟后….
axb:@xxx 怎么样了?
xxx:还在看
沟通不畅不但浪费时间,而且特别影响一个人的心情,有时候甚至会怀疑到底是自己还是世界出了问题。
微博上前些天有人让我分享一下如何沟通,这我觉着很难以理解,就像我难以理解为什么有人能把几句话就说明白的事情搞的跟天体物理学公式一样。想要通过沟通说服一个人(比如销售商品)确实很难,但是仅仅是日常交流想要把话说明白的话,根本没有那么多所谓的技巧啊?… Read the rest
前几天帮忙排查一个问题,简单记录一下。
答题服务,近期用户答题率(答题人数/发题时的在线人数)有明显下降,需要分析这部分用户没有答题的原因。
在初步排查基本排除了服务端整体性能问题之后,接下来的问题是:这一部分IOS用户为什么在房间里但是没有答题?
可能的解释有几种:
前些天,我在各种论坛里发招聘贴,遇见X君,前来问我道,“你可曾为招聘贴写过什么软文吗?”我说“没有”。他就正告我,“那还是写一点罢;现在的招聘贴不写点鸡汤文是没有人转发的。”
于是我思考许久,想起去年大约也是这个时候,写过一篇名为《如何从菜鸟程序员成长为(伪)高手》的技术鸡汤文,反响还不错。一年过去,似乎自己又成长了不少,就干脆再写个续吧。
工作了挺久,发现有个挺有意思的现象,从程序员、高级程序员,到现在挂着架构师、专家之类的头衔,伴随着技术和能力的提高,想不明白的事情反而越来越多了。这些疑问有些来自于跟小伙伴交流,有些是我的自问自答,有些到现在也想不清楚,这篇文章就来写一写这些问题。
上篇文章谈到很多新人程序员学习没有方向的问题,在渡过了一段时间的新手期之后这类问题大多都会变得不再那么明显,工作的方向也会逐渐变得清晰起来。… Read the rest
现象是这样的:每天到了某个时间点,就会出现服务不稳定的情况,偶发接口调不通。
线上业务使用了lvs-nginx-tomcat三层结构,首先查看tomcat监控,没有什么特别异常的情况,响应时间和错误码没发现有什么异常,CPU、IO等等指标也都正常。
再查看nginx上的监控,发现在某个时刻这个服务的5xx报错突增,大概7、8秒之后又恢复了。
继续在nginx服务器上找线索,发现Nginx在那个时间点会出现报错:
1 2 |
2015/12/24 10:30:38 [error] 13433#0: check time out with peer: 10.79.40.1xx:80 |
线上nginx会每秒探测后端所有服务器的某个uri,如果返回的http状态码是200则认为正常,连续3次探测失败则摘除探测失败的服务器,直到探测成功再恢复。
从日志中可以发现nginx在出问题的时间点对于后端所有tomcat的探测请求都出现了问题,导致摘除了所有后端服务器,在这段时间里请求会报502异常。… Read the rest
记录一下最近的状态。
2012-02-27 23:44
嵌入式就【】【】是个坑啊【】【】!!!
闲着没事看嵌入式的【】【】你伤不起啊!!!
哼着小曲儿屁颠屁颠的买了开发板!!!
买回来以后我就震惊了啊!!!
这尼玛买开发板送 14 张 DVD 有木有啊!!!
14 张 DVD 啊!!!不知道的以为我买的是苍老师合集啊!!!
花了一晚上才尼玛把片儿。哦不,教学资料拷完啊!!!
本来以为这就能开始玩开发板了。
后来才知道这【】【】是白日做梦啊!!!!
接线就接了一整夜啊!!!
接上以后尼玛计算机不认啊!!!
白屏啊!!!
黑屏啊!!!
叹号啊!!!
问号啊!!!
输入没反应啊!!!
尼玛插个串口线还要前戏啊!!
开发板湿没湿不知道,反正我是湿了啊!!!
劳资做足了 4 个钟头的前戏!!!
好不容易有反应,超级终端开始刷屏了!!!
我妈进门一看还说你们这些搞程序的真厉害。… Read the rest
假设你已经读过烂代码系列的前两篇:了解了什么是烂代码,什么是好代码,但是还是不可避免的接触到了烂代码(就像之前说的,几乎没有程序员可以完全避免写出烂代码!)接下来的问题便是:如何应对这些身边的烂代码。
改善代码质量是项大工程,要开始这项工程,从可维护性入手往往是一个好的开始,但也仅仅只是开始而已。
很多人把重构当做一种一次性运动,代码实在是烂的没法改了,或者没什么新的需求了,就召集一帮人专门拿出来一段时间做重构。这在传统企业开发中多少能生效,但是对于互联网开发来说却很难适应,原因有两个:
很多人一谈到单元测试就会想到xUnit框架。对于一些java新人来说,会用jUnit就是会写单元测试,高级点的会捣鼓一下testng,然后就认为自己掌握了单元测试。
而实际上,很多人不怎么会写单元测试,甚至不知道单元测试究竟是干什么的。写单元测试要比写代码要难上许多,而这里说的难度跟框架没什么关系。
所以,在开始介绍spock之前,需要先抛开框架,谈谈单元测试本身的事情。在理解了单元测试之后才能更清楚spock框架是什么,以及它否能够更优雅的解决你的问题。
写代码免不了要做测试,测试有很多种,对于java来说,最初级的就是写个main函数运行一下看看结果,高级的可以用各种高大上的复杂的测试系统。每种测试都有它的关注点,比如测试功能是不是正确,或者运行状态稳不稳定,或者能承受多少负载压力,等等。… Read the rest
写代码的第一步是理解什么是好代码。在准备bootcamp的课程的时候,我就为这个问题犯了难,我尝试着用一些精确的定义区分出“优等品”、“良品”、“不良品”;但是在总结的过程中,关于“什么是好代码”的描述却大多没有可操作性
随便从网上搜索了一下“优雅的代码”,找到了下面这样的定义:
Bjarne Stroustrup,C++之父:
- 逻辑应该是清晰的,bug难以隐藏;
- 依赖最少,易于维护;
- 错误处理完全根据一个明确的策略;
- 性能接近最佳化,避免代码混乱和无原则的优化;
- 整洁的代码只做一件事。
Grady Booch,《面向对象分析与设计》作者:
- 整洁的代码是简单、直接的;
- 整洁的代码,读起来像是一篇写得很好的散文;
- 整洁的代码永远不会掩盖设计者的意图,而是具有少量的抽象和清晰的控制行。
Michael Feathers,《修改代码的艺术》作者:… Read the rest