Ask HN: What technologies did you learn in 2018?

629 points by vchernobyl ↗ HN
What technologies have you invested time in learning that you are going to keep using/experimenting/learning about in the next year?

I'm a professional Android engineer, and as for me: I learned Kotlin and use it at work every day, and so far I like it a lot. I also learned a little bit of iOS development with Swift. I also experimented with Flutter developing non-trivial "Hello world" apps, and I feel that it reduces a lot of friction that a lot of native mobile developers encounter.

What's your favorite tech in 2018?

619 comments

[ 4.5 ms ] story [ 249 ms ] thread
Rust on Lambda, i use it for real time image resize for adtech bidding
I started learning neural networks, only to realize that there's plenty more to study in 2019.
Vue.js. It's a breath of fresh air.
What did you use prior to Vue?
Old school jQuery. It's my first reactive framework.
Totally. I had been planning on moving from vanilla/jquery to a framework (Angular, React) for a long time but the initial setup and complexity always repelled me. I knew Vue.js was what I wanted the moment I read the docs.
Typescript and reactjs. Finally web development feels like real software development.
+1 for React. I'm learning it, too. I'm not sure I love it, but I definitely don't hate it!
Scala. It’s something I’ve been meaning to learn for about 8+ years now. Not the most exciting language these days for a lot of people I suppose, but I’ve already learned a ton about real world functional programming.
Yeah, I recently had the opportunity to use Java 8 on the job for the first time and solving problems in a functional way was a sort of Damascus road experience for me. Now I want to go farther so I'm learning Kotlin.
I learnt Solidity, Vue, React Native, and a bit of reverse engineering with Frida this year. I'm glad with the way the web is exploding and it's great to delve into Android dev with familiar JavaScript.
Weirdly, perl. I found myself on a client site in a locked down environment with only the Windows version of GIT installed. Powershell disabled, no other programs allowed. I had to produce reports on the log files for this machine, but had to obfuscate information before taking it off the server.

I discovered that git had bash installed quite early on, so my initial automation and reporting was based on UNIX pipelines. As the data volumes became bigger and the customer requirements became more demanding, I eventually bit the bullet and started learning perl one-liners to do some gymnastics that just weren't possible or practical with just bash (first big win was adding the MD5 of the line so that I could dedupe the obfuscated data).

This lead to eventually writing full scripts in perl and now I have basically all of my reporting automated, even able to take up some 'value add' reporting that I didn't think was going to be possible.

So yeah, not a new technology but I'm now a perl convert and will almost certainly use it in the future if I'm faced with a similar situation.

Hey, there’s an old school community(they prefer monastery) called PerlMonks[0]where you can share your Perl oneliners and also pick up some mind blowing stuff. Come hang around sometime

[0]https://perlmonks.org/

Worth noting that PerlMonks functions similarly to stack overflow (for Perl at least), with the difference that discussion is actually encouraged.
Somebody should pick up that idea and create a site like stack overflow but that doesn't discourage discusssion or reward destroying useful knowledge.
The discussion post is hard as you have to filter the noise and people who know less than they think they know. It might be doable but it is a hard problem
But... it does discourage discussion. It's a Q&A site, not a forum. You don't just post some thoughts and reply to other people's thoughts: you post either a question, or an answer. If you need clarification on a post, you comment. It's not a discussion forum.

And I'm not a new, disgruntled user. I like the site a lot and am quite active on the IT Security stackexchange site. From my semi-moderator's point of view, the only place for discussion is the chat function (which only a few regulars use).

Yeah... the problem is that SO is becoming the only place where people hang out, and it's really difficult to find active programming forums nowadays. Except, as you say, SO is not a forum, it's a QA site. Which means there is no place left for discussions. While I certainly use SO a lot to find those small bits of missing knowledge, I think it has made search for help (in specific cases) actually much harder.
Agreed! I moved to HN and SO after two forums slowly died. I have some friends from those forums, but a chat group is different from a forum with dozens or sometimes hundreds of active topics every day. Not just in activity, but also the kind of things you can talk about.

