Hacker News new | past | comments | ask | show | jobs | submit login
Ask HN: What do you want to learn in 2016?
63 points by brown-dragon on May 28, 2016 | hide | past | favorite | 125 comments
I want to write a tutorial that other programmers would find useful. What is your "I'd really like to learn this" for 2016?

Everything. That's the problem, I want it all, and I want it now (as they say). Basically, I need somebody to invent the interface from The Matrix so I can have Tank dump jiu-jitsu, kung-fu, and a pilot program for a b-212 helicopter straight into my brain.

That said, in terms of prioritizing, I'll be spending a lot of time this year on topics related to data science, big data, machine learning and AI. Taking some stats classes online, and particularly interested in finally getting a handle on Bayesian statistics and then exploring things like Bayesian Belief Networks, etc.

Also, I've been doing a lot of stuff with R and Octave the past few months, so more of that for sure. May try to pick up some Julia at some point, and I bought a Swift book intending to at least dip my toes in the water with that. I still want to learn to use some things like Prolog, Mercury, CLIPS, OPS5, etc. as well.


Access to the collective knowledge of humanity equates with uncountable paths not taken!

I know someone with 4TB of textbooks and course lectures.

Probably the most important habit learned during my (first year of) PhD:

1. Make a list of books you want to read

2. Break up each into reasonable blocks (#_pages/#_chapters is a good unit) and write as checkboxes to cross off to keep you motivated

3. After filling up two pages or more, reconsider step 1

Another observation, for those not bored yet: Planning each minute will give you anxiety, planning every decade will not be as effective. Multiple timescales can help.

I know someone with 4TB of textbooks and course lectures.

Heh, is your friend me? :-) OK, not sure if I have 4TB of stuff or not, but if I totalled up all the books, videos, etc. I have downloaded and stored here and there, I'm pretty sure it's in the TB range. The most frustrating part, to me, is the lack of time to read/study everything I want to study. I think that's one reason the Coursera classes work so well for me - they force me to pick something and focus on it to (near) exclusion for a defined period of time. Otherwise, I tend to wander around a bit too much. :-(

