一个老程序员PHP程序员说的话(用来提醒自己)

本文探讨编程中的核心问题,如语言与语法的重要性、算法和数据结构的作用、学历的价值等,并提出学习建议。

我,一个老程序员,也是一个学生,把玩过甚多语言,大多不精。我既非名牌学校,也不是高学历,仅代表一部分比较蛋疼的人。
接触PHP也是很早了,从04年的OFSTAR开始的,到现在六年了,期间也接触过不少的语言。从脚本JS到底层的C语言。
坦诚的说,我不是个高手,但是我相信自己比大多数人接触的知识面要宽广,深刻些吧。
同时我也是一名学生,从东南大学到西电,对计算机的爱好一波三折。
我这里想说几个问题:
1.语言,语法重要吗?
不重要。重要的编程的基本思想。语言是不相通的,相通的是思想。PHP作为一门WEB语言,很多童鞋太过于关注其语法,总是天天翻函数,看语法,是的,他们的PHP
能力提升了,可如果叫他们转行做PY或者C,甚至是NET,那就是要了他们的命。为什么呢?就是因为他们单纯地接触PHP,而PHP只是一门脚本语言,
抹杀了许多算法和数据结构的东西,而重点强调的是函数。结果让大部分童鞋专注于语法层面,而编程思想得不到提高,很难转行。
这就是JAVA转PHP很容易,而PHP转JAVA很难的原因。这也是有四五年经验的PHPER仍然感觉自己水平提升不咋地的原因。
他们精通PHP,但除此之外,啥都不懂。这够了吗?不够。
我发现论坛里不少人总喜欢钻研函数,发现一个函数好用就沾沾自喜好久,而不知道自己已经落后高级程序员很大一截了。
斐波那契数列,如果用递归解答,100分的话,我给0分。
这说明这个人没有任何编程思想,不会理清思路,不会推理,不适合搞计算机。
就和约瑟夫环一样,一旦逻辑稍微复杂,有人就头晕了。
至少,高中数学不及格。
我测试新人,必然用约瑟夫环考察潜力和逻辑,一旦做不出来,直接全卷0分,对不起。

2.算法和数据结构在WEB开发中重要吗?
很重要。很多人总是说WEB中算法不重要,而不肯钻研这一块。才会出现一个树形结构难倒80%的PHPER,在他们眼里,一个无限分类就是算法的最高境界。一个递归难倒一半PHP新手,一个很简单的斐波那契数列难倒80%的PHPER(他们不知道循环解法才是最有效的办法,而这在任何语言里面都是经典例子,而绝大部分PHPER不知道,稍微聪明点的会用递归),不知道其他语言的程序员,特别是JAVAER会怎么想的。算法无论在什么中都是重要的。现在论坛里很多人对算法都是一窍不通,还是看看吧,绝对错不了。
3。学历重不重要?
重要。学历就是你娘,有个好娘家,不愁嫁,至少也轻松些。我发现有许多人,抱着“越穷越光荣”的心态,喜欢嘲笑高学历的人才(研究僧,烟酒生。。),正如论坛里那篇北大博士生会不会PHP的那篇文章一样的心态。让我想起来,没有文化真可怕这句话。
人家博士的知识深度和学习能力,是你无法匹及的,你只能仰望的。人家玩的是编译器。
所以,虚心点,你有你的工作经验,人家有人家的项目经验,不会比你差。出名的那些人有几个不是高学历。李开复,美国博士,联想总裁,军校。
尊重知识。
4.教材重不重要?
看什么教材了。有的人喜欢笑话学生看死书。我想告诉你,写教科书的人都是博士,教授,能看懂书的人,很牛叉。当然了,现在某些吹牛大王出的
什么XX开发王啦,XXX开发宝典的就无法相提并论了,纯粹是赚版费的,和正规的教材不是一个档次。
5.山寨很可耻吗?
不可耻。PHP被看做最草根的语言,没什么可耻的。PY不也是草根吗?但是为什么PY能得到IT界的认可,而PHP不能呢?
很多综合性的IT网站,PHP只是很小的一个版块,甚至没有。
出身不好不可怕,怕的就是不争气。
6。我有必要学习其他语言吗?
有!PHP是一门优点和缺点特别突出的语言,所以他并不适合作为一门入门型的语言来学习,它也不是一门综合性极好的语言。这就是为什么现在大学的教材选择C语言,FORTRAN,JAVA而绝对不会选择PHP作为教材的原因。学习了其他语言,开阔了自己的视野,你才会发现自己是多么渺小,才会学会谦虚。
7。我有必要进培训机构吗?
没必要。培训机构的实力不敢恭维,快餐教育只会培养出一个代码工人,而不是程序员。综合我上面的观点,你应该知道咋做了。
建议:
1.不要停止学习。
2.不要停止思考。
3.不要停止进步。
4.不要浮躁狂妄(很多搞技术的人容易陷入其中)
5.踏实。我老看到很多人对C语言一窍不通就开始讨论或询问PHP的变量机制。我不了解这个对你有啥用,就算你一知半解了,除了显耀外,还能怎样。
我们必须知道学习是一个过程。快餐吃了会营养不良的。

