2019 年终回顾:不忘初心,负重前行

点击上方蓝字关注“汪宇杰博客”

导语

2019 年就要接近尾声,这一年对于我来说,有许多有意义的事件。我成长了许多,并依然保持着对技术的热情。在辞旧迎新之际,我想回顾一下我这一年中有意义的事件与收获,期待与大家一起在2020年继续成就不凡!

微软 MVP 全球峰会

今年3月,我有幸参加了在美国雷德蒙微软总部举办的MVP全球峰会,这是我第二次去美国,第一次去西雅图。我从小就崇拜比尔·盖茨先生及他创办的伟大的微软公司,而去微软总部参观,可以说是“朝圣”,我儿时的梦想之一终于实现,这次MVP全球峰会总算是拔了颗0x14年的草了。

(图:呼吸着微软总部的空气)

微软总部的园区非常大,需要乘坐 shuttle bus 穿梭于各个大楼之间。我们的会场在 Building 33,即 Microsoft Conference Center。4天的大会日程非常充实,可以了解到还未发布的新功能,也可以大量汲取其他MVP分享自己的技术精髓。

会议期间,我十分幸运地见到了两位久仰已久的专家——James Newton King,可能全世界所有的 .NET 程序员都用过他写的库,即大名鼎鼎的 Json.NET (Newtonsoft.Json) ,NuGet 下载量达到了3000万,排名第一,他现在也就职于微软。

(图:汪宇杰, James 和闫晓迪)

(图:Newtonsoft.Json 下载量排行)

另一位大佬是大名鼎鼎的 Scott Hanselman ,关注 ASP.NET(尤其是 MVC)的不少技术从业者都看过他写的书,即著名的红皮书之一。在微软的 Channel 9 视频网站上也经常有他的节目,我刚工作那会儿经常回家后躺在床上看他的节目学习技术,从没想过能有一天能与大佬面基!

(图:与 Scott Hanselman 合影)

说到 Channel 9,此次峰会期间我也巧遇了正在录制 Visual Studio 2019 发布会视频的现场,视频的内容即 VS 的历史版本回顾,摄制组带来了上古时候的 Visual Studio .NET、2003、2005和2008的包装盒。作为 .NET 程序员的我被勾起了童年的回忆,初中时候购买盗版VS.NET 光盘的画面历历在目,而17年后我居然摸到了正版产品的包装盒,它们奠定了我程序员的道路,心里百般滋味。

我工作后自费补票了所有微软及非微软的正版软件。作为 MVP,现在也可以免费使用 Visual Studio Enterprise 版本,神清气爽。

(图:Channel 9 摄制组携带的古董)

国内程序员比较耳熟能详的还有轮子哥、鸭哥这两位优秀的微软专家,这次去西雅图也和他们面了基,一起吃了牛排,倍感荣幸。

微软的员工商店很有趣,里面除了 Windows、Office、Surface 等软硬件产品,还有很多田牌小周边,剁手根本停不下来!

(图:微软员工商店)

Visitor Center 俨然一个微软历史博物馆,比如下面这份95年的陈酿:

微软的第一份代码:

还有上古之神们:

让我感到比较意外的是,微软 MVP 不仅可以在微软员工店、零售店打折购买微软自家产品,居然还能在苹果店里打折买 iPad Pro,正好买了一个给家人,并且装满了微软全家桶!在西雅图这个宜居又文艺的城市,我们还参观了不少博物馆,登上了太空针,品尝了各种地道美国菜。这次微软总部之行绝对是人生中最难忘的经历之一!

博客系统开源

我的博客系统已经有10年历史了,从大一时候边自学边写的 ASP.NET 2.0 VB + Access 一直升级维护到后来的 ASP.NET MVC C# + SQL,到今天的 ASP.NET Core + Azure 架构。期间有不少人问我要过源代码,尽管我一直在博客上分享技术文章,但从没完全开源过博客系统本身。而去年 .NET Core 成熟之后,我也像纳德拉刷新微软一样,使用 ASP.NET Core + Azure 重写了整个博客系统,经过极度精简和优化的全新博客在性能、功能、稳定性上都全方位无死角碾压了之前的 .NET Framework 版本