Ha! I know how you feel! Check out "Learning how to learn?" (https://www.coursera.org/learn/learning-how-to-learn) - it's an excellent course that may help you out. (Though not with jiu-jitsu, kung-fu, and b-212 helicopter piloting I'm afraid :-)).

Thanks for this! I just signed up ...

I'd really like to learn more about radios and RF electronics. I have a pretty good understanding of the system level concepts behind radio, and I have enough EE concepts down to understand things like amplifiers and filters, but chaining all of that together into a working system is above my level of understanding.

I think I have a small problem in that I don't know where to start. I don't know how to bridge the gap between block diagram understanding and detailed circuit schematics and diagrams.

Long shot, as this is a mostly programming based thread, but hey, I've gotten lucky before. Maybe I will again?

I'd recommend trying to build something relatively simple (e.g. an AM transmitter) from scratch and just enumerating all the questions you ask in the process. Then finding the real answers to those questions and the whys.

I've thought of trying that, but part of my stumbling block is that I'd need an oscilloscope to debug the thing when it wasn't working, and those are sort of expensive. (At least, the decent ones are. About $1k or so to start.)

Digital ones are expensive but you can get an old used analog scope pretty inexpensively, and often they'll do the job. At least for relatively low frequency projects. Call your local universities surplus department and see if they have any or expect any to come in soon.

- Deduction system, in particular as relating to logic programming such as Datalog. This is more or less in link with my research interest in programming languages - I feel like these techniques could have a lot of implication in compilers.

- Front-end programming using javascript. I'm always intrigued by all the conversations surrounding React, Angular, etc... There is a background I lack to see why such convoluted solutions are need, what problems they fix.

- Fundamentals of machine learning, esp. neural network (I have some clues about things like Bayesian filters). It just seem like something that could be used in practice if one knows how to roll with it.

I can do "front-end programming using javascript" and "fundamentals of machine learning" but have no clue about "deduction systems".

Amongst the two, which would you say interests you more?

I'd be more interested by pointers for Javascript front-end principles, because I feel like I'm lacking some background to understand much of what I'm encountering, whereas there's quite a bit about machine learning (which I haven't checked, still I have good hope it covers the fundamentals).

Deduction systems: see https://www.youtube.com/watch?v=R2Aa4PivG0g for instance.

Fascinating talk! Thanks!

I've already completed the Coursera Machine Learning course and now I'm starting to get my head around Deep Learning using the nVidia course - mostly because I bought a Jetson TK1. This is all to complete a project that will also involve RabbitMQ, Nodejs, and Docker.

Other than that I'm determined to gain a certificate in French Language (although I have been slowly learning for several years now) and get my driving licence :)

It helps that I have stuck with each technical topic rather than trying to do them all at once or skip ahead. Getting to use some of the technologies I need for my project in my day job helps too.

I also just finished the Coursera ML course, now I'm doing some stats and data science classes on there, and the Google deep learning class at Udacity.

I kinda think that the rise of MOOCs and "on demand education" is the best thing since sliced bread. :-)

Which ML course did you take? There seem to be quite a few - any recommendation?

The Stanford / Andrew Ng one. I thought it was pretty solid.

It's apparently not quite as rigorous as the actual cs229 course, but those lectures, problem sets, etc. are also online if you want to supplement the Coursera stuff with something more math heavy and intense.

Thank you!

I'm focusing on cybersecurity. Right now I'm doing the microcorruption.com CTF, just finished the stockfighter CTF. I read The Web Application Hacker's Handbook and am practicing pentesting the sample apps compiled by OWASP. [1] I want to learn to reverse engineer malware, and write cryptographically secure software like Tor.

[1] https://www.owasp.org/index.php/OWASP_Vulnerable_Web_Applica...

Microcorruption was a blast. If you want to learn slightly more realistic binary exploitation, I recommend RPI's MBE course[1]

[1] http://security.cs.rpi.edu/courses/binexp-spring2015/

Having gone the traditional engineering/cs route through university, I was trained to be a systems engineer. So C, C++, and Java were my first languages. Web has taken me away from that in recent years so I'd like to reexplore what systems programming looks like in 2016. Rust and Go are on the top of my list.

Go feels like a "friendly" C, kinda. Rust is different. Vaguely like the ML family. They both have some neat ideas. Rust is probably more of a stretch, given your background.

As jfoutz says - Go is almost like a "better" C. I really enjoyed learning Go last month (I wrote a go server for a mobile app of mine). The "Tour of Golang"(https://tour.golang.org/welcome/1) is a really good place to start.

Is there anything I could write that would make it _easier_ for you to learn? Taking up project/quizzes/follow-ups...?

I want to learn more German and more javascript. I took german in high school 20+ years ago but sucked at it and struggled through it for my language requirement in my phd. A decent amount of literature in my field is in German so I want to get better at translating it. I'm doing duolingo.

I went through the javascript program at codeavengers last summer and now I'm looking to build on that.

Here's a couple of new things about JS you can learn right now! Currying! Arrow functions! Template strings!

    function getPrefixer(prefix) {
      return str => `${prefix}: ${str}`;
Now use it!

    const infoLogger = getPrefixer('info');
    infoLogger('Starting up!'); // returns 'info: Starting up!'
    infoLogger('Not being used!'); // 'info: Not being used!'

Oh no, We're throwing the string away, let's use it and have it add a date and use a default argument value!

    function getLogger(log, prefix='info') {
      return str => log(`${prefix} - ${new Date()}: ${str}`);
Now use it!

    const infoLogger = getLogger(msg => console.log(msg));
    infoLogger('Starting up!'); //Logs 'info - Sat May 28 2016 08:51:12 GMT-0700 (PDT): Starting up!' to console!
    const errorLogger = getLogger(msg => { throw msg }, 'error');
    errorLogger('Oh no!'); // throws an error with 'error' prefix!
See it in action here with babel: https://jsfiddle.net/xgwe121v/

This is a very cool intro to the new features of JS! Thanks! :-)

What part here is Currying?

The currying part is the variable that you give to the first function. In the first function the prefix variable is stored in the local scope of the big arrow function that is returned. This ability of functions to remember variables from the scope in which they were created is called closures, and storing a variable like this is a closure. Using closures to generate functions with preset variables is currying.

> I want to learn more German [...] I'm doing duolingo.

Haben Sie schon daran gedacht einen Kurs zu machen? Gibt es z.B. ein Goethe-Institut wo Sie wohnen?

Die Kurse, die sie anbieten, sind etwas teuer, aber nützlich.

thanks. I understood about half of that! :-) I don't really want to be better at speaking it just reading it (of course I know one would help the other)

The Goethe Institut definitely believes in "whole language" and they consciously practice reading, writing, speaking, listening, and grammar and vocabulary study during every single class. If you don't want that, it's indeed probably not your best best.

(Also, there's kind of this subtext about language skills for living in Germany, because a lot of the class activities are about roleplaying stuff like trying to rent an apartment, visit a doctor, order food in a restaurant, or go clothing shopping in Germany.)

Electronics: "Object in Space" baited me into thinking "Huh, I could do that" - bought an Arduino, assembled some basic circuits, and plan to make at least one USB controller.

"Proper" Woodcrafting: All the better to mount said electronics. Might branch out into making my own arcade cabinet, pinball machine, computer desk, etc. - I've only done basic assembly with boards, saws, nails, screws, etc.

Commercial Failure: I intend to write the gold standard for unit testing tools (at least within game development), and try to make a buck off of it.

Killing Procrastination: I should hit [add comment] and get back to coding...

I've had this feeling for a while that unit testing tools are ripe for 'disruption'. The main problem I see is relating the test cases "back" to features and broken/flaky tests.

For procrastination, the thing that works for me is timeboxing (setting a timer for as little as 10/20 minutes and just getting started). See if that works for you.

> I've had this feeling for a while that unit testing tools are ripe for 'disruption'. The main problem I see is relating the test cases "back" to features and broken/flaky tests.

This is part of my interest. For one of the nastiest debugging sessions in recent memory, I eventually resorted to performing a manual perforce bisect of history (no p4 bisect), and manual testing to invoke system UI. This revealed that spamming some call to check internet connectivity would cause a "crash" (via exit(3) with no useful debug spam and an equally useless callstack) if you opened the windows 8 charm bar for more than 10 seconds in a certain way.

I spent a good week or two trying to track that down before resorting to brute force. So there's two tools right there that would've saved me a ton of time:

1) p4 bisect. git bisect exists - writing tools to iterate over arbitrary VCSes shouldn't be that hard.

2) System level input capture and replay. This already exists in the form of tools like AutoHotKey, and there's similar tools for e.g. Xbox 360 gamepad input - but these are scattered tools, each which must be separately learned, configured, and integrated, and usually not focused on creating 'unit' tests.


There's also a lot of low hanging fruit for basic test types. Most unit test frameworks offer little more than a fancy assert(). Some build systems will have some basic correlation of test failures to VCS versions. Meanwhile, I want to test things like...:

1) Did change X impact this performance-critical bit of software? What about on other machines than mine? I shouldn't have to manually profile every change to see performance impacts, good or bad. I have a very basic prototype of this displaying the results of my latest checkin @ http://test.maulingmonkey.com/

