Perhaps its just me, but as a current CS student I have already come across many questions on this site and elsewhere about not just "Which language should I use for x?" but also "Does anyone still use language Y?" My first CS class was taught in Scheme, which, if I'm not mistaken, isn't used widely (at least in comparison to languages like Java, PHP, Python, etc). Many of my classmates balked at the idea of having to learn a language they would never have to use again, but I don't quite understand where so much of this fear of learning less popular languages comes from. No, I may not use Scheme in any job I get, but I certainly don't regret having learned to use it (albeit in a very beginner, not very in-depth manner in that one semester). I am taking a search engines class this semester, which is done in Perl and again I am seeing classmates complaining about the language choice. I can understand having a favorite language and disliking others but why do some get worked up over learning it in the first place? Can you really learn the "wrong" language? Isn't learning something like Scheme or Haskell good mental exercise if nothing else, and useful at least to exposure to different ways of solving problems?
-
Interestingly, my first two years of CS education involved solely C# and Java, and guess what I ended up using in my first co-op placement? Four-letter word, starts with "P".– Anon.Commented Feb 14, 2011 at 4:02
-
6@Shewbox, you're right, they're wrong, you'll get the cross-learning advantage, they won't. End of story.– ocodoCommented Feb 14, 2011 at 4:13
-
7They are doing SEO (search engine optimization) with the hiring managers.– rwongCommented Feb 14, 2011 at 4:48
-
1@rwong: and unfortunately some of us had to learn the hard way not to put "I used XXX once and will not ever touch it again", because some recuiters spam on keyword matches.– МסžCommented Feb 14, 2011 at 5:48
-
1@JB: 99% of people make the others look like they're kissing up.– Michael KCommented Feb 14, 2011 at 19:03
13 Answers
The point of a CS degree is not to teach you C# and Java, you can learn those on your own. Its to teach you about programming and computation. The language is just a detail. Over the course of a career in programming you will use many languages. Today it may be Java or C# but 10 or 15 years from now it could be Erlang or something that has not even been invented yet. Learning different programming styles and different ways to attack a problem is much more important than learning any one language.
-
Exactly - my degree predates C++ let alone Java or C#. Although we were taught principally in Pascal we were being given problems in a variety of languages from an early stage and in our second year had a course that amounted "language of the month", simula (used for doing simulations) remains my fondest memory - though there's no chance I could now write any simula code - mostly because of the OOP it taught me (though I didn't know it at the time)– MurphCommented Feb 14, 2011 at 15:07
Because your first language will shape how you think, until you learn otherwise.
If you are computationally illiterate (first time programmer), and the first language you learn is too "basic", you may not know of higher order concepts like object orientation, multiple dispatch, inheritance, first class functions, meta programming, etc.
The first language you learn is usually tied to your first foray into computational thinking. If someone tells you, Jimmy, the world before you consists of A, B, and C symbols, all of your thinking will be in terms of A, B and C. Until one day, a fancy nerd scoffs at you for not knowing X, Y, and Z concepts. There's no way you would have known this knowing only ABC.
The people who are most concerned about someone's first language are probably enlightened programmers who have fought through the darkness. Oh, now I know what a first class function is. Man, I wish I knew about inheritance and dependency injection two years ago!
Your first language isn't as important as your attitude with regards to subsequent languages. If you can see far ahead of you to know that there is a world beyond BASIC/C/Perl/PHP/etc, then you're far ahead of the game. This is why many people are fanatics for functional languages since many actively developed languages are converging towards them.
-
1We all need to start at those basic concepts, though. When someone learns a new concept (take design patterns as an example) they tend to use it everywhere for a while. If I hadn't spent the first 5 years I programmed in Basic learning program structure and how to think like a programmer, then when I got to OO, I would have been so busy learning the procedural part I couldn't have concentrated on the OO part. That being said, +1 for 'Your first language isn't as important as your attitude with regards to subsequent languages' and concepts. Commented Feb 14, 2011 at 13:50
-
I thought about adding that in. I wasn't at all saying basic languages don't have their place. In fact, they do (in the early learning stages). I just didn't mention it. Commented Feb 14, 2011 at 15:55
-
Oh Michael, your edit is so much more classy, hahahaha. Commented Feb 14, 2011 at 19:07
-
If the OP's classmates are concerned Scheme is the wrong language to learn, they're probably not all that enlightened. :) Commented Apr 25, 2017 at 21:39
-
Some languages have complex syntax while actually being simple (C derivatives), others have simple syntax while being actually complex (Groovy). By that I mean - in C/C++ or Objective-C - things are quite declarative and procedural within any active code scope, whereas something like Groovy has a lot of things "happening under the hood" that are "hidden" by syntax sugar. My suggestion to newbies is generally to go with the difficult syntax languages that mirror more closely how a computer actually works - because that knowledge simplifies the use of other languages. Commented Apr 25, 2017 at 23:38
When I was in college, I knew a lot of people who decided to major in economics not because it was something they were particularly interested in or passionate about, but because they thought it would get them a good job.
I majored in East Asian Studies because the classes I took as a side effect of my initial interest in Literature hooked me. I went to Germany because I wanted to do an exchange program, where I spent most of my time in Japanology and Sinology programs. I studied what I was most interested in. I decided not to use college to study computer-related things, since I had already hacked around a fair amount during my childhood, but I spent time programming and understanding the internet, and eventually, perhaps improbably, I got a good job that managed to combine all of those interests.
The difference is between the Careerist, and someone who learns for the sake of learning. The Careerist is worried that they will have studied The Wrong Thing, and that they will regret it because it won't be The Right Thing To Land Me A Job. The person who learns for the sake of learning realizes that they have 4 years to spend time exploring all sorts of fields with relatively manageable pressures; the careerist thinks that the job of the school is to teach them something. The Learner figures things out when they hit unfamiliar territory, and has a better chance of finding just the right job for them. The Careerist ends up a second rate accountant at a third tier firm, pays the bills, and resents their boss.
Yes, these are archetypes, and everyone has to balance pragmatism with their passions, but that's the essential difference. Granted, someone with the programmer aesthetic may also ask the question, but more in the context of "which one will be the least wasteful use of my time." But my guess is that it's the careerist impulse asking that question, because the Careerist is far more fearful about making a mistake than the Learner, and the Learner generally makes a better programmer because the Learner does not fear mistakes. The Learner, like the Programmer, embraces failure in the pursuit of skill.
Yes, learning functional languages like Scheme and Haskell is good as an introduction to functional programming. As far as your classmates complaining about Perl, while Perl isn't as popular as it once was, it is certainly still a widely used language in business.
I can understand your classmates wanting to learn practical languages used in the real world, but I think they miss the point that once you are an experienced programmer and have been exposed to several programming paradigms, learning new languages is mostly just a matter of picking up the new syntax. Thus, as long as you have exposure to the concepts, you can "specialize" in whatever language your eventual employer favors without much difficulty.
Perhaps because people have been influenced by statements such as Edsger Dijkstra's classic piece of trolling, "It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration." (link)
It leads to fear of suffering permanent brain damage if you learn the "wrong" language. Your Perl example is unsurprising, since Perl is one of those languages that often invokes criticisms like this from its detractors.
Your first language should focus on concepts, not syntax or idioms. Using that as a guideline:
- Perl means a lot of lookup of special variables and arcane syntax
- PHP means mixing of concepts because of its organic growth
- Java means a little confusion since not everything is really an object
- Assembly/C/C++ means a ton of low-level stuff, which is great if you want to do embedded systems development but detracts from higher-level concepts
- SQL is useful to see how natural language can (and cannot) be mapped to code and data structures
- Visual Basic for Applications focuses on special-purpose, throw-away stuff, and as such makes it far too easy to skip important concepts like proper error handling and refactoring
- LISP looks like simple syntax, but also has far too many shorthand expressions which are frankly meaningless without detailed knowledge of their full names
- Haskell often looks very much like mathematics, but can quickly degenerate into syntax soup
- Python ... Actually, Python is the only language I can't find any serious objections to for beginners. Maybe simply because it's the last language I've learned, and the next language will teach me the error of my ways.
Ask your classmates how they know a language is "wrong" if they have not used it. You can only figure out what you like by using a wide variety of languages.
Many of my classmates balked at the idea of having to learn a language they would never have to use again, but I don't quite understand where so much of this fear of learning less popular languages comes from.
Without knowing them I cannot say with certainty why they would feel this way. Maybe they're lazy. Maybe they have used the language before and didn't like it. Perhaps they are afraid to try another language. Who knows. What I do know is that as a CS student, researcher, and having worked in industry, knowing a variety of languages, well, is a huge asset and you never know what you are going to use or not. Example: When I was first learning C my teacher introduced us to shell scripting and command-line utilities like grep
and awk
. My friends didn't bother to learn these to a level of competence. I now use them at work everyday.
I am taking a search engines class this semester, which is done in Perl and again I am seeing classmates complaining about the language choice.
Perl is very powerful and if you know how to use it, it can make your life a lot easier. It's also similar to Python and Python is heavily used at one of the top recruiters of CS students: Google. Your classmates should be eating this up. FWIW, I know perl and python to a intermediate level (not a beginner but not an expert).
I can understand having a favorite language and disliking others but why do some get worked up over learning it in the first place?
Young and vain? I was that way, too. But my "annoyance" was more in the realm of math. So from that experience I'd wager that they are worked up about it because they do not enjoy learning new things or that new languages are difficult to learn for them. (But then, anything worth knowing isn't going to just fall into your lap, I say)
Can you really learn the "wrong" language? Isn't learning something like Scheme or Haskell good mental exercise if nothing else, and useful at least to exposure to different ways of solving problems?
To the first sentence: No, but you can definitely learn languages you would prefer not to have +cough+ Lisp +cough+ =)
To the rest: Yes! You should learn as many languages as possible to find out what you like and to expand your horizons. There is no requirement to master them all, but having a working knowledge is always helpful. You never know when a language you thought would be a waste of time to learn comes in handy.
-
1
-
1+1 for 'learn as many languages as possible'. If you know a variety of languages, it becomes trivial to pick one for a given task. Commented Feb 14, 2011 at 13:53
-
1@Michael: Moreover, it makes it easier to learn a new one, since you will know most of the concepts already. Commented Feb 14, 2011 at 14:51
-
@Michael: Nothing wrong with Lisp =). I'm just not a functional-programming-language guy. Plus, so many parentheses!! However, I've seen some VERY elegant solutions implemented in Lisp. Lots of respect for Scheme and Lisp gurus.– aquaCommented Feb 15, 2011 at 4:18
Because hiring programmers is such an arbitrary, capricious process, the simple fact is that if you choose the wrong technology, you might find yourself going the way of the dodo
On the front page at any given time, you will see near religious fervor on such beliefs as:
- A college degree in computer science is necessary to be a good programmer.
- A Master's degree in computer science makes people bad programmers.
- Certifications are absolutely necessary to advance your career.
- Certifications are a red flag indicating a bad programmer.
- A college degree in a field other than computer science tends to result in the best programmers.
- You aren't a good programmer unless you also program on the evenings and weekends.
- and on it goes.
The one constant through it all is that 99% of companies out there want you to have X years of experience with Y technology... And since a person only has so many cycles available, what they spend those cycles on matters a great deal.
I think the fear in choosing the “wrong” language to learn is mainly due lack of information and lack of guidance, such as:
- Fallacy of silver bullet. The misconception that there is The Right Language for the job, environment or project. And if you pick the wrong one, you're toasted.
- Not understanding that programming transcends languages. Language is just a tool, like typewriter or computer to writer. It's not about learning nuances of the tool (syntax), but what the tool enables (concepts, abstractions, etc) you to create.
-
That's why for example Scheme is such a great teaching language. Programming is about two things: abstraction and reuse. Scheme has exactly two features: function abstraction and function call (i.e. reuse). Heck, it doesn't even have syntax! Commented Feb 14, 2011 at 15:23
We're exposed to more opinions.
Compared to how things may have been done in the past, there is more second-guessing regarding how we're spending our time because we're exposed to more opinions - everyone has their thoughts on what the first programming language should be and since it's such a finicky subject, anyone can justify anything.
Due to our fast-moving lifestyle, everyone has an innate fear of wasting their time. The accentuated fear of learning the wrong language is simply a result of people being easily exposed to a multitude of opinions.
Its the general dislike of learning something that has questionable usefulness. I can see the sting here being even worse since this is the class that people want to take and their still learning something they think is useless. I know that if I was going to collage I would want to learn something that I can use in the real world.
The only part where I could disagree with those other people is when a language is heavily in use and they just don't want to go outside of their bubble to learn it. Only then does the complaining not make sense.
Why is it 'fear'. I would call it animosity of have been force fed something you do not want or do not feel it is important. No language is wrong but we have limited time to focus on things. I had to do my CS classes with Java and was not happy about it. Not because I feared Java to be the wrong language, but that was not where my career focus was.
Now Java is useful right? LOL Everyone learns Java. That is what you do not want to compete in. Your resume will be in a stack of 1000's with the heading Recent CS Graduate that Knows Java. Your actually probably better off employability wise learning Schema as that is the secret sign that you went to an elite university and not some dinky community college.
I would also say this sort animosity is much wider than CS in general, but indicative of higher education in general. I'm sure the instructor picked Perl because he knows Perl, and can grade it easily, and fears learning newer languages that the students would rather learn. I think its your own education and you should be able to map out the technologies you feel are necessary for your own success.
(P.S. MIT gave up on Schema and switched to Python)
-
Kind of sad about mit giving up on Scheme, SICP is something that every programmer should read. I tend to promote it at every chance. Commented Feb 14, 2011 at 4:51
-
This reminds me of my University days. A few years after I had started, the CS department switched from C++ to Java as the main teaching language. A couple years after (when I was attempting to teach data structure tutorials), it was clear that none of the students understood anything about memory allocation (e.g., they were completely lost on stack vs. heap). Consequently, they did not grasp basic operations on the data structures we tried to teach them. Not long afterwards, C++ became the favoured language again.– smithcoCommented Feb 14, 2011 at 5:07
-
In practice - learning new languages is easy once you understand programming. People recommend languages like C because it requires you to declare pointers and allocate memory and protect write access to your pointers...when you think in these terms everything else is quite easy because you already consider all these things. It's harder to do the reverse - starting with a more abstract language and then building the experience to understand all the underlying things that are happening. Commented Apr 26, 2017 at 0:38
Time is the rarest commodity of all, once you get out into the real world - and no-one wants to waste time on skills that won't give them any real benefit.
That being said, I don't think there's a 'wrong' language to learn - but I wish I had've discovered Ruby years ago instead of struggling with doing advanced things in PHP...