|
I think it is very good that new developers learn lower level languages at the outset so that they can have a deeper appreciation for the tools they use. Knowledge of lower level languages benefited me greatly as I learned the newer higher level ones along the way because I had at least some understanding as to how things work "under the hood".
Using the driving analogy, a developer can be thought of like a mechanic. I want my mechanic to know more about how my car works than that is needs oil and fuel to run. I want them to know what a carburetor does. I want them to know why things are put where they are are, etc. That doesn't mean I want the mechanic to be able to rebuild these individual components, but they should have a basic knowledge of how they work.
With development, I found it incredibly beneficial that my first courses were in Assembly and C. After that, things in C++ were easy to understand and newer languages just build on top.
I wasn't, now I am, then I won't be anymore.
|
|
|
|
|
Marcus Kramer wrote: I found it incredibly beneficial that my first courses were in Assembly and C.
After that, things in C++ were easy to understand and newer languages just build
on top.
Yes, very good points! I think most of us do agree that knowing the fundamentals are beneficial.
I find it interesting that some of the posts here agree wth the car and driver analogy, but are debating the implementation of the concept, I guess that's what makes us programmers.
It was broke, so I fixed it.
|
|
|
|
|
For pointers, memory management, to the metal programming, etc., I think they should learn assembly.
For object oriented programming, design patterns, I would recommend Smalltalk.
m.bergman
For Bruce Schneier, quanta only have one state : afraid.
To succeed in the world it is not enough to be stupid, you must also be well-mannered. -- Voltaire
Honesty is the best policy, but insanity is a better defense. -- Steve Landesberg
|
|
|
|
|
Leave this job for me and learn .NET and JavaScript.
|
|
|
|
|
If you can drive a manual you can drive anything if not your limited to
automatic.
|
|
|
|
|
That reminded me of an american friend that came over to my place in Brazil so she would spend the carnival here.
Most brazilian cars, specially the cheap rentals, are manual transmission. She never learned how to use manual transmission back in US, so she couldn't drive the cheaper rentals here, or my car (I don't do automatic).
Lesson learned: You never know when you going to need certain skills.
So yes, learn C/C++
"To alcohol! The cause of, and solution to, all of life's problems" - Homer Simpson
|
|
|
|
|
Exactly my point.
Fabio Franco wrote: (I don't do automatic) Me too, in the 50 years I've been driving I'm owned a couple of automatics
but prefer manual.
|
|
|
|
|
I've never owned or ever will own an automatic car. It takes the joy out of driving.
The day I will own an automatic is the same day I will stop loving to drive.
The automatized may have a chance with me though, but they need to be dual clutch and at least 6 gears .
"To alcohol! The cause of, and solution to, all of life's problems" - Homer Simpson
|
|
|
|
|
You can't zoom zoom with an auto.
|
|
|
|
|
It isn't necessary I mean, but it is useful. Computer Science student should learn c++ or a similar low level language. It brings them closer to the metal that is normally the case, and that is surely a good thing given they are learning Comp Sci rather than "IT" / programming. I'm also against the idea that courses should be solely tailored to the market: some things are worth learning for their own sake and can lead to ideas in other (more practical) fields so necessity has little to do with it.
When I was studying we used c++ as the main language and it not only introduced oo-concepts, but made the courses teaching Assembly much easier. It is also easier to make the transition from c++ to Java or .net than the other way on.
I tried to explain how information is stored in a machine to my students and was shocked at the response, it hadn't even occurred to some that the information was codified as numbers, let alone binary. The memory addressing part and arrays must have been like science fiction. I wondered how they got through the DataStructures course.
|
|
|
|
|
...not as the first language.
Start with C#, then learn C++ so that you know what is going on behind the scenes.
IMHO C++ is too much as a first language - it is likely to overwhelm rather than educate.
But you do need to know the basics at some point - so I would prefer C# first, then assembler, then C++ (but that's just me - I'm biased towards embedded anyway).
Ideological Purity is no substitute for being able to stick your thumb down a pipe to stop the water
|
|
|
|
|
Actually, I believe the reverse is true - learn C++ first.
This way, one can have an understanding that the '.' spacing in C# that don't distinguish between a namespace and a member/function (etc) are shortcuts (enabled by reducing the number of options). At least, in C++, you know if it's a namespace '::' from which you are referencing, or put another way, you know what it is you are doing.
In a sense, C++ simply "tells it like it is" before it's dumbed down a notch or two.*
* Oddly enough, not intended to offend anyone.
"The difference between genius and stupidity is that genius has its limits." - Albert Einstein | "As far as we know, our computer has never had an undetected error." - Weisert | "If you are searching for perfection in others, then you seek disappointment. If you are seek perfection in yourself, then you will find failure." - Balboos HaGadol Mar 2010 |
|
|
|
|
|
OriginalGriff wrote: IMHO C++ is too much as a first language - it is likely to overwhelm rather than
educate.
I tend to agree. Go with something that is closer to 'normal english' for the first language. My first was Pascal, then C++, Java, Assembler, then C#, and so on. If I started with C++, well it was a mess the first few weeks in class.
|
|
|
|
|
I regret that I had Visual Basic as my first language. Even though it was self taught, I ended up with vices that were difficult to get rid of and I had a hard time changing the way I was thinking once I started learning C++.
I rather begin C++ in the first place. I think it would've been easier to grasp if I wasn't thinking Visual Basically at the time.
"To alcohol! The cause of, and solution to, all of life's problems" - Homer Simpson
|
|
|
|
|
I'm not saying this is the case, but it is possible that it is an issue with self-taught vs classroom taught. Aside from that, C++ is more of a foreign language compared to English than VB or Pascal, so others might have an easier time because it is so different. I remember getting a book of "Pascal Command : C++ Command" comparisons. While it wasn't perfect, it did help to transition through.
Perhaps the best choice would be "It depends on the person."
|
|
|
|
|
RJOberg wrote: C++ is more of a foreign language compared to English than VB or Pascal
I think that would actually make it more difficult to be self taught as first language. But I believe that it goes beyond the look and feel of the language. With VB you mostly don't have to worry about pointers, memory management or how they work, that's something that I wish I would've been formally educated from the start. Once I got used to not thinking about it, it was hard to change my way of thinking.
RJOberg wrote: Perhaps the best choice would be "It depends on the person."
I agree with that. I can't know if the experience I had would've been the same as someone else's.
"To alcohol! The cause of, and solution to, all of life's problems" - Homer Simpson
|
|
|
|
|
I disagree, we are talking about college and Computer science students. Aren't we?
To me it's like studying classical studies without learning Greek or Latin.
|
|
|
|
|
I would ask the question, does one need to be a mechanic to drive a car?
No, but understanding at the very least, the basics of what makes a car runs can save you from countless headaches and unnecessary and oft times embarrassing trips to the mechanic. Not to mention saving time and money.
A little time in the trenches can make a person appreciate the advantages of higher level programming. (I started with assembly where the honest to god rubber meets the road)
It was broke, so I fixed it.
|
|
|
|
|
S Houghtelin wrote: I would ask the question, does one need to be a mechanic to drive a car?
Programmers to computers are what professional drivers are to cars and the users are causal drivers. So the better question would be: does one need to know mechanic to be professional driver?
If you're causal driver, then not so much, but if you're a professional driver then you better know as much possible.
|
|
|
|
|
True, but professional drivers would understand the mechanics of cars - not a particular make/model (maybe that on top, but fundamentally, not restricted to)
Saying "learn C++" is like saying "study this Vauxhall Astra"...
Granted you really need a language to use, and I would probably say C++ too, but I think the question was phrased wrong
|
|
|
|
|
MarqW wrote: not a particular make/model
Actually that is the exact thing that pro-driver should know: which screw should be tighten when his truck has trouble changing gears or which cable should be checked when the truck won't start, where the installation for coolant may leak, all these are very specific things to a model. The more he knows the more capable he will be to fix the problem instead of waiting in a middle of nowhere for a help to arrive.
So in essence, although you're not required to know how computer works at low-level, you're going to be better programmer if you know fundamental concept AND exact implementation of low-level stuff.
|
|
|
|
|
I'm not saying specific knowledge is bad, I'm just saying it's far less important than understanding the concepts.
Say your professional was a Fiat driver, but then got transfered onto a Renault team, the Fiat knowledge won't help much with "the exact screw", but the concepts would allow them to get there a lot faster.
I knew and understood linked lists, memory management, pointers etc. way before I knew C++, because I learnt x86 Assembler.
Sure, teach them C++ if that's the language of choice, but don't neglect the concept for the implementation.
|
|
|
|
|
Programmers don't just drive cars, we build them. One cannot build cars without a deep understanding and appreciation of how an internal combustion engine works, or why a driveshaft is shaped the way it is, or the function and purpose of spark plugs.
|
|
|
|
|
Gregory.Gadow wrote: One cannot build cars without a deep understanding and appreciation of how an internal combustion engine works...
Perhaps I'm straying off-topic, but from my point of view that is true for auto idnsutry, but when it comes to software... well, nowadays everyone and everyone's third cousin will dub themselves as developers.
|
|
|
|
|
....
xoxo
Kid sister
There's no place like Lounge - Me
|
|
|
|