软件开发的基础知识是什么?
我们可以把软件的知识分为两部分,专业技能知识和领域知识或行业知识。
1,专业技能和知识
编程语言和库
你可以在书店找到各种关于编程的书,但我建议你只要深入掌握就行了。
就一门课,任何程序员都需要熟悉C语言。对于你已经深入掌握的语言,有很多选项。如果你从事驱动开发,我觉得你一定要掌握汇编语言,C语言也是不错的选择。如果是做UI的话,c++可能更好。Java语言更适合网络程序的开发。当然,JavaScript在谷歌肯定是备受推崇的。
对于程序员来说,编程语言相当于游侠手中的武器,可以是长剑,也可以是短剑,可以是大刀,也可以是匕首。这些武器各有所长,要发挥所长,必须基于一套路径,所以对于程序员来说,是基于某种编程语言的代码库。例如,GNUC图书馆是libc或ulibc。如果你使用的是C语言,在类UNIX平台上开发,那么你必须正确理解libc的工作原理,你的代码中调用的每一个函数的输入输出,可能的错误,可能的歧义,以及对系统可能产生的影响。比如一个函数是可重入的还是不可重入的,如果同时调用多个线程会出现什么错误等等。
一个编程想法
全世界都惊叹于毛泽东的领导才能和军事才能,但在他的才华外表背后是他的革命。
精神是他明智的思想。编程也是一样,如果没有编程思路,就没有引导前进的动力,也就没有创作灵感产生的土壤。到目前为止,软件知识常用的编程思想是结构化(模块化)和面向对象(设计模式)。
有些语言是在模块化的历史背景下发明出来的,比如C语言,有些则是为了满足面向对象的编程思想而构造的,比如C++。有些程序员会认为C语言是结构化编程语言,无法实现面向对象的编程思想。其实C语言也可以实现面向对象编程的思想,只是一些面向对象的工作是由程序员来完成的。同样,面向对象的编程语言也可以用来编写模块化程序。
一种信仰
就我接触过的系统来说,我只能安装使用Windows,VC/VB只能做一些简单的开发,而MACOS经历了一次安装,最后还是失败了,iPhone系统还没有机会体验。我做过AIX下的开发,目前正在做Fedora9下的开发。目标板的CPU是SH4,以后可能是MIPS。
无论是MACOS,Windows,UNIX,Linux等。,他们都有自己的追随者。我把这种现象称为信仰。对我自己来说,我相信Linux,Linux内核的源代码对我来说就是神话。
我觉得在Linux下工作是一件很享受的事情。如果你经常解决一些难题,你会的
有成就感,是Windows平台下感受不到的。所以对于这个信念,我觉得我们至少需要了解它的安装、启动、配置和安全,比如引导程序GRUB、ftp、telnet、sshd、smbd、named等服务器的配置,网络安全的配置等等。
如果你想在Linux下开发,你必须知道Linux的API和标准库,也就是libc。《如果你》...
程序是多线程的,你要掌握libpthread中函数的使用,所以GCC,GDB,LD,AS,AR,with
以及Makefile和make等工具的使用。如果你能掌握find,awk,sed,grep,od,nm,objmp
如实用的工具,会大大提高你的工作效率。
这是我的信念。
总之,一个编程语言和库,一个编程思想和一种信仰。一切都好!
2、领域知识/行业知识
我记得我的第一份工作是在一家银行做交易开发程序员。当时一家外包公司派我去工商。
银行,我对工行的业务一无所知。但我在菜鸟的时候不怕虎,却完成了一个自己一无所知的项目,只因为对自己技术实力的自信。
但事后我有点害怕,因为我不明白这个整数为什么要乘以0.456并存储在数据库里,也不知道银行在数据上有多准确,更不知道其中的细节。那我只能祈祷上帝有一天不要再扣别人的钱了。天哪,这也是我干的?!当然没那么严重:)
后来,我确实发现我很难理解银行系统。我宁愿花些时间写些小东西。
c程序也不愿意花时间同意那些苦涩的业务流程文档。所以在那家公司呆了一年就辞职了。
我觉得,大部分程序员都想做一些相对高科技的开发工作,像那种整天和数据、数据打交道的。
库开发工作,任何有野心的程序员都不愿意做,当然如果有足够的钱,我还是愿意的:)
但是现在我意识到我错了。因为这部分也是软件知识的一部分。就我目前的工作来说,不会有太大的技术难度,但是蓝光的规格挺多的,涉及的规格也挺多的,恐怕十年都掌握不了。这是领域知识或行业知识。有些人一辈子只做一件事,不一定能做好。但是我现在才做了不到两年。虽然我觉得时间不长,但也不短,尽管我一事无成。
所以,我还是觉得自己不是一个合格的开发者。软件开发的基础知识包括专业知识和行业知识。
知识,如果基础知识不全,那么这个程序员就不是一个合格高效的程序员。