A. 程序员工作要做什么
程序员(英文Programmer)是从事程序开发、维护的专业人员。一般我们将程序员分为程序设计人员和程序编码员,但两者的界限并不非常清楚,特别是在中国。
作一个真正合格的程序员,应该具有的素质。
1:团队精神和协作能力
团队精神和协作能力是作为一个程序员应具备的最基本的素质。软件工程已经提了将近三十年了,当今的软件开发已经不是编程了,而是工程。独行侠可以写一些程序也能赚钱发财,但是进入研发团队,从事商业化和产品化的开发任务,就必须具备这种素质。可以毫不夸张的说这种素质是一个程序员乃至一个团队的安身立命之本。
2:文档习惯
文档是一个软件系统的生命力。一个公司的产品再好、技术含量再高,如果缺乏文档,知识就没有继承,公司还是一个来料加工的软件作坊。作为代码程序员,必须将30%的工作时间写用于技术文档。没有文档的程序员势必会被淘汰。
3:规范化的代码编写习惯
知名软件公司的代码的变量命名、注释格式,甚至嵌套中行缩进的长度和函数间的空行数字都有明确规定,良好的编写习惯,不但有助于代码的移植和纠错,也有助于不同技术人员之间的协作。 一些所谓的高手甚至叫嚣高手写的代码一般人看不懂,我只能说他不是一名合格的程序员。
4:需求理解能力
程序员要能正确理解任务单中描述的需求。在这里要明确一点,程序员不仅仅要注意到软件的功能需求,还应注意软件的性能需求,要能正确评估自己的模块对整个项目中的影响及潜在的威胁,如果有着两到三年项目经验的熟练程序员对这一点没有体会的话,只能说明他或许是认真工作过,但是没有用心工作。
5:模块化思维能力
作为一个优秀的程序员,他的思想不能在局限当前的工作任务里面,要想想看自己写的模块是否可以脱离当前系统存在,通过简单的封装在其他系统中或其他模块中直接使用。这样做可以使代码能重复利用,减少重复的劳动,也能是系统结构越趋合理。模块化思维能力的提高是一个程序员的技术水平提高的一项重要指标。
6:测试习惯
测试是软件工程质量保证的重要环节,但是测试不仅仅是测试工程师的工作,而是每个程序员的一种基本职责。程序员要认识测试不仅是正常的程序调试,而要是要进行有目的有针对性的异常调用测试,这一点要结合需求理解能力。
7:学习和总结的能力
程序员是很容易被淘汰的职业,所以要善于学习总结。许多程序员喜欢盲目追求一些编码的小技巧,这样的技术人员无论学了多少语言,代码写起来多熟练,我们只能说他是一名熟练的代码民工,他永远都不会有质的提高。一个善于学习的程序员会经常总结自己的技术水平,对自己的技术层面要有良好的定位,这样才能有目的地提高自己。这样才能逐步提高,从程序员升级为软件设计师、系统分析员。
作为高级程序员,乃至于设计师而言,除了应该具备上述全部素质之外,还需要具备以下素质:
1、 需求分析能力
2、 整体框架能力
3、 流程处理能力
4、 模块分解能力
5、 整体项目评估能力
6、 团队组织管理能力
一般招工时需要提供基础程序员证书,要参加考试的:
[编辑本段]考试说明
1、 考试要求:
(1) 熟练掌握基本算法和数据结构,用C语言编制程序;
(2) 掌握数据结构、程序变速器和操作系统的基础知识;
(3) 了解软件工程、数据库、多媒体和网络的基础知识;
(4) 掌握数制、机内代码及其算术运算和逻辑运算的基础知识;
(5) 了解计算机的体系结构和主要部件的基础知识。
2、 通过本级水平考试的合格人员能按照软件设计说明书编制程序,具有相当于助理工程师
的实际工作能力和业务水平。
3、 本级水平考试范围包括两个模块:模块1——程序编制能力(考试时间为150分钟);模
块2——基础知识(程序员级)考试时间为120分钟)。题型为:单项选择题十多项选择题。
B. 程序员转做产品经理,对于转行谋职产品经理难度大吗
难度是比较大的,不同的职位有不同的事业规划,想要做一个成功的产品经理,必须要有着非常不错的沟通能力。
C. 程序猿如何转行做产品经理
做产品经理,虽然不要求你天天写代码,在电脑前一坐就是一天。也不需要你随时钻研新技术,改bug,但是你要掌握的底层能力不减反增。那应该怎么破局?答案还是找到一些开发和产品之间的可迁移能力。在你从事研发工作的过程中,也会积累一些经验,下面是产品经理能具备的可迁移能力,你也可以从这些能力中倒推你已经具备的能力有哪些。我把它分为底层思考力、中层可迁移力和上层可迁移力,而产品经理因为需要洞察用户、理解业务、找寻商业模式、迭代产品,所以需要具备更深入的底层思考力,比如对本质的洞察、结构化思考、升维到更高的业务去思考,批判性思考,思考思考本身的思考等等。
这些能力你具备的越多,那么你的职业发展天花板就越高,就越能适应未来的变化。从可迁移能的角度来看,你也可以思考,你一年多的研发经验中,有哪些可迁移的能力,能应用到产品经理上?从底层可迁移能力看,你可能具备一些结构化思考的能力,因为在处理比较庞大的开发信息时,你都需要通过结构化思考对代码信息进行分类和排列。从中层可迁移能力看,比如做研发的同学普遍都会有比较严密的逻辑能力,每次在做产品研发时,需要更强大的逻辑去梳理整个产品的脉络,具体展现在对流程的理解、对一个流程中可能出现的各种情况的预判,对产品实现的各个环境的要求的理解等等。从上层可迁移能力看,你对产研流程比较熟悉,更容易推动一些项目,也因为你对研发原理的了解,你更清楚不同的需求需要多少实现成本,开发同事在人工预估上唬不了你。对于各类软件,你的学习速度也会比其他背景的同学更快,甚至,你可以自己编写一些轻量的代码来提高自己的工作效率。
所以,要问研发怎么转型产品经理,最好的切入点就在于你可以从中找到可迁移的能力,以这些能力为起点,去补足自己的弱项。归根结底,你要想成为一个能胜任目前工作的产品经理,你还需要解决一些棘手问题。1、能力不够系统的问题我见过知群里有很多同学都有问类似这样的问题,我读过很多关于产品经理的书籍,了解了很多产品经理的方法论,但是我仍然不知道自己应该如何找到转行的抓手。其本质问题还是不够系统,什么是系统的能力?系统的能力可以应对各种问题来的不确定性,系统的能力可以让你变得更“聪明”。BOSS直聘CEO赵鹏在接受采访时,曾经对聪明人做了一个定义,他也是拿着这个定义去看人和选人的:第一,总是能明白人家啥意思;第二,总是能让人家明白自己啥意思;第三,遇到一个课题能够相对快速地形成思路去解决;第四,始终能稳在重点上,不机会主义,不跑偏。你发现没,上面的四个问题其实都具备了一个关键要素:就是不确定性。接收信息和需求的不确定性,沟通对象的不确定性,遇到问题类型和复杂程度的不确定性,和局势事态优先级的不确定性。
要应对这些不确定性,你必然要用系统的方法去解决。如何具备系统的思考问题的方法和习惯?这就需要你先在大脑里构建各种各样的解决问题的模型,解决信息不对称的问题,因为有的思路和知识,知道和不知道的差距真的很大。比如视觉优先级、交互优先级、用户优先级等这些思维方式,这些思考方式我就不在这里展开讲了,我会在每周的周三晚上,在知群的训练营的直播课上做具体讲解,也欢迎你来直播间和我一起讨论和交流。2、无法掌握和调用的问题即使学习了系统的能力,但仍然有一些同学无法培养出属于自己的思维,很大原因是没有对自己的神经做稳定的塑造。不知道你是否有这样的经验,有时候你学会了一个新技能,然后第二天再试的时候就生疏了。这是因为你学习技能的本质是神经元之间化学物质的浓度的调整,重复的练习能不断调整这些化学物质。虽然第一天你让神经元做了一些调整,但是如果不继续加强,到了第二天,这些化学物质就会回归成原来的样子,这些进步就消失了。要想达到及时调用能力和所学的效果,你必然需要深入地在实践中不断反复使用,反复打磨自己的神经元和对应的技能,也包括你看待一件事物时的一些思考习惯。说白了,就是你要把学到的东西落地,在实操中培养自己的手感。这也是为什么我会在直播中强调一个观点:也只有在实战中,你才能培养自己快速调用方法和思维的能力。
D. 程序员可以转为产品经理吗
当然可以!从程序员到产品人员的转型,有其必然性和合理性。像腾讯马化腾、360周鸿祎、微信张小龙他们都是由程序员做起,然后开创自已的产品和事业的,这样的例子不在少数。而且,一个技术人员能够转型成优秀的产品人,一定是有“知道技术能做什么”的自信 ,还有“我要把它做出来”的决心。
程序员转型产品人员所具有的独特优势主要包括以下几点:
第一,多年的程序员工作经验,对软件技术和软件实现方案的判断,可以规避那些天马行空的产品想法,工作更有成效。
第二,程序员一般都具备严密的逻辑思维能力,更有利于对复杂的产品进行精细的需求分析,将产品打造成精品。
第三,程序员一般都具有快速学习能力,保持对计算机相关行业动态和技术革新的观察与思考,这在一定程度上会培养对行业与技术的洞察力。
E. 程序员面试,为什么感觉很多都和运维有关
不会运维的程序员不是好程序员。 这个信条要时刻谨记,不管是面试还是自己平时在工作中都要坚持这个准则,因为这对你以后的发展大有裨益。
一直以来,很多圈外人对我们程序员的观念就是永远的一本正经,着装单一,了无生趣,聪明绝顶,其实这是他们对程序员的误解,因为多才多艺,多姿多彩的程序员比比皆是,但是传统的观念或者说以偏概全的观念蒙蔽了他们的双眼,而他们自己又没有尝试去了解,所以导致人云亦云,给程序员披上了一层灰。
同样的,我们大部分程序员的观念也跟他们差不多,认为程序员就只是搬砖撸码的,至于各种部署服务器相关的工作应该是运维做的,其实非也,如果真的这样认为的话,那就真的太不把自己当程序员了。为什么这么说呢?因为我们程序员是实实在在撸码开发产品的群体,可是如果我们开发出来的东西只能自个在本地玩耍,却不能众乐乐,那还有什么意义,此时,你可能会说,交给运维啊,那么如果没有运维呢,就没法玩了,所以我们不能总是将希望寄托在别人身上,当自己有能力能够将系统进行部署的时候,那就该学会部署。
其实不仅仅是程序员,优秀的运维工程师也是需要会开发撸码的,因为有时候他们也需要开发一些小工具来进行验证,或者开发网页来进行服务的管理,所以说程序员和运维都是相辅相成的。
像我们现在很多的公司都没有明确的人员分工,特别是小公司连运维都没有,所以就谈不上让运维去部署了,那么怎么办呢?肯定就是开发人员自己去部署了,如果不会部署的话就可以去网上查找资料,其实总体来说不会很难,因为我看过很多运维其实也是在网上找资料按步聚进行操作。
另外公司之所以这么要求,一方面是基于人员成本的考虑,毕竟如果一个人能干好的事为啥非得招两个人;另一方面可能基于公司的发展问题,像一般的小公司确实没必要专门招一个运维,不过随着公司的发展,后期肯定会招专业运维,毕竟专人做专事,事半功倍。
永远记住“不会运维的程序员不是好程序员”,其实作为程序员不能总是把自己陷在撸码的深渊,除了撸码,我们还要学会产品需求分析、简单的UI画图、数据库分表分库及性能优化、运维服务器部署、单元及系统测试等等,总的来说,要想成为优秀的程序员,我们有必要把产品线上的每一个环节都略知一二,这是经验收获,一定会成为我们日后发展的资本。
技术迭代是需要时间的,而且公司预算不多的话,会选择现有系统继续使用。有的企业也会选择维稳,不会轻易开发新系统代替现有系统。
这是一个非常好的问题,作为一名IT从业者,我来回答一下。
首先,在当前的大数据、云计算时代,程序员在面试的过程中,经常会遇到与运维相关的问题,尤其是有自身产品(平台类)的企业,往往对于程序员的运维类知识有比较多的要求,所以当前的程序员,尤其是Java程序员,要想获得较强的岗位竞争力,一定要重视运维类知识的学习。
在当前的大数据时代背景下,很多程序员在日常开发过程中,需要与运维人员进行配合,所以程序员在面试过程中,经常会被问及与运维相关的问题,通过这样的问题,也能够全面了解程序员是否面对过大用户的并发问题,这对于判断程序员是否适合当前的招聘岗位也有一定的参考价值。
以大数据开发岗位为例,程序员在进行大数据任务开发的过程中,不可避免地需要与运维人员打交道,其中大数据平台的搭建就是比较繁琐的过程,另外还有一系列产品的安装和部署,这些通常都需要运维人员来完成。对于一款平台类产品来说,运维人员的技术能力能够在很大程度上决定软件平台的性能,而且运维人员与开发人员的配合也非常关键。
当然,对于程序员来说,如果能够自己掌握一定的运维知识,对于开发任务的开展还是很有帮助的,如果什么问题都需要运维人员来完成,不仅需要更多的运维人员,同时也会影响项目的整体开发进度。从这个角度来看,随着未来大数据技术的逐渐落地,程序员掌握一定的运维类知识,对于提升自身的工作效率,还是很有帮助的。
在程序员面试过程当中,通过一些运维知识也能够更加直观地了解到程序员的技术栈,相对于比较复杂的开发问题来说,运维知识的脉络还是比较清晰的,通过运维知识能够在一定程度上挤出一些“技术水分”,这也是很多面试官比较愿意问运维问题的主要原因。另外,对于一些创业型公司来说,程序员掌握一定的运维类知识,也会节省一些投入,尤其在产品研发的初期。
从技术体系结构来看,要想解决大用户的并发问题和系统扩展性问题,通常需要从两个角度出发,一个角度是技术选型,比如采用扩展性比较强的大数据平台,另一个角度就是硬件扩充,但是硬件扩充的前提是要有一个可扩充的平台体系,而通过运维知识,程序员的交流会更明确,技术方案也比较直观。
从岗位任务划分的角度来看,程序员的工作任务与运维人员的工作任务有比较明确的边界,但是在云计算技术的推动下,程序员接触运维场景的情况也在不断增加,比如通过云计算平台的支撑,很多传统的运维类任务,程序员也会比较方便地完成,比如安全配置等等。
最后,程序员在进行面试的过程中,如果遇到的运维类问题并不清楚,一定要如实回答,因为运维类知识需要一个积累的过程,而且经验往往非常重要,所以很多运维类知识,在短期内是无法掌握的,如果盲目扩展自己的知识面,会为后续的工作带来很多麻烦。
如果有互联网、大数据、人工智能等方面的问题,或者是考研方面的问题,都可以在评论区留言,或者私信我!
一、提问之前的准备
首先,最重要的是,你自己一开始就应该想清楚:
只有明确这些根本性的问题,才能正确高效地完成面试。
二、提问的原则
假定你对上一节的三个问题,已经有了清晰的想法,那么接下来就可以设计如何提问了。
有一些提问的原则,是你应该遵循的:
三、考察专业能力
为了确认面试者是胜任的,你可以问一些与职位相关的专业方面的问题。(不过通常来说,一次面试不足以看出一个人的专业能力。)
比如,你的招聘职位是系统管理员,你可以问"如何快速地在50台机器上部署Linux?"(提示:正确答案不是刻录50张安装光盘。)
另外,你还应该向面试者了解他的过去,因为过去是未来的最好预测依据。不过,提问的重点不要仅仅是他过去的成果,更要关注在当时的环境中,他是如何决策和实施的。
四、考察综合素质
因为人是会发展的,所以某种程度上,面试者的综合素质要比他的专业能力更重要。
所以,具体的技术问题(如何调用API、什么是设计模式、编程语言的语法等等)可以少问一些,更应该关注面试者的事业心、对工作的热情、进取心、自律能力、毅力等方面。
下面是一些典型问题:
五、考察理性思维
某些情况下,你可能需要了解面试者的分析判断能力,看他能否全面地思考问题、客观地评价自己。
那么,你可以依次提出这样三个问题:
这里的重点是,让面试者从正反两方面评价一件自己熟悉的东西,看看他的思维是否片面。答案无所谓对错,只要面试者有一个明确的立场,能够从正反两方面说出令人信服的理由,就可以了。比如,某个软件的口碑不好,但是面试者说他很喜欢,而且说得出一大堆理由,清楚地解释了这种软件的优点和缺点在哪里,这样就很好。
不邀自来。众所周知,越大型的公司,分工越明确。在BAT里面,有专门的前端,后端,ops,dba等等。他们专研一方面,所以有深度,有沉淀。遇到问题了,找到相应的人,能够快速解决问题。
但绝大多数中小公司,更偏爱样样都会的全栈,恨不得你一个人把所有活儿做完。并不一定需要有多大深度,能干活儿就行了。
再说,现在提倡devops,开发懂点运维,能够更好地定位问题,部署和架构项目,这是需求,也是趋势。
对小公司而言基本没有专门的运维,所以需要研发具备一些运维的知识,比如数据库的搭建、nginx、jdk部署,其它开源中间件,比如Kafka、es等等
其实这个目前真正大规模用的少,炒概念的多,很多公司根本没机会用. 但是他会问
我觉得很自然的事,为什么总有人说得高大上?装个软件,调个参数,做个逻辑卷,调一调网络,配置一下分布式组件,搞个文件系统程序员就应该不会?
这些工作,我们公司一般运维人员搞不定的。所以用啥,自己整。
个人观点,计算机知识就必须全面,才能做好一个程序员吧?
而且看大家回复,我有8成猜对,有8成以上的架构师,不懂底层,知识面也没传说中那么广。
现在devops在流行,说白了企业为了省成本,研发要干一部分运维的活。运维只负责硬件网络和k8s维护,其他什么部署啦,服务编排啦,通通交给程序员做。
不过这样倒也合理,运维只负责全公司通用的设施建设,至于cicd,服务编排,熔断限流等等,都和业务强相关,交给开发做比较贴近实际业务
F. 程序员如何转型产品经理需要哪些逆天“装备”
需要注意以下几点:
1.关于契机
其实我觉得这不是契机的问题,是基因的问题,一个真正适合做程序员的人是不会考虑转型的,在职业发展上,程序员比产品经理的路线更清晰,投入与产出比更稳定,而产品经理,说实话,是个很看脸的职业,这个职业的路线有很大的不确定性,为什么我会转型,因为我本就不适合做程序员,我无法满足于翻来覆去就是Copy&Paste的工作,对于技术也没有狂热的追求,当然,我十分讨厌加班,确切的说是无休止,非计划性,带有潜规则性质的加班。
你或许会问,既然不适合,你为什么要选择程序员这个职业呢?说实话,在没做之前,我真的不知道我不适合。
回到正题,我是在一个什么情况下转型的产品经理呢,颇有些黄袍加身的感觉。人是有惯性的,放弃既有的优势,去投入一个看似美好,却很可能是刀山火海的职业,是一次危险的赌博。
没有亲身体验产品经理,只能说是这山望着那山高而已,所以始终带着不确定性,而当时公司规模急剧扩大,中层管理青黄不接,没有产品经理的情况下,BOSS考虑到空降人员可能水土不服的问题,希望从内部发展可靠的同志,于是对我进行了先进性教育,我思前想后,就是那句“我发现你对产品很有感觉”,让我抱着士为知己者死的念头,决绝的点了点头。
2.关于准备
说实话,没有准备,也没办法准备,因为你面临的是一个完全未知的岗位。就想你看别人玩游戏,和自己亲自玩游戏,是完全不同的感觉。别人无比娴熟的操作和风骚的走位使你拍案叫绝,但是你真正自己去玩的时候才发现,APM不够啊,意识跟不上。
怎么准备,看攻略,好吧,那些写攻略的人往往讨论的是在一个对方站桩的情况下,你怎么来干死它,却没讨论,如果对方后退了一下,或者忽然又一个敌人出现了,你该怎么面对。在实际的工作中,你面临的是各种意想不到,千奇百怪的局面,想通过攻略来解决是完全不现实的。
3.关于有用
我觉得最有用的东西就是换位思考,以前做程序员的时候,我只需要考虑我怎么来实现,我的时间够不够,项目什么时候上线,有了任何问题,我可以等待,我可以扯皮,我也可以作壁上观。但是作为一个产品的负责人(视公司岗位职责的不同,或许有很大出路),我就像一个管家婆一样,必须时刻注意到哪里可能出现炸弹,每天更多的时间不是在执行,而是在观察,思考,应变中度过。
我不再拥有一个可供我自由分配的八个小时,我的上一秒可能在思考问题,下一秒就会有人过来找我,碎片时间变的很多,就连上厕所,都会有电话进来,你随时保持着战斗状态,不能有一丝一毫的松懈。
这个时候再去看程序员这个岗位,你发现,原来是这个样子的,但因为我也混过,我自然知道程序员的心态,这是我的最大优势,我能够和程序员很好的沟通,并能理解他们在别的策划转为产品经理的童鞋那里难以理解的问题,所以我这边的研发进度往往保障的很好。
我发现所有的事情都不是像我想象的那么简单,方案的问题,计划制定的问题,人员本身的问题,处处都会产生蝴蝶效应,我总是在不安中小心翼翼的防微杜渐或亡羊补牢。
但我发现,即便我付出了再多的努力,项目还是会因为各种原因走向失败,这个时候检讨是没有意义的,天时地利人和,缺一不可,为什么我说产品经理这个职业看脸,是因为这个职业看起来能决定任何东西,又发现自己决定不了最关键的问题,所谓尽人事,听天命,以前总被我嗤之以鼻,我发现,有些时候,我真的很有共鸣。(作者:Robert Struggle)