Ⅰ 关于程序员在30岁,35岁之后怎么办的新思考
今年一直在深度加班,最近感觉自己身体确实不如五年前了,不如20岁的时候了。那时候学习到2、3点才睡觉,第二天早上继续开工,没有问题。最近感觉熬不动了,晚上十一、二点就困的不行了,早上也起不来,起来的话,上午就有点精力不够。
我给自己的定位就是技术,我对纯的管理也不感冒,技术经理,架构师,首席架构师,技术总监,如果有机会的话,可能是这个发展路线。目前来说,就是个技术经理,正在向架构师转变,发现需要学习的东西更多了,精力还真是不太够用的。还有就是思考的角度要转变,不能以程序员的角度思考软件,要站的高一点,要全面,自己还要看过(最好是做过)很多这方面的东西。首先从整体来思考系统,然后分解,逐步分解、细化,最细的就是程序员的代码了,那个由他们来按照规范编写,要去把握整体的结构,整体的设计,整体的模式。
另外一个我认为较为重要的就是,需要对团队的开发人员做培训。最近我也发现了,虽然我们用的都是面向对象的语言。但是代码一点都不面向对象,除了写了class,因为不写class也没有办法编程啊。但是很多时候大家对于类的设计都没有认真的思考,而且大家的认识也不够深入,有必要在这方面提高大家的水平。封装、继承、多态,不是简单的类、继承、写个接口,就真的是那么回事了,很多时候我们还需要深入一点,越是基础越重要。还是那句话:出来混,迟早要还的。
公司每天都在抱怨进度为什么慢,我也在思考为什么慢呢?每天都在加班,周末也在加班,就是快不起来,都很努力了,没有人偷懒,为什么没有产出呢?我觉得就是这个面向对象的能力没有提高,写代码的时候卡住了,业务清楚了,流程清楚了,觉得代码也就是两天,为什么5天了,还是差一点呢?我决定就是代码功力不够造成的,如何提升呢?一是要靠自己多思考,下班多花点功夫练习,不是单纯的练习手敲代码的速度,而是对自己的代码重构,模式,思考怎么提高代码复用性,怎么才能让自己写的代码不是改来改去呢,要做之前先想一想,设计一下。只有在这方面下工夫了,才能真正的提高开发效率,减少加班的频率。二就是公司要组织这方面的训练,抽出一半天的时间,来个面向对象的头脑风暴,出几个小题目,大家一起讨论,在完成的过程中学习,锻炼思考能力,设计能力。三就是专事由专人来做。我不推荐让程序员参与业务讨论和定位,因为做业务和开发是两种不同的思维方式。做开发是很严谨的,业务则是很灵活的。四就是不要外行领导内行,会很惨的,至少进度会拖后很多。
难道这就是大家说的30岁之后要转型吗?在国内30岁之后真的写不动了吗?于是这几天顺便就做了一个思考。发现了一个惊天大秘密(哈哈)。发现了为什么30岁就写不动了呢?为什么国外的程序员,很多都是40、50还可以继续写呢?而且写的很享受的样子,我们就需要转型到管理呢?但是管理就像是金字塔,越往上越小,需要的人越少,不是每个人都可以做到管理的位置,况且不是每个人都适合做管理的。难道写程序没有出路吗?不是的,这纯属是有些人的谬论,误导了不知道多少人啊,至少我是这么认为的。
大家也许会说是环境因素、社会问题。是的,这些因素是影响到了我们程序员的生涯,但是他们不是主要因素,而且这些不是一天两天可以改变的,也不是我们一个两个就可以改变的,就像革命一样,需要时间,需要人来牺牲,需要前赴后继,积累到一定程度才可以变革。
我觉得我们可以控制的,又是主要因素的就是我们自己。至于30岁以后写程序没有前途的论调,可以用一句话解释。
30(35)岁写20岁的程序。
怎么解释呢?就是说30岁写的程序还是20岁的时候写出来的样子,没有发展,没有变化。那肯定干不过20的小伙子了,他们可以加班、熬夜,但是我们怎么办,身体根本不允许你那么干了,肯定就不行了。老板就觉得要30岁的还不如要20岁的呢?20岁的还可以更少的工资,更好忽悠,30岁的老油条,不好忽悠,而且产出也不行了,那就辞掉吧。
其实是我们自己断了自己的后路,是我们自己没有成长,还在写20岁时候写的代码,没有长进。在代码的设计(且不说架构设计)方面没有长进,所以写出来的还是较为混乱的,牵一发而动全身的代码。如果让年轻人改,他可以熬夜该,但是我们就不行了,所以都说30岁就不能写程序了。其实决定权在我们自己,要在20-30岁之间,提升自己,就算不想做架构,只想写程序,也要越写越精炼,要有自己的一套,要提升代码的功力。要学习设计模式,重构,要思考代码的结构,不是一上来就写一大丢,然后推到重新来过,那样肯定干不过年轻人的,哪有那个精力啊,是不是呢?
只想写程序也可以,但是一定要想办法,在30岁的时候不要在写20岁的代码,否则就真的没有前途了,甚至要早点回家了,因为你干不过20岁的小伙子啊。
希望大家不要在30岁的感慨,希望大家作出改变。改变这个潜规则。
Ⅱ 怎样才能锻炼出程序员的思维
要锻炼出程序员的思维 首先要做到下面几点
多家练习 才可熟能生巧
1、扎实的基础
数据结构、离散数学、编译原理,这些是所有计算机科学的基础,如果不掌握它们,很难写出高水平的程序。程序人人都会写,但当你发现写到一定程度很难再提高的时候,就应该想想是不是要回过头来学学这些最基本的理论。不要一开始就去学OOP,即使你再精通OOP,遇到一些基本算法的时候可能也会束手无策。因此多读一些计算机基础理论方面的书籍是非常有必要的。
2、丰富的想象力
不要拘泥于固定的思维方式,遇到问题的时候要多想几种解决问题的方案,试试别人从没想过的方法。丰富的想象力是建立在丰富的知识的基础上,除计算机以外,多涉猎其他的学科,比如天文、物理、数学等等。开阔的思维对程序员来说很重要。
3、最简单的是最好的
这也许是所有科学都遵循的一条准则,复杂的质能转换原理在爱因斯坦眼里不过是一个简单得不能再简单的公式:E=mc2。简单的方法更容易被人理解,更容易实现,也更容易维护。遇到问题时要优先考虑最简单的方案,只有简单方案不能满足要求时再考虑复杂的方案。
4、不钻牛角尖
当你遇到障碍的时候,不妨暂时远离电脑,看看窗外的风景,听听轻音乐,和朋友聊聊天。当我遇到难题的时候会去玩游戏,当负责游戏的那部分大脑细胞极度亢奋的时候,负责编程的那部分大脑细胞就得到了充分的休息。当重新开始工作的时候,我会发现那些难题现在竟然可以迎刃而解。
5、对答案的渴求
人类自然科学的发展史就是一个渴求得到答案的过程,即使只能知道答案的一小部分也值得我们去付出。只要你坚定信念,一定要找到问题的答案,你才会付出精力去探索,即使最后没有得到答案,在过程中你也会学到很多东西。
6、多与别人交流
三人行必有我师,也许在一次和别人不经意的谈话中,就可以迸出灵感的火花。多上上网,看看别人对同一问题的看法,会给你很大的启发。
7、良好的编程风格
注意养成良好的习惯,代码的缩进编排,变量的命名规则要始终保持一致。大家都知道如何排除代码中错误,却往往忽视了对注释的排错。注释是程序的一个重要组成部分,它可以使你的代码更容易理解,而如果代码已经清楚地表达了你的思想,就不必再加注释了,如果注释和代码不一致,那就更加糟糕。
8、韧性和毅力
这也许是“高手”和一般程序员最大的区别。高手们并不是天才,他们是在无数个日日夜夜中磨炼出来的。成功能给我们带来无比的喜悦,但过程却是无比的枯燥乏味。你不妨做个测试,找个10000以内的素数表,把它们全都抄下来,然后再检查三遍,如果能够不间断地完成这一工作,你就可以满足这一条。
Ⅲ 为什么程序员的思维很难理解
1、程序员的思维比普通人要严谨。
对编程有一定了解的人都能理解这一点,一是一二是二,电脑不认模棱两可的回答,因为“模棱两可意味着更多的可能答案”,所以你跟程序员交谈的时候,如果你问他“为什么要这样问”或“你为什么听不懂”,你就会知道你自己的描述有多么的不严谨了。
最简单的例子,你妈妈让你去市场买水果,如果看到有苹果就买一个苹果,看到梨就买两个。你看到市场有苹果和梨,你会买什么回家?
首先给出一个大前提,在程序上不存在“潜台词”或者“潜规则”这种东西,唯一起作用的只有“字面意思”。
一般人肯定是买一个苹果和两个梨。当然程序员也不是脑子有坑,以一个正常人的思维考虑也会买一个苹果和两个梨,但是看到这问题的第一个瞬间的直觉反应,却是“如果看到梨就买两个苹果”。这个问题不存在潜台词,所以所有人都会直接从字面理解老妈的意图。
按照程序的逻辑分析,这句话共分为两个部分,代表两个程序任务。“如果看到有苹果就买两个苹果”为任务一,条件是“看到有苹果”,目标对象“买苹果”,数量“一个”;“如果看到有梨就买两个”为任务二,条件是“看到有梨”,数量“两个”,没有给出新的目标对象。
因此按照程序逻辑来讲,第二句话将继承上一个目标对象,也就是“买苹果”,所以这句话被看起来像职业病一样的思维直接翻译成了“如果看到有苹果就买一个苹果,如果看到有梨就买两个苹果。”
————————————————————
2、程序员看问题比一般人透彻。
这是职业特性导致的,因为电脑编程的严谨性,因此程序员面对一个问题、一个需要实现的目标或者一个bug时,他会思考更底层的问题,并且会习惯性采用归纳法来尽量避免以后可能遇到同样的问题。
比如用输入法输入中文的词句,有的时候打出了一串拼音,然后按下数字2选取发现不是自己想要的词,然后发觉数字1对应的才是自己想要的,删掉,重新输入拼音,这次按下数字1的瞬间却发现两个词的位置调换了,于是又删掉重新键入,这次认真地看了看,终于选对了想要的词的序号。
这个时候你会说,啊,我下次应该更小心一点,不要马虎大意想当然,看清楚了再点。
程序员不这么想,他会想,导致这个问题的看来是输入法的“词语顺序自动调整”功能,他会自动监测使用者输入的各种词语的频率,来自动调整词语的顺序,底层代码实现的逻辑很简单,每个不同的词对应一个从输入法安装到现在的输入次数的计数器,直接按计数器排列顺序就好了;也有的输入法会监测你输入后是否会将其删掉,那么这时候会被智能识别为打错字,计数器不会加一。
然后再一思考,这种功能一般都是可以开关的,如果我想要靠记忆记住顺序使用而不用输入法自动调整的话,比如对汉字输入的速度有一定要求需要考记忆记住汉字序号,我只需要进入输入法设置将其关掉即可;如果我想要它帮助我调整词句位置,但是又不需要频繁地调整,那么在我有工作需要的时候我会提前关掉,平时开启即可;而如果我想单纯依赖这一功能,那就不用管它,下次看清楚再选就好了。
Ⅳ 初级程序员应该如何锻炼自己的逻辑思维和思考能力
对于初级程序员要想提高这两方面的能力,最好的办法就是解剖麻雀——向前人的经典案例学习。
初级程序员还不需要完成高难度的突破,需要做的是掌握基础知识,了解前人遇到了哪些问题,他们是如何思考和解决的,
多看多思考,经常动手做,就会大幅度提高自己这两方面的能力的。
Ⅳ 该怎么和程序员聊天
程序员话题广泛:美食、旅游、电影、政治、军事、历史、时事热点都可以聊,但不要在他敲代码的时候聊天……
程序员适合一些比较有逻辑性的话题。思考问题往往很中立,理性的有些不近人情。
程序员是网络最前沿的生物,聊天的时候多准备些表情包总是没错的。
当实在找不到话题的时候,就去网上找一个空酒瓶和瓶盖一起换酒那种问题,让他先算着,然后再崇拜的问怎么算出来的,估计创造七八百字的聊天记录没有问题。这个时间也足以缓冲出下个话题了。
如果他给你展示他写的代码,看不懂没关系,只要括号能对齐,直接夸格式漂亮就好。什么?连括号都没对齐?F**K,表理他了,他根本不是个合格的程序员……
Ⅵ 男朋友是个程序员,我该如何和他交流呢
其实我觉得男朋友是程序员也没有关系,因为两个人在一起不仅仅是聊工作上的问题,更多的是生活上的问题,你可以不和他聊工作,了其他方面的,比如对方的兴趣爱好,平时打不打游戏,可以从这方面入手,有的男生还不愿意和自己的女朋友聊工作上的问题,因为不想下班后还在聊工作,这个时间应该是属于自己的,用来聊工作太破坏自己的美好心情了,所以我觉得自己的男朋友是程序员也没有关系,两个人在一起还是有其他的事情可以聊的。我觉得即使我们不懂他们的工作,但是我们也可以带着自己的好奇去询问他,去尝试着了解他的工作,这样还可以增加自己对他的崇拜感,就会越来越喜欢他,还可以增进两个人的感情,所以我觉得这样的好处还是比较多的,所以不要怕,两个人在一起没有话题可以创造话题,多聊聊,就会让两个人有话可说了,都是从那个阶段走过来的,刚开始对彼此不熟悉就不知道该去说什么,慢慢的就了解对方的兴趣和喜好,就知道该和对方怎么聊天了,所以不用去担心该怎么和对方聊天。
Ⅶ 程序员职业生涯的若干问题思考
关于程序员职业生涯的若干问题思考
一群还相信世界是美好的程序员。在探求匠心的过程中寻找自己存在的价值。下面是关于程序员职业生涯的若干问题思考,欢迎阅读。
身体的问题
有很大一部分程序员最终离开这个舞台就是因为自己的身体问题。也有很多人认为搞IT需要一个铁打的身体。其实再铁打的身体也扛不住天天的加班和高强度的工作。这是一个产出和产能平衡的问题,身体差最根本的原因还是因为自己没有足够的重视。
以下是一些个人建议:
-每天30分钟的有氧运动
-每天2个水果,上午下午各一个
-马步
-跳绳
-番茄工作法
不要总是以加班,没时间为借口。就算你没法做到一天30分钟,一周一2次还是可以的,时间是自己安排出来的。也许你真的没有时间锻炼,但是每天吃2个水果和做25分钟稍微起来走一下,休息一会这个 肯定 是可以的。
对有氧运动的2个建议
PM大于100的时候不要出去跑步,运动的时候注意自己的身体,不要超出强度了,累了就休息,你不是要去当运动员。
上班的问题
一家公司给你机会上班,不管怎么样,只要你在职,就请尽力多站在老板的角度看问题,不要总是以打工的心态,会给你不少意外的收获。
跳槽的问题
这几年流行着一类故事如:
一些人在跟着一个老板做多年,最后公司上市,一下变成百万千万的富翁。
还有一些人跳来跳去,后来还只是在底层混着但这些都是极端的例子,不能用来说明到底能不能跳槽,首先可以肯定的是可以跳槽,但是要根据自身的情况来分析也不要轻易跳槽,每一次的跳槽都要当成是最后一次来处理。
如果你的离职只是因为一些个人情绪问题,那还是先不要做决定 ,比如你认为老板只会忽悠,不给你加薪,提升能力不如自己的人,出差多,加班多等一些导致你心情不爽的因素 。这些外界的条件不应该做为你跳槽的理由。一般在自己不冷静的情况下做出的决定经常是错的。
你需要考虑的是公司所在的行业发展前景怎么样?公司的老板能力怎么样?团队够不够拼,团队的氛围,协作效率如何?我自己是不是已经是最厉害了,能不能学到我需要的新东西等等因素 。有些公司虽然目前不赢利,但是老板有能力,行业发展前景又好,那还是有很大的机会的。也许下一个网上流行的典故就出在你们公司了。不管怎么样,不要相信靠运气来呆多年之后,一夜之间成为富翁。
如果确定要跳,请当成最后一次来跳,做好相关的评估工作
* 你要跳到哪个行业去,那个行业前景怎么样。
* 新的公司实力怎么样?团队协作怎么样?能不能再帮我提高一个层次。
另外很多人跳槽还有一个原因是业余时间的问题:
觉得公司的安排让自己没有业余时间,也没法学习新东西和进步。
我觉得这个也不应该变成一个跳槽该考虑的因素,中国的IT大环境就是这样,你得学会以在工作中学习,如果一个东西你做的慢,那很大一部分可能的原因是你相关的基础不扎实,或者没做好相关的规划,先停下来想好怎么做,查看下相关的资料再开展,这也是一种学习,而且记忆更深刻。
最后不管你做出什么选择,都不要后悔,关注自身的发展,继续前行 。
交际能力的问题
程序员经常会钻牛角尖,把一个问题理解成非此即彼。这些都是缺少沟通造成的。你可能不需要学会圆滑但是至少要能流利表达自己的想法。
有些人去面试,经常不是因为能力问题,而是没法表达出自己想的东西。对HR来说,你连基本的表达都有问题,他们怎么会相信你。
转行的问题
在一些年头后,一些人因为一些原因想转行。这是一个泛泛的问题,没有标准答案 。你可能有多个选择,继续当前的路、产品经理 、管理者、架构师、甚至自己创业 等。但是不管怎么样,请根据自身的情况来判断,还有不管转做什么,请提前做好准备。比如你要转管理,先可能需要先加强你的交际能力; 自己创业,你可能需要了解项目,公司运营,吸引投资等。机会是给准备好的.人的,贸然进去只会死得很惨。
路越走越窄的问题
很多人做到最后,发现只有回老家 ,找个单位混着这条路,或者因为家庭,孩子等因素,感觉没什么选择的空间。
造成这个的原因有多方面,有些可能是个人能力问题,也有些是个人环境因素 。但是有一个基础的问题是相同的:交际圈不够大,认识的同行的人不够多。
我相信做程序这行的人还是很热心的,大家能相互帮忙,关键是要对外展示你的才能、见解,多与人交流,多帮助别人写博客会是个良好的开端。
长远规划的问题
要做出长远的职业规划,你需要了解各行业的相关动态,关注相关技术的发展动态与其他同行交流,参考或听取其他人的建议这些是你做出规划的基础 。
衡量成功的标准问题
既然是做技术,成功当然是以你的技术能力为成功标准。比尔*盖茨是一个成功的商人,不是技术员。所以在看到谁谁做生意发财时,要淡定 。不要以金钱来衡量自己的成功。
新技术的学习问题
虽然这些年新的技术,解决方案,构架,类库等层出不穷,但是基础的东西和最终要解决的问题其实是不怎么变的,抓住这些不变的东西,你才能更好、更快地去理解和掌握这些新的东西还有兴趣能为你打开IT业的大门,但是专注和持之以恒才能让你出类拔萃,所以要坚持学习。
Ⅷ 如何程序员提高自己的逻辑思维
1、 学习一门脚本语言
可以让你摆脱对底层语言的恐惧感,脚本语言可以让你很快开发出能用得上的小程序。实践项目:
处理文本文件,或者csv (关键词 python csv, python open, python sys) 读一个本地文件,逐行处理(例如 word count,或者处理log)
遍历本地文件系统 (sys, os, path),例如写一个程序统计一个目录下所有文件大小并按各种条件排序并保存结果
跟数据库打交道 (python sqlite),写一个小脚本统计数据库里条目数量
学会用各种print之类简单粗暴的方式进行调试
学会用Google (phrase, domain, use reader to follow tech blogs)
为什么要学脚本语言,因为他们实在是太方便了,很多时候我们需要写点小工具或是脚本来帮我们解决问题,你就会发现正规的编程语言太难用了。
2、 用熟一种程序员的编辑器(不是IDE) 和一些基本工具
Vim / Emacs / Notepad++,学会如何配置代码补全,外观,外部命令等。
Source Insight (或 ctag)
使用这些东西不是为了Cool,而是这些编辑器在查看、修改代码/配置文章/日志会更快更有效率。
3、 熟悉Unix/linux Shell和常见的命令行
如果你用windows,至少学会用虚拟机里的linux, vmware player是免费的,装个Ubuntu吧
一定要少用少用图形界面。
学会使用man来查看帮助
文件系统结构和基本操作 ls/chmod/chown/rm/find/ln/cat/mount/mkdir/tar/gzip …
学会使用一些文本操作命令 sed/awk/grep/tail/less/more …
学会使用一些管理命令 ps/top/lsof/netstat/kill/tcpmp/iptables/dd…<</p>
了解/etc目录下的各种配置文章,学会查看/var/log下的系统日志,以及/proc下的系统运行信息
了解正则表达式,使用正则表达式来查找文件。
对于程序员来说Unix/Linux比Windows简单多了,学会使用Unix/Linux你会发现图形界面在某些时候实在是太难用了,相当地相当地降低工作效率。
4、 学习Web基础(HTML/CSS/JS) + 服务器端技术 (LAMP)
未来必然是Web的世界,学习WEB基础的最佳网站是W3School。
学习HTML基本语法
学习CSS如何选中HTML元素并应用一些基本样式(关键词:box model)
学会用 Firefox + Firebug 或 chrome 查看你觉得很炫的网页结构,并动态修改。
学习使用Javascript操纵HTML元件。理解DOM和动态网页,网上有免费的章节,足够用了。或参看 DOM 。
学会用 Firefox + Firebug 或 chrome 调试<</p>
在一台机器上配置Apache 或 Nginx
学习PHP,让后台PHP和前台HTML进行数据交互,对服务器相应浏览器请求形成初步认识。实现一个表单提交和反显的功能。
把PHP连接本地或者远程数据库 MySQL(MySQL 和 SQL现学现用够了)
跟完一个名校的网络编程课程,不要觉得需要多于一学期时间,大学生是全职一学期选3-5门课,你业余时间一定可以跟上
学习一个+ Ajax (异步读入一个服务器端图片或者数据库内容)+JSON数据格式。
HTTP: The Definitive Guide 读完前4章你就明白你每天上网用浏览器的时候发生的事情了(proxy, gateway, browsers)
做个小网站(例如:一个小的留言板,支持用户登录,Cookie/Session,增、删、改、查,上传图片附件,分页显示)
买个域名,租个空间,做个自己的网站。