1. 一个用户不知道问题是什么
2. 一个用户知道问题是什么,但是其实问题在另外的事情上
3. 一个用户知道问题是什么,可程序员不理解,不相信,或者不听从这个用户
4. 有不止一个用户,其中的每一个用户都处在上面3种情况的一种或多种中
5. 用户的数量随时间变化
6. 问题随时间变化
7. 所有人都大喊大叫失去了理智
提取用于解决那些定义清晰问题的范式,不过是程序员们工作的部分。还有另外一些范式,更深刻,更模糊,与编程工作自身特性紧密相关---专业程序员是为其他人解决问题的人,无论多么麻烦。
专业程序员可能用到的方法:
1. 如果有这样一个定义清晰的问题,我相信根本就不应该去解决它,那么我应该怎样处理为这个问题编程的任务
2. 我怎样才能确定究竟能否使用计算机
3. 计算机程序总是要在人与机器构成的总体环境中运行,那么,我应该怎样设计这一总体环境(UI,etc)
4. 我应该怎样设计计算机程序,才能避免它对其运行的总体环境产生副作用(框架)
5. 总有一些人,他们带着定义不清的问题,他们对计算机的了解不如我多,但他们对其他事情都懂得比我多,而且他们工作动力也和我很不一致—我怎样才能更有效的与他们协作
6. 如果在某种环境下,我作为一个专业程序员不能有效地工作,那么我怎样才能改变这样的处境
7. 未来充满了不确定因素—问题本身会发生变化,人员也会,我不一定会一直在场,那么我如何保证自己创造的程序在未来仍能够胜任工作(为未来设计)
8. 对于一个特定的时刻,我怎样去诶那个采用哪种层次的方法论才能最适合当下的工作
9. 我的个性, 我解决问题的方式中有一些方面,我自己由于身在其中,很难察觉他们,但他们甚至可能是决定程序员工作效率的最重要因素。我怎样调节这些因素呢?