Answers.Body: <p>I teach classes that each use different languages: Python, C#, Visual Basic, Thunkable, Scratch, Alice, Small Basic and a few other odds and ends.  I am not good in any of them off hand, but I have a set of resource locations that will refresh my memory or show me the important features of the languages.  I learn how to learn languages.  I get the language syntax confused all the time switching back and forth like I do so I have to have samples handy as to how a particular task is done in a particular language.  I still mess up regularly but the kids all think I am a nut case anyway so not big deal.  They live with it.</p>
  
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2019-08-19T19:57:32.273Z
Answers.Text: Hmmm, so is this "how _not_ to do it_"? Language isn't just syntax. Just as spoken language is more than grammar.
Answers.UserDisplayName: Buffy
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2019-08-20T18:20:43.250Z
Answers.Text: Once you understand the fundamentals of programming languages the differences at the beginning level is just syntax.  Once a kid can program in something as simple as Scratch (although some pretty complicated programs have been don in Scratch) learning a new language starts with the new syntax.  When I am doing Python, Java and Small Basic it is often "Opps, wrong For loop syntax".  Language is not just syntax, but often the differences between languages is syntax.
Answers.UserDisplayName: Garth Flint
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2019-08-20T18:43:39.563Z
Answers.Text: Sorry, but you are demonstrating ignorance here. A good python program should not look like a VB program. It requires a different mindset. Do you think that the difference between, say, Scheme and Scratch is just syntax?
Answers.UserDisplayName: Buffy
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2019-08-19T19:33:21.327Z
Answers.LastActivityDate: 2019-08-19T19:33:21.327Z
Answers.UserDisplayName: Garth Flint
Answers.Body: <p>An effective way to learn another programming language is learning compared to the known language.
    Ideally I think one language should be learned for each important paradigm: C / C ++ for imperative / objective paradigms, lisp / Haskel for functional paradigm and SQL for declarative paradigm - the rest of the languages being a combination of these paradigms.
  As for the syntax there is "Intellisence" or equivalent.</p>
  
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2019-08-19T19:59:10.503Z
Answers.Text: Actually, though, the question was about _how_. You seem to be saying: Just. Do. It. Not necessarily a bad approach, of course.
Answers.UserDisplayName: Buffy
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2019-08-19T18:44:40.320Z
Answers.LastActivityDate: 2019-08-19T18:44:40.320Z
Answers.UserDisplayName: Liviu Serbanescu
Answers.Body: <p>Once you learn how to program with a given paradigm, learning other languages in that same paradigm should be fairly straightforward. One of the best ways is to write a large program in the new language. </p>
  
  <p>But if other tools than those you are used to are more commonly used with the new language use those tools as well. </p>
  
  <p>But there are some subtitles. For example, Java and Python are quite close conceptually. But the differences require that you "think different" about some things. For example, dynamic vs static typing is a really big difference between the two languages even though they are both OO languages at base. In Java you write (I hope) a lot of interfaces. In Python it would be odd to do so, even if actually possible (with different syntax). </p>
  
  <p>On the other hand, if you need to learn a language in a different paradigm, say a functional language rather than those you have in your list, then it might be good to go back to a "know nothing" stage and start with a good book intended for beginners in that language. This is because the thought process in, say Scheme, is quite different from that in Java. For example, it is a bit of a subtle thing to write a linear time process to reverse a list in Scheme if you are thinking like a Java programmer. But the way that you do that task efficiently is a mind expander. </p>
  
  <p>So, for a "similar" language, build something big with appropriate tools and watch for the tricky bits. For a "different" language, start over. Here "similar" means the same overall paradigm. </p>
  
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2019-04-30T12:51:51.470Z
Answers.LastActivityDate: 2019-04-30T12:51:51.470Z
Answers.UserDisplayName: Buffy
Answers.Body: <p>Looking at Buffy's answer it's clear to me that I've understood the question quite differently, so I will set some context before I get to the point.</p>
  
  <blockquote>
    <p>However you are good in only one language.</p>
  </blockquote>
  
  <p>I think that this is too strong: it's possible to be good in several languages <em>if</em> you use them all frequently. However, I do know the feeling. The main language used in my undergrad course was Java, and that was virtually the only language I used in the 7.5 years after graduating. But for the past 9 years the primary language in most of the projects I've worked on has been C#. Now when I revisit Java I keep typing <code>string</code> and getting compile-time errors until I correct it to <code>String</code>.</p>
  
  <p>On the other hand, the key word there is <em>primary</em>. One project was written in C# but used a code generation tool whose templates were in some weird Visual BASIC variant for which I never found documentation, and in addition had large and complex SQL stored procedures. Real world projects often contain an unholy mess of different languages, chosen for good or bad reasons, and the ability to handle that is a useful skill to develop.</p>
  
  <hr>
  
  <blockquote>
    <p>As I know all languages are related to each other at some extent, but it's difficult for me to remember syntax for all languages</p>
  </blockquote>
  
  <p>Supplement your memory. Write revision notes as though you were preparing for an exam on the differences between the language: one side of paper (A4 or letter) where you list the most important mappings from your strongest language to the target language. E.g. if your strongest language is Java then your notes for C# might include:</p>
  
  <ul>
  <li><code>import</code> is <code>using</code></li>
  <li>Method names begin with upper case</li>
  <li><code>Map</code> is <code>IDictionary</code> and <code>HashMap</code> is <code>Dictionary</code></li>
  <li>Generic types are reified, so if you have a static field <code>Foo</code> in a class <code>Bar&lt;T&gt;</code> then <code>Bar&lt;string&gt;.Foo</code> is a different field to <code>Bar&lt;int&gt;.Foo</code>.</li>
  </ul>
  
  <hr>
  
  <p>Also, use IDEs where possible. It's much quicker to fix compile-time errors as soon as you type them than to wait until you've finished a unit and can attempt to compile. Auto-completion for syntax is also getting quite advanced now.</p>
  
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2019-05-02T08:54:08.897Z
Answers.LastActivityDate: 2019-05-02T08:54:08.897Z
Answers.UserDisplayName: Peter Taylor
Body: <p>As in computer science field we have to learn several programming languages like C++, Java, C#, python, php etc to complete our tasks and home assignments. However you are good in only one language. As I know all languages are related to each other at some extent, but it's difficult for me to remember syntax for all languages and doing different tasks for these to become familiar to these. </p>
  
  <p>How can I improve and learn other languages easily so that I can perform my assignments easily and in less time? 
  If anyone can guide me.
  Thanks in advance </p>
  
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2019-04-30T15:19:51.420Z
Comments.Text: Assuming that the professor is making reasonable choices about what languages to use for different assignments, the languages will be chosen specifically to highlight important differences in approach.  This means that you are being given tasks that are intrinsically more difficult to "translate" between languages.
Comments.UserDisplayName: Ben I.
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2019-04-30T21:54:49.677Z
Comments.Text: I have fixed some of the grammar in the question, but do not know the meaning of “you are good in only one language”.
Comments.UserDisplayName: ctrl-alt-delor
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2019-04-30T21:57:45.427Z
Comments.Text: Unfortunately your teachers obsession with teaching many languages is miss-guided. It is better to learn one language well. (plus may be some side Domain Specific Languages e.g. regex, html, css, bash, awk, …). C++ is to complex for a novice. You should know at least 3 languages well, before starting C++.
Comments.UserDisplayName: ctrl-alt-delor
Tags: <self-learning><programming><computational-thinking>
Title: How can I improve other programming languages while having command on one language
ThreadText: # How can I improve other programming languages while having command on one language
  
  (Asked by: username_0 on 2019-04-30)
  
  As in computer science field we have to learn several programming languages like C++, Java, C#, python, php etc to complete our tasks and home assignments. However you are good in only one language. As I know all languages are related to each other at some extent, but it's difficult for me to remember syntax for all languages and doing different tasks for these to become familiar to these.
  
  How can I improve and learn other languages easily so that I can perform my assignments easily and in less time?
  If anyone can guide me.
  Thanks in advance
  
  **Tags:** self-learning, programming, computational-thinking
  
  > **Comments:**
  > **username_1**: Assuming that the professor is making reasonable choices about what languages to use for different assignments, the languages will be chosen specifically to highlight important differences in approach.  This means that you are being given tasks that are intrinsically more difficult to "translate" between languages.  
  > **username_2**: I have fixed some of the grammar in the question, but do not know the meaning of “you are good in only one language”.  
  > **username_2**: Unfortunately your teachers obsession with teaching many languages is miss-guided. It is better to learn one language well. (plus may be some side Domain Specific Languages e.g. regex, html, css, bash, awk, …). C++ is to complex for a novice. You should know at least 3 languages well, before starting C++.  
  
  ---
  
  ## 4 answers
  
  ### Answer by username_4 on 2019-04-30. Score: 2 | Accepted answer
  
  Once you learn how to program with a given paradigm, learning other languages in that same paradigm should be fairly straightforward. One of the best ways is to write a large program in the new language.
  
  But if other tools than those you are used to are more commonly used with the new language use those tools as well.
  
  But there are some subtitles. For example, Java and Python are quite close conceptually. But the differences require that you "think different" about some things. For example, dynamic vs static typing is a really big difference between the two languages even though they are both OO languages at base. In Java you write (I hope) a lot of interfaces. In Python it would be odd to do so, even if actually possible (with different syntax).
  
  On the other hand, if you need to learn a language in a different paradigm, say a functional language rather than those you have in your list, then it might be good to go back to a "know nothing" stage and start with a good book intended for beginners in that language. This is because the thought process in, say Scheme, is quite different from that in Java. For example, it is a bit of a subtle thing to write a linear time process to reverse a list in Scheme if you are thinking like a Java programmer. But the way that you do that task efficiently is a mind expander.
  
  So, for a "similar" language, build something big with appropriate tools and watch for the tricky bits. For a "different" language, start over. Here "similar" means the same overall paradigm.
  
  
  ---
  
  ### Answer by username_6 on 2019-05-02. Score: 3
  
  Looking at username_4's answer it's clear to me that I've understood the question quite differently, so I will set some context before I get to the point.
  
  > However you are good in only one language.
  
  I think that this is too strong: it's possible to be good in several languages *if* you use them all frequently. However, I do know the feeling. The main language used in my undergrad course was Java, and that was virtually the only language I used in the 7.5 years after graduating. But for the past 9 years the primary language in most of the projects I've worked on has been C#. Now when I revisit Java I keep typing `string` and getting compile-time errors until I correct it to `String`.
  
  On the other hand, the key word there is *primary*. One project was written in C# but used a code generation tool whose templates were in some weird Visual BASIC variant for which I never found documentation, and in addition had large and complex SQL stored procedures. Real world projects often contain an unholy mess of different languages, chosen for good or bad reasons, and the ability to handle that is a useful skill to develop.
  
  ---
  
  > As I know all languages are related to each other at some extent, but it's difficult for me to remember syntax for all languages
  
  Supplement your memory. Write revision notes as though you were preparing for an exam on the differences between the language: one side of paper (A4 or letter) where you list the most important mappings from your strongest language to the target language. E.g. if your strongest language is Java then your notes for C# might include:
  
  * `import` is `using`
  * Method names begin with upper case
  * `Map` is `IDictionary` and `HashMap` is `Dictionary`
  * Generic types are reified, so if you have a static field `Foo` in a class `Bar<T>` then `Bar<string>.Foo` is a different field to `Bar<int>.Foo`.
  
  ---
  
  Also, use IDEs where possible. It's much quicker to fix compile-time errors as soon as you type them than to wait until you've finished a unit and can attempt to compile. Auto-completion for syntax is also getting quite advanced now.
  
  
  ---
  
  ### Answer by username_3 on 2019-08-19. Score: 2
  
  I teach classes that each use different languages: Python, C#, Visual Basic, Thunkable, Scratch, Alice, Small Basic and a few other odds and ends. I am not good in any of them off hand, but I have a set of resource locations that will refresh my memory or show me the important features of the languages. I learn how to learn languages. I get the language syntax confused all the time switching back and forth like I do so I have to have samples handy as to how a particular task is done in a particular language. I still mess up regularly but the kids all think I am a nut case anyway so not big deal. They live with it.
  
  > **Comments:**
  > **username_4**: Hmmm, so is this "how _not_ to do it_"? Language isn't just syntax. Just as spoken language is more than grammar.  
  > **username_3**: Once you understand the fundamentals of programming languages the differences at the beginning level is just syntax.  Once a kid can program in something as simple as Scratch (although some pretty complicated programs have been don in Scratch) learning a new language starts with the new syntax.  When I am doing Python, Java and Small Basic it is often "Opps, wrong For loop syntax".  Language is not just syntax, but often the differences between languages is syntax.  
  > **username_4**: Sorry, but you are demonstrating ignorance here. A good python program should not look like a VB program. It requires a different mindset. Do you think that the difference between, say, Scheme and Scratch is just syntax?  
  
  ---
  
  ### Answer by username_5 on 2019-08-19. Score: 1
  
  An effective way to learn another programming language is learning compared to the known language.
    Ideally I think one language should be learned for each important paradigm: C / C ++ for imperative / objective paradigms, lisp / Haskel for functional paradigm and SQL for declarative paradigm - the rest of the languages being a combination of these paradigms.
  As for the syntax there is "Intellisence" or equivalent.
  
  > **Comments:**
  > **username_4**: Actually, though, the question was about _how_. You seem to be saying: Just. Do. It. Not necessarily a bad approach, of course.  
  
  ---
  
  