编程为了什么?到底什么才是真正的程序员

开发无人编程即编程自动化系统,让程序员失业 欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦: Markdown和扩展Markdown简洁的语法 代码块高亮 图片链接和图片上传 LaTex数学公式 UML序列图和流程图 离线写博客 导入导出Markdown文件 丰富的快捷键 快捷键 加粗 Ctrl + B 斜体 Ctrl + I 引用 Ctrl 阅读详情

第一章

我非常幸运出生在一个电脑和电子游戏还没有普遍的时代。所以我可以和我的小伙伴们一起玩耍,同时发明属于我们的游戏。

我们十分会玩:用树枝做成'🏹️'。我们可以用树枝做出任何东西,除'回旋镖'。因为你把树枝扔出去,你需要自己捡回来。(作者这个故事是活跃气氛吗?😓)

当我们长大了,上面说的游戏变得很幼稚。你不能把一个松塔当成一个手榴弹;假装拥有神奇的魔法;当其他孩子觉得作为一个成年人很酷。你最终会迫于压力而长大。不过总的来说这也是一个非常幸运的童年。

偶然的一次机会我接触了电子游戏和电脑。你可能想沉浸在这个虚拟的世界,这会毁了你。

大多数电子游戏:你不能创造,只能反应,浪费你的时间。我在十多岁的时候,参加过'即兴表演'。在哪里我可以发挥我的创造性。

我大学的专业是'多媒体',但是我最终却从事'编程'工作。我觉得编程is amazing!我可以发挥我的创造性,同时又可以挣钱!之后我做了我的第一个游戏。

"这不是一个真正的电子游戏。"别人跟我说:"它只是一个html的表单,而且代码需要简化。"

这席话使我有一些沮丧,它花费了很多心思和时间。但是,我意识到如果我想做出被人们认可的东西的话,我还需要学习更多知识。

我需要学习真正的编程。从GUI工具里的JS,转到更好的语言:像PHP。所以我先学习了Js,后来又去学习PHP,但是一切并不是很顺利,其他人给我的建议去试试python。最后,我学习的是python(🎊我也是这样走上python之路的🍻)。

但是python中高深一些的东西:'lambdas'和'面向对象编程',让我云里雾里的。后来别人建议我去读一下《计算机程序的构造和解释》,因为它是编程的基础入门圣经。

就这样,我知道了Scheme,后来我又去学习C语言。因为大多数的程序员都会C,同时我旁听了我们学校的计算机课程,跟着他们一起学习。因为,真正的程序员都知道数据结构和数学,但是这些我只略懂皮毛。我开始读技术文章和书,因为程序员的知识更新太快。

经过一段时间,我掌握了Erlang,从而开始了我的职业生涯。(这篇文章的作者写了一本:Erlang入门书)。十分奇怪的是:我这个没有用Erlang做过任何生产级别的开发的人,却得到了一份教Erlang的工作。

第二章

所以我忙于到世界各地演讲,教别人(夸夸其谈)。但是,大家似乎都相信我是一个真正的程序员。因为,我讲的这些事情大多都和编程无关。

一天,我结束了一个会议回家,飞机晚点。我愤怒的敲击着键盘,一个柔弱的声音打断了我:

"你好,能请你给我设计一个系统吗?"

我:"什么?"

"给我设计一个系统!"

我对这个请求很惊讶。我环视四周,发现一个渴望成为开发者的孩子。他叫'printf'(主角闪亮登场)。我觉得这个名字很傻。他的样子如下图:

"我还不是很了解计算机,但是你好像是计算机方面的专家。我希望写一个blog程序,人们可以使用和访问它。求求你帮我设计一个系统!"

这是个令人惊讶的请求,并且我已经二十多个小时没睡了。我不是完全理解他所说的。我告诉他,做一个系统十分困难。我不知道他想要做什么:需要支持多少访问者;在哪里部署;所以我无法根据他提供的少量信息,设计一个合适的系统。

"没有关系,给我设计一个系统吧。"

所以我做了下面这幅结构图:

他看了之后说:"不,这个系统还不够好。请给我再设计一个别的。"

所以我又做了下面这个:

然后我给他讲解这个系统的工作原理。

我的新朋友 (printf)十分礼貌的说:"这不是我想要的,它又太复杂而且好多东西都是我不需要的。"

我感到十分不爽,我设计的这个系统考虑到了:冗余、监控、备份、缓存、负载、支付、故障转移、部署简单等等。我设计的这个系统都已经可以获得一份可观的咨询费用了!我已经失去耐心了,所以我就画了这个:

我又告诉他:"这是你设计的系统,你要的系统在这个黑盒子里。"我希望这个滑稽的答案,可以打发他。但是他的回复让我十分惊讶:

"这正是我想要的!"

这就是我和小printf相识的过程。

第三章

过了一段时间,我知道了这个小鬼的编程水平。在他的代码仓库只有些小程序、网站的小demo、琐碎的程序片段。都是些不值得一提的东西。

