七年之痒,再见理想
不确定“再见理想”是“再见了,理想”还是“再次燃起理想”,稀里糊涂地对这句话有感觉。作为程序员,总会有自己的技术价值观和技术理想。工作七年多,开始痒了。
程序员的生活总是喜忧参半,出入体面的写字楼,在小小的cubicle里虐杀脑细胞;偶尔有条件小资一下,常被工作、生活压力逼得点灯熬油;有时候想,这么辛苦,不论做什么行业都会做的好,是不是入错行了?手放在键盘的时候,又享受投入思考的快感。或许注定是个程序员,限于天赋,或许注定是个庸庸碌碌的程序员。
前端时间因为跑到乡下,没法上网,网瘾一上来撞墙流鼻涕,百无聊赖开始勾画价值观和技术理想。人总追求快乐,每天清醒的十六个小时中,——程序员可能有十八个小时,至少有八小时花在工作上,所以,为了过得快乐,工作一定要快乐。如果当前的工作注定没法使你快乐,就赶快结束它。毕竟,多数时候,拼命工作不如拼命找工作来得实在。程序员当然不算光鲜的职业,但确实挺费脑子,如果你智商低于110,换个软件公司也注定痛苦,还是直接换个行业吧。
工作的基本原则是要保持身价,何为身价?不是你现在月薪多少,而是你现在跳槽,能拿多高的offer。这跟很多因素有关,主要因素包括
1.你当前薪水——HR往往参考这个给你定薪水;
2.你的资历——毕业的学校,工作年限,外企工作年限,你当前的title,在当前公司工作了已经几年…
3.你在面试中的表现——能发挥多少技术水平,英语对答如何。
像我这种身价的本来没资格讨论身价,但谁叫这是我的blog,我的地盘听我的呢.挨个乱喷一下。
1. 关于当前薪水
假如你跟我一样笨,没有别的好办法,就只能多投入精力工作。在以前的博客 与神对话 里也提过一个程序员对于产品的价值。每天上班8小时,每天多专注一点,日积月累,做的事情会多很多,对自己的提高也会多很多。加薪或许是水到渠成的事,如果不顺利,要么跟领导谈谈,或者直接闪人。无论如何,不要抱怨。善于抱怨的人表示他还不够强。你需要尊重权利,包括他人的权利和自己的权利。
2. 关于资历
如果你毕业于名校,学历又好,一毕业自然就能进大公司。如果你还在江湖三流公司混,就得每天想着早点换工作。工作年限不总算是资历,好公司的工作经历才有用。要记得换工作是有成本的,我工作七年多,现在的工作是第五份工作,所有公司都诟病我不stable,这样的资历很难骗取信任,教训啊!聪明的你肯定想到简历作假,但好公司都有reference check的,我还是劝你别冒险。
3. 面试
千万记住,一定要预先做好充分的准备才能参加面试。对于一个java程序员来说,面试之前要翻一遍类似于Thinking in Java的书,背一遍设计模式,复习sql,复习mvc框架,复习Hibernate,复习Spring, 复习Servlet spec。或许还有其他的,web service之类的。你可以想象,真要复习一遍,起码要三个月,这就是我认为换工作之前至少要预留出来的准备时间。机会有限,侥幸心理出去碰运气纯粹是浪费机会。平时工作总有局限,看书是最有效准备面试的途径。
上面说的都是不登大雅之堂的事情,有热情的程序员总想成长为高手,我当然也有这样的愿望。问题是你认为什么样的人算是高手,每个人心里会有不同的答案,关键是找出你和理想之间的差距并尽量缩短它。高手一定不仅仅是技术超群的,高手必然有高手的胸怀。
自己有时候会考虑一些工作和技术上的原则,想到哪儿敲到哪儿吧。
关于工作:
作为程序员,你要关心产品。这没什么可说的,这是职业道德问题。
作为程序员,你要尊重QA。工作越久,就越觉得QA对产品非常重要,程序员很多时候陷在具体的技术问题中,太多精力被牵扯住了。好的QA让程序员心安,能够有助于控制风险. QA应该有做最后决定的权利,所以QA需要对产品有很好的insight. 而且好QA需要明白,测试不是找bug的游戏。
关于技术:
effective java 和 Refactor书都是总结各种编程原则的书,那些熟为人知的原则不说,我只说我的理解
static: Joshua在effective java里强调尽量使用static method。这肯定是没错的。太看重这一点,就容易转到一个误区——多使用static field. 而static field有时代表了封装的问题,需要谨慎。
exception: 包括Thinking in java的Bruce, Martin Fowler等很多人都对checked exception不感冒。自己也思考了一下,你当然能举出checked exception的应用场景。你可以说某个方法它抛出checked exception是为了让caller处理exception.但你说的是让“这个caller”处理它。从重用的角度说,你并不预知所有被调用的情况,所以不能排除一些情况下这个checked exception并不能得到特别的处理。这个想法更本质的原则是,写底层程序的时候,要装作不知道caller是怎么使用它的,哪怕是你自己调用它。
重复代码:所有程序员都对重复代码表现出深恶痛绝的样子。但我觉得,重复代码不是定性问题,而是个定量问题。可以这样考虑:三行代码反复出现在三个不同的文件里,甚至在不同的package里,这算重复代码么?四行代码呢?十行代码呢?曾经听到一个高手说,编程的核心在于重用。我不反对这个说法,但我更倾向于说,编程的核心在于可维护性。对于重复代码,大段的重复肯定要消灭的,三五行的重复不是不可以存在,但是要尽量把它圈在一个小范围里,比如一个包,或者文件,或者方法里。有时候刻意追求“不重复”,反而让程序变得别扭。
技术存在的价值在于能够解决现实问题。你可以对技术狂热,但不能忘了这个客观事实,技术需要实现商业价值,需要最求投入产出比。最最根本的原则,是pragmatic
转载于:https://blog.51cto.com/vcycyv/439792
相关文章:

