首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐
2025年5月31日 星期六 2:10pm

程序员的代码为什么永远写不完?

  • 24-03-05 03:21
  • 4350
  • 13349
blog.csdn.net

640?wx_fmt=gif

程序员和常人有着什么样的区别?是否所有的程序员都是天然呆?为何女性程序员的人数要远远少于男性?在本文中,我们将带着种种疑问深入探讨计算机程序员中的文化。

640?wx_fmt=jpeg

作者 | Jennifer Ouellette

译者 | 弯月

责编 | 屠敏

出品 | CSDN(ID:CSDNnews)

以下为译文:

现如今,我们日常生活的方方面面都渗透着计算机的代码。然而,普通人并不了解计算机编程的工作,也不清楚程序员正在悄悄地影响着整个社会。科技报道的记者Clive Thompson希望通过他的新书《Coders:The Making of a New Tribe and the Remaking of the World》来改变这一点。

在担任科技记者之前,高中时期的Thompson曾是一名黑客,他自学了如何在早期的个人计算机上写代码,比如在Commodore 64上等。之前他还出过一本书《超乎想象的聪明:论科技如何改进我们的思维》(Smarter Than You Think: How Technology Is Changing Our Minds for the Better),书中推翻了末日预言者所信奉的看法:新的技术工具正在腐蚀我们的大脑,Thompson则认为这些东西实际上提高了我们的认知能力。他在《Coders》中说到:“我想让一般人了解程序员,以及为什么他们会比较注重某方面的东西,他们的激情在哪里,他们的盲点又是什么。希望普通人可以更好地了解程序员为我们创造的这个数字世界。”

提问:最终你成为了一名作家而不是专业的程序员。从很多方面来看,编程只是另一种语言,但许多作家都对这种工作敬而远之。你觉得这两种工作之间有相似之处吗?

Thompson:程序员通过代码进行沟通,而他们的沟通对象是机器。写代码的工作和写作的工作都是脑力劳动,这是二者很大的相似之处。作家需要搞清楚如何创作一本小说、一篇文章、一本书。而程序员则需要设法考虑他们构建的代码的结构,以及函数之间如何相互调用。这两种类型的工作人员都喜欢连续工作12个小时,中途不会被人打断,所以他们都可以在思绪的尽情飞扬中完成他们的工作。

两者之间的区别可能在于人类可以理解具有歧义的内容,而计算机则不能。在你写Python代码的时候,任何一个小小的错误都会导致系统停止运转。这就是程序员的工作与其他方面工程师的不同之处。在修理汽车的时候,如果你没有拧紧一个车轮上的螺栓,那么不至于整辆车都停止工作。但是在写代码的时候,哪怕是少写一个括号,都会导致整个应用或整个网站宕机。我认为这是所有作家都感到很恐怖的一件事,因为他们都习惯了模棱两可。

提问:在这本书中,你谈到了一些典型的程序员的性格,但你自己也会感叹程序员身上常见的刻板印象,比如他们很孤立、体型较胖、不擅长社交。是否有某种特定的人倾向于从事这个领域?

Thompson:现在有很多人都加入了程序员的大军,但是你了解一些各行各业就会发现有一些特征也似乎很正常。例如,编码员善于逻辑思考,将大问题分解为小步骤。这种习惯也会体现在他们的日常生活中,因为他们需要花大量时间进行线性、精确的思考。此外,每个擅长编程的人都能够应对一些令人费解的挫折。

这是程序员与普通人之间的分界线。好莱坞影片塑造的程序员都有一种刻板的印象,程序员整体坐在电脑前写代码。实际上,他们坐在那里只是在盯着无法正常工作的代码,并设法弄清楚如何修复这些代码。这是程序员一辈子都做不完的主要工作。这种工作不会越来越好,因为你技术越好,所面临的挑战就越难。但是,一旦你改好代码,程序开始正常运行时,那种成就感简直无与伦比。程序员就是在日复一日地追逐这种快感。相比之下,那些残酷的挫折时刻都不值一提,所以这群人非常擅长应对一次又一次地碰壁。

提问:你还介绍了一些程序员的历史。女程序员可能是最早的一批程序员。后来,如你在书中所述,这个领域变成了男性的天下——男性占据了绝对的主导地位。这中间发生了什么?

Thompson:女性在编程界遭到排挤的原因有点复杂。历史上没有发生过重大的事件,这种情况是三种或四种因素互相影响的后果。这也意味着我们无法通过一个解决方案彻底地解决这个问题。就像有个笑话说:对于这个问题,我们没有一发即中的银弹,只有很多的铅弹头。