之后他开始着手做一个需要很多模块的大型程序。这个程序需要socket、磁盘读写、用到真正的数据库。当它第一次跑起来的时候,小printf十分兴奋。但是,这个程序还不够好。

这个程序需要重构、更好的测试、文档、分析。它只运行了一段时间就崩溃了。然后一次,又一次的崩溃!

程序的设置是错误的,日志不工作、磁盘速度不稳定、网络卡顿、有bug、编码混乱、数据库需要清理、证书过期、没有异常处理导致问题找不到根源。

真的像面条一样一团糟。

小printf跟我说:"通过这件事,我发现自己简直是一无所知!这个程序本来是根据我的需要写的。我原来的想法太天真了,后来我修复bug的时间和这个程序给我带来的便利根本不成正比!最后,变得跟我原来想的一点都不一样。虽然这样,我仍然认为这件事情让我收获了很多。"

一天早上,他决定离开我这里。"再见。"小printf跟我做了最后的道别。他想要出去看看世界,看看其他人写的程序。

小printf写的应用,最后因为不断增加的日志,导致硬盘没有空间,彻底的崩溃了。

第四章

小printf走进了一个办公楼,想寻找有经验的程序员取经,获得一些建议和帮助。

他遇到一个骄傲的高级程序员,而且自我感觉良好。

傲慢的高级程序员说:"哎,过来新手!欢迎来到我所擅长领域,在这个领域我是专家!"

"专家?"小printf问到:"专家的意思是:可以编写任何程序吗?"

"是的!"傲慢的高级程序员回答道,接着他又说:"准确的说,应该是大多数程序。因为我只编写有价值的程序,我不会浪费我的时间在没有意义的小程序上。很多程序我都没有写过,但是他们都难不倒我!"

"额,所以你可以帮我完善我的程序?"小print问到,之后他开始阐述他的网站系统,但是傲慢的高级程序员打断了他:

"对不起,我觉得你的网站系统没有一点价值。"

小printf:"为什么?"

"经验,我擅长编写我开发的东西,我也只做我擅长的领域的开发。我需要确保我在我的领域的永远有价值。这叫做工作保障,也叫做适者生存。但这就是我的风格。我只专注于我的领域!"

小printf:"那你为什么不帮我呢?"

"花费我的时间去帮助你,意味着我需要花费精力去帮助别人,而不是提高自己----这对我来说不是一个好的主意。我的建议是:自己多努力,自己弄懂。还可以塑造你自己的心性"

小printf:"你说的方法,好像不是很高效。。。"

"你可以到学校去学,或者自学。事实上这种方法可以淘汰那些懒惰,只喜欢简单的事情的人。真正渴望知识的人才能成功!"

小printf:"你认为合作和同事不能帮助你吗?"

"不,我并不是这个意思。我最好的工作状态是:独立空间,没有让我分心的事。每次我和同事合作的时候,都是一次不好的经历。以往的经验:最好的办法是:把他们的代码拿过来重写。然后就可以了!"

小printf对这个不喜欢帮助别人的专家感到十分惊讶,不仅如此,他还因为别人的技术不行而恼火。这个专家眼界是狭隘的,他只关心自己擅长的领域。活在自己的世界里。

小printf:"我明白了,我想我很庆幸你没有帮助我。"

"你什么意思?"傲慢的专家问到,貌似他的权威受到了威胁:"你不认可我,你是在质疑我吗?"

小printf:"并不是这样,就像你觉得我是一个累赘,令人恼怒的一样。我是来寻找帮助的,而不是来找骂的。"

说完之后,小printf飞快的跑出了傲慢专家的办公室。当小printf离开后,这个专家又重新找回了他所擅长领域的权威,同时自我感觉良好。

第五章

然后,小printf又走进了另外一个办公室。里面有一个男士,他的座位周围都是精装厚厚的书籍(例如代码大全这种书)。

小printf:"先生,你有好多书啊!"

"是的,我想这些都是程序员必看的书籍,如果你没看过这些,你很难成为'大牛'(专业人士)。"

小printf:"我想我现在还是很菜,请问这些书里面你最喜欢哪本?"

"哦,是这样的这些书大多数我还没有读过。"

小printf:"那你现在是个'大牛'吗?"

"不,我还不是。"这个程序员很骄傲的说:"我其实是一个很垃圾的程序员。"

小printf:"这太丢人了,我正在努力变强。"

"你听过'达克效应'吗?"

小printf:"那是什么?"

"简单的说就是:能力强的人总是低估自己,能力弱的人总是高估自己。"

小printf:"也就是说,如果我觉得自己在变强,其实我并没有变强。"

"是的,你说的非常正确。你很可能在原地踏步。另一方面,我宣扬我是一个很糟糕的程序员,但根据'达克效应'。我是低估了我自己,所以我是一个好的程序员,你怎么看?"

小printf:"我。。。额"

