25
votes
What programming languages will you focus on in 2020 and why?
This question was inspired by this article:
As well as its discussion on Lobsters
So, what programming languages will you focus on in 2020 and why? Are there any languages, frameworks, or technologies you will not be able to focus on, but want to? Are there any that you will be focusing on, but do not want to?
Programmatic thinking is much more important than focusing on one language. If vba helps you, it’s the best for you to learn
I might suggest looking into C# as well. I developed a microsoft excel plugin for 3 years that was used by some pretty big names (Microsoft, Salesforce, KPMG Nunwood Consulting, LexisNexus) and developed it all in C#. We started out working in VBA but found C# was just a bit more workable. When I was leaving we were looking at moving from .NET Framework to .NET Core so I can't help with that aspect. Not to say VBA isn't the correct solution for your use case, but more that it is rare where my excel development experience is relevant :)
I'd second that motion. Excel is like a multi-bit screwdriver; it can be used for many things, but for some things you are much better off using a dedicated tool. Learning a decent general-purpose language is like knowing how to make those dedicated tools. Besides, the last time I checked (and keep in mind I'm an outsider with zero actual interest in Microsoft's programming languages), the newer versions of Visual Basic offer a coding experience that's surprisingly close to C#. Though I don't know if that's going to ring true for VBA.
I'd be interested in what @Loire is trying to automate, if they're willing to share.
Since this sounds like an all-Windows environment, PowerShell is an option you might consider. For example, you can read a CSV file or send an email quite easily.
Aesthetically, I find PS to be a fairly ugly language, but once you get past that it can be quite productive for the sort of line-of-business tasks you're automating.
It would also be a good stepping stone to C#, as @Micycle_the_Bichael mentioned. Writing custom cmdlets in C# is incredibly easy.
This might be something you can accomplish fairly easily with shell scripts, depending on how CLI-friendly Outlook is. It's been ages since I had to write scripts for windows, but I believe at one time you could drop a file on top of a script and it would run the script with the dropped file's complete path as it's parameter, which would make it really easy for your successors. If that doesn't work anymore (I'm honestly probably misremembering altogether), VBA has an easy way to summon a file selector.
IMHO the biggest problem I have with your solution is that you're committing the one cardinal sin of Excel; using it to design printable reports. Excel formatting is so easy to break. Heck, formatting is easy to brake in any Office application. And that's less of a programming problem than a tooling problem. There are so many ways to tackle that problem that your head will spin from trying to count them.
When I was working on my Excel project my manager just got used to features being impossible/bugs/hacks being completely independent of our code and being due to some asinine decision Microsoft made about Excel that we had to figure out a way to work around. Almost all of them were formatting/cell based.
I'm not laughing. Sometime around the end of the month I'm going to be paid to attend a two-day training session in a complete garbage proprietary programming language called DELUGE. It's so bad has so little forethought that it's got me seriously pining for early 80s Microsoft BASIC. I swear that about 90% of the built-in functions that require numbers as inputs require them to be as strings.
They should have called it DELUSION.
The best language to learn is the one you'll use, and the language you'll use is the one you need. Best of luck.
Professionally:
Personally
As far as HTML + CSS + JS are concerned, feel free to PM me if you have any questions. I'm not expert, but I have been doing it for five years now, so I could help you with the basics.
I thank you very much for the offer. I appreciate it, and I'll return it in kind; if you have any questions on anything above, I'd be happy to answer. The things that I said I would be focusing on professionally (top list) are all things that I would consider myself reasonably expert in, and I'm happy to provide help or guidance on any of them.
In no particular order:
Go, because I work with the language and because I love it. It is by no means perfect, but it's the closest to perfection for me personally. Recently the authors have speeded up the evolution of the language, and I'm excited to see where it will go next.
C, because it's still the lingua franca of most OSs.
A flavour of Pascal or Oberon, because simplicity matters and because I'm a Niklaus Wirth fan-boy trash.
Custom and existing flavours of XML, including XSLT and XHTML5, because it's still a good [family of] language[s] for structuring [meta]data, as well as transforming and displaying it.
(POSIX) Shell, because you need to know how to command those pesky spirits in this devil-machine.
You may notice a pattern here. Most of these languages are simple and mostly easy to grasp. I am a man of simplicity. I think that a tool that you can't master fully is not worth preferring over a couple of tools one can comprehend working together.
They're also not very exciting for most people and not very new. I guess, because apparently simplicity is not very popular at the moment? Or because they are languages that do their job just well enough? Or I'm simply becoming an old fart who is afraid of new things :-)
Do you have much experience/thoughts on Golang for REST API development? I like Go a lot as a language from what I've worked with and I think it is the perfect language for my team (lots of people are learning it for Kubernetes stuff, it has a low learning curve for our sysadmin background folks, and way more efficient than python) but I can't decide if it is the right tool for the job and we already have a framework in python (very minimal but it does exist) so I want to make sure it is right before I make the uphill push.
I basically do nothing but REST-ish APIs in Go for a living. It's going pretty good so far. You'll be fine, unless you try to write Go as if it were Python, Ruby, or JavaScript. A mistake I've seen dozens of times. In those languages the first thing one does is grabbing the freshest, hottest framework off the shelf and get going at it. What works well in Go is a simplicity-first, library-centric approach. That is, master the
net/http
package in the standard library, add a couple of libraries for routing, SQL, KV, and assets, and… that's about it, really.I obviously can't tell if Go is the right tool for your job, but If you have any further questions, I'll be happy to answer, but keep in mind that time zones are a thing.
What's wrong with your Python solution? Changing a solution that works well to another solution that works well doesn't strike me as a very useful thing to do.
So I didn't make this super clear in my first post, but the whole thing needs to be reworked. The project right now is a single "API" that is actually 2/3 in php 5.1 and 1/3 in python2, the way it is deployed is such that it only works on one specific VM, which beyond being incredibly brittle also makes it a huge pain in the ass to set up a dev env, there's nearly no unit tests, there's no real semblance of version control (bc all changes are just made directly to prod bc setting up dev is a pain). There's also a huge mental shift on how the system should run and be interacted with by internal users so there is going to be a lot of changes to archictecture and a move to put it in docker/kubernetes. So basically I'm going to have to re-write almost everything already.
I'll keep working with Julia, because I think it's the best in my domain (scientific computing, statistics, data analysis, ...) and I'm pretty much an expert at it at this point.
I sometimes want to do a bit of max/msp again (visual programming language for audio and video) but it's a bit expensive, although I see that they have a $10 monthly subscription, which might be fine to mess around a bit.
I might have to do some simple C++ at work, it's kind of fun since I don't know it well, but it's certainly labourious.
Max/MSP was originally based off PureData from what I remember, have a go with that first and don't let the minimalistic UI turn you away. It's very functional, open source and has a decent community behind it :)
I've tried PureData a couple of times yes, but that Max UI looks juicy.
I took a lot of machine learning classes in the last year, I am working on improving my pythonic code. Instead of python code the java way
(Sorry, I need this.)
<rant>
Fucking Ansible, man. The Ansible devs knew they won't be able to make it all nice and declarative. They knew you're going to need features from actual programming languages, such as variables, functions, and conditionals. They knew YAML sucks ass. Like, a lot of ass. And still they went with YAML instead of an actual, sane language like Lua or Python.
Fucking Ansible, man.
</rant>
EDIT: Fixed the second ass-link.
Yeahhhhh. I like ansible in that once I get something working in ansible it makes my life a lot easier, but man does getting what I want in ansible suck a lot of the time. And the more complicated the tasks, the harder it is to justify to myself.
For python, I really liked these 2 Videos:
https://youtu.be/OSGv2VnC0go
https://youtu.be/7lmCu8wz8ro
I also follow Raymond on twitter where he shares some short tips
Looks like it'll be JS for me. I've been a PHP dev for years now, but the higher-ups at work decided to commit to a node/react stack for all new projects and some conversions are taking place. I also got moved from PHP project to an emberJS/Groovy project. We're in the process of migrating it to react, but in the meanwhile I guess I'm learning ember?
The four languages I will definitely be focusing on in 2020 are:
There are also a few other languages that I would like to eventually try out and learn concepts from:
Zig, because it's a better C.
D, because it's a better C++ (as if I'm actually qualified to say that). Honestly though, coming from even just my limited knowledge of Python and C, D is surprisingly approachable. I just wish it was more popular.
Rust, because it's also a better C++, but is actually popular and widely used, unlike D.
Prolog, because I want to give logic programming a serious try (and melt my fucking brain).
Haskell, because I'm curious about purely functional programming and have read a lot of neat things about it.
This year I would, at most, be able to start learning one of these languages, but I'd like to find the time to investigate a couple of them. I guess it's mostly going to come down to how invested I need to get into Java for school and how much difficulty I have with calculus and physics this year, but I am hopeful I'll be able to make significant progress in learning new things.
In terms of practicality, I think the best path forward for me would be to learn Rust. I like D and it is, like I said, surprisingly approachable for me, but I think Rust as a language is managed better and has a brighter future because of that. So, I suppose some time this year (hopefully sooner than later) I will start reading "The Book".
Regarding Haskell, I tried it a couple of years ago. I found it to be a really good way to learn something new. It is very different from the imperative paradigm usually used with most mainstream languages. I learned a lot about how to control mutable state and when and where to use it.
That said, the language itself is very difficult to work with. It seems to embrace doing things in an odd way just for the sake of it. It highly encourages hard-to-read styles of writing or at least all practitioners of the language that I could find on the net seem to embrace hard-to-read styles of writing it. Many of the concepts are deep computer science concepts that don't have immediately obvious business-related functions. The people who write about them seem to revel in being so smart that they understand these concepts, but have a really hard time explaining them to others or explaining their usefulness. And of course, they have their own package management system. Also, nobody else knows the language so anything you write in it will have to be maintained by you. That's fine if it's a hobby project, but generally not useful for work.
Anyone have suggestions for a decent alternative to Haskell? I always see it being the one suggested. I don't know much at all about functional programming but would like to dip my toes.
A lot of people like ML dialects like Standard ML and OCaml. Then there are F* and Idris, if you like it rough and are not afraid of shiny new stuff.
Type Driven Development in Idris is an excellent book. In some sense I consider it to be the best book for learning Haskell too :P.
It's the only pure functional language I've tried in earnest. I hear a lot about Rust these days, but have not tried it myself so can't really comment. If you know C#, I hear F# is a similar functional language.
I don't mean to deter you from learning Haskell. As I said, it was a worthwhile experience. I just can't use it directly in my day-to-day work. But I have used many of the concepts I learned from it to improve my C++ and Swift skills.
You are not alone in this thought process. Even many of Haskell's most staunch proponents agree that the language has a severe community problem about how interwoven and deeply confusing its code can be, to the point where many of them are pleading for people to write simple Haskell code, and train their Junior developers properly.
As someone who doesn't use Haskell, but took a university course on it (and failed it!), I can't think of a worse choice for your business than picking such a decidedly mainstream, yet also ironically esoteric language. It seems like a language best suited for small teams in niche areas, or academia.
Glad to see someone else who appreciates the em dash! I have the alt-code memorized: alt-0151
You had to reply to my one comment that didn't have one, didn't you? 😅
Thanks!
Swift as we'll soon be using it at work. I've already switched to it for all of my home projects because it's so nice.
I'll probably start learning Python 3.x. I have some stuff I maintain at work that was in Python 2.7, and I haven't had to touch it in a while. But I'm going to need to update it soon and will want to bring into the modern age.
I'll be learning C for school this semester. If I have any free time though, I would like to learn more python. I'd really like to get into web development and learn things like django, but man it seems hard to get into.
I liked Rust the last time I tried it. Might be going back to using it again. It looks pretty for my coding sensibilities, and I fathom the syntax.
I'm also looking at V. One: it's not mainstream. Two: it's made by a Russian dev. Three: it's a new, emerging language. Four: it promises to be really fast.
I'm just going to come out and say it: You shouldn't waste your time with V. The development and release of that language has been... controversial. To say the least.
Bunch of links that I recommend you read over (including comments on Tildes):
And funny enough, Christine Dodrill released another V related blog post today:
Overall, I wouldn't touch V with a ten foot pole... yet. If you really want to learn a not mainstream, new, emerging language, Zig is the better option.
Well... Balls.
I, too, want to pick up $800/mo. on a list of promises. I mean, I have the private roadmap written already. Could you guys pucker up and kiss my bank account?
-_-
($800 in Russia is ~50k₽. You can rent a decent apartment in Saint-Petersburg – 20~25k₽ – and still live comfortably on what's left. Saint-Petersburg is the second-biggest city in Russia.)
Thanks for the heads-up. I got really hyped for that project since a while ago.
Rust alone it is, then. When I'm ready for another nerdy language excursion, I'll consider Zig – and Odin, which was mentioned in the first linked thread, I believe.
Along with Zig, I would also suggest the following emerging languages that have interesting things going on:
Nim looks interesting. Thanks for letting me know.
Crystal looks rather Ruby-like, which I enjoy.
My employer uses C++ almost exclusively, but I am trying to make myself more marketable to other potential employers by learning Go.
C# (along with T-SQL, ASP.NET, Razor, VB, etc ...) has been my bread-and-butter for ~15 years. I want to leave the M$ stack, and in recent years, have been learning all the Linux things.
My list:
C - always wanted to learn it in and out, but never have done anything major with it.
Shell scripting - seems rather useful
Assembly - :)
It has to be Python. I was thinking about switching to Racket, the predictability of lisp syntax is enticing, but switching won't do me any good right now. Working with Python is not a real possibility in my area, but I can go to another state, and studying a language I enjoy makes things a lot easier. After learning the fundamentals, I can always switch to Java, C# or Javascript to become more employed.
Professionally, probably a lot of Python and some C.
Personally:
Professionally, My team was primarily a Java shop, but over the last few years we have managed to move to Clojure and Golang mostly (we still maintain some legacy services which will be decommed over the next few years running in Java).
Personally, I have been concentrating on OCaml and Rust over the last several months. I think I will continue that trend.
I really like the idea of Rust but wrapping my head around the borrow-checked has not been an easy task. Working through the Rust book, I also feel like Rust provides too many ways to do things, and feel like it causes a lot more mental overhead when I am trying to write in rust. (Especially after working with Golang during the day, which at it's core is such a tiny language). This however I feel like is just a part of the learning curve with rust :)
I also love all lisp-y languages. For most of my personal projects I pick Common Lisp, but I still keep learning new stuff every few weeks with it :)
I have been looking at shen as well and playing with it.
Edit: I have also been looking into Clasp. It's a common lisp implementation which compiles down to LLVM IR and uses LLVM to create native binaries. This way also provides really nice inter-op with C++ bindings.
If anyone is interested, There is a really nice video talk creator of the Language gave at LLVM conf about this here.
This year I hope to concentrate more on older programming languages as well, like:
The motivation for diving into these languages is primarily because I am interested in programming languages in general. I have been trying to read more about compilers, parsers, etc and I wish to understand the internals of how a programming language works.
By the end of 2020 I want to pick a Bytecode VM and try to take it apart and understand how they were implemented and how they work. Current pick for this task is BEAM, since it has quite a bit of documentation, which should help me in this task, and I have a fairly good understanding of Erlang to begin with.
Edit: Forgot to mentions Dart
I picked up Dart/Flutter last year and was pleasantly surprised with it. I was able to learn Dart/Flutter and build a simple Android App for my SO and deploy it to the play store in about 3 weeks.
I will definitely be playing with Dart more this year. Especially with Flutter Desktop becoming more stable.
The landscape for making cross-platform native desktop application is abysmal.
There is Qt which is quite bloated. And, Qt5 made language bindings for non-C++ and Py languages much harder. Thankfully the Qt6 vision blog post mentioned easier language bindings as one of the things they are targeting for Qt6.
Electron is a dumpster-fire, I do not wish to touch with a ten-foot pole.
There are options like Revery and Sciter which looks cool, but have their own issues.
/rant ; I should probably make a separate post about this ...
I'd really like to finally learn PHP and maybe some Javascript, basically some more web development. The problem is that I've never really had a good "project" to work on as a way to learn.
Even right now I use Drupal for a website so I haven't found a reason to actually do any of the coding. If anyone has suggestions on good basic projects to get started with those two languages, I'm very open to suggestions.
I feel building something in a language to learn the language is the best way to learn that language!
A good choice would be re-creating a tool/app you use already.
This has the benefit of you knowing the exact behavior of the app.
Something like a interactive blogging platform, would be a fairly easy project for you to create in PHP and Javascript. It would also let you explore the basics of those languages! :)
Some people also prefer coding challenges to solve in a programming language to learn the language. This has the advantage of exposing tiny pieces of the language at a time. If you want to try this route the euler project or advent of code are nice challenges
Good luck!
Thanks for those links, and the great idea of a fun project. Hopefully they'll help with my goal.
SwiftUI, although I hope Apple improves the error messaging in the next Xcode update. Right now debugging can be very frustrating as compiler errors can be totally misleading if not outright wrong.
My list for 2020:
Side note/question: Does anyone else have a tech. side hustle where they have to use some tech/platform/language that they don't care that much for, but can't really stop because...money!?! I can't be the only one. :-) (Again, i don't hate php at all, simply not my favorite language is all.)
Always bet on yavascript.
https://www.destroyallsoftware.com/talks/the-birth-and-death-of-javascript
Personally, I think I'll be doing :
It's not certain yet, but from a brief research, probably C++ and python.
Reading this thread kinda worried me. See, I work in the SAP department of my company for about 3 years, mostly developing ABAP reports or creating apps (SAPUI5). I'm not exactly a stranger to programming languages like Java and C, but I only had about 4 months of "introductory classes" on both of them (4 years ago).
Thing is, a colleague that I've known and worked with for a long time has been complaining about being bored with SAP. He is the kind of guy that would come into this thread (probably will actually), with the intent of finding new things to learn and tinker with. But that got me thinking... I like VR and I'm somewhat decent at sharing ideas, developing and also putting things into new perspectives. Why not try something outside of SAP?
Interestingly enough, I was accepted into 2 "innovative" projects that have recently started in my company (completely unrelated to SAP):