HTML5学习笔记二 HTML基础
一、HTML 标题 HTML 标题(Heading)是通过<h1> - <h6> 标签来定义的. <h1>标题一</h1> <h2>标题二</h2> <h3>标题三</h3> 二、HTML 段落 HTML 段落是通过标签 <p> 来定义的. <p>亲吻你的手还…
程序员感叹一年只能存下15万太少了……网友:潸然泪下
最近有程序员网友晒出自己的年终奖,税后高达15.7万!看到这个情形,很多网友表示自己“被打鸡血了”。他强调学习的重要性,学习仍然是在这个时代下,普通人能够逆袭,给家人更好生活的一把利器!今天…
Spring源码分析【2】-Tomcat和Sping的连接点
Tomcat是怎么调用上Spring的呢?需要找到这个连接点。 答案就在org.apache.catalina.startup.ContextConfig的processServletContainerInitializers方法 new WebappServiceLoader() 回到processServletContainerInitializers 进入org.apache.catalina.startup.Weba…

优化数据库的方法及SQL语句优化的原则
优化数据库的方法: 1、关键字段建立索引。 2、使用存储过程,它使SQL变得更加灵活和高效。 3、备份数据库和清除垃圾数据。 4、SQL语句语法的优化。(可以用Sybase的SQL Expert,可惜我没找到unexpired的序列号) 5、清理删…

