|
I've only met one project managers, one client, and two senior developers capable of giving concise requirements.
If a client say "this needs to be for each item", when really they mean "this needs to be shared by all items", then no understanding of English will help. Only an understanding on the clients business will help, that way you can understand what they mean even though it's not what they said.
|
|
|
|
|
As a owner of two companies I don't see your point, and if I was stupid enough not to have someone go over my work before trying to sell an app well it wont make money will it.
Grade 12 math ability in grade 2... English is for communications, it means nothing to the end result, unless English is the only way possible for you to understand something, then I would be worried more about you.
|
|
|
|
|
Colborne_Greg wrote: Here is an example of code, with no documentation, lets see if you can figure out what it does.
The fallacy in that statement is that it presumes that the reader only needs to know what the code does.
However to maintain code one also needs to know 'why' code is doing what it it does. For example, in your code example 'why' is "Nothing" acceptable? Is the caller expecting that as a valid condition or is the caller going to error on that? Or perhaps it is up to the caller to decide that themselves?
Additionally how does that work for a caller who wants to use the code but does not care how it is implemented? Where is the contract for the code defined? How can the caller be sure that even if the implementation changes that the contract will not? How will the maintainer be sure that they can make a modification to that code without breaking that code?
|
|
|
|
|
In generic programming there is no why.
As a programmer of 25 years, we in the field usually did not comment code or even tried to make the code readable, job security...
That is retired code, otherwise I would not allow anyone else to see my work, as the concepts are experimental and solve just about every problem known in computing.
Also if a programmer I hire creates a piece of code that was not well thought out in the first place, and it comes down to that code needing to be maintained that person is gone. Then I go over the code myself and make it generic to last the ages. See I believe that if you can't understand code just by reading it, you need more experience, the readability should just be what gets the job done faster.
|
|
|
|
|
Colborne_Greg wrote: and it comes down to that code needing to be maintained that person is gone. Then I go over the code myself and make it generic to last the ages.
All I can say is that you work in vastly different industries than I do.
Or you don't work with anyone else.
Code doesn't last "ages" because requirements don't. Requirements can change monthly (thankfully they don't change even more often than that.) Individuals work on certain code by themselves for years and then move on leaving someone else to figure it out.
I write code with the goal of allowing someone else to be able to modify it and understand it because I know it will happen.
|
|
|
|
|
How much does the code structure of SQL changes?
Like never, and SQL is my competitor, Unidex which was invented in 2003 to index characters in memory, therefor every single column is indexed, and every record can have all or none of the columns in a table or extras only for that one record, it can also store pictures, songs and video inside a record.
Code does last for ages, the code that doesn't wasn't written correctly.
|
|
|
|
|
Colborne_Greg wrote: How much does the code structure of SQL changes?
The language? Since no one actually uses just SQL and rather they use a vendor specific extension, such as PL/SQL the question is rather moot. And PL/SQL and TSQL changes every couple of years.
But even those don't change that much - but then that is far, far from what the vast majority of programmers do. The write with SQL they don't create the language itself.
Colborne_Greg wrote: Code does last for ages, the code that doesn't wasn't written correctly.
As I already said, and pointed out, no it doesn't. There are applications that will not run on newer systems. There are new applications that will not run on old systems.
I have personally worked on multi-million dollar projects that were delivered ahead of time and which were accepted by the customer and yet was never used at all by the customer.
I have worked on a project that went through tens of millions of dollars and after 7 years the vast bulk of the software (and entire service suite offering) was abandoned. This is despite the fact that it was successfully processing 4 billion dollars in transactions at the end.
I worked on the project that very, very likely allows your current phone to work and I know for a fact that although conceptually the system is the same the details have changed.
|
|
|
|
|
again I state Quote: Code does last for ages, the code that doesn't wasn't written correctly.
Also look into generic programing
Its what programmers should be doing, and when they do the code lasts forever.
Oh look code really does last for a long time
|
|
|
|
|
I think it's time for you to move forward from living in the late Paleolithic in terms of developer tools to the modern era where superb tools like .NET's compiler, Visual Studio, and add-ons like ReSharper, help make coding much more efficient.
It's always going to be a "Tower of Bable" out there, in the real world.
But, if you enjoy living without the wheel, fine.
“I speak in a poem of the ancient food of heroes: humiliation, unhappiness, discord. Those things are given to us to transform, so that we may make from the miserable circumstances of our lives things that are eternal, or aspire to be so.” Jorge Luis Borges
|
|
|
|
|
So you want to learn COBOL?
I wanna be a eunuchs developer! Pass me a bread knife!
|
|
|
|
|
Visual Basic .NET have almost all those features
|
|
|
|
|
|
This will not help you if you are comparing two variables ...
|
|
|
|
|
True. But I've found that to be an exception. Most often tests for equality test for a certain (constant) value, whereas tests between actual variables check the order, i. e. they use < or > rather than == . I've been using Yoda conditionso for more than 20 years, and I can't recall the last time I couldn't apply it. It happens, but it's extremely rare.
|
|
|
|
|
Most of the problems you describe are the reason why coding guidelines and code reviews exist. If you choose not to use coding guidelines, or don't bother to hold reviews to ensure guidelines are followed, many of these problems simply can't be avoided: a language definition can't stop a programmer from calling a variable i rather than, more descriptively, row_index . Only guidelines and reviews can achieve that!
Some specific comments:
3) As pointed out above, variable naming and code documentation cannot be enforced by a language.
4) I disagree: Strong typing helps the compiler (or interpreter, whatever) to decide whether a given statement is ok or maybe a typo. It helps the compiler find many errors of the types you earlier described! The main reason for strongly typed languages is that they improve the automation of error detection in the code. It also helps people understand other people's code, specifically since documentation and sensible variable names cannot be enforced by a language: when you can look up the exact type of a variable, that alone may offer a hint what it is used for. Type information is the only part of code documentation that can be enforced through a language! If documentation is important to you, then you want strong typing!
5) Neither number formats nor definitions of formats are truly universal. You have to accept that anything relating to format either must be defined specifically, or will deliver different reults in different locations.
6) That is a direct conflict with 2: you can't dynamically create new types in a compiled language. That said, your example describes an entirely different situation: that your program can deal with an arbitrary external object. Short answer: impossible. Long answer: Hollywood lies! No you can't interface Alien Computer hardware with a run-off-the-mill lapktop! Not even if you're Jeff Goldblum!
|
|
|
|
|
Something is wrong if you're spending 6 months chasing "==" for "=". With the debuggers/IDEs of today I find chasing them (no, they never go away [someone elses code]) to be fairly efficient.
As for the rest, well, it's the same old programmer-preference thing. No one thing or set of things will satisfy everyone. I believe Abe Lincoln said that. Personally, I really like braces vs. BEGIN/END. Any anyone who feels the need for "// end of some-block" has written a block that is too long; just break it out into smaller chunks/methods/functions.
|
|
|
|
|
The bug was embedded deep within an error recovery routine that got invoked maybe once every 2-3 weeks with the result that the system would crash with little evidence as to why. It had been written by a programmer who had moved on to the next project.
|
|
|
|
|
Sorry. I was harsh. However, a decent language such as my current favorite, C#, almost always catches such things. Eg,
int i = 9;
int j = 10;
if (i = j)
{
DoSomething();
}
... won't compile.
I've been writing code since '81. I cannot find anything to complain about with C#. EVERY other language I've used, not so.
|
|
|
|
|
Sounds good to me.
I have to admit skepticism, though. Even well design systems can be derailed by idiots (or by intelligent noncompliance), or otherwise "gamed" to work against itself. I see it all the time in every human system I encounter.
Figure out how to address that factor in the design, and you've got something.
</soapbox>
I used to call it "Super Happy No-Pants Wonder Day"! It turns out that the police just call it "Tuesday". Go figure...
|
|
|
|
|
I have been in the field for 40 years and have worked fluently in over 12 different languages and their off-shoots including PROLOG.
Hands down, the two best languages I have worked with have always been BASIC and Pascal. However, for ease of use and capability you cannot beat BASIC.
There is no need for a new language since nothing new will be able to do anything better than the existing language stalwarts... At least not until a completely new architecture is available for development.
Steve Naidamast
Black Falcon Software, Inc.
blackfalconsoftware@ix.netcom.com
|
|
|
|
|
I've been working on this for a while.
First, you may have noticed that all the innovation in software and languages is just really continuous re-invention of minor variations in existing languages and language paradigms. The "new" language is just another language with a not particularly well thought out hodgepodge of features that the author would like to see together in a language. There is no real innovation taking place in software languages today. I've been looking at PhD programs in CS and there's not really any real good movement towards the next generation software environment. Which is unfortunate. Thus, I am working on it.
Why is there no forward movement in software? That I need to explain in my Software Innovation Psychology Theory which I am working on right now to produce first a concise booklet, an eBook, and then a video. In a nutshell, it is cause by people mistaking copycat innovation with true innovation (which is very rare). There are also a number of visualization and cognitive factors as well. And also the type of work in software does not really attract true innovators since most of the work is really grunt code work. So there are reasons why the current stasis exists.
Now, on to what a next generation programming language will include/be like/encompass:
1. True Object based instead of just Object "oriented".
2. Combines database, software, and transport protocol into one. There will be no impedance mismatch, no dedicated conventional database servers as such, etc.
3. Definition based rather than procedural based.
4. Smart components instead of dumb controls.
5. Replacement of the conventional function argument passing mechanisms with a definition language based approach. This will eliminate function overloading and re-implement dynamic polymorphism and class overriding in more natural approach.
6. The new definition language will be expressible in both terse and verbose modes. Verbose mode is a very human readable (yeah!) while terse mode can be used to save space and bandwidth when necessary.
7. SQL will no longer be necessary. It will be replaced by a universal data definition language that brings software and data persistence together into one unity.
8. XML will be replaced by a human readable data definition form and format. I've built successful prototypes on this and am converting all of my current code to run with it. Fully human readable and writable. BTXML - Better Than XML!
9. The definition scripting language will not need to be compiled although it could be. It's real use is to connect various services together with smart components to easily create highly functional software without convention programming. This will eliminate many grunt coding jobs but, hey, we have much better things to do in life than wrestle with primitive coding constructs and paradigms all day.
10. This software paradigm will implicitly support fast evolving and AI type software. Security will need to be built in inherently so as to prevent self-mutating virus like software. Please note that the next evolution to AI will require self-modifying, adapting, and evolving code. So this approach needs to be done. One will just have to safeguard against evil intent.
11. Self-Building and self-adapting software will be the preferred approach for GUIs, database programs, and application systems. An advanced user or business analyst will just start up a GUI program and then add and modify smart components to define the GUI interface, its operations, and functionality. No conventional development environment or coding. Modify and build the program as you go. No ORMs, Visual Studio, Iron Speed, etc. The new program is generated/mutated from an existing base object program. Change it as you want when you want. Lock it down so regular users can't mutate or change it. But use an articulated data model so users can easily add their own notes and custom meta data to it for their own use (thus eliminating one of the sources of frequent changes and problems in the existing software development paradigm). Then, if the change is judged good for the base program definition it can be added by the administrator and the change/improvement then becomes available to all, automatically. No more having to continually change and mutate GUIs and database models to accommodate more fields and data.
12. Advanced Hierarchical Data Types. True, object based data types instead of the static and mismatched data types that we now have for programming, databases, and operating systems.
13. Once this is built then re-build the Windows desktop into a better, portable, more human-centric workplace that dynamically helps people work on their projects on the computer instead of presenting just a static cluttered grouping of icons.
14. Now leverage all of this and finally build a true next generation operating system. Replace Windows once and forever with something much, much better. Break the stranglehold of the big companies who really don't have any good idea on how to get to the next generation software or operating system. Change software into something truly dynamic and human oriented. People will smile with the software instead of swearing at it every day. We eliminate the current dead end of software that we are now currently in.
And thus, a new day of the next generation software will be born.
I'm working on all of this and leveraging the existing .NET environment, tools, and paradigm to get there as best as be done with them. While not an optimal approach, I do not have the time and manpower to re-implement everything from scratch so I have to do it this way. This way will have the benefit of providing an intrinsic evolutionary migration path to the next generation software with and by using existing software development environments, databases, etc. Not optimal but it's very doable and it will work as a gradual introduction of this new technology.
And finally I, and you, will have a decent software environment to live and work and play in. Something good for our children.
Currently, I am slowing developing the above pieces of this since it is just me working on this. I could use some help. It's a radically different paradigm than the current one so you'd have to adapt to new paradigms for this. I am currently looking for a good school where I could do my PhD on this and give birth to this, perhaps on a staged release basis. The challenge for finding this school/environment is that it must be supportive of these new paradigms and not burden me with required classes which are not helpful for this (mostly a waste of time for this). This is known as a traditional research PhD and US schools don't support this any longer. I've found a few good foreign schools which allow full research PhD's without classes. Currently I am investigating schools in New Zealand which match this criteria, where PhD's can be completed in a minimum of 2 years, and have very nice and friendly people I am told. I plan to visit there later this year and complete my evaluation. If you have suggestions of good PhD program please let me know. Oh, it must be one where the intellectual property I create is not exclusively owned and controlled by the school. New Zealand schools don't require this.
And if you have constructive input on all or any of the above please let me know.
Thanks for reading/listening.
- Cary Grant Anderson
|
|
|
|
|
Thanks.
C Grant Anderson wrote: People will smile with the software instead of swearing at it every day. We eliminate the current dead end of software that we are now currently in.
This is the kind of thinking I'm looking for.
|
|
|
|
|
Except for the interpreted part, it sounds like C/C++, but you need to use a modern compiler that whines about things like assignments in ifs (or maybe do a lint pass) and a modern IDE for it.
We can program with only 1's, but if all you've got are zeros, you've got nothing.
|
|
|
|
|
Whenever I read one of these "desires to fix programming languages", I laugh. I have been programming since the 80's and I too went through that phase right after college.
However, I never had to work with all these silly pseudo-languages that come and go. We used ASM and C. Then Byorn Stroustroup (?) comes along and says, "hey, I hate programming, I'll add a bunch of junk to keep myself from making mistakes." I would've suggested he find a new line of work instead. C++ is a mess. It's poorly conceived, coerced and unnatural. It does nothing that a professional programmer can't accomplish in plain old C. As is usually the case, it causes more problems than it fixes, or it fixes one set but creates another set.
Considering that most of the world is embedded micro-controllers, those of us who program them don't have gigabytes of memory or gigahertz processors as we need to be more efficient. Over 20 years this has taught me to appreciate C and ASM more. I'm glad I never got my wishes to have a bullet-proof language.
I suggest if you're having issue with a particular part of a language, create a preprocessor directive and use it!
For example, if your problem is:
if (x = y)
this can be fixed by defining:
#define IS_EQUAL ==
then used everywhere as:
if (x IS_EQUAL y)
No need to suggest the world change, or hope someday this 'gets fixed' for you. The C preprocessor is probably the most overlooked part of C. You can easily invent an entirely new language using the preprocessor.
In fact, Linus Torvalds, who is a pretty awful programmer, took to using the preprocessor in ways most professionals would recommend against. But he recognized that it could keep him from repeating certain mistakes he tended to make.
|
|
|
|
|
|