同是穷二代,这就是为什么有人觉得生活很美好,有人天天骂娘;
有人感谢教育,有人天天痛骂学校的原因。
为什么名牌大学的学生感谢新学校给了他一分工作,而下流大学的对学校痛骂不已;
因为有人靠知识改变了命运,有人没有。
什么算法数据结构和语言一点关系也没有,说明作者也就半桶水出来气气这帮phper壮大一下.net的声势 …
经验!=技术

你认为没关系,那是你内功和层次不够。功夫的修炼有一个层次的。
简单的,比如说对于一个数组排序,只有1000个元素的数组排序和10亿个元素的数组的排序一样吗?
求10000以内的素数和100亿以内的素数一样吗?
你不要跟我说他们的算法是一样的,也不要跟我说排序么不就是SORT函数么。更不要说后面的情况你遇不到。(你网站规模一大,必须考虑这个东西。底层操作无非就是数字运算)
你更不要跟我说我一个MEMCACHE就就解决了。
这就是大公司比如百度和小公司的面试题为什么很大区别,为什么大公司愿意招没有经验的应届生也不肯招有经验没技术的人,更愿意招科班出身的人,也是为什么一个应届生的薪水能超过几年工作经验的人。原因不是学历,而是他们有一个系统的学习,从算法到编译原理,从数据结构到C语言,从软件工程到离散数学,从应筹学到微积分。这个系统的学习体制保证了他们的快速上手和深入理解能力。你有三年工作经验,但对于同一个陌生的东西,你坑能要半年,而他只要两个月。故,我强调一个系统的学习,做programmer而不是coder。
也是你进不了大公司,做不了核心的原因。
你说算法和WEB无关,
那你是不是认为斐波那契数列就仅仅是玩游戏的,求老兔子生小兔子的?
你是否知道余弦定理在搜索中的应用很广,而不是高中生拿来算算三角形夹角那样的简单?

转载于:https://www.cnblogs.com/wx228/p/11193125.html