随着阅历的增长,我也意识到开源并不等于拱手相让自己的心血,尽管国内有很多无良的培训班、淘宝店家喜欢把人家的开源项目拿下来改logo卖钱,但这样的人还是少数。前年开源《Character Map UWP》应用后获得极大的社区帮助,也让我认识到了开源的力量比单打独斗强多了。因此我决定完全开源博客,和博客用到的所有自己写的轮子。于是,2019年,我的 GitHub 活跃度激增,一年后,我终于和路边的花坛一样努力了!

而这个过程,并不只是我的代码对开源社区有帮助,可以让别人部署自己的博客,开源社区对于我的博客系统也提了很多关键意见,寻找了不少 Bug。系统不论从功能、稳定性还是代码质量上都有了明显的改进。

(图:2019年GitHub贡献)

(图:路边的花坛)

今年和我的博客一起开源的还有我的第一个 UWP 作品《描图》也是代表作之一。这是我早年开发的一款画图软件,达到了百万下载量,曾经获得IT之家、Windows Central 等国内外知名媒体推荐。但是由于精力有限以及 UWP 平台的一些无奈,我无法继续维护这些 Windows 应用,于是决定开源给社区,并退出 UWP 方向。

(图:《描图》应用)

拥抱开源以来,我的技术成长和收获实现了质的飞跃, GitHub 这个平台及 MVP 组织给了我与世界顶尖高手交流的机会。更重要的是,我懂得了一个道理:无知并不可怕,可怕的是傲慢。曾经的我和曾经的微软一样,认为自己的心血不能白送给别人,也经常嘲讽开源软件的各种毛病,而如今,我重新认识了开源,就像不少人重新认识微软一样,只有放下彼此的偏见和傲慢,才能携手进步。

Azure Global Bootcamp

4月的 Azure Global Bootcamp 由胡浩老师等 MVP 前辈承办,今年我也有幸参与其中,这是我在 Azure 方向首次演讲。我分享的话题正是我博客使用的一个 Azure 明星服务:App Service。尽管从2012年我就接触了微软云(当年还叫 Windows Azure),但由于不是我平时工作所用的技术,熟悉程度不如 .NET,所以我一直对自己没有信心。后来我从微软开发者市场的朋友那边了解到,国内懂 Azure 的人太少了。而用过 Azure的我深知这个平台对于现代公司数字化转型的强大帮助,可以节省大量的人力成本,让程序员少收福报,所以我觉得非常有必要推广这个平台。

我认真准备了我的第一次 Azure 课程,并作为新方向的起点去努力。微软 CEO 纳德拉在《刷新》一书中也表达过不要停留在Windows这种已经成熟的舒适区,现在已经移动为先云为先的时代了,抓住机会才能继续立足这个世界

微软上海Reactor开幕

今年微软在上海开设了中国第一个 Reactor 社区空间。我有幸受邀作为开幕式的演讲嘉宾之一,带来了《Azure, 原力觉醒——云原生应用开发实践》主题的分享。还面基了久仰大名的韩俊老师。

这次的分享依然围绕着我的博客系统,与之前不同的是,我分享了博客在 Azure 云端的完整架构实践,并介绍了Azure 在容器方面的优秀方案,贯穿应用从构建到上线的各方面。

微软云课首播

9月25日,我的第一次线上课程在《微软云课》平台首播了。内容为 App Service 及 Azure SQL Database。介绍微软云 Azure 上的两个 PaaS 服务,结合实例演示 App Service 以及 Azure SQL 数据库相对传统虚拟机方式部署网站的巨大优势,演示如何创建和部署网站,并绑定域名证书、定时备份、自动扩容、使用服务编辑器以及部署槽。

公司招聘宣讲会,入职5年

11月底,我有幸与我司 VP 及人力等同事在某科技园区一同给40多名大学生进行了一次颇有意义的校园宣讲会。这一次我内心里有一些忐忑,因为我将要面对工作经历像一张白纸一样的同学们,他们对技术方向或职场都相对缺乏判断力,我需要保持谨慎,有可能说错一句话都会影响到他人的职业方向。8年前的自己,同样听过校园宣讲会。当年的我怀着对技术的憧憬,选择了一家印度软件外包巨头的 .NET 开发职位作为我职业生涯的起点。

