Yes. However, I disagree with some of his conclusions.
For one thing, shops do not leverage the amount of modularization that they could, opting instead to reinvent the wheel during every new project. Some of this is laziness, some of this is the common belief that obscurity increases continued employability, and finally the lack of a common 'toolset' that programmers can bring with them between corporations (mostly having to do with intellectual property and/or licensing issues - and the fact that whatever libraries are used usually fall into those catagories). Inefficiencies are unacceptably high, as a result.
How do we fix this? I think one of the things is to adopt languages that have some very powerful built-in and extensible libraries that are freely available - and thus able to translate from job to job across enterprises. Good candidates are Perl and Python - both of which have a very rich - and more importantly accessible - set of modules for doing just about any programming job you can think of. These languages, while not efficient in terms of loading, and to a lesser extent execution times - are sufficient for the vast majority of programming that is the current day to day projects in business. Advances in hardware speed have made these languages very viable for most jobs. (I am not saying every job - there will always be a need for assembly language, for example, in the embedded space - and to a lesser extent for increasing system performance - for OS efficiencies, video games and simulations - but we must admit that advances in hardware have made this less of a requirement as time goes on).
Brooks also mentions rapid prototyping, but doesn't say much about this idea taken to the extreme in the form of xtreme programming and iterative development lifecycles. As has been seen in quite a few open source development projects - building soon and often returns more useful feedback about an application than traditional methods alone.
Finally, his ideas regarding software ownership and compensation are not in tune with the reality that is the internet in the 21st century. My worry is that considering software as IP only stifles innovation by locking up the possible expansion of ideas. All of us stand upon the shoulders of those who came before; IP disrupts that process (think of all the developments we have seen in the last century that would have been blocked as a result of heavy handed IP enforcement).
While I may not hold out the hope for a software development panacea, I similarly believe that it is too premature to say that there is no new ground to be investigated, either. These statements make me think of IBM stating that there will not be a need for more than 4 computers world wide - or Bill Gates assertion that no one will need more than 640 Kbytes of ram. If there is one thing we can be sure of, it is the pervasiveness of change.
Okay, then I take it you are someone who has taught himself to program, rather than going through a computer science curiculum{sp?}?
Yes and no. I am a CS graduate. However, I was writing programs long before I entered the university - having taken a computer science course in Highschool in 1981. So, no - I am not prejudiced out of ignorance - just experience.
Time and space complexity analysis should take no more than five minutes for even the slowest of students
Multiply this times hundreds or thousands of modules and millions of lines of code; you can certainly get an overall feel for it (and perhaps that is all that is needed) - but you can not, with any certainty, validate all possible paths through a complex system before writing any code.
You see my point. When a system reaches a certain level of complexity, making something that is properly modularized, well-structured, and easily debugged is analougous to sharpening the saw. It takes a lot of time, but the alternative is worse.
I agree 100% with that. However, the team I have to deal with produces buggy, hard to extend, poorly structured applications that don't even meet 50% of the functionality as defined in the functional specs.
Turning programming back from a science/engineering field into a craft will definitely NOT help.
I agree. Perhaps I did not explain myself as well as I should have. I am not advocating turning CS into a craft. What I am advocating is bringing those elements of craftwork that are missing from the CS cirriculum into the mix, while keeping the proper level of math. Right now I think the degree is imbalanced; I advocate a balanced approach to make the theoretical and the practical mesh for the benefit of the graduates.
Every discipline has this to a certain extent: English majors learn to write by not only studying grammer, but by writing. Physicists(sic) not only study physics, they perform experiments to tie their observations to the theory behind it. On the same token, Computer Science majors should similarly do more hands on practical work. Most, if not all, of the non-mathematical degrees prepare the holder in some small way for what they can expect to see in the real world. My frustration stems from neither the CS nor the CIS degrees filling that need in any significant manner.
I read of a similar idea here on/. - the idea was to build a free net ontop of the existing network so as to avoid censorship/filtering etc.
A collection of localized wifi networks interconnected via VPN would probably do the trick. The agreement would be not to provide an internet gateway - just gatways to other local nets. A certain level of trust would have to be established between purveyors of these nodes - like FIDOnet back in the day.
FIDOnet is probably a good model for this - provided you wanted to reach further than your local community. Actually FIDOnet is still around - and might be a good place to look for information.
The upside of having a completely isolated network would be that warezdoodz would probably find it frustrating and leave (nothing real 'juicy' on the servers and connected machines - and no gateway to the larger internet). On the other hand, crackers might consider it an oasis and/or a secure vault for storing or passing their ill-gotten booty. You would have to weigh the potential threats with the value of such a system before commiting. You definitely don't want the FBI to come calling because of some script kiddie's actions on your network - or heaven forbid, a terrorist cell!
Re:journalists
on
Meet Joe Blog
·
· Score: 2, Insightful
No longer? Take a look at some of the so-called journalism that went on throughout history.
Today is no different than yesterday - or yesteryear for that matter. Our perceptions of journalistic integrity is a myth.
It all stems from the business imperative - mostly driven by marketing: we have to have it now and it has to work.
If a developer has the authority to do these kinds of jobs, then the company is at fault for either A) not giving him the time and resources to do the job right, B) not paying him a justifiable salary for jumping through the flaming hoops , and C) not accounting for the inevitable burn-out that will be the end result.
As one of my cohorts is fond of quoting, "if it wasn't easy to build, it shouldn't be easy to understand."
Someone needs to invent a different paradigm for IM and open source it. Of course, it has to have the same or better user adoption levels as AIM to make it worthwhile.
Is anyone out there in the ether doing this already?
I keep all my important documentation in a database accessible via web browser; its completely searchable and I can create whatever metaphor I find suitable - not to mention the ability to store metadata along with the files. Backup and restoration is easy too.
For the few files that reside on my workstation disk (mainly configuration files) I use my handy dandy command line interface - or emacs. The few nonconfiguration documents I use sit in my home directory - merely as a weigh station on the way to being uploaded to the database.
Organization of my directories on disk is a no-brainer when the home directory is essentially a 'scratch' pad.
Perhaps you could enlighten me on what it is you do?
I work for a telecommunications company. I design and build tools for operational users, and do system integration where needed to glue multiple diverse systems together. I am a jack of all trades.
most commercial programmers do not solve problems like that. They solve problems which fall squarely into the realm of the mathematically tractible...
You are right and wrong at the same time. You are right that the problems are computable. However, what you miss is that the reality of tight deadlines prevent you from taking careful mathematical analysis of every aspect of a system. There are plenty of off the shelf systems that are suitable for most applications - both open source and commercial - so at times it becomes a choice between implementation versus acquisition. We have an IT shop that does in house development - but they end up going over budget and missing their milestones on a consistent basis (they are a strict waterfall lifecycle development shop - and I suspect they do all the mathematical computability and algorithm analysis that you advocate for every module). I have come to the conclusion that it is better for me to do my own development in most cases - to the satisfaction of my user community.
The business world is messy - and marketing departments drive unrealistic schedules - that we as developers must meet regardless, once the decision is made (and believe me, we argue for more realistic timelines, but we are told that the schedules are 'challenging' - and failure is not an option - so we do what we can not to fail). I would hazzard a guess that most of the CS graduates entering the business world are under these same pressures.
Now I must confess I am puzzled. What exactly are you advocating?
Given the above reality, the mathematical side of the computer science cirriculum must be balanced with a more artistic emphasis; professors need to look at what is going on in the extreme programming movement - incorporate new ways of thinking about software development outside of traditional patterns.
Additionally, I think it does a disservice to both the CS and the IS graduates to keep their cirriculas(sic) apart; the IS folks need more of the theoretical side; the CS folks need more of the practical side. Both suffer as a result when confronted with a challenging business environment that requires both. Perhaps there needs to be a third discipline that is neither strictly CS or IS (just throwing ideas out here).
I don't have all the answers - but I do recognize a problem when I see it. How would you deal with it?
I learned Fortran back in 1980. Back then it was seen as a general purpose language with a strong mathematical underpinning. However, today it is seen as useful mainly in scientific applications where it can leverage its number crunching abilities.
Whether you use it as your general purpose language, or not, the fact is it has been eclipsed by other languages in popular use (C/C++, Java, Perl, Python). Fortran wouldn't be my first choice for many tasks that some of the newer languages make easy, systems programming, text manipulation, GUI integration, etc.
While I disagree that it is a 'dead' language - I think you will agree with me that the number of people who are conversant in it are few and far between outside of Universities and research labs.
I guess it is just my perception of math versus logic instead of math is logic that is my achilles heel. Discrete math was a breeze for me, whereas Calculus kicked my arse.
Its been a while - I probably left some things off.
Computability was covered in a Datastructures and Algorithms course that I don't remember being very heavy on math. For that matter Algorithms were covered in the same course - as the name implies. I didn't consider this course a 'math' course.
I also had to take a discrete math - I forgot that one - I don't remember that being very difficult - and I don't remember considering it 'math' as much as 'logic' - to my mind apples and oranges (logic, boolean algebra, etc) . In addition, I had a mandatory logic design course that built upon that knowledge, but wasn't too math intensive (the design of physical circuits - basically simple microchip design) - although if you messed up the math, your circuit wouldn't work in the simulator.
You could be right about the 'core' science majors needing calculus, versus it being a CS specific requirement - I am 40, so my mind could be starting to decay.:p
'Computer Science' math - didn't really seem like math to me (in comparison to calculus, for example) - and is something I would want to see CIS students taking, as well - which I do believe would make them better programmers. Understanding logic and computer architecture is key, in my mind.
Maybe its just a mental hangup for me - or maybe I just lucked out and got cruddy Calculus teachers...?
What it should do instead is teach you how to adapt quickly to any computer environment.
Agreed.
Teaching you the mathematical concepts behind computer science does this.
Understanding computer architecture does not require calculus. Learning how to use the most effective algorithm does not require math - except in the most narrow of problem domains that few developers ever have to enter. Usually algebra or precalculus is sufficient for most mathematical problems encountered - perhaps a bit of statistics thrown in on the side.
I'm not sure where you went, so I'm not sure what exactly you mean by a "mathematical rigor"...
For my degree I had to complete the following:
College Algebra Calculus I, II and III Linear Algebra Statistics I and II
From my experience, this is more math than I needed. I could have spent some of those 21 hours on Computer Science electives that would have been more useful to me from a practical standpoint when I entered the job force. All of that math should not have been required - some of it, yes; all of it - no.
The real issue here is that a university education is not designed to prepare you for the work you will be doing in the real world. The people who develop the cirriculi are too far removed from that world.
I have cable TV, and it often angers me that not only do I have to pay for the service, I still have to sit through commercials anyway.
(back in the day, when cable TV was in its infancy, there were no commercials on the tube)
So, assuming advertising revenue from commercials on TV is consistent over the years - cable TV must be raking in the bucks - and I have no better experience than I had in the 1970s during any given time slice (i.e. number of minutes of programming versus minutes of commercials).
I will admit I have more choices of channels; however, I don't think that capability alone is worth $50+ a month.
The problem is the imbalance between the focus on the 'how and why' at the expense of recognizing other methods that would be more appropriate in a given situation.
There is a battle that is raging now between the old school 'process' camp (waterfall development is the only way to do development), and the extreme programming camp that is emblematic of the problem. The process people do not want to change and see xtreme programming as undisciplined and unscientific. The xtreme camp sees the benefit that tight feedback loops can provide for software development.
Historically, when computers first were developed, the need for rigorous attention to accuracy was necessary. Why? Due primarily to the jobs these early machines performed: number crunching.
Later computers were put to the task of storing and organizing textual data. Today most of the work done by computers falls into this category - and the data types have expanded to include multimedia objects. Furthermore, the complexity of these systems has gone up due to the need to tie many disparate systems together.
This will be the most common computer programing and development work in the future - as stand alone distributed applications give way to mesh/grid systems.
We need to be training people today to work in these environments.
Will a narrowly defined Computer Science cirriculum support this? No. I was a CS major - and I learned over 50% of what I needed to do the job. The focus on mathematical rigor was only 5% of my day to day job - whereas it was 80% of my university training.
Will a narrowly defined Information Technology cirriculum do the job. No. As I said, having trained these people - they do not have the deeper skills to succeed at the task.
This is why I would recommend something else - keep the technical degree for those who will be involved in pushing the frontiers of computer science, but 'beef up' the IT/CIS cirriculum to make that degree more applicable to the reality that is fast approaching. The reason I went the CS route in the first place was because the IT/CIS cirriculum was so flimsy. Sadly, the CS course work was beyond what I needed - also leaving a gap. What I propose is to fill that gap - because that gap is where most of the students will be working after they graduate.
You guys must all be in research or universities. I don't have a single system that I work with that uses AI - and I doubt 99.999% of the programmers out there in the business world do either. Most people deal with storing and retrieving data, and displaying that data in a meaningful way (creating information from the data).
The assumption that heuristics lead to poor programs is false. This gets to the core of the problem: the mathematics field is too invested in exact proofs. On the other hand, in reality - where the rubber meets the road - that level of accuracy is not attainable most of the time due to incomplete and/or imperfect data. Why adhere to something that does not represent reality?
Rather than basing our development model on mathematical rigor, we should instead look to the most complex thinking system in the world: human beings. We go blissfully through life dealing with contradictions, incorrect and incomplete information with ease. Our software designs should emulate this behavior, and be as fail safe and robust. What do humans depend upon most often? Heuristics.
Don't get me wrong (and I think some of you have) I am not advocating an abandonment of mathematics in computing. On the contrary. The key issue is that we, as CS graduates, must walk a fine line - a middle way - where we pick and choose when to use one method over another. My point is we have a tendency, due to the culture of the Mathematics department, to put more emphasis on proving our algorithms are correct - rather than getting any practical tools in user's hands. We are not working with marble; computer programs are extremely maleable objects - user feedback can drive the heuristic model as we shape the system over time. Thinking - which is what a computer emulates - is not all about math. We must realistically balance the two methods without becoming zealously attached to either.
This whole thread is precisely why Computer Science should have never been allowed to fall into the Mathematics Department.
How many practical computing problems have I run into in my carreer that have been NP complete? 0 - in 10+ years.
99.999% of the computer science graduates will not have to deal with this issue - which is mainly concerned with or cutting edge theoretical issues (for example, how to do ray tracing in real time in a video game). Most programming is algorithmic, rather than mathematical, and what little math is needed is generally polynomial or matrix transformations.
In many instances rigorous mathematics isn't needed at all, and fuzzy logic or rules of thumb can be used effectively to get the job done. However, due to computer science being tied at the hip to mathematics, people are getting educations which don't mesh with the reality they see in the business world (where 85% - give or take - of the graduates will end up).
I propose the 2 following divisions of computer science:
Theoretical Computing - the mathematics ladden branch - includes logic design and engineering, as well as software to support 'deep science' in peripheral disciplines as well as applied to computing and theoretical mathematics.
Algorithmic Computing - the art of computer programming and system integration. This is the trial and error, get your hands dirty department.
Finally, I don't know if I like the idea of having a seperate Information Technology curriculum in the business department. From my experience, I always end up having to teach these folks new on the job things that I learned in school (if they need to learn it, they should pay for learning it - praticularly if they end up with a salary equivalent to mine). They are getting an incomplete education that is not useful in an environment where systems integration is the norm, and thus being a jack of all trades is more important than being able to write an SQL query or kick out a Cobol program to calculate the depreciation of someone's stock portfolio.
There are pockets of intelligence, empathy, and common sense still alive and well in this country...sadly, the current administration would have none of that.
Just as some Americans have stereotypes about foreign cultures, stereotypes abound about the arrogant Americans. For every loudmouthed gasbag you encounter, there are 20 more Americans going quietly about their business.
It seems X has been traditionally used in mathematics as the most common unknown variable in equations. This usage predates, and carried over into all the other modes of its use - particlarly regarding secret or unknown qualities.
I've gone back to my old reliable Slackware distro, after many years of trying others.
One nice thing about it is that it defaults to loading into command line mode - you have to manually run 'startx' or set up the default run level to include the graphical login.
My server and my firewall both stay in text mode - which gives both boxes an added boost in performance - both due to cpu utilization and more free memory. My workstation runs in graphical mode on a Pentium 500 mhz machine - with 128Mb ram - and it runs just fine (certainly faster than the windows ME that was previously on it). The Server is also a 500 mhz machine, and my firewall is a 120 mhz machine. I run gnome on my workstation - and is pretty snappy for such an older machine.
Yes. However, I disagree with some of his conclusions.
For one thing, shops do not leverage the amount of modularization that they could, opting instead to reinvent the wheel during every new project. Some of this is laziness, some of this is the common belief that obscurity increases continued employability, and finally the lack of a common 'toolset' that programmers can bring with them between corporations (mostly having to do with intellectual property and/or licensing issues - and the fact that whatever libraries are used usually fall into those catagories). Inefficiencies are unacceptably high, as a result.
How do we fix this? I think one of the things is to adopt languages that have some very powerful built-in and extensible libraries that are freely available - and thus able to translate from job to job across enterprises. Good candidates are Perl and Python - both of which have a very rich - and more importantly accessible - set of modules for doing just about any programming job you can think of. These languages, while not efficient in terms of loading, and to a lesser extent execution times - are sufficient for the vast majority of programming that is the current day to day projects in business. Advances in hardware speed have made these languages very viable for most jobs. (I am not saying every job - there will always be a need for assembly language, for example, in the embedded space - and to a lesser extent for increasing system performance - for OS efficiencies, video games and simulations - but we must admit that advances in hardware have made this less of a requirement as time goes on).
Brooks also mentions rapid prototyping, but doesn't say much about this idea taken to the extreme in the form of xtreme programming and iterative development lifecycles. As has been seen in quite a few open source development projects - building soon and often returns more useful feedback about an application than traditional methods alone.
Finally, his ideas regarding software ownership and compensation are not in tune with the reality that is the internet in the 21st century. My worry is that considering software as IP only stifles innovation by locking up the possible expansion of ideas. All of us stand upon the shoulders of those who came before; IP disrupts that process (think of all the developments we have seen in the last century that would have been blocked as a result of heavy handed IP enforcement).
While I may not hold out the hope for a software development panacea, I similarly believe that it is too premature to say that there is no new ground to be investigated, either. These statements make me think of IBM stating that there will not be a need for more than 4 computers world wide - or Bill Gates assertion that no one will need more than 640 Kbytes of ram. If there is one thing we can be sure of, it is the pervasiveness of change.
Be sure to shoot up the lawyer's offices, and not the innocent call center or technical operations folks, who are geeks like the rest of us...
Okay, then I take it you are someone who has taught himself to program, rather than going through a computer science curiculum{sp?}?
Yes and no. I am a CS graduate. However, I was writing programs long before I entered the university - having taken a computer science course in Highschool in 1981. So, no - I am not prejudiced out of ignorance - just experience.
Time and space complexity analysis should take no more than five minutes for even the slowest of students
Multiply this times hundreds or thousands of modules and millions of lines of code; you can certainly get an overall feel for it (and perhaps that is all that is needed) - but you can not, with any certainty, validate all possible paths through a complex system before writing any code.
You see my point. When a system reaches a certain level of complexity, making something that is properly modularized, well-structured, and easily debugged is analougous to sharpening the saw. It takes a lot of time, but the alternative is worse.
I agree 100% with that. However, the team I have to deal with produces buggy, hard to extend, poorly structured applications that don't even meet 50% of the functionality as defined in the functional specs.
Turning programming back from a science/engineering field into a craft will definitely NOT help.
I agree. Perhaps I did not explain myself as well as I should have. I am not advocating turning CS into a craft. What I am advocating is bringing those elements of craftwork that are missing from the CS cirriculum into the mix, while keeping the proper level of math. Right now I think the degree is imbalanced; I advocate a balanced approach to make the theoretical and the practical mesh for the benefit of the graduates.
Every discipline has this to a certain extent: English majors learn to write by not only studying grammer, but by writing. Physicists(sic) not only study physics, they perform experiments to tie their observations to the theory behind it. On the same token, Computer Science majors should similarly do more hands on practical work. Most, if not all, of the non-mathematical degrees prepare the holder in some small way for what they can expect to see in the real world. My frustration stems from neither the CS nor the CIS degrees filling that need in any significant manner.
Definitely sounds better than "reflecto-rectum"...
I read of a similar idea here on /. - the idea was to build a free net ontop of the existing network so as to avoid censorship/filtering etc.
A collection of localized wifi networks interconnected via VPN would probably do the trick. The agreement would be not to provide an internet gateway - just gatways to other local nets. A certain level of trust would have to be established between purveyors of these nodes - like FIDOnet back in the day.
FIDOnet is probably a good model for this - provided you wanted to reach further than your local community. Actually FIDOnet is still around - and might be a good place to look for information.
The upside of having a completely isolated network would be that warezdoodz would probably find it frustrating and leave (nothing real 'juicy' on the servers and connected machines - and no gateway to the larger internet). On the other hand, crackers might consider it an oasis and/or a secure vault for storing or passing their ill-gotten booty. You would have to weigh the potential threats with the value of such a system before commiting. You definitely don't want the FBI to come calling because of some script kiddie's actions on your network - or heaven forbid, a terrorist cell!
No longer? Take a look at some of the so-called journalism that went on throughout history.
Today is no different than yesterday - or yesteryear for that matter. Our perceptions of journalistic integrity is a myth.
It all stems from the business imperative - mostly driven by marketing: we have to have it now and it has to work.
If a developer has the authority to do these kinds of jobs, then the company is at fault for either A) not giving him the time and resources to do the job right, B) not paying him a justifiable salary for jumping through the flaming hoops , and C) not accounting for the inevitable burn-out that will be the end result.
As one of my cohorts is fond of quoting, "if it wasn't easy to build, it shouldn't be easy to understand."
Someone needs to invent a different paradigm for IM and open source it. Of course, it has to have the same or better user adoption levels as AIM to make it worthwhile.
Is anyone out there in the ether doing this already?
I keep all my important documentation in a database accessible via web browser; its completely searchable and I can create whatever metaphor I find suitable - not to mention the ability to store metadata along with the files. Backup and restoration is easy too.
For the few files that reside on my workstation disk (mainly configuration files) I use my handy dandy command line interface - or emacs. The few nonconfiguration documents I use sit in my home directory - merely as a weigh station on the way to being uploaded to the database.
Organization of my directories on disk is a no-brainer when the home directory is essentially a 'scratch' pad.
Perhaps you could enlighten me on what it is you do?
I work for a telecommunications company. I design and build tools for operational users, and do system integration where needed to glue multiple diverse systems together. I am a jack of all trades.
most commercial programmers do not solve problems like that. They solve problems which fall squarely into the realm of the mathematically tractible...
You are right and wrong at the same time. You are right that the problems are computable. However, what you miss is that the reality of tight deadlines prevent you from taking careful mathematical analysis of every aspect of a system. There are plenty of off the shelf systems that are suitable for most applications - both open source and commercial - so at times it becomes a choice between implementation versus acquisition. We have an IT shop that does in house development - but they end up going over budget and missing their milestones on a consistent basis (they are a strict waterfall lifecycle development shop - and I suspect they do all the mathematical computability and algorithm analysis that you advocate for every module). I have come to the conclusion that it is better for me to do my own development in most cases - to the satisfaction of my user community.
The business world is messy - and marketing departments drive unrealistic schedules - that we as developers must meet regardless, once the decision is made (and believe me, we argue for more realistic timelines, but we are told that the schedules are 'challenging' - and failure is not an option - so we do what we can not to fail). I would hazzard a guess that most of the CS graduates entering the business world are under these same pressures.
Now I must confess I am puzzled. What exactly are you advocating?
Given the above reality, the mathematical side of the computer science cirriculum must be balanced with a more artistic emphasis; professors need to look at what is going on in the extreme programming movement - incorporate new ways of thinking about software development outside of traditional patterns.
Additionally, I think it does a disservice to both the CS and the IS graduates to keep their cirriculas(sic) apart; the IS folks need more of the theoretical side; the CS folks need more of the practical side. Both suffer as a result when confronted with a challenging business environment that requires both. Perhaps there needs to be a third discipline that is neither strictly CS or IS (just throwing ideas out here).
I don't have all the answers - but I do recognize a problem when I see it. How would you deal with it?
I learned Fortran back in 1980. Back then it was seen as a general purpose language with a strong mathematical underpinning. However, today it is seen as useful mainly in scientific applications where it can leverage its number crunching abilities.
Whether you use it as your general purpose language, or not, the fact is it has been eclipsed by other languages in popular use (C/C++, Java, Perl, Python). Fortran wouldn't be my first choice for many tasks that some of the newer languages make easy, systems programming, text manipulation, GUI integration, etc.
While I disagree that it is a 'dead' language - I think you will agree with me that the number of people who are conversant in it are few and far between outside of Universities and research labs.
Point well taken.
I guess it is just my perception of math versus logic instead of math is logic that is my achilles heel. Discrete math was a breeze for me, whereas Calculus kicked my arse.
My wife likes to go outside on the porch and watch lightening storms. I live in Texas - so the storms can get pretty intense.
I prefer to stay inside, and not present a path to ground (or more accurately a path from ground) for the random bolts.
Several books I have sitting on the shelf over my monitors - that I occaisionally peek into:
Sparc Architecture, Assembly Language Programming & C - Paul - Prentice Hall
Using Assembly Language 2nd Edition - Wyatt - QUE programming series
Turbo Assembler 3.0 - User Guide - Borland
Mastering Turbo Assembler - Swan - Hayden Books
Peter Norton's Assembly Language Book for the IBM PC - Revised and Expanded - Norton & Socha - Prentice Hall
Ahhh - reminds me of the good old days! Back when Real Programmers roamed the Earth...
Its been a while - I probably left some things off.
:p
Computability was covered in a Datastructures and Algorithms course that I don't remember being very heavy on math. For that matter Algorithms were covered in the same course - as the name implies. I didn't consider this course a 'math' course.
I also had to take a discrete math - I forgot that one - I don't remember that being very difficult - and I don't remember considering it 'math' as much as 'logic' - to my mind apples and oranges (logic, boolean algebra, etc) . In addition, I had a mandatory logic design course that built upon that knowledge, but wasn't too math intensive (the design of physical circuits - basically simple microchip design) - although if you messed up the math, your circuit wouldn't work in the simulator.
You could be right about the 'core' science majors needing calculus, versus it being a CS specific requirement - I am 40, so my mind could be starting to decay.
'Computer Science' math - didn't really seem like math to me (in comparison to calculus, for example) - and is something I would want to see CIS students taking, as well - which I do believe would make them better programmers. Understanding logic and computer architecture is key, in my mind.
Maybe its just a mental hangup for me - or maybe I just lucked out and got cruddy Calculus teachers...?
What it should do instead is teach you how to adapt quickly to any computer environment.
Agreed.
Teaching you the mathematical concepts behind computer science does this.
Understanding computer architecture does not require calculus. Learning how to use the most effective algorithm does not require math - except in the most narrow of problem domains that few developers ever have to enter. Usually algebra or precalculus is sufficient for most mathematical problems encountered - perhaps a bit of statistics thrown in on the side.
I'm not sure where you went, so I'm not sure what exactly you mean by a "mathematical rigor"...
For my degree I had to complete the following:
College Algebra
Calculus I, II and III
Linear Algebra
Statistics I and II
From my experience, this is more math than I needed. I could have spent some of those 21 hours on Computer Science electives that would have been more useful to me from a practical standpoint when I entered the job force. All of that math should not have been required - some of it, yes; all of it - no.
The real issue here is that a university education is not designed to prepare you for the work you will be doing in the real world. The people who develop the cirriculi are too far removed from that world.
I have cable TV, and it often angers me that not only do I have to pay for the service, I still have to sit through commercials anyway.
(back in the day, when cable TV was in its infancy, there were no commercials on the tube)
So, assuming advertising revenue from commercials on TV is consistent over the years - cable TV must be raking in the bucks - and I have no better experience than I had in the 1970s during any given time slice (i.e. number of minutes of programming versus minutes of commercials).
I will admit I have more choices of channels; however, I don't think that capability alone is worth $50+ a month.
The problem is the imbalance between the focus on the 'how and why' at the expense of recognizing other methods that would be more appropriate in a given situation.
There is a battle that is raging now between the old school 'process' camp (waterfall development is the only way to do development), and the extreme programming camp that is emblematic of the problem. The process people do not want to change and see xtreme programming as undisciplined and unscientific. The xtreme camp sees the benefit that tight feedback loops can provide for software development.
Historically, when computers first were developed, the need for rigorous attention to accuracy was necessary. Why? Due primarily to the jobs these early machines performed: number crunching.
Later computers were put to the task of storing and organizing textual data. Today most of the work done by computers falls into this category - and the data types have expanded to include multimedia objects. Furthermore, the complexity of these systems has gone up due to the need to tie many disparate systems together.
This will be the most common computer programing and development work in the future - as stand alone distributed applications give way to mesh/grid systems.
We need to be training people today to work in these environments.
Will a narrowly defined Computer Science cirriculum support this? No. I was a CS major - and I learned over 50% of what I needed to do the job. The focus on mathematical rigor was only 5% of my day to day job - whereas it was 80% of my university training.
Will a narrowly defined Information Technology cirriculum do the job. No. As I said, having trained these people - they do not have the deeper skills to succeed at the task.
This is why I would recommend something else - keep the technical degree for those who will be involved in pushing the frontiers of computer science, but 'beef up' the IT/CIS cirriculum to make that degree more applicable to the reality that is fast approaching. The reason I went the CS route in the first place was because the IT/CIS cirriculum was so flimsy. Sadly, the CS course work was beyond what I needed - also leaving a gap. What I propose is to fill that gap - because that gap is where most of the students will be working after they graduate.
e.g. perl
e.g. python
Most problems in the field of AI...
You guys must all be in research or universities. I don't have a single system that I work with that uses AI - and I doubt 99.999% of the programmers out there in the business world do either. Most people deal with storing and retrieving data, and displaying that data in a meaningful way (creating information from the data).
The assumption that heuristics lead to poor programs is false. This gets to the core of the problem: the mathematics field is too invested in exact proofs. On the other hand, in reality - where the rubber meets the road - that level of accuracy is not attainable most of the time due to incomplete and/or imperfect data. Why adhere to something that does not represent reality?
Rather than basing our development model on mathematical rigor, we should instead look to the most complex thinking system in the world: human beings. We go blissfully through life dealing with contradictions, incorrect and incomplete information with ease. Our software designs should emulate this behavior, and be as fail safe and robust. What do humans depend upon most often? Heuristics.
Don't get me wrong (and I think some of you have) I am not advocating an abandonment of mathematics in computing. On the contrary. The key issue is that we, as CS graduates, must walk a fine line - a middle way - where we pick and choose when to use one method over another. My point is we have a tendency, due to the culture of the Mathematics department, to put more emphasis on proving our algorithms are correct - rather than getting any practical tools in user's hands. We are not working with marble; computer programs are extremely maleable objects - user feedback can drive the heuristic model as we shape the system over time. Thinking - which is what a computer emulates - is not all about math. We must realistically balance the two methods without becoming zealously attached to either.
This whole thread is precisely why Computer Science should have never been allowed to fall into the Mathematics Department.
How many practical computing problems have I run into in my carreer that have been NP complete? 0 - in 10+ years.
99.999% of the computer science graduates will not have to deal with this issue - which is mainly concerned with or cutting edge theoretical issues (for example, how to do ray tracing in real time in a video game). Most programming is algorithmic, rather than mathematical, and what little math is needed is generally polynomial or matrix transformations.
In many instances rigorous mathematics isn't needed at all, and fuzzy logic or rules of thumb can be used effectively to get the job done. However, due to computer science being tied at the hip to mathematics, people are getting educations which don't mesh with the reality they see in the business world (where 85% - give or take - of the graduates will end up).
I propose the 2 following divisions of computer science:
Theoretical Computing - the mathematics ladden branch - includes logic design and engineering, as well as software to support 'deep science' in peripheral disciplines as well as applied to computing and theoretical mathematics.
Algorithmic Computing - the art of computer programming and system integration. This is the trial and error, get your hands dirty department.
Finally, I don't know if I like the idea of having a seperate Information Technology curriculum in the business department. From my experience, I always end up having to teach these folks new on the job things that I learned in school (if they need to learn it, they should pay for learning it - praticularly if they end up with a salary equivalent to mine). They are getting an incomplete education that is not useful in an environment where systems integration is the norm, and thus being a jack of all trades is more important than being able to write an SQL query or kick out a Cobol program to calculate the depreciation of someone's stock portfolio.
Agreed.
There are pockets of intelligence, empathy, and common sense still alive and well in this country...sadly, the current administration would have none of that.
Just as some Americans have stereotypes about foreign cultures, stereotypes abound about the arrogant Americans. For every loudmouthed gasbag you encounter, there are 20 more Americans going quietly about their business.
Here are some definitions of X for your reading pleasure.
It seems X has been traditionally used in mathematics as the most common unknown variable in equations. This usage predates, and carried over into all the other modes of its use - particlarly regarding secret or unknown qualities.
I've gone back to my old reliable Slackware distro, after many years of trying others.
One nice thing about it is that it defaults to loading into command line mode - you have to manually run 'startx' or set up the default run level to include the graphical login.
My server and my firewall both stay in text mode - which gives both boxes an added boost in performance - both due to cpu utilization and more free memory. My workstation runs in graphical mode on a Pentium 500 mhz machine - with 128Mb ram - and it runs just fine (certainly faster than the windows ME that was previously on it). The Server is also a 500 mhz machine, and my firewall is a 120 mhz machine. I run gnome on my workstation - and is pretty snappy for such an older machine.
If computers are outlawed, or probably more reasonable - computers without DRM (or any other device you can think of), what can we do to counter it?
How much would it cost to build a small microchip cleanroom in my garage (for my own use, of course)?