|
Yes,
There seems to be an implicit emphasis on getting someone coding profitably ASAP. However, if your premise is that the learner is hoping for a career of many years, then these basics are going to make their (and their colleagues') life so much easier and more successful IMO.
Personally I started with Pascal (Programming 101), but in the mid-year break I worked through Peter Norton's Assembly Language Guide to the IBM PC. I have to say that "the penny dropped" in so many ways when the underpinnings of programming languages were revealed. It have no doubt whatsoever that it was the reason behind the perfect marks for all assignments in Programming 102 (exams? I don't talk about them).
I have so far resisted the urge to do what I think most developers do when asked this question and simply recommend what *I* did. However, I truly believe that assembly language should be learnt very soon after learning the first one. I lean towards Pascal for the first language rather than C because of some of the innocent looking time bombs that can slip by in C.
Murray
|
|
|
|
|
Yup, you got my point exactly. What makes us effective is our view of the system, not any one of its pieces. This only comes from an understanding of the underlying machine and how to leverage that machine to 'get it all done'. The more complex things get, the MORE important it is to understand, since so many more things can go wrong in the system.
The aim of training developers is for the long haul, not the moment.
modified on Monday, April 7, 2008 11:54 PM
|
|
|
|
|
I understand the point you are trying to make. I followed probably what you would call the wrong path. Started in BASIC, went to VB6, then learned Assembler, C, Java, and now on to .NET. I will fully admit that after I learned assembler my outlook and view on coding techniques were dramatically changed. However, I feel trying nowadays to get someone from assembler to C to C++ or C# and then finally onto a framework is akin to telling your 16 year old to rebuild his car bolt for bolt before he can take it once around the block.
I fully understand and see everyday the problems of programmers with no mental connection between their code and the machine it is running on, but I don't think forcing a PhD amount of work before they can start doing anything is the right answer either. However, I do well believe all CIS college programs should have an assembler course in their somewhere, which is sadly lacking. I just think there has to be a better way.
|
|
|
|
|
First let me say, I do not like C++ but that is probably because it was not my first language. If you can learn C++ and get to even an intermediate level, then from there you will be able to learn and/or pick up quickly ANY programming language. C++ is the grandfather of all languages, Java and C# both came from C++. C++ has all the good, bad and ugly features in it and it forces you to do object oriented programming(OOP) unlike C#, VB, Pascal, C and even Java
My two cents
|
|
|
|
|
If C++ forced me to do OOP (like C# or Java), I wouldn't be a C++ fan.
To those who understand, I extend my hand.
To the doubtful I demand: Take me as I am.
Not under your command, I know where I stand.
I won't change to fit yout plan. Take me as I am.
|
|
|
|
|
I would say that the grandfather of all languages is C and for me is the best starting language for everyone.
In my opinion, C is the root of all high level programming language.
Once you master C well, you can go trying some programming paradigms more complex like OOP. I do not believe that OOP is the best paradigm for start programming.
|
|
|
|
|
My fault you are right, the grandfather of all languages is C. But from experience, it is harder to go from C to C++, than C++ to C.
My first 4 programming languages were Pascal, VB, C, C++. I had a difficult time grasping the OOP stuff. Now I'm safely back to VB.NET.
This is why I would suggest someone new to start off with C++ with all its pointers and manual garbage collection and not some dumped down language like Java or C# (THESE LANGUAGES WERE CREATED BECAUSE PEOPLE COULD NOT GRASP THE ADVANCE FEATURES OF C++. THIS IS NOT A JOKE BUT TRUE, GO RESEARCH)
|
|
|
|
|
kjmcsd wrote: But from experience, it is harder to go from C to C++, than C++ to C.
That's true, because you had to learn C basics too when you were learning C++ .... So the best way is C to C++ . Is it harder? Good programming is not easy...
kjmcsd wrote: This is why I would suggest someone new to start off with C++ with all its pointers and manual garbage collection and not some dumped down language like Java or C# (THESE LANGUAGES WERE CREATED BECAUSE PEOPLE COULD NOT GRASP THE ADVANCE FEATURES OF C++. THIS IS NOT A JOKE BUT TRUE, GO RESEARCH)
I agree at certain point.
Ok, in .NET Framework (not only C#) you have your code "managed" as i suppose you know. Java the same thing.
Now I don't really know what you mean.
If you are talking about memory leaks, segmentation faults [ ] and so on, i totally agree.
If you are talking OS stuff, i don't agree, because it's not the programming language, but the platform's class libraries.
As I guess you know, you can code to .NET plataform with more than 20 programming languages.
|
|
|
|
|
First, some humor:
the grandfather of all languages would have to be Mix .
To be honest, C is closer to a modern language than to the 'beginning'.. It was invented in 1972. If we are talking earliest languages, you'd have to go farther back..
The first languages were machine language (of course).. but the earliest of the 2GLs were Algol, Cobol and their cousins. They predate C by more than a decade.
And you have it incorrect regarding why C#/Java have become popular. The reason those two languages are popular is that software management became acutely aware that the majority of bugs being introduced by programmers in C++ were memory management/leak type bugs. Since these bugs are both difficult to find and create a high degree of instability when they occur, there was a strong push to get away from systems that allowed them (thereby increasing programmer productivity and system stability). This is the real reason for C#/Java. I programmed in C++ for ten years, and now program in C#.
As to 'could not grasp the advanced features', I don't think so. The current incarnation of C# and Java look very similar to C++ (especially with the inclusion of Generics). And certainly the most difficult area to use well is the OOP portion, which is not just isolated to C# and Java. I can't begin to tell you how many bad OOP designs I've seen in C# that would have been just as bad in C++ or some other OO language.
modified on Monday, April 7, 2008 11:54 PM
|
|
|
|
|
From my point of view C++ is definitely the one , coz for beginners java/c# would be like directly injecting nutritions.......
Regards ,
Nishu
|
|
|
|
|
kjmcsd wrote: C++ has all the good, bad and ugly features in it and it forces you to do object oriented programming(OOP)
C++ does not force the programmer into anything, which is pretty much the reason of its success.
But it is not a good first language - a beginner needs something clean and simple, and C++ is neither.
|
|
|
|
|
I disagree that a beginner needs something clean and simple. That is the problem with some education system. They start off too basic, then when they get to the advance stuff they choak
True no programming language forces you to do OOP, but in some languages you rarely ever see an application that does not use OOP like C++. It lends itself well to OOD & OOP
|
|
|
|
|
C++ was my first language, and even for the crazy determined this was a highly frustrating first language. In this day an age to anyone thinking of learning programming I highly recommend VB.NET first. This language will give them all the basic concepts with MUCH-less the frustration. Then if they survive that to the intermediate level and decide to pursue programming on a professional level I would recommend they learn C# / Java or C++ as their second lanuage depending on what direction they are planning on taking in the programming world.
Good Luck and Best Wishes to all the Newbs
- Braden
|
|
|
|
|
C++ all the way!
There is opportunity for newbies to do "interesting" things right away, by re-using object oriented libraries someone else wrote, and it allows low-level hardware access that is second only to assembler. After some digging, the astute coder can learn and understand the basic computational concepts and building blocks.
Personally, I started programming by learning QBASIC back in 1993. After some years out of the loop, I dabbled with java in high school info-technology. Then last year I decided to study C. After a few months, I thought it was time to move to C++.
Learning C and then C++ was a good way to get a great understanding in my opinion, since I had laid the foundation mentally for the more advanced and higher level dialect.
Now I mostly write C++, but I use perl for some file utility-like functions. I'm messing around with scala for something completely different, and I'll try out scheme and maybe prolog soon.
I've heard that to improve one's problem solving skills, it is a good idea to learn languages from each of the major genres: procedural, object-oriented, functional, logic, etc.
I agree that the best way to the teach the art is to start with something that allows the kids to experiment relatively safely and see cool effects.
|
|
|
|
|
I think C++ is much too difficult too learn for beginners. Of course, if you can program in C++, it is easy to learn any other language. But a beginner needs some quick success which he doesn't get with C++.
|
|
|
|
|
Do you want the developer to get the basic concepts the fastest?
C#/Java
or do you want a developer who truely understands what he/she is writing, and some of the more basic computer science principles
C/C++
I also believe a thorough understanding of some kind of assembly is important.
|
|
|
|
|
Some basic concepts can also be taught using C or C++. Even assembly (ok, this is harder)! But the true understanding of what happens under the hood CAN'T be taught using the C#/Java language (if some people say C/C++, why can't I say C#/Java?).
To those who understand, I extend my hand.
To the doubtful I demand: Take me as I am.
Not under your command, I know where I stand.
I won't change to fit yout plan. Take me as I am.
|
|
|
|
|
An absolutely invaluable portion of my experience was writing interrupt drivers for DOS (assembler), and writing multi-threaded programs on Unisys Mainframes (ALGOL). Both required a knowledge of the underlying hardware architecture and how it worked in conjunction with the program to get things done.
I think the traditional areas are VERY important (algorithms, data structures, etc.), but understanding the hardware and how it executes programs is invaluable to being effective in ALL languages, no matter what level.
|
|
|
|
|
Javascript is everywhere. Given any modern browser and a text editor, you can write and test your programs, hammer out the basic concepts, and have a lot of fun... all without getting distracted by compilers, OS issues, and complex runtime libraries.
FORTH is just a fascinating language. And has, in my opinion, the best introduction to programming ever written: Leo Brodie's classic Starting Forth[^].
Citizen 20.1.01 'The question is,' said Humpty Dumpty, 'which is to be master - that's all.'
|
|
|
|
|
Shog9 wrote: FORTH is just a fascinating language.
So is Prolog
|
|
|
|
|
Sadly, i've never actually seen Prolog outside of books.
Citizen 20.1.01 'The question is,' said Humpty Dumpty, 'which is to be master - that's all.'
|
|
|
|
|
Some sick genius thinks sex is a good starting language.
Now the author should own up and please answer these few questions:
1. Which higher language do you proceed to after learning and exhausting that?
2. I understand the 1s-and-0s analogy but is there a closer relationship with programming?
3. How do you compile? I use precompiled headers to make my compiles faster, but I imagine time-to-compile in this language should be as exaggeratedly long as possible?
4. Know of any compiler vendors?
5. Keywords: buy, mall, shop, tall, handsome, long, silicon...missed any?
Love is the illusion that one kiss is different from another. - e.m
|
|
|
|
|
I disagree with this... its been my experience that all that does is delay and distract you from getting any real programming done
|
|
|
|
|
Compilation takes nine months on average...
I've got one finished product written in this langauge, and a second one that should be done compiling in August...
The tech support for just one product is starting to take up all my time! But luckily the built-in knowledge base is growing rapidly, and the extensible architecture is fleshing out, so in about 18 years, it should be able to support itself. It's already got new features that I never even considered when originally developing the system!
Now that's what I call pair-programming!
-----
"Be liberal in what you accept, and conservative in what you send." - Jon Postel, First Law of Internet Communications
"It's 5:50 a.m., Do you know where your stack pointer is?"
"If at first you don't succeed, you must be a programmer."
http://vanguard-against-confusion.blogspot.com
|
|
|
|
|
illium wrote: I've got one finished product written in this langauge
Now to wait for the temporal bugs
|
|
|
|
|