辅导大学作业 : 电脑编程Java/C++,3D图形,iPhone/Android 应用,游戏开发

游戏数学

新手上路
注册
2012-01-02
消息
131
荣誉分数
12
声望点数
28
线上教学, 辅导大学作业,例如, 可以对以下几个方面进行教授或者辅导:

1。电脑编程(C/C++, Java, Objective C)
2。3D图形编程 (OpenGL, Ogre)
3。iPhone/Android 应用开发(xCode, Android Studio)
4。电脑游戏开发


授课老师拥有十多年移动平台应用程序开发经验,曾在知名游戏公司EA (Electronic Arts) Montreal 做过四年多移动系统结构工程师, 在Apple AppStore有多款应用发表(例如:CloneFace)。欢迎带着项目合作开发新APP !

请发Email到:gamemathstudio@gmail.com
 
最后编辑:
2016年收入最高的5个编程语言

电子书网站Packt公布了其2016年技术提高报告。它提供的统计数据基于超过11,000名IT专业人士参与的关于2016年收入最高的编程语言的调研。它同时还介绍了流行的web框架和主题。

高效的程序员是基于IT的企业结构的中坚力量。企业雇用擅长于不同编程语言的人,并支付他们薪水,这样人员才不会被竞争对手撬走。

1477276171388327.jpg


现在有许许多多的编程语言,数以千计的开发人员在用这些编程语言工作。但是,在薪水方面,学习有些编程语言的人超过学习其他语言的人。Packt,一个电子书网站,发布了2016年技术提高的调查报告,涉及来自世界各地的11500名开发人员。

该报告描述了领先的IT专业人员和开发人员所使用的编程语言的趋势。在受访者中,来自美国的人数最多,其次是英国。

最流行的编程语言是:

  • JavaScript

  • Python

  • Java

  • C

  • SQL


1477276192960115.jpg


榜首是客户端脚本语言JavaScript。之所以对JavaScript的需求会升级,是因为越来越多的业务应用被转移到web浏览器。Python是一种通用语言,它可以用于从渗透测试到web开发。Python被广泛应用于各种组织,如D-LINK,惠普,飞利浦等。

而既老旧又年轻的C语言也在名单中。C语言主要用于年轻的程序员在学校上手编码的时候。所以,很明显,在企业部门的话C语言专家可能得不到太高的薪水。

然而,这些语言从财务角度来看都不是最好的。尽管它们很成功,但是开发人员并不能从这些语言上赚到最高的薪水。

更赚钱的编程语言都并不大受欢迎。平均年薪薪酬最高的语言是:

1477276218272276.png


  • Bash——$ 100,000

  • Perl——$ 95,000

  • Scala——$ 90,000

  • SQL——$ 62,000

  • Delphi——$ 60,000
专家程序员使用诸如bash和Perl语言。因此,当决定职位薪资结构的时候,这些语言更受企业喜欢。谷歌的Go($ 50,000)语言俨然已经获得了关注,比更受欢迎的用于为苹果生态系统编码app的Swift表现更佳。Golang被设计得更让C语言老将喜欢,其代码一直以来保持着可读性和简洁。

Golang被设计得更让C语言老将喜欢,其代码一直以来保持着可读性和简洁。它被接受主要是因为速度,快速的编码会话非常便捷。软件工程师以及应用软件开发是这种语言两个选择最多的工作。选择后端web开发的也相当多。

流行的web开发框架:

1477276242472449.jpg


web框架中,AngularJS,是图表的佼佼者。然而,相当大百分比的开发人员已经开始或计划转移到几个月前发布的AngularJS 2。那些不盯着AngularJS 2的准备迎接更新的Facebook造的ReactJS。

热门研究主题:

除了编程语言和框架这些东西之外,调查也提及了开发者社区中感兴趣的流行领域。

1477276262533373.jpg


机器学习和大数据自去年以来一直是IT行业的热门话题。我们最近看到基于IBM Watson的机器学习如何想出对一种罕见的血液癌症类型进行有效的治疗

详细信息请阅读2016年技能提升报告

有什么补充,欢迎告诉我们。
 
会写程序还不够,硅谷杰出软件工程师都有的 5 种能力

曾任职于Google和Quora等公司、现任Quip软件工程师的Edmond Lau,于《The Effective Engineer》一书中访问任职于Facebook、Instagram和Google等知名网路公司的资深软件工程师,归纳出他们眼中高生产力的杰出软件工程师都具备的五种能力。

一、不害怕探索陌生程序语言

接触新专案或是转换工作跑道时,都有可能需要学习全然陌生的程序语言,许多人对此感到害怕,甚至未尝试就先放弃。其中,跳脱舒适圈的恐惧往往多于学习程序,会担心是否无法重现过去工作的好表现,甚至因此怀疑自身能力。

不论是多厉害的工程师,一定都有起点,就像打造Microsoft Windows基础的微软资深工程师Dave Cutler为文组出身,没受过正式电脑科学教育,比起同辈花更多时间在错误中学习。在这之中,最重要的两个关键为具备「成长心态」(growth-mindset)而非「固守心态」(fixed-mindset),以及「乐于学习」(optimize for learning)的态度。

学习陌生程序语言这项关键能力会越练越上手,并让你在学习过程中成为更好的程序设计师。

二、精通Debug