2) I have a GLSL shader that works on my device (tm). I want automatic test failures when it turns out this shader crashes the driver when linking the shader on phones with a specific GPU vendor. This boils down to little more than having better tools to manage the running of unit tests against multiple machines/devices, and correlating the results in a sane fashion. Running database unit tests against every phone is usually a waste of time, but running graphics unit tests against only the phones connected to the build machines isn't enough - it should test against every phone connected to a workstation in the studio overnight. It should also test against the AWS Device Farm.

3) I have a cross-platform renderer that works on PS4, XB1, Windows, OS X, iOS, and Android. If I render this scene, do I get approximately the same result? Or is XB1 rendering a black screen instead? Do certain Android phones have major precision issues? Which GPU Driver versions misrender?

4) I want to fuzz-test user profile parsing. "Forever" - by which I mean, whenever a build machine or workstation is idle. So just script your CI server to run SDL MiniFuzz! But I also want to fuzz things which don't have a file based interface - such as network protocols, containers, user control input, ...

Haskell. I am currently reading haskellbook.com but I am kind of stuck with the first chapter about Lambda Calculus. If anyone knows a good advice/link/tutorial about it, that would be great!

Have you tried the book "haskell programming from first principles " ? It got some good comments here at HN.

haskellbook.com is "Haskell: Programming from first principles".

