Ⅰ 作为一个程序员,我发现同事写的代码有Bug,怎么办
作为一个程序员,你发现同事写的代码有Bug,你会告诉他吗?讲真的,这个事情对我来讲,很难,因为我在这个事情上吃过苦头!
看待这个问题首先得看对方脾气咋样,如果对方脾气不好,或者很难搞,还是想想其他办法。直接跟他讲可能会遭到对方的白眼!
别看我们程序员一个个傻傻呆呆的,其实自尊心特别强!除非你是他的领导,否则即使你发现了他代码里的Bug,他也不会服你!虽然还是会改,但内心一定在想:“就你能?自己管好你自己就成,看我代码干啥?”
其实我也是这样的心理,好像程序员除非自己愿意,否则都不怎么喜欢别人去研究自己的代码,好像对方故意找自己茬的意思。
但是不管咋样,不管是有意无意,我们既然发现了同事写的代码有问题,就不能坐视不管!
我最近在调一个小伙伴的接口时,因为涉及到数据回滚,所以就想知道他的代码有没有做回滚操作。如果没有,可能我这边数据已经回滚了,他那边没回滚就会导致数据前后不一致。所以我也不是有意要审查他的代码。
然后我就发现他不光没有做回滚操作,也没有做批处理。几个涉及到修改数据的代码就这样一行一行走下来,看着直让人挠后脑勺。
于是我就把这个事情告诉了他,让他要么做事物(如果操作有问题,可以自动回滚),要么做主动回滚。否则我在调他接口时,如果我这边撤销了数据修改,他那边却提交了修改,就会导致数据丢失或前后不一致。
当我告诉他这个情况和解决方案以后,我能很明显地感受到他有点不愉快。但事实摆在眼前,也只能修改。可修改归修改,他还是有点脾气的。于是他写了一个事物,将大部分涉及到增删改的语句全部包在了里面,唯一把一个删日志的语句留在了外面。
我看到这个情况,就委婉地跟他说:“”好像这个删日志的语句也要包在事物里面哦!”
但是他却说,这个无关紧要,他特意放在外面的。
我跟他说,既然这里有数据存在,就不是无关紧要的。不管咋样,也不能无缘无故就把数据给删了。但是他很倔强,执意不改,还说如果我觉得这个数据有用,那就让我自己“顺手”把这里的代码改一下。
此时我能明显地感受到他已经有点烦我了!无奈之下,我把这段代码给移动到了事物里面。
而我为什么说我因为发现同事代码有Bug告诉同事而吃过亏呢?
原因在于我之前待过的一家公司,有一个工作了几年的程序员同事,而我当时是个萌新。因为我专门培训过,所以代码能力还行。可这个同事虽然工作了几年,但写出来的程序代码却Bug一堆,常规测试手段还测不出来。
我是在偶然之间发现他写的一个程序是有Bug,但是又不确定,所以就想看看他代码是咋写的。不看不知道,一看吓一跳,他写的好大一部分代码都有问题!
我当时初生牛犊不怕虎,发现一个跟他说一个,结果最后把他给惹毛了,当场就要跟我动手,说我专门针对他。我哪有针对他的心呀!我当时想的是把这些Bug找出来,让他改掉,否则对公司也不好。
但是他想的估计是被我这个萌新发现了一堆Bug很丢人。我总是针对他的代码找Bug,他就是脾气再好也绷不住啊!
后来我们的部门经理为了不让他难堪,也为了给他个台阶下,找了我写的程序里的一个缺点,猛批了下,然后跟大家说:“我刚才看了看,大家写的代码有好多问题。这样,大家都各自检查一下自己的代码,看看有没有问题,有问题尽快改过来,然后我们统一测试!”
直到现在,我也没学会当发现同事代码有Bug以后,在不让同事产生不愉快的心理的情况下,委婉地告诉同事他代码写的有问题的方法。
Ⅱ 优秀的程序员是如何处理技术 Bug 的
从初入职场菜鸟到职场大咖,很多程序员在努力充实自己,有时候我们需要对自己进行一次能力定位,了解自己的优势和没有掌握的技术。芯学苑列出几点作为初入职场的新手评估自己,明了前进学习的方向。
1、技术能力(解决问题的能力)
这是非常重要的事;过硬的技术能让你得到面试机会,并在工作中游刃有余。当公司招聘一个Java开发人员时,是会优先考虑能力因素的。在实际的项目开发中,一个程序员的技术能力等于其解决问题的能力。
如果拿一个尺度来衡量这个能力的话,一个程序员的能力可以用能完成任务的数量和难度来衡量。一个程序员能基本无误的完成项目中的一个功能算是合格,但在此之前,他对项目的生产力为负,为他布置的任务,中间环节的沟通,修补bug的时间其实要多于自己直接完成该功能的时间的。能较好完成一个完整模块的程序员才算是较好的程序员,也是项目中的主要开发者。能独立完成整个项目才是优秀的程序员。
2、专业基础(知识的积累)
一个程序员的知识积累很大程度上决定了其解决问题的能力。知道如何编写代码是基本的技能,但是知道Java编程语言的原理,知道代码背后的算法将使你从人群中脱颖而出。
3、主流编程工具
今天,事实是,你不能成为一个样样都懂的人(杂而不精)。你必须选择你要掌握的工具。有时这是由工作的环境决定的,但是按照下面说的去做也是一个很好的选择:
构建工具:Maven或Gradle。
SCM:Git(不是GitHub。大不相同)。
构建自动化:Jenkins。
IDE:Netbeans或Eclipse——不仅用于编写代码,而且还从IDE中重构和调试代码。我遇到了很多没有如何从他们最喜欢的IDE调试的开发人员。
Bug跟踪:Bugzilla或Jira。
4、JSF的知识
应用程序服务器
所有Java开发人员应该知道如何在Apache Tomcat中部署。
当Glassfish开发停止时,下一个最好的事情是J Boss Wild Fly。
5、沟通的能力
沟通是我们做好一切事情的关键。我们必须与我们周围的环境保持互动,无论是在我们的私人还是职业生活中。一个良好的程序员知道如何在各种团体面表达自己。也许对你来说显而易见的东西在他人的角度来看并非如此。
从大的尺度(比如一个人的工作生涯)来看,一个程序员知识积累的多少只决定于其自学能力和他对编程本身的兴趣。
在一个分工明确的项目中,程序员需要理解产品,和领导沟通理解自己的任务,和同事们沟通以正确的方式进行合作。无论哪一个方面沟通出了问题都不是小事情,同时,程序员还需要正确的传达设计的实现难度,以及让别人正确的理解自己设计模块的接口。在不写文档时,正确的口头沟通非常重要,需要写文档时,良好的编辑能力也算做是沟通能力的一部分。
6、自学能力
这是一个非常重要的技能,在你自己的空闲时间学习新的技能。不要等待公司为你提供培训。你需要自己去学习新技术,提升自己在相关领域的水平。从Java后端开发到架构模式,总是有一些新事物值得学习。经常阅读博客和论坛,尝试加入本地聚会小组。你学到的东西可以帮助你的事业。知识刷新频率极快让人无法追赶的这个时代,难免会有超出自己知识范围的时候,此时你的自学能力决定了你能多快的完成任务。
7、良好的团队合作精神
无论是部分编程还是大型项目,所有开发人员都是作为团队的一部分在协同工作。你需要致力于团队的目的,或帮助新的团队成员克服障碍。不要存在这种“我只要做好我的本职工作,下班就直接回家”的态度。成为团队的一部分,帮助周围的同事,对自己的能力也是不小的提升。
就像拿破仑说的不想当元帅的士兵不是好士兵,追求参与一个大型软件系统的开发,是每个程序员的梦想。在此之前,应该学习更多的专业知识,达到优秀程序师的标准。最后希望各位程序员阅读本文后能够得到一些裨益,在这条路上走得更好。
Ⅲ 程序员输错一个指令,电脑开不了机了,该怎么办
如果是程序员输错了一个指令,现在电脑开不开机,那么你不要慌。下面就会介绍,如果遇到这种情况,我们应该如何处理?
1、电脑出现应用程序错误,有可能是电脑出现漏洞导致,点开“电脑管家”选项;
2、接着立即点按下“工具箱”;
3、然后点下“修复漏洞”选项;
4、最后接着点下“一键修复”就好了。
命令排除方式:
1、按下键盘的win+R,接着输入“cmd”;
2、输入弹窗所示命令,按下键盘的回车键进行检查,进入检查的过程中;
3、这样就检查出电脑一些必备系统软件没安装,在检查过程中就自动安装了,安装后,就解决了应用程序错误的情况。
电脑开机无显示故障的排除方法。
第1步:首先检查电脑的外部接线是否接好,把各个连线重新插一遍,看故障是否排除。
第2步:如果故障依旧,接着打开主机箱查看机箱内有无多余金属物,或主板变形造成的短路,闻一下机箱内有无烧焦的糊味,主板上有无烧毁的芯片,CPU周围的电容有无损坏等。
第3步:如果没有,接着清理主板上的灰尘,然后检查电脑是否正常。
第4步:如果故障依旧,接下来拔掉主板上的Reset线及其他开关、指示灯连线,然后用改锥短路开关,看能否能开机。
第5步:如果不能开机,接着使用最小系统法,将硬盘、软驱、光驱的数据线拔掉,然后检查电脑是否能开机,如果电脑显示器出现开机画面,则说明问题在这几个设备中。接着再逐一把以上几个设备接入电脑,当接入某一个设备时,故障重现,说明故障是由此设备造成的,最后再重点检查此设备。
第6步:如果故障依旧,则故障可能由内存、显卡、CPU、主板等设备引起。接着使用插拔法、交换法等方法分别检查内存、显卡、CPU等设备是否正常,如果有损坏的设备,更换损坏的设备。
第7步:如果内存、显卡、CPU等设备正常,接着将BIOS放电,采用隔离法,将主板安置在机箱外面,接上内存、显卡、CPU等进行测试,如果电脑能显示了,接着再将主板安装到机箱内测试,直到找到故障原因。如果故障依旧则需要将主板返回厂家修理。
第8步:电脑开机无显示但有报警声,当电脑开机启动时,系统BIOS开始进行POST(加电自检),当检测到电脑中某一设备有致命错误时,便控制扬声器发出声音报告错误。因此可能出现开机无显示有报警声的故障。对于电脑开机无显示有报警声故障可以根据BIOS报警声的含义,来检查出现故障的设备,以排除故障。
Ⅳ 程序员遇到百度不出来的bug都是怎么解决的
笔者不同意下面网友的回答。程序员如果解决bug的水平停留在网络,那么本质上只是一个“面向搜索引擎的代码搬运工”,是不合格的程序员。
程序员对面bug,正确的“打开方式”是像福尔摩斯和柯南那样,寻找线索、运用逻辑推理来缩小问题可能的根因范围,最终精准定位。
常用的方法有:
1. 坏境上下文变换法
2. 工具调试法
3. 版本回溯对比法
4. 代码审计法
……
没有编程问题是stack overflow和Google解决不了的,假设你在编程中遇到了问题,你自己解决不了、你周围的的人都解决不了的时候,我觉得stack overflow、Google是你最好、也是最后的帮手。
作为一个程序员,我觉得Google、stack overflow是你必须要学会使用的两个工具,这两个工具本身并没有使用门槛,只不过因为一些众所周知的原因,很多人不能使用Google和stack overflow这两款工具。
Google主要还是方便,而且很多编程问题都需要用到英文搜索,当然现在网络在专业能力上也提升明显,不过跟Google也还是有比较大的差距,因此我还是强烈建议要学会使用Google,这会帮你在工作、学习上事半功倍。假设Google确实因为某些原因没办法很好的使用,我也建议你至少要会使用Bing搜索。
现在可以说stack overflow上没有你找不到的问题了,从IDE环境安装问题,到各类编程语言问题。算法问题,数据结构问题,调试,重构等等,几乎这里就没有你找不到的答案,可以说在stack overflow上你可以找到任何解决方案,并且上面的回答者基本上都是非常有经验,而且都是实际中遇到的问题分享出来的,这个工具一定要会使用。同理,除了stack overflow这个专业的垂直程序员问答社区,你也可以使用Quora这个综合问答社区,这上面也能找到很多问题的答案。
一些比较优秀的文本编辑器: Emacs/Vim,Visual Studio Code,Sublime Text,Atom,Ultraedit,Hbuilder等。
一些比较非常出色的IDE集成开发环境: visual studio,IntelliJ IDEA,PhpStorm,Haskell for Mac ,eclipse,WebStorm,GoLand,CLion,Android Studio,Xcode,QT等。
macOS平台比较好的第三方包管理工具: Fink,Macports,Homebrew等。
一些比较好的终端工具: Zoc7,iTerm2,Cmder,terminus,hyper等。
一些比较好的笔记软件、markdown工具、效率工具: Evernote,有道云笔记,为知笔记,Ulysses,MWeb,FileZilla,Snipaste,Kantu等。
虚拟机软件、容器软件: Parallels Desktop,VMWare Fusion,Virtual Box,Docker等。
我是个程序员,职务是linux底层驱动工程师。平时的主要工作是调试驱动,但产品遇到诸如死机、重启、不开机之类的问题时,也要参与查找原因。一部分问题,确实可以查看相关的log,然后网络这些log的关键字来解决;但更多的问题,牵扯的条件太多,并不是简单的网络就能解决的。
观察了周围同事们的做法,我总结出以下几种解决方法:
网络因为竞价排名的原因,搜索出来的结果有很多广告的成分,所以有时候要翻好几页才能看到一条相关的答案,有些甚至要翻几十页。
因为网络搜索使用的是SEO技术,即普通用户可以通过优化网站内容来提升关键词排名。
而这就会导致一个问题:你搜索关键词后展现出来的结果是有人想要让你看到的,并不是质量最好的。
也就是说,网络搜索结果被人为干预了。所以网络一直被网民所诟病。
但网络搜索不出结果,未必是网络的原因,也有可能是自己输入的搜索词不准确造成的。所以对于网络,我们要做到如下几点:
除此之外,网络搜索还有点小技巧,粥左罗《万字干货,彻底讲透搜索技巧,10倍提升你的搜索力(免费教程)》这篇文章写得非常好,我整理几点,仅供参考:
01 过滤目标内容
命令:“+”“-”
用法:通过“+”和“-”来对搜索结果进行过滤
比如在关键词后加上“-推广 -推广链接”就可以排除搜索结果中包含相应字样的链接。如果你发现广告还没有排除干净,你也可以再加上“-广告”通常就能彻底的消灭广告。
02 搜索包含某关键词的内容
命令:“intitle”
用法:通过“intitle”命令指定搜索结果中要包含的关键词,注意“intitle”后边连接的冒号是英文状态下的。
03 搜索某一个格式的文件
命令:“filetype”
用法:通过“filetype”命令可以限制我们要搜索文件的类型,注意“filetype”后边接的冒号也是英文状态下的。
04 搜索特定时间范围的内容
命令:“时间..时间”
用法:通过“时间..时间”命令可以限制我们要搜索的文件的时间,注意两个时间的中间顿号没有空格。
相对网络,谷歌、必应对于技术搜索,就相对准确许多,所以当你网络搜索不到时,尝试下别的搜索引擎,说不定会有新发现。
现在程序员使用的机器语言,都是国外的,更准确的说,都是美国的。所以很多论坛、资料等,都是英文。如果你只会用中文来搜索,某些小众的问题,当然搜不到啦。
所以,要学会使用英文关键字来搜索。
有时候甚至要去国外的一些论坛来搜索想要的答案,这就要求要有一定的英语阅读能力,不能一看到英文帖就放弃。
有时候不管你如何搜索,都找不到自己想要的答案,该怎么办呢?这种情况下,就只能硬着头皮尝试自己解决了。
或者,寻求同事或朋友的帮助,寻求大脑风暴,说不定就会有思路。
如果有些问题是因为新器件带来的,还可以找到器件供应商,让他们安排技术支持帮忙查找原因。
除此之外,还可以把问题整理好,写清发生的条件、复现步骤、测试方法、相关的LOG截图等资料,去一些技术论坛发求助帖,寻找大牛的帮助。
做技术时间久了,发现有些问题确实无解,根本没有办法去解决它。
这时候,我一般会尝试把它绕过,就是说,想办法让它无法复现,虽然问题还是存在,但是能把它掩盖过去。
比如有些驱动在开机启动时会加载不正常,那么就让它晚点启动,或者手动加载。这也不失为一种解决问题的方法。
以上就是我的建立,希望对你有帮助。
首先作为一个程序员,一个优秀的程序员最最最重要的能力就是解决问题的能力。这里解决问题的能力当然就包含了解决 bug 能力了
毕竟,程序员这一生,可能会写无数个 bug ,没有说哪个程序员敢保证自己写的程序没有 bug 。 所以,写了 bug ,遇到 bug 并不可怕,可怕的是你没有解决 bug 的能力 。
作为一个程序员,解决 bug 的途径有哪些呢?我们来一起聊一聊!
其实,每个程序员在学习编程的时候,都会使用编程工具,而现在的开发工具,其实功能都很强大。如果你自己合理利用编程工具,都了解和懂得开发工具的一些技巧,其实不仅仅能够提高开发效率,而且还能够帮助你解决很多编程中的实际问题。
debug 调试,大部分你常用的开发工具,都会有调试模式的,简而言之,就是你编程的时候,遇到了不是自己所想的结果的时候,你可以使用 debug 模式,来一步一步的调试,在调试模式下一般每一步都会显示所执行的结果,你可以看看在哪一步出错了,执行的结果与你预想的结果不对,那么你就能够找到问题所在了。
还有就是,开发工具的控制台,都会提示出报错信息的,现在的开发工具,都会直接告诉你哪一行,报了什么错。其实,很容易定位到错误的。你只需要在编程的过程中积累经验,知道报什么错,用什么方法来解决就行啦。
可是,提示的报错信息,我不知道用什么方法来解决的时候,该怎么办呢?这就是你需要积累的,也是问题中所描述的,就是通过搜索引擎来找答案。
不对,这里不应该是合理使用搜索引擎,应该是学会正确使用搜索引擎。比如:网络,你就不要用了,搜出一堆重复的信息,而且广告也多。作为程序员,建议你使用谷歌搜索。
其实,你在编程中所遇到的几乎所有的问题和 bug ,别人也同样遇到过,因为不管是经验丰富的老程序员,他技术再牛逼,也是初学者过来的,也都踩过你踩的坑。所以,互联网是个好地方,里面包含了你想要的问题的答案。
你只要把报错信息往搜索引擎上一放,回车一下,很多关于这个 bug 的答案就出来很多,你只需要找到跟你一样的 bug ,就能找到答案了。
在这里必须提一下这个网站,所有的程序员有必要学会使用这个网站,其实,你编程中所遇到的问题,这个网站上几乎都是由解答的。
Stack Overflow 可以说是最好的软件程序类问答网站了,给软件开发人员工作和学习提供了非常大的便利,以至于像小白,离了 Stack Overflow 简直都不会写程序了。
所以,建议大家一定要学会使用这个网站,对你编程肯定会有非常大的帮助的。
通过上面的方法,几乎应该能够解决到你所遇到的问题,但是,实在找不到答案的话,你可以问经验比你丰富的老程序员,实在解决不了,那就换种方法吧!
网络,谷歌,debug,断点调试,业务上的bug就需要问下同事或者产品。如果能知道大致范围,哪一部分错了,就换一种方法呗,一般都不会只有一种方法。
1.reload
2.restart
3.rewrite and then goto 2 or 4
4.reboot
5.rm -rf /
6.原谅我编不下去了[捂脸][捂脸][捂脸][捂脸][捂脸][捂脸][捂脸]
找bug跟医生看病的思路是一样的,要对症下药。得先把问题的根源找到,找到根源以后问题就容易处理了。搜索引擎找不到的问题,说明这个问题不是一个常见的问题,具有独特性,那么从bug出现的路径上一步一步去排查。必要时可以用排除法,尽可能的缩小排查范围。另外,当软件的业务逻辑比较繁多复杂的时候,一个结构清晰的架构能为你节省不少找bug的时间。还有,充分的单元测试能够帮你减少出bug的机会。以上均为个人看法,欢迎讨论!
一般程序员能碰到的bug无外乎其他上游程序员写库时手抖留下些不匹配或者容易溢出的问题,搜一下差不多能解决问题。如果是自己写的,那无非就是时序错误类型错误之类的,用break point一行行的调就好了。
再复杂点的bug就是程序员拿高薪的根本了,只可意会,不可言传~
仅仅靠搜索引擎、其他网站那必然无法解决大量问题,因为很多问题是跟业务逻辑相关的,是没有直接答案的。比如 游戏 开发有个界面一直无法显示,这个问题就不是网络可以解决的。问题需要调试分析,这和破案非常像,但在开发过程中更有利的是问题有机会可以重现。破案是逆向工程,需要反推。解决代码问题不仅仅可以反推,也可以通过阅读代码正向分析。下面说说如何debug一个业务逻辑问题。回到刚刚的例子,有个界面一直出不来,我们如何快速去定位:
1.思考这个问题发生的可能性。比如 游戏 内大量界面都是正常的,那么可以对比正常界面代码和异常界面代码的区别,这是对比法。
2.假设创建正常界面和这个异常界面的逻辑代码是一样的,那么问题就落到了这两个界面内部,继续在内部重复上面的对比法进行判断,直到锁定最终位置。
上面说的方法基本上可以杜绝卡在一个简单问题上,这是摆脱新手的一个过程。选择使用对比法或者其他方法的前提都是基于观察和对项目的认识,所以,搜集“案发现场”是最关键的。
其他的问题,不属于逻辑的,像其他网友说的那样,有些通过到github、stackoverflow等地方解决的。这些问题也不是直接就去查找的,它通常也有个分析过程。比如你使用了一个库,但是目前它不支持你的模块。对于新手,就是直接网络或者google了。实际上这样的问题也是有“案发现场”的。对于作者提供的api接口的统一性和便捷程度去推断作者在相关支持模块的位置以及命名以及拓展,再尝试在文件夹中搜索。如果都找不到,再去Google上获取更多的信息。重复推断、分析,决定如何拓展或者绕过。
综合上面的几种问题,可以看到的是都离不开对现场的观察和推理分析。这种能力也被称为经验。但是一般情况下你看不到它们这个分析过程,你能做的就是在实际环境中反复逼迫自己去思考,去训练。这个推理的培养,不仅仅是对事情,也是对人。
我在入行 游戏 开发的前期,也是类似的情况。卡在不同种类的问题上,有些在简单逻辑,有些在别人的代码支持上。后面解决的问题多了,就会发现里面共通的思维方式。常用的一些方法如下:
1.对比法,比较正常与异常代码区别
2.二分查找法。分段注释找问题,也会用在很多方面。比如最近版本突然出了一个奇怪bug,可以通过svn还原来定位。这个还原不是一个一个版本还原,而是用二分法去还原。
3.增加信息。在怀疑的位置或者过程添加日志或者打断点辅助自己更好的推理。
4.相似推理。比如一个引擎在api、性能使用程度上都非常友好,那么它在别的地方也有可能相对表现比较好。这时候如果有个功能我们的实现需要很复杂才能完成,那么就有可能是我们用错了。相似推理不一定都能正确,但会提供一些帮助。
以上。
Ⅳ 程序员接私活完整攻略
接私活 对程序员这个圈子来说是一个既公开又隐私的话题,不说全部,应该大多数程序员都有过想要接私活的想法,当然,也有部分得道成仙的不主张接私活。但是很少有人在公开场合讨论私活的问题,似乎都在避嫌。就跟有人下班后跑滴滴一样,程序员私有时间接点活挣点钱不也很正常么,不过不要在上班时间就行,就跟你上班期间出去跑滴滴一样。
当你竭尽全力想要去接私活的时候一定做过这样的事,网络搜索“程序员如何接私活”或者“程序员到哪接外包”之类的问题,那么相信你也一定看到过让你不要接私活的帖子,观点大概就是:
把有限的时间花在提升自己的能力上,技术深度,技术广度,或者多阅读书籍,丰富自己,这样有可能比做外包收益大。
这里就不跟大家讨论该不该接的问题了,很明显,我接了。首先跟大家分享几个项目案例。
案例1
大概是13年14年左右的样子,谈到一个项目,做一个APP连接甩脂机,通过蓝牙模块传输数据,便于手机上观察,大概这样。依稀记得跟甲方项目经理沟通需求时,他拿了一个 Android 2.x 系统的手机给我演示了QQ的一些功能,我一本正经的跟他说,“你放心,这个肯定做不了”,他当时就懵了...因为我并不想兼容2.x版本的系统。后来进入签合同阶段,这家公司不大,事儿倒是不少,又是身份证复印件,又是按指纹。这个项目是我外包生涯中的一次滑铁卢,为什么呢,因为我竟然同意了不用付定金,等项目开发中期再支付第一笔费用。带着一个他们提供的蓝牙硬件模块,回去了。后端开始编写API,Android iOS 开始研究蓝牙数据传输,噼里啪啦直接把项目做完了。测试包发过去了,结果大家能想到,不给钱!
我至今都记得这家公司的名字,不知道倒闭了没有,我们整个团队一分钱没得到,项目以失败告终。
案例2
一个汽车后市场项目。当时市场上有一款APP,养车点点,后来已经改名,叫典典养车,我们当时要做的就是抄袭它,功能类似,整个项目差不多十几万。甲方是做汽车零配件的,在上海有很多家店,每次交流的地址在一家咖啡馆。两个多月后,项目上线,经营一段时间后,甲方意欲挖我们过去,毕竟项目是我们做的,他想把原班人马招过去,婉拒。
案例3
一个海外社交项目。这个项目比较小,只做 Android 一个端,原因是甲方招聘的 Android 人员离职了,时间紧急,就让我接了。比较顺利,对方提供视觉稿、API,我开发 Android 即可,项目也没啥难度,我闲着无聊,特地给他们做了一些交互动画,甲方验收的时候非常高兴,直言比他们自己员工做得都好。
还有很多其它项目就不一一介绍了,小到做一个控件,几百块,千把块,大到几十万的项目,从整理需求到设计到开发。当然,也不是什么项目都接,举个例子,以APP为例,在甲方提供API和视觉稿的前提下,一个端低于2万的项目从来不接。
做私活挣钱吗?不挣钱是脑子进水了吗。尤其对于刚入场的选手,外包收入可以说抵你一年的工资都可以。不仅挣钱,还特别积累经验,外包项目五花八门,搞地图的,搞语音的,搞视频的,搞蓝牙的,能帮助初级选手快速成长。
做私活累吗?相当累。白天黑夜,从无周末。项目一旦接下来,从此进入心事重重的生活,不到最后交付那一刻,不会停缓。周末是最佳的工作时间,平时下班晚的话还做不了,所以几乎没有休息时间。
重点来了,到哪里接呢?
初级选手自己乱七八糟找项目,高级选手项目找上门。做私活一定要找到最佳状态,不然就是受罪。什么是最佳状态,就是当项目找上门时, 想做就做,不想做又想赚就转。 那么到底有哪些方法可以接到私活呢?不管黑猫白猫,抓到老鼠就是好猫,有哪些方法我一一说来。
方法1
各个众包平台。这是入门级的手段,也是最容易做的方法。有哪些众包平台就不用我一一细说了吧,猪八戒,威客网,CSDN 也有外包频道,一些技术论坛,海外的 Freelance 网站等等,每个都注册一遍,前期比较麻烦,各种资料需要填写,团队介绍,历史案例。注册之后理论上就可以投标项目了,不过如果需要认证的话,还需要继续花钱,很多项目只有花钱之后才有机会投标,这个就自己评估吧,我没花钱。通常没啥好项目,钱哪有那么容易赚,都是些边边角角稀奇古怪的项目。当然,即便是被别人挑剩下来的项目,也不排除有好项目,你要一一去沟通才知道。
方法2
主动联系各个外包公司,成为他们的备选开发人员。外包公司接单子的手段肯定比我们个人高明多了,他们就靠这个吃饭的,当他们出现人员紧缺、项目过剩、员工离职等情况时,不排除他们会考虑找临时替补人员,甚至把项目整包转出去。如果你身边有朋友开外包公司的,那很好,先天优势,长期互助。但是大部分人也许并没有这样的资源,那么这就是个体力活了,在方法1的基础上,部分平台会留下甲方的联系方式,比如猪八戒,你直接搜索软件外包服务商,他们的介绍页面上通常会有他们的手机号码和邮箱等信息,或者当你点击“在线咨询”“与我联系”等类似按钮的时候,他们的自动回复也会出现一些QQ号、手机号、邮箱等联系信息。
这边我只是以其中一个平台为例,只要你用心,各个平台你都能扒到一些有用的信息。拿到这些信息之后你就可以把你编辑好的话术发给他们,也可以直接加他们微信,通常手机号码就是微信,不要怂,直接跟他们联系,打电话、发邮件、发QQ,发微信,把你想要做外包的意图告诉他们即可,然后就静静的躺在他们的朋友圈里,或者被遗忘,一两个月问一次好打个招呼,不要太频繁,这也算是人际关系的维护,看你本领了,多认识点人没坏处,剩下的就是平淡的等待了,如果他们会联系你的话。
方法3
跟身边的开发人员灰度交流。你没有项目,不代表别人都没有,如果别人愿意带着你的话,这也算是一个渠道。什么是灰度交流,就是半含蓄状态,文章开始我说了,程序员接私活是一个既公开又隐私的话题,不过这个度大家自己把握好,搞不好丢饭碗,把握不好的还是放弃这个方法吧。
方法4
人脉资源。除了从网络上接项目,或者吃外包公司的残羹冷炙,还有另外一个类别的项目,那就是创业者。在这个互联网、移动互联网、物联网盛行的时代,创业者也是一波接着一波,虽然热度有高有低,但是从不缺。组建一个公司,组建一个技术团队需要一笔不菲的费用,尤其软件开发人员的工资,将成为一个创业公司的沉重负担。种子投资,或者天使轮投资能有多少,对大多数创业项目来说,几十万,一百万,两百万,或者五百万,基本顶天了,这些钱能维持一个团队多久,何况还有很多创业者并没有拿到融资,他们等着先开发一个上线项目,再拿项目去找投资。如果你能接到这样的项目,那也是很爽的,不过通常这类项目靠熟人介绍,但是你千万要注意,一定要营造良好的口碑。有条件的话,也可以做套名片,几十块钱,够发好久的。
做私活没有稳定的渠道,你可能一直找不到项目,也可能一年一个项目,重点是心态,不然你将陷入困扰的情绪当中。有更好,没有拉倒,找到最舒服的状态。
当项目来临时,该如何报价?
价值都是相对的,一定要有自己的心理预期,有些人觉得五千很值,有些人觉得一万很值。不要饥不择食,不管多廉价都接;也不要人心不足,吃着碗里看着锅里,或者觊觎别人的高价。跟对方交谈时,一定要快速判断彼此是否是目标客户,不要啰嗦太多,你的心理预期是几万,对方的心理预算是几千,这样的项目还谈个啥,务必在最短的时间内确定大家是否可以继续谈下去,否则浪费不必要的时间。如果大家心理预期差不多,对方不是那种想三千块钱做个淘宝的,则继续往下进行。有的甲方要求不多,很爽快,这样最好,有的甲方需要出报价单,那么就详细沟通需求,整理报价,整理报价是一个费时的过程,不要嫌麻烦,我们不是服务商,我们是抢食的个体,一定要不怕付出,哪怕一无所获。
甲方有可能只是来询价,也可能等你出完报价单再回去比价,还是那句话,不要怕吃亏。如果甲方是个体的话,通常很好弄,但是甲方是商家的话就麻烦一点,一定要问清楚是否要开票,开票是要税的,不过羊毛出在羊身上,告诉他我们的报价是不含税的,如果要开票的话要加上税钱,20万的话,差不多几千块钱,看对方要求开什么类型的票。开票的话可以自己去税务局开,不过我没去过,如果自己认识几个开公司的朋友的话那是最好,让他们帮忙开张票,把税钱贴给他们。
如果你觉的开票你对来说很难实施的话,那么有三个方案,一是放弃,这样的单子直接不要接了,继续寻找下一个单子;二是先接下来再转包,转给其它的外包公司做,不过你要估摸好有公司接,有朋友做外包公司那是最好的,相互帮忙,但是这种方案并不推荐,原因是不好把控项目进度和质量,还担风险;三是把项目介绍给认识的公司去谈,谈好了你拿提成,这样你既不担风险,还赚点快钱。
付款方式该如何确定呢?
切记,必须付定金,越多越好。通常我的付款方式是442,即预付40%的定金,项目提测再付40%,项目上线付清余款20%,这套方式针对个人比较好用,针对公司不好用,公司通常会留一笔费用在上线后一个月两个月三个月再付清,所以付款方式可以改成5311,即预付50%的定金,提测30%,上线10%,上线运营一个月后10%,坚持一个原则,前期付的钱越多越好。
接下来就是签合同了
一般只有个人才可能不要求签合同,大多数情况还是要签合同的。合同尽量你来拟定,不会写的话上网抄,一定要保护好自己的权益,重点是防止被对方坑。比如在合同中一定要写好适配哪些系统哪些浏览器,基于哪个版本开发等等,做得到的就写,做不到的别乱写,合同这东西,在心情好的时候怎么写都无所谓,心情不好的时候大家只能拿合同说话,你可别赔个十万二十万的,吓死你。
整个接私活的过程差不多就是这样了,最后,我再强调几点 注意事项 :
end
Ⅵ 当使用tcp协议编程时,哪些问题是程序员考虑和处理的
发送数据的格式和应用协议。
一旦双方建立了TCP连接,连接中的任何一方都能向对方发送数据并接收对方发来的数据。
发送数据时,程序员可以编写程序不断地将数据流写入TCP的发送缓冲区中,然后TCP自动从发送缓冲区中取出一定量的数据流写入TCP的发送缓冲区中,然后TCP自动从发送缓冲区中取出一定量的数据,将其组成TCP报文段逐个发送给IP层,再通过IP层发送出去。
接收端从IP层收到TCP报文段后,将其暂时保存在接收缓冲区中,这时程序员就可以编写程序依次读取接收缓冲区中的数据,从而达到通信的目的。
(6)程序员点击发送不出去怎么办扩展阅读
利用TcpClient和TcpListener在同步方式下接收、发送数据及监听客户端连接时,在操作没有完成之前一直处于阻塞状态,这在接收、发送数据量不大或者操作用时较短的情况下是比较方便的。
但是,对于那些完成时间可能较长(如传送大文件)的任务时,使用同步操作可能就会造成系统假死,这种情况下,最好的办法是使用异步操作。