「为什麽程序跑出来和我预期的不一样?」是许多工程师会遇到的问题。Debug能力往往是影响工程师是否能顺利完成专案的关键因素,却被大部分人低估。Debug的系统性思考如下:

  1. 先假设造成bug的可能原因。
  2. 若假设为真,界定此假设可能导致的结果。
  3. 试著检视是否有和这些结果衝突的现象。
  4. 若有衝突表示假设错误,要重複上述思考过程。
由此可知,想加快Debug速度,要提升「提出假设」和「检视假设」的能力。假设能力可随著Debug经验的累积而提升,检视能力则需加强善用检测工具的技能。在此过程,必须先假设所有东西都是可检视的,并找出可用来检测或加快检测速度的工具或机制,千万不要只用自己熟悉的工具。

三、开发节省时间的工具

减少时间做那些电脑就可做的工作,例如开发节省时间的工具和使工作流程自动化。

曾负责Facebook软件基础建设团队的软件工程师Bobby Johnson,带领该团队从6人成长至超过1百人。他观察到,团队中表现出色的人多数写了许多工具,这些看似和绩效无直接相关的工具开发时间可能佔三分之一的工作时间,却因此大大提升工作效率,其中包含用来部署程序、监测系统,以及其他可节省时间的工具。

四、优化重複性工作的速度

软件工程师每天可能要搜寻、浏览函数定义很多次,善用键盘快捷键可省下可观的时间。例如,每次搜寻需花12秒,类似的步骤每天要重複20次,若用快捷键可将搜寻时间缩短到2秒,一年下来即省了40个小时。其他状况如每次Debug都需要在不同装置测试,除了要分别打开app,还要设定测试情境,这时候就可以思考如何加快这类重複性工作的速度。

五、发展系统性思考模式

写完程序码、让程序可运作仅是冰山一角,要产出真正有价值的程序,必须从程序本身提升到整个系统来思考。

  1. 你的程序和其他程序库以及其他人写的功能是否相容?
  2. 程序是否测试完成,并确保其他成员可执行你写的这些功能?
  3. 部署你的程序需要改变哪些生产环境?
  4. 新程序对其他正在运作的系统是否有负面影响?
  5. 客户和使用者的新程序使用情况是否如预期?
  6. 新程序是否达到公司期待的效果?
从巨观的角度思考问题,可让你更懂得如何调配时间和精力以让程序达到最佳效果。
 
什么样的人当不好程序员?

软件蚕食一切。未来属于程序员。所以人人都想当程序员。但是并不是每个人都能当好程序员。在你做出决定前还是先看看自己能不能当好程序员吧。可是什么样的人不适合当程序员呢?不要喝鸡汤,我们看看Quora上面是如何回答的。

在全栈开发者Adam Leffert看来,最重要的是态度:

  • 我认为编程要想成功最重要的是态度。当然,最低水平的智力还是要的。以我这么久的经验来看,还没见过蠢到不会做的。但是好坏程序员之间的差别几乎永远是态度。

  • 耐心:对我来说这是最重要的一条。写代码和调试极其令人沮丧。要想做好,你得保持冷静,至少冷静到能够保持清晰的头脑。

  • 精力:处理棘手问题,编写大量代码容易使得身心俱疲。最重要的是要有我朋友Joshua Wachs所谓的“坐能量(tushie power)”。也就是屁股不离座直到工作完成的能力。

  • 逻辑思维:这条看似明显,其实不然。一般的程序员在碰到棘手问题的时候一般是靠猜来解决的。运气好可能猜得中。但运气不好就难搞了。问题是猜并不能有效缩小可能原因的范围。好的程序员会提出猜想然后进行测试,从而排除掉一堆的可能性。比方说,屏蔽一段代码,看看问题是不是还出现。

  • 自负:编程不是你自己的事。这跟你的团队、代码、客户、利益攸关者等等都有关系。(eShare CEO Henry Ward 说自己永远都不会要自负的人。)
曾写过不成功OS的Peter Nierop则总结出了当不好程序员的3个迹象:

  • 讨厌用Google:
在github、google和在线网站上面有大多数现成的解决方案。买本老教授的书学编程的日子已经过去了。现在的代码来得快去得也快。而至关重要的事情是把你的东西尽快推向市场。任何不愿每天至少使用搜索引擎1小时的人都应该另寻高就(编者注1:Google自己的研究也发现,开发者搜代码越来越频繁 注2:有人可能会说自己不是讨厌用而是用不了。好吧如果是这样的话,我要加最重要的一条:不懂用google的想都不要想当程序员了)。注意,这某种程度上可能是因为你什么都想自己来,想成为全世界唯一的那个纯粹的coder。

  • 朝九晚五的心态:
再强调一遍:及时发布很重要。普通的程序员往往每天工作不到8小时,好吧这就是你平庸的原因所在。不平庸的程序员连续22小时冲刺以后才能打个盹隔4天才洗次澡并在接下来的2周时间里每天要用2小时写一些报告。不能或者不愿在必要时加班的人最好打住。

  • 极其糟糕的记忆:
编程就是开很多的会,做各种各样的变更,可能脑子里面要装100页的代码。未必是每一行都要记得清清楚楚,但起码在管理层又折腾出一个变更或客户突然又冒出一个想法时要知道你的程序是干什么用的,什么地方可能会失败,怎样才能很快修好。如果你的记忆力实在是太糟糕的话,最好还是找份其他的工作。

我在这个行当干了这么久,碰到过各种各样的程序员,不变的一点是一旦有上面的问题这些人基本都干不久。

CaveOfProgramming.com 开发者JohnPurcell:

由于开发界总是渴望有新鲜血液进来,所以除非你实在是太差(或者你原来基本都不用工作)否则想不成功都很难。我喜欢Peter Nierop的回答,不过说到正式的付费工作,我本人总是严格遵守朝九晚五的习惯,所以那个说法应该看工作情况而定。

如果你发现编程很乏味,学习又总是繁琐无趣的话,那你想做好就很难了。因为你要跟已经编程上瘾的人竞争。不过我也见过几个人虽然不喜欢编程,业余时间基本也不编程,虽然称不上出色的程序员,但是的确能够借此谋生。

要记住的是,编程不是什么精英才能干的事情。这个行业永远都缺人。所以除非你一点都不喜欢编程,或者也没有准备好看在钱的份上忍住这种不喜欢,否则都可以来编程。

而享受编程乐趣的Prince Pranav提供了3个不适合编程的迹象:

  • 因为错误而过早放弃:
永不放弃。哪怕是简单的错误也不要放弃。这会让你的代码和心态大不同。好的程序员,在写一长串代码的时候会把代码分解出来,分段测试。如果你因为前面1个小时总是碰到同样的问题就把电脑给关掉了事,可以认为这是迹象1。最后你总会找到问题的,但一定不要放弃。

  • 只对输出而不是质量感兴趣:
开发出好应用是你的责任。如果你为了赶时间而牺牲应用的质量,你可以成为程序员,但不会是伟大的程序员。

  • 乐趣不是找来的:
你开始写代码前看了看表,13:02,然后你再看的时候变成13:09了。有的人再看表的时候已经是15:37了。真的,除非你是因为有趣才干这个时间才不会流逝(注:不得不说,这又绕到了做你所爱还是爱你所做这个问题。)

究竟什么样的人当不好程序员,你觉得呢?
 

附件

  • flow_charts.png
    flow_charts.png
    41.4 KB · 查看: 151
在GitHub上最受欢迎的大多是库或框架

我们发现,在GitHub上最受欢迎的项目中有60%是库或框架。在2017年一月份,我们手动地对5000个在GitHub上打星最多的开源项目进行了分类。结果如下图所示。

1500951330540719.png


前三大领域是库和框架(1,535个存储库,30.7%),非Web库和框架(1,439个存储库,28.7%)和软件工具(972个存储库,占19.4%)。

以下是我们的统计:

最受欢迎的应用

  • hacker-scripts:这是一个真实的故事,这个项目包括了一系列名字既搞笑又另类的软件脚本。

  • Narkoz说这些脚本是一个已经离开公司的前同事留下的。这个前同事最大的特点就是任何需要花费超过90秒才能完成的事,他一定要写段脚本来自动化(大神啊大神),可以在宿醉的时候给公司发请假条,可以在适当的时候给老婆发晚归短信,也可以发短信哄老婆,还可以远程煮咖啡!。

  • GitHub:https://github.com/NARKOZ/hacker-scripts
最受欢迎的文档库

最受欢迎的应用工具

  • httpie:HTTPie是一个CLI HTTP 客户端; 目标是让 CLI 和 web 服务之间的交互尽可能的人性化,功能强大,界面直观,支持JSON,语法高亮,wget似快速下载,可开发插件扩展。

  • GitHub:https://github.com/jkbrzt/httpie
最流行的Web库和框架

最受欢迎的非Web库和框架

  • Socket.IO:是一个完全由JavaScript实现、基于Node.js、支持WebSocket的协议用于实时通信、跨平台的开源框架,它包括了客户端的JavaScript和服务器端的Node.js。

  • GitHub:https://github.com/socketio/socket.io
点击查看全部五千个项目完整表格
 
给迷茫开发者的 18 条建议

2017 年,出现了许多不同的开发职位。

如果你刚接触编程,要决定编程方向会很困难。

你是应该专门从事前端开发呢?

还是后端开发?

是构建桌面 App 呢?

还是移动端 App 呢?

是选择 VR 还是自动驾驶呢?

编程路上太多选择...你该如何在一开始就选择正确的一个?

如果你有过同样的担心,现在我可以告诉你,解决办法来了。你不用在编程早期就为自己要走的方向下定义。

让我通过篮球作为比喻来解释。

在篮球比赛中,有着许多不同的位置......例如控球后卫,得分后卫,前锋,中锋。每个位置根据个人的技术能力都有着许多不同的玩法。

如果你对篮球感兴趣也想开始的话,你不会从始至终地选择同一个位置。如果那样的话会严重限制你的篮球能力发展。相反地,你尽管开始玩,随着你经验的增长,你会自然地朝着你所擅长的和你喜欢的位置走去。

编程也是同样的道理。你不能够期盼着知道哪种编程语言是你将会擅长的和最吸引你的。相反地,你只需要开始......随着时间的推移你会明白什么是你擅长的和哪些是你不太熟悉的。

如果你正在经历着对于这个领域里开发者的类型数量感到迷茫甚至困惑,那么这篇博文正适合你认真阅读。

我们写这篇文章就是要帮助你突破思维麻痹,开始编程,然后就会逐渐明白你所喜欢的东西。

这里有18个建议来帮助你做好它。

1977282-8f8e7937e1a3efa0.png


建议 #1: 随 HTML 和 CSS 建立项目

使用 HTML 和 CSS 建立并开始一个简单的网站是相当容易的。这些技术架构的基础是一种通过浏览器给用户以信息的方式。