"这就是为什么程序员都喜欢自嘲(称自己是码农也算吧?)。当你认为你足够好了,你就放松了,也就没有前进的动力。"(这句话我还是很赞同的👍)

小printf:"你的意思是:一旦自我感觉良好,也就是正在走向失败,应该时刻觉得自己还不够好。"

"是的,但是用着这种方式应对所有的事很危险,如果你还没有拿到offer。这种方式会让你显得聪明,但是没有任何实际用途,别人不会因为你显的聪明就雇佣你。"

小printf:"你的意思是?"

"比方说:我在网上看到一个我不喜欢的项目。我留言说项目一无是处,但是不明确的指出哪里不好。最后你还可以说这个项目的作者是笨蛋,也没有人管你。"

小printf:"但是这样做有什么好处呢?"

"我想让他们知道他们走上歧途了,却又不明确的指出来。这表现的我比他们厉害。然而他们毫无头绪,像雾里看花。没有人能明白我的意思。哇咔咔"

小printf:"当别人请教你的问题,你不会的时候,你会怎么办?"

"这种情况下你就说到处都是问题,还有很多的不完善的事情要做,总之就是转移话题。然他们感觉绝望,最后还是要他们自己解决。"

小printf:"所以这就是你的立场?这是你的一贯作风?你会的问题装作对此无能为力,使得真正无法解决这个问题的人抓狂;当你遇到不会的问题时,你装作很了解,使得别人根据你的建议改善其它的地方,而与真理相行渐远,浪费时间"

"很多情况下,才能不是最重要的。但口碑很重要。人们雇佣朋友,不被喜欢的人和无关紧要的人会被第一个被炒鱿鱼(😤MLGB)。要不就改变环境,改不了就要适应,适应不了就被淘汰。这就是'社会'。企业中就是这样,学术界没准也是。做这行,你认识谁,学会推销自己,建立自己的声望。这样你才能在企业里站住脚。"

小printf:"如果在企业中工作是这么恶心,要给别人'使绊'。那么我真不想在这种环境下工作!(黑暗的办公室政治,还好我还没有遇到🙊)"

第六章

到了吃午饭的时间,小printf打断了一个貌似忘记吃午饭的人。他桌子上的三明治已经凉了,但是他还是坐在桌子前面盯着他的屏幕。

他好像十分的忙,但是没人知道他在做什么。

小printf:"如果主数据库挂掉了,从数据库也会挂掉吗?"(创建主从数据库是为了减少DOWN机时间,让数据库可以一直处于工作状态中)

"你运行的所有东西,或早或晚都会挂掉。"

小printf:"你以往的经历告诉你这一切都会失败?"

"是的,不仅如此。所有的大系统,都会在特定的时间出现问题。"(就像千年虫问题?🤔)

小printf:"那么,做一个可靠的系统,都需要做什么?"

那个人忙于他自己的事情,没有理会小printf。

小printf又问了一次:"做一个可靠的系统,都需要做什么?"

那个人正在尝试解决产品中的一个问题,但是小printf还一直问个不停,同时他还没有吃午饭。

所以他不耐烦甚至粗鲁的吼道:"这根本不可能,编程就是shit💩。"

小printf倒吸了一口气,半天说不出一句话。

小printf💢愤怒的回击道:"我不相信你说的。程序是脆弱的没错,但是程序员可以改善这一点,同时做出更好和有用的东西"

那个人没有任何回答,他在翻阅文档,尝试重新启动一个新的集群,但是情况却越来越糟糕。

小printf:"并且你应该相信有好的可靠的程。。"

"不可能"那个人打断了小printf,接着说道:"我不相信有可靠或者好的的程序!根本不可能!这是我的第一个感觉,因为我正在处理一个垃圾的系统。你没看见我想方设法地让这个东西跑起来吗?事实如此!"

小printf很震惊的看着他说道:"事实如此?说的好像自己是个专家!是你自己把一切都搞的很糟糕。这世界上有上百万的和久经考验的程序,它们也有bug,也崩溃。但是人们还是需要它们,使用它们。据我所知很多程序是没有问题的。出现问题的原因大多是因为电脑的环境配置问题,或者一个错误的操作造成的。你不认为这才是问题的所在吗?"

那个人听完哑口无言。

第七章

小printf来到了第四个地方,遇到了一个人,他的电脑几乎被便签盖满了,没有人知道他在干什么。

"motor-mvc, quadrangular JS, GoQuery, cometeor, some japanese soundy thing, ..."

小printf打断了他的自言自语说道:"你好,你在干什么?"

"alchemist, bongodb, mochascript, walktime.js, portasql, ...",哪个男士继续自言自语

小printf提高了音量又问了一次:"你在干什么?"

"哦,我正在尝试新的框架,工具和语言。"

小printf:"哇,你接触的东西好新鲜啊!大多数人还都没有听说过这些。"

