Live data from Hacker News

Ask HN: Learning multiple languages vs. mastering one

news.ycombinator.com

51–60 of 137 posts

Re: Ask HN: Learning multiple languages vs. mastering one

#51
post #43
post #10

I suggest Elm into Haskell. Elm will give you the ability to do frontend work while familiarizing yourself with functional programming concepts. Once you're OK with Elm, go to Haskell, which is a great language to get exposed to plenty of radically new programming concepts. Once you have done that, and considering you have experience in Java, you will have a much broader view of abstraction thinking.

I don't see how you can learn Elm without knowing the basics of Haskell.

That statement makes about as much sense as "I don't see how you can learn Haskell without knowing the basics of Elm". Arguably Elm is easier to learn from scratch since it is a younger language and does not have as much complexity baked into it as Haskell.

Re: Ask HN: Learning multiple languages vs. mastering one

#52

Recently getting into kotlin and to a lesser extent Rust; also from a Java background. First of all, there's more to learning a language than understanding the syntax. That you can accomplish in a few hours, depending on your understanding of the underlying concepts. But from there to grasping new idioms specific to a language and generally being productive takes a lot longer. You have to engage with it for longer ti…

@OP Just to give a bit of motivation for learning Kotlin - it's now the official language on Android. Not sure if Android is of interest to you, but either way at least you know it's in wide use and clearly a powerful language.

Re: Ask HN: Learning multiple languages vs. mastering one

#53
If you want to get a job, either stick to something that is very popular (bigger pool, higher competition) or unpopular (smaller pool & competition).

If you want to create your own projects, you have so many choices here, but the safest bet is to use a popular solution - as a beginner it will be easier for you to get help.

Re: Ask HN: Learning multiple languages vs. mastering one

#54
post #25

You should learn C. Most current engineers don't, and therefore the fundamentals of things like memory allocation, data types, call stacks, etc. remain a mystery to them. I have one other comment to make. In my opinion, being a strong programmer is mostly a "knack," meaning it's not a particularly teachable skill. Some people are just amazingly good at it. If you are, great. If not, I suggest acknowledging that and f…

Noob question: Is there room for below average programmers? If so, where?

A person can be an average programmer, and still a superstar if they are an expert in a problem domain. As an examples, shipping / order fulfillment has many weird nuances - things like tariffs, dealing with dangerous goods, differing address systems, etc. Expertise in practically applying the code is extremely valuable.

Re: Ask HN: Learning multiple languages vs. mastering one

#55
Learn whatever language will get you a job.

But for fundamentals, learn how a CPU actually works. Learn something like 6502 Assembly and make a game, or learn how a CPU emulator works for a game like Pac Man (take apart the source for MAME and then build it back up for just Pac Man).

At the end of the day, all of these fancy languages have to end up as 1's and 0's and run on an actual CPU. Too much abstraction can be a bad thing.

Re: Ask HN: Learning multiple languages vs. mastering one

#56

I have written books using a variety of languages that I also have used in work projects. I enjoy variety. However, as a practical matter, learning just Java and Python really well will cover most areas of software development. My personal preferences: I prefer Ruby over Python as a scripting language, but I am forced to use Python in my machine learning job. I have used Common Lisp since about 1984, love it, and I a…

> However, as a practical matter, learning just Java and Python really well will cover most areas of software development.

I disagree, given that both are interpreted languages, that excludes (practically) most embedded, low-level, high-performance software. Sure, you can use stuff like micropython, but it is not as practical as C is in that domain.

Re: Ask HN: Learning multiple languages vs. mastering one

#57
I've been heavily into Java/Spring since I started programming and along the way have done a year long stint in C#/.NET

I've been interested in Ruby on Rails from afar for ages but just this week I finally saw the light and got excited by how awesome it looks and have committed to becoming proficient in it. For me it's the excitement, the magic.

Perspective on existing knowledge will deepen with new knowledge gained, so theres always great benefits.

Re: Ask HN: Learning multiple languages vs. mastering one