与 HTML 和 CSS 一起工作将会引导你编写代码,使用文本编辑器并激发你对开发工作的感觉。除此之外,无论您最终遵循了什么样的编码路径,都非常实际地获得了对构建网络基础模块的基本了解。

建议 #2: 开始一个副项目

为了一个项目开始计划,并实现这个想法。即使你不知道怎么去编码,你也可以开始头脑风暴来画出图形,展示如何将其融入到生活中。把它放在纸上会激励你开始取得进展,并使其成为现实。

需要更多地指导?请查看我们的23步启动你的副项目框架。

建议 #3: 尝试前端开发

前端开发就是编写在用户 Web 浏览器中运行的代码。

编写前端代码的时候,会与 Web 应用的可视化元素紧密联系。

除此之外,前端开发者还要负责编写使用页面流畅并能适应浏览器大小的页面代码。前端开发者有时候也会写一些非常酷的动画来实现应用程序像素状态之间的转换。

建议 #4: 参加聚会

编程相关的聚会可以让你在真实世界遇见其它开发者,相互进行交流。当你亲自和其他开发者交谈的时候,它可能会给你一些不错的观点。

试着参加一些聚会并向其他开发者学习从不同的角度去考虑问题。注意你遇到的程序员是什么样的类型,会决定他们的视角和观点。

建议 #5: 在 YouTube 上观看研讨会

世界上一些最好的程序员会在会议上发言。这些谈话可以让你接触到不同的专业思维模式,这些思维模式能启发你去思考什么是你想做的。

建议 #6: 回答 Quora 上关于学习编码的问题

把你喜欢的编程相关的知识写起来,这会有助于你进一步发现自己的兴趣所在。你也可以收获别人热情的、非常棒的反馈。

与全世界分享自己的知识并不难,而Quora就是个不错的地方。

建议 #7: 给 Ruby 编程语言一个镜头

Ruby 是我个人热爱的一种编程语言。我建议你去尝试一下,并在最初的尝试中判断是否适合你,一个程序员的口味。

Ruby 是一种具有流畅语法的编程语言,这使它成为一种很好的入门级语言。当你深入学习,进入到语言的高级阶段(比如元编程),你会意识到它是一个令人惊讶的编程语言,强大而又灵活。

建议 8: 体验各种不同的技术

爱上一门技术的唯一方法就是去实际体验一番。在你的业余时间,去体验一下各种不同的编程语言、框架、工具以及程序包吧。体验一些你不怎么熟悉的事务可以帮助你了解自己喜好什么以及不喜好什么, 这样就能够帮助你专注于向前。

建议 9: 找个人和你一起学习写代码

这样做总能使你更加的负责且高效。你的学习搭档或许也会帮助你发现一些之前没有想到的方面,将你引导向一个最终会爱上的特殊领域。

建议 10:别忘了打好基础

也许成为一名专业的程序员有许多的方法可循,但即使是有这么多方法可循,基础都有着相同的重要性。

没有基础,在遇到像下面这样的一些麻烦事儿的时候,你就很容易陷进去:

写代码的时候事倍功半。

代码的解决方案总是不尽如人意。

如果不了解如何使用像算法以及数据结构这样的 CS 概念,解决起真实世界中的编程问题,其感觉就像是只用 9 号球杆打高尔夫一样。这样你就能搞定一切吗? 也许吧。不过比起那些对球杆型号如数家珍的选手而言,你的生涯之路更加痛苦且遥遥无期啊。

建议 11: 搞一搞数据库

数据库在几乎所有的网页应用程序上都有被用到。通过了解数据库是如何运作的,你就能明白如何做如下一些事情:

  • 插入数据

  • 移除数据

  • 更新数据

  • 获取数据
学习了这些玩意儿,你就能构建更加强大的数据库驱动型应用程序了。这几个同数据库进行交互的不同方面优势被简单地叫做 CRUD: 创建(Create)/读取(Read)/更新(Update)/删除(Delete)。

建议 12: 搞一搞 JavaScript

JavaScript 是一种相当怪异的编程语言。但使它变得奇怪的许多方面都是其真正强大和有趣之处。

JavaScript 是那些在使用之前根本没有时间来精确地了解它的脚本玩家来写的。

如何你正在 2017 年学习编程,你就需要去学习一定量的 JavaScript 技术。不管你喜欢还是讨厌 JavaScript,都要明白 JavaScript 在许多的编程领域都能派上用场。学习它的一些知识在一定程度上对你的编程生涯是有实际意义的。

建议 #13:开始写技术博客

通过写复杂的编程想法,你将会在大脑里更好理解这些概念,同时向其他人展示你的独特视角。除此之外,写博客可以引导你直达真正关心的闪光点。

毕竟,你不会花几个小时写一篇你不感兴趣的技术文章。

建议 #14:尝试在 StackOverflow 解决问题

对 StackOverflow 的贡献是一个强有力的评价指标,说明您真正擅长什么方面的编程。

如果你解决了一个在 StackOverflow 上没有很好的答案的问题,那就花几分钟时间在这个问题上发布你的答案。

这不仅能帮助引导你,这种付出还能带来回报。比如你在 StackOverflow 上问了一个问题,就有很大希望被应答。上个星期我就遇到这种事。

建议 #15: 学习如何研究

不论你想做自动驾驶汽车、web 应用、还是虚拟显示设备......你都需要弄清楚如何研究。这是成为一个开发者重要的一部分。你需要学会如何将互联网作为研究工具。