"是的,这个行业更新很快!"他看了一眼他的手机接着又说到:"看,cardboard.io框架又推出了3.5版本,它宣布不兼容3.4了。于此同时社区中已经有4个衍生版本了。我必须从他们之中挑一个。"

小printf:"你这么做为了什么?"

"我是最早的尝鲜者,如果你不保持更新技能树,还是用老掉牙的:COBOL或者MUMPS(两门老掉牙的编程语言🤖)。你还想抓住成功的契机,抢占先机,乘势而起?"

小printf:"你成功的预测过以后的热门技术吗?"

"是的!我发现Rails的时候它还很小,我学会Node.js的时候它还没有流行。我是redis,mongodb和riak的内测用户。我是第一批试用vagrant的用户,然后我转去使用docker,但是现在我全身心的关注unikernels。。"

小printf:"太酷了!你是第一批试用这些的技术的人,你从中得到了什么回报?"

"额,并没有。当Rails壮大的时候,我就去关注另外的新鲜东西了。同样的,其他的几门技术我也是这样的(他不独宠一个,而是雨露均沾🙈)。我现在把希望寄托在unikernels上。"

小printf沉思了一会说到:"你用这些框架和工具都解决了什么问题?"

"我每次都确保不使用不成熟的东西,因为不能用公司做赌注。这一点十分重要,因为如果你使用最新的技术,你就可能招不到人,而不关注新的技术,有可能脱离时代的步伐。所以我们鼓励学习新的技术。"

小printf:"这非常有趣。"

"在这个飞速发展的世界中,如果你想参加这场游戏,你需要有先进的技术。否则你就会被时代淘汰,没有人想被时代淘汰。"

小printf:"不,你误解我的意思了,我的意思是:好的工具是为了解决问题而被制造出来的。但是你却盲目追求新的技术,而不是为了什么实际的目的。"

听完这些话,那个人呆住了,小printf跳跃着离开了这个房间。

第八章

小printf来到了下一个办公室,这里又一个疲惫的女员工。桌子上杂乱无章,整个人无精打采,疯狂的打字。

小printf:"你好。"

这个女士没有停下了她的手头工作,继续疯狂的打字。

小printf又打了一遍招呼:"你好?"

女士这次停下了,拿起一瓶咖啡猛灌了一口。

"我有一份十分糟糕的工作。"她说:"我是devops(开发,运维,测试于一体的职位)。刚开始的时候还好,原来我大多数时间进行开发,然后抽出一些时间修复bug。但是,情况变得越来越糟糕,bug开始接连不断。为了摆脱这种情况,同时在规定时间内完成。我不得不使用一些'奇技淫巧'。"

小printf:"你为什么不雇人来帮你?"

"我很擅长做这些事情。我已经习惯这一切都在我的的掌控之下。还有因为他们已经习惯我可以hold一切,如果我提出我自己无法继续掌控全局的以后,他们很容易认为我在偷懒。"

小printf:"这真是叫人悲伤的故事。"

"事实就是这样子。因为你是最熟悉这些问题(bug🔥)的人,你只能变的越来越累,直到你的boss招了一个人顶替你原来的工作,这是唯一出路。但如果你担心其他人修改你写的东西时候遇到问题,你只能帮助别人改一个又一个的bug,当然这些都是你讨厌的事情。直到你对这一切感到麻木。"

小printf:"你真不幸。"

这位女士又被叫去工作了。

小printf自言自语道:"这个女人会被我原来遇到的那些人嘲笑的:那个高级专家(只专注于自己擅长的领域),摇滚开发者(过分追求新技术的人),故做高深的程序员(那个周围都是大头书的装X程序员)。尽管他是这些人里面唯一乐于助人的。或许是因为,她认为一切事情还是亲力亲为的好。"

第九章

小printf发现在这栋大楼里发现了一个有着巨大落地窗并且宽敞的办公室。这里坐着一个德国老头,他面前堆了一堆的文件。

"啊!来了一个开发者。"德国老头惊呼道同时招呼小printf说:"快进来!"

小printf环视四周的窗户,发现上面写满了东西。上面画了各种圆圈,箭头,圆柱和云彩(就是图片中玻璃上的图形)。真是搞不懂这个老头画这些东西有什么用。

小printf:"窗户上的都是些什么?"

"哦,这些?这是我们的线上系统!"那个老头随口说到:"我是一个软件架构师。"

小printf:"什么是软件架构师?"

"总的来说,就是知道如何构建大型系统并且让系统中的每个部分都非常稳定的人。架构师还会数据库,编程语言,框架,编写程序,协议,封装和降低耦合等知识。"

小printf:"听起来都叫人兴奋!终于有人能回答我的所有问题了!"小printf瞥了一眼玻璃上的结构图说到:"你们的系统真大,他跑的快吗?"

"我没法告诉你。"架构师说;"应该会很快吧。"

小printf:"那它的代码怎么样呢?"

"我没法告诉你。"

小printf:"用户喜欢这个系统吗?"

