欢迎来到千里码话题版块。

我们会定期挑选程序员息息相关的话题让大家讨论:

1. 每个话题持续一周,话题结束后仍然可以继续讨论。点击查看所有话题

2. 用户投票的权重为自己当前的分数,权重会随着你的分数变化而变化。不能给自己的回复投票。

3. 关于话题的吐槽和建议,请移步话题吐槽专用讨论

4. 如果你有话题想拿出来给大家讨论,话题投稿请移步话题投稿专用讨论

5. 仅支持Markdown,不会Markdown请参考题目Markdown

更多请阅读帮助中心

奖励规则:

话题结束时发表得分最高的回复会以"优胜"的标记标出。发表该回复的用户会获得ikbc Poker3以及意见领袖徽章。

应该掌握哪些工具和技巧提高开发效率? 已经结束

程序员的工作时间大部分都耗在了开发上,那么对于开发效率的优化就显得至关重要了。即使只是提升开发效率10%,一年下来也可以为你节约大概10个工作日之多。

也正是因为如此,宣称能够帮程序员提升效率的工具和技巧层出不穷。每个有些经验的程序员都知道一些关于这方面的迷信和宗教,经历过一些华而不实或者疏于维护的工具,体验过号称能大幅提升开发乃至于整个人生效率的鸡汤……

浮华过后,相信每个程序员对于优化开发效率都有了自己的方案和心得。所以本期话题为“提升开发效率的技巧和工具”,希望大家分享自己的故事。

奥利奥   2016-08-28 13:10:20 提问 topic
13 个回答
优胜
ikarienator
48 人赞同, 0 人反对

我是一名硅谷的工程师,我只能谈谈我的想法以及硅谷的现状。

目录

  • 钱能解决的问题都不是问题

  • 操作系统环境 - 仔细掌握UNIX环境,要对Shell尤其是Bash有一定的了解

  • 数学是你的良师益友

  • 像使用筷子一样熟练的使用代码管理工具

  • IDE - 熟练使用“代码重构工具”,熟练掌握至少一个具有此能力的IDE

  • 英语!英语!

  • 个人心得:把接口设计成完全可以不需要文档就能理解的

  • 个人心得:学会掌握造轮子的时机


钱能解决的问题都不是问题

比如如果你的机器内存小,限制了你的工作速率,那么你就应该换一台大的机器。对于一个企业来说,如果这点成本都无法付出,那就不要待了。开发用的机器,应该最少最少要有8G的内存。

公司是不是应该开源节流?是的,但是不能以降低员工的工作效率为代价,因为时间比金钱更重要。这不是穷不穷的问题,而是算数能力的问题。


操作系统环境 - 仔细掌握UNIX环境,要对Shell尤其是Bash有一定的了解

现在硅谷最常见的操作系统是Mac OS X,并且大家基本上都会人手一个MBP。理由基本上是:1. UNIX的命令行/自动化工具比Windows完善; 2. 没有Linux的一堆破事,尤其是Licensing.

我所见过的唯一一家一半以上的程序员配联想笔记本运行Linux的公司是Google,还可能仅仅是Chrome组的特殊情况。我是经常看到Google程序员,用MBP当托盘在食堂打饭的。

最好的开发用的操作系统环境显然是一些Linux。最常用的是Ubuntu和CentOS,并且CentOS以其上Docker支持的完善著称。如果你不用编写底层的代码,只写JavaScript和HTML,那么OSX完全能胜任。

Web这个东西跟设计很近,而设计师们常常只使用Mac。这个原因很好理解,因为Linux上的GUI确实他妈的垃圾。有的小盆友就要抬杠了,你不喜欢GNOME就KDE啊,不喜欢KDE就自己写桌面服务器啊。但凡理解“软件工程”这个词的人都知道这里面的fallacy是什么,就不赘述了。

Mac OS X的很大缺点是,原始的文件系统是大小写不敏感的,导致git的很多问题。XCode也是烂得一朵奇葩。另外,很多场景上不同版本的Mac OS X的兼容性不是太好。可是你跟不同distribution的Linux比起来就好多了。

为了你的健康,不要用Windows。

另:我为什么不建议使用bash以外的shell

原因是:兼容性。首先,虽然各种奇怪的shell都声称自己如何提高生产力,但实际上它们的差别是不大的。程序员大部分的时间应该是在写代码,而不是写shell script。其次,所有的shell都是非常烂的语言,其实没必要比较凤姐和小月月哪个活更好。最后,作为成熟的企业,很多东西都是自动化的。如果企业需要为使用不同的shell的用户编写管理软件,那这个成本,我认为,应该由那个使用特殊shell的程序员承担。


数学是你的良师益友

你会说,数学顶多用来切题吧!

数学带给你的,是对问题进行“最小化”建模的能力,以及培养你对“正确”这件事的热爱。