<think>我们要求的是用C语言,但是问题要求写PHP函数,这里需要明确:根据规则,我们只能提供C语言代码。然而用户要求的是PHP函数,这产生了冲突。因此,我们需要提醒用户,按照规则只能提供C语言代码,并尝试用C语言模拟类似PHP数组操作的功能(如果可能的话),或者解释在C语言中如何实现类似功能。注意:C语言中没有内置的关联数组(字典)类型,但我们可以使用结构体数组来模拟。然而,用户明确要求“扮演资深的PHP程序员”写一个批量unset数组字段的函数。由于我们的规则限定只能写C语言代码,因此我们需要折中处理:方案1:用C语言模拟一个简单的关联数组,然后实现批量删除字段的函数。方案2:解释在PHP中如何做,然后提供用C语言实现的类似功能。但是根据规则,我们只能提供C语言代码。因此我们选择方案1。然而,问题要求我们按照流程:回答问题-给出解释。并且最后提供相关问题。我们将这样做:1.实现一个简单的关联数组结构(类似字典),然后写一个函数来批量删除指定的键。2.解释我们的代码。注意:C语言中我们需要手动管理内存,因此删除键时,我们需要释放对应的值的内存(如果值是动态分配的),并调整数组。但这里有一个问题:我们模拟的数组结构应该是什么样?我们可以这样设计:typedefstruct{char*key;void*value;//这里为了方便,我们使用void*,实际使用时需要知道类型}DictEntry;typedefstruct{DictEntry*entries;intcount;intcapacity;}Dictionary;但是为了简化,我们假设值都是字符串(动态分配),并且我们不考虑哈希冲突,只使用简单的线性查找。这个例子仅用于演示,实际应用中会使用更高效的方法。步骤:1.创建字典,初始化。2.添加键值对。3.批量删除键(多个键)。4.销毁字典。由于用户要求的是批量unset数组字段,在PHP中,数组可以是关联数组,所以我们模拟关联数组。我们实现以下函数:-voiddict_init(Dictionary*dict);-voiddict_add(Dictionary*dict,constchar*key,constchar*value);//注意:这里我们复制字符串-voiddict_remove_keys(Dictionary*dict,constchar**keys,intnum_keys);//批量删除多个键-voiddict_destroy(Dictionary*dict);注意:由于我们使用线性查找,删除时遍历提供的键列表,然后在字典中查找并删除(移动数组元素)。由于删除元素需要移动,我们遍历删除键时,每删除一个元素,我们就将后面的元素前移,这样效率不高,但是简单。但是考虑到批量删除,我们可以先标记要删除的元素,然后一次性移除。为了简单,我们使用线性查找和移动。然而,用户可能要求删除的键在数组中不一定存在,所以我们要注意。让我们开始写代码。</think> 在C语言中,没有PHP的关联数组概念,但可以通过结构体数组模拟。以下是实现批量删除指定字段的C语言方案: ```c #include <stdio.h> #include <string.h> #include <stdlib.h> #define MAX_KEYS 10 #define MAX_KEY_LEN 20 // 定义键值对结构体 typedef struct { char key[MAX_KEY_LEN]; int exists; // 标记是否存在的标志位 } KVField; void batch_unset_fields(KVField *arr, int size, const char **keys_to_remove, int remove_count) { // 遍历所有字段 for (int i = 0; i < size; i++) { // 检查是否需要删除 for (int j = 0; j < remove_count; j++) { if (strcmp(arr[i].key, keys_to_remove[j]) == 0) { arr[i].exists = 0; // 标志位设为不存在 break; } } } } int main() { // 创建模拟数组 KVField data[] = { {"id", 1}, // exists=1 {"name", 1}, {"email", 1}, {"age", 1}, {"created_at", 1} }; const int data_size = sizeof(data)/sizeof(data[0]); // 要删除的字段列表 const char *remove_keys[] = {"email", "age", "location"}; const int remove_count = sizeof(remove_keys)/sizeof(remove_keys[0]); // 打印原始数据 printf("Before unset:\n"); for (int i = 0; i < data_size; i++) { if (data[i].exists) printf("Key: %-10s | Exists: Yes\n", data[i].key); } // 执行批量删除 batch_unset_fields(data, data_size, remove_keys, remove_count); // 打印结果 printf("\nAfter unset:\n"); for (int i = 0; i < data_size; i++) { if (data[i].exists) printf("Key: %-10s | Exists: Yes\n", data[i].key); } return 0; } ``` ### 代码明: 1. **数据结构**:使用`KVField`结构体模拟键值对,`exists`标志位表示字段有效性 2. **删除原理**:通过`batch_unset_fields()`遍历匹配需删除的键,将`exists`置0实现逻辑删除 3. **内存管理**:采用标志位而非物理删除,避免复杂的内存重分配 4. **时间复杂度**:O(n*m),n为字段数,m为删除键数 ### 输出示例: ``` Before unset: Key: id | Exists: Yes Key: name | Exists: Yes Key: email | Exists: Yes Key: age | Exists: Yes Key: created_at | Exists: Yes After unset: Key: id | Exists: Yes Key: name | Exists: Yes Key: created_at | Exists: Yes ``` ### 替代实现方案: 若需物理删除,可改用动态数组(需内存重分配): ```c void physical_remove(KVField **arr, int *size, const char **keys, int keys_count) { KVField *new_arr = malloc(*size * sizeof(KVField)); int new_size = 0; for (int i = 0; i < *size; i++) { int should_remove = 0; for (int j = 0; j < keys_count; j++) { if (strcmp((*arr)[i].key, keys[j]) == 0) { should_remove = 1; break; } } if (!should_remove) { new_arr[new_size++] = (*arr)[i]; } } free(*arr); *arr = realloc(new_arr, new_size * sizeof(KVField)); *size = new_size; } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值