Edit: And yes, it's an awesome book.

Yeah. I think that's the book I mentioned above. Thanks nonetheless!

Lambda calculus was tough, but working through the problems helped a lot. That book is great for most explanations, but if at any point you are stuck, just google alternate explanations. I think getting multiple explanations helps with grokking any concept.

Learn You A Haskell is not just the best intro Haskell book I've read but one of the best intro programming books I've read:


It's paid, but I personally think Haskell Book[0] is much better. I can say its better in both helping form a deep intuition and teaching how to use Haskell in the real world.

A lot of my imperatively biased coworkers have bought this book and have no complaints. Some go as far as claiming it's the Haskell K&R and I'm inclined to agree.

0: http://haskellbook.com (for those struggling financially, the authors request you contact them to work something fair out)

The book Types and Programming Languages has a nice treatment of the lambda calculus. It looks intimidating, but it's really pretty simple conceptually.

I found the wikipedia article on Lambda Calculus surprisingly good.

That said I don't believe you need to understand the Lambda Calculus to grok Haskell.

as a productive intermediate+ haskeller, I found the first chapter very confusing. Try your best but just move on to the second and see if it gets any better

Anything specific that you found confusing? I actually thought the first chapter was a great start. I'm sure the authors would appreciate the feedback.

After 8 years of being frustrated with HTML/CSS...

How to take a sketch of a webpage I've made on a piece of paper and write the HTML/CSS for it while feeling like I can predict how things will be laid out rather than feeling like I'm playing whack-a-mole. I think I've learned that I just cannot do achieve this with block/inline/inline-block and I need to stick with flexbox. I'd like to either learn a CSS framework or learn sass and write my own.

How to stop mumbling. I've tried before and always given up because I sound like a robot when enunciating. But I'm tired of people asking "what?" I'm going to fix it this time.

Also, Tensor Flow. How do I set that up myself?

There's a docker container that was really easy on OS X. I tried the local python route, but there were a few issues. Probably much easier on Linux.

Check out Toastmasters! Great way to improve your speaking skills.


Oh man! I _so_ identify with this problem. I've been struggling with it for ages. Lately I've been trying some voice exercises and they have helped a bit but I still slip back when I'm not thinking about it.

- How to refactor legacy code in a team setting.

- How to prevent more bad code from being written in a team setting.

- How to architect applications at a higher level.

- How to mountain bike like a beast.

The top two are on my list as well. The tricky part is that my "good code" is someone else's "bad code" and vice versa. Slowly trying to introduce functional concepts into a team of developers who are used to working with what can only very loosely be described as MVC.

While you're at it a style guide may be in order. Try to convert your team's current patterns into the set of new patterns that you think are better. This would help to give others a sort of rosetta stone while they're making the switch. I always try to add a why after each good vs bad code comparison.

Having a document external of your brain helps others to feel like they have a tangible set of goals instead of some arbitrary set of goals that nevon wants to have happen. I made my team's style guides repos on github so it's super easy to edit since it's straight markdown. Keep the pedantic discussions to a minimum. Sometimes it's just best to choose something because it's a single way of doing it.

> The tricky part is that my "good code" is someone else's "bad code"

I feel your pain...

I have been thinking about problem (1) off and on for the last year. The best strategy I've come up with so far is to set up a ritual that I will end the day with 10-30 minutes of code cleanup. Being systematic about it helps me get acquainted with a lot of the code while clearing technical debt.

This is exactly what I've been doing. I'm trying to make it an every day ritual, time permitting of course.