您将要学习如何将问题转化为 Google 关键字进行搜索并得到答案。无论您想要达到什么样的专业程度,这种技能都非常有价值。

建议 #16: 尝试构建响应式 Web 应用程序

响应式 Web 应用程序是适用于用户与您的应用程序在指定设备进行交互的程序。 例如:台式电脑,手机和 iPad 。

人们将与您建立的应用程序以许多不同于您设想的方式进行交互。 学习如何在所有设备上构建惊人的用户体验对于所有类型的开发人员来说都是非常有价值的。

建议 #17: 花时间学无障碍相关技术

网站是要被所有人访问的。这部分人中有一些人需要的交互方式可能会与你有所不同。

典型的一个案例就是考虑盲人如何使用屏幕阅读器设备与 Web 应用交互。 屏幕阅读器无法知道图像的外观。 这也就是为什么像替代文本(与图像一起显示的图像的纯文本描述)对于需要和使用这种设备构建的应用进行交互的人来说,是非常有用的。

建议 #18: 不要做无用功

所有好的程序员都有一些特定的特征,这些特性真正具有专业性。

所以不用担心在成长过程中提前选择一个发展的路径方向。 专注于这些技巧,并积累成你跨越各行各业的基本技能。

如果你刚刚涉猎或者已经编码有一段时间了,而且你没想好你准备编程到什么时候,这就够了!

最好的篮球运动员在刚开始时也不知道他们想打什么位置。 直到他们弄清楚自己擅长什么,最终专注于挖掘自己的优势。

编码之旅也是如此。 在开始之前,您不必知道一切。 只需开始编码,并朝你有热情的方向前行!

编译自:18 Essential Tips For The Aspiring Developer Who Has No Idea Where To Start
 
请问:如何写出没有BUG的代码?

1947年9月9日,美国海军准将 Grace Hopper 在哈佛学院计算机实验室里使用 Mark II 和 Mark III 计算机进行研究工作。她的团队跟踪到 Mark II 上的一个错误,操作人员发现是由于一只飞蛾钻到了 Mark II 的继电器里导致的。团队清除了这只飞蛾,一切恢复正常。当时的工作人员记录了这样一句日志:” First actual case of bug being found. ” 这次著名的事件,犹如潘多拉打开了魔盒,从此,程序员的世界里,bug 满天飞。

1536919169370360.jpg



世界上第一个 bug

在我所担任过的角色中,有一个岗位叫做 Development Manager,通常简称 DM. 记得在一次基于一款平台的二次开发项目中,因为 bug 实在太多,我们几乎拿出了一整个里程碑的周期来 debug,于是我这个DM有了新的解释:Debug Man.

没有人喜欢 bug,bug 意味着错误、不确定性、加班、交付风险,等等…… 负面的词语怎么堆砌都不冗余。随便找个有过一、两个项目经验的开发者,问问他 debug 的回忆,那气氛就跟上坟一样。

对于 bug,开发者的神经往往也很敏感。有个段子很有趣 —— 说的是“应该如何向程序员反馈一个 bug ” ——

你不能直接跟他说:“这里不对啊,是不是你程序有 bug 啊?”,要这么说的话,会直接被怼回来:“你丫的自己不会用吧!”。

你可以换个说法:“咦,这里好像不对,是我操作错了吗?”,这时程序员心里就一咯噔:“Shit.. 不会是我代码有 bug 吧?”

从业多年,发现有个现象还蛮有趣的:有时候,当某个 bug 被发现时,犯下这个错误的始作俑者会开玩笑地为自己解脱:“谁没写过 bug 啊,Windows 还有 bug 呢。” 这句托词我也用过,感觉挺好用的,就好比:梅西都能罚丢点球,我空门没进,也是可以理解的嘛。

但其实吧…… 这逻辑经不起推敲的。

Windows 操作系统,一款长达30多年,装机量估计都超过了地球人口数量的巨型工程,复杂度基本只能靠猜。以微软公布的资料来看:

Windows 95 代码量约 1500 万行
Windows XP 代码量约 4500 万行
Windows Vista 代码量约 5000 万行
Windows 7 代码量 5000+ 万行

以 Windows 7 为例,超5000万的代码量,23个小组,共1000多人的开发团队。如此规模下产生的bug,和一个在办公室里上了1天班,写了200行代码,就闹出一堆bug,搞得项目乱七八糟的,能同日而语吗?最后再轻描淡写地来句 “微软也有 bug ”,不害臊?

所以我后来不用这句了,如此开脱,水平太low。其替代方案容我稍后再讲。

1536919288306896.jpg


为了对抗 bug,人们发明了各种各样的工具和手段,上至方法论,下至生产工具。越来越先进的 IDE, 复杂的代码审查制度,从单元测试到集成联调,再配上 beta 版,试用,公测,等等。凡此种种,其目标无一不是消灭 bug 。可这些琳琅满目的解决方案的存在,反倒证明了一个悲剧:人类,实在是太容易犯错了。

如果说凡事都有正反两面的意义,那么 bug 的正能量就是硬生生造就了大量就业机会,进而维护了社会稳定。

那么,为什么我们总是无法避免 bug 的产生?我们能不能杜绝 bug ?

答案当然是不可能了。因为那样一来,程序员的日子岂不是太舒服了?不符合苦逼的定位。而且,我们所处的这个世界,但凡越是高呼要消灭的东西,越是会普遍地存在。就像苍蝇、蚊虫、污染、犯罪、战争,不一而足。