I'm not quite sure what is going to fill this gap. I don't always have a place to post things. Blogging doesn't exactly work without an audience. The mainstream things these days appear to be just chats. There are still forums, mailing lists... heck, there are BBSes but it's niche and hard to find anything that isn't already on the decline.

dchuk tried to start https://hackerforums.co earlier this year.

It was a nice forum and I really wanted it to succeed and but it seems to have faded out.

> I'm not quite sure what is going to fill this gap.

Reddit?

I always find Reddit fairly poor in terms of what people actually suggest on the technical subreddits that I subscribe to.
Im curious to what tasks you felt you could not solve in bash incl. the nix toolchain?
Many of my issues will be specific to the environment. The thing that made me use the first perl one-liners is because I was used to using 'rename' in the command line and I was able to emulate this with perl more easily (using a regex substitution) than 'mv'.

The second and more pivotal one liner was when I needed to create a primary key to ensure I wasn't getting any dupes later down the pipeline (a requirement that came about as some of the other contractors on the project were messing with my exports and then blaming my files for their conflicting numbers). My first approach was to use the MD5 tool included in GIT bash, but this was prohibitively slow, taking 45 mins to loop through each line of a 4mb file. Not sure if there was a performance penalty on the box I was using, but the perl one liner did the job in a couple of seconds for all the files I had.

After that it mostly became a question of maintainability, with the performance being a boosting factor. I found my perl deduping one liner was faster than either 'sort -u' or 'sort | uniq'. I was able to add new features and account for weird issues more easily. Regex was better than sed, syntax was more flexible than awk, there were more filtering options than grep.

Plus it was good fun. Perl has so many things that just feel so nice and tidy compared to bash.

Having said that, I still use Unix pipelines extensively, they just tend to be for ad hoc queries rather than for my automated reports.

All right - thanks for the elaboration. The perfomance diff sounds interesting. I might check it out at some point :)
perl has a less divergent set of options across different unix versions - for example, trying to run `sed` in place across MacOS and Linux you'll soon find that the options are different. There are similar issues with BSD vs GNU options in other programs as well.

There's an old quip that "perl is portable sed" - in my experience this is pretty true.

Yeah this is actually a major reason everyone should at least know or use some perl. macOS is a popular dev environment but the quirky macOS/BSD versions of grep and sed are super annoying for portable build scripts.
My team has used Perl successfully for 13 years. We use modern Perl and the code is clean. In the process of switching new team members to Python as it is hard to hire people with Perl. I still think the meta capability in Perl is stronger than Python.
I'm a security guy but like to develop as well. I'd apply for a job in Perl any day, despite not knowing it very well and Python being my main language. But I guess it's easy to say when I just read that you're having trouble hiring, as my expectations of entry requirements are now different. Anyway, it's a shame you have to make such a big change for what shouldn't be a big deal. The language is a tool -- I've even written C# in Visual Studio on Windows 8 for a year in two different companies, which is about as Microsoft-oriented as you can get (I'd rather use something Linux-based). Unless there are major deficiencies and the team is looking to move away already, it shouldn't be a problem to adapt to the team's standards.
Meanwhile, I had a hard time finding (or getting) a Perl programming job (though I resisted coming to the Bay Area for a long time, so that was likely a significant factor). I've had to settle with other languages (mostly Ruby, Elixir, and now Python professionally, though I did sneak a bit of Perl into the Ruby one ;) ).

Where are y'all based? I'm reasonably happy with my current job, but I'm definitely curious about what else is out there (especially if it's not in the Bay Area).

You haven't tried training them ?
That is what I do now. But I find it easier to migrate older code to Python.
In this day and age, with Python and all, is Perl still worth learning?
It's worth getting a few insights into what it does well. As with any language it _can_ do anything, but a few key features that made it stand out for me:

* Perl is set up for really terse one-liners. You can basically emulate or surpass most Unix tools with only a cursory knowledge of the syntax

* Perl syntax is highly geared towards text processing and regular expressions. File handling and regexes are so much quicker and easier to use than Python.