#58
Programming Languages are just like Human Languages. Every culture builds a common form of expressing ideas based around their shared values, needs and outlook.

Restricting yourself to one Human language limits your thinking and perspective. Each time I acquire a new Human Language, I find myself thinking differently and understanding people more deeply. Speaking French and German allows me to be a better communicator in English.

Human Languages can also provide means to an end. Learning German allows me to become a German Citizen. Learning Mandarin would allow me to start a business in China.

The same goes for Programming Languages. As mentioned by others, different Programming Languages were developed by people with different values, needs and outlook. Each time I learn a new Programming Language, I learn new forms of expression for my problem.

Programming Languages allow you to do different things. Depending on what you want to do with your career, choose differently.

Some languages are more useful than others. If you only know Java then you have a lot of learning ahead. I would explore in this order:

  * Python - You can do almost everything well in Python. Make lots of stuff  
  * Command Line & Bash - How systems are glued together. Deploy the stuff you make.  
  * GNU Regex & awk - How to find things and process text. A key building block of programming is processing text.  
  * HTML5 & Javascript - The right way to make most visuals. A frontend for your stuff.  
  * C - How all the above works underneath. Understand the stuff you made.  
  * SQL - How to handle data in databases. Persist the stuff.  
  * Haskell - Pure functional programming. Your Python and JS code will improve. Make the stuff beautiful.

Re: Ask HN: Learning multiple languages vs. mastering one

#59
There's much more to programming/software engineering/software craftsmanship than just the language. Firstly, the majority of the languages used in the industry really only have superficial differences, they are all implementing the same OOP semantics, with minor differences and are mostly isomorphic to each other up to some syntactic sugar.

To really gain some knowledge out of learning a new language you should ideally cross boundaries to a new paradigm. The most commonly cited example now is Haskell, which is a fairly state-of-the-art language in terms of PLT research, and is a great illustration of the functional paradigm, due to its purity. The consensus among haskellers is that the code is much more concise + higher-level (case in point Xmonad being roughly 1/10th of the equivalent C software packages), much more type-safe and also easier to refactor etc. IMO, after I became productive in Haskell, programming in other languages seemed a bit like writing assembly (there's nothing wrong with assembly, in fact, optimising code down to cpu cycles was a favorite pastime of mine some time ago). Also, the boilerplate is much less significant compared to most other languages. (Case in point, again do the recent research in generics, GHC can automatically derive instances for various type classes. For instance, the most popular JSON package, aeson has the ability to automatically generate ToJson/FromJson classer for your types with no user code).

One downside of Haskell is that it may have a steeper learning curve, to really master it. Most of the reading will be from research papers and functional programming journals, but all this learning really does translate into a skill that pays off.

So my personal advice: if you really want to learn a new language, you should go with a different paradigm, e.g. Haskell if you're new to functional programming. But I would suggest instead just building stuff, and if you notice that your implementations are pushing your current language to its limits, see how other languages fare.

But IMHO, if you want to grow as a software engineer, you should just build stuff, build an operating system, build a compiler, build a database, build a web server, a game engine etc. You will cover far more theory and the learn more skills than just learning a new syntactic sugar.

Re: Ask HN: Learning multiple languages vs. mastering one

#60
It's inevitable you will have multiple languages / platforms comprising your stack. Bash scripts for admin. Golang to write servers. Data science in Python. JS / D3 on the frontend. C# / Unity 3D modelling and scripting. Even low level C / Assembly if you need performance optimizations.

I think mastery of cloud development and deployment is crucial going forward. Start experimenting locally right on your laptop with minikube, microk8s, snaps, prometheus. And get a sense of designing scalable systems.

You should have the ability to immediately estimate project costs. So you can give potential stakeholders a ballpark figure to open negotiations. Billion item recommendation system running on spark that serves 100K+ requests per second deployed to 1000 node cluster. Will it cost under $100 per hour? Or do we jump to tensorflow and a few large gpu instances for half that. Once you gain sufficient mastery. It will become second nature. And you can concentrate on design and building.

Best of luck :)

Post reply on HN