程序迟迟不敢动手 - 原来是自己不自信

本文针对程序员缺乏自信的问题提出了解决方案。建议将不自信的原因逐一列出,并针对性地克服每一个障碍。通过具体行动增强自信,例如加强Java算法训练、学习Linux等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一直有这样一些毛病,在 钟声 那里看到的:http://blog.youkuaiyun.com/useway/archive/2009/10/21/4709721.aspx

 

写道
缺乏自信的程序员总是有一大堆理由说出自己不自信的原因,比如说,自己不是专业出身、没有赶上好时代、不够聪明、甚至还觉得自己不够漂亮,等等。总之,有N多个理由来让自己不自信,这些理由是不是说明这个程序员就是一个非常糟糕,甚至是一个非常不幸的人呢?显而易见,这些缺点被无限的扩大了。

3.4.1 临床表现
@ 大公司的招聘不敢面试,甚至连投简历都不敢
@ 一个程序任务拿到手还没有做呢,先打退堂鼓
@ 面对一个程序迟迟不敢动手
@ 想编一个程序,但是,总是先在无关紧要的地方打转,不能快速切入程序中心

......
.......

3.4.4 治疗3:逐个排除你恐惧的理由

缺乏自信这个心态往往在心中是一个虚无缥缈的概念,这个概念好像是一大堆东西都让自己觉得不如别人。那么最好的办法就是把那些让你不自信的理由写出来,记住:一定要写在纸上,而不是只是自己在心里面想。

请按照如下步骤进行:

步骤1:把那些不自信的恐惧理由逐个写到一张纸上

a. 我对Java算法不熟悉
b. 我不熟悉Linux系统
c. 我长的不好看

步骤2:一个一个的看这些理由,逐个去解答并去排除

a. 我对Java算法不熟悉
排除:苦练Java算法1个月
b. 我不熟悉Linux系统
排除:到书店去买本Linux书去看,找到网站去下载,找台机器去安装
c. 我长得不好看
排除:这也叫理由?程序员找工作不看长相,再说了,长的好看还是次要的,关键是有才,这才是最重要的啊!

步骤3:当全部排除以后,再想想还有不自信的理由吗?

a. 如果还有,重复步骤2继续排除。
b. 如果没有,从今天开始可以很自信了。

其实这是一个非常好的解决你心结的方法,因为,往往我们会把我们的理由在脑子里混为一谈,让自己也不清楚到底哪些东西影响着自己的想法。而当我们逐个的把他们都写出来以后,你会发现这些不自信的理由原来是可数的就那么几条,我们把这几条想明白以后,还有什么理由不自信了呢?
逐个排除你不自信的理由,昂首阔步向前进。

 

自己要多反思反思了。

### C# Task 无法正常退出的原因分析 在 C# 中,如果发现某些 `Task` 实例未能按预期方式退出,通常是由于以下几种常见原因引起的: 1. **任务阻塞**:任务可能因为等待外部资源(如文件句柄、网络请求或其他线程信号)而进入无限期挂起状态[^3]。 2. **异常未被捕获**:如果任务内部发生了未经处理的异常,则该任务可能会立即终止,但会触发任何回调或通知机制告知调用方其失败原因[^4]。 3. **取消令牌未正确定义或响应**:当尝试通过 CancellationTokenSource 取消长时间运行的操作时,目标方法并未订阅此 token 或者忽略了它的值变化指示[^5]。 以下是具体的排查步骤与解决方案。 --- ### 排查方法 #### 1. 检查任务的状态 利用 `Task.Status` 属性可以获取指定实例当前所处阶段的信息。例如,“Running”表示仍在执行期间;“Faulted”意味着遇到了可恢复性的错误等情况。借助这一特性有助于快速定位问题所在范围。 ```csharp if (myTask.Status == TaskStatus.RanToCompletion) { Console.WriteLine("The task completed successfully."); } else if (myTask.Status == TaskStatus.Faulted || myTask.Status == TaskStatus.Canceled) { Console.WriteLine($"An error occurred or cancellation was requested during execution ({myTask.Exception?.Message})."); } ``` #### 2. 设置合理的超时时间 为了避免个别耗时较长的任务影响整体程序表现,可以在启动之初即设定最大允许持续秒数。一旦超出限定则强制中断关联活动并释放占用资源。 ```csharp var cts = new CancellationTokenSource(TimeSpan.FromSeconds(10)); await SomeLongOperationAsync(cts.Token).ConfigureAwait(false); async Task SomeLongOperationAsync(CancellationToken cancellationToken) { while (!cancellationToken.IsCancellationRequested) { await Task.Delay(100, cancellationToken); } } ``` #### 3. 完整的日志记录体系 增强全局范围内对各环节进展状况跟踪能力尤为重要。特别是在分布式部署场景下更是如此。推荐采用结构化日志方案(Serilog/NLog等),并将关键节点数据持久保存下来供事后审计之用。 --- ### 解决方案 #### 1. 正确处理异常情况 确保每个异步方法都具备完善的防护措施应对可能出现的各种突发状况。即便是最底层辅助函数也应忽视这方面的重要性。 ```csharp try { result = await FetchDataFromRemoteServerAsync().ConfigureAwait(false); } catch (HttpRequestException httpEx) { logger.LogError(httpEx, "Failed fetching data due to network issues."); throw; // Optionally rethrow after logging details. } finally { CleanUpResources(); } ``` #### 2. 合理运用取消机制 对于那些预计会花费较长时间完成的工作流来说,提前规划好如何优雅地中止显得尤为必要。这仅涉及到客户端界面交互体验提升方面考量,同时也是保障服务器负载均衡的有效途径之一。 ```csharp private static async Task PerformComputationWithCancelSupportAsync( int iterations, CancellationToken cancellationToken) { for(int i=0;i<iterations && !cancellationToken.IsCancellationRequested;++i){ double computationResult = Math.Sqrt(i * i + 1); // Example operation if(cancellationToken.IsCancellationRequested){ break; } await Task.Yield(); // Yield control back periodically. } } ``` #### 3. 调试工具的支持 Visual Studio 提供了强大的诊断功能集来协助开发者深入理解复杂并发行为背后隐藏的秘密。其中包括但限于 Threads Window 查看实时动态分布图谱以及 Parallel Stacks Tool 更直观展现多路分支交错关系等内容[^6]. --- ### 总结 通过对上述几个维度全面细致地剖析之后难看出,要想彻底根治 C# 程序中存在的 Task 按规定路径结束这类顽疾并非易事。它往往需要我们付出额外努力去改进既有代码质量标准的同时还要断积累实战经验教训总结规律特点才行。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值