If I were in a situation where I had a bunch of files I needed to process and the task didn't easily fall into something that could be done with a bash command, I'd probably reach for perl over python for a quick and dirty disposable script.

> * Perl is set up for really terse one-liners. You can basically emulate or surpass most Unix tools with only a cursory knowledge of the syntax

This definitely interests me. How does perl surpass Unix tools? I guess perl has the benefit of handling the equivalent of sed and awk.

Yeah, it has equivalents for each.

Sed:

perl -pe 's/foo/bar/' file1

Grep:

perl -pe '/foo/' file1

uniq:

perl -ne 'print unless $seen{$_}++' file1

But then you can combine conditions:

perl -ne 's/foo/bar/ if /baz/ && /yot/; print "Line number $. changed to $_"' file1

And do some awk-ish line splitting:

perl -F, -ane '$sum += $F[2]; END{ print "The sum of column 3 is $sum" }' file1

It absolutely flies in the face of the unix philosophy and is much more complicated than picking up each tool individually, but once you get to grips with 'em they're very handy.

This blew my mind recently, when I had to delete millions of files in a directory and rm didn't make the cut (too many arguments), and find -delete took forever:

https://unix.stackexchange.com/a/79656

perl -e 'for(<*>){((stat)[9]<(unlink))}'

seems to be the fastest possible way to delete enormous amounts of files

Did you try xargs, to do groups of files at once? That's what I usually do:

  find -type f -print0 | xargs -0 rm
People keep saying Perl6 is great, and I have no reason to think it's any worse than Python (but I don't know it).

One may also want to learn Perl5 for dealing with legacy stuff (either keeping or getting rid of it). There is a lot of it out there.

Yes, if you don't want to be forced to write exception handling and doing a dozen different tricks for merely writing and using one single regular expression.

A lot of forced indentation and absence of braces, and absence of sigils makes it harder to read Python scripts. However that's not the only problem with Python. If you are scripting you want the regular `unix_command` command thingy to work fine. More-so you want to read the output of that thing using a syntax like my @command_output = `unix_command`;

You also want heredocs. And you want multiline anonymous functions. I could go on and on.

But Python seems to be more like a tool trying to compete with Java than Perl.

perl is a fine language. It scales quite well from terse one liners to large (and with appropriate application of discipline, readable) applications. It's a shame it's so unfashionable at the moment.
Java 11, which has come a very long way from the verbose, clunky language of two decades ago; particularly combined with a top-notch IDE like Intellij IDEA, the current version of the language is a joy to program in.
whats a good resource to get upto date with diff between 11 and 8
A Google search for 'what's new in Java ...' provides some good summaries.
Terraform and Packer are the new way to automate devops. It’s a very powerful approach. And the ease of setting up traditional VMs struck me as much simpler than using Docker. When I wrote “Docker is the dangerous gamble which we will regret” I was thinking about Tereaform as the counterfactual:

http://www.smashcompany.com/technology/docker-is-a-dangerous...

I'd like to know more about this.
If you're interested in a "good-practice" type introduction to use of Packer and Terraform together, you may be interested in a talk [1] (or the accompanying repo [2]) I gave at HashiDays New York last year.

Unfortunately I never finished getting everything I was aiming to done in that repo, but may come back to it and update it at some point...

Disclaimer: I used to work at HashiCorp on both Terraform and Packer.

[1]: https://www.youtube.com/watch?v=8ZRa0lLq8OU [2]: https://github.com/jen20/hashidays-nyc

