当前位置: 首页 > news >正文

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

        回首入行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.

相关文章:

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

回首入行9年的经历,从大一开始学习C语言和数据结构,老师一直是在用IDE演示程序的编写和运行,我们也就一直在跟黑乎乎的命令行窗口打交道。 后来在一些课程的实验环节,接触到了一些别人编写好的工程代码,知道了Makefile…...

请介绍类加载过程,什么是双亲委派模型?

第23讲 | 请介绍类加载过程,什么是双亲委派模型? Java 通过引入字节码和 JVM 机制,提供了强大的跨平台能力,理解 Java 的类加载机制是深入 Java 开发的必要条件,也是个面试考察热点。 今天我要问你的问题是&#xff0…...

Navisworks编辑材质和Revit快速切换材质问题

一、如何在Navisworks2016中编辑材质 初次使用NW2016-2017时发现,原来用于创建编辑材质的小地球不见了,如图1所示,在各大技术群里求助没有回应,度娘搜索也总是摇头。 经过仔细排查可能出现的地方,终于找到了可以编辑材…...

Object对象键值的输出循序到底如何排列的?

1.日常摸鱼看八股 今天又是复习八股文的一天,发现还是彻底懂得原理才好和面试官吹牛批呀。 接着来看看我chat大宝贝的回答: 在现代浏览器中,Object 对象的键值输出循序是比较稳定的,通常是按照如下顺序输出: 所有的数…...

气泡式水位计的安装方法详解

气泡水位计的安装实际上就是气管的安装,气管的安装是否正确将直接影响到仪器测量数据的结果,气泡水位计它由活塞泵产生的压缩空气流经测量管和气泡室,进入被测的水体中,测量管中的静压力与气泡室上的水位高度成正比。那么接下来就…...

求“二维随机变量的期望E(X)与方差D(X)”例题(一)

离散型 设随机变量(X,Y)的联合分布律为 X\Y0100.10.210.30.4 (1)求E(X) 先求x的边缘分布律,表格里x0的概率为0.10.2,于是我们可得 X01P0.30.7直接求E(X)即可,得到结果 (2)求E(XY) 直接x与y相乘就行。 记得别乘多了,别的算了又…...

MySQL 搞定行转列,列转行

行转列方法总结1、使用case…when…then2、使用SUM(IF()) 生成列3、使用SUM(IF()) 生成列 WITH ROLLUP 生成汇总行4、使用SUM(IF()) 生成列 UNION 生成汇总行,并利用 IFNULL将汇总行标题显示为 Total5、使用SUM(IF()) 生成列,直接生成汇总结果,不再利用…...

正点原子裸机开发之C语言点灯程序

一. 简介 本文针对 IMX6ULL 的裸机开发的(即不带Linux操作系统的开发)。 主要分两部分的工作: 1. 配置 C语言运行环境 2. C 语言编写及运行 二. 配置C语言运行环境 配置 C 语言运行环境的工作分 三部分。如下: 1. 设置…...

cv::阈值分割OTUS原理+代码

opencv库的阈值分割分为全局分割和局部分割全局分割:普通分割ret1,th1 cv2.threshold(img,127, 255, cv2.THRESH_BINARY) #127为阈值 #cv2.THRESH_BINARY |cv2.THRESH_BINARY_INV | cv2.THRESH_TRUNC|cv2.THRESH_TOZERO|cv2.THRESH_TOZERO_INV局部分割:…...

Postgresql-12.5 visual studio-2022 windows 添加pg工程并调试

pg内核学习,记录一下 文章目录安装包编译安装VS添加Postgresql工程调试源码安装包 (1)perl下载 https://www.perl.org/get.html (2)diff下载 http://gnuwin32.sourceforge.net/packages/diffutils.htm (…...

长沙学院2023 第一次蓝桥训练题解

每道题都在洛谷上,每个题都有很详细的题解,可以先自行做,不会再看题解。 题目解析思路都写在代码中,中文题面就不单独解释题意了。 P2440 木材加工(二分答案) 链接:P2440 木材加工 解析 代码…...

云端Docker搭建ABY库以及本地CLion使用

文章目录ABY的搭建以及使用前言ABY库的下载、安装及测试CLion配置后续杂项项目改名使用其他的库最后ABY的搭建以及使用 前言 仅做记录,仅供参考,不同人有不同的使用方式命令手敲,可能有错,自己辨识勿问,我懂的也不多…...

ES6-箭头函数、解构赋值、对象简写

箭头函数特点 1、 (只有1个形参) 可以省略() 2、 {} 可以省略 只有一句代码 或 只有返回值的时候,省略return 3、arguments 不可用,arguments在没有形参的时候可以拿到调用函数拿在的实参 获取伪数组通过Array.from转为真数组。 4、 箭头函数没有this, …...

【CSS】CSS 背景设置 ② ( 背景位置 | 背景位置-方位值设置 )

