⑴ 请问一下c++程序员要怎么写简历才能吸引人
第一:要强调你对基础很好。巧前
第二:是有没有项目经验,也败毁就是有没有自己设计过什么项目或者游戏。这是很重要的。项目经验
第三:也就是为人孝枯清了。真诚、
⑵ 如何招到一个靠谱的程序员
1. 简历看人
阅读简历永远是面试的第一步。好的简历一定是正确、清晰并且能够体现候选人最有价值一面的。我首先会过滤掉那些包含错别字,文句不通或没有逻辑性的简历,因为如果一个程序员连自己的简历都不愿意去仔细检查并完善的话,很难想象他写出来的代码质量会如何。接着,我便会重点阅读简历中的项目经验部分,在这里我能够看到面试者的开发经验,技能栈,并且判断他们熟悉的技术框架、工具是否与目前公司要求相匹配。
这里,我还会特别关注面试者是如何来写这部分项目经验的,你需要用尽可能简练的文字来描述项目的背景,你在项目中承担的角色、参与项目的时长,你用到的技术、以及你在项目中的亮点等信息。优秀的程序员们往往有一个共同的特质,那就是善于归纳,并能够一针见血的发现问题或把一个问题说清楚。我经常看到面试者在简历中像写故事一般地描述他们的项目经历,光这一个章节就有好几页,其实这反而会给你减分,因为这会让面试官判断你缺乏必要的归纳能力。
最后你的一些与编程有关的社会化活动,如:你在GitHub上的开源项目,在知乎、V2EX中给他人的解答以及你的个人技术博客等等都会给你加分,因为这说明你对所从事的工作有着极大的热情,并愿意在业余时间去学习和提高自己,就像在我之前的 “给职场新人的10点职业建议” 一文中提到的,如果你要成为一个领域的专家,那你必须花费超过10,000小时,而这光靠工作时间是远远不够的。
2. 给面试者10分钟介绍自己最擅长的
当面试者通过了笔试和HR面试之后,你就需要面对面地对候选人进行面试。我远不是什么面试专家,但我有一些自己的独特方法。我讨厌问一些很个人的问题,比如你的职业规划是什么?你为什么想换工作?等等。我更愿意给面试者10分钟时间,让他介绍自己最擅长和最感兴趣的领域。这往往能帮助我很快作出下面的判断:
这个人对他所做的事情是否充满激情
他们是否能在团队中很有效地进行沟通
他们是否在专业领域足够擅长
你的团队是否会乐于和这个人一起工作
这一招我在面试中用得很多,而实践证明也确实非常有效。
3. 基础打牢了吗?
一般,有一定规模的公司都会为面试者安排机考或笔试,从而能首先筛掉一批未能通过的面试者。另一些规模较小的或初创公司则会让面试官直接进行技术面试。其实,我觉得这两者的差别不大,有经验的面试官往往能够通过几个最简单的技术问题,判断出面试者的技术基础是否牢固,这不是为了证明他有多优秀,而是用来判断他是否是一名合格的程序员。对于我来说,并不看重机考的成绩,因为机试的考题很多能够在网上得到,特别对于一些外包公司,他们总是能够通过各种途径得到考题,从而使得他们推送的外包能够顺利通过笔试。
下面是我经常会问的几个问题(java):
HashTable与HashMap有什么区别?
Servlet是线程安全的吗?
jsP中 @include跟jsp:include的区别
HTTP的response code 403和500分别代表什么
......
这些问题都很简单,但一些基础不牢的程序员往往会在这个时候露馅。当然,根据面试岗位的不同,你还可以有针对性地问一些问题,例如,你需要找一个能写核心算法的程序员(比如 银行的总账计算,或者保险公司的保费计算),那么你可以问一些算法相关的问题。
4. 技术深度够吗?
具备牢固的技术基础,一般就可以满足项目中普通程序员的要求了,但如果你需要找的是一个资深程序员,那么你还需要对面试者的技术深度进行考察。我们现在做项目时都会大量使用框架,这能使我们的开发效率和质量都得到提升和保障,但同时也降低了对于程序员开发技能的要求。因此我一般会询问面试者下面的问题,来考察他对所使用框架的掌握程度。
请你描述一下,在这个项目中,从一个HTTP请求发起,到最终的Response返回,它在你的系统和框架内部是如何流转的?
这个问题往往能够判断出面试者对于相关技术掌握的深度。较初级的开发人员描述的层级往往比较浅,比如使用Spring MVC框架的,只能说到实现一个Controller继承BaseCommandController(甚至很多开发人员只知道继承了一个公司内部框架的基类),至于再往下Spring框架是如何进行内部流转的,就再也说不清楚了。而更资深的开发人员,往往能说出框架内部的实现机制,以及如何调用和处理的。在面试者描述的过程中,你还可以穿插询问一些比较有深度的问题,比如框架中某个类这样设计是哪一种设计模式的体现,采用这样的设计有什么好处等等。这比让面试者默写一个设计模式代码要有效、自然得多。
除了技术层面上的考察之外,对于资深开发人员,还需要考察他们的设计能力。说到软件设计,大部分面试者都能熟练地背出面向对象的三个基本特性:继承、封装、多态,也能把它们的概念描述清楚。但我一般会问下面的这个问题来考察他们的面向对象设计能力。
请用一段程序代码描述我们所在的这间房间。
我惊讶地发现至少有一半的面试者都很难准确使用Interface和Class来给房间建模,也有一些人会将最基本的代码语法或关键字写错。
5. 选择适合所在企业文化的人
这一点也曾是我经历的一个误区,我总是希望能为团队招到技术能力最强的人,而忽略了他是否与整个公司和团队的文化相匹配。这往往会造成,虽然招到了人,但没过多久就因为理念不同不欢而散的结果,反而给公司带来了损失。让我们看看GitHub的负责人是怎么说的。
我们很严肃地看待我们自己关于招聘流程的哲学。我们希望每一个GitHub员工都了解他们所要面对的环境,并保证他们是能够很好适应的。这包括我们所创造的文化、哲学、计划、错误甚至是晚餐。比起他们的技能是否满足要求,我们更看重他们的潜力以及是否能够适应我们的企业文化。
我曾在具有鲜明文化差异的不同公司或团队工作,看到许多崇尚开放、开源的程序员在一个相对封闭,具有很多流程以及规范限制的公司中很难发挥,最终选择离开。因此在招聘程序员时,选择合适的往往比选择最优秀的更重要。
6. 行为面试法
行为面试法可能是我在整个面试过程中唯一用到的教科书面试方法。一个程序员是否能够很好地工作,不仅取决于他能否顺利地完成开发任务,更重要的是在遇到一些特殊场景或问题时,他能否合理有效地处理和解决。行为面试法能够帮助我们从面试者描述的过去某一具体事件中,预测未来他在工作中可能的表现。下面便是一个我经常用到的问题。
请谈谈你在这个项目中遇到的最大困难或挑战是什么,你是如何解决的。
从面试者对上面这个问题的回答中,我能够很好地判断他是否有较强的独立解决问题的能力,而我认为这是除技术能力之外,程序员最应具备的能力。
7. 给他们一个虚拟任务
经过上面的这些环节,你可能对面试者的整体情况已经比较满意,但先别急着下结论。我曾见过能够顺利通过上面所有面试步骤,并且被雇佣的程序员,当他们进入实际工作后却没能把事情做好。
在你确定是否录用他们之前,可以给他们一个虚拟任务。我不是说一个抽象的程序问题,而是指一个真实的,可能就存在于你当前项目中,并且需要在一两个小时之内完成的一个开发任务。我曾经出过这样的考题:
写一个小程序将一个以特定格式(如CSV)存储的文本文件转换为XML格式,并存储为另一个文件。
你可以给他一台已经配置好开发环境以及IDE的电脑,让他当场编写代码。当然如果时间有限,你也可以直接询问面试者的实现思路,并简单用伪代码来描述处理过程。通过这个测试,你能够看到很多细节,比如面试者是否有良好的编码习惯,异常处理是否规范,代码逻辑是否缜密高效,以及他的开发效率是否足够高。如果面试者给出了非常优秀的解答,那么你就应该能够判断他确实是一个优秀的候选人了,因为我从没碰到过能够通过上面的测试,却在实际工作中无法做好的人。
⑶ 程序员工作压力大,身体也垮,为什么还这么多人想做程序员
程序员的工作其实压力非常大,经常都会有程序员因为压力过大而患上抑郁症,更有一些程序员因为长期高强度工作而导致猝死,但是每年还是很多人想要做程序员,在一些大公司,比如腾讯之类的大型公司,程序员的竞争也是非常激烈。压力这么大,身体也很容易垮,但是为什么还是有这么多人想做程序员呢?我觉得有几个方面的原因。
第一,程序员的工资还是非常高的。在一些大的公司,刚毕业的程序员工资一万块钱都是很少的了,这个相对其他很多专业的学生来说,程序员真的是 一个高薪行业。努力两三年都可以在小城市买房,在大城市也可以付首付了。所以程序员这个职位能够吸引很多人进入的最大一个原因就是经济原因,毕竟有钱赚的工作每个人都会喜欢。
第二,其实换过几份工作的人都知道,没有一个工作是不辛苦的,没有哪个工作是没有压力的。程序员的工作虽然也是辛苦的,但是公司能够给予程序员的一些福利待遇也比较好,相对来说除了辛苦一点其他的保障还是非常好的,所以这就是很多人坚持下来的原因。
第三,程序员的工作每天都是和机器打交道,很多时候不需要和太多的人沟通,这样的工作对于比较内向或者不喜欢应酬的人来说还是非常不错的。有一些人有社交恐惧症,而程序员的工作多数时候都是当码农,所以他们在做这个工作的时候不需要和太多的人有牵扯觉得比较安心。
其实只要想把自己的生活过好,没有一个人的工作是不辛苦的,只是在辛苦的同时能够得到自己想要的东西我觉得就够了。不过程序员的工作压力大,所以日常生活当中也应该给自己找到合适的锻炼身体的时间,找到适合自己发泄的途径,这样身体才能正常运行。
⑷ 如何追一个程序员
初看到这个问题感觉挺有意思的,因为我自己是学计算机的,毕竟我们班上就有一些大神一样的存在,我想想他们其实是很好的人呢,乐于助人,他们帮助一些基础不好的人学习编程啊,要是追他们的话,我还真我没想过,毕竟我有男朋友哈,不过我认为追他们的话,可以先去聊聊天,多了解了解是不是真正是自己想要一辈子在一起的人,给自己一个肯定,一个信念,我也相信两情相悦的人终究会在一起,当我们找到一个好时机,可以去向他们表白,告诉他们自己的想法,如果他是真的爱你的话,相信你们一定会幸福的。
现在这个时代,爱情有时候显得很无用,有时候我们会被它伤的遍体鳞伤,有时我们会感受到温暖和幸福,即使我们受到伤害,大哭一场以后,我们依然要相信爱情,相信世上有真爱的存在。
不管是不是追程序员,我们都知道程序员也是人,都有七情六欲,我们都需要爱和被爱,也希望程序员能多点时间去陪陪自己的家人和女朋友,对女朋友上点心,别让她们受委屈,自己的女人自己不对她们好,有一天失去了也不要怪别人。
希望所有看到有情人终成眷属。
⑸ 怎么跟一个程序猿聊天,该聊些什么话题
聊天要满满正能量,其实说白了,就是表现的乐观积极。为什么要表现的积极乐观呢?从理论分析,可以体现你的高价值;从情感分析,大家都喜欢跟积极乐观的人啊。之前知名把妹达人Tango在《坏男孩教你第一次怎么约会才能吸引女生》里提到过,因为很多人的负能量太多了,悲观、抱怨、痛苦,跟女孩刚接触的时候塌高还好,时间一长这些都暴露出来了,最糟糕的是,不仅让女孩心情不好,自己还特委屈:我不就说点实话/心里话吗。这种性格就好像漩涡一样,把所有快乐都转化为虚无。而性格内向的人,或多或少都有这个问题,所以要在这里说一说。
1. 聊天应该聊些什么,忽略负面信息
想想为什么我们特别喜欢那么英雄式的人物?因为他们视困难于无物,径直趟过。能这样做的,有这样的心态和能力,无疑是高价值的。所以不管是面对巨大的困难,还是生活中一点点不如意,你能够体现出来这种视负面信息如无物,无疑也是高价值的;如果你做不到,则会让对方觉得你很差劲
案例:很早之前看见过一个帖子,主角第一次请女孩吃饭,餐厅是他选的。结果到了餐厅见了面落了座之后,一半出于性格,一半处于不知道说什么好团判尺,他就开始数落餐厅:桌布上有油渍啦、上菜太慢啦、服务员态度不好啦、菜太难吃啦。结果吃饭完出了门,他还继续跟女孩说这家餐厅真差劲。然后呢,然后女孩就生气走啦。令人哭笑不得的是,这个哥们发了帖子,把他说的这些话都写了上去,却还不知道错在那里。
错在哪里呢?1. 他说的都是负面信息,负面信息都是惹人烦的,而且这些负面信息还跟自己现在做的事情---吃饭是紧紧关联的,你自己想象,要是吃饭的时候,旁边的人跟你说,这家店的后厨多么多么脏和恶心,你还吃的下么? 2. 其次,这家店是男方自己选得,也就是说,在约会的初期,这家店的形象和男方的形象是绑在一起的!骂这家店不好,不就是骂自己,扇自己大嘴巴吗?
面对负面信息,应该 1. 事前做到最大限度的调查,尽量避让负面信息,说白了就是去餐厅前先上点评网多看看,别去那些坑爹的地方。 2. 如果面对不可避免的或者突然出现的负面信息,无视好了。比如,桌子上有半杯咖啡洒了,也不多。这要是你会怎么做?忙不迭的找纸巾或者递纸巾,手忙脚乱的擦拭一气,如果粘到衣服上了还要擦来擦去擦个半天,还要聊上一小阵洒咖啡这个话题,大概是这样吧。如果这件事情发生在大人物身上又会怎么样呢?这是我在一本书上读到的例子,说是三个大人物在一起吃饭交流,一个人说话两个人听着,忽然间咖啡洒了,但是没有任何的慌乱,洒咖啡的人顺手拿起纸巾来擦拭干净,从头到尾说的人没有停顿,听的人的注意力也没有离开过讲话人的身上,好像洒咖啡这件事情从没发生过一样。这就叫无视负面信息。
2. 聊天应该聊些什么,能看到事物好的一面
我们从小就学习,事物都有两面性,没有绝对的好也没有绝对的话。但是有些人天性就是看的想的都是坏的一面。自己这么想还可以,但是这么对待别人就太差劲了。
例如,朋友做生意,赔钱了。有些人就会说,你怎么这么笨啊,这个事情那么明显,你就想不到吗?这件事情赖不到别人,只能你自己人倒霉吧。你想想看,人家赔了钱,已经很难过了冲森,你还这么说,这不是让他痛上加痛吗?这时候你如果说: 做生意也要学习的,也要交学费的,你赔了钱,这就是学费,虽然失败了但是你学到了东西,后面再做你就能不会再犯同样的错误了,离成功就更进一步。你要这么说,你朋友准保会觉得心里一宽,开心许多。
同样的,女朋友丢了钱包,是说:“你怎么这么笨,钱包都丢,自己东西自己不看好了!你看好了贼能偷走吗!”这样好,还是说:“丢个钱包不是什么大事儿,人没事儿就好,钱丢了再赚,不是什么大事儿,你没钱还有我呢,放心吧”这样更能让女友感觉到舒心安心放心?
3. 聊天应该聊些什么,会说话
如果对方跟你说她喜欢某种东西,而你又不喜欢,甚至很厌恶,但是又不得不跟她说下去,你会怎么做呢?说实话,我很厌恶这个东西,这样吗?
如果对方买了条裙子,但是你觉得不好看,她又非问你,你怎么说?说这条裙子真不适合你,很难看,这样吗?
很多人思考事物,都是非此即彼,非黑即白的二元论,面对上面的问题,要么就是说假话骗人,要么就是说真话得罪人。这就是典型情商不高的表现。其实,会说话,而不是要说假话;会赞美,而不用阿虞奉承。
例如,女孩跟你说她不喜欢猫,那你就说:大家都说猫是奸臣狗是忠臣嘛。这句话,你并没有表态,说我是喜欢猫或者不喜欢猫,只是说了一句人人都知道的话而已,但是女孩会觉得你是在肯定她的意思。对方问你裙子漂亮吗,你不必说裙子很漂亮,很适合你,你可以说这个颜色很适合你,或者这个样式很漂亮,一定很贵吧。这些回答都没有说假话,同样让对方有你肯定她的感觉。
而有的时候,会说话仅仅表现在不说没用的话,比如,邻居家要出门旅游,就不要跟人家说什么天气预报显示那边要下雨,或者那边公路刚刚翻了辆大巴死了几个人;朋友家的孩子出国留学,就不要跟朋友说什么那个城市治安不好刚刚又被杀死了两个留学生之类的。
4. 并非只能说好话,垫定正能量基础
看了上面那些,有些朋友会问,难道我们聊天的时候只能说正面的、积极的好话吗?当然不是啊。其实,人这东西,最喜欢听刺激的,恐怖的,猎奇的信息,对于这些信息人的注意力可比那些正面信息高很多。那么为什么我一直再说聊天要有正能量呢?
A.垫定正能量的整体形象基础。当你给了对方这种积极阳光的整体印象,那么你说些负面能量的东西,别人更容易接受,而且对你的想法会是,看不出你也有这一面啊~~ 会感觉到你这个人有层次,不是一眼看透那么简单。而没有正能量的整体形象,一味的说些负面信息很大的事情,对方只会认为你不成熟、不男人、心理扭曲等等。
B.正能量可以化解某些信息中的负面感,从而衬托出你的积极性格和见识能力。比如聊到耸人听闻的社会案件,你可以跟对方分析,这件事情发生的社会原因是什么,报道分析的盲点是什么,我们怎么做可以避免遇到这种情况或者在这种情况下保护自己之类的。
就好像太极图中的阴阳,你看阳并不是纯阳,中间是有个黑点的,这说明阴阳不是互相对立,而是互相依存在一定程度内互相转化的。这里说的正能量也是一样的,不是要求纯粹的积极乐观,只是需要保持一个整体积极乐观的形象而已。其实我们在约会学里学的大部分的技巧的原理都是相似的,比如推与拉,打压与赞美,可得性与不可得性。正能量与负面话题也是一样,用正能量打造好自己的形象和吸引力,然后善用负面话题引导乃至突破对方底限,你会发现这也是个好搭配。
5. 该说的时候说,不该说的时候不说
有些朋友看了上面的部分,可能会有些疑问,比如,正因为是好朋友,所以才要跟他说怎么赔的钱,所以才要告诉他他要去的地方下雨,所以才要告诉他他孩子所在的城市危险啊,难道这些也要归入负面信息吗?
对于这些,其实都是分时机,有时候你说,就是对的,有时候说,就是不对的。
一, 用正能量中和负能量,上面我说的赔钱那个例子,你可以跟他说他有什么不对,做错了什么,但是最后一定要用正能量为他宽心,让他觉得未来是光明的,小小的挫折不算什么。
二, 有些事情,现在不能说,过了再说。比如约会吃饭,餐厅真的不怎么样,但是吃的时候别说,聊些开心的事情。等吃完了过一阵子,气氛好的时候,你可以说,刚刚没吃好,前面有个xxx店咱好好补补吧。或者跟她一起取笑餐厅的设施或者服务员的态度等等。在经历不开心的时候,努力让自己开心好了;等过了不开心的经历,把不开心的感觉忘得差不多了,再拿它当话题开涮。
三, 有人在那篇经典的《第一次约会技巧之坏男孩如何让她爱上你》里提到过,有些事情,没发生的时候说,发生了就不要说。比如你的朋友想去旅游,还没有定呢,你可以告诉他,他要旅游的目的地最近天气不好;如果他已经定了,明天就要飞了,你今天也别跟他聊这些了,聊也改变不了他的行程了。或者,如果你的朋友想买手机,还没买的时候,跟你说想买xx款,你可以骂这款手机很sb,什么厂商优化不给力啊,摄像头渣啊,运行起来卡的要死啊;但是如果对方已经买了,就别说这些了,买都买了,说不好听的只能让人家心里添堵。
⑹ 如何追求男性程序员
这个问题有意思。
男追女隔座山,女追男隔层纱,所以如何追求男程序员,下面分享一些有意思的idea吧。
给他发出了以上这些讯氏肢息之后,你就可以开始坐等鱼儿上钩了,你什么也不需要做,只需要展示自己最好的那一面就行了。因为这个时候你应该做的都已经做了,如果他是真的喜欢你,那他一定会跟你表白的。这也是在给你一个冷静思考的时间,也是一个互相选择的时间。
最后,祝你成功!
⑺ 怎么勾搭高冷的程序员
人都是有感情的,就算是再高冷,她也能被感动的。
在我上大毁禅稿学的时候特别的喜欢一个女孩子,她是计算机专业的,是一个程序员。自己长的特别的漂亮,表现出来很高冷,让人不想接近,但是为了能够追到她。自己每天都会按时到一个地方去等她,然后陪她一起下课,刚刚开始的那段时间她对自己不理不睬的,也没给我好脸色看。
直到有一次她生病了住院,身边没有人陪她,我就请了假到医院陪了她一个星期。一个星期回来以后,袭兆对我的态度360度大转弯。虽然还是有点对我忽冷忽热的,但是会主动和我打招呼,甚至会主动和我纤孝说话,就这样坚持了半年的时间,终于被我感动了。
最终自己抓住机会表白,成功了。
要想勾搭高冷的程序员,最好还是感动她。
⑻ 如何追一个程序员
追程序员难道和其他的男生不一样吗,可能是我身边的程序员都比较奇葩吧,我觉得他们并没有传说中的那么死板,相比之下,我还觉得他们多了一逗比的气息呢。
先说说我们的那两个PHP吧,真是金句不断,我差点咐纯就有冲动给他们两个做个金句语录了。说话也很幽默,平时总是和我们一起聊天,在求助他们帮忙的时候也会义不容辞,而且我们的程序员都不矮呢。撩起女生来也是一个比一个强的,一点都不会逊色。
所以要想追一个程序员并不是什么难事,因为做程序员的男生和其他的男生都是一样的,并没有真的很死板,碧猛他们在工作的时候很认真,不衡慧咐许有一点马虎,但是在玩的时候,也是不会输给任何人的。女追男隔层纱,其实程序员还是很好追的。
你可以先慢慢的对他表达你的喜欢,你喜欢人家总得让人家知道吧,不能你在这暗恋了好久,被别人捷足先登了。你得让他知道你对他有意思。程序员男生的反应可能不那么灵敏,所以你可以多暗示几次,然后也暗示一下身边有威胁的同性。让他们知道这个程序猿是你准备牵走了。
暗示了以后常常请他帮忙。让一个人喜欢你,就要让他常常帮助你。如果他很愿意帮助你,而且在帮助你的过程中也并没有表现出什么不好的情绪,基本他也喜欢你。可以慢慢吸引他,让他主动去追你。如果他Get不到你的信息,那就没办法了,只能你主动表白了。希望你能成功。
⑼ 如何成为一名程序员 6种方法来成为一名程序员
目录方法1:网络编程1、了解网络编程的含义。2、浏览不同的网站,了解它们的外观。3、学习至少一种头脑风暴技术/方法,并学习一个用来实现头脑风暴的软件。4、熟悉网站结构。5、赶紧学一门图形设计的课程。6、了解网络下部构造的基本情况。7、巧伍轮学习HTML和CSS语言。8、学习XML及其相关技术,比如XSL和XPath(不是必需,仅作推荐)。9、先建立简单的静态网站,直至你熟悉并习惯HTML语言。10、学习客户端脚本语言。11、熟悉你所学的客户端脚本语言。12、学习至少一种服务器端脚本语言。13、学完服务器端编程语言之后就开始创建一个试验项目。14、获得你的网站,开始用你自己的网页实验。方法2:桌面软件编程1、弄清楚桌面软件编程是怎么回事。2、了解不同的电脑硬件结构。3、学习一种入门级(小孩子学的那种)编程语言。4、学习程序化、面向对象、函数设序设计规范的入门。5、学习一种程序化程式设计语言的入门课程。6、学习至少一种高级建模技术,比如UML 或ORM。7、开始编写一些小的主控台应用程式或类似的应用程式。8、学习一门你选择的编程语言的更高级课程。9、应用你所10、至少再学习一门编程语言规范的入门课程。11、试着比较你所学的两门编程语言。12、利用你学过的一种语言来学习可视化编程概念。13、开始把你所学的知识运用到你设计的软件小工程中。14、创建一个虚拟的"毕业工程"。15、通过学习更高级的课程、更加注意细节以及在网上学习搭建架构的技巧,来加深对你学过的可视化架孝信构/库/包的理解。16、搜索其他含可视化元素的包/库并学习它们。17、学习图形学课程(而非图形设计)。18、成为游戏程序员(不是必须的)。方法3:分布式程序设计1、处理分布式应用编程。2、快速了解通信系统及其硬件。3、熟悉网络硬件结构和设备,比如集线器、接线台和路由器。4、学习网络协议的课程。5、学习XML 语言,并熟悉它。6、开始学习一门shell脚本语言。7、开始时用上你学的脚本知识,只运用程序化程式设计。8、使用你所学的脚本语言,写出实现机器之间通信的脚本。9、转移到桌面脚本/编程语言。10、专注于语言的核心部分,尤其hi那些支持网络。11、学习分布式应用设计与结构的课程。12、使用你所学的编程语言来了解服务部分建构和服务。13、学习如下技术中一种或更多。方法4:库/平台/框架/核心编程1、了解什么是核心编程。2、学习一门支持创建可重复使用内容/包的编程语言,如果你还没学过的话。3、学习一门UML 和ORM的高级课程。4、学习软件工程的课程。5、学习至少一个模块,基于内容的、面对对象的和 事件驱动编程技术和概念。6、进一步了解不同的操作系统及其支持的编程架构。7、集中学习独立平台架构、编程语言和技术。8、如果到目前为止你学习的编程语言具有ANSI/ISO/EEE/W3C标准版本,那么掌握这些标准。9、尝试模拟简单的、已经建立的库,尤其是开源的库。10、在你的编程领域内寻找开源的包。11、学习不同方法。方法5:系统编程1、了解系统编程的定义。2、跟着"桌面应用程序员"的前三个步骤。3、橘山学习线性代数的入门课程。4、学习微积分课程。5、学习逻辑学和/或离散数学课程。6、了解不同的"准操作系统"。7、学习计算机硬件结构的课程(或者作为替代,看看书)。8、深入理解不同的计算机硬件平台。9、初步熟悉你所选择的硬件平台/操作系统的汇编语言。10、学习ANSI C 和 C++ 语言,还有程序化程式设计的一些概念。11、在你选择的平台上理解并实践C/C++标准库。12、搜索网络资源、书籍和课程来理解你的平台独特的C风格。13、用C/C++练习编写高级代码。14、学习更高级的Assembly。15、学习操作系统设计的课程。16、寻找并阅读你所选择的平台的相关文章。17、练习你已经掌握的知识。18、以最有益的顺序学习语言。方法6:编程科学1、了解编程科学家是做什么的。2、累积和四年制计算机科学学历同等多的科学知识。3、选择特定的领域。4、考虑获取更高级的学历。5、了解你选择的编程领域的相关技术和编程语言。成为程序员是一个日积月累的过程,需要日复一日年复一年的技能增长。编程本身是有趣的,并且有回报(脑力层面、精神层面、经济层面)。这份指南不能保证你轻松当上程序员。不要神化下面这些步骤,从中你大概能了解在现今编程界如何成为一名程序员。
方法1:网络编程
1、了解网络编程的含义。网络应用是指设计在网络结构顶层的软件部分。这就意味着这些应用是通过诸如火狐或IE之类的浏览器来处理的。架构于网络结构的顶层并不一定要连接到网络。这就是说网络应用建立在如下标准网络技术的顶层:HTTP
FTP
POP3
SMTP
TCP
IP协议
HTML
XML
Coldfusion
ASP
JSP
PHP
ASP.NET
2、浏览不同的网站,了解它们的外观。(右击,选择"查看源"或按F12。)寻找网站类型/内容的多样性,而非数量。通常你需要访问以下网站类型中至少一种: 团体网站(商业公司,非营利机构/组织,政府组织)
网络索引引擎(搜索引擎,meta搜索网站,专业化搜索引擎,目录)
数据挖掘网站
个人网站
信息/网络全书式网页(维基,数据单,技术规格,人工列表目录,博客和日志,新闻和新闻机构网站,黄页,等等。)
社交网站(社交门户,书签网站,记录笔记网站)
合作网站(这包含了上面提及的目录,比如维基和博客)
3、学习至少一种头脑风暴技术/方法,并学习一个用来实现头脑风暴的软件。例如:头脑风暴图和微软Visio。
4、熟悉网站结构。指的是创建概念化网络范式、网络地图和导航结构。
5、赶紧学一门图形设计的课程。尽量学习至少一个图形编辑/操作软件包(不是必须的,但强烈推荐)
6、了解网络下部构造的基本情况。包括了解以下: 基本网络服务协议(HTTP,FTP, SMTP和POP3或IMAP4)
网络服务器软件(最好其中一个就是你以后主要工作的平台)
网络浏览软件
邮件服务器和客户端软件
7、学习HTML和CSS语言。或许你还想要"所见即所得"软件包来编辑HTML。
8、学习XML及其相关技术,比如XSL和XPath(不是必需,仅作推荐)。
9、先建立简单的静态网站,直至你熟悉并习惯HTML语言。
10、学习客户端脚本语言。多数人要么学Java,要么学VB,但也有一些人学习Perl和DHTML。
11、熟悉你所学的客户端脚本语言。潜意识里提醒自己只用你学的那个语言。只有在你熟悉你的客户端脚本语言之后才能进入下个步骤。
12、学习至少一种服务器端脚本语言。如果你只用一种服务器软件,那就学其中一种编程语言。否则,你得每个服务器软件都学至少一种编程语言。
13、学完服务器端编程语言之后就开始创建一个试验项目。
14、获得你的网站,开始用你自己的网页实验。
方法2:桌面软件编程
1、弄清楚桌面软件编程是怎么回事。多数桌面软件程序员都是编写商务需要的代码,所以好好了解一下商业及其组织和经济结构将对节省时间、提高效率大有裨益。
2、了解不同的电脑硬件结构。看看数字电路设计和电脑结构的入门级课程,但是也有人认为这对于刚起步来说太超前了,所以看两三篇说明的文章(比如 这一篇 和 这一篇)就够了。学完第一种编程语言后你可以再返回这个步骤。
3、学习一种入门级(小孩子学的那种)编程语言。不要因为你不是个小孩子就不好意思去学。这些入门级语言能大大减轻你正式学习第一门编程语言时的痛苦和压力。然而这一步也不是必须的。你也可以在上一步之前完成。
4、学习程序化、面向对象、函数设序设计规范的入门。
5、学习一种程序化程式设计语言的入门课程。无论你以后选择何种编程语言,在某种程度上它都要求程序化程式设计。此外,据多数程序员反映,程序化程式设计总的来说是了解编程的一个很好的切入点。
6、学习至少一种高级建模技术,比如UML 或ORM。
7、开始编写一些小的主控台应用程式或类似的应用程式。你可以利用编程书中的常见小练习。选择一个工具,用你所学的编程语言编写程序。
8、学习一门你选择的编程语言的更高级课程。确保进展之前先理解下列概念,并能熟练运用。对程序用户输入输出信息。
程式化设计语言写成的程序中的逻辑流程和执行流程。
声明、分配和比较变量
编程结构分支,比如if..then..else 和 select/switch..case.
循环结构,比如while..do, do..while/until, for..next.
创建、调用程序与函数的编程句法
数据类型及如何操控
用户定义数据类型(records/structs/units)及其使用
如果你的语言支持超载函数,理解它。
你选择的语言的内存处理方式(指针,变量窥视,等等。)
如果你的语言支持运营商超载,理解它。
如果你的语言支持delegates/函数指针,理解它。
9、应用你所学的高级技能 面向对象的规范
10、至少再学习一门编程语言规范的入门课程。推荐学习每种范式的编程语言,多数高级程序员确实是这么做的,然而,通常你开始时只学一种,应用所学知识训练了一段时间,获得了编程的鲜活经验,然后接着学习另一种。试试下面的语言: 逻辑编程范式
函数编程范式
面向对象的范式
11、试着比较你所学的两门编程语言。评估各自利弊。通常可按以下方法完成拿出你在学习第一门编程语言时编写的简单范例,现在用第二门语言重新编写。
创建一个工程,尽量用上两种语言完成它。有时取决于你选择的工程和语言,你可能仅用一门语言还无法完成这个工程呢!
写一份两种语言之间相似结构和独特之处对比的速查表或一览表。
尽量使用另一门语言找到模仿这两门语言中独特之处的办法。
12、利用你学过的一种语言来学习可视化编程概念。几乎所有的编程语言都具有支持可视化编程和其他支持控制台或类似控制台编程的版本/库。同时进行的包括: 初步了解事件驱动编程。在某种程度上,多数可视化编程依赖事件及事件处理(用上你选择的语言)。
尽可能多的尝试桌面软件,理解软件是做什么的。多数软件开发公司会提供产品的测试版,你可以拿来测试软件。在完善用户界面方面保持更新。
阅读关于图形用户界面的文章或教程。
13、开始把你所学的知识运用到你设计的软件小工程中。尽量把你的编程专业知识运用到你日常生活中的问题上。比如,编写程序,批量重命名文件,视觉上比较文本文件,复制目录里的文件名到内存/文本文件之类的东西。刚开始简单一点。
14、创建一个虚拟的"毕业工程"。把这个放到最后完成,用上你到目前为止学到的可视化编程技术。
15、通过学习更高级的课程、更加注意细节以及在网上学习搭建架构的技巧,来加深对你学过的可视化架构/库/包的理解。
16、搜索其他含可视化元素的包/库并学习它们。
17、学习图形学课程(而非图形设计)。对于想要写出吸引人的用户界面元素的程序员来说,这将大有裨益。
18、成为游戏程序员(不是必须的)。很大程度上游戏编程是被当作桌面编程的。如果你想成为游戏程序员,完成这些步骤后你需要进一步学习游戏编程。对于游戏程序员而言,图形学课程是必须的,后续步骤中第二门语言应该选择逻辑/函数编程语言(最好是Prolog或Lisp)。
方法3:分布式程序设计
1、处理分布式应用编程。分布式应用编程被许多人认为是最难学的一种,它要求计算机和通信技术中的不同知识。
2、快速了解通信系统及其硬件。这个步骤不是必须的,但是对于理解网络拓扑结构很有用。
3、熟悉网络硬件结构和设备,比如集线器、接线台和路由器。
4、学习网络协议的课程。在你开始分布式应用编程之前,你需要好好理解"开放系统互联 (OSI) "模型、以太、IP、TCP、UDP和HTTP 。
5、学习XML 语言,并熟悉它。
6、开始学习一门shell脚本语言。对基于Windows的编程,可以是任何能与Windows脚本宿主兼容的脚本。对基于Linux的编程,Bash脚本和 Perl就够了。对这两个平台都强烈推荐Java,原因如下: 几乎所有操作系统的都支持脚本宿主(Windows 脚本宿主默认支持java ,大多数Linux发行版都有支持java脚本控制的包)。
许多开发者认为它很容易学。
当你需要学第二门编程语言(C,C++,C#,Java和J#都有ALGOL开源句法)时,它拥有的ALGLO开源句法就能使你熟悉更多编程语言
通过学习java,你会熟悉网页的客户端脚本,这可谓一大福利!
7、开始时用上你学的脚本知识,只运用程序化程式设计。之后,根据你的脚本语言和它所支持的,你可以用上更高级的编程技巧和范式。所有的脚本语言在某种程度上都有程序化程式设计的一些方面。
8、使用你所学的脚本语言,写出实现机器之间通信的脚本。学习完成这个所必需的东西。简单的通信就足够了。
9、转移到桌面脚本/编程语言。一个比较好的是多范式语言,比如Python。简单了解第二门语言。有许多理由让多数程序员选择java。然而,在这个领域内C#正在获得多数优势。Java和C#被青睐的原因如下:它们是面向对象的编程语言,使大量程序员免遭实现细节之苦,因为它们都支持组成部分(代码单元、预编译,它们可以执行特定任务,并被用到其他程序中)。
它们支持事件驱动编程,在某种程度上还支持OO和程式化程序设计。
建立语言的架构按属性分布(比如Java)。
有许多现成的包来处理。社交网络同时作为开源代码和架构内置包,这使得程序员继续其他人工作更加容易。
10、专注于语言的核心部分,尤其hi那些支持网络。少注意用户界面元素,比如输出,窗口设计和技术等。
11、学习分布式应用设计与结构的课程。可以通过书本、网上教程或学术课程来完成。然而,十分有必要理解分布式应用的结构及其概念。
12、使用你所学的编程语言来了解服务部分建构和服务。
13、学习如下技术中一种或更多。推荐你每一种都了解以下。多数分布式应用程序员不会止于一两门编程语言,他们会每个操作系统各学至少一种语言。这是因为如果你希望你的应用"分布式",你应该至少为每个主要的操作系统各提供一个版本。公共对象访问代理体系结构(CORBA)
简单对象访问协议(SOAP)
异步JavaScript和XML(AJAX)
分布式组建对象模型(DCOM)
.NET远程处理
XML 网络服务
方法4:库/平台/框架/核心编程
1、了解什么是核心编程。核心程序员几乎都是高级程序员,已经从编写应用转变为给其他程序员编写代码汇编。
2、学习一门支持创建可重复使用内容/包的编程语言,如果你还没学过的话。
3、学习一门UML 和ORM的高级课程。多数库开发者使用其中一种,或两种都用。
4、学习软件工程的课程。
5、学习至少一个模块,基于内容的、面对对象的和 事件驱动编程技术和概念。你所学覆盖越多编程范式和语言,你就能成为越成功的库/包程序员。
6、进一步了解不同的操作系统及其支持的编程架构。
7、集中学习独立平台架构、编程语言和技术。
8、如果到目前为止你学习的编程语言具有ANSI/ISO/EEE/W3C标准版本,那么掌握这些标准。无论何时尽可能使用标准代码。
9、尝试模拟简单的、已经建立的库,尤其是开源的库。这在成为库/包程序员的早期阶段十分有用。从简单的包开始,比如单位转换和中间科学计算包。如果你是大学生,利用你的非编程课程,尝试把这些课程的方程式与核心科学用作库。
10、在你的编程领域内寻找开源的包。首先下载包的二进制/可执行文件。尽量去用,并发现它的利弊。之后,下载源,尽量弄明白它是怎么完成的。尝试再创造这些库或其部分。刚开始,看完代码再做;之后,先做再看代码。后期阶段,尝试完善那些库。
11、学习不同方法。给程序员分发、配送内容。通常,库/包程序员倾向于以递归和/或迭代的思想来思考他们面临的所有问题 。尽量把每个问题当作一个小问题的汇编(一系列更小的任务)或一个重复的不断缩小问题范围直至把这些更小的范围彼此堆到一起的处理过程去思考。
库/包程序员倾向于概括化。也就是说,当面临一个特定的简单的问题时,他们通常会想到一个更为概括的问题,并努力解决这个更概括的问题,如此,小问题便不攻自破。
方法5:系统编程
1、了解系统编程的定义。系统编程处理的是编程的"科学",而不是具体的编程实现。不要把你自己栓到特定平台上。
2、跟着"桌面应用程序员"的前三个步骤。
3、学习线性代数的入门课程。
4、学习微积分课程。
5、学习逻辑学和/或离散数学课程。
6、了解不同的"准操作系统"。这可以通过以下途径完成:了解操作系统是如何安装的。
了解在一台PC上如何安装不同的操作系统(不是必须的,但作为推荐)
安装不止一种操作系统。不要在系统中安装任何辅助包,相反,仅利用操作系统本身提供的函数。
7、学习计算机硬件结构的课程(或者作为替代,看看书)。
8、深入理解不同的计算机硬件平台。
9、初步熟悉你所选择的硬件平台/操作系统的汇编语言。稍后你会学习其他平台/系统的汇编。
10、学习ANSI C 和 C++ 语言,还有程序化程式设计的一些概念。
11、在你选择的平台上理解并实践C/C++标准库。尤其注意标准模板库(STL)和活动模板库(ATL)。
12、搜索网络资源、书籍和课程来理解你的平台独特的C风格。
13、用C/C++练习编写高级代码。
14、学习更高级的Assembly。
15、学习操作系统设计的课程。
16、寻找并阅读你所选择的平台的相关文章。如果你选的是基于Unix的操作系统就会容易得多。充分理解你今后将要用来工作的系统。
17、练习你已经掌握的知识。首先创建小的系统软件。如下通常很有用: 试着重创你系统中已有的小工具。
试着把其他系统中的应用移植到你的系统里。
18、以最有益的顺序学习语言。此处是唯一强调第一门编程语言的地方。首先学习ANSI C 而不是 C++、C#、Java 、D。然后学习 C++。限制你第一门语言仅为C是因为系统编程要求程序员熟悉如下概念:源代码真实、完全的编译
低级对象输出文件
链接二进制
低级机器语言/汇编编程。C语言被某些人认为是伪饰过的/更容易学习的汇编语言。只要你愿意,它还支持插入汇编语言代码,并且它只是程序化的(像汇编)。
方法6:编程科学
1、了解编程科学家是做什么的。编程科学家是十分高级的程序员,他们不开发程序,但他们研究计算科学,比如密码学、编程语言和数据挖掘算法。没有深入的学术研究是很难达到这个水准的。
2、累积和四年制计算机科学学历同等多的科学知识。可通过如下其中一种完成: 获得真实的学术学历(这也是通常情况)。
从现代大学中获得该学历要求的课程大纲,自学课程或 分开一门门学。理论上这样做也可以,但还是推荐第一种做法。
3、选择特定的领域。越具体越好。这取决于你的偏好。但是这里给出计算机编程领域中一些主要的课题:算法设计(例如搜索、分类、密码、解码、错误检测 等)
编程语言/编译器设计/最优化
人工智能领域(模式识别,语音识别,自然语言处理,神经网络)
机器人技术
科学编程
超级计算
计算机辅助设计/模式(CAD/CAM)
虚拟现实
计算机图形学(计算机图形学通常和图形设计或图形用户界面设计混淆,计算机图形学是研究如何表示和操控计算机系统中的图形的领域)
4、考虑获取更高级的学历。或许你想追求硕士学历或博士学历。
5、了解你选择的编程领域的相关技术和编程语言。
小提示不管你想尝试哪种编程,不管你想达到何种水平,考虑去学校或本地社区大学上课。不要被诸如“计算机科学”一类的术语吓到。你参加的任何不需要预备课程的课程都应该集中教一些编程的基础知识。在上课之前先咨询一下老师或客服,确保这门课是你想要的,像“计算机文化”这样的课很有可能更多地集中在教你更熟悉办公应用之类。