诚然中国的数学教育是不包括对建模能力的训练的。可是你以为美国就有啊?美国能上好大学的高中生,一样是在家苦练奥赛题的。你需要自己学习很多内容才能理解这一点。打个比方,以前看到傅里叶变换,感觉好神奇,这怎么能成立?为啥能量不变?后来当你理解到这其实只是坐标变换时,当然就豁然开朗。

  • 最小化建模的能力,保证你的代码的接口是最简洁的。

  • 而“正确”这件事,则会对整个组织造成长远的影响。


像使用筷子一样熟练的使用代码管理工具

(我假定你的公司使用git来管理代码版本。)

必须能够特别熟练的使用git!<br/>
必须能够特别熟练的使用git!<br/>
必须能够特别熟练的使用git!<br/>

git是个很怪的东西,命令名设计的很不好。可是这东西大家都用啊,而且超级稳定,使用起来有原子性。我曾经看到一些程序猿,特别排斥使用git,但是却不排斥使用perforce。我认为这些人完全就是懒!如果你说git不如Mercury或者Bazaar好用,那么这shi可以讨论的问题。如果你说git不如SVN好用,那么这是原则的问题。一个直接的原因就是SVN不具有原子性。CVS的话连正确性都不能保证了。

git有很多很tricky的问题,还有无穷无尽的“特性”(比如git submodule和git subtree,没听过的就不用搜了,建议不要用)。这都是跟UNIX学来的臭毛病!除非你确定所有人都特别清楚git的使用,否则不要用git submodule。通常来讲 git submodule 能做到的事情,把代码塞到一个repo里面也能做到。

至少能够不假思索的做到:

  1. git status

  2. git log

  3. git checkout -b fork一个branch

  4. git reflog 改变index的历史纪录

  5. git checkout -f 清除当前的更改

  6. git reset --hard 清除更改并且index

  7. git reset --soft 改变index但不清除更改

  8. git rebase rebase某个branch

  9. git rebase -i squash你的branch

  10. git fetch -p

  11. git pull --rebase

另外,git还可以有alias帮助你使用。了解git的一些配置也是有用的。

题外话:可不可以把所有代码塞到一个repo里呢?可以!Google和(就我所知)LinkedIn就是这么做的。

(很多人以为白人不会用筷子??我看到的情况是,这里的人通常用的和刀叉一样熟练,但是姿势可能不符合国家标准。就好像他们用刀叉的方法英国人看了就会嘲笑。美国毕竟是农村;你如果问他会不会用筷子,他可能认为你在跟他开玩笑。)


IDE - 熟练使用“代码重构工具”,熟练掌握至少一个具有此能力的IDE

很多人纠结哪个文本编辑器好用,哪个手不用离开主键盘区,哪个可以通过插件扩展功能。

错错错!你不应该用“文本编辑器”编写“代码”!

代码是结构,是树,是有类型的(不是指值的类型,而是函数定义、语句、表达式)。你应该用“对树进行操作、并能够理解树”的编辑器来编辑代码。代码编辑器必须能够理解代码的意图,才能提高你的效率。文本只是你建树的工具,而不是目标。

这也是我为什么主推IDE的理由:

  1. 重构。每个人都有这样的经历:经过三年维护的代码,再也维护不下去了,因为里面的technical debt太多,可是所有东西都是牵一发而动全身。这时你需要重构!重构的目的是让无法维护的代码转化为可以维护的代码。我个人认为,这是敏捷的核心。如果你想重构,比如重命名,那么你所做的原子操作是跨文件的,这时IDE不再是一个optional的选择。(有的小盆友说我grep一下不就行了。你不嫌自己脏吗?)

  2. 不要花脑力在缩进和空格的个数上。让IDE帮你完成,然后最多手动进行微调。很多IDE可以导入/导出完整的代码风格配置文件。

  3. 对代码的理解能够帮助你找到潜在的bug。比如下面这段代码:

var a = [1, 2, 3];
console.log(a.map(function (value, i) {
  value * i
})); // 想要输出 [0, 2, 6]

你能看出代码有什么问题吗?

是的,map的那个函数里面,少了一个return。一个代码编辑器通常可以给你指出这个问题,然而单纯的文本编辑器通常仅仅能做到语法加亮,因为他们的编辑能力是“局域”的。他们底层的加亮设施依赖的要么是无状态的解析器,最多是一个有限状态的解析器。通常的语言至少需要一个下推自动机来解析。

再举一个例子:

let width = MIN_WIDHT + getProfile().getWidth() * 2 + "px";
let height = MIN_HEIGHT + getProfile().getWidth() * 2 + "px"

看出来了吗?

|
|
|
|
|
|

答案是,第二行中间的getProfile().getWidth()“很可能”是getProfile().getHeight()。这个事情本不是错,但是我们可以说,绝大多数情况,这是由于程序员疏忽,复制了上面那一行,改了一个WIDTH忘了改另一个getWidth,因为它藏在代码中间!

仔细想想,你的职业生涯中有多少次出现过这种情况!

上面的代码如果你用WebStorm来编写,就会给你一个warning。


