A lawyer who does not understand accounting will soon not be one as she either goes broke quickly or becomes disbarred. She need not be an accountant, but she needs to thoroughly understand that most law is based on contracts and contracts require a method of accounting for the obligations between the parties.
Have you spent even an hour on an university campus in the past decade? There are dedicated programs all over the world dedicated to human computer interaction. In fact they are often very popular with students, who enjoy working with something that at least appears to be physical. The fact that you (and many employers) are ignorant of such programs does not mean there is a problem in our education system, it means there is a problem with you and those employers.
I taught a course in Information Security last year at a local college, so yes, I have been on campus and I do know about human computer interaction course. But I think they are too often taught as auxiliary to the mathematical guts that are considered the essentials. I don't know how much experience you have with developing software, but 40 years of experience has told me that the mathematical problems, although important, are the straightforward ones. The hard ones are the problem of finding out what the human needs of the system are. That involves being able to understand your clients.
I came across an example of a software system that was mathematically correct but bad software yesterday. My Credit Union unveiled a new online account reporting package. When I tried to look at my account for the last three months, it balked. It had been written for a maximum 90 day period, which is nice arithmetically, but is 2 days less than the longest three month period in a year. They had not seen the human need, but only an mathematical need.
You need to speak the language of your clients and mathematics is seldom that language. Software was once dominated by problems that had a mathematical formulation, but in this century the majority of software is used in ways that are not heavily mathematics oriented. The parts that are mathematical are generally using packages to do the heavy mathematical lifting. Proper analysis of the problem to be solved needs skills that are not often taught in CS courses because the mathematical requirements get too much emphasis.
I see a need for mathematical analysis in CS. But that should be a theoretical math degree, not a C.S. degree.
Optimal form layout is not a trivial "design" effort of making things look pretty. It is as much a deep study as circuit board layout or algorithmic complexity. It requires one to know what are the most likely paths though the form, what parts need to be emphasized, what should be put on separate forms, etc. Getting it right is the key to a usable system and one that actually works as intended.
Similarly, the art of questioning users for their needs and properly designing systems requires much more about human skills than math skills. If you exclude that from Computer Science, then you exclude anything useful about computer science.
Oh. I have also written code verifiers and mathematical software. That kind of stuff is easy exactly because the specifications are concrete and don't easily change. Having done both mathematical programming and system analysis, I found that working with people to define usable systems is much harder than designing complex algorithms.
What Fant is saying is that the emphasis on mathematics on CS is making CS miss fundamental parts of the science, not that mathematics should not be taught at all.
hat work should be done by a web designer, not a CS grad. Are you really implying that your CS is useless. Because if you don't understand the proper way to design input then you are not a good computer scientist. More bugs are generated by improper question sequences, bad documentation, poor user interfaces etc. than using a bubble sort instead of a quicksort. Very few systems never interact with humans
I am the original author and I do have a math degree from U of Waterloo and do know math very well. But math is NOT the best basis for CS, even though that is the way I learnt compute systems. I do appreciate my mathematics education and I think math should be part of a CS education, but only a relatively small part. The algorithmic problems of computer science are minuscule compared to the human interface design problems and a CS education that spends more time on algorithmic complexity than psychology produces graduates who make poor CS researchers, let alone practitioners.
The math side of CS (or engineering) is the easy part. It is the human side that provides the problems.
Obviously that guy isn't a programmer. If your program produces incorrect answers then it isn't finished, so he has never actually written a program, just started on them.
The easy part of programming is making the program work with good input. The hard part is make it fail properly with bad input.
Most security problems are in code written by jerks like your co-worker. Perhaps some one like that should be criminally liable when his company gets hacked.
However, for doing things like finding good placements for components, object-oriented procedural programming wins, IMO. It's just the natural way to describe a system, and the algorithm to affect that system.
Actually object-oriented procedural programming is a very unnatural way to program. It is what most people use because it is what most people were taught first.
Functional programming is a much more natural way to program and Lisp/Scheme/ etc. are much more powerful in writing complex algorithms simply than C++ or Java.
I have a B.Math in CS and statistics, a CISSP and have taught CS at several colleges and university, so I do know the math.
But I also have 30 years experience as a developer and consultant in IT security. CS people with your attitude are the cause of most problems with security because you assume that there always is a technical solution to problems. Real problems always involve people and people are what computers are for.
Remember Hamming's forward to his book on Numerical Analysis. "The purpose of all computing is insight, not numbers"
Without insight into human behaviour and use of computer systems, you risk creating useless shelfware or avionics software that kills people. Read the RISKS digest for the number of cases where software was written without human considerations and thereby caused harm or failed.
Figuring out which sort to use is very seldom what a computer software creator does.
mathematics as a base for CS was great in the 50's and 60's, but the real problems in computer software are people problems, not algorithmic ones. Once you program a calculation correctly, it generally stays that way.
But determining the optimal layout of a form to benefit the users of the system requires observing people and their needs. Understanding what parts of a program are going to be changed because of changing user needs is more important in program design than deciding whether you need a heap sort or insertion sort. Yes, you should know the difference, but you seldom need to program it, just choose the correct one from the system library.
CS graduates tend to design programs for machine efficiency, not human efficiency. But it is humans that are expensive, not machines.
Well, there were 80 questions on the 1890 census, so that is all you need on punch cards. And since there are only 80 columns on a punch card, you only need 80 columns on your terminal.
And 80 characters fits nicely on an 8 1/2" wide paper at 10 chars/inch with 1/4" margins. So lets be consistent here and never use more than 80.
POSIX is a standard for an API, not an operating system standard. Many non-*nix OS implement the POSIX API, including Windows NT and above, QNX etc. Having POSIZ available as an API is a requirement for many U.S. government contracts so it comes with Windows NT+.
You dont feel comfortable using _their_ code because it's GPL you mean.
Well, yes. But at what point does a piece of code become tainted in that regard? Lets say I have a function that I put out, and then someone else fixes a few little bugs - an improperly initialized variable here, a null pointer check there... How does that impact the licensing of that code? Is that code now co-owned? Do I have to remove their fixes if I want to use it? They fixed bugs, things that I may have found over time. How does that legally impact that code?
If someone else releases some code, then I spend a few days fixing bugs in it, do I have copyright on those fixes?
The line is not so clear as one would like to think. And I tend to err on the of caution when it comes to these things. The great advantage of the GPL is that you have the right to use those fixes and expand them even if you didn't make them. If the code is GPL, then anyone who uses the code is required to extend the privilege of modification and use to any fixes that they make.
This is the real value of the GPL, in that, although your improvements also become GPL code, other's improvements are also available for you to use. You contribute only a part, but you get to use the whole on same basis as everybody else. The viral nature of the GPL is what makes it commercially appealing to those who want to use software rather than sell software. Improvements from others become available for you to use, rather than being hidden in proprietary code.
You are missing the essential strength of the GPL.
When I, as a commercial developer, license software under the GPL, I am assured that my competitors will not take it and develop improvements that I cannot use. The GPL is much more corporate friendly than BSD exactly because it guarantees that the code remain open over any improvements. It means that the developments of any contributor remain available for all so that the software "evolves" and does not become proprietary and unavailable for the original contributors.
The problem of who contributes what is less of a problem, since one agrees to the GPL when you start using software with that license. Unless you re-create all the GPL'es code, your code will also be under GPL.
BSD type licenses allow a company (Apple, for instance) to start with code developed by a community of developers and then privatize it with no compensation to the originators, not even giving them the improved code.
Microsoft has become one of the biggest sellers of Linux and Linux support by this deal. Microsoft saw that many customers were going to use Linux based servers for specific applications anyway(an internal blog based on LAMP, for example).so Microsoft retains the customer while contracting out the support to Novell.
Novell gains revenue with the support contract OEM from Microsoft, Microsoft retains customer loyalty (and a cut of the support contract) and is able to sell "total solutions". Microsoft sees future revenue in customer support.
The patent stuff is more of a red herring in this deal. It is basically there to ease the deal. The main idea is that Microsoft gets to sell more stuff to customers and Novell gets more revenue. It is a win/win deal for both of them.
The situation you have brought to our attention has been investigated and treated by a member of our staff. We have enforced our AUP(Acceptable Use Policy) against the offending account.
Sympatico always enforces a strong anti-abuse policy; customers who abuse the network risk having their service terminated. Should you encounter any Internet Abuse originating within the Sympatico network, please do not hesitate to contact us again at abuse@sympatico.ca.
Please view the attached unsolicited e-mail received on Wed, 25 Apr 2007 14:57:02 -0400, apparently coming from IP 74.12.79.139 (bas1-toronto02-1242320779.dsl.bell.ca), inside a network owned by you. Please check it out, and handle your user according to your TOS/AUP. Thank you.
So you are the kind of ISP that prevents people from creating an email list for their Little League team. What you describe is deliberate crippling og service for your customers becuase you are too lazy to find out if the messages sent are legitimate or not.
There is a sourceforge project called spam-abuse that analyzes spam to find the abuse address of the ISP that is on Received line just before your MTA.
It then composes a polite reuqest to the ISP about the spam and sends the request plus the email source to the ISP.
I have been using it for about a year to complain about most of my spam and I get about a 10% response rate, with some ISPs much better than others. Smaller ISPs seem to be the best, since it really costs them in bandwith, while the bigger ones most often send a canned response.
But today, I got a real response message from Sympatico. the biggest Canadian DSL broadband supplier thanking me for the message and actually stating that they had investigated my complaint and acted on it
Carrying the school boards logic farther means that they should all resign.
Of course, the school board has no more authority than Wikipedia as they were not selected by a respected authority.
Obviously, elections can not be trusted to create valid leadership. One needs a trained authority, such as a king or dictator, to make those decisions.
There are several Canadians who have also developed programming languages of greater significance the Java, which is a derivative of C/C++ so not completely original.
Ken Iverson, who created the APL language, was a Canadian. He was giving the ACM Turing award for this, but never received the Order of Canada.
Tim Bray, one of the main developers of XML, is also a Canadian.
Rob Pike, developer of Plan9 and Inferno, and creator of many Unix utilities, is also Canadian
Brian Kernighan, co=developer of AWK and co-author of "The C Programming Language" book is also Canadian.
But user processes don't need to write to the drivers' registries, or do they?
Think of all the personal devices that connect with USB. Each of them needs to enter a new hardware driver reference in the registry. Per-user hardware might be possible, but it takes a lot more OS control to prevent conflicts
That is actually the way the registry works now.
Unless you have administrator privlieges, you can only write in the HKCU (Current User) hive of the directory.
But that is also the problem. So many pieces of software insist on using the HKLM (Local machine) hive to store information, it requires most users to run as administrator to allow their programs to run.
The equivalent of chroot would be for the local user program to think it is writing to HKLM but have a per user version of the local machine tree. This could really muck things up because drivers for hardware need to talk to the local machine and you would end up having different hardware parameters for each user, really risking chaos.
Atmospheric concentrations of heat retaining gasses (greenhouse gasses) have increased exponentially in the last 250 years.
The global average yearly temperature has increased significantly in the last 20 years.
The debate is over whether the first causes the second, because there are many other possible drivers of the second by other natural causes.
But that still means we should worry about adapting to these changes and understanding the effect they have on earth.
Algol 68 was formally defined by a transformation grammar on statements in the language. Semantics were defined by a Turing-machine like evolution of strings.
There were many competing network email services in the 70s and early 80s, based on the timesharing networks for business available then. Each created its own protocol because they all were running private networks. I worked for one comapny and it tried to sell email for commercial use, but since most business was still paper based, FAX was more often seen as the solution for electronic communication.
Even if I created a document with a word processor, it was unlikely that the intended audience also had compatible word processors or even computers. T
WIth the ubiquity of TCP/IP today, it is hard to remember that there was a time that most packet networks ran on technology based on the X.25 protocol and were very slow and expensive. Email was seen as only useful within a company and not between companies.
Email was the wave of the future for about 20 years from 1975 to 1995. It was used heaviliy in the research and academic world, but not too much by the corporate world between companies. It was only with the rise of the web, that email also became a commercial reality to exchange data between companies and individuals.
In a proper software project, comments are written before the code so they should not be written by the coder. They should reflect the block of the system design that the routine implements, the assumptions made during design etc. It should capture the design so a maintainer can avoid changing the design unintentionally.
A comment should be there to tell a future maintainer why this code exists, what was the intent and its reason for existence. It does not exist to tell how the routine is implemented, so it should seldom have action verbs.
The other useful kind of comment is the expansion of variable type declaration that describes the constraints on a variable that are not expressible in code.
A lawyer who does not understand accounting will soon not be one as she either goes broke quickly or becomes disbarred. She need not be an accountant, but she needs to thoroughly understand that most law is based on contracts and contracts require a method of accounting for the obligations between the parties.
Have you spent even an hour on an university campus in the past decade? There are dedicated programs all over the world dedicated to human computer interaction. In fact they are often very popular with students, who enjoy working with something that at least appears to be physical. The fact that you (and many employers) are ignorant of such programs does not mean there is a problem in our education system, it means there is a problem with you and those employers.
I taught a course in Information Security last year at a local college, so yes, I have been on campus and I do know about human computer interaction course. But I think they are too often taught as auxiliary to the mathematical guts that are considered the essentials. I don't know how much experience you have with developing software, but 40 years of experience has told me that the mathematical problems, although important, are the straightforward ones. The hard ones are the problem of finding out what the human needs of the system are. That involves being able to understand your clients.
I came across an example of a software system that was mathematically correct but bad software yesterday. My Credit Union unveiled a new online account reporting package. When I tried to look at my account for the last three months, it balked. It had been written for a maximum 90 day period, which is nice arithmetically, but is 2 days less than the longest three month period in a year. They had not seen the human need, but only an mathematical need.
You need to speak the language of your clients and mathematics is seldom that language. Software was once dominated by problems that had a mathematical formulation, but in this century the majority of software is used in ways that are not heavily mathematics oriented. The parts that are mathematical are generally using packages to do the heavy mathematical lifting. Proper analysis of the problem to be solved needs skills that are not often taught in CS courses because the mathematical requirements get too much emphasis.
I see a need for mathematical analysis in CS. But that should be a theoretical math degree, not a C.S. degree.
Optimal form layout is not a trivial "design" effort of making things look pretty. It is as much a deep study as circuit board layout or algorithmic complexity. It requires one to know what are the most likely paths though the form, what parts need to be emphasized, what should be put on separate forms, etc. Getting it right is the key to a usable system and one that actually works as intended.
Similarly, the art of questioning users for their needs and properly designing systems requires much more about human skills than math skills. If you exclude that from Computer Science, then you exclude anything useful about computer science.
Oh. I have also written code verifiers and mathematical software. That kind of stuff is easy exactly because the specifications are concrete and don't easily change. Having done both mathematical programming and system analysis, I found that working with people to define usable systems is much harder than designing complex algorithms.
What Fant is saying is that the emphasis on mathematics on CS is making CS miss fundamental parts of the science, not that mathematics should not be taught at all.
I am the original author and I do have a math degree from U of Waterloo and do know math very well. But math is NOT the best basis for CS, even though that is the way I learnt compute systems. I do appreciate my mathematics education and I think math should be part of a CS education, but only a relatively small part. The algorithmic problems of computer science are minuscule compared to the human interface design problems and a CS education that spends more time on algorithmic complexity than psychology produces graduates who make poor CS researchers, let alone practitioners.
The math side of CS (or engineering) is the easy part. It is the human side that provides the problems.
Obviously that guy isn't a programmer. If your program produces incorrect answers then it isn't finished, so he has never actually written a program, just started on them.
The easy part of programming is making the program work with good input. The hard part is make it fail properly with bad input.
Most security problems are in code written by jerks like your co-worker. Perhaps some one like that should be criminally liable when his company gets hacked.
Actually object-oriented procedural programming is a very unnatural way to program. It is what most people use because it is what most people were taught first.
Functional programming is a much more natural way to program and Lisp/Scheme/ etc. are much more powerful in writing complex algorithms simply than C++ or Java.
I have a B.Math in CS and statistics, a CISSP and have taught CS at several colleges and university, so I do know the math.
But I also have 30 years experience as a developer and consultant in IT security. CS people with your attitude are the cause of most problems with security because you assume that there always is a technical solution to problems. Real problems always involve people and people are what computers are for.
Remember Hamming's forward to his book on Numerical Analysis.
"The purpose of all computing is insight, not numbers"
Without insight into human behaviour and use of computer systems, you risk creating useless shelfware or avionics software that kills people. Read the RISKS digest for the number of cases where software was written without human considerations and thereby caused harm or failed.
Figuring out which sort to use is very seldom what a computer software creator does.
mathematics as a base for CS was great in the 50's and 60's, but the real problems in computer software are people problems, not algorithmic ones. Once you program a calculation correctly, it generally stays that way.
But determining the optimal layout of a form to benefit the users of the system requires observing people and their needs. Understanding what parts of a program are going to be changed because of changing user needs is more important in program design than deciding whether you need a heap sort or insertion sort. Yes, you should know the difference, but you seldom need to program it, just choose the correct one from the system library.
CS graduates tend to design programs for machine efficiency, not human efficiency. But it is humans that are expensive, not machines.
Well, there were 80 questions on the 1890 census, so that is all you need on punch cards. And since there are only 80 columns on a punch card, you only need 80 columns on your terminal.
And 80 characters fits nicely on an 8 1/2" wide paper at 10 chars/inch with 1/4" margins. So lets be consistent here and never use more than 80.
POSIX is a standard for an API, not an operating system standard. Many non-*nix OS implement the POSIX API, including Windows NT and above, QNX etc. Having POSIZ available as an API is a requirement for many U.S. government contracts so it comes with Windows NT+.
Well, yes. But at what point does a piece of code become tainted in that regard? Lets say I have a function that I put out, and then someone else fixes a few little bugs - an improperly initialized variable here, a null pointer check there... How does that impact the licensing of that code? Is that code now co-owned? Do I have to remove their fixes if I want to use it? They fixed bugs, things that I may have found over time. How does that legally impact that code?
If someone else releases some code, then I spend a few days fixing bugs in it, do I have copyright on those fixes?
The line is not so clear as one would like to think. And I tend to err on the of caution when it comes to these things. The great advantage of the GPL is that you have the right to use those fixes and expand them even if you didn't make them. If the code is GPL, then anyone who uses the code is required to extend the privilege of modification and use to any fixes that they make.
This is the real value of the GPL, in that, although your improvements also become GPL code, other's improvements are also available for you to use. You contribute only a part, but you get to use the whole on same basis as everybody else. The viral nature of the GPL is what makes it commercially appealing to those who want to use software rather than sell software. Improvements from others become available for you to use, rather than being hidden in proprietary code.
You are missing the essential strength of the GPL.
When I, as a commercial developer, license software under the GPL, I am assured that my competitors will not take it and develop improvements that I cannot use. The GPL is much more corporate friendly than BSD exactly because it guarantees that the code remain open over any improvements. It means that the developments of any contributor remain available for all so that the software "evolves" and does not become proprietary and unavailable for the original contributors.
The problem of who contributes what is less of a problem, since one agrees to the GPL when you start using software with that license. Unless you re-create all the GPL'es code, your code will also be under GPL.
BSD type licenses allow a company (Apple, for instance) to start with code developed by a community of developers and then privatize it with no compensation to the originators, not even giving them the improved code.
Microsoft has become one of the biggest sellers of Linux and Linux support by this deal. Microsoft saw that many customers were going to use Linux based servers for specific applications anyway(an internal blog based on LAMP, for example).so Microsoft retains the customer while contracting out the support to Novell.
Novell gains revenue with the support contract OEM from Microsoft, Microsoft retains customer loyalty (and a cut of the support contract) and is able to sell "total solutions". Microsoft sees future revenue in customer support.
The patent stuff is more of a red herring in this deal. It is basically there to ease the deal. The main idea is that Microsoft gets to sell more stuff to customers and Novell gets more revenue. It is a win/win deal for both of them.
Greetings,
The situation you have brought to our attention has been investigated
and treated by a member of our staff. We have enforced our
AUP(Acceptable Use Policy) against the offending account.
Sympatico always enforces a strong anti-abuse policy; customers who
abuse the network risk having their service terminated. Should you
encounter any Internet Abuse originating within the Sympatico network,
please do not hesitate to contact us again at abuse@sympatico.ca.
Regards,
Steve
Internet Security Analyst
Bell Internet Management Services
http://security.sympatico.ca/
abuse@sympatico.ca
Original Message Follows:
Dear Sirs,
Please view the attached unsolicited e-mail received on Wed,
25 Apr 2007 14:57:02 -0400, apparently coming from IP 74.12.79.139
(bas1-toronto02-1242320779.dsl.bell.ca), inside a network owned by you.
Please check it out, and handle your user according to your TOS/AUP.
Thank you.
So you are the kind of ISP that prevents people from creating an email list for their Little League team. What you describe is deliberate crippling og service for your customers becuase you are too lazy to find out if the messages sent are legitimate or not.
There is a sourceforge project called spam-abuse that analyzes spam to find the abuse address of the ISP that is on Received line just before your MTA. It then composes a polite reuqest to the ISP about the spam and sends the request plus the email source to the ISP.
I have been using it for about a year to complain about most of my spam and I get about a 10% response rate, with some ISPs much better than others. Smaller ISPs seem to be the best, since it really costs them in bandwith, while the bigger ones most often send a canned response.
But today, I got a real response message from Sympatico. the biggest Canadian DSL broadband supplier thanking me for the message and actually stating that they had investigated my complaint and acted on itCarrying the school boards logic farther means that they should all resign.
Of course, the school board has no more authority than Wikipedia as they were not selected by a respected authority.
Obviously, elections can not be trusted to create valid leadership. One needs a trained authority, such as a king or dictator, to make those decisions.
There are several Canadians who have also developed programming languages of greater significance the Java, which is a derivative of C/C++ so not completely original.
Ken Iverson, who created the APL language, was a Canadian. He was giving the ACM Turing award for this, but never received the Order of Canada.
Tim Bray, one of the main developers of XML, is also a Canadian.
Rob Pike, developer of Plan9 and Inferno, and creator of many Unix utilities, is also Canadian
Brian Kernighan, co=developer of AWK and co-author of "The C Programming Language" book is also Canadian.
There are even more.Because they were treating it like a Florida swamp land deal. They had just left ICEland and were trying to encourage new settlers.
Think of all the personal devices that connect with USB. Each of them needs to enter a new hardware driver reference in the registry. Per-user hardware might be possible, but it takes a lot more OS control to prevent conflicts
C:\WINDOWS>wmic startup
But that is also the problem. So many pieces of software insist on using the HKLM (Local machine) hive to store information, it requires most users to run as administrator to allow their programs to run.
The equivalent of chroot would be for the local user program to think it is writing to HKLM but have a per user version of the local machine tree. This could really muck things up because drivers for hardware need to talk to the local machine and you would end up having different hardware parameters for each user, really risking chaos.
- Atmospheric concentrations of heat retaining gasses (greenhouse gasses) have increased exponentially in the last 250 years.
- The global average yearly temperature has increased significantly in the last 20 years.
The debate is over whether the first causes the second, because there are many other possible drivers of the second by other natural causes. But that still means we should worry about adapting to these changes and understanding the effect they have on earth.Algol 68 was formally defined by a transformation grammar on statements in the language. Semantics were defined by a Turing-machine like evolution of strings.
Even if I created a document with a word processor, it was unlikely that the intended audience also had compatible word processors or even computers. T WIth the ubiquity of TCP/IP today, it is hard to remember that there was a time that most packet networks ran on technology based on the X.25 protocol and were very slow and expensive. Email was seen as only useful within a company and not between companies.
Email was the wave of the future for about 20 years from 1975 to 1995. It was used heaviliy in the research and academic world, but not too much by the corporate world between companies. It was only with the rise of the web, that email also became a commercial reality to exchange data between companies and individuals.
A comment should be there to tell a future maintainer why this code exists, what was the intent and its reason for existence. It does not exist to tell how the routine is implemented, so it should seldom have action verbs.
The other useful kind of comment is the expansion of variable type declaration that describes the constraints on a variable that are not expressible in code.