"这个我恐怕也没法告诉你。"

小printf:"但是你是软件架构师啊!"

"我的确是架构师,但是我不是开发者。架构师不做,例如:功能模块,类,整合lib等。这种工作的。架构师最重要的不是写代码。他是指引程序员和开发者的人。如果遇到棘手的,无法解决的问题,架构师才会接手。"

小printf:"这是为什么呢?"

"因为我们经验十足。我们了解系统并且能解决它的一切问题。开发者可以根据我们的经验和指导,开发出好的系统。"

小printf:"但是你不写,不看代码怎么知道这将是个好的系统?"

"我们相信开发者。"

小printf:"所以,所你们相信开发者们可以正确的实现你们的想法,但是开发者们没有机会提出他们自己的想法?"

这个软件架构师明显的愣了一下:"我想。。。"他最终承认了:"你刚才提出的这个问题,其实工作中很多的提议是没有被证实,或者实验的。。。"他停顿,并沉思了一下说道:"有些时候软件架构师看起来既不是软件工程师,也不是架构师(是老师?)。"

小printf离开了这个房间,结束了他的旅行。走出了这栋楼

第十章

pic18

小printf走到外边,发现了一个为慈善机构募集钱的男士。

"你好"那个男士说道:"你觉得帮助一些需要帮助的人的感觉怎么样?"

小printf:"那样可能会让我感觉更好,我在那栋建筑(遇到了各种各样的程序员的大楼)呆了一整天,寻求帮助。但是现在,我感觉比以前更加迷惑了。"

"嗯,我帮你分析下:那些人都是开发者,他们并没有真正帮到你是吗?他们喜欢说"程序员改变世界",事实也是这样的。"

小printf:"那为什么我却毫无收获呢?"

"是这样的,他们最擅长做的事情是帮助把人们的工作变成程序,使人们变的轻松。软件正在吞噬整个世界,使世界焕然一新。但是事实上还这还是个旧的世界。因为以这种方式的改变,并不意味着事情变好。我们还是有些根深蒂固的问题(例如:思想的问题,或是缺乏创造性。)。"

小printf焦急的说:"怎么做才能让我感觉更好?"

那个难事深思了一会,最后提出让小printf帮助他,为需要帮助的人募捐。因为这个男士认为这种方式可以让他感觉更好。用一下午的时间,小printf把他的问题和他的经历都告诉了这个男士。

这个男士沉思了很长时间说道:"在个游戏中,他们从解决复杂的问题而得到快乐和他们看重的名声和身份,这种快乐是片刻的。因为最终,如果你解决的问题没有实际价值(为了解决问题而解决问题),忽略了'以人为本'。那么你永远不会得到真正的满足!"(说的真好!)

他接着又说:"随着你的成长,可能找到一家比之前更好的单位。可能是钱多,或者是因为这个工作更趣,这都很正常。只要你知道你自己想要的是什么!"

他最后补充道:"最后,当你解决了人们真正面临的问题的时候,你会觉得真正的满足!有的时候根本不需要计算机。"

"你花费了大量的时间在你的系统上。最重要的是:你忘记当初为什么创建这个系统,反而花费时间在优化系统上面,那么它就变成了一场炫耀的游戏。这才是最可悲的。"

"开发者经常忘记最开始的初衷(真正有意义的事情)。如果你失去做这件事意义,而是为了解决系统的问题,才花时间在这上面。这就是问题的所在(如果你只是为了做好的系统,而不是解决实际问题,那你就应该自我反思了)"

小printf不断重复这句话,想要印在脑子里:"只有在解决人们真正面对的问题的时候,才能获得真正的满足!"

第十一章

小printf坐在我的前面,和他聊天让我开始认真思考:我为什么走上编程的道路。小printf之前遇到的每个人,仿佛我将来的某一天会成为他们中的一员(这真是个悲伤的情景)。我被这样的人(小printf之前遇到的那些程序员)鼓励成为像他们一样的程序员。

我也被拖进,小printf不喜欢的那个,成为'真正程序员'的游戏中。小printf曾说过:相比于'真正的程序员',我更想成为能够为人们解决真正需要解决的问题的程序员(解决真正问题的程序员,而不是解决编程问题的程序员)。

今天我呆坐在这里,回顾我的整个编程生涯,我想弄清:成为解决真正问题的程序员,还是一切都这是完成工作。这两者是完全不同的。

不管怎么样,小printf认为他不需要成为一个真正的程序员。我现在,也是这样认为的!

我的感受

翻译完这篇文章,我觉得这篇文章写的非常好,他让我意识到:编程为了什么?到底什么才是真正的程序员。

自我反思了下。我一直在忙于追求技术栈的数量,一直是为了追求技术(或者说工作)而学习。

这就好像,我毫无目的收集树枝,猛然的一个点。我低头看手边一捆捆的树枝,却忘记了我为什么要去捡树枝。我学习python中的框架就是这种感觉,为了工作,我学习flask,bottle,tornado框架。但是,一切都是为了工作。导致我想从零写一个web app都毫无头绪,不知道如何下手。