早期从事编程工作的人都是精英,因为没有人知道如何编程。各个公司聘请了逻辑思维一丝不苟的人,并且只培养了这群人。因此,才出现了Mary Allen Wilkes这样的人,她说:“既然我不能成为一名律师,因为在1959年这个职业有浓烈的性别歧视,所以毕业后我只能去麻省理工学院,问他们还要不要程序员。结果他们说,要!”后来,她成为了第一个操作系统(可以说是第一台个人电脑上的操作系统)的先驱。在当时,软件不值钱。男子汉都去做硬件了。而软件被当成了类似于秘书的工作。

随着各家公司开发出了大量的代码后,软件操作就变得至关重要了,于是男人们开始逐渐产生了兴趣。他们建立了所谓的硅谷文化——“我们雇佣某人不仅仅是因为他擅长编程,也不仅仅是因为他拥有这些技术,而是因为我们觉得他就是我们的一份子。”一直到20世纪80年代出现了一批像我一样,从高中时代就开始在个人电脑上编程的人。几年后,我们开始上大学,并学习计算机科学的课程,全身心地投入到这个领域。教授们说:“这些人才是我们应该教导的学生。我们应该改变我们的课程,要求每一位程序员从十几岁就做黑客。”而就在当时,所有从事计算机科学领域的女性几乎都崩溃了。

提问:最近有大量关于许多算法中固有的偏见的讨论,特别是在社交媒体中。这让很多非计算机科学领域的感到不解。他们会认为:“算法怎么会有偏见?它可是数学啊。”

Thompson:首先,从字面意思来看,偏见通常会源自你需要解决问题的算法。例如,社交媒体中采用的推荐算法是由架构师设计,由程序员实现的某种“预测手段”。这种算法会不断关注人们最常点击的内容,设法找出人们最喜欢和着迷的内容。这一切都在为基于广告的市场模式服务。人们往往会被有可能引发极度情绪(深深的愤怒、怨恨、恐惧)的内容所吸引。这种算法会把人们按下心理按钮的行为视作用户的互动,而这正是这种算法需要找到和推荐的内容。

其次,如果用带有偏差的数据训练算法,那么算法也会产生偏差。我的书中有这样一个例子:Henry Gan是Gfycat(一家做动画GIF托管服务的公司)的程序员。Henry和他的团队需要利用视觉学习神经网络AI来识别图片并自动进行标记。他们是一家小公司,所以他们并没有从头开始做。他们利用了一些由Google和Facebook等公司开发和训练好的开源神经网络软件。

结果,他们发现在识别亚洲人的面孔时,这些软件的实际效果很糟糕。对于Gfycat来说这是一个非常大的难题,因为他们的用户群众有很大一部分是流行音乐的粉丝。他们喜欢寻找亚洲主流明星的GIF动画。Henry跟我解释说,他们使用的AI的训练数据集主要是白人,因为收集这些数据集的机构位于白人的国家。所以,你没法利用这种算法识别亚洲人的面孔,这个AI非常不擅长区分亚洲人的面孔。反之亦然。在中国接受训练的人工智能主要针对的是中国人的面孔,因此在识别白人面孔就会遇到很大的困难。

提问:算法对媒体也产生了巨大的影响,当然有好也有坏。

Thompson:媒体受到排名算法的影响,甚至从“网站上最常转发的10条新闻”的时代就开始了。这其实都算不上AI,实际上只是一种排序算法。给我一份今天转发的所有内容列表,按人气排序,排在前10位就是我们的排名列表。这几乎是软件工程师的条件反射。

有一个网站专门寻找播放次数为零的YouTube视频。我经常想,我们能做的远不止此。你可以利用软件进行非常有趣的搜索。人们忽视的重点是什么?你可以通过代码和算法做一些非常酷和有趣的事情,之所以没人这么做是因为每个人都在追寻最容易获取的利润。寻找流行的东西,这是一种很划算的模型。但是,使用软件的巨大灵活性感觉在这种模型中完全没有发挥出来。

提问:你在写这本书时,感觉最惊讶的是什么?

Thompson:真正让我感到意外的一件事情是,你可以发现软件开发人员很享受提高效率和优化的乐趣。他们很喜欢优化一些笨重或具有重复性的工作。几乎所有的工程师都很关注运行效率的提高。节省劳动力,巩固步骤,简化工作,加强人类的能力。但是,似乎他们没有办法停止这样的思考。例如,Scott Hanselman整天都在谈论编程,甚至在晚餐时间,家里的其他人正在做饭,而他却批评他们的做事效率太低,他说:“我开始了对晚餐代码的审查。”

这种下意识的条件反射正是商业模式的来源。Facebook推送的一则新闻中说:“让我们来加速和优化一切工作。”Facebook加速了我们关注其他人的能力。Facebook对我们了解周围的朋友的方式进行了巨大的优化。这本身是一件好事,但同时也出现了很多问题。在诸多信息的干扰下,我们很难集中注意力做一件事情,因为有多事情即将出现在你面前。