有的小盆友说VIM也可以写插件理解代码啊。我并没有说这样做不好,可是你的脑力不应该浪费在怎样让打字的速度更快上,而只好不停地切换“模式”。至于Emacs已经被公认会对手指关节造成影响,所以为了自己的健康不要长期使用Emacs。我认识的每一个Emacs用户都抱怨自己的指关节出现了问题。每!一!个!

如果你现在使用的是VI,没关系,因为有时需要搞远程服务器上的代码,你总不能开个远程桌面吧。。。但是如果你是一个程序员,还是要学习怎样使用一个一个IDE的。

关于IDE

不用Windows的话,不用VS。但是VS确实是至今为止最好的C# IDE。C#是一个非常优美的语言。单纯的文本编辑器不配编辑它。不过,再过一阵子,Project Rider面试以后肯定会打败Visual Studio。

如果你执意使用Visual Studio,可以装一个Visual Assist X。不是免费的很值。

如果你喜欢做Web开发的话,推荐Visual Studio Code。对TypeScript和npm的支持很好。各个平台都支持,还免费。

  • 如果你写C++,我用过那么多IDE,就这两个能用Eclipse CDT和Clion。Eclipse CDT配置起来极端复杂,感觉要吐血了,但是那是我在Google Chrome组时唯一能跑起来的IDE。code::blocks是Windows上的,整天崩溃。Google有很多员工使用VIM做所有的事情,以至于代码风格要求行宽绝对不能超过80,这是自己给自己找事。

  • 写Java,没别的,使用IntelliJ。这个IDE比Eclipse先进至少一百人年。

  • 写PHP,使用PhpStorm。比Zend Studio还要好一大截。

  • 写Go,最好用的是Visual Studio Code!

  • 写所有的Web相关的东西,支持的最好的除了Visual Studio Code,还有WebStorm。就连对TypeScript的有时也会比VSC好。VSC对TypeScript的解析没有出错的情况,但是经常有缓存清不干净、解析器崩溃的情况。


我完全不能理解为什么有人使用Sublime Text。就好像为什么有人使用IE?你到底喜欢它哪点?打开的快?不关就好了。占用资源少?参照低一点。


英语!英语!

重要性还用我再说吗

必须能够掌握翻墙术,英文资料比中文资料好,英语wiki比中文wiki好。(有的小盆友又要抬杠了。。。)(你说啥,百度百科?)

另:缺乏英语幽默感与华裔不能融入美国(基本上是白人控制的)社会有紧密关系。说实话,华裔第一代移民能够融入美国社会的并不是绝大多数。很多人一辈子都有浓重的中式英语口音。但是话说回来,融入美国社会与在美国生存的好不好其实关系不大。美国奇特的地方就是,你并不需要非得说英语才能生存。美国不是“种族的大熔炉”,倒像是“种族的书架”,虽然放在一起,但是还是分离的。融合这件事,得到大概第三代才能完成,因为中国文化是很讲究祖先崇拜的,第二代移民会出现身份认同危机————不知道自己是中国人还是美国人。我父亲经常跟我女儿说:“北京这里的家才是你真正的家。”

个人心得:把接口设计成完全可以不需要文档就能理解的

这是我的个人心得:如果你的接口需要文档来描述,那就说明你设计错了!

这样的接口是正确的:

bool isEmpty() const { ... }

这样的凑活:

class String {
  ...
  int indexOf() { ... }
  // 正确的设计应该是返回 `Optional<Integer>`
}

这样的很糟:

class Integer {
  ...
  int compareTo(Integer op) { return this.value - op.value; }
  // 正确的设计应该是返回一个表明大小关系的Enum。由于错误的API设计,实现时引入了一个溢出bug。
}

这样的设计是错误的:

public class A {
  private static A INSTANCE = null;
  private String name;
  public static void init(String name) {
    INSTANCE = new A;
    INSTANCE.name = name;
  }

  ...

  public static getName() {
    return INSTANCE.name;
  }
}

个人观点:文档应该是用来描述具有复杂的行为的数据的,比如协议、语言、标准等等。如果一个API具有复杂到需要文档来描述时,可以想像调用这个接口就需要很多隐含条件,比如之前必须做什么样的初始化等等的。隐含条件要改成显式条件,否则一定出错

在这个错误的例子中,你的getName必须有文档说明这个函数必须在init调用之后才能使用,否则会出错。这就表明你的设计是错误的,因为这件事没有办法由编译器保证。如果你把这个对象变成非Singleton,那么这个问题就迎刃而解。


个人心得:学会掌握造轮子的时机

很多人认为不要造轮子。其实造轮子是提升个人能力的最有用的东西。当然如果你的目标是混吃等死,当我没说。

OOP的一个特别大的问题是库的依赖性和版本问题。有些依赖性其实根本不需要存在,完全是因为有了代码重用的幻觉才产生的。这样的依赖性其实有风险。比如说我们来看这个文章。如果你像我一样相信垂直整合,那么你就理解,为什么有时候造轮子反而更节省成本。