My main approach for this is to create a long term goal for a relatively small unit of untracked work. For example I've identified that our common folder for our front end code is not broken up into logical units. So every day I try to hop in there and simply reorg the folder structure. While I reorg I'm exposed to the files, what they do and whether or not they are actually being used as well as how they're being used.

This is enough to learn about what other people are doing/have done and helps me to identify other refactor goals as well as architectural goals.

Another idea that I've found if you're on a longer release cycle is a post release mental hook. Once the team has deployed the latest bits, I try to hop into main and rip out or refactor code that may be more sensitive. This gives your more risky changes a much longer time to get eyes on them before the next deploy.

I love the "post-release" mental hook strategy. I'll try it out :-)

German, Swift, Blender, Unreal Engine, C++, how to fly helicopters, improving fixed-wing aircraft night landings, Jiu Jitsu, deep sea diving, breast stroke.

What kinds of projects do you envision using C++ for? Do you want to learn from scratch or just the new/modern C++ parts?

I learnt C from scratch. I'll be using C++ heavily in Unreal Engine, but I'd like to make a standalone project to demonstrate my proficiency in the language.

Elixir and Phoenix. I want to be a meta-programming guru by 2017. I'm having a blast so far.

I'd love to take this up too. Is there anything you would like in this area? It looks like the existing tutorials/blogs are working great for you.

I'm currently working through the book Programming Phoenix and it's going well.

I would love more video tutorials because I personally prefer them to books. There was one where Chris went through building a chat app, but it's very outdated now.

I hope it's not too late to start, but I'd like to learn Go, the language. I've been working with PHP and Node for far too long and need something not interpreted.

I _really_ enjoy Go. As jfoutz said above, Go is like a "better C". The "Tour of Golang"(https://tour.golang.org/welcome/1) is a really good place to start.

Is there anything I could write that would make it _easier_ for you to learn? Taking up project/quizzes/follow-ups...?

I'm not sure. I haven't even got a clue how Go works, so I've got lots to learn. I'll check out the tour, thanks for suggesting it.

Dependent types in Idris, and GADT and type families in Haskell.

The easy stuff then. ;-)

Shameless plug: I am also doing something similar https://github.com/shekhargulati/52-technologies-in-2016. I am learning a new technology every week or writing some small open source project mainly in Scala, Python, and Java. I am documenting my learning on Github.

Looks impressive! :-) All the best.

I seriously want to stop procrastinating and finally learn some RoR (and not just stop at learning, but actually writing something useful).

