|
Ok, first of all I would love to thank you for starting a debate because I love taking part in a debate as I am a lot critic and talkative. Then, I would love to thank you for coming up and trying to tell me that I am wrong. Which, in case, I am not and in fact the last paragraph you're writing about the "good software" proves you (somewhat) wrong.
1. Yes, programming is a technique, but it does not only refer to a single problem or a single program. A programmer is not the one who can design the front-end of the simple blog website. Is he? No! He is just a web developer or should I say, the web designer. A programmer is anyone, who has the knowledge to write programs for computer to understand and perform efficiently, if I am not wrong, then it is good to say,
Quote:
Any idiot can write code computer can understand, but a programmer would write the code that humans can understand.
Does that makes (even a little bit) sense to you sir? C is used, untill today and infact most of the time Assembly is also used, for speed and efficiency, you won't see anyone trying to develop a commercial OS in Visual C# (although Visual C# is my favourite language and I am sorry to it for hating it).
2. Again wrong, think of the .NET framework, that would run on Windows based platform only. You're now stuck on only one platform to build applications and run them. But, pure C applications would run independent of the platform and the framework you're using, you can build your C application and just create a suitable executable (I am not talking about the Window's application format .exe) to run on different platforms such as Mac, Windows, or even the embedded devices too. A framework, is not the best way to do. Afterall a framework is also built right on top of C (or any other such low-level programming language).
3. Agreed! This is my point, that I am trying to make through my blog post that every developer although must stick to the standards of the programming that is being done today, but must have the basic understand and concepts of the low-level programming, for micro-controllers, embedded devices etc. C would be used, there, you cannot expect any .NET framework to work there. There are some other languages such as Arduino language[^] used for developing for such board.
4. True! But this was none of my concern or it wasn't a part of the subject of the blog post and I also didn't want to talk about the experts in programming, or the database students! You should also try to criticize the posts here that are perfectly qouted and that stick to the scenario. However, you're right, SQL developer has no concern with C language, and would never have because SQL itself is a language.
5. Coming to the last point that you've made. Before I go critic on you, I would to ask you another question before answering your question.
Did you try to Google for a question like, "Which language {software} was written in?". Google would have helped you out a lot. For example, Firefox was written in C/C++ language just that the front-end was written in HTML, CSS and JavaScript[^]. Second, I do love Visual Studio, and the answer is same again. The main code for the Visual Studio was written in C++, just the front-end programming was done in XAML/C#[^].
This totally proves you wrong, and totally off-the-track to criticize my legit blog post. Ok, enough criticizing and proving you wrong. Now I would like to tell you what I actually meant here while writing the blog post.
You know, there are many institutes around the globe trying to create good developers and programmers and they teach them Java or C++, and most of them should I say, 70% of them teach just the keywords of the programming. I was one of the students who were taught just the basics of loop using a for loop and drawing a simple triangle shape with asterisks. That is the fact that I hated the most, I mean what good is a programmer if he doesn't even know what a memory is, where these variables are stored and other concepts like vectors in C++. You should also know C++ is still C. There is no major difference but just there are a few inhancements like classes and a few libraries. Try to write a program like this,
#include <stdio.h>
void main() {
printf("See, this is a C command but executed in C++!");
}
This code is of C, but executes in a C++ application because there is no major difference at all. C++ was just built on top of C itself.
New programmers, must be taught C, because C is the language which teaches them the basic usage of memory, pointers, registers, storage of a variable etc. C# and Java have their own framework on which they work and the memory and other management is done by these frameworks which, is good for noobs but not for someone trying to be a good programmer. Do you still beg to differ?
The sh*t I complain about
It's like there ain't a cloud in the sky and it's raining out - Eminem
~! Firewall !~
|
|
|
|
|
|
Thanks Renju brother.
The sh*t I complain about
It's like there ain't a cloud in the sky and it's raining out - Eminem
~! Firewall !~
|
|
|
|
|
Afzaal Ahmad,
Thanks for banging the drum. C is still a very useful language, useful and used. Much of working C++ is really just C with some macro-type boosting. Originally C++ was done was macros on top of C, back when C++ was getting started.
C teaches how to think about process and form in computation IN a way the modern bumper-bowling languages do not. A programmer not learning C, writing some significant programs in C, is like never learning how to do math without a calculator. The Computer Scientist and leading-edge developer community's modern diss on C is sad. It shows lack of respect for a truly pioneering language, a powerful language.
Are there alternatives to a grounding in the C language for the programmer who is wise? No. It is like a person claiming to be a Muslim scholar and yet never having learned Arabic, or a scholar of middle ages and ancient Rome and Greece who has never learned Latin or classical Greek. Or a scholar of the Christian or Jewish Bible who has never learned Hebrew.
Yet C is not some historical study. It is used in systems that have to work, and that do work.
To be a master of C requires no LINT, no IDE, no syntax highlighting in EMACS or VIM. It requires thought, and a mind that be happy in the careful manipulation of symbols, a true symbol manipulator that uses symbols to make things work. Another language of that sort is APL. Or even LISP.
Yes, a person can get down to bit level with NAND/NOR gate circuit wiring, or Assemblers, of PLC ladder logic, or actually many libraries for the newer generations of languages. But none of those languages train the symbol manipulating mind like C or APL, and a few others of similar shocking mind-developing power.
C is paleo. The healthy food of programming.
Best Regards and Egads, all!
bvw
PS: And in that significant code of C that an erstwhile pilgrim will write, by sure to use ++*ptr and variants, and mallocs and strcpy. Learn by making mistakes. Make many many many mistakes. Be bold. Without the achievement of many mistakes no one becomes wise.
modified 23-Nov-14 9:36am.
|
|
|
|
|
I totally agree to your statements and yes the new developers need to focus on the low-level programming, because without having a knowledge about low-level, the language of computer, how can one be a computer programmer. Today, most of the people are either iOS developer, Android developer or .NET developers. They don't have any knowledge on C or C++ that's why its not their right to call themselves one.
You're also right, and no offense taken for the scholar thing, you're right! When one doesn't know the basics how can be claim for a throne at all. Usually developers create a simple "Hello world" program and claim to get the reputation from the city and the honor too.
Mistakes would definitely make the programmers perfect, there is no such thing as learning the language by getting errors and exceptions. I still love how my programs complain to me saying, you've got a memory leak, you passed nothing etc.
Assembly can be a good step after C, but since nowadays people are really fond of watching their classes shaded in blue color, strings in dark brown so they won't like the Assembly language at all. That is why, I mentioned C to be atleast the low-level programming language that would be taught to them.
The sh*t I complain about
It's like there ain't a cloud in the sky and it's raining out - Eminem
~! Firewall !~
|
|
|
|
|
The modern system of development and compile time complaints about programs, while immensely helpful for the novice, and even for the journeymen, is toxic for the master, and those who would become masters. To become a master your mistakes have to come at serious times. Like when there are a few million deployed units of you code. Or when a mistake costs a million dollars a hour until it is rectified, or the scariest cases: mistakes that cost lives, even possibly your own. Then a person gets serious about code, and how it works, and what happens when it doesn't.
Yet the great majority of people, of programmers, of IT managers, are afraid of that REAL LEARNING AND MASTERY PROCESS. Instead they replace it with super-smart IDEs that flag errors as they are typed and massive lists of bug checking in systems being built. Now as I said, those things are immensely powerful too. Yet beyond a pint in a human development they do NOT help and are toxic.
To get beyond that point you have to live with YOUR WORKING OR NONWORKING CODE in the real world, and a very real, dangerous real world. One where you will lose again and again. If you don't have some history of failed code that has caused real and significant harm in the world, I can't say you are a master. If your code has not caused a business failure, has gotten you fired for not working at the worst possible time, has not burped during a surgery, or dropped a missile from a wing at the wrong time, what kind of coder are you? It is hard to say you are a master. But failures do not made a master either. Mastery is about learning, fearsome learning, yet humbled learning. Mastery is never giving up on getting it right the next time, and about going forward and never backing off (or at least coming back into the fray of real life and coding in real life, after a "recuperation period" -- those can't be avoided sometimes).
That's the masters level of operation in living as a writer of real-world code. And the great majority of coders never get close to it. Nor do a great majority of computer scientists, and experts with many many certs, or managers who manage to keep their jobs. Whereas a master of a manager works to lose his job. Because every job is temporary, and when a project is done, or a process is established that works, the manager either has no more work available that would need his talents, or the project has been completed. This is MASTER level, remember. Most never reach to it, never even reach for it.
And as Peter Drucker said, in his massive opus, "Management", every knowledge worker is a manager. And we know that every coder is a knowledge worker. I wish that most would strive to be masters. Yet it is like choosing to take the path of hardship and struggle through life. That is the reality.
Anyway, learn C. Respect yourself. Respect your craft. Learn C. Or some language you can think algebra and computation in, a language rich in your crafts's history: APL, LISP and some others.
modified 23-Nov-14 10:27am.
|
|
|
|
|
I totally agree to your points about a master, most of us here believe that they're master, and even they get to see that they're not when someone with a more experience and more exception list pisses him off. Being a master doesn't mean to build a software without an error in the first attempt, or to create a software self-sustainable for any validation issues and so on.
The main thing is, that every programming for atleast his first 15 years is just a beginner there is a lot for him to learn and know before he can even enter the intermediate level. I have just 4 years experience so, I'm just a baby here in this field. I might learn more in coming days and seasons and I am just 19 years old there is a whole lot to come in future.
I will learn more, LISP, APL and any other language that I will find attractive and cute; C was atleast for me.
Thanks alot for your time sir, I really feel proud to have such great comments of yours on my blog post on CodeProject.
The sh*t I complain about
It's like there ain't a cloud in the sky and it's raining out - Eminem
~! Firewall !~
|
|
|
|
|
You have said what most people don't see or don't dare to say. Today's programmers are operating at very high level of abstraction. You haven only compared formal and strict type checking lanuages like JAVA, C++, C#. The situation is even worse with scripting languages like JavaScript, PHP, Python etc. They do many things under the hood and programmer doesn't know how its working internally! He has to just get his program working and forget the internal details! Tomorrow's languages may be even at a higher level of abstraction like natural language programming! Is it good for the software industry or bad! The frameworks that allow this high level of abstrction take up all the enhancements in computing resources! We could write very efficient programs in C on a 640KB or RAM device with a 10 MHz CPU and today RAM is in GB's or even TB's! CPU clock speed is in 2 to 3 GHz and multi core etc but still the OS's and framework eat up most of resources! All the best to you. Keep writting such nice articles. ![Smile | :)](https://www.codeproject.com/script/Forums/Images/smiley_smile.gif)
|
|
|
|
|
Thanks for your comment sir.
I agree that new developers are way too far from the actuall processes, PHP and other web scripting languages like python are into the function which allow the programmers to "write less do more" but don't let them have any control on the actual processes that take place inside CPU.
Embedded devices don't have an i7 processor or a 4GB ram like thing but yet they're runnable using C language or assembly language. Because those are the only languages which are compiled directly into the native code. Others have to go through a process of conversion, translation and building and then compiling into some other language. Visual C# is an example of this.
Infact the universities and other institutes pride in teaching the PHP, or CSS but they're not interested in teaching the C or C++ language. Those frameworks such as .NET allow us to build larger software application by writing lesser code, but we're unaware that these frameworks are the reason we have to buy expensive hardware for our system.
The sh*t I complain about
It's like there ain't a cloud in the sky and it's raining out - Eminem
~! Firewall !~
|
|
|
|
|
I think the software industry is huge and can support quite a variety of different skill sets. I am an old mule of a programmer and learned C back in the early '80's. It has been useful to have a good understanding of machine level behaviour.
BUT, what I missed at university (because it was not invented yet), is object oriented design, test driven development, design patterns, newer languages, better tools, web technologies... So many new things that younger programmers grew up with, I have had to learn the hard way, in my spare time (no complaints, just a recognition of our different backgrounds).
There seems to be an endless list of things to learn, and every new skill you acquire makes you better. That is the lesson to take away...
Thanks for the article. It should generate healthy discussion.
biggianthead
|
|
|
|
|
And I believe that it already has generated a good discussion, with all due respect thank you for coming up sir.
I believe OOP is a concept that must be applied to the programming in our every-day programs. But think of C#, think of Node.js, think of PHP, there is no memory management; although C# would provide some and there is a garbage collector in .NET too. There is no concept of how the machine works. Trust me, I live in a city, where not only in my city, but my district or even the province there are very less programmers who even care about how the computer would print the Hello World! All they know is that, "yeah, just write the Console.WriteLine method and it will be there for you".
This was the thing that made me irritative, and I really had to jump in and say, "Stop!". I believe world is changing and new programmer must be taught new languages and standards. Of course to get the understanding of the computer architect we must not start teaching punch cards and the vacuum tubes but the concepts of these must be taught, so at any stage they would be able to understand and use these concepts too.
Many of my friends are asking me, "hey how to write a project for embedded device?", and I'm like just write a project in C. These were the main ideas and concepts which brought me up with this idea and a suggestion for the teachers and institutes.
The sh*t I complain about
It's like there ain't a cloud in the sky and it's raining out - Eminem
~! Firewall !~
|
|
|
|
|
There's a little error that make me say "What ?!!!"
"Dennis Ritchie was the guy behind Linux OS".
Nope, Ken Tompson create Unix in the late 60's, start of 70's, with the help of Dennis Ritchie.
Mr Ritchie created the C langage (based on an existing langage but added LOT of things into it) to be able to achieve the Unix OS.
For Linux, it's Linus Torvalds who created it, largely inspired from Unix phylosophy.
This said, i'm agree with you, the C langage must seen in a developper cursus, even not deeply learned, but it's a lever for comprehension of the "backstage" of programming.
|
|
|
|
|
Very much thank you for brining it up, I have updated the post and now it is in moderation queue for being published.
Thanks again.
The sh*t I complain about
It's like there ain't a cloud in the sky and it's raining out - Eminem
~! Firewall !~
|
|
|
|
|