对于以后的编程之路:我以后应该以目的为驱动力,不盲目的追求技术。经常问自己,我这么做有什么意义。

结尾:

另外我也相信乔布斯说的,只有那些疯狂到认为自己可以改变世界的人才能真正地改变世界。面对压力,我可以挑灯夜战、不眠不休;面对困难,我愿意迎难而上、永不退缩。

其实我想说的是,我只是一个程序员,这就是我现在纯粹人生的全部。

 

别再自己写组件了!用uni-app的midButton属性5分钟搞定中间凸起TabBar(H5/小程序通用) 本文详细介绍了uni-app官方提供的midButton属性,帮助开发者5分钟内实现中间凸起的TabBar效果,无需编写繁琐的自定义组件代码。该方案兼容H5和微信小程序平台,配置简单且维护成本低,大幅提升开发效率和性能表现。 阅读详情

相关推荐

setoolkit克隆网站获取用户信息

一、环境 kali、DVWA 二、步骤 首先打开kali,输入setoolkit 依次选择选项1-选项2-选项3-选项2 输入钓鱼网站的网址(默认为本地网址) 输入要克隆的网址URL 这里我的网址如图,将网址复制 然后模拟攻击场景,攻击者向受害者发送了一条钓鱼链接,此链接与DVWA的登陆页面完全一样,受害者点击之后并进行登陆信息 点击login之后,用户信息就被setool...

BeatRex的博客 2997

AI自动化编程来袭,程序员真的会失业吗?

AI 自动化编程的应用领域正在不断拓展,涵盖了 Web 开发、游戏开发、数据分析等多个领域。 在 Web 开发中,一些工具可以根据设计稿自动生成前端代码,大大缩短了开发周期。像阿里的语雀就推出了类似的功能,设计师将设计稿上传后,通过 AI 分析可以生成相应的 HTML、CSS 和 JavaScript 代码,前端开发者只需在此基础上进行微调,即可完成页面开发。

宝码香车的博客 2401

快速了解Spyder

一 面板介绍菜单栏:放置所有功能工具栏:放置快捷菜单,可以通过菜单栏中的View的Toolbars的复选框来勾选工作区:写代码的地方属性页的标题栏:可以显示当前代码的名字和位置查看栏:查看文件、调试时的对象及变量输出栏:查看程序的输出信息,也可以作为shell终端来输入Python语句状态栏:用来显示当前文件权限、编码,光标指向位置和系统内存二 注释功能注释功能为编写代码很常用功能,下面介绍Spy...

实践求真知 1万+

IT在计算机语言是什么意思,什么是编程语言?编程语言都有哪些?以及主要用途...

语言有很多种,包括汉语、英语、法语、韩语等,虽然他们的词汇和格式都不一样,但是可以达到同样的目的,我们可以选择任意一种语言去控制他人。同样,我们也可以通过”语言“来控制计算机,让计算机为我们做事情,这样的语言就叫做编程语言(Programming Language)。编程语言也有固定的格式和词汇,我们必须经过学习才会使用,才能控制计算机。编程语言有很多种,常用的有C语言、C++、Java、C#、P...

weixin_39528843的博客 1692

使用protege推理小例子---关系链

使用protege推理小例子---关系链关系链推理 SubPropertityChain在Protege中使用关系链推理1、创建Person类2、创建对象关系3、添加实例4、进行推理5、推理结果 关系链推理 SubPropertityChain 关系链简单的说就是将多个关系表达式串联起来,如下图 1-1 图1-1 小明的父亲是大明,大明的父亲是老明。这就是一个由两组关系连接的关系链,根据关系链可以推理出,小明和老明之间的关系是爷孙关系。 在Protege中使用关系链推理 1、创建Person类 在Entit

weixin_45237780的博客 4459

图机器学习(9)——图正则化算法

网络信息能够有效约束模型行为,确保相邻节点的输出保持平滑过渡——这种特性在半监督场景中尤其重要,可实现未标注节点的信息传播。更进一步,这种机制也可用于正则化学习过程,从而提升模型在未见样本上的泛化能力。在本节中,我们探讨了在学习阶段应用正则化技术的方法,用于显著提升模型的鲁棒性,使其具备更优异的泛化能力。

盼小辉丶的博客 8955

IT在计算机语言是什么意思,IT编程是一项什么技能

原标题:IT编程是一项什么技能IT编程只是一项基础的技能,无论男女,不分专业,花时间就能学会! 程序员,一直被认为是三高群体——高学历,高智商,高薪资。同时,也是高龄危机行业:加班,高压,淘汰。程序员,35岁,一直是个坎。然而,随着移动互联网的发展,网络得以迅速普及,如今,程序编程,已经不是多么神秘的职业了。绝大多数人,花点时间精力,就可以在较短的时间内掌握一门语言。以前编程难,程序员很高冷,只是...