(edited to change "best-practice" to "good-practice", since it's more accurate...)

you should checkout habitat https://habitat.sh

with habitat you now have the reproducibility and isolation of containers without being forced to use them. (also supervising and config management)

In my free time, I picked up:

* Python * Common Lisp

For Work:

* Pandas (Learning Python resulted in me being asked to help our 'data team' get started with Pandas)

* Go (I moved to that Team)

* Protobuf (google protocol buffers)

I've played around with some other technologies along the way as I enjoy learning various languages. But I wouldn't say I really become good with them, some other's that I've played with this year:

* OpenDylan

* Erlang

* Django

EDIT: Formatting

OCaml, mainly. Also picked up Flutter, and did a lot more C++.

My favorite tech in 2018 has been Parcel bundler, though.

I finally take a time to study more of a deep learning (Tensorflow, Keras) and openCV. Up until now I was working mostly with text and tabular data so I was safe with random forests.
I switched jobs in February and have learned a lot about Kubernetes and Google Cloud.

On my own time I've been playing with Golang, Bigquery and Image Stacking.

Started with RL and hoping to get much more into it in 2019.
.NET Core. It's got everything I need from the java world, without the baggage from being an old technology.
Same here. It also works almost perfectly on Linux.

It has probably replaced Java as my go-to language. Which is amazing. I thought I was a die hard Java fan.

Why exactly do you consider it an old technology? The language is evolving the same way others do, with improvements and additions. In fact it recently got a shorter release cycle with new versions every six months.
stan, brms and rstanarm. Advanced statistical modeling. I'd highly recommend these tools to those doing supervised learning.
Azure. Terraform. Go.
Power Query - Used for querying data in excel and Power BI, and also for a custom connector for Power BI.

OData - A standard for rest APIs.

Did some playing with .Net Core, but still not really satisfied that it's ready for serious prime time.

Can you elaborate on your shortcomings seen in Core? This may be very important to me.
It's not that .Net Core itself is unstable or anything, it's just that the ecosystem of packages and libraries is fairly immature, and there is still a lot of mismatches in support and dependencies.

For example, if you use core, you can't use entity framework 6, you have to use EF core, which has most features and if you are building a new app you'll probably find a way to do most things you want, but if you are porting something you might struggle. And that means you can't use anything that is built on EF 6 either. The dependacy chains seem to be muddled. One library will seem to be fine on core, but one of it's dependencies will only work on the full .net fx.

Another problem I hit was with doing some dynamic code generation. Roslyn is supported, but code dom isn't. That would be fine if I was starting from scratch, but I had a bunch of useful existing that that all depended on code dom that would have been a lot of extra effort if I couldn't reuse.

I would say if you are starting a new project and it's a fairly standard website you'll almost certainly be fine. But be ready for a lot of pain if you have any code to port.

Ops: I moved to Kubernetes from Docker swarm+compose, and I like the momentum that k8s is getting these days.

Dev: Continued working on our full stack JS (Node, React, React native, Flowtype, Jest). I am planning on moving to Typescript because of the poor developer experience of flow, but appart from that, I am loving the state of JS at the moment!

Databases: AWS Aurora with PostgreSQL and PostGIS, with Prisma to create a GraphQL API. It is amazing and feels like the future.

CI/CD: I am getting deeper in the GitLab stack to integrate all the elements above.

got better at python got better at pandas Elasticsearch Kibana Docker some more JS
Machine Learning.

In 2018 I went from "zero to sixty", so to speak. At the beginning of the year I knew nothing about ML, and my math skills had gotten so rusty I couldn't even remember how to do simple derivatives or multiply two matrices.

In the first half of 2018 I relearned the college math that I had forgotten by working through MIT OCW's Linear Algebra, Calculus, and Probability courses.

In the Fall, I enrolled in Carnegie Mellon's 10-601 course, graduate "Introduction to Machine Learning". It was hard, it was a ton of work, but I did well and it was completely worth it as I now have a solid understanding of the basics of the field and can continue studying this upcoming year and into the future.

Thanks a lot for the MIT OCW lectures hint! I want to do the same in 2019. What works for me in general is diving into a side project and learning by hacking, but I fear ML won't be susceptible to this approach.
I also learn by doing, and it works with ML too (dived into it last year, though I'm currently not doing it anymore). Find a project and jump... Happy learning!
The Linear Algebra OCW is great if you do all the exercise and read the book as you study. For Calculus it's not so great, though the ODE course is fine.

This kind of courses from UPenn are really good if you need to refresh single variable, though I did an older version were all the courses were given together than I can't find in the current Coursera: https://www.coursera.org/learn/single-variable-calculus

curious, what you are planning to do with the new knowledge
can non-CMU student learn that class online?
No, that specific class isn't available to non CMU students or staff (of which I am the latter).

There are several CMU courses, however, where the full collection of lectures are available to watch on YouTube. The Fall 2017 offering of Mathematics for Machine Learning lectures are all on YouTube.

(comment deleted)
Where did you get that kind of motivation? Sounds almost super natural.
It isn't supernatural, trust me. Very simply: I set a goal, understood what prerequisites I needed to fill, and just worked hard to get there. I put in about 5 - 10 hours a week in the first half of the year working through the OCW courses, then probably 10-15 hours a week during the CMU class. I work fulltime as a software engineer, so my 'class' time was usually a couple hours a night, after the wife and kids go to bed.
I struggle to focus after a full day of work and other tasks. I especially struggle to focus on technical work, and learning new things is difficult. How do you have the energy to sit down for another few hours of technical work after a full day of work?
I'm not gonna lie, putting in those couple hours can just be plain tough. Some days it is the absolute last thing that I want to be doing at 9 o'clock in the evening.

But I motivate myself by focusing on the long-term impact for my career, and thus the benefits for myself and my family:

Coupling my expertise in software engineering with deep knowledge in an adjacent field such as ML I believe can open up new opportunities and give me the freedom to take my career along paths that weren't possible before. That is what I remind myself when I sit down to work homework problems late in the evening.

That's amazing :) What do you plan on using ML knowledge? Like does having this skill have a market (for non-PhDs)?
Applied ML is one of the hottest CS jobs these days :-) From startups to big cos, everyone's looking for data scientists.
> derivatives or multiply two matrices

> college math

Those should be high school on most places

Yes, those are thought in high school in Turkey.
(comment deleted)
Derivatives were available for the most advanced level students in high school where I went. Even then it was understood that they were receiving college credit early. Linear algebra not at all.
Not too much with linear but usually 10th or 11th grade math will introduce matrix multiplication.
Which is odd, in my opinion. Linear algebra is easier than Calculus and would likely be more useful to the average person.
Agree completely. In my university, calc was a pre req for linear algebra and it didn’t make any sense to me then either.
> so rusty I couldn't even remember how to do simple derivatives or multiply two matrices.

I was never taught how to do either of those things. Am I missing out on something?

If you want to do machine learning, those two ops are pretty much the foundation of how it works under the hood.

If you want to do coding in general, I like to say that you can have a career in code without being good at math. But, math is how great coders do what seems like magic to other coders.

That’s a really nice way of putting it.

As a grown up who has already been working as a software developer for ~10 years, do you have any recommendations on books to read, courses to do etc if I want to improve my maths? I’m not terrible, but I know I could be a lot better!

I was on the same boat as yours about 3 months ago and I picked up 3 books based on HN comments;

1. No bullshit guide to Maths and Physics [1]

2. No bullshit guide to Linear Algebra [1]

3. A programmer’s introduction to mathematics [2]

I haven’t gone through the books completely but I’m halfway through the ‘no bullshit..’ books and I liked them based on how easy they were for me to approach.

May be they also fit your learning style as well? Hope this helps and happy learning.

[1] : https://minireference.com

[2] : https://www.amazon.com/dp/1727125452

I'm same as you too but I did have some background in math from college but I've been rusty on them already.

- I know it's said over and over again but KhanAcademy is pretty good for high-school math - For probability, I'm also going over this website[1] at the moment. Maybe someone else has other recommendations too - Linear Algebra is next on my list but others have given some reference for it already - Andrew Ng's course on Machine Learning from Coursera is also another frequently recommended if you are trying to learn math for it

[1] https://www.probabilitycourse.com/

When you say you enrolled in 10-601, what did you do? I assume you aren't actually a student at CMU.
I'm a staff member at CMU, and so have the benefit of being able to enroll in classes for free.
I'm also a CMU staff member and I audited 10-601 this past semester but had to stop halfway through because it was too over my head, props to you for doing well in it!
Blender and BabylonJS. I can't describe how fantastic Blender is - and 2.80, which is now in Beta, reduces render times for my project by 95% and that's not an exaggeration. Play with it over Christmas, you won't regret it!
I am currently halfway through making my first donut! (albeit in .79 for now). I've been wanting to do this for a long time.
The Ada programming language. We (at my work) have been considering it for a new project and mostly everything has been a pleasant surprise. It is not a language that makes you feel “clever” or “powerful”, but everything has its purpose and place.

Except for Tasks; the fact that such a bare-bones language has first-class support for concurrent execution makes it clear how ahead of its time it was.

Another technology was optics and specifically fiber optics. I went into the field with knowledge of microwave engineering and I am surprised by how similar it is. I thought it would be a completely foreign, but the high level concepts are actually relatable to microwave tech.

What field are you working in?
I’m a PhD student in signal processing for fiber optics.
Python - I was a little hesitant because I really wanted to get more into Node/JavaScript but that’s what my team uses for simple scripts. Historically,I didn’t like any scripting language but I actually like Python for simple AWS backend lambdas and automation.

AWS - At the beginning of the year I knew nothing about AWS. I thought it was just a way to host VMs. Since then I’ve done projects involving networking, Devops, and development and I have four certifications. My company paid for them and it forced me to learn AWS inside and out except for the Big Data, IOT, and mobile.

Linux - I’ve been developing on and deploying to Windows servers for 20 years. But the Windows tax becomes real once you start using AWS. I’ve learned just enough to be almost competent.

Have you found the certifications useful?
Define "useful".

I personally have 3 AWS certifications (All of the associate level).

Their use to me was 1) When studying for them, I learned a ton more about the platform and 2) Recruiters and employers love it - I get even more job/interview offers now.