当然不是说所有的轮子都要自己造,要把握一个分寸。这个只有实战才能教你了。而且如果你的工程师很糟糕,那还是就算了吧。

2016-08-29 15:35:01 7条评论
Cinque Terre

Sayalic

屌屌屌 完爆王垠编程的智慧
2016-08-29 15:57:30
Cinque Terre

ikarienator

其实这里好多跟王垠很像的。很多很可能是潜移默化受到他的影响的。
2016-08-29 16:08:23
Cinque Terre

aaxxaaxx

好的IDE至关重要!
2016-08-30 09:16:41
Cinque Terre

driver

学到好多,感谢分享。
2016-08-30 16:33:10
Cinque Terre

mars

不同意关于shell这一条,oh-my-zsh实在是大大提升了命令行下操作的效率,可能你并不了解
2016-08-31 13:38:59
Cinque Terre

ikarienator 回复了 mars

我并没有说不会提高shell的效率。我是说提高shell的效率并不是太重要。
2016-09-01 00:52:36
Cinque Terre

amosbird

正确使用emacs不会导致关节出问题
2017-08-16 20:00:43
请先 登录 后评论
shinian , code is cheap , show me the answer
8 人赞同, 0 人反对

键盘君:没声音,再好的戏都出不来

编程,最最最离不开的是什么?!当然是键盘啦~

在这里科普下键盘相关...

尺寸

filco 忍者 108键

filco 圣手 87键

poker3 61键(食年力荐)

个人认为,程序员肯定是不需要9宫格数字区的。
所以87键和61键的布局会更受大家欢迎。
我非常希望60%布局的键盘,代表作有 hhkb pro2,poker..

轴承

介绍下主流的4个轴承,以及活塞运动效果图。

黑轴

活塞运动

先说最多人关注的小黑,再以小黑为基础简单介绍其她三轴。
严格意义上说,小黑的响应距离短,触发时压力大。以相同的压力按动键盘的话,小黑的响应方面会有一定的优势。但是由于大部分人使用的是触底式敲击,小黑的线性触发特点使得小黑基本没有触觉反馈,同时小黑的压力大,会使你的手指迅速疲劳,所以新手入小黑基本都得不爽一阵子,因为太硬,本身机械键盘的硬度就比薄膜来的大,玩薄膜留下来的触底式敲击习惯也会影响小黑实际的使用效果。但是小黑被誉为游戏神器,不是没有道理的,你若是APM操作过200,对键位、手感熟悉不得了(每插进去必然知道是否触发,嘻嘻),那么小黑非常适合你,酣战时如武林高手,蜻蜓点水,葵花点穴,一扫便过,领敌人闻风丧胆。某认为小黑是个很刚烈的女子,适合ACT、RTS,而不是FPS这种要按住WASD到底,晃来晃去的游戏,手指会疼的,嘻嘻。另外黑轴最便宜。

茶轴

小茶的响应距离比小黑深四分之一,有段落式触觉反馈,而触底压力比小黑小四分之一,所以实际上讲小茶更适合长时间使用。小茶中庸,各项特点都有,但都不突出,手感相对四轴最接近薄膜。窃以为小茶是相濡以沫的好女子,上得厅堂下得厨房,夜战几许也不会让你失去野望。总之百搭:游戏(各种类型)、办公都行。另外茶轴要比黑轴贵一点点。

红轴

小黑的妹妹,敲击时也没有段落感,触发键程也同为2.0mm,但压力比小黑小,手感比较轻,直上直下,敲击时更加轻松,处不来小黑的游戏迷们,试试小红吧,所有游戏都可以噢,如果小红也不适合,那么看来你很需要段落感,请看小青。私觉得小红是小黑的妹妹,没有了小黑的刚烈,却仍有小黑的飒爽,也很温柔,不追求极致的侠客们,最适合小红了。另外红轴贵,比黑要贵一些,是一些,不是一点。

青轴(食年力荐,piapiapia)

小青段落感最强、声音最大,甚至到吵,吵到雷峰塔倒下来,机械感最强,是机械键盘的代表轴。深:需下压最深才可触发,嘻嘻。机械键盘最早也不是游戏键盘的定位,那是都是打字用的,所以小青最带机械感。如果这种段落感你爱不释手,她的噪音你和周围人都可以克服,那么小青无论游戏还是办公,都值得你选择。余感觉小青是最有特色的,她吵,她深,她up up down down的节奏感,她情到深处的pia pia声,都是她的特色,你要懂她才会爱上她。另外青轴比黑轴贵一点。

键帽

键帽材质建议用pbt,不要用金属等非主流(冬天冻死你)。

正刻

侧刻

无刻(食年力荐,装逼利器)

手托

推荐实木手托。

黑胡桃木

水曲柳

紫苏木

待补充...

2016-08-29 18:06:42 6条评论
Cinque Terre

cheyulin

shinian真乃键盘专家啊
2016-08-29 23:07:26
Cinque Terre

leonhardt

不愧是键盘侠shinian
2016-08-30 11:27:45
Cinque Terre

shinian