weixin_34442022的博客 998

跨越边界:用MessagePipe实现无缝的进程间通信

MessagePipe是一个用于.NET平台的消息传递库,它专注于简化异步消息处理和进程间通信。通过提供一系列易于使用的API,开发者可以快速搭建起稳定可靠的通信管道,支持多种传输协议(如TCP、Unix域套接字等),并内置了序列化/反序列化功能,使得跨语言和跨平台的数据交换变得轻而易举。为了方便序列化和反序列化操作,我们需要为每种消息定义对应的类或结构体,并标记属性。这样可以确保消息在发送方和接收方之间正确无误地传递。[Key0set;[Key1set;

墨夶的博客 816

编写程序的目的?为什么要学习编程

在我看来我们写程序的目的就是去解决一些我们日常生活中的问题,由于我们大脑处理信息能力的速度有时会比电脑慢,所以我们写一段代码来教计算机去怎么处理这些信息,最后去输出我们想要的结果。而中间具体处理的过程交给计算机去处理,比如我们在进行复杂计算时,我们可以编写一个用来计算的程序,我们要做的只是去输入我们想要计算的数字,计算机便会给出我们想要的结果,而中间具体实现的过程我们不必去关心。(对普通人来说就是这

DW的博客 1万+

开源免费!ReaLTaiizor如何用MIT许可证打造专业级WinForm UI?

摘要: ReaLTaiizor是一款开源UI控件库,为WinForm应用提供现代化界面解决方案。支持100+组件、多主题切换(浅色/深色/自定义)和.NET 4.8-8.0全版本兼容,MIT许可证允许免费商用。通过NuGet快速安装,3步改造传统界面:1)注入主题(如this.Theme = new Dark()),2)替换原生控件为高颜值组件(如ModernGrid替代DataGridView),3)集成高级功能(分页/动画提示)。典型场景包括登录界面美化(进度动画+通知控件)和数据表格Material风

墨夶的博客 1521

绿米Aqara S1【妙控开关 S1E】版本降级或升级自定义固件的方法

绿米Aqara S1【妙控开关 S1E】版本降级或升级自定义固件的方法

LeeKwen的专栏 2171

学习编程是为了什么?

昨天陪同学去面试,一家专门做ERP的公司(“一家专门做特卖会的网站”。。碎碎念)   聊了一个小时后面试结束。  我问他聊什么聊了这么久,同学说:主要是介绍公司的开发理念。  “什么理念?”  “CTO跟我讲公司需要的不是一个码农。而是一个会思考的编程者。不是让你一进公司就开始敲成千上万行的代码。而是几十几百行代码就可以完成的东西,更多的是思考和建设,而不是堆积代码。“”学习编程语言目的不

qq_28385797的博客 662

嵌入式工程师必学(52):储能系统ESS

能量存储系统(ESS,Energystoragesystems)存在于各种各样的尺寸、形状和技术中。储能系统的技术,即基本的储能机制,自然会影响其重要特性,包括成本、安全性、性能、可靠性和寿命。然而,尽管基础技术很重要,但一个成功的储能项目依赖于对该技术的彻底和深思熟虑的实施,以实现项目的目标。成功的实施取决于储能系统的架构和组装情况。系统的体系结构可以决定其性能和可靠性,与它所使用的技术一致,甚至与之无关。

码农17年的博客 1443

各行业都爱用什么编程语言开发?

互联网、物联网、AI,计算机技术不断迭代升级,传统行业纷纷开始互联网化,并用人工智能武装自己。在这个潮流下,各个行业开发者都喜欢使用什么编程语言呢?我们各个语言在不同行业的排名,看看2018年各领域适合学习的编程语言! 总体情况: 总的来说,现在的开发语言趋势是:JavaScript,Java,Python,C ++和C,是否后新语言长江后浪推前浪,Go,Rust,让我们拭目以待吧! 汽车 &a...

weixin_33972649的博客 595

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

AI 自动化编程会让程序员失业吗?

随着人工智能(AI)技术的快速发展,自动化编程工具和技术也在不断进步。这引发了一个广泛讨论的问题:AI自动化编程会让程序员失业吗?本文将探讨这个问题,从AI自动化编程的现状、潜在影响、程序员的角色变化、以及未来发展趋势等多个方面进行分析。

科技改变人类,技术成就未来 1万+

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

AI编程浪潮来袭,程序员饭碗“不保”?

AI 自动化编程在各行业的软件开发中得到了广泛应用,为不同领域的数字化转型提供了强大助力。 在互联网行业,AI 自动化编程被大量应用于 Web 应用开发、移动应用开发以及后端服务开发等环节。例如,许多互联网公司在开发电商平台时,利用 AI 自动化编程工具快速生成用户界面的代码框架,包括商品展示页面、购物车功能、订单管理系统等。这些工具能够根据设计稿和功能需求,自动生成前端的 HTML、CSS 和 JavaScript 代码,以及后端的 API 接口代码,大大缩短了开发周期,使产品能够更快地推向市场。

