第五周
首先附上我的读后感:
《大道至简读后感》
——程序员的大道,或许并不麻烦
正值暑假期间,自由时间算是比较多的,虽然说有自学的作业,但还是能空出来不少的时间,于是趁着这部分时间,我把老师推荐的周爱民老师编写的《大道至简》浅读了一下,写了点读书笔记,也写了这篇读后感,因为是浅读,所以可能很多地方考虑不周,请多包涵。
第一章首先提出了愚公移山的示例。愚公设计的很简单也很实用,他自己移山,叫上亲朋邻居移山,子子孙孙无穷尽,利用子孙继续进行移山,直到山移开为止,这是一个while条件循环,古代人就已经写出来了,可见正常人都能学会写程序,有的只是学与不学的区别。
而第二章提出了方法的概念。因为人懒得一次次的计算,所以他们发明了循环;因为懒的整个文件找bug,人们创建单元文件。编程语言的知识确实很零碎,但是可以被明确地分开来,有了系统的知识,才能更好的去编程。
从第三章开始,就从个人发展为团队。团队有制度有分工有任务,制度需要尽可能的公平,但是不能过于死板;项目开始前要确定角色分工,保证每个人有自己的工作,不能出现不能令亦不受命的人员。项目经理不必精细管理,在远处观望的同时找到问题,不能做局中人已致当局者迷。一个团队应该由项目经理进行明确的分工,尽量避免弹性分工,有能力胜任不同岗位的人少。
而当一个团队组建好之后,就需要开始项目,项目的第一步就是与客户沟通,客户不可能随你所愿,我们只能尽可能去适应客户,与客户沟通不能过多,要在尽可能少的次数内完成所有的询问,与客户的交流也不能单纯成为一场酒局,不然这就是在浪费双方的时间。
沟通之后就要开始创建模型了,右图就是一种通用的基本模型,名为软件开发瀑布模型,大多数的开发都适用于这种模型,因为这种模型的泛用性极高,工程定义,程序实现,程序运行与维护,是大多数项目都要有的过程,但是不能专注于过程,做项目的唯一目的就是实现,而过程其实并不唯一,并非只有这一种模型,就好像那个“V字模型”,虽然可以被拉成瀑布模型,但其本身更加精细。画不成的老虎,真像狗;刻不成的鸿鹄,真像鹜吗?不然,不然。成功了便是虎同鹄,不成功时便都是怪物。
周爱民老师在文章里说到,语言是一种工具,也因此工具并不唯一,可以用java可以用python也可以用c#,或许他们擅长的方向并不唯一,但是只需要看到结果:“他们能达成项目的目的”,这就是一种好工具。用工具实现方法,用方法实现过程,最后用过过程实现对象,这就是软件工程。
原先我一直以为软件工程就是做软件开发的,只需要有一种自己擅长的语言就行,但是在看完这本软件工程的书之后,周爱民老师给我上了一课,语言只是一种工具,单一的工具并不万能,而仅凭自己,也无法完成一个正式程序的开发。个人能力,团队协作,工具多样化,缺一不可,这样才是软件工程最后的完全体。
程序员的大道,就是这么简单而通俗,并不麻烦。
之后附上我的学习记录:
第一天:
求完数:
编程求出1000 以内的所有完数。
public class JavaBasic08 {
public static void main(String[] args) {
int sum = 0;
for (int i = 2;i < 1000;i +=2) { //最小的完数是2,并且完数都是偶数
for (int j = 1; j < i; j++)
if (i % j == 0)
sum += j;
if (i == sum)
System.out.print(i + " ");
sum = 0;
}
}
}
求不重复数字:
public class JavaBasic09 {
public static void main(String[] args) {
int count = 0 ;
for (int Dig_1 = 1;Dig_1 <= 4;Dig_1 ++)
for (int Dig_2 = 1;Dig_2 <= 4;Dig_2 ++)
for (int Dig_3 = 1;Dig_3 <= 4;Dig_3 ++)
if(Dig_1 != Dig_2 && Dig_1 != Dig_3 && Dig_3 != Dig_2) {
count ++;
System.out.print(Dig_3 + "" + Dig_2 + "" +Dig_1 + " ");
}
System.out.print("\n一共可以组成 " + count + " 个符合条件的三位数。");
}
}
第二天:
累加:
public class JavaBasic12 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("求前 n 个数的和,输入 n 的值(n > 0):");
int n = input.nextInt();
int sum = 0;
for (;n > 0;n --)
sum += n;
System.out.print("和为 " + sum);
input.close();
}
}
累乘:
public class JavaBasic13 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("求前 n 个数积,输入 n 的值(n > 0):");
int n = input.nextInt();
int accumulate = 1;
for (;n > 0;n --)
accumulate *= n;
System.out.print("积为 " + accumulate);
input.close();
}
}
第三天:
求最大值:
public class JavaBasic14 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("请分别输入这三个数:");
int num1 = input.nextInt(),num2 = input.nextInt(),num3 = input.nextInt();
//if嵌套方式
if(num1 > num2)
if(num1 > num3)
System.out.println("max = " + num1);
else
System.out.println("max = " + num2);
else
if(num2 > num3)
System.out.println("max = " + num2);
else
System.out.println("max = " + num3);
//if非嵌套方式
int temp;
if(num1 > num2)
temp = num1;
else
temp = num2;
if(temp > num3)
System.out.println("max = " + temp);
else
System.out.println("max = " + num3);
int result = num1 > num2 ?( num1 > num3 ? num1 :num3 ) : (num2 > num3 ? num2 : num3);
System.out.println("max = " + result);
input.close();
}
}
第四天:
数列的前n项和:
public class JavaBasic11 {
public static void main(String[] args) {
int numerator = 2 , denominator = 1; //第一个数字是2/1
double result = 0;
System.out.print(numerator + "/" + denominator);
for (int num = 1;num <= 20; num ++) { //计算前20项和--循环20次
result += (double) numerator / denominator;
numerator += denominator;
denominator = numerator - denominator;
System.out.print(" + " + numerator + "/" + denominator); //分子:numerator,分母:denominator
}
System.out.println("\n结果是:" + result);
input.close();
}
}
第五天:
Swiitch练习 求某月天数:
public class JavaBasic29 {
public static void main(String[] args) {
//闰年是指能被4整除,但是不能被100整除的年份 或者 能被400整除的年份
//平年2月有28天,闰年2月有29天
Scanner input = new Scanner(System.in);
System.out.print("请输入年份和月份:");
int year = input.nextInt();
int month = input.nextInt();
int day = 28;
switch (month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
day = 31;
break;
case 2:
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
day = 29;
break;
case 4:
case 6:
case 9:
case 11:
break;
}
System.out.print("在 " + year + " 年 " + month + " 月一共有 " + day + " 天。");
input.close();
}
}
浙公网安备 33010602011771号