什么是有独立开发能力的程序员?

什么是有独立开发能力的程序员?,第1张

这个是仁者见仁智者见智的事情,作为行业老人和经常讲这个话题的可以抛出一下个人看法。

一个人可以独立搞定中小规模项目的就是了。

这个搞定是要从需求概述,需求分析,原型设计,效果图,前后端数据库开发,部署上线全过程的能力

注意强调的是这个快速搞定的能力,中间不是必须自己搞定,可以看自己的情况借助外力,但是如果没有外力自己也能沟通独立抗住整个的全部。

最早之前我都是一个人搞定,后来逐步交给下边的来处理了, *** 作和熟悉这个过程很重要,但不必追求事必躬亲,但是要有这个能力就足够了[赞]

独立开发能力,我的理解是从零开始,零架构零框架,除了winAPI外,不依赖任何第三方库,能够搭建一个比较大系统。少点依赖框架,你会发现你比别人更利害。全栈虽然比较难,需要比较长时间的磨练,但仍然可以做到。搞通几种之后,大体上都会差不多,就是语法格式上的区别。

事实证明,人的精力是有限的,不可能样样精通。就拿我来说,我非常喜欢折腾技术,嵌入式,单片机,JAVA,Linux,C语言,shell,Python,js,go,rust,前端框架angular,react,vue也能写个小Demo,Vim和emacs也是用得飞起。这时候做做小工具小网站还是够的。有些简单的想法能够快速做个Demo出来,但是再深入就感觉比较吃力了。

最好还是专注。像linus一生只用c语言,但是人家两周就能写出git。这种才是真牛逼。

当我们在聊技术能力的时候,我们到底在聊什么?

有的人认为:技术实力就是指算法和数据结构很厉害

有的人认为:研究过Linux内核源码和看懂《深入浅出MFC》的才是技术牛逼的人

有的人认为:会写C++的才是真正的技术高手,因为C++的对象初始化有N种写法

有的人认为:技术高手必须对业务很熟悉

有的人认为:贡献了开源项目代码的才是技术牛人

有的人认为:只有架构师才是技术大牛

相信一千个人眼中有一千个哈姆雷特,一千个程序员心中有一千个技术大牛!

对于程序员来说,技术范围包括服务器、android、iOS、前端,出色的完成每一个项目,稳定好自己的工作,不好高骛远,是作为一个优秀的员工当下所必须具备的,判断程序员技术实力的一个总的原则就是指解决问题的能力!

综上所述,我们对各种技术实力的理解大致以下几点:

1、技术实力就是指算法和数据结构很厉害

2、研究过Linux内核源码和看懂《深入浅出MFC》的才是技术牛逼的人

3、会写C++的才是真正的技术高手,因为C++的对象初始化有N种写法

4、架构师才是技术大牛

那作为一个程序员,一定是思维条理性、逻辑性,对新技术感兴趣,耐得住寂寞。同时具备独立开发能力的程序员,大体总结出了以下几点:

1、独立解决问题的能力

大多数程序员都是以“码农”自嘲,在工作中就根据需求复制粘贴代码,代码出现逻辑问题就抛给别人解决。那些能独立快速解决代码问题且稀缺的程序员,就会显得弥足珍贵。因此,培养独立自主快速解决问题的能力,能使自己成为团队中不可或缺的部分。

2、源码闭清阅读能力

会用代码是一个方面,认识代码又是另一个方面。能阅读源码是独立解决问题的先决条件,只有熟知源码,才能很快的发现问题。另外,熟练的阅读源码能让自己做到举一反三,使自己编写的代码更加优化简洁,提高工作效率。

3、架构能力

架构能力是未来成长储备的进阶方向之一。随着年龄的增长,纯粹的技术能力已不适合自身的长远发展,也不适应公司组织架构的优化,面对更年轻、学习能力更强的程序员,做纯技术的你已不具备比他们优异的核心竞争力。因此,你需要储备一些技术大方向的知识,也就是这里说的架构能力。做一名架构师,搭建技术框架,除了需要同时掌握以上两种技能,还要学习更多的架构知识,例如,高并发、高可用、高性能、分布式、微服务等。

4、管理能力

管理能力是盯漏未来成长的另一个方向。当技术达到了一定的层面,技术已不足以支撑起你的核心竞争力的时候,这时的你可以考虑到管理层继续磨砺自己,带好团队也是体现自己价值的重要途径。当然,在此之前,你必须要储备相关的管理技能,例如,计划、组织、领导、控制能力,只有掌握这些要素才能凯态烂在管理过程中高效的发挥其职能。

感谢邀请!

具有独立开发的能力的程序员顾名思义就是相当于全栈,像以前的老项目很多都是这样,后端程序员又当爹又当妈,既要自己写前端页面样式,又要编写后台核心代码。

但是个人经验来说,具有独立开发能力的程序员也分两种:

第一种就是都独立负责系统的某个模块或者某个功能的设计和开发;

第二种就牛逼了,相当于全栈,从需求分析,原型设计,数据库设计,到编码阶段,测试,部署,上线一条龙都会的。这种的一般都是具备3~5年以上经验的程序员。