我分享的话题也是.NET技术,我们的消费者产品和银行即服务(BaaS)平台都采用该技术。尽管.NET在世界范围内生机勃勃,但是在国内,使用它比较多的还是外企。这场宣讲会的学生里也有不少我母校的学弟学妹,他们都是Java背景,而我接到.NET宣传任务的时候,有些激动,也有些彷徨。激动的是作为.NET社区的一份子,终于能有机会宣传这个优秀的技术。彷徨的是,又得和 Java 比了,这两者的比较就如同 AK47 步枪和 M4A1 卡宾枪,只有适合的场景,没有绝对的好坏,任何一个阵营的人都能说出对方的缺点和自己的优势。所以我选择说实话,告诉同学们 .NET Framework 的悲剧故事,也给他们展示开源跨平台重生后的 .NET Core 以及 C# 精炼简洁的语法。我想说明的并不是 C# 语法简于 Java 所以选择 .NET,而是 .NET 生产力和云原生等优势对于企业的重要性,也向同学们介绍了我们企业重视生活和工作平衡等巨大优势。

现场的同学们进行了积极的反馈,让我非常惊喜与高兴。虽然我不知道他们未来是否会选择我们公司,以后是否继续用 .NET 技术,但我知道,我们这样的企业可以在轻松的环境下培养一批 .NET 开发者,.NET 在国内一定后继有人。

今年也是我入职 Green Dot 公司的第五年,同时也是公司成立20周年。我见证了公司从几十人挤在一间小办公室,到几百人在崭新的办公室一起为公司庆生的发展历程。非常幸运能遇到优秀的同事们,也期待来年能继续发挥专长,让技术予力公司成就不凡!

(图:5年员工证书)

编程一小时

12月中旬,又到了年度全球计算机教育周。今年的活动位于上海计算技术研究所,并请来了code.org的课程研究专家Elizabeth Bacon老师进行主题演讲。我们的教材依然是《我的世界》编程游戏,今年的课程有了3D体验,主题为《AI for Good》,指导小朋友对机器人进行训练,让机器人识别易燃物从而达到防火的目的。和小朋友们一起的时间总是短暂而快乐,我们也他们身上挖掘出了许多闪光点,甚至感叹个别孩子的智慧程度远超我们自己的当年。时代在进步,如今的教育水平和设施也有着大幅度的提升,我相信这些孩子们未来一定能成为中国以及世界的栋梁。

收获与感悟

如果要用两个字来总结2019年的收获,那就是“成长”。今年我还参与了纽约大学学生参观微软、微软创新杯培训等其他众多社区活动,同时也保持着博客文章以及开源代码等线上贡献。

我完成了年初的目标——努力克服程序员的社交恐惧,更多参与到线下交互,在微软美国总部的拜访不仅让我大开眼界,了解到更广阔的星辰大海,也让我的演讲和备课经验更加丰富。所以,凡事都不要先急于否定自己,觉得“我办不到,我不适合”,大胆去做自己没做过的事,说不定有意想不到的收获。今年业余时间我更加积极参与开源,也完全改变了我对开源世界的认知。我从几年前的开源嘲讽者变成了开源拥护者,就像许多软黑随着微软开源开放而转变为软粉,只要我们彼此放下高傲和成见,互相学习,取长补短,就能共同进步。

我非常感谢 Green Dot、微软公司以及 MVP 和社区朋友们,没有你们的培养、帮助与支持,我无法成长为今天的我。今年也是我30岁的启程,都说程序员30了,就该转行送外卖挣钱植发了,这个行业确实需要不停的学习,如果没有兴趣,当然很累,好在18年前,我出于兴趣,给自己定了长大从事 IT 行业的目标,而18年后,我依然能在这个行业保持兴趣和热情,我会继续证明,年龄不必成为程序员生涯的终结!

2020 是下一个征程,我的初心不变,我会做好本职工作并积极贡献社区,期待与大家一同成长!