文章目录一、背景位置1、语法说明2、注意事项二、背景位置-方位值设置1、效果展示2、完整代码示例一、背景位置 1、语法说明 如果 盒子的大小 大于 背景图片的大小 , 默认的 图片 位置是 左上角 ; 设置背景位置的 CSS 语法如下 : background-position : length length backgro…...

HTML 扫盲

✏️作者:银河罐头 📋系列专栏:JavaEE 🌲“种一棵树最好的时间是十年前,其次是现在” 目录前言HTML 结构快速生成代码框架HTML 常见标签注释标签标题标签: h1-h6段落标签:p换行标签:br格式化标签…...

项目中用到的责任链模式

目录 1.什么是责任链?它的原理是什么? 2.应用场景 ​3.项目中的应用 传送门:策略模式,工作中你用上了吗? 1.什么是责任链?它的原理是什么? 将请求的发送和接收解耦,让多个接收对象…...

C++复习笔记--STL的string容器和vector容器

1--string容器string 本质上是一个类,其不同于指针 char*,string 类的内部封装了 char*,用于管理字符串,是一个 char* 型的容器;1-1--string构造函数string 的构造函数原型:string(); // 创建一个空的字符串…...

第一章 软件项目管理概述

项目(Project)是为了创造一个唯一的产品或提供一个唯一的服务而进行的临时性的努力。项目的特征PMBOK(A guide to the Project management Body Of Knowledge:项目管理知识体系指南)五大过程组和十大知识领域从时间角度出发,项目管理分为五大过程组:启动…...

【Linux系统编程】06:共享内存

共享内存 OVERVIEW共享内存一、文件上锁flock二、共享内存1.关联共享内存ftok2.获取共享内存shmget3.绑定共享内存shmat4.绑定分离shmdt5.控制共享内存shmctl三、亲缘进程间通信1.共享内存写入与读取2.共享内存解绑与删除3.共享内存综合四、非亲缘进程间通信1.通过sleep同步2.通…...

【专项】112. 路径总和

112. 路径总和 给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。如果存在,返回 true ;否则,返回 false 。 叶子节点 …...

Frozen-Flask :将 Flask 应用“冻结”为静态文件

Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是:将一个 Flask Web 应用生成成纯静态 HTML 文件,从而可以部署到静态网站托管服务上,如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...

使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装

以下是基于 vant-ui&#xff08;适配 Vue2 版本 &#xff09;实现截图中照片上传预览、删除功能&#xff0c;并封装成可复用组件的完整代码&#xff0c;包含样式和逻辑实现&#xff0c;可直接在 Vue2 项目中使用&#xff1a; 1. 封装的图片上传组件 ImageUploader.vue <te…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明

AI 领域的快速发展正在催生一个新时代&#xff0c;智能代理&#xff08;agents&#xff09;不再是孤立的个体&#xff0c;而是能够像一个数字团队一样协作。然而&#xff0c;当前 AI 生态系统的碎片化阻碍了这一愿景的实现&#xff0c;导致了“AI 巴别塔问题”——不同代理之间…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战

“&#x1f916;手搓TuyaAI语音指令 &#x1f60d;秒变表情包大师&#xff0c;让萌系Otto机器人&#x1f525;玩出智能新花样&#xff01;开整&#xff01;” &#x1f916; Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制&#xff08;TuyaAI…...

大数据学习(132)-HIve数据分析

​​​​&#x1f34b;&#x1f34b;大数据学习&#x1f34b;&#x1f34b; &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 用力所能及&#xff0c;改变世界。 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4…...

安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖

在Vuzix M400 AR智能眼镜的助力下&#xff0c;卢森堡罗伯特舒曼医院&#xff08;the Robert Schuman Hospitals, HRS&#xff09;凭借在无菌制剂生产流程中引入增强现实技术&#xff08;AR&#xff09;创新项目&#xff0c;荣获了2024年6月7日由卢森堡医院药剂师协会&#xff0…...

Python Ovito统计金刚石结构数量

大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

STM32---外部32.768K晶振(LSE)无法起振问题

晶振是否起振主要就检查两个1、晶振与MCU是否兼容&#xff1b;2、晶振的负载电容是否匹配 目录 一、判断晶振与MCU是否兼容 二、判断负载电容是否匹配 1. 晶振负载电容&#xff08;CL&#xff09;与匹配电容&#xff08;CL1、CL2&#xff09;的关系 2. 如何选择 CL1 和 CL…...

手机平板能效生态设计指令EU 2023/1670标准解读

手机平板能效生态设计指令EU 2023/1670标准解读 以下是针对欧盟《手机和平板电脑生态设计法规》(EU) 2023/1670 的核心解读&#xff0c;综合法规核心要求、最新修正及企业合规要点&#xff1a; 一、法规背景与目标 生效与强制时间 发布于2023年8月31日&#xff08;OJ公报&…...