编程学习的心路历程和困惑回顾

        回首入行9年的经历,从大一开始学习C语言和数据结构,老师一直是在用IDE演示程序的编写和运行,我们也就一直在跟黑乎乎的命令行窗口打交道。

        后来在一些课程的实验环节,接触到了一些别人编写好的工程代码,知道了Makefile和make,从而得知了抛开IDE在命令行手动编译c程序的办法。

        还记得C语言课程设计就是开发一个学籍管理系统,用文件存储数据,不用数据库(那个时候还不知道数据库),要求选择文字界面,或者图形界面。

        当时跟着课程实验的指导书,以为那个就是图形界面,过了很多年才知道,那个虽然显示一些数据列表,但是仍然是文字界面,因为程序输入输出都是在命令行窗口里。

        当时有同学用了gtk写界面,让人感觉的十分高大上,不明觉厉。跟gtk做出来的图形界面相比,课程实验指导书后面的操作界面实在是难看、low、拿不出手。但是没有办法,因为一开始并不知道有gtk的存在,也不知道该怎么用c语言写图形界面,更没有学长学姐可以问,也没有跟同学充分沟通交流他们怎么写图形界面,完完全全就是自己闷头照抄实验指导书的代码。等我发现有同学在用gtk写出很好看的图形界面的时候,时间已经来不及了,我已经没有时间去换成gtk,只能硬着头皮硬上。而且当时感觉gtk写出来的界面这样好看,肯定学起来很麻烦、很困难。

        后来做操作系统课程设计的时候,也是要求要有图形界面,当时有个实验课助教,告诉我们c++可以用Qt写界面,后面开始学习Qt。

        后来做数据库课程设计的时候,也是要求要有图形界面,当时有个实验课助教,告诉我们图形界面可以用c#来写。当时就觉得很厉害,心里也在感叹,这些助教、这些学长学姐实在是太厉害了,会好多种编程语言。因为当时学校里只教c语言,c++还是选修课。但是这些助教、这些学长学姐会很多,除了c/c++语言以外还会Java、Python、C#、Javascript,会写网站,会写图形界面,实在是太厉害了。但是当时由于畏惧新学习一门语言的困难,所以还是继续使用Qt完成数据库课程设计。

        现在想想自己自学能力大幅提升也就是在那个环境下被逼出来的。但是其实我非常不喜欢那种氛围,学长、学姐、老师总是喜欢叫我们自己百度,自己查。根本没有人给我们做背景介绍和常识介绍。根本没有场合交流这些东西。

        学校里有很多的技术俱乐部,据说在那些社团里面就是整天讨论这些,但是想要进入这些社团是有门槛和条件的,会有申请和考核,很不好进去的。那些社团里的人三年以后掌握了很多技术,十分有利于毕业找工作。

        在学院同一届的学生里,也有很多很厉害的人,他们会很多的技术,什么安卓开发,IOS开发,Web开发,不仅如此,他们还会很多的编程语言。

        所以在同学之间关于这些知识的学习存在着很大的差别,有的人走的很远,有的人除开学校教的内容以外什么都不会,以至于后者在问问题的时候会问很多在前者看来很蠢、很白痴的问题。在前者看来就是常识性的东西,居然有人还不知道。他们有的时候都不愿意回答,让你自己百度上网查。有的时候还会奚落你几句,可能他是无心的,但是已经足够让你知道自己在问一个多么蠢的问题,以至于激起了自己的自尊心和羞耻感,觉得自己总是在问一些很蠢的问题,问这些问题很丢人,所以后面渐渐的没有人问了,都自己查,闷着头自己做,很少与人交流。但是没有人引导,自己弄清楚这些问题十分的困难。一度让自己觉得非常的自卑,自己闷头学习所遇到的巨大困难,一次次的在劝退自己。

        现在回想起来,这种环境的氛围十分糟糕。因为大家都在攀比,在炫耀,在给那些走的比较远、懂得比较多的同学戴高帽,在吹捧那些同学,同时在打击其他同学学习的积极性和自尊心。而不是在相互学习和交流。

        中途在学习汇编语言的时候,在课本最后一章,莫名其妙的介绍了win32 API编程,老师还在课堂上演示了win32 API编程。可是当时学的昏头昏脑、云里雾里的,也不知道有什么用,用来干什么。现在想想,最讨厌这种蜻蜓点水式的东西,只给你介绍了一些微末的东西,连入门都不算。

        中途在听学Java Web的同学介绍各种Java Web的框架的时候,听说了一些tomcat、servlet、JSP、Ajax、jQuery、Javascript、css、html、Spring、Structs、Hibernate,还有什么COM、MFC、.NET、.NET Framework、win32 API、ASP.NET,实在是令人头痛,感觉课外学习压力巨大。

        学习这些课程的过程中遇到的这些问题,由于忙着赶各种作业、准备实验、写实验报告、准备考试,都没有时间去弄明白。寒暑假的时候,只顾着赶紧回家玩了,更没有规划出时间来把这些弄明白。

        好像扯远了,本文一开始是想说命令行程序、文字界面和图形界面的。

        言归正传,从一开始黑乎乎的命令行窗口,到后来的gtk、Qt、c#,win32等图形界面。最近在看c/c++的文档的时候,发现一个很大的问题。原以为,c的标准库里有很多东西,只是我们不知道罢了,结果发现很多都没有。什么网络编程、进程、线程,全都没有。但是我又记得,我在windows环境下写一个邮件客户端,当时就是用了套接字。可是c的标准库里却没有。

        在查阅了微软的文档技术文档 | Microsoft Learn以后,我惊讶的发现,套接字和网络编程真的不是c语言的标准,不仅如此,连进程线程都不是。这些全都依赖于开发环境所在的操作系统,linux和windows都分别有支持。网络协议栈,什么tcp、udp、ip、套接字,全都是操作系统内核的东西,不同的操作系统,实现不一样,接口也不一样。

        C语言和C++语言,跟Python、Java真的是太不一样了。Python、Java提供了各种各样的库,甚至对第三方开源库也十分的支持,使用简便,还跨平台。但是C语言和C++语言就不跨平台,就拿套接字、网络编程、进程、线程来说,如果你用C语言或者C++语言来写套接字、网络编程、进程、线程相关的代码,你要十分明确自己所在的开发环境和以后代码正式运行的环境是在哪个操作系统,因为在不同的操作系统下,#include需要引入的头文件和使用的函数是不一样的。这些依赖于操作系统的头文件,以及函数的具体实现是操作系统提供的c库/c++库,引入这些库,也是环境配置的一部分工作,否则编译链接会有问题的。

        就当初在windows环境下写一个邮件客户端使用了套接字这一问题,我查阅了微软的文档技术文档 | Microsoft Learn以后发现当初确实是使用了windows的库。

        在这个文档里,我也搞清楚了,当初那些名词COM、c#、.NET、.NET Framework、win32 API、MFC、ASP.NET是怎么回事。

        win32 API 是windows给c语言提供的库和接口,可以用来写界面、访问网络,以及其他各种c标准里没有的事情。

        MFC是一个C++类库和框架,也可以用来写界面,在win32 API和COM API的基础上包装了一层。

        ASP.NET是用来开发网站的。

        .NET Framework是一种技术,支持生成和运行 Windows 应用及 Web 服务。

        .NET是一个免费的、跨平台的、开源的开发平台,用于生成多种类型的应用程序。包括控制台应用、web应用、桌面应用、游戏、手机APP、windows服务。

        C#是.NET开发用的语言。

        COM不是一种语言,不是一个库,只是一个用c++语言写的编程接口。类似于JAVA中的interface,只有函数说明,没有函数实现,使用虚基类弄的。目的就是为了规范编程,作为一种编程范式。

        Linux系统为C语言提供的库和API叫做glibc.

        Visual C++是微软公司开发的一款IDE,字面意思是可视化C++开发工具,可视化其实说的是IDE,不用在命令行窗口键入命令,而是在IDE中点击按钮就可以完成编译链接。Visual C++不仅提供了可视化的编译链接,而且提供了很多的库,包括C 运行库 (crt)、标准 C++ 库、活动模板库 (ATL)、Microsoft 基础类 (MFC) 库选件、并行模式库 (PPL)、C++ AMP (C++ 加速的大量并行)、Windows 运行时 C++ 模板库 (WRL)、.NET framework 选件类库 (通过使用 C++/CLI),STL/CLR 和 C++ 支持库。所以安装Visual C++,意味着安装了一个编辑器+编译器+连接器+可视化操作界面+各种库。

        Visual Studio是微软公司开发的又一款IDE,只是功能比Visual C++更强大,而且不仅仅局限于C/C++开发。

        大一的时候没有根本没有意识到要查微软文档,甚至连微软文档在哪里都找不到,每每想起都十分的心疼当时的自己。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值