汪宇杰 

微软MVP,Azure 及.NET开发者,拥有丰富的网站开发及运维经验。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/312568.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机试真题1 反序输出 cin判断读取结束

题目链接 解题思路 这题是纯纯的送分题&#xff0c;但我忘记了怎么判断读取结束。应该用&#xff1a; while (cin >> s){}在Windows中&#xff0c;CtrlZ输出输入结束符号。 参考代码 #include<bits/stdc.h> using namespace std;void print(string s) {int len…

【C#】设计模式的学习征途系列文章目录(2019版)

Photo &#xff1a;Design Patterns文 | Edison Zhou2017年&#xff0c;我开始系统学习设计模式&#xff0c;参考了《大话设计模式》、《设计模式的艺术》等书籍&#xff0c;并通过C#语言写了各种模式的代码示例&#xff08;已经放到了我的github上并收获了120个star&#xff0…

机试真题2 进制转换 高精度除法

题目链接 解题思路 这题需要通过高精度加除法来解决。原本以为高校机试题最多考到高精度的加减法&#xff0c;没想到还会考高精度和低精度的乘除法&#xff0c;不亏是你清的题。 需要注意的是&#xff0c;一开始存储需要是逆序存储&#xff0c;方便后面的操作&#xff0c;同时…

原创 | 为什么年终奖是一个彻头彻尾的职场圈套?

0前言之前写过几篇职场专题的文章&#xff0c;反响不错&#xff0c;也先后被不少公众号转载过&#xff0c;这几天来了不少新朋友&#xff0c;如果之前没阅读过&#xff0c;可以在后台回复“职场”2个字&#xff0c;查看系列文章。转眼又到年底了&#xff0c;不知道有多少人在心…

机试真题3 进制转换2 高精度除法

题目链接 解题思路 这题还是通过高精度的除法来做&#xff0c;思路与上一篇文章类似&#xff0c;区别就是输入输出的进制位数不是固定的。对于输入的进制m&#xff0c;在divide函数中更新余数的时候乘以的数字改成m&#xff1b;对于输出的进制n&#xff0c;在divide函数中取余…

Blazor 机制初探以及什么是前后端分离,还不赶紧上车?

上一篇文章发了一个 BlazAdmin 的尝鲜版基于 Blazui 的 Blazor 后台管理模板 BlazAdmin 正式尝鲜&#xff0c;这一次主要聊聊 Blazor 是如何做到用 C# 来写前端的&#xff0c;传送门&#xff1a;https://www.cnblogs.com/wzxinchen/p/12057171.html飚车前需要说明的一点是&…

机试真题4 成绩排序

题目链接 解题思路 题目非常简单&#xff0c;就是需要注意一下直接用sort方法做的话&#xff0c;会导致同分时输出的人名顺序与输入时不一致&#xff0c;这是因为sort函数是不稳定的算法&#xff08;sort排序为了提升性能&#xff0c;会根据不同的情况选用不同的排序算法&…

云原生

一、云原生概念的诞生云原生&#xff08;Cloud Native&#xff09;的概念&#xff0c;由来自Pivotal的MattStine于2013年首次提出&#xff0c;被一直延续使用至今。这个概念是Matt Stine根据其多年的架构和咨询经验总结出来的一个思想集合&#xff0c;并得到了社区的不断完善&a…

基于 Kubernetes 的 CICD 基础设施即代码

在上一篇基于 Kubernetes 的基础设施即代码一文中&#xff0c;我概要地介绍了基于 Kubernetes 的 .NET Core 微服务和 CI/CD 动手实践工作坊 使用的基础设施是如何使用代码描述的&#xff0c;以及它的自动化执行过程。如果要查看基于 Kubernetes 的基础设施即代码架构全图&…

Azure Arc:微软是怎么玩多云游戏的?

混合云在竞争性云提供商的基础上提供了来自云提供商的服务&#xff0c;从而使组织能够以不同方式一起使用来自不同供应商的云服务。例如&#xff0c;组织可以使用将数据存储在一个云中存储上的功能&#xff0c;而另一个云服务商则在该应用程序或数据之上运行。因此&#xff0c;…