按照常识,经验越丰富的老手写出来的代码,一次通过的几率更高,比如他们思考得会更周全,对异常的判断和处理更老练,边界条件把握得更精确,等等。所以我们可能会幻想:是不是只要我们足够仔细,并努力磨练技艺,通过让一部分码农先老练起来,然后实现共同老练,最终就可以达到全世界开发者联合起来消灭bug的大解放了?

很遗憾,这只是一个治标不治本的思路,因为bug是有阶级的。老手们的bug相对少,只是低级错误少,他们也会遇到bug,而他们的bug,往往都是一眼蒙逼的难度系数N.x的难题,不发生在代码层面,大多在业务层面,甚至需求设计层面,或者直接是一些不可抗拒因素(做过政府项目吗?)。总之,萌新有萌新们的秀逗,大叔有大叔们的短路,老杆也会有自己的滑铁卢。

bug 这个概念的起源,就预示着它的不可避免性。世界上第一个 bug 是一只飞蛾,这剧本,谁能料到?某种意义上说,bug 就是不可预见的错误,能被预估并且提前做好准备的,那叫 exception, try catch 是他们的朋友。

对于为什么会产生 bug 的原因,著名的荷兰计算机科学家 Edsger W. Dijkstra 有过一句经典名言:

If debugging is the process of removing software bugs,

then programming must be the process of putting them in.

这就是上文提到的那句托词 “ Windows 也有 bug. ” 的替代方案。
 
TIOBE 8 月编程语言排行榜:Python 强势逼近 Java,被 VB.NET 反超的 C# 已穷途末路...

TIOBE 编程语言社区最新发布了 2018 年 8 月排行榜。


p


Python 冲击前三甲指日可待


自 2001 年以来,Java、C 和 C++ 三种老牌编程语言长期占据 TIOBE 指数的前三甲位置,而本月也是如此。但值得注意的是,近期越来越流行的 Python 与第三名 C++ 之间的差距正逐步减少,只相差了 0.48%,且上个月 Python 增长率为 2.82%,本月增长率为 3.3%,按照这样增长趋势下去,Python 挤进 TIOBE 排行榜的 Top 3 指日可待。倘若 Python 超过 C ++ 并取代其第三名的位置,那么对于 Guido van Rossum(Python 创始人) 的脚本语言来说,这将是史上最高的。

2005 年,有一项研究是关于在美国大学里教授最多的编程语言,Java 明显独据第一,占所有入门编程课程的 60%。大约 10 年后的 2014 年,又进行了类似的研究,结果就天壤地别。这次 Python 成为最终赢家,拥有超过 70% 的“市场份额”。而它的提升在 TIOBE 索引排行榜中显而易见。除此之外,互联网业界也开始普遍采用 Python。Python 编程语言最初是 Perl 的继承者,用于编写构建脚本和各种粘合软件。后来逐渐渗透到其他领域。如今,在大型嵌入式系统中运行 Python 程序也很常见。因此,Python 很可能会进入前三名,甚至长远来看,取代 Java 成为编程语言霸主也不是完全没有可能。

p



p


被 Visual Basic .NET 反超的 C# 一蹶不振



在 TIOBE 排行榜中,上个月 C# 被 Visual Basic .NET 反超之后,颓势并没有就此缓解,上个月增幅还有 0.28%,而这个月直接为 -0.65%。就国内而言,不少开发者纷纷感叹 C# 的生态大不如以前,真正使用 C# 开发的互联网企业也越来越少,C# 真的穷途末路了吗(https://bbs.csdn.net/topics/392396045):

上午刚去面试了几家,都说好的做 .NET ,结果要求会 Linux、Java 的优先,每一家都是这样,后来面试出来的时候,跟那公司一个负责人聊,他说之前是做 .NET 项目的,后面慢慢的减少 .NET。现在公司 C# 这块开发人员都被裁撤了,名为招 .NET 工程师,实则是招聘 Java。

.NET 从几年前就盛传不行了,自从微软 Windows Phone 手机项目被削减,就传的越来越厉害,但是 .NET 粉丝都不愿承认,也有不少开发者都转去 Java 或者做 Android 开发了。其实从这几年来的招聘来看,Java、Android 居多,Linux 次之,.NET 很少。尤其是近两年,.NET 慢慢地不见了,全是 Java 了。不论招聘网站或者是猎头招聘,或者外包,或者 HR 直招。

后面估计微软也看到了这种状况,就将 .NET Core 开源了。于此,不少 .NET 粉就兴奋了,认为 .NET 一开源,这种颓废的趋势会一扫而空。而实际上到了今天, .NET 这一块一天比一天没落。被.NET 粉认为要没落的 Java 则一天比一天红火。他们认为 Java 语言僵化,不思进取,且 Oracle 不给于最大的支持,以后会向收费的路子。而实际情况是相反的。

想到了几年前开源社区,讨论 .NET 。说 .NET 平台微软弃之可惜,食之无味。所以干脆开源算了。这句话,恐怕是给 .NET 最好的备注。



p


其他编程语言


其他编程语言变化还有,Hack、Groovy 和 Julia 重新进入前 50 名,而 TypeScript 有所下降,现在位于第 62 位。

最后,自 2018 年 2 月起,SQL 再次添加到了 TIOBE 排行榜中,增长速度非常快,现在位居第 9 名。

p



p


Top 10 编程语言 TIOBE 指数走势(2002-2018)



p




p


其他编程语言排名


下面列出了完整的 21-50 名,因为是非官方发布的,所以可能存在遗漏:

p


第 51-100 名如下,由于它们之间的数值差异较小,仅以文本形式列出(按字母排序):

  • (Visual) FoxPro, ABC, ActionScript, Alice, APL, Applescript, AutoLISP, Awk, BBC BASIC, Bourne shell, C shell, CFML, cg, Clojure, Common Lisp, Crystal, Dylan, Factor, Icon, Io, J, Korn shell, LiveCode, Maple, ML, Monkey, MQL4, MS-DOS batch, NATURAL, NXT-G, OpenEdge ABL, PL/I, PostScript, PowerShell, Pure Data, Q, Racket, Ring, RPG, S, S-PLUS, Simulink, Smalltalk, SPARK, SPSS, Stata, TypeScript, VBScript, Verilog, VHDL

p


历史排名(1988-2018)



注: 以下排名位次取决于 12 个月的平均值。

p



p


编程语言“名人榜”(2003-2017)



p


【说明】

TIOBE 编程语言社区排行榜是编程语言流行趋势的一个指标,每月更新,这份排行榜排名基于互联网上有经验的程序员、课程和第三方厂商的数量。排名使用著名的搜索引擎(诸如 Google、MSN、Yahoo!、Wikipedia、YouTube 以及 Baidu 等)进行计算。请注意这个排行榜只是反映某个编程语言的热门程度,并不能说明一门编程语言好不好,或者一门语言所编写的代码数量多少。

这个排行榜可以用来考查你的编程技能是否与时俱进,也可以在开发新系统时作为一个语言选择依据。
 
两次转行,我为什么要做程序员?(转载)

我本是学机械工程及其自动化出身的,本科时也跟着师兄、师姐煞有介事的参与了两个机械类项目,其中一个项目预算也还挺吓人的,好吧,即使我现在看也觉得不少。但是忙忙碌碌三年的时光过去了,项目结题了,自己在机械领域的能力真的没什么长进。

那会儿的我从一个访谈节目中的整容医生那里听来一万小时原理,觉得自己也是有一定践行度了,然而自己的画的机械加工图纸还是一塌糊涂,外协加工的零件回来总要自己用锉刀修了又修,有的甚至要上床子修(别误会,车床、铣床)。一次次的惨痛经历告诉我,我可能不适合做机械这行。

所以读研时,我转行了,去了相邻专业自动化,做机器人控制算法。读过研的童鞋都深刻的体会了“师傅领进门,修行在个人”这就话的现实意义,我也如此。从建模起,各种碰壁,一路艰难苦恨爬到仿真做成,但是实验却因为时间、精力以及找工作等各种原因难以成行。

工作两年后,开始有了转行的想法,我想转行的原因很简单,就是不喜欢这份工作,感觉没有激情,也无法百分百的投入。

当时的工作还比较不错,国有企业,稳定、福利好,而且我在大学里学得专业知识也能用上,转行意味着放弃稳定的工作,放弃自己的专业从头再来。

从开始有转行的想法,到下定决心转行,大概有一年的时间。这一年在我的内心一直有两个小人打架,一个要转,一个不要转,很长时间不分胜负,心力交瘁。

说实话,我是害怕从头再来的,怕自己的这个选择错上加错,更离谱的是,我根本不知道自己到底转行做什么。

唯一可以确定的一件事情就是,没办法耗在这里,再耗下去就是浪费青春,感觉越晚转行越难。就这样一直纠结着,纠结的过程是痛苦的,如果可以重来我希望可以缩短这个过程,甚至没有这个过程。

生命中你总会遇到一些事、不经意听到一些话,拯救了自己的内心。离开舒适区,奔向一个新的未知,这就是成长的开始。

所以最终决定成为一名码农!当然,薪水是一个很重要的原因,我也曾一度以为是唯一的原因。当我入行一段时间后,我发现了一个让我放弃了机械、控制而选择了程序员潜在的原因——及时反馈。

记得就业时每次面试我都要被问到一个问题,你专业是机械、 项目是控制然而你为什么要做程序员?

一次次的从(睁)容(眼)应(瞎)对(说),从机械钱途无望到控制多数卖概念再到代码改变世界说了一大堆。现在看来,其中有一条还真是说的很有道理的——试错快。

仔细分析自己放弃机械的原因是其加工周期长,错误反馈慢,一个零件外协加工少则两周多则一个月,返回的零件错了,我再翻看图纸大部分已经记不清如何设计的了,所以自己的设计水平一直难以提升,这也就是我付出了时间,精力但是久久不能提高能力的原因,反馈不够及时,使得自己无法及时的纠正自己的错误。

因为项目需要,我做了一些机器人的上位机控制软件,在开发中我渐渐喜欢上了写代码,因为它试错快,能够及时的反馈结果,一个函数写完,直接跑测试用例,立刻就能够知道自己的对了还是错了,然后纠正,在开发。这种及时反馈的特点使我在这个领域逐步建立了自信,也开始乐于从事相关的工作。

因为自己摸索有了一些基础,所以就打算转行做成程序员了。

想好了学习Java,开始行动起来,在朋友的推荐下选择了一个他推荐的北邮在线(自己也挑选后最后决定的),从最简单的程序算法编写、到编写小游戏,再到独立写了一个系统。

一年的纠结,五个月的努力终于得到了回报,如愿以偿的成为一名“传说中的”程序员,开启了我的程序员之路。

有时看似生活中的一些偶然,决定了你未来的人生轨迹,实际上是到了转弯的时候。