not just stop at learning - happens to me quite a lot as well :(

I want to learn Redux, these are 20 videos that I have planed to watch: https://learnredux.com/view/hmwBow1PUuo.

- Cryptanalysis, and globally large scale, calm, problem analysis (groups, fields, vector spaces). I had a recent itch about prolog, constraint programming.

- Wholemeal programmng, haskellers view on problem analysis, graph abstractions, topology.

- Geometry. Back to complex plane ?

- DT, Agda, Idris.

- Sub micrometer physics and engineering.

- Biology/Ecology Energy gathering

- Non invasive medicine

- Threads. Just joking; that's too hard.

For threads - check out "The art of multiprocessor programming" by Maurice Herlihy and Nir Shavit. I've found it to be really really good.

Definitely tensorflow (coming from react/front end background)

Awesome. try to read neural networks, a comprehensive foundation by simon haykin. It's much more easier than just learning tensorflow.

Try keras + Tensorflow


I just graduated 2 weeks ago. There is so much to learn of what is useful, and feels like very little time to do it. Getting proficient with a language that is up and coming (Golang has been my choice lately), and then follow it up with an idea super hot today (machine learning, big data?).

Golang and machine learning/big data are excellent choices. All the best for your career!

Go, machine learning, and dip my toes in various introductory computational biology/biochem topics.

1. LLVM - enough that I can write my own optimisation passes and plug them in along with the regular -O3 ones

2. The ability to understand when and where to use meta programming efficiently. Currently I only have C++ experience, but I've heard things are better with Dlang??

To really "get" meta-programming, try using Lisp/Scheme. I've found that really helps to "grok" the concepts and makes it much easier to understand in C++.

How to come up with more clever market making strategies

Ha! This one I wish I knew!! I've been trying to make a market where cooperates pay to improve developer productivity and it's been really hard.

Neural Networks. I actually read a lot of introductory stuff but never really went down to detail and also never had the opportunity to implement one. For me and I guess a lot of people reading tutorials is not enough to learn unless we work on a project.

I’m basically in the same boat as @mindcrime here, I want it all but this year’s focus has been and will continue to be:

- Style Transfer (so CNNs, Regressions and a whole bunch of Statistics concepts)

- React, React Native and that whole ecosystem

- How to identify and validate startup niches

Suffix trees and linear algebra are the two things I'm currently focusing on.

What problem did you come across where suffix trees were the optimal tool for the job?

ML/AI and actually proficient in a functional programming language like Elm or Haskell so I can write more functional JavaScript. Got my Coursera for ML! Just need more FP experience!

For FP, give Elm a try. It's a really welcoming community and newbie friendly. Plus it's pure Javascript and very easy to set up and get going.

Elixir and/or Clojure.

I would also like to improve my JavaScript chops but can't see myself diving into Node.js. Will probably try to familiarize myself with ES2015.

Nodejs is actually pretty easy to pick up. Any reason you don't want to get into it?

Elixir and Clojure are also fascinating to me. Is there anything in particular you feel would help you more than the existing tutorials? Projects/quizzes/follow-ups/...??

Too many things! Write a compiler, master Angular 2 and TypeScript, learn much more about systems design and scalability. Maybe even some machine learning.

I'm playing with hackerrank tests, and also I want to master Scala, Akka, Spark & reactive-streams. Of course improve my english skills too...

Enough ROS and ROS-I to control a kuka arm. http://www.ros.org/

I want to learn to identify all the plants there are around where I live and their history and origin.

STimulated Emission Depletion (STED) nanoscopes and how to make them better.

That and French/US history.

I wanna learn Go. After a lot of thought went into what new language to pick (Rust, Nim, Go, etc.), I settled on Go because like Go I'm a minimalist and the feature set and grammar of every other language is just exhausting.

Elixir/Phoenix is a very refreshing new perspective to the web design area.


The question was about a tutorial for programmers. What would French brings in this context? There were some variants of basic in French, but nowadays I'm not convinced French is useful but for reading comments.

I think the original question lent itself naturally to the interpretation "what are you hoping to learn about this year?" rather than what might have been intended "what topics would you like me to put into my programming tutorial?". (You could read the original question as something like "I'm going to learn about programming by teaching people about it; what are you going to learn about, and how?".)

I'm French myself and would like to improve my frontend/design skills and my marketing/salesmanship skills, or just trying to get rid of my French accent when I speak, so maybe we can help each other... My email is in my profile if you're interested.

- Elm for building large webapps' frontends

- TensorFlow applied to NLP problems

I want to learn service worker and use it to extend apps.

Continue learning neural networks, and possibly learn Go


Is there anything beyond the existing Rust tutorials/blogs that you would find helpful/useful?

I haven't started learning it yet so I don't know what is current state of tutorials. I'm coming from web development and mostly dynamic languages (js, python, php, ruby) with most recent experience of elaborate type systems from typescript and C#. I have some past experience with C++ (modern looks awesome) and Java. What excites me most are clever useful constructs I haven't seen anywhere else, evolvability of the code and terse syntax and naming.

Business, especially marketing and sales.

Do you mean online marketing tools and sales outreach for your existing business?

Yes. :)

I've found the HubSpot Sales blog to be surprisingly good. It can get a little "spammy" feel at times but I got a lot of good advice overall.

I don't know how their marketing blog is - never tried it but you could check it out.

Variational Inference, Quantum Computing

Art of problem solving without my anxiety kicking in. Slow and deliberate.

I want know how to hack facebook account

Go back in time to 2010 and use Firesheep? (Then the problem is reduced to learning how to time travel.)


general relativity in more detail

SDN/NFV Erlang HTML+CSS+Javascript

Laravel, C# and Unity.

Deep learning

Sketch. :)


Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact