第五周

首先附上我的读后感:

《大道至简读后感》

——程序员的大道,或许并不麻烦

正值暑假期间,自由时间算是比较多的,虽然说有自学的作业,但还是能空出来不少的时间,于是趁着这部分时间,我把老师推荐的周爱民老师编写的《大道至简》浅读了一下,写了点读书笔记,也写了这篇读后感,因为是浅读,所以可能很多地方考虑不周,请多包涵。

第一章首先提出了愚公移山的示例。愚公设计的很简单也很实用,他自己移山,叫上亲朋邻居移山,子子孙孙无穷尽,利用子孙继续进行移山,直到山移开为止,这是一个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();

}

}

posted on 2022-07-30 21:00  wardream  阅读(49)  评论(0)    收藏  举报