当我们在谈 .NET Core 跨平台时,我们在谈些什么?--学习笔记

摘要.NET Framework在过去十多年在跨平台上的尝试。.NET Core跨平台的实现有何不同&#xff1f;基于 .NET Standard的平台兼容性是如何实现的&#xff1f;讲师介绍历史枷锁.NET Framework FCL CLR"跨平台"的 .NET Framework完全独立&#xff0c;各自为政复用之殇由…

IdentityServer4学习笔记汇总(实现传送门在底部)

前言互联网时代,对信息和资源的保护越发苛刻,在所有应用中授权和认证是必不可少缺少的一部分。如果一个应用没有授权和认证那么这个应用就是不完整或者说不安全的应用。在.Net平台给我们提供了一套完整的授权认证框架,那就是IdentityServer4。它实现了OpenId Connect和OAuth2.0…

多库操作2:终于实现多个数据库操作

▼更多精彩推荐&#xff0c;上午10点到达▼圣诞节快乐在上周的文章【多库操作&#xff1a;多个数据库的动态切换&#xff08;一&#xff09;】中&#xff0c;我们简单说了说&#xff0c;如何切换数据库&#xff0c;虽然实现了大部分的功能&#xff0c;但是最后也遗留了小问题&a…

数据结构作业1

1.给定NNN的三维数组A&#xff0c;则在不改变数组的前提下&#xff0c;查找最小元素的时间复杂度是&#xff1a;D A.O(N​2​​) B.O(NlogN) C.O(N​3​​logN) D.O(N​3​​) 2.For the following piece of code for(i0; i<n; i)for(ji; j>0; j/2)printf(“%d\n”, j);…

服务发现技术是如何演进出来的?

昨天写了一篇<微服务的时间和成本去哪儿了>&#xff0c;有人在底下留言&#xff1a;我的回答是&#xff1a;"微服务可以不用服务发现和负载均衡吗&#xff1f;它是微服务一个核心组件。怎么能说没有关系&#xff1f;"我觉得有必要来思考和总结一下服务发现技术…

7-5 两个有序链表序列的合并 (20 分)

已知两个非降序链表序列S1与S2&#xff0c;设计函数构造出S1与S2合并后的新的非降序链表S3。 输入格式: 输入分两行&#xff0c;分别在每行给出由若干个正整数构成的非降序序列&#xff0c;用−1表示序列的结尾&#xff08;−1不属于这个序列&#xff09;。数字用空格间隔。 …

3分钟搞懂前后端开发的区别

上周末见了好多开发的年轻朋友&#xff0c;问了我一个问题&#xff1a;“前后端的区别和要求是什么&#xff1f;”分不清前后端开发的区别和要求&#xff0c;一种是因为前后端都了解&#xff0c;号称“全栈工程师”&#xff0c;但又什么都不是很精通&#xff1b;另一种是前端的…

7-4 螺旋方阵 (20 分)

所谓“螺旋方阵”&#xff0c;是指对任意给定的N&#xff0c;将1到NN的数字从左上角第1个格子开始&#xff0c;按顺时针螺旋方向顺序填入NN的方阵里。本题要求构造这样的螺旋方阵。 输入格式&#xff1a; 输入在一行中给出一个正整数N&#xff08;<10&#xff09;。 输出格…

基于 Kubernetes 的微服务部署即代码

在基于 Kubernetes 的基础设施即代码一文中&#xff0c;我概要地介绍了基于 Kubernetes 的 .NET Core 微服务和 CI/CD 动手实践工作坊使用的基础设施是如何使用代码描述的&#xff0c;以及它的自动化执行过程。如果要查看基于 Kubernetes 的基础设施即代码架构全图&#xff0c;…

使用Arduino开发ESP32开发环境搭建

1.打开Arduino IDE&#xff0c;选择文件->首选项->设置 复制下方的ESP32板管理网址&#xff0c;添加到附加开发板管理器中&#xff1a; https://dl.espressif.com/dl/package_esp32_index.json 2.选择&#xff1a;工具->开发板->开发板管理器 在弹出的对话框中搜索…