写这个帖子,是想做一个流水日记,把我这20年学过的软件开发相关的技术都回顾一下。同时,承前启后,把今后的学习经历也记录下来,对自己是一个鞭策。
根据我学习的深浅程度,可以区分为四个等级:
++浅学++ 浅学:学习过相关的概念,看过介绍资料,但是没有搞过实际案例。
++中学++ 中学:学习过,也有过小型应用案例,但是没有过大型企业级开发的项目案例。
++较深学++ 较深学:有过比较多的大型实际项目案例,应用比较熟练,但是对该技术的内在架构或者源码还不甚了解。
超深学:不仅有过实际案例,而且对该技术的内核很了解,可以说是学透了。
说来惭愧,捋了捋,基本上没有一门能达到“超深学”的程度,广而不精。这也是我的一个深层次的无奈吧,为生计奔波,哪有时间精力去深入钻研一门技术后的层峦叠嶂的内核呢,就算有,这门技术后来被淘汰了咋办,计算机技术发展太快了。
列个清单吧--------------
**编程语言**
1.PB(PowerBuild) 较深学。
说明:老古董,VC开发的数据库工具。1995-2005年左右流行,至今还有一些老程序员、老项目在用。我当年用它做过一些项目。
2.Delphi 较深学。
说明:老古董,基于Pascal语言的开发平台,1995-2010年左右一度流行,至今还有一些老程序员、老项目在用。我当年用它做过一些项目。
3.C# WinForm和WPF 较深学。
说明:老树新花。2002年左右诞生,2010年之后一度随着桌面软件的没落而失宠,但是近几年因为工业软件、Unity等的需要又有复兴的趋势。实际上,C#是一个比较庞杂的系统,开发桌面软件有WinForm体系和WPF体系,同时C# + Asp.NET可以用于开发Web,最新的又有.net core号称可以跨平台。最最新的微软近几年又推出了号称可以跨平台的Maui框架。
至今还有一批程序员坚守.net阵营,不过人数不多。我从2011年开始使用C#,用它做过不少项目。
4.Asp 中学。
说明:老古董,微软推出的最早的web开发服务器端语言,是Asp.NET的前身。
5.Asp.NET 较深学。
说明:与IIS和C#语言配合,可以做Web一整套前后端体系,“服务器端控件”是它的最大特色。当年javaBean + jQuery开发速度较慢,而它的开发速度较快。最大的缺点是不能跨平台。我用Asp.NET做的项目有的至今仍在运行。
6.VB(Visual Basic) 中学。
说明:VB6.0是我的,也是很多人的当年的入门级编程语言,以入门简单上手快著称,地位相当于今天的Python,当然它太封闭了,没有Python那海量的各种开发包。
7.VC(Visual C++) 中学。
说明:VC++6.0是当年C++语言的一代经典。很多人用它开发出了当年各种著名的应用软件。VC基于微软的MFC类库。
8.java 中学 - 较深学。
说明:java毫无疑问是当今编程界的主力军。究其原因,当然是因为其各种框架层出不穷,对多线程、高并发有较好的解决方案,从而为互联网大厂所喜。而互联网大厂是当今就业的主力军,大厂的爱好就是码农们的爱好。然后当2000年左右java刚刚在行业界暂露头角的时候,其远没有现在这样成熟,那会javaBean、EJB等等还是主流,前端也没有什么较好的解决方案。后来2005年开始逐步有了Struts、Spring、Hibernate,即所谓的“SSH”。那会很多人写简历求职,一张口就是“我会SSH”,再后来开始有了springMVC。时间过得好快,如今springClound微服务都已成主流了。
我现在的状态是,可以用springboot开发普通项目,也开发了一些项目。但是对于java深层比如虚拟机调优啥的还没怎么仔细研究。
9.PHP 中学。
说明:曾几何时,“PHP是最好的编程语言”这样的梗还能引得程序员们撕斗一番。但是这几年来,明显感觉到PHP不像前几年那么火热了。最明显的例子是,各大培训机构很少有培训PHP的了。其实从2000年以后PHP暂露头角开始,它就一直作为一种比较快速简单的web开发语言而存在,而且和MySQL结合紧密。另外PHP这些年也没有停止发展,有很多框架,比如大家熟知的ThinkPHP,Yii,以及笔者用过的iPHP,最新的流行框架是Lavarel。
10.Qt 较深学。
说明:有两年忽然对Qt感兴趣,Qt是一种基于C++语言的跨平台控件包,后来发展成为一整套开发工具。另外Qt亦可在Python下使用(PyQt)。我学习Qt是因为其可以跨平台的桌面界面控件特性。不过我发现一个问题,学习Qt的同学大部分都是搞嵌入式的,嵌入式喜欢学习Qt,究其原因,可能是因为目前嵌入式的很多操作系统都是Linux的某种发行版,从而让Qt有了用武之地。不过和java虚拟机的“一次编译,到处运行”方式不同。Qt可是货真价实的编译型语言,所以它在Windows、Linux、Mac下面都要重新编译,也就是“一套代码,到处编译”。笔者曾经在Linux桌面版(比如优麒麟、深度)下面用Qt编译程序,结果发现麻烦得很,很多东西都要自己配。Linux不如Windows方便。
11.Python 浅学 - 中学。
说明:笔者2008年左右在外企上班的时候,第一次听说了Python。从此后的十余年间,拜各种培训机构所赐,这个Python真的是鼎鼎大名、如雷贯耳。现在我们都知道Python上手快(其实上手快的语言有很多,比如VB),数学计算功能强大,各种开发包支持。但是老实说哈,Python确实功能很强大,不过这些培训机构的宣传有点过了,毕竟现在身边貌似真正全程使用Python的大型项目还不多,Python还没到可以笑傲江湖一览众山小的地步。而且Python语言的一些特点,比如弱类型、严格的缩进格式让笔者有点不适应。
**开发框架**
1.SpringBoot 中学 - 较深学
2.iPHP 中学-较深学
3.Vue 中学-较深学
4.ThinkPHP 中学
5.Extjs 浅学
说明:Ext是2005-2010年左右移动端出现之前红极一时的前端胖客户端架构,功能很全面。学Ext比较搞笑,这个是在工作中用到了。于是买了一本《Ext深入浅出第2版》,打算好好研读。但是因为工作较忙一直没来得及看。结果没过几年,由于移动端兴起,Ext没落了。书也就没必要再看了。类似这种“还没来得及看便被淘汰”的东西这些年还有不少。只能感叹计算机领域日新月异。
**数据库**
1.MS SQL Server 较深学。
说明:曾经红极一时,占据了60%数据库市场的统治级王者。35岁以上的程序员基本上没有不会用的。笔者从sql7.0,sql2000,sql2005一直到sql2016,但是自从以MySQL为代表的开源数据库逐渐走上历史舞台之后,便开始逐步没落。如今连笔者都在工作电脑上卸载了它,仅仅是在云服务器中保留,
2.Oracle 较深学。
说明:中国的企业、金融等高级领域数据库的绝对王者,至今仍然占据了大约50%的高端市场份额。笔者曾经参与过几个Oracle数据库的项目,最后一次参与的版本是Oracle11g。
3.MySQL 较深学。
说明:2015年以后,随着移动端和互联网大厂的兴起,笔者日益发现以MySQL为主流的开源数据库越来越吃香,便果断决定转向MySQL。做了几个项目。曾经把SQ Server下的存储过程转化为MySQL的存储过程,相当于两种数据库脚本语言的转换。
4.PostgreSQL/华为高斯Gauss 中学-较深学。
说明:最近几年,笔者发现,MySQL虽然仍然无人能撼动,但是PostgreSQL开始悄然崛起。正好笔者遇到一个项目,需要把SQL Server数据库转换为PostgreSQL数据库,便果断决定参与了,解决的还可以。另外笔者去年学习了一段时间的华为高斯Gauss数据库,其实Gauss就是PostgreSQL的某种发行版。
5.Sqlite 较深学。
说明:笔者近几年无意中发现的一种类似于Access的单机文件数据库,使用简单方便,而且可以跨平台。但是Sqlite不支持存储过程。同时Sqlite有个问题就是没有登录密码,笔者至今没有找到比较好的解决方案。不知道其他朋友有没有。
6.InterBase 中学。
说明:Interbase是宝兰(Borland)公司的产品,宝兰公司是啥公司呢?就是推出了上面提到的Delphi的公司,笔者甚至当时还作为代表去该公司北京总部去洽谈购买正版事宜。当然该公司现早已消失,几经转手,目前不知道卖给谁了。不过Pascal作为一种独特的语言,在计算机发展史上有着独特的地位。另外Delphi据说有个孪生兄弟叫Lazarus(拉扎鲁斯),可以在Linux下编译运行。
7.Access 中学。
说明:Windows下的单机数据库。和Office结合得比较好。
**其他杂七杂八**
1.编译原理。 浅学。
说明:笔者曾经跟着一本日本人写的书,做了一个以java语言开发的脚本语言。从中学到了词法分析、语法树、token等方面的知识。
2.剪映。 中学。
3.tableau。 浅学。 一种BI工具。
4.WeX5,BeX5。 中学。北京某公司开发的比较早期的非SaaS、可独立部署的低代码跨平台java开发工具。
唠唠叨叨,先说这么多吧,笔者的感觉是,软件编程开发这玩意,真的犹如佛经一般,恒河沙数,浩如烟海。各种门类博大精深。计算机其实并不是一个专业,而是一所大学,随便选其中一个专业,都能让你研究一辈子了。
学计算机,你自己没有一个书柜是不行的。
刚接触这行就用的iis+sqlsever做的商城,所有的sql语句都被我当时主管要求写成存储过程。后来上线又说用linux系统,当时查了很多资料都没搞定linux下用sqlserver,然后重构整个项目换成mysql,累死人了
嗯嗯,sql server基本上就是倒在了闭源和不能跨平台上。微软的东西都是基于windowsAPI,所以很难跨平台,当然.net是基于.net framework。现在他们也开窍了,推出了.net core,号称跨平台,不过这玩意有人用过么?
CRUD?呵呵。冒昧问下哈,假如我这里有一个客户,想做一套车间生产管理系统。我现在只有他的地址和电话,我现在让你从过去现场调研开始,一步一步,最后项目验收回款。不知道您全过程能否干下来?您如何捕捉客户需求?如何建模?如何说服车间工人用你的软件?你的那些所谓算法和原理在这种实践中能起什么作用?你跟车间工人讲啥叫锁啥叫异步啥叫线程?
PB真的太6了
追更:
2023-01-20
Electron 浅学
想到啥说啥,刚开始看到Electron,介绍说是一种最新的跨平台桌面软件开发架构,顿时觉得高大上不明觉厉。
直到前几天有个从1到2的业务查询系统,springboot + vue。客户要求把浏览器网页改造成pc桌面软件。于是采用了Eelctron将其打包,又加上nsis直接打包成了一个安装包。现在总算明白了,所谓Electron就是个打包工具,把“浏览器内核+基于node.js的网页前端”打包成一个桌面软件。它当然能跨平台呀,这不废话么,浏览器本身就能跨平台…
附加说明1:甲方爸爸为啥非要将好好的浏览器网页改造成桌面软件?他的理由如下—
他说,那种网站看起来就是公用的,似乎谁都能登录,这让他感觉“不安全,不舒服,不保密”,就得做一个专用的PC端桌面软件给他用,他才会感觉舒服……
当然了,作为乙方,我是不可能告诉他,他要的那个桌面exe其实就是网页的“封装”^_^
结论:做外包,甲方才是天,很多技术都是甲方稀奇古怪的需求逼出来的,阿弥陀佛。
附加说明2:
其实这种玩法我不是第一次遇到了。
我有个网银账户,以前一直用IE登录,因为登录界面用到了一个ActiveX控件,众所周知只有IE支持它。同样众所周知的是,去年6月IE被放弃了,现在你在win10打开IE,会自动跳转到Edge。那么咋办呢?
去年的一天,我向银行的客户经理问这个事,经理说,好办,我给你安装一个桌面客户端,具备以前的网页的全部功能。
我一听这么🐮?你们是重新开发了一套吗?事实证明我太肤浅了,图样图森破,装上之后我一看,好嘛,这个“桌面软件”不就是把网页包装起来了吗?其他啥都没变……
我可以把SQL server、Oracle的存储过程迁移到MySQL^_^,虽然这技能好像没啥用:),不同数据库之间,其实表结构是最好迁移的,因为基本结构类似,视图次之。最难的就是存储过程(Procedure)的迁移,因为不同数据库的变量声明、语句、游标、内置函数都不一样。举个简单例子。sqlserver里面有个sp_executeSql,可以执行动态拼接的sql,并且返回值。但是MySQL中实现类似的功能就很难。
学这么多 多少是能变现的呢
前几天一个我曾经接过项目的外包网站,联系我,说有一个Flutter的项目问我能不能做。
具体项目是什么内容呢?做一个移动端的自定义标签软件,参考一个叫DLabel的App.
所谓自定义标签,其实就是一个简单的自定义报表。在一张底板上拖拽各种显示控件,并且可以保存位置属性。
为什么找到我呢。因为我之前做过一个C#自定义标签软件,可能是看我有这方面的经验吧。
不过我没想到的是,因为Flutter相对比较小众,以前没怎么接触过,所以我犹豫了半天时间。
就这么一犹豫,单子就丢了。说是有其他人接了。
人生啊,就是充满了一个个无常。
昨天一个前两年曾经给我过一些大项目的甲方联系我,问我能不能做工厂的生产计划管理系统。
我一听,顿时眼睛一亮。您可找对人了。
从2003 - 2012年,我可是做了快十年的生产企业ERP管理系统。
对于生产计划模块,我太熟了。
工厂的生产计划/智能排产模块是比较复杂的工作流程,不过也并非毫无章法可寻。
我的这位甲方大哥,是一个国企的总包负责人,前几年帮了我很大的忙。
不过这两年由于疫情,他们也比较难。如今开放了,他们也开始跑单子,真是太好了。
大河有水小河满。
在这里要提一下做外包的好处:时间长了,可以认识很多甲方乙方,有的也许会复购。
将来这个单子下来,我有信心把它做好。
今天给老客户继续修改PID工控软件。
SingleDamping(阻尼单回路)的算法:
1.每一次运算,都先按照PIDModel(单回路)的算法进行运算,算出各项值。
2.当运算总次数大于CheckCycle(举例,比如30个,下面按照30个来说)时,开始进行阻尼单回路处理如下:
(1)设置变量Err=0,Err_1=0,Summation=0
(2)Err = 从本次运算回溯的过去30个运算的平均PV值 - 当前运算的SV值。
(3)Err_1 = 从上次运算回溯的过去30个运算的平均PV值 - 上次运算的SV值。
(4)D = Err - Err_1。
(4)如果第一次出现上次PV和本次PV经过本次SV的现象,则开始进行累计pid值的过程:
(5)累计pid值的过程如下:
如果Err和D都不为0,且不同向:
则:Summation累加当前pid计算结果Variation
(6)如果第二次出现上次PV和本次PV经过本次SV的现象,则结束进行累计pid值的过程。
结束的时候,当前pid计算结果Variation = Variation - Summation
Summation=0
最近ChatGPT很火啊,各个媒体连篇累牍地报道,很多人都在蹭热度。
不过怎么说呢,这些年IT圈流行的热点还少吗?
云计算
区块链
元宇宙
web3
................
前面的热点热度还没散去,后面的新的又来了。
上一波热点——移动应用,改变了人们的生活状态。如今的这些技术热点,哪一个能真正落地应用呢
这是我用Qt开发的一个信息采集系统,在武汉深度deepin操作系统上成功编译了。
有朋友问学这么多有啥用处。怎么说呢?
说有用就有用,说没用也没用。
比如说吧,今天遇到一个外包要约需求,一个医院体检管理系统的改造。
这不特别,特别的是,对方说开发工具是PB(PowerBuilder)9.0。
多少年前的老古董工具了,2010年以后就退出了主流市场,如今只是一些老软件的维护需求。
会使用这个工具的,基本上年龄不会低于40岁:)
你如果没学过,你都不知道有这玩意...
前天遇到了一个外包客户,他的需求是:现有一个C#桌面App软件,一个某省的高考生报名查询系统。要求将其转化为C#网页版。
我问他,有两种方式:
一是,C# + Asp.Net 原生组件,前后端不分离。
二是,C#后端API + 前端框架,前后端分离。
两种成本不同,问他要哪种?
他说:都可以。
我又问:“那您愿意出多少预算呢?”
他说:2000元。
^_^
大佬
QT最近也成了我的兴趣 但我和你不同的是:从一开始我就直接站在了前人的肩膀上。 我现在研究的是官方自己打造的最新的QT库 PySide6