各大浏览器 CSS3 和 HTML5 兼容速查表
2019独角兽企业重金招聘Python工程师标准>>> 不知不觉中,支持 CSS3 和 HTML5 的浏览器变得越来越多,甚至包括最新版的 IE,当然,所谓支持仅仅是部分支持,因为 CSS3 和 HTML5 的W3C 规范都尚未形成。如果你现…
Spring源码分析【1】-Tomcat的初始化
org.apache.catalina.startup.ContextConfig.configureStart() org.apache.catalina.startup.ContextConfig.webConfig() 进入org.apache.catalina.startup.ContextConfig.processServletContainerInitializers processServletContainerInitializers参考:Spring源…
360金融首席科学家张家兴:只靠AI Lab做不好AI中台 | 独家专访
「AI 技术生态论」 人物访谈栏目是 CSDN 发起的百万人学 AI 倡议下的重要组成部分。通过对 AI 生态顶级大咖、创业者、行业 KOL 的访谈,反映其对于行业的思考、未来趋势判断、技术实践,以及成长经历。 本文为 「AI 技术生态论」系列访谈第21期࿰…

Delphi 正则表达式语法(3): 匹配范围
// [A-Z]: 匹配所有大写字母var reg: TPerlRegEx; begin reg : TPerlRegEx.Create(nil); reg.Subject : CodeGear Delphi 2007 for Win32; reg.RegEx : [A-Z]; reg.Replacement : ◆; reg.ReplaceAll; ShowMessage(reg.Subject); //返回: ◆ode◆ear ◆elphi 200…

基础算法整理(1)——递归与递推
程序调用自身的编程技巧称为递归( recursion)。递归做为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解&…

php正则表达式函数 preg_replace用法
preg_replace (PHP 3> 3.0.9, PHP 4 ) preg_replace -- 执行正则表达式的搜索和替换说明 mixedpreg_replace( mixed pattern, mixed replacement, mixed subject [, int limit])在 subject 中搜索 pattern 模式的匹配项并替换为 replacement。如果指定了 limit,则…
面试官吐槽:“Python程序员就是不行!”网友:我能把你面哭!
最近几年,Python莫名火了起来,很多公司都想赶上这“莫名”的热潮,招聘到大牛人才。但是,最近一个HR在社交网站的吐槽又火了:那么问题来了,市面上为什么鲜有企业满意的优秀的Python程序员?企业到…
Spring源码分析【5】-Spring MVC处理流程
org.apache.catalina.core.ApplicationFilterChain.doFilter 获取Filter org.apache.catalina.core.ApplicationFilterChain.internalDoFilter org.springframework.web.filter.DelegatingFilterProxy.doFilter invokeDelegate org.springframework.security.web.FilterCha…

Mysql——外键
2019独角兽企业重金招聘Python工程师标准>>> 一,外键 外键:foreign key,(外边的键,键不在本表中):如果一张表中有一个字段(非主键)指向另一张表的主键&#x…
揭开「拓扑排序」的神秘面纱
作者 | 小齐本齐责编 | Carol来源 | 码农田小齐Topological sort 又称 Topological order,这个名字有点迷惑性,因为拓扑排序并不是一个纯粹的排序算法,它只是针对某一类图,找到一个可以执行的线性顺序。这个算法听起来高大上&…
Spring源码分析【6】-ThreadLocal的使用和源码分析
Spring代码使用到了ThreadLocal java.lang.ThreadLocal.set getMap java.lang.Thread.threadLocals定义 回到set 如果map为null 则createMap

《软件的破解》
本人根据自己的经验简单给大家谈一谈。这些问题对于初学者来说常常是很需要搞明白的,根据我自己的学习经历,如果你直接照着很多破解教程去学习的话,多半都会把自己搞得满头的雾水,因为有很多的概念要么自己不是很清楚,…

php级别鉴定
一、PHP初级程序员薪资水平:4000.00--8000.00(RMB/月)~HTML设计与应用~DIVCSS~PHP基础~MySQL基础~PHP高级~CMS系统二、PHP中级程序员 薪资水平:8000.00--12000.00(RMB/月)~PHP面向对象~MySQL高级~Smarty模板…
Spring源码分析【7】-Spring 模板页和JSP文件的编译
org.apache.jasper.servlet.JspServletWrapper.service org.apache.jasper.JspCompilationContext.compile org.apache.jasper.JspCompilationContext.createCompiler org.apache.jasper.compiler.Compiler.isOutDated 判断文件是否存在 ..\Apache\apache-tomcat-8.0.36\w…