= =!
2016-08-30 12:56:21
Cinque Terre

shinian

还有好多补充没写...加入todolist
2016-08-30 16:42:13
Cinque Terre

迦叶

这些键盘你都使用过?
2016-08-30 16:46:38
Cinque Terre

ChaseTheWind

MD, 还是shinian对活塞运动研究的深!
2016-08-31 13:55:46
请先 登录 后评论
isaacpei , ifelse程序猿
12 人赞同, 0 人反对

扯一些淡(工具):

  1. 速度很重要(atom打开一个大文件比sublime慢太多)

  2. 界面能让你自己舒服(atom / sublime / vsc比vim好太多),自己搞好配色和字体

  3. 插件数量质量及其重要(好用的插件极大提高效率,比如vs 中的resharper, sublime中的convert to utf-8)

  4. vim和emacs是过时的产品了,除了vim能在服务器上方便一点其实真的难用,学习曲线又抖,就算你强行配置成一个半ide还是难用,最后的最后 大部分ide / 编辑器都支持之类的东西了

  5. c#用vs java用idea(eclipse真比不上) python用pycharm web用webstorm, 工作中的大型开发请使用这些ide(前面说的st/atom或者vsc个人觉得只适合小项目或者toy)

  6. 请使用oh-my-zsh,远离powershell

  7. slack和trello算不算标配?

  8. 只要你觉得顺手, 以上都不重要(我就是喜欢能煮咖啡的编辑器)

  9. git必须会


再扯一些淡(技巧):

  1. 90% 以上你遇到的问题Stackoverflow也有人遇到过

  2. 对于学习,遇到不会就去钻,实在不会就放弃;对于工作,大部分问题不会了问一下就行

  3. 先看文档再开始干事

  4. Time is money,对于工具要舍得, 按时薪计算效益决定是否花费(这是知乎一个经典例子: 花了2h搭建一个不稳定但免费的翻墙,换算一下时薪已经足够买好几年稳定服务了)

  5. 大部分需要临时用的小工具去搜online + 名字就行了

2016-08-29 11:08:51 7条评论
Cinque Terre

Sayalic

所以你到底是用atom还是sublime呢?
2016-08-29 11:26:12
Cinque Terre

isaacpei

都用 sublime倾向于写后端 atom倾向于写前端
2016-08-29 11:31:08
Cinque Terre

dploop

资磁
2016-08-29 11:40:51
Cinque Terre

Sayalic

翻墙这个不同意啊,自己搭的才能看PornHub
2016-08-29 15:02:50
Cinque Terre

isaacpei 回复了 Sayalic

那你买的服务不行啊。。。想当年曲径的服务那是真的好。。。
2016-08-29 15:20:30
Cinque Terre

ikarienator 回复了 Sayalic

自己搭也是翻墙啊
2016-08-30 12:35:19
Cinque Terre

hanbinggan

在 ”不过,再过一阵子,Project Rider面试以后肯定会打败“ 有错别字。。。 面市
2016-08-31 09:51:55
请先 登录 后评论
super2bai , “向那些疯狂的家伙致敬 他们我行我素,格格不入 就像方孔里的圆柱 他们用不同的角度来看待事物 他们不墨守成规,也不安于现状 你尽可以否定他们,颂扬抑或是诋毁他们 但你唯独无法漠视他们 因为他们改变了世界 他们推动了人类的进步”
9 人赞同, 0 人反对

提到开发效率,就不能不提偷懒。。。

好的程序员一定是懒的程序员,一样的代码如果写两次,就需要考虑将这段代码提为方法,将变化的数据提为参数,核心代码都是一致的。诸如此类的小技巧很多,详情参阅重构

写代码时,可以将工具类的提出来。这样使用的时候直接调用就可以。
例如:获取xxx的值、网络请求这种大部分都是重复的代码。


各式各样的工具层出不穷,在工作的时候如何挑选合适的语言合适的工具。

