Live data from Hacker News

Ask HN: Learning multiple languages vs. mastering one

news.ycombinator.com

41–50 of 137 posts

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

#41
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 am fortunate to get to occasionally still use it.

I like Haskell, but I am a ‘forever student’ and use a subset of the language that I understand.

EDIT: some knowledge of JavaScript is also recommended

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

#42

Go "T-shaped". In other words, be a "jack of [some] trades, master of [a few]". Specifically, you almost have to choose modern JavaScript -- because you will need it on virtually any real project (it's everywhere), and you've already got the enterprise-y server-side covered. Don't get pigeonholed into backend-only, non-JS roles. Despite all the haters, es6+ is powerful and expressive. You'll want to suppress your OO…

T-shaped is excellent advice but there is something to be said for “paint drip shaped” skills too: imagine a thick line of white paint on a wall and how it drips down unevenly. Some of the drips/skills are very long, some are short, and most of the paint is that wide beam. In relation to the OP then, being a master of an area is valuable, but so is knowledge of a few others in some depth and a lot of other areas at a…

I'd been hunting for this 'paint drip skills' for a while now. I finally found it again. It's from Kent Beck [0] (plus HN thread [1]) where as I kept on assuming it was from Paul Graham.

[0]: https://www.facebook.com/notes/kent-beck/paint-drip-people/1...

[1]: https://news.ycombinator.com/item?id=12226242

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

#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.

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

#44
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?

> Is there room for below average programmers?

Yes!

If we assume that about a third of all programmers are "average" (whatever that means), another third is "above average", and one third is "below average". So, it's not actually a tiny minority, despite what Hackernews might make you think.

Programming consists of many different aspects: creating an architecture, designing algorithms, implementing them, hunting bugs, testing etc.

If you think you are "below average" in one of these areas, you can team up with other developers who are good in that area, and let them guide you.

For example, I work with somebody who is amazing at digging deep and really understand the low-level nitty gritty of bugs. But, they are not that great at building high-level abstractions. So when a task involves building high-level abstractions, we discuss these abstractions beforehand, write some mock examples that use the new abstractions etc.

Some developers aren't good at low-level stuff, but build great user interfaces. Some don't do that very well, but shine when it comes to automation.

To sum it up, "below average" programmers can be very useful to an organization with the right amount of specialization and collaboration/mentoring.

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

#46
post #31

Earlier quoted context omitted.

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

I wouldn't think of it in those terms. Most programmers aren't "amazingly good" at it. So, I'd say most work as ... programmers. I just wanted to make this point because I've repeatedly seen folks frustrated by others who just get things faster and ultimately make progress much more quickly in their careers. I think it's useful/important to acknowledge that programming is a bit like sports. It's not fair, but some pe…

It really depends on what you personally believe means "amazingly good programmer".

For some it means writing hard mathematical algorithms. For some it means writing the efficient and secure low level code. For some it means solving real problems fast by efficiently glueing existing code. For some it means great communication/management with 30 other programmers on team.

I think it is more about finding who you really are and following that than trying to become some dogmatic idea of what "amazingly good programmer" is.

Find your niche. The bubble effect is strong in all of us.

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

#47
post #24

I would sort of do a hobby project in the following languages (in addition to Java for Object Oriented Programming, although something obscure like Smalltalk can be fun for an evening): - Haskell, functional programming with static types - Clojure (or Common Lisp), functional programming in a dynamic language (and understanding the AST-as-syntax-homoiconicity) - C/C++, "low-level" programming (e.g. pointers, memory m…

Could you give some examples of projects for which each of those language (types) are useful. Because I think it is important to choose a language fitting with the problem (or the other way around if it's exercise)

I'm going to respond even though not OP, because I had this same mindset for a long time.

A while ago I was posting on one of the "how do I learn math as an adult" threads that inevitably pop up here, and I got an absolutely wonderful response full of details and resources, but I asked basically the same followup question: "Thanks so much, this is great, but by the way, how can I use these things?"

The hard part about answering that question is that these are fairly abstract mental tools that affect your very perception of problems. I don't ever bust out Prolog or Haskell while in my day-to-day work, or even directly and consciously apply Prolog or Haskell-style constructs, but I 100% approach problems differently as a result of knowing them. How can I demonstrate that? It's difficult. When I think about real work problems, I don't spend a lot of time doing some kind of meta-thought where I try to identify how I know to think that way. But I do know for example that my Java code ends up looking and feeling more Haskell-y when I'm done. And I know that my coworkers look at my JavaScript code for example and wonder how the hell I came up with a particular solution, and it's for the same reason: I just see it differently, because I've built up a more varied mental toolbox.

That may seem like a wishy-washy answer, but hopefully it has some use. Think of it like learning Latin or how to play an obscure instrument: they're not necessarily tools for application, they're for changing how you see language or music, or in our case, how you see problems.

EDIT: All of this isn't to say that discussions of languages in the context of a specific problem area can't be useful. Sasa Juric has a wonderful section on which problem domain Elixir excels at in "Elixir on Action," for example. I just think in many cases, as with Prolog and Haskell, the primary benefits appear at higher levels of abstraction.

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

#48
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 time and be forced to solve all the day to day problems you are going to have. So, learn by doing that. Just pick any modestly scoped project you are interested in doing and start doing it. Start with something not critical but still interesting enough that it is worth doing. I tend to avoid completely academic stuff. Then build on that.

In my case, I've been converting Java code to Kotlin for a few weeks now and am getting to the point where I'm comfortable with the language. Kotlin is of course the easy thing to pick up if you are doing Java since it is designed to be easy to make the switch. So definitely would recommend doing that provided your team is OK with that. It starts paying off pretty early in terms of reduced complexity and verbosity and extra type safety.

Rust is a bit harder but the only way to learn is by doing. I've been taking baby-steps there but it looks worth my time. There I've been reimplementing some OSS stuff I did years ago with an eye to reviving those projects. Progress is more slow because it is too academic. But rust has a lot of new idioms for me to wrap my head around before I can use it professionally so slow is not necessarily bad.

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

#49
If your primary focus is to get a job,focus on languages, frameworks that are in demand.

If you already know Java, stick with it and learn an MVC framework to create APIs (I'm not a Java guy).

Learn HTML+CSS+JavaScript and then one UI Framework like Bootstrap and one SPA Framework (React or Angular).

Learn at least one RDMS - Postgres or MySQL they are the most popular open sourced RDMS

Learn Python. It seems to be the go to scripting language for data science and....

Learn about cloud infrastructure - preferable AWS since it's the most popular. You're going to have to host what you're doing somewhere. Opinions differ, some would say just to host on something like Linode, much cheaper and simpler.

Post reply on HN