Distinction Between Strategy and Decorator
首先看Strategy和Decorator在GoF的《Design Patterns》的intent Decorator (1)intent: Attach additional responsibilities to an object dynamically.Decorators provide a flexible alternative to subclassing for extending functionality. (2)UML Diagram: Strategy (1)i…
我竟然混进了Python高级圈子!
现如今,计算机科学、人工智能、数据科学已成为技术发展的主要推动力。无论是要翻阅这些领域的文章,还是要参与相关任务,你马上就会遇到一些拦路虎:想过滤垃圾邮件,不具备概率论中的贝叶斯思维恐怕不行;想试…

unity3d中旋转
自转是Rotate,绕转是RotateAround,LookAt旋转物体自身,使其正面朝向目标点以上操作都在transform中完成转载于:https://blog.51cto.com/568464209/1764050

Java常用方法
1. 把Strings转换成int和把int转换成StringString a String.valueOf(2); //integer to numeric string int i Integer.parseInt(a); //numeric string to an int String a String.valueOf(2); //integer to numeric stringint i Integer.parseInt(a); //numeric string …
request.getSession(false)到底返回什么
HttpSession session request.getSession(false); 很明显传false如果session不存在返回Null。
洞察疫情,微软推出新冠数据分析网站COVID Insights
来源 | 微软研究院AI头条COVID Insights 网站功能亮点持续数月的新冠疫情一路肆虐、席卷全球,世界各地的科研人员都在为此奋战,希望通过最先进的技术逐步揭开新冠病毒的神秘面纱。近日,微软亚洲研究院的研究人员基于在计算生物学、数据分析等…

LINUX 查找tomcat日志关键词
#查询catalina.out日志文件中的关键词为2016-04-13 11:26:00的日志信息grep -C 10 2016-04-13 11:26:00 catalina.out |more解释:grep :查询,筛选-C : grep的-A, -B, -C选项分别可以显示匹配行的后,前,后前多少行内容:10 …

转帖 javascript事件监听
原帖地址: http://www.cnblogs.com/AganCN/archive/2008/05/24/1206272.html 考虑这样的情形在IE浏览中处理,需要响应页面的按钮点击事件,有哪些方法呢?(1)onclick属性添加事件处理函数 <javascript>…
推荐系统发展的六大影响因子 | 深度
作者丨gongyouliu来源 | 大数据与人工智能(ID: ai-big-data)随着科学技术的进步,移动互联网快速发展,手机越来越便宜,拥有智能手机不再是一件遥不可及的事情,互联网用户规模已接近增长的顶点。摄像头和信息…
Spring源码分析【9】-SpringSecurity密码Remove原理
很明显代码已经说了认证完成移除credentials和其他某些安全数据 // Authentication is complete. Remove credentials and other secret data // from authentication org.springframework.security.authentication.ProviderManager.authenticate package org.springframewo…

Linux --进程间通信--共享内存
一、共享内存共享内存是最高效的通信方式,因为不需要一个进程先拷贝到内核,另一个进程在存内核中读取。二、 ipcs -m 查看共享内存ipcrm -m 删除共享内存三、主要函数shmget 创建shmctl 删除shmat 挂接shmdt 取消挂接********* man 函数名 查看*****四、…
如何用 Slack 和 Kubernetes 构建一个聊天机器人?| 附代码
作者 | Alexander Kainz译者 | 天道酬勤,责编 | Carol出品 | AI科技大本营(ID:rgznai100)ChatOps可以让你使用基于聊天的接口来管理DevOps任务。本文主要让我们了解如何使用Slack构建一个简单的机器人来控制Kubernetes集群。最后我们可以使用…