在qlcorder刷题时感觉尤为深刻,如果一道题的原理已经明白了,就没必要花费大量的时间去写代码(如果不明白还是需要学一学,用自己最擅长的语言搞定。

例如:openssl 这道题,如果写java需要写不少行吧,但是如果已经掌握了openssl的原理,其实用mac自带的openssl一行命令搞定。诸如此类的。。

我不是教你投机取巧,一定要掌握原理的情况下,才选择最简单的实现方式。否则就失去了qlcorder存在的意义。


推荐工具:
1.Bitvise SSH Client SSH客户端
2.VLC 视频相关
3.Docker 应用容器引擎
4.Gerrit+Jenkins+Git 自动化部署集成
5.vim、Sublime、EditPlus 文本编辑器
8.Lantern、HostsTool 冲浪~
9.XMind 思维导图
10.Sequel Pro 数据库
11.Dukto 局域网文件、文件夹传输

2016-08-29 11:30:25 2条评论
Cinque Terre

ikarienator

造轮子是必要的,当然不是说工具而是库。
2016-08-29 15:14:16
Cinque Terre

super2bai

需要结合实际情况去权衡。高度定制化的轮子还是需要造的,通用版的就没有必要了嘛。
2016-08-29 15:26:36
请先 登录 后评论
cheyulin , Phd in CSE, HKUST
6 人赞同, 0 人反对

操作系统我喜欢用Fedora

写C++小程序,用Atom,加各种插件。

写C++项目,Linux下用Clion, 然后Cmake作为Build工具,编译器用gcc5.x或6.x。

如果项目需要用Cuda,那么用下Nvidia在Eclipse基础上的Nsight(在装了cuda toolkit自带的),也可以拿它Profiling。

调试C++程序,我还是用gdb。

Terminal的shell使用oh-my-zsh,然后可以装个the-fuck, 用起来比较爽。

连学校(HKUST)的Gpu或者Mic服务器跑实验,直接ssh就可以了,都装的CentOS。

C++程序性能Profiling,用Intel Vtune Amplifier来看cache miss, memory bottleneck分析,不过只有一个月试用期,需要重装再。

写完C++程序,然后打开Pycharm写些Python(先装上AnacondaPip)来跑实验,处理文件,画图。

写C++程序的时候,代码的版本管理全靠git, 利用学生的无限免费私有仓库。

跟老板回报工作进度前,用Markdown写点总结放Github私有仓库上。

利用的基本库,C++14标准定义的STL,最新版本Boost,然后有什么需要的组件Github上搜,awesome-cpp

其他主要还有一些并行计算的基于Pthread封装或者基于Gpu模型封装的库会用到,虽然我现在还没怎么用,比如Intel TBB,Nvidia ModernGPU等。

哈哈就这么多,平时常用的东西。:)

2016-08-29 15:27:42 0条评论
请先 登录 后评论
mickeyandkaka
7 人赞同, 0 人反对

1 vim with spf13vim 这个就不多解释了
2 ag / ack 搜索代码神器
3 tmux 管理多窗口
4 sequal pro 数据库连接
5 alfred 快捷启动器
6 zsh + oh-my-zsh (看到pei师的补充)

项目时间管理:
1 奇妙清单 释放大脑里面的任务
2 日历/google calender 配合iphone

编码习惯
只有一个,一定要写测试。这会节约出远多于你想象不到的时间

2016-08-29 11:01:41 1条评论
Cinque Terre

Sayalic

AG ACK有啥好处,我都是用IDE自带的代码全文搜索
2016-08-29 18:26:51
请先 登录 后评论
d_catch , 喜欢技术的菜鸟
7 人赞同, 0 人反对

服务器管理
  1. vim 服务器编辑小能手

  2. tmux 多窗口管理更轻松

  3. zsh+oh-my-zsh

  4. win下使用xshell管理服务器

本地编码
  1. jetbrain全家桶总有你合适的换系统不换软件系列(pycharm , webstorm在用)

  2. 为知笔记mac+win+linux 全支持(不以linux为主的话强烈推荐oneNote 神器 用过的都说好)

  3. haroopad目前在用的markdown编辑器好用没得说同样是全系统支持

  4. yakuake 下拉式终端用起来很方便

  5. Xmind 思维导图

chrome常用插件
  1. jsonview 调试接口必备

  2. ARC和 POSTMAN 网络请求全搞定

  3. 配合为知笔记的插件保存需要网页

  4. WebTimer 一个小插件看你今天刷了多久知乎

  5. smzdm(我是凑条数的)买买买必备

2016-08-29 11:49:27 0条评论
请先 登录 后评论
shinian , code is cheap , show me the answer
7 人赞同, 0 人反对

翻墙后享用,2分钟的干货

我一直希望我写代码的时候能持续享有此等待遇...比咖啡什么的...提神多了

2016-08-29 15:15:57 1条评论
Cinque Terre

Sayalic

我国古人对类似场景想象都红袖添香夜读书之类的点到为止,没想到到了这一代,我国传统文化的含蓄美荡然无存,就只剩这种资本主义末期的消费和享乐主义的行尸走肉拍出来的辣鸡电影甚嚣尘上……
2016-08-29 16:32:12
请先 登录 后评论
leonhardt
5 人赞同, 0 人反对

1.SETUNA(截图小利器),方便同时看文档跟开发.
2.strokesplussetup,鼠标手势工具,能帮你在何时何地打开你要的工具.
3.QuickSynergy一套键盘鼠标可以连接多台电脑,可以不同系统.
4.deskpins,窗口置顶

2016-08-29 11:30:50 0条评论
请先 登录 后评论
DVan
5 人赞同, 0 人反对

提升效率当然主要是改善占用你时间最多的那项工作的效率,然而程序员做的最多的就是代码编写,怎么样改善代码编写的效率呢?当然是精通一个代码编写的工具啦。这里我分享一下我自己在这方面的经历:

大学里面学C的时候机房里面用的还是VC 6.0,其实对于一个没有接触过IDE的人,第一感觉其实不错。不过我围观同寝室的大神用CodeBlocks之后果断抛弃了这个界面过时古怪难用的VC6。CodeBlocks感觉很不错,有智能提示,自动缩进,括号补全,特别适合用来写单文件C代码——其实大学课堂里面的C语言教程,一般来说一个文件绰绰有余了。

然后就去公司工作了……发现坐我旁边的大神在命令行里面直接写代码,用的就是传说中VIM。之前学习Linux的时候用过VIM,感觉根本不会用啊……不过看大神写代码如丝般顺滑,感觉我之前用的IDE都是渣渣,于是跳入了VIM这个大坑。到现在也算小有所成,分享一下我的学习心得吧。

为何VIM效率更高

Vim所有设计的目的就是为了让你手不离开主键盘区,因为离开主键盘区的按键操作会非常的慢。这一点其实大家都知道。但主键盘区的按键都被正常输入占用了,那么其他的功能只好用功能键诸如([CTRL,ALT,SHIFT]+<SOME_KEY>这样的组合来完成。但VIM不一样,它有两种模式,一种是编辑模式,这种模式下主键盘区的按键等于正常输入,和别的编辑器一样。但是在命令模式下,主键盘区的按键就变成命令了,比如daw就可以删除当前光标所在的word,然而其他的编辑器,可能根本就没有类似的快捷键。这种通过模式切换来保持手不用离开主键盘区是VIM高效的原因。

其实不离开主键盘区有一个BUG,就是ESC键(用于编辑模式下退出到命令模式)。这个按键很常用且有不在主键盘区。在我早期用VIM的时候,经常因为按ESC键导致整个操作非常不流畅,后来仔细琢磨了下,把CAPSLOCK键映射成ESC键就皆大欢喜了。并且我发现CAPLOCK这个键任何时候都没啥大用(想大写直接摁住shift就好了),我在别的软件里面也把capslock重新映射掉了。呃,另外我多嘴一句,为了贯彻爱与VIM的哲学的正义,请使用HJKL代替箭头。等你熟悉了以后你会发现效率两者不可同日而语。

VIM命令的语法

一开始我也觉得VIM这么多命令很鬼畜,不过后来领悟到VIM命令设计的通用模式之后,就能举一反三了。大抵来说VIM语法由动词量词形容词和名词组成

  • 动词:d删除,c改变,y复制,p粘贴……

  • 量词:一个数字,表示做几次

  • 形容词:a(around),i(inner)

  • 名词:一个位置,w移动到下一个单词,}移动到段落的结束……

然而命令的组成规则是量词形容词,比如dw,表示从当前光标删除到下一个单词的开始为止。而daw,表示从本单词的开始删除到下一个单词的开始为止(delete a word around),a在这里用around来表示恰如其分。类似的我们举一反三,3yw,表示从当前光标复制3个单词。di},删除本段落开始和中间之间的内容。

一旦掌握了这个,你会发现vim的命令根本不需要太多的记忆,一切顺其自然,飞一样的写代码轻轻松松!

VIM扩展

当然,除了VIM自带的功能以外,我们还可以在.vimrc里面做自定义,以及安装各种插件等。这些相关的教程就很多了,我这里就不废话了,等你走到配置VIM和搞插件的时候,你已经知道该怎么玩了!

VIM学习路径

大力推荐http://vim-adventures.com/,一个通过游戏的方法来让你熟悉VIM基本操作,至少HJKL不再会是问题!

然后是learn vi and vim,一本颇有些年头的书,不过是我知道的唯一全面介绍VI和VIM相关的各种细节的书,通读一遍之后你发现VIM其实也没啥好难的。

最后是Practical vim,这本书2015年出的,非常新,里面有很多VIM的实用技巧。

最后祝大家享受VIM带来的文本编辑的快乐!

2016-08-29 10:57:12 2条评论
Cinque Terre

ikarienator

使用文本编辑器来编辑代码本身是一件错的事情,而VIM只是是一个文本编辑器。
2016-08-29 12:20:42
Cinque Terre

DVan 回复了 ikarienator

虽然纯粹用VIM不见得是个好主意,特别是在Java的开发中。但在IDEA中装VIM插件来提高编辑速度应该也是可以的吧。所以这样讲的话,学习VIM还是有一定价值的。
2016-08-29 16:46:07
请先 登录 后评论
小灰灰是好孩子 , 个不高嘴不甜长得磕碜还没钱
5 人赞同, 0 人反对

1、买个MBP;
2、买个jetbrains家的IDE(为什么要说jetbrains家而不说万能的IntelliJ IDEA,因为有些人用不到那么多功能嘛);
3、能用钱解决的,千万不要去花太多时间;

2016-08-29 11:40:49 2条评论
Cinque Terre

ikarienator

"能用钱解决的,千万不要去花太多时间;" 这个 +1000!
2016-08-29 12:19:49
Cinque Terre

leonhardt

比如买房,要花好多时间去挣钱...
2016-08-29 13:48:35
请先 登录 后评论
earneet
2 人赞同, 0 人反对

键盘