这个问题贯穿了整本书:软件工程师对优化的追求永无止境。但有时这会变成《猴爪》一书中所说的诅咒。我可以想象这种诅咒从个人扩散到整个社会。就像优步一样,他们优化了汽车的受欢迎程度,但也给汽车行业带来了破坏。还有Airbnb优化了房屋的租赁,最终会影响到房地产市场。历史在一遍遍地重复,当你看到某家科技公司锁定了人们的某个兴趣时,通常他们都会优化自认为这是对大家有益的事情,但结果却会给其他人带来间接的伤害。

原文:https://arstechnica.com/gadgets/2019/04/how-the-new-art-form-of-coding-came-to-shape-our-modern-world/

本文为CSDN翻译,转载请注明来源出处。

2019AI领域趋势,开发者需关注哪些!

https://edu.csdn.net/topic/ai30?utm_source=cxrs_bw

640?wx_fmt=png

640?wx_fmt=jpeg

作为码一代,想教码二代却无从下手:

听说少儿编程很火,可它有哪些好处呢?

孩子多大开始学习比较好呢?又该如何学习呢?

最新的编程教育政策又有哪些呢?

下面给大家介绍CSDN新成员:极客宝宝(ID:geek_baby)

戳他了解更多↓↓↓

640?wx_fmt=jpeg

 热 文 推 荐 

☞ 微软 GitHub 超百名工程师联名:我们挺 996.ICU!绝不删库跑路!

☞ 小程序的侵权“生死局”

☞ 谁才是世界上最好的编程语言?| 每日趣闻

☞ 码二代的出路是什么?

☞ @996 程序员,ICU 你真的去不起!

☞ Elastic Jeff Yoshimura:开源正在开启新一轮的创新 | 人物志

☞ 机器学习萌新必备的三种优化算法 | 选型指南

☞ 19岁当老板, 20岁ICO失败, 21岁将项目挂到了eBay, 为何初创公司如此艰难?

☞ 她说:为啥程序员都特想要机械键盘?这答案我服!

 

System.out.println("点个在看吧!");
console.log("点个在看吧!");
print("点个在看吧!");
printf("点个在看吧!\n");
cout << "点个在看吧!" << endl;
Console.WriteLine("点个在看吧!");
Response.Write("点个在看吧!");
alert("点个在看吧!")
echo "点个在看吧!"

 
 
 

640?wx_fmt=gif点击阅读原文,输入关键词,即可搜索您想要的 CSDN 文章。

 
你点的每个“在看”,我都认真当成了喜欢
程序人生
微信公众号
笑谈开发轶事,品味程序人生。

目录

1. 引言

2. TextButton 的基本用法

3. 主要属性

4. 自定义按钮样式

4.1 修改文本颜色

4.2 添加背景色

4.3 修改按钮形状和边距

4.4 样式定制

5. 高级应用技巧

5.1 图标+文本组合

5.2  主题统一配置

5.3 动态交互

6. 性能优化与注意事项

6.1 点击区域优化

6.2 避免过度重建

6.3 无障碍支持

 6.4 点击无响应

相关推荐


1. 引言

        在 Flutter 中,TextButton 是一种无背景的按钮,适用于次要或轻量级操作。它的外观更加简洁,仅包含文字,适合用作辅助性操作,如“取消”或“了解更多”。相比 ElevatedButton,TextButton 没有阴影和背景色,更加简约。

2. TextButton 的基本用法

    TextButton 需要 onPressed 事件和 child 组件。

  1. TextButton(
  2. onPressed: () {
  3. print('TextButton 被点击');
  4. },
  5. child: Text('点击我'),
  6. )

    如果 onPressed 设为 null,按钮会变为不可点击状态。

  1. TextButton(
  2. onPressed: null,
  3. child: Text('不可点击'),
  4. )

3. 主要属性

属性说明
onPressed按钮点击时的回调函数
onLongPress长按时触发的回调
child按钮的内容,如 Text 或 Icon
style自定义按钮样式

示例:

  1. TextButton(
  2. onPressed: () {},
  3. onLongPress: () => print('长按按钮'),
  4. child: Text('长按试试'),
  5. )

4. 自定义按钮样式

4.1 修改文本颜色

  1. TextButton(
  2. style: TextButton.styleFrom(
  3. primary: Colors.blue, // 文字颜色
  4. ),
  5. onPressed: () {},
  6. child: Text('自定义颜色'),
  7. )