书中说,刻意练习要有个好导师,他能够及时指出你的问题,及时纠正从而助你成为专家。这也是我觉得它不靠谱的地方,毕竟生活不是小说,洪七公不会在嘉兴等着郭靖,所以好导师的问题,还是不要强求了,得之我幸,不得我命。能够做到:练习—反馈—再练习—再反馈,就够我自己成长进步了,也许会走弯路、歪路,但是起码心情不用再那么忐忑了。

朋友一直咨询我关于转行做一名程序员的问题,我的回答如下:

决心和毅力!

选择了就要下定决定一直坚持到最后。

跟着兴趣,跟着内心,那么你会在进步中得到更多快乐和满足。

转行的决定很容易做出来,但是入行难,坚持下来更难,凡事要三思而后行,不可盲目。

如今我已转行五年,已成为一名“老猿",可每当回忆起这段往事,还是让我感怀。谁的青春不迷茫,迷茫时不要放弃努力,你总能等到柳暗花明的那一刻。

---------------------

作者:前端入门到精通

原文:https://blog.csdn.net/zwjweb/article/details/84722878
 
开发必读书单

最近公司要整理一份每个岗位的必读书单。以下是我们开发部门整理的。仅做分享,不负任何责任。

DBA 必读书籍:
《MySQL 8 Cookbook(中文版)》
《Linux命令行与shell脚本编程大全(第3版)》

运维 必须书籍:
《鸟哥的Linux私房菜基础学习篇 第四版》
《服务器架设篇 第三版》
《Kubernetes权威指南:从Docker到Kubernetes实践全接触(第4版)》
《Linux运维之道(第2版)》
《网管员典藏书架:网络管理与运维实战宝典》

前端必读书籍:
《前端工程化体系设计与实践》
《JavaScript 高级程序设计 第三版》
《JavaScript 权威指南 第六版》
《你不知道的 JavaScript》(上卷、中卷、下卷)PHP 必读书籍
《Modern PHP(中文版)》
《MySQL必知必会》
《PHP核心技术与最佳实践(第2版)》
《Docker技术入门与实战》
《etcd技术内幕》
《重构 改善既有代码的设计(第2版)》
《图解HTTP》
《图解密码技术 第3版》
《设计模式之禅(第2版)》
《代码整洁之道》
《程序员的数学》
《程序员的数学2》
《程序员的数学3》
《UNIX网络编程 卷1》
《UNIX网络编程 卷2》

测试必读书籍
《测试之美》
《软件自动化测试开发》
《有效软件测试》
《python3 网络爬虫开发实战》
《Python学习手册》
《全栈性能测试修炼宝典 JMeter实战》

Java 必读书籍
《Java编程思想(第4版) [thinking in java]》
《Spring实战(第4版)》
《Spring Cloud与Docker微服务架构实战(第2版)》
《Spring Boot实战》
《Spring源码深度解析 第2版》
《深入浅出MySQL:数据库开发、优化与管理维护(第2版)》
《阿里巴巴Java开发手册》
《Java并发编程实战》
《Java性能优化权威指南》
《深入理解Java虚拟机》

Andorid 必读书籍
《Effective Java中文版(原书第3版)》
《第一行代码 Android 第2版》
《Android开发艺术探索》
《Kotlin实战》
《Kotlin核心编程》
《Head First设计模式(中文版)》
《Android高级进阶》
《App架构师实践指南》

iOS 必读书籍:
《Effective Objective-C 2.0》
《Objective-C高级编程 》
《Swift入门很简单》
《iOS开发范例实战宝典(基础篇+进阶篇)(套装共2册)》
《iOS开发进阶》
《Objective-C高级编程 iOS与OS X多线程和内存管理》
 

VR版3D设计工具Gravity Sketch开始免费了


原本售价人民币88元的3D设计工具Gravity Sketch现已支持免费下载。开发团队表示,于SteamVR、Quest Store和Rift Store发行的工具都已开放免费下载。

1611664841682407.png

Gravity Sketch最初于2017年发行,售价为88元人民币。它提供了一个创造性的工具集,允许VR用户简易快速地勾勒出3D设计概念,并提供了所需的实时协作性。这大大缩短了产品开发周期和降低了成本。值得一提的是,这款工具由英国皇家艺术学院的设计工程师开发。

对于从付费版本转向免费版本,开发商表示这是为了实现“用户群的多样化”和“普及数字化3D设计”。当然,团队在免费版本的基础上提供了包含一系列高级功能的付费商业版本。

Gravity Sketch在一份官方声明中表示:“在过去数年间,有大量用户采用了这款工具,而他们帮助和影响了我们的开发方向以及我们的商业模式。要真正实现我们的无障碍数字3D创作使命,让核心产品免费是最好的出路。提供免费产品能够允许我们多样化用户群体。另外,早期用户的采用对我们后来的开发产生了重大影响。他们中的许多人将Gravity Sketch引入了正式工作流程,并倾向于使用高级功能,从而产生商业合同。这提升了我们的营收增长,使我们能够支持和发展团队与平台。”

值得一提的是,这款工具在数次版本更新中为用户带来了重要的功能选项,主要包括

  1. Web检查器:提供了在浏览器中查看草图和三维文件的功能,不再需要提前下载完整的文件。
  2. 文件标记和注释:对文件进行标记和注释。
  3. 共享和管理文件:使文件变得井然有序,并与合作者共享项目文件。
 
后退
顶部