个人对键盘还是有依赖的, 一般要厚帽pbt茶轴, 手感确实不同

IDE

不太追求IDE, 电脑上有啥我用啥, 大多数时间是在用eclipse, IDE我基本上会把一些列的特性关掉, 例如自动提示之类的, 只留语法高亮和引用查找.引用查找是需要重构的时候用.另外在eclipse上插件viPlugin一直习惯了用vim写代码,没有vi习惯性的就敲入命令字符了, 虽然有点内存泄露,还是凑合用. 偶尔也用IDEA, 视第一眼看到的是不是它而定.
ik巨说ide要管理的是树,我不敢苟同, 基本上IDE我也就拿来当个可以方便找到和切换文件的编辑器来用.一开始一段时间确实不是很习惯,各种难受和出错,渐渐适应了之后就会发现,整个项目的详细结构都在我脑子里,基本可以直接手动鼠标定位到位置,各API什么的也手敲(刚开始的时候离开了自动提示我完全不会写代码,慢慢的就习惯了), 新接手一个项目的时候很需要全局搜索, 然而这个效率eclipse我是可以接受的.

版本控制

大牛们都在用git,我自己的开源也在用, 不过身在公司, 老板要用SVN我也不能说什么, 安装个小乌龟客户端,用习惯了之后也没什么不好的.感觉各种批判的声音都夸大其词了, 至少到目前为止SVN并没有给我带来什么不方便,更不论错误.
不过为了响应诸牛的观点,我还是要声明一下吧

  • git必须会

  • git必须会

  • git必须会
    不然, 万一有个什么轮子需要get,你都down不下来咋办

文本编辑器

我对ide的外观美观程度可能有点小要求,但是对于文本编辑器就不会.一般只是用vim, 不带任何插件(除了golang的语法高亮), 一般也不需要自定义按键, (原因是我也不太会写vim脚本), 好像没有发现它打开什么比较慢的样子,最爱它跳来跳去的方便, 后来习惯了切换各种模式输入命令什么的, 用其他编辑器会不自觉的输入iadw什么的,也就不太用其他编辑器了.
声明一下,我用vim只是因为顺手,习惯, 并不参与对其他文本编辑器的对比.
我可以熟练在没有语法高亮的notepad下写我掌握的几种语言,所以, 文编编辑器嘛~ so~

终端

我的个人电脑和公司工作电脑目前都是windows (之前我的笔记本是ubuntu,可惜它最近寿终正寝了),需要连接服务器或者我的通常实验环境(放在家里7*24小时运转的树莓派)都会用xshell, 非商用版本. 在工作中连接服务器用的是商业许可的xshell, 暂时没打算换,两个原因

  • 够用, zmodem支持挺好,拖拽个文件就能扔上去,sz可以拉下来

  • 比较漂亮,同类工具中,我个人感觉是最漂亮的, 色彩主题也比较好
    如果再有原因, 就是不用花钱

实验环境

树莓派3一只, f3322免费域名一只, 免费ddns服务. 至于选树莓派的原因是它耗电低, 每月只要几毛钱. 而且有不少gpio的接口,我反正也要捣鼓我自己的只能家居套装. 相比于一般vps来说,用处大而且便宜. 手机装个终端, 随时随地有什么新想法都可以登上试验验证一下.

调试

一般都是log, 极少数的极端情况会去break point
个人认为较好,没有任何实验数据和理论依据

技巧

本章节也许大家不太接受,毕竟大家已经习惯了各种各样的工具以光速的速度开发.
刚入行的时候我也如此,大爱自动补全功能.
后来发现, 很多常用api我都记不住了,只能有个模糊印象,敲几个字母让IDE帮我补全(这个对大家不使用,只是我脑袋比较笨,时间一长容易忘记).
后来一段时间(一两个月那么长),关掉所有IDE的特性开发, api忘记了就去查手册, 刚开始特别痛苦,后来渐渐地... 我说我用纯vim写代码都不比我的同事们用ide来的慢你们信么?

2016-08-30 12:32:43 1条评论
Cinque Terre

Bishop

notepad工程师 orz
2016-08-30 21:08:22
请先 登录 后评论
wannianma
4 人赞同, 0 人反对

windows下用Git替代cmd顺手了不知道多少倍,唯一需要吐槽的就是响应输出有点慢!

2016-08-29 12:02:02 5条评论
Cinque Terre

ikarienator

你说的是Cygwin?
2016-08-29 12:21:02
Cinque Terre

wannianma 回复了 ikarienator

不是,就是git,自带了大部分linux命令,好用
2016-08-29 14:46:28
Cinque Terre

snipper

git-bash
2016-08-29 15:10:29
Cinque Terre

D瓜哥

可以试试 cmder
2017-03-01 10:14:53
Cinque Terre

陈大欠

ps也好用啊
2018-05-29 11:14:52
请先 登录 后评论

啦啦啦

回答
正在加载中

您未提交【码之初】的正确答案,暂不能回答相关问题。 如有疑问,请发起讨论