4.2 添加背景色

  1. TextButton(
  2. style: TextButton.styleFrom(
  3. backgroundColor: Colors.blue,
  4. primary: Colors.white,
  5. ),
  6. onPressed: () {},
  7. child: Text('带背景色的 TextButton'),
  8. )

4.3 修改按钮形状和边距

  1. TextButton(
  2. style: TextButton.styleFrom(
  3. shape: RoundedRectangleBorder(
  4. borderRadius: BorderRadius.circular(20),
  5. ),
  6. padding: EdgeInsets.symmetric(horizontal: 20, vertical: 10),
  7. ),
  8. onPressed: () {},
  9. child: Text('圆角按钮'),
  10. )

4.4 样式定制

  1. TextButton(
  2. style: ButtonStyle(
  3. // 文字颜色(包括禁用状态)
  4. foregroundColor: WidgetStateProperty.resolveWith(
  5. (Set states) {
  6. if (states.contains(WidgetState.disabled)) return Colors.grey;
  7. return Colors.blue;
  8. },
  9. ),
  10. // 背景色
  11. backgroundColor: WidgetStateProperty.all(Colors.transparent),
  12. // 水波纹颜色
  13. overlayColor: WidgetStateProperty.all(Colors.blue.withOpacity(0.1)),
  14. // 内边距
  15. padding: WidgetStateProperty.all(EdgeInsets.symmetric(horizontal: 16)),
  16. // 边框形状
  17. shape: WidgetStateProperty.all(
  18. RoundedRectangleBorder(
  19. borderRadius: BorderRadius.circular(8),
  20. ),
  21. ),
  22. ),
  23. onPressed: () {},
  24. child: Text('自定义样式'),
  25. )

5. 高级应用技巧

5.1 图标+文本组合

  1. TextButton.icon(
  2. icon: Icon(Icons.add_box_rounded, size: 20),
  3. label: Text('添加好友'),
  4. onPressed: () {},
  5. style: ButtonStyle(
  6. padding: WidgetStateProperty.all(
  7. EdgeInsets.symmetric(vertical: 12, horizontal: 20),
  8. ),
  9. ),

5.2  主题统一配置

  1. MaterialApp(
  2. theme: ThemeData(
  3. textButtonTheme: TextButtonThemeData(
  4. style: ButtonStyle(
  5. foregroundColor: MaterialStateProperty.all(Colors.purple),
  6. textStyle: MaterialStateProperty.all(
  7. TextStyle(fontWeight: FontWeight.bold)),
  8. ),
  9. ),
  10. ),
  11. )

5.3 动态交互

  1. // 点击缩放动画
  2. TextButton(
  3. onPressed: () {},
  4. child: AnimatedContainer(
  5. duration: Duration(milliseconds: 200),
  6. transform: isPressed ? Matrix4.diagonal3Values(0.95, 0.95, 1) : null,
  7. child: Text('动态按钮'),
  8. ),
  9. )

6. 性能优化与注意事项

6.1 点击区域优化

        默认最小尺寸为 48x48(Material规范),可通过 minimumSize 调整:

  1. style: ButtonStyle(
  2. minimumSize: MaterialStateProperty.all(Size(100, 50)
  3. ),

6.2 避免过度重建

        对静态按钮使用 const 优化:

  1. const TextButton(
  2. onPressed: _handleClick,
  3. child: Text('静态按钮'),
  4. )

6.3 无障碍支持

  1. const TextButton(
  2. onPressed: _handleClick,
  3. child: Text('静态按钮'),
  4. )

 6.4 点击无响应

  • 检查 onPressed 是否为 null

  • 确认父组件未被 IgnorePointer 或 AbsorbPointer 包裹

  • 检测是否被其他组件覆盖(如透明层)

相关推荐

Flutter 基础组件 Text 详解-CSDN博客文章浏览阅读1.1k次,点赞42次,收藏25次。Text 组件是 Flutter 中最常用的 UI 组件之一,用于显示文本内容。它支持样式自定义、多行显示、溢出控制等功能,适用于各种文本场景。本文将详细介绍 Text 组件的使用方式及其重要参数。 http://iyenn.com/rec/1821633.htmlFlutter 基础组件 Scaffold 详解-CSDN博客文章浏览阅读494次,点赞21次,收藏23次。Scaffold 主要在 MaterialApp 主题下使用,它是实现Material Design基本视觉布局结构的Widget,它为应用提供了一个可定制的结构,包括 AppBar(应用栏)、Drawer(侧边栏)、FloatingActionButton(浮动按钮)、BottomNavigationBar(底部导航栏) 等。本文将详细解析 Scaffold 的功能和使用方法。 http://iyenn.com/rec/1821634.html

注:本文转载自blog.csdn.net的CSDN 程序人生的文章"https://blog.csdn.net/csdnsevenn/article/details/89530024"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2024 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top