宝码香车的博客 2006

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

程序员的编程能力与编程年龄

Linux编程点击右侧关注,免费入门到精通!作者丨酷壳/陈皓, http://coolshell.cn/articles/10688.html程序员这个职业究竟可以干...

<sdffdsfsdfdfs>sfsfsfsdfsdffds</sdfsDS>Fsd 2068

AI自动化编程浪潮下,程序员真的会失业吗?

科技领域的实际进展似乎也在为这一观点 “背书”。2024 年 3 月,世界上首位 AI 程序员 Devin 诞生,它能自主学习新技术、修复代码错误,甚至还成功通过一家 AI 公司的面试。几乎同时,微软推出的 AutoDev 也备受关注,这个 AI 程序员能自主规划、执行复杂软件工程任务,在代码生成和测试生成方面表现出色。这些 AI 程序员的出现,让不少人担心自己的工作会被 AI 取代。一些程序员在社交媒体上表达了焦虑,认为自己多年积累的编程技能在 AI 面前可能变得一文不值,未来的就业前景充满了不确定性。

宝码香车的博客 2044

程序员的编程修养

什么是好的程序员?是不是懂得很多技术细节?还是懂底层编程?还是编程速度比较快?我觉得都不是。对于一些技术细节来说和底层的技术,只要看帮助,查资料就能找到,对于速度快,只要编得多也就熟能生巧了。   我认为好的程序员应该有以下几方面的素质:     1、有专研精神,勤学善问、举一反三。   2、积极向上的态度,有

Leo 1031

盲人程序员是怎么编程的?闭眼编程

盲人程序员可以借助屏幕阅读器来使用计算机,绝大多数编程工具也可以正常访问,所以,盲人掌握编程语言是没有问题的。

chenhao0568的专栏 1196

AI编程来了,程序员要失业了?

AI 编程被炒的火热,很多人都在鼓吹,甚至行业内的大厂,吹的最牛逼的就是某阿里 ,其他的公司就不一一列举了。 在大模型领域,我不认为阿里会强过 Claude,所以我基于 Claude-3.5-Sonnet,完全沉浸式编码完成一个任务 我通过AI编程完成了第一个实用程序

shengjk1的博客 567

这 就是程序员的编程日常

点击上方“逆锋起笔”,公众号回复PDF领取大佬们推荐的学习资料程序员最幽默(ID:humor1024)整理【0】这就是编程日常【1】开发员的周末【2】程序员从不睡觉【3】客户期望 vs...

code小生 262

程序员编程语录

程序员编程语录 1. 一个好的程序员是那种过单行线马路都要往两边看的人。(Doug Linder) 2. 程序有问题时不要担心。如果所有东西都没问题,你就失业了。(软件工程的Mosher定律) 3. 程序员的麻烦在于,你无法弄清他在捣腾什么,当你最终弄明白时,也许已经晚了。(超级计算机之父Seymour Cray) 4. 我想大部分人都知道通常一个程序员会具有的美德。当然了,有三种:懒惰,

u012071369的专栏 785

程序员编程的心灵鸡汤

文章目录程序员编程的心灵鸡汤正文引用PS:鸡蛋虽好但不要贪杯,那么 程序员编程的心灵鸡汤 正文 1,大部分情况下,构建程序的过程本质上是对规范调试的过程。——Fred Brooks,《人月神话》作者 2,软件开发往往是这样:最开始的 90% 代码占用了开始的 90% 的开发时间;剩下 10% 代码同样需要 90% 的开发时间。——Tom Cargill 3,当你试图解决一个你不理解的问题时,复杂化就产成了。——Andy Boothe 4,生命太短暂,不要去做一些根本没有人想要的东西。——Ash Maury

u011552182的专栏 1097

为什么程序员喜欢在深夜编程?

随便找个程序员问“你什么时候工作效率最高?”他的回答肯定是在半夜。    ​ 业内有传言称“程序员就是一个把咖啡因转换成代码的机器”。 随便找个程序员问“你什么时候工作效率最高?”他的回答肯定是在半夜。    这是目前普遍存在一个趋势,一部分人喜欢在早晨4点起床开始一天忙碌的工作,而此刻其他人还在梦乡中。    之所以早起,是为了避免在编程中受到干扰,影响效率。

中国黑客协会创始人花无涯博客 2471

程序员需要掌握多门编程语言_60多个程序员的浪漫编程行情

程序员需要掌握多门编程语言 Toady I was searching for some good programming quotes on google. Luckily I came across a website programmerryangosling.tumblr.com where I found so many awesome romantic and love quotes ...

culing2941的博客 254
上一篇: 什么是MYSQL?
下一篇: 程序员,对自己好一点
奇迹摘星w
博客等级 码龄6年 1844粉丝 189原创
评论 10
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值