As a follow-up to this thread, I’d love to know what you Lobsters are planning to learn next year. Feel free to talk about any topic you’ve had your eyes on, and would like to pick more of it up in 2019.
Super curious about the responses!
I’m going to deep dive into narrative. Story structure and how it effects people is fascinating. Mix that with my interest in programming and procedural generation, and out comes a desire to build an engine that generates story based on constraints.
The dream is a game that produces the story on the fly based on the current state of the world. Narrative arcs, themes, character development…all of it. If your character does something unexpected it shouldn’t feel out of place or like you are switched onto a new storyline, and sandbox games shouldn’t feel like (fun) pointless sight-seeing.
After years of all programming all the time, I’m finally comfortable with my skill there and ability to solve problems and learn new things. Time to dive into the domain and produce something beautiful.
If you haven’t seen it yet, Caves of Qud plays with these ideas a lot in a roguelike framing. The two developers, Jason Grinblat and Brian Bucklew, have done quite a few talks on the topic as well. I highly recommend both the game and their design thoughts.
Woow sounds meta :)) Can we get a glimpse ??? :)) What a world can be? And so on … :)
Continue learning formal methods with Coq and Isabelle. I started this year so plan is to keep going.
DM me if you have any questions about Coq. I started learning it in 2013, and learning it has been the most rewarding technical investment I’ve ever made. I’ve proven a few nontrivial results including the soundness of STLC and System F, the Kleene fixpoint theorem, and some category theory. I’m not an expert by any means, but I’ve spent enough time begging Coq to accept my proofs that by now I’m pretty ok at it.
I also have some introductory material available here that might be helpful.
Thanks. I appreciate the offer and the links.
Likely in this order:
Can you combine all of those please???
That is certainly my intention :)
I quit my day job recently, as one of my startup projects has some funding so I can go full-time on it. All of my own projects are in Haskell/Yesod with some Elm where necessary. This particular one is in the reinsurance industry, which necessitates having an audit trail (hence, Event Sourcing — and I know this isn’t the only benefit).
I strongly believe in leveraging technology to improve robustness and reduce cognitive load. It’s not a panacea, but more guarantees is better than fewer guarantees. Types help with this. Tests help with this. Evidently formal specifications help with this too.
I bought both Sandy Maguire’s and Hillel Wayne’s books. Just need to go through them.
Back when bsdjobs.com was more than a bunch of links to companies I compiled out a list requirements companies had for kernel hacking roles:
I am going to dig further into this starting with the ARM ARM (Architecture Reference Manual) between the ‘just for fun’ books I plan to read over the winter break.
I also plan to learn more about IPv6, there are only about 400 RFCs to read so that should go quickly :D
i think that’s a nice list to follow. commenting to keep this bookmarked :p
That’s my learnlist too :)
Out of interest how it works and I like the idea of a hobby close to nature.
I’d like to learn how to grow plants from seed.
I want to learn more Go so I can more authoritatively express my dislike for it. I’ve spent a lot of time reading it this past year as well as a stint a few years ago but it’s high time that I get some crap on my hands so I learn why I dislike crap on my hands. Bad analogy, but it makes sense if you tilt your head a bit.
I want to get better at identifying talent, especially mentor talent. That is, I need to form healthier relationships with people who can help me grow. I misjudged the last person I trusted and I’ve not yet identified the rest flags in retrospect. As I look for my next opportunity, I want to more carefully scrutinize who I’m aligning myself with.
One major thing I have to learn in 2019 is where to draw the line of work-life balance. Related to the previous paragraph, I relapsed into some behaviors that were toxic years ago. They were even more toxic this time around! I’ve developed some software and workflows to help me collect data. Next up is setting aside time for enjoyment, so I’m getting back into gaming even though I know it will reduce my productivity.
I’m baffled by this. Why not spend time learning something you like instead of something you dislike so you can tear it down? Was this meant to be irony with the juxtaposition of “toxic behaviors” and healthy growth?
I think this pursuit is admirable. By learning more about it, he may find his dislike is misguided, or he may find features that he wish were in other languages (I’ve never written any Go, but this is true of just about any language).
Also, any time I’ve hired people before, I’ve asked them to describe what they think is bad about their favourite language. If they can do that, it shows evidence of some deeper understand of their tools. If someone can only say good things about a technology, then it’s more likely that they’ve just memorised talking points from that technology’s marketing page.
TBH, my dislike of Go is at a theoretical level. Inevitably, when I criticize it, I get a “well, you’ve never actually used it…” speech. So, I’m going to build a small project in it, perhaps the same thing in both Go and Rust as a comparison of sorts.
I’ll, of course, be spending lots of time in Rust, Ruby, and Scala, my main languages.
I learned go while disliking it on a theoretical level and now I like it and use it for personal projects by choice.
One thing I learned from it during an interview where a candidate used it for a pairing exercise is the magic of conformity with gofmt. I soon thereafter started using scalafmt and a few other languages’ tools that had a similar result: radical conformity to a code standard, thereby eliminating virtually any churn from formatting and typical arguments about syntax.
I don’t have any interest in Go the language, but I am very envious of gofmt. I think it’s an excellent way to kickstart a programming culture – just cut those useless syntax arguments off at the knees.
I too do not like Go the language but I love Go’s ecosystem, tooling, compilation speed, etc. There is a lot to learn from everything, good and bad. If a team is productive and enjoys Go, then they should use Go.
Big ups. Take care of yourself.
Prolog, and possibly use Tau Prolog for distributing apps.
And more SQL.
Here is what I want to learn:
This is how I will do it:
I recommend doing competitive programming problems using an online judge for the rapid problem solving and coding. And Pramp for interviewing practice with live devs. And lastly, do some interviews, both as the interviewer (at work) and the interviewee.
I have interviewed over 50 folks, most don’t know their language that well and have a very slow startup time. Get used to talking and coding at the same time, do this the entire time you are solving the competitive programming problems. “This looks like a scan over all elements (n) and an insertion into a tree (log n) for an algorithm that is probably n log n …, although in this case we only need a tree of depth k where k is … for n log k”
For problem sets, start with easy ones and polish them until shinny and perfectly spherical.
I have found that being strong technically and skilled in all the other areas of technical interviews leads to
Learning to code competitively has other benefits, I have saved two production systems via fast hacking to detect when and where data corruption was occurring.
In no particular order:
I am going all-in on learning GPU programming and re-learning C++ after 20 years of Java. I’ve got my web framework issues and continouous integration/best practices worked out and I see that there have been significant improvements in C++ standards. I want back in.
Modern C++ is super fun. Some parts can be very Python like and with modern static analysis tools learning it while coding is very pleasant. Ping me for questions - I’m likely not to have answers but I like to hear the questions.
Do you have any hints on how to learn modern C++? Books, blogs, tutorials, what to look for… I have found plenty resources to learn, but few of them seem to be up-to-date
Hi @diegovincente I have “Effective modern c++” but in general my way of learning is to do a project and use the latest C++ (which is C++17). I use VS Code which has static analysis built in which helps a lot with understanding the new features.
As I did this project I learned about and used the following aspects of C++17.
How I initially learned about them is an interesting question. It happened mostly organically.
In short, my random walk in C++ has been by looking up answers on stackoverflow and the larger internet and then reading a keyword and saying “I wonder what that means?” and following it up. As far as C++ is concerned, the internet is truly an amazing library.
Turning all all warnings (-Wall -Wextra -Wpedantic) allowed me to learn several things.
Organically is a good way to describe it. I go overboard with the warning flags in my Makefile. It forces me to really examine the language as I write code:
NORMAL_WARNINGS=-Wall -Wextra -Weffc++
EXTRA_WARNINGS=$(NORMAL_WARNINGS) -Wcast-align -Wcast-qual -Wctor-dtor-privacy -Wdisabled-optimization -Wformat=2 -Winit-self -Wlogical-op -Wmissing-declarations -Wmissing-include-dirs -Wnoexcept -Wold-style-cast -Woverloaded-virtual -Wredundant-decls -Wshadow -Wsign-conversion -Wsign-promo -Wstrict-null-sentinel -Wstrict-overflow=5 -Wswitch-default -Wundef -Wno-unused
MAX_WARNINGS=$(EXTRA_WARNINGS) -Wabi -Waggregate-return -Wconversion -Winline -Winvalid-pch -Wmissing-format-attribute -Wno-long-long -Wnormalized=nfc -Wpadded -Wstack-protector -Wstrict-aliasing=3 -Wswitch-enum -Wunsafe-loop-optimizations -Wzero-as-null-pointer-constant
CXXFLAGS=-g -O3 -m64 -ansi -std=c++11 -flto -march=native -mtune=native -pedantic $(MAX_WARNINGS)
I learned C++ prior to standardization (1996), so I’m starting with coding to the C++11 standard and moving forward from there. I’ve found that the C++ Reference is the most helpful to me (it is up-to-date and tells you which standard(s) a particular feature is available in). Additionally, I have been heavily relying on StackOverflow for more specific questions (i.e., how to use feature x). I picked up used copies of The C++ Standard Library and the C++11 edition of Stroustrop. My advice is to start small, code to a specific standard, and use all of the error and warning flags when compiling.
French and OCaml.
Maybe http://web.archive.org/web/20161102130121/http://archives.pps.univ-paris-diderot.fr/Livres/ora/DA-OCAML/index.html will help with both :)
I’m gonna try to achieve mastery in Clojure and French, both of which I know a fair bit of (though I’m “fluent” in Clojure, but by far not in French).
In a more abstract way, I’d like to get myself to do more things regardless of others. I’m suffering from FOMO every now and then, leading me to not do anything I’d like to do, like going on a weekend trip.
I’d like to know more statistics. What are the methods, why do they work, when should they be used.
I’d like to learn how to be more rational. Become better at identifying falsehood or at least information based on shaky foundations.
This is practically my list too. Statistics is on there, for better solving problems computationally, and also as a vehicle to making decisions more strongly linked to facts.
This is an ongoing effort of mine to become a better engineer and take full control over my work situation. I want to get to a place where I set my own schedule and ideally people don’t question me. It’s a stretch goal but I’m certain achievable, given that I’ve already reached some autonomy.
(This might only be achievable by changing employers, one way or another, but my current employer has given an impression of being supportive of this.)
I will be executing in 2019. There’s no need to learn anything new.
With luck, you will be learning what you didn’t know you needed, in order to execute. If not, then I feel sorry for you.
Knowing less is knowing more.
Are you interested in zen?
Exploration vs Explotation
I mostly code in Go right now. I want to finish learning rust, and dive into C later in the year. I only briefly touched on C in college. Is K&R still king?
Is K&R still king?
Is K&R still king?
It’s king-ish. But, it’s the starting point. It’s a pretty old book. The latest edition (2nd edition) is compliant with C89, while the modern iteration of the standard is C11 (and C17/C18 as bug-fix iterations).
Got any recommendations on something more up to date that is still good?
Jens Gustedt works on a free PDF book called Modern C. Imo, it’s a nice addition to K&R. There are other sources such as “Learn C the Hard Way”, but I’ve never read, and I heard it teaches some bad practices, so I wouldn’t recommend (just in case you find it online).
I love to see folks improve themselves, esp learning new things, but I’d time box this to 50 hours or less. Something that closely aligns is to understand linking, symbol visibility, debugging, strace, eBPF, etc. C is impossible to use correctly.
you like rust.
You caught me. Was I that obvious?
K&R is still the best starting point. Even if you end up working on a project that uses C99 or C11 features, it will be worth it for the cultural/historical context. And there is still much code written in C89 (Linux for example).
Where you go from there depends on what you want to do, but if you want to keep it old school, Deep C Secrets is another great book written for ANSI C with no modern equal.
Sounds like a plan. I order K&R after the holidays. Thanks.
Haskell, but properly. I know the language to a point but trail off when it comes to monads, handling state, and some of the more interesting sides of the language the deeper you get into it.
I’d like to put more time into learning a language. I know bits and pieces of Japanese, and Lojban (one may be more useful than the other… I believe). Would be nice to have something of a conversation in one of them.
Would also like to go bouldering outdoors at some point. I’ve been climbing at an indoor gym for about six months now, steadily getting better, and want to give the outdoors a try. If I injure myself at least my other two goals don’t require working legs.
I’m not really sure what I think about tech in general TBH. I like solving problems for people and I am good at it, but I don’t see much that looks interesting that I couldn’t learn as needed.
How to teach toddlers math, mostly. The Larger will be four in June, and the Smaller two in March, and they both seem to be interested in numbers, as far as I can tell. Trying to stay ahead of them is going to be increasingly time consuming, I fear.
Otherwise, I need to develop some Mr Manager Man skills, in particular, the ability to stay organized and focussed in the face of chaos from above and below. Technically, I may try and finish off some of the video related stuff I was playing with in OCaml.
For math, look up ViHart. If you don’t already know about her, she makes some great videos with interesting math concepts. The videos are probably not what you’re looking for with a 2 and 4 year old, but they may give you ideas and inspiration for making math fun.
For manager skills, what helped me the most was a Bullet Journal. Really all you need a single paper book to put everything in. I started with a $1 composition notebook. The bullet journal really only gave me a smaller size with more pages and, importantly, the idea to have an index. But I can’t overstate how much my organization improved by simply having a single place for everything, personal goals, work goals, meeting notes, daily notes about my direct reports, etc.
I tried text files and phone apps. Nothing provides the flexibility of paper. The one thing I missed was searching, which is handled by having a decent index.
I think I may want to study satisfiability: there are a lot of problems that can be solved elegantly by “expressing” them in SAT and letting a solver find a solution. I’m interested in the practical aspect of using solvers and expressing problems as boolean expressions and in the underlying mechanical techniques for implementing solvers. If anyone has reading recommendations for the topic, I’d love to hear them.
Swift and maybe Machine Learning
After 20 years of Java, and the last couple of years re-learning C++ and all the nice stuff that C++11 and C++14 offer, I am interested to see if Rust can offer a nice sweet spot between the two, i.e. safer (by default) than C++ but more system level than Java.
I want to learn about Site Reliability Engineering and System Programming next year. I recently moved to an infrastructure team so I’m excited about expanding my knowledge into that area. I also want to improve my triaging/ debugging skills, get back into public speaking and do some mentoring.
I also need to go beyond my A1 German and I want to learn more about sound synthesis.
Mostly going to focus on learning guitar. After owning a guitar for 25 years, knowing a few chords and able to butcher a solo, about 18 months ago I started to actually practice; and the enjoyment I get now that I can play along to songs with the original recordings is an immense difference. I want to continue learning, and be able to make music. Maybe play with others in a band? Just for fun, that is: I’m 40 and have a family to support; I’m under no illusions of making it big, and I don’t plan on giving up the day job just yet :-)
If I find room for some tech learning I’d probably learn ClojureScript. I’ve done backend stuff all my life, and would love to be able to make simple frontends for the games backends I’m toying with.
Son is incredibly into Minecraft, and loves mods, so I’ve considered trying to learn more about mod creation etc. Might be a nice oppurtunity to learn to reverse engineer on the JVM.
Playing with other people is the best possible way to get better, at least along those axes you are interested in. I do some scales and exercises, but never have more fun than when Old Man Band manages to get together. In particular, having a drummer is key.
I’m 47, and have two kids under the age of four, so time is precious, but one night a week or so jamming out has made me a significantly better player.
In addition to jamming with other people, having a teacher for a while helps to avoid practicing your own mistakes.
When you don’t have enough time a daily practice plan is helpful, it’s better to practice a little every day than practicing a lot one day week and adding structure to your sessions will help you to improve faster. The tuner and the metronome are a new player’s best friends, always practice in tune and in time :D.
More Nim and more TLA+, given how nicely they are growing.
One thing that I’ve struggled with for a good portion of my life is mental distraction, and in 2018 a decent chunk of my side-project work has been dedicated to chasing one avenue for helping with that: Writing things down so I don’t have to keep them in short term memory, clearing my mind and mental space, so that I can work effectively instead of with a great deal of distraction
That started in 2017 with an ideas.txt file on a server, which in early 2018 was turned into a pretty crude “here are all the ideas I have” site, which has an instance at https://ideas.junglecoder.com.
A few months ago, in an effort to be able to clean up the dreck of SQL queries that got collected in SSMS, I wrote a rather simple desktop journal system that had 3 components:
The combination of being limit the notes I’d seen to a particular topic, being able to keep daily tabs on the scratchpad, and being able to very easily record thoughts that I wanted to revisit later (but not now), helped me focus a lot more than I had previously been able to.
Over the holidays, I’ve been building a web version of the same sort of process, with a focus on making
it easy to capture ideas and/or other bits of information I want to track. After the holidays, I plan on building various bits of the program with an aim of being able to track progress along various goals I have.
I had been wanting to learn F# more recently, but ended up going with Go for this journal program, because I knew I’d hit less roadblocks with using Go for this..
In 2019, I plan on investigating at least a couple things:
So, for me, I suppose I plan on trying to understand myself better, and learn technology as appropriate in helping out there, rather than my usual approach of learning technology because it looks interesting.
I’m about to wrap up my postgrad, so my focus is on skills that will be good in job hunting and increasing my visibility as open source contributor. Right now, my list is:
Since the end of October, I’ve been reading Programming in Ada 2012 by John Barnes. I’ve read to chapter seventeen so far, but I’ve barely been reading it in December at this point.
I plan to finish the book and write my first Ada program in 2019. This will be a simpler reimplementation of my Meta-Machine Code tool taking advantage of what I now know. This will also be the implementation of the tool I distribute widely and build other targetings from. So, I’d like to soon target other machine codes with my tool, which requires learning or becoming more familiar with them. I’m torn between MIPS, ARM, and 6502 as my next target. I certainly know which would be simplest.
I want to actually get around to learning something that’s usable for compiled ‘system’ tools - I do a pretty decent amount of ops/infra management for clients, and I invariably end up writing tools to make repeated tasks simpler/repeatable. For example this year it was 4 tools: one to request, renew, and sync certificates+keys across servers that use them (e.g. across load balancers; app/db servers that are multi-node setups); one to manage HAProxy configs across one or more nodes; one to manage a keepalived multi-node cluster; and one to setup Persona Cluster across multiple nodes.
So far, these are basically mini programs written in (mostly) posix shell. They work, but it’s definitely at the point where something more powerful would simplify some of the code.
I don’t want to go as low-level as C, but I don’t want to just use ruby/python/whatever runtime that then becomes another dependency too.
So far, my thoughts are D (I like the C-ish syntax, it has a memory safe version, and seems to have a good choice of libraries/modules available; or Crystal, which I’m less keen about, but may be more practical, I haven’t looked into either in huge depth yet.
Definitely open to other suggestions (I’m not interested in Go, before someone suggests it)
Seems Go is becoming more mature[*], I’m very interested in it, and it would be nice to diversify from my mostly PHP coding right now. Hopefully I can move some components to Go from PHP :-)
[*] it seems it is packaged now in distributions and there are instructions on how to create distribution packages :-)
Irish, German and French
For Elixir, a good place to get familiar with is https://elixirforum.com/. Super friendly group of people to interact with and ask questions. The quality of responses is generally very high.
Here are a few book recommendations
Mostly the aim is to dive into Jungian psychology and Soviet history.
I look forward improving my skills as a DevOps Engineer by learning Terraform for provisioning and a monitoring stack I’m yet to define.
My plan is to learn Scala 2.12 & Elm 0.19, and to build.. things with them. They’re not The New Hotness, but it’s not retro computing by any means.
I also want to learn much more about certificates, ciphers, PKI, &c. At work, I might learn some SQL Server 2014/6 features I’ve been missing out on.
I’d also like to learn The Fisherman on guitar, and how to record on a budget.
Scala++. It’s great. It made me fall in love with types again after years in dynamically-typed languages.
Something that I have in my mind for some time now is to make an command-line application for atom-atom simulations, so I plan to learn more about physics and chemistry in 2019. I currently work (in the academic world) with bioinformatics, processing genomic data, making pipelines, etc., but working with molecular simulation would be a level-up.
For personal gain - go through the rest of Advent of code in order get more familiar with go, and get back into to ruby (haven’t touched it since 1.8).
For work - trying hard not to think about that now.
Three professional/software goals:
Whenever I do one of these, I end up going in a different direction, but here goes:
I believe 99,99% of the posts here will be 150% off-mark by 31 Dec 2019. Doesn’t really matter.
Yeah, I’ll probably end up retraining as a calligrapher or something (I would find that very interesting!)
This year I wanna expand my toolbelt with tools to help me make better and more reliable software, the tools I’ve chosen to use are:
Apart from that I want to learn more about graphic programming and about type systems
.NET Core: After so long being a generalist and knowing a wide variety of things and not getting far enough, I want to become an expert in all things .NET Core.
React: Finally started learning React this year. I will continue to do so next year.
Anger management: Started it this year and will continue to do so next year.
Thinking fast and slow: Both the book and in action.
As a full time open sourcer and Linux user, I’ve been pleasantly surprised by the dotnet core environment. Both in terms of its own design and how well it actually works on non-Windows platforms. (It’s not fantastic, just surprisingly good.)
Absolutely. It is a breath of fresh air. I longed for something similar for a long time as a fellow Linux user and. NET dev.
I have been building a lot of infrastructure on bare metal at work. After working out all kinds of trade offs for our requirements based mostly on documentation and skimming code, I am dying to do a deep dive on the internals.
I am currently reading through the Kubernetes Developer Guide and I finally want to get involved on some Open Source work. I’m looking at RKE, Moby and maybe Heketi (I’d like to see a Snapshot Class for GlusterFS Storage at some point). “Building Microservices” from Sam Newman seems very interesting to me as well, as I’m very sceptical about performance costs of communication.
On a more personal note, I’m finally getting back to dedicating a more regular schedule to improving my Karate.
I guess I’ll pursue two of my hobbies either I want it or not: creating and enjoying knowledge, and, experimental user interfaces.
On first I’m stuck. I’ve collected so many knowledge about knowledge this year that I can’t already comprehend. Maybe a search engine would help…. or a simple framework.
On experimental UI the situation it’s better with reactive frameworks … I like how any piece of UI can share state with any other piece and adapt in sync to changes …. where I’m stuck with is typography. The old bauhaus / swiss / minimal / static grid based approach has to be completely rethinked. New rules for new screens, and new (virtual, augmented) realities!
More Rust. While I do understand the theory of affine types, I don’t know how it feels in practise.
TLA+. There should be more formal methods and this one seems to have the lowest hanging fruits.
To calm the fuck down, think about the problem at hand for a proper amount of time before “jumping” to a solution. Also, I plan to get myself organized as before kids! Happy holiday everyone!
TLA+, if I find the time.
I also wanted to have another go at learning Japanese, but I’m having a hard time finding a teacher that speaks German and Japanese and does teach via Skype or other means (I’m travelling a lot, so in person meetings are hard).
I want to ship a personal project using Phoenix (Elixir web framework) and learn more about database design and SQL. Rust is also on my list - I would like to write simple CLI apps with it by the summer.
I’ve been teaching myself simple Japanese since summer 2017. That said, I don’t have much motivation to keep learning it outside of it being a fun (i.e. no plans to move there) and challenging hobby, so not sure how long that will last. My focus for 2019 will be kanji.
Also not something you “learn” but I want to start running and exercise next year. I’ve already started running this week so I am ahead of schedule.