一般来说,小公司需要的都是第二种,大公司则偏向于第一种。希望我的回答能够帮助到你,有什么不同意见欢迎下方评论留言。

两个意思:

一个是小企业,请一个人,做一个小系统,一个人能全部搞定,既懂美工,又懂架构,最后开发实现并上线;

一个是小团队,按功能分配工作,各自完成自己的工作,不能等待别人来指导才能往下走,这样的话就不具备独立开发能力了;

说白了,就是对技术的一种要求,能遇到问题自己想办法解决,而不是需要领导来帮助。

程序员挺多,但不是每一个人都能遇到问题自己就能解决掉,而要求独立,说的就是能自己解决问题的程序员。

反正不管那么多,努力学好技术才是真。

越来越多的程序员已经或希望加入到自由职业者的行列,你是否也是其中的一员呢?在这篇文章里我将尝试结合自身的一些经验,来告诉你成为自由程序员能够获得的那些益处,以及为了取得成功所需要面临的挑战。

自由程序员的类型

很多人把自由程序员定义为没有正式工作,在家里接活的程序员。而我认为下面这5种类型,都可以被视为自由程序员:

独立接包者:他们接的活都是基于项目的,但他们并没有任何雇员,而是独立地完成这些项目,然后通过结算获得收入。

兼职程序员:他们一般都有正式的工作,但会利用较为充足的业余时间(晚上或周六、周日)来接一些规模较小的私活,或者参与一些工作之外的项目。

混合外包:他们本身可能就是一家公司的外包,但他们的时间相对比较自由,可以接其他工作来干,工作和私活对他们来说已经不存在清晰的界限了。

临时工:可能是经朋友介绍,短时间参与项目的程序员,项目完成后他们能获得一定的报酬,但他们一般不会主动找活来做。

团队接包者:他们一般都是在某个领域深耕多年的自由程序员,他们往往会雇佣了一个小型开发团队,并通过经营一个网店或服务网站的形式,对外提供软件外包服务。他们能够承接一些较大的项目,拦告收益一般也会更高。

成为自由程序员的优点

成为一名自由程序员有很多吸引人的地方,以下可能是最让人动心的:

你将成为自己的老板,不再需要根据领导的安排去做那些你不想做的事情,这可能也是每个职场人的梦想吧!

你的工作将具有更高的灵活性,或者说你可以按照自己最喜欢的方式来安排工作的时间、地点、以及进度。

你可以选择在家办公,从而节省了租用办公室,购置办公设备以及通勤的费用。

成为自由程序员的挑战

同样,成为自由程序员,你也需要面临很多挑战:

你的工作量不会非常稳定,有时候很忙,而有时候却可能很闲,你需要合理地安排项目进度以及管理自己的时间。

在家工作很容易让你分心,你需要有很强的自控能力来保证工作的效率和质量。

你将不再享受员工的福利,比如养老金、医疗保险、住房公积金等等,为了得到相应的保障,你必须自己购买相应的保险来进行弥补。

你需要不断地寻找新的客户,这在成为自由程序员的初期尤为困难,你需要那些新客户的项目给你带来一定的现金流,从而挺过最开始几个月的困难期。同时,当你有了一些客户之后,你仍需要考虑如何与这些客户建立稳定的关系,时常询问客户的反馈,改进意见等等,都能够帮助你提升客户关系。

项目管理是你要面临的另一挑战,这并不仅仅指你如何管理项目的进度,更在于在整个项目期间,如何简耐明有效地获得客户的需求,管控他们的期望,以及进行风险的管理等等。北京IT培训见过很多项目,在经过一段短暂的蜜月亩昌期后,最终因为项目管理不当而不欢而散,无法收回尾款。而对你来说,除了金钱之外,最大的损失可能是你的声誉。

我们根据职场发展通路和能力水平,斗嫌把程序员分成如下四个等级:

普通开发者

熟练开发者、高级开发工程师、技术组长

技术专家、架构师、一线经理

科学家、首席(资深)架构师、部门研发总监

今天这篇文章,我们来讨论普通开发者如何进阶为袭销握熟练开发者。

我们会先定义普通开发者应该达到的能力水平,然后再介绍他应该在哪方面提升才可能进到下一个阶段。

普通开发者的能力水平

先看我经常提到的一张图——技术成长阶段图:

普通开发者处在第一个成长阶段:专项能力提升。

专项能力提升阶段是初级阶段,你为了搞定事情,必须先具备某些基础能力,比如某种编程语言(Java / C++/ Python / JavaScript 等)、某个IDE (Visual Studio / Qt Creator / Android Studio / Eclipse / WebStorm 等)、某种技术框架(Netty / Qt / SSH / MyBatis / AngularJS 等)。

这个阶段最重要的就是提升专项能力,让自己能够迅速搞定一些别人安排给你的事情,体现出你的价值。

在这个阶段,最起码达到下列水准:

能理解并完成别人分解好的叶子任务

能自己完成一个功能模块的开发

以前端开发者为例,在这个阶段,你必须能将从 UI 过来的某个页面原型转换为可运行、可 *** 作的真实 Web 页面。比如登录页面、比如商品详情展示页面,要能做到实现可视化页面和业务逻辑跳转。

以 Android App 开发者为例,在这个阶段,你必须能拍庆搞定类似登录、支付等这类功能。以 App 的登录功能为例,你要能使用特定的布局和组件实现自适应的登录界面,还要能学习使用类似微信、微博等第三方账户的 SDK ,实现第三方账户登录。

你可能很难自己设计一套完整的登录功能(包含口令加密、单点登录、Cookie 使用、验证码、密码找回、第三方登录、多终端同步、角色鉴权、用户数据存储等),但是当熟练开发者或者高级开发者完成了设计,把某个小功能分配给你的时候,你要能够理解这个设计,并将这个设计实现出来,和整个登录系统整合在一起,能够正常运转。

当你能够搞定这些事情的时候,你的专项技术水平起码是这样的:

能熟练搭建需要的开发和测试环境

熟悉所用编程语言的基础语法,有这门语言的知识地图,熟悉该语言本身的各种基础功能,了解这门语言的高级功能

能调用已有技术框架的 API 来实现特定功能

能在实现同一功能的多组 API 之间选择合适的那一组

能熟练使用开发环境和各种辅助工具进行调试

可以解决易复现的、逻辑简单的软件 Bug

能自主学习某个新框架的基础 API ,参考 DEMO 完成某个功能的基本实现

我的总结可能不完善或存在 Bug ,请大家在留言区指正、补充。

我想到一个身边的例子,刚好和我们讨论的这个话题契合。

有一次和朋友 G 聊天,他说他部门有位做前端开发的程序员 X ,一直在用 jQuery 实现各种页面,代码冗余,结构凌乱。Vue.js 出来后,G 想在新版本中使用,就安排 X 学习 Vue.js ,让他参考公司产品某两个页面的功能和布局,简化设计,做两个带异步数据请求功能的页面出来看看效果,结果一个星期过后,X 告诉 G ,Vue.js 太复杂,开发文档看不明白,代码也搞不懂,进行不下去……

如果你像 X 这样的状态,就说明你还停留在普通开发者阶段,只能在他人指导和安排下编码实现特定的细分功能。

要想进阶,就要先在专项技术能力上达到我们前面所列清单描述的水平(那是基础要求),然后再对照熟练开发者的能力要求,有针对性的去学习提高,稳步进入下个阶段。

普通和熟练的关键区别

对照前面的技术成长阶段图,熟练开发者处在中间阶段,拥有自己的技能体系。

为了搞明白拥有自己的技能体系是什么概念,我们先来看两组概念:

知识、知识体系

技能、技能体系

简单说,知识是能引发改变的信息,技能是运用知识解决问题的一系列思维和动作的组合。但这样讲不大容易明白,我们举个软件开发领域的例子。 C++中的虚函数是一个知识点,用虚函数这个特性定义模块接口,实现模块的动态加载,就是技能。

接下来为了行文方便,我不再区分知识和技能,直接把知识等同于技能,甚至用知识一词代替技能。请在阅读时根据上下文加以区分。

知识和知识体系的关系,技能和技能体系的关系,就像树木和森林的关系,就像瑞士军刀上小刀、小剪子、小螺丝刀和瑞士军刀的关系。

这样打个比方,应该可以体会到“体系”是什么了。

所谓知识体系,就是若干相互联系的、可以用来解决特定场景问题的知识的组合。

Ok,现在回头来看普通开发者和熟练开发者的区别,就简单多了。

普通开发者因为不断完成任务,不断做项目,接触、使用了各种各样的“知识点”,于是拥有了各种离散的知识,但这个知识和那个知识很少关联,他拥有的知识,是散兵游勇,如下图所示:

当你的知识点各不关联时,你在遇到问题时,就很难进行系统思考,就很难获得解决办法。

而熟练开发者,则(被动或主动)经历了知识点的梳理、整合过程,把零散的知识点围绕着某个应用场景联系起来,形成了知识体系。就像下图:

当你有了知识体系之后,遇到和你知识体系对应的场景相关的问题,就可以快速找到相关的知识,系统的分析问题,最终解决问题。

你看,是否拥有知识体系,导致了熟练开发者和普通开发者的一个非常重要的区别:熟练开发者能够独立负责一个模块或子系统的设计和开发工作,拥有分析问题、解决问题的能力和任务分解的能力,可以分配任务给普通开发者。

进阶修炼方向

好啦,从技术水平的角度讲,普通开发者和熟练开发者的区别就在于:普通开发者的知识不成体系,而熟练开发者构建了与某个应用场景相关的知识体系。

这样看来,普通开发者要想进阶,方向就非常明确了:构建自己的知识体系。

那么,怎么构建知识体系呢?先参考我的另一篇文章:构建知识图谱,让自己更值钱。如果后续有机会,我会重构一篇新的文章,再聊聊构建知识体系这个话题。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12536232.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存