Nice. I have been using AWS and GCP for a while now and was thinking about getting the certifications so I always wonder whether they have any incremental value, especially technically and jobwise.
Shorter answer.

Yes since you have practical experience it can’t hurt. You’ll learn things that you didn’t already know and it will help you get your foot in the door slightly.

But, don’t become a “paper tiger” with a lot of certs and no practical experience. I’ve also come across people who have claimed that “they have use AWS” but when you dig deep they mean - they’ve hosted a few VMs and used AWS as nothing more than overpriced colo.

Yes and No.

I don’t pay much credence on certification as proving competence. I take them as a slightly negative signal when I am interviewing someone.

Certifications for me are partially forcing functions to make me get a broad overview of a subject matter. At the level I’m at now, my “whiteboard interviews” are not about leetCode they are about how would I architect systems, meaning I don’t need to know the details of everything but I do need to know how to talk the talk.

When it’s actually time to implement the solutions, I’m either then going through the SDK and figuring out the details or assisting other developers in coming up with a proof of concept.

Except for the Architect Associate which I studied for just to get an overview of AWS, I’ve had practical experience on most of the other areas that the certifications covered before I took them. The other three are the developer, Devops and Architect Pro.

My company is paying for them, and even though my official title is “Senior Developer”, when talking to our clients (B2B) I am the “certified AWS infrastructure architect”, so yeah it helps give customers a little bit of confidence.

On the other hand, whenever the day comes that I decide to make my next career move, it will probably be as an overpriced “implementation consultant”. I found at my last job where I was the dev lead, that locally, that’s where the money is.

Amazon Certified Partners have to have a certain number of certified employees.

Two of the three certifications I am working on next year will take me way out of my comfort zone - advanced networking and Big Data.

I will have to really study for those two and do some side projects. Unlike the first four where I could learn on the job.

I'm also going for the Big Data one, looks like a lot of fun
I learned Ionic 3 in 2018, and managed to publish multiple apps to both Google play and Apple appstore!

And looking forward to migrate to Ionic 4 and make both desktop and web versions of my apps!

Been using Ionic for 4 years. I think v4 with just TSX + Redux has been really good. I’ve good things about Angular